From daf04cb101e6b583250141a75cb0f339f4c9d6d1 Mon Sep 17 00:00:00 2001 From: roboticslibrary Date: Wed, 11 Jun 2014 21:00:14 +0200 Subject: [PATCH] '' --- .gitignore | 14 + CMakeLists.txt | 287 + Doxyfile.in | 1749 +++ LICENSE | 23 + LICENSE.GPL | 674 + Modules/FindAtidaq.cmake | 33 + Modules/FindBullet.cmake | 171 + Modules/FindCgal.cmake | 103 + Modules/FindCoin.cmake | 81 + Modules/FindComedi.cmake | 33 + Modules/FindEigen.cmake | 38 + Modules/FindIconv.cmake | 59 + Modules/FindLibXml2.cmake | 52 + Modules/FindLibdc1394.cmake | 66 + Modules/FindOde.cmake | 100 + Modules/FindPqp.cmake | 53 + Modules/FindSoQt.cmake | 81 + Modules/FindSolid.cmake | 73 + Modules/FindZLIB.cmake | 55 + demos/rlAxisControllerDemo/CMakeLists.txt | 12 + .../rlAxisControllerDemo.cpp | 146 + demos/rlCameraDemo/CMakeLists.txt | 15 + demos/rlCameraDemo/rlCameraDemo.cpp | 77 + demos/rlCoachKin/CMakeLists.txt | 114 + demos/rlCoachKin/ConfigurationDelegate.cpp | 102 + demos/rlCoachKin/ConfigurationDelegate.h | 60 + demos/rlCoachKin/ConfigurationModel.cpp | 189 + demos/rlCoachKin/ConfigurationModel.h | 67 + demos/rlCoachKin/MainWindow.cpp | 211 + demos/rlCoachKin/MainWindow.h | 105 + demos/rlCoachKin/OperationalDelegate.cpp | 100 + demos/rlCoachKin/OperationalDelegate.h | 58 + demos/rlCoachKin/OperationalModel.cpp | 255 + demos/rlCoachKin/OperationalModel.h | 64 + demos/rlCoachKin/Server.cpp | 44 + demos/rlCoachKin/Server.h | 48 + demos/rlCoachKin/Socket.cpp | 176 + demos/rlCoachKin/Socket.h | 49 + demos/rlCoachKin/rlCoachKin.cpp | 59 + demos/rlCoachKin/rlCoachKin.desktop | 8 + demos/rlCoachMdl/CMakeLists.txt | 114 + demos/rlCoachMdl/ConfigurationDelegate.cpp | 105 + demos/rlCoachMdl/ConfigurationDelegate.h | 60 + demos/rlCoachMdl/ConfigurationModel.cpp | 219 + demos/rlCoachMdl/ConfigurationModel.h | 67 + demos/rlCoachMdl/MainWindow.cpp | 214 + demos/rlCoachMdl/MainWindow.h | 105 + demos/rlCoachMdl/OperationalDelegate.cpp | 100 + demos/rlCoachMdl/OperationalDelegate.h | 58 + demos/rlCoachMdl/OperationalModel.cpp | 257 + demos/rlCoachMdl/OperationalModel.h | 64 + demos/rlCoachMdl/Server.cpp | 44 + demos/rlCoachMdl/Server.h | 48 + demos/rlCoachMdl/Socket.cpp | 176 + demos/rlCoachMdl/Socket.h | 49 + demos/rlCoachMdl/rlCoachMdl.cpp | 59 + demos/rlCoachMdl/rlCoachMdl.desktop | 8 + demos/rlCollisionDemo/CMakeLists.txt | 99 + demos/rlCollisionDemo/MainWindow.cpp | 260 + demos/rlCollisionDemo/MainWindow.h | 74 + demos/rlCollisionDemo/TestWidget.cpp | 102 + demos/rlCollisionDemo/TestWidget.h | 59 + demos/rlCollisionDemo/rlCollisionDemo.cpp | 44 + demos/rlCollisionDemo/rlCollisionDemo.desktop | 8 + demos/rlDenavitHartenbergDemo/CMakeLists.txt | 11 + .../rlDenavitHartenbergDemo.cpp | 83 + demos/rlDynamics1Demo/CMakeLists.txt | 19 + demos/rlDynamics1Demo/rlDynamics1Demo.cpp | 88 + demos/rlDynamics2Demo/CMakeLists.txt | 19 + demos/rlDynamics2Demo/rlDynamics2Demo.cpp | 216 + demos/rlGripperDemo/CMakeLists.txt | 12 + demos/rlGripperDemo/rlGripperDemo.cpp | 61 + demos/rlInterpolatorDemo/CMakeLists.txt | 11 + .../rlInterpolatorDemo/rlInterpolatorDemo.cpp | 61 + demos/rlInversePositionDemo/CMakeLists.txt | 21 + .../rlInversePositionDemo.cpp | 104 + demos/rlJacobianDemo/CMakeLists.txt | 19 + demos/rlJacobianDemo/rlJacobianDemo.cpp | 93 + demos/rlKalmanDemo/CMakeLists.txt | 11 + demos/rlKalmanDemo/rlKalmanDemo.cpp | 106 + demos/rlLaserDemo/CMakeLists.txt | 11 + demos/rlLaserDemo/rlLaserDemo.cpp | 152 + demos/rlLoadXmlDemo/CMakeLists.txt | 11 + demos/rlLoadXmlDemo/rlLoadXmlDemo.cpp | 46 + demos/rlPcaDemo/CMakeLists.txt | 11 + demos/rlPcaDemo/hald-ingredients.txt | 15 + demos/rlPcaDemo/hald.txt | 15 + demos/rlPcaDemo/rlPcaDemo.cpp | 95 + demos/rlPlanDemo/CMakeLists.txt | 146 + demos/rlPlanDemo/ConfigurationDelegate.cpp | 97 + demos/rlPlanDemo/ConfigurationDelegate.h | 58 + demos/rlPlanDemo/ConfigurationModel.cpp | 161 + demos/rlPlanDemo/ConfigurationModel.h | 59 + demos/rlPlanDemo/ConfigurationSpaceScene.cpp | 293 + demos/rlPlanDemo/ConfigurationSpaceScene.h | 113 + demos/rlPlanDemo/ConfigurationSpaceThread.cpp | 112 + demos/rlPlanDemo/ConfigurationSpaceThread.h | 63 + demos/rlPlanDemo/MainWindow.cpp | 1810 +++ demos/rlPlanDemo/MainWindow.h | 248 + demos/rlPlanDemo/PlannerModel.cpp | 446 + demos/rlPlanDemo/PlannerModel.h | 59 + demos/rlPlanDemo/Thread.cpp | 396 + demos/rlPlanDemo/Thread.h | 129 + demos/rlPlanDemo/Viewer.cpp | 983 ++ demos/rlPlanDemo/Viewer.h | 283 + demos/rlPlanDemo/rlPlanDemo.cpp | 61 + demos/rlPlanDemo/rlPlanDemo.desktop | 8 + demos/rlPrmDemo/CMakeLists.txt | 25 + demos/rlPrmDemo/rlPrmDemo.cpp | 115 + demos/rlPumaDemo/CMakeLists.txt | 19 + demos/rlPumaDemo/rlPumaDemo.cpp | 121 + demos/rlQuaternionDemo/CMakeLists.txt | 11 + demos/rlQuaternionDemo/rlQuaternionDemo.cpp | 86 + demos/rlRangeSensorDemo/CMakeLists.txt | 11 + demos/rlRangeSensorDemo/rlRangeSensorDemo.cpp | 108 + demos/rlRodriguesDemo/CMakeLists.txt | 11 + demos/rlRodriguesDemo/rlRodriguesDemo.cpp | 60 + .../CMakeLists.txt | 14 + .../rlSixAxisForceTorqueSensorDemo.cpp | 106 + demos/rlSpatialDemo/CMakeLists.txt | 11 + demos/rlSpatialDemo/rlSpatialDemo.cpp | 306 + demos/rlThreadsDemo/CMakeLists.txt | 11 + demos/rlThreadsDemo/rlThreadsDemo.cpp | 88 + demos/rlTimerDemo/CMakeLists.txt | 11 + demos/rlTimerDemo/rlTimerDemo.cpp | 55 + .../rlTrapezoidalVelocityDemo/CMakeLists.txt | 11 + .../rlTrapezoidalVelocityDemo.cpp | 67 + demos/rlViewDemo/CMakeLists.txt | 69 + demos/rlViewDemo/rlViewDemo.cpp | 71 + demos/rlViewDemo/rlViewDemo.desktop | 8 + examples/CMakeLists.txt | 29 + examples/README | 1 + examples/rlkin/mitsubishi-rv6sl.xml | 173 + examples/rlkin/rlkin.xsd | 203 + examples/rlkin/staeubli-tx60l.xml | 167 + examples/rlkin/unimation-puma560.xml | 167 + examples/rlmdl/mitsubishi-rv6sl.xml | 278 + examples/rlmdl/planar2.xml | 119 + examples/rlmdl/rlmdl.xsd | 192 + examples/rlmdl/unimation-puma560.xml | 324 + .../rlplan/mitsubishi-rv6sl_boxes_prm.xml | 95 + .../mitsubishi-rv6sl_boxes_rrtConCon.xml | 93 + examples/rlplan/rlplan.xsd | 569 + examples/rlplan/staeubli-tx60l_wall_prm.xml | 93 + .../rlplan/staeubli-tx60l_wall_rrtConCon.xml | 91 + .../rlplan/unimation-puma560_boxes_prm.xml | 70 + .../unimation-puma560_boxes_rrtConCon.xml | 69 + examples/rlsg/boxes.wrl | 123 + .../rlsg/mitsubishi-rv6sl.convex/link0.wrl | 469 + .../rlsg/mitsubishi-rv6sl.convex/link1.wrl | 891 ++ .../rlsg/mitsubishi-rv6sl.convex/link2.wrl | 739 + .../rlsg/mitsubishi-rv6sl.convex/link3.wrl | 829 + .../rlsg/mitsubishi-rv6sl.convex/link4.wrl | 1051 ++ .../rlsg/mitsubishi-rv6sl.convex/link5.wrl | 789 + .../rlsg/mitsubishi-rv6sl.convex/link6.wrl | 463 + .../mitsubishi-rv6sl.wrl | 63 + examples/rlsg/mitsubishi-rv6sl/link0.wrl | 2806 ++++ examples/rlsg/mitsubishi-rv6sl/link1.wrl | 1992 +++ examples/rlsg/mitsubishi-rv6sl/link2.wrl | 3135 ++++ examples/rlsg/mitsubishi-rv6sl/link3.wrl | 1829 +++ examples/rlsg/mitsubishi-rv6sl/link4.wrl | 4063 +++++ examples/rlsg/mitsubishi-rv6sl/link5.wrl | 1487 ++ examples/rlsg/mitsubishi-rv6sl/link6.wrl | 835 + .../mitsubishi-rv6sl/mitsubishi-rv6sl.wrl | 63 + .../rlsg/mitsubishi-rv6sl_boxes.convex.wrl | 14 + .../rlsg/mitsubishi-rv6sl_boxes.convex.xml | 17 + examples/rlsg/mitsubishi-rv6sl_boxes.wrl | 14 + examples/rlsg/mitsubishi-rv6sl_boxes.xml | 17 + examples/rlsg/rlsg.xsd | 31 + examples/rlsg/scene.wrl | 44 + examples/rlsg/scene.xml | 11 + examples/rlsg/staeubli-tx60l.convex/link0.wrl | 489 + examples/rlsg/staeubli-tx60l.convex/link1.wrl | 1337 ++ examples/rlsg/staeubli-tx60l.convex/link2.wrl | 1017 ++ examples/rlsg/staeubli-tx60l.convex/link3.wrl | 913 ++ examples/rlsg/staeubli-tx60l.convex/link4.wrl | 701 + examples/rlsg/staeubli-tx60l.convex/link5.wrl | 257 + examples/rlsg/staeubli-tx60l.convex/link6.wrl | 161 + .../staeubli-tx60l.convex/staeubli-tx60l.wrl | 63 + examples/rlsg/staeubli-tx60l/link0.wrl | 3328 ++++ examples/rlsg/staeubli-tx60l/link1.wrl | 3726 +++++ examples/rlsg/staeubli-tx60l/link2.wrl | 1821 +++ examples/rlsg/staeubli-tx60l/link3.wrl | 3114 ++++ examples/rlsg/staeubli-tx60l/link4.wrl | 12773 ++++++++++++++++ examples/rlsg/staeubli-tx60l/link5.wrl | 558 + examples/rlsg/staeubli-tx60l/link6.wrl | 635 + .../rlsg/staeubli-tx60l/staeubli-tx60l.wrl | 63 + examples/rlsg/staeubli-tx60l_wall.convex.wrl | 15 + examples/rlsg/staeubli-tx60l_wall.convex.xml | 17 + examples/rlsg/staeubli-tx60l_wall.wrl | 15 + examples/rlsg/staeubli-tx60l_wall.xml | 17 + examples/rlsg/unimation-puma560.convex.wrl | 11 + examples/rlsg/unimation-puma560.convex.xml | 14 + .../rlsg/unimation-puma560.convex/link0.wrl | 102 + .../rlsg/unimation-puma560.convex/link1.wrl | 100 + .../rlsg/unimation-puma560.convex/link2.wrl | 122 + .../rlsg/unimation-puma560.convex/link3.wrl | 55 + .../rlsg/unimation-puma560.convex/link4.wrl | 97 + .../rlsg/unimation-puma560.convex/link5.wrl | 71 + .../rlsg/unimation-puma560.convex/link6.wrl | 77 + .../unimation-puma560.wrl | 63 + examples/rlsg/unimation-puma560.wrl | 11 + examples/rlsg/unimation-puma560.xml | 14 + examples/rlsg/unimation-puma560/link0.wrl | 227 + examples/rlsg/unimation-puma560/link1.wrl | 114 + examples/rlsg/unimation-puma560/link2.wrl | 174 + examples/rlsg/unimation-puma560/link3.wrl | 61 + examples/rlsg/unimation-puma560/link4.wrl | 128 + examples/rlsg/unimation-puma560/link5.wrl | 68 + examples/rlsg/unimation-puma560/link6.wrl | 62 + .../unimation-puma560/unimation-puma560.wrl | 62 + .../rlsg/unimation-puma560_boxes.convex.wrl | 13 + .../rlsg/unimation-puma560_boxes.convex.xml | 17 + examples/rlsg/unimation-puma560_boxes.wrl | 13 + examples/rlsg/unimation-puma560_boxes.xml | 17 + examples/rlsg/wall.wrl | 733 + extras/3rdpartylicenses/LICENSE.BSL.txt | 23 + extras/3rdpartylicenses/LICENSE.FREE_USE.txt | 22 + extras/3rdpartylicenses/LICENSE.GPL.txt | 674 + extras/3rdpartylicenses/LICENSE.LGPL.txt | 165 + extras/3rdpartylicenses/LICENSE_QPL.txt | 110 + extras/3rdpartylicenses/all_sources.txt | 31 + extras/3rdpartylicenses/boost.txt | 23 + extras/3rdpartylicenses/bullet.txt | 19 + extras/3rdpartylicenses/cgal.txt | 42 + extras/3rdpartylicenses/coin.txt | 339 + extras/3rdpartylicenses/eigen.txt | 373 + extras/3rdpartylicenses/ode.txt | 502 + extras/3rdpartylicenses/pqp.txt | 33 + extras/3rdpartylicenses/qt.txt | 377 + extras/3rdpartylicenses/simage.txt | 8 + extras/3rdpartylicenses/solid.txt | 62 + extras/3rdpartylicenses/soqt.txt | 11 + extras/3rdpartylicenses/xml2.txt | 27 + extras/3rdpartylicenses/zlib.txt | 115 + extras/debian/README.txt | 35 + extras/debian/changelog | 29 + extras/debian/compat | 1 + extras/debian/control | 58 + extras/debian/copyright | 58 + extras/debian/librl-dev.install | 4 + extras/debian/librl.install | 3 + extras/debian/rules | 18 + extras/w32installer/CMakeLists.txt | 386 + extras/w32installer/README.txt | 48 + extras/wrlview/CMakeLists.txt | 84 + extras/wrlview/MainWindow.cpp | 639 + extras/wrlview/MainWindow.h | 142 + extras/wrlview/wrlview.cpp | 42 + extras/wrlview/wrlview.desktop | 8 + extras/wrlview/wrlview.ico | Bin 0 -> 3247 bytes extras/wrlview/wrlview.rc | 1 + extras/wrlview/wrlview.svg | 8 + rl-config.cmake.in | 34 + robotics-library.ico | Bin 0 -> 10620 bytes robotics-library.rc | 1 + robotics-library.svg | 9 + src/rl/hal/Ati.cpp | 208 + src/rl/hal/Ati.h | 102 + src/rl/hal/AxisController.cpp | 56 + src/rl/hal/AxisController.h | 61 + src/rl/hal/CMakeLists.txt | 180 + src/rl/hal/Camera.cpp | 42 + src/rl/hal/Camera.h | 59 + src/rl/hal/CartesianPositionActuator.cpp | 42 + src/rl/hal/CartesianPositionActuator.h | 55 + src/rl/hal/CartesianPositionSensor.cpp | 42 + src/rl/hal/CartesianPositionSensor.h | 55 + src/rl/hal/Coach.cpp | 110 + src/rl/hal/Coach.h | 78 + src/rl/hal/Com.cpp | 54 + src/rl/hal/Com.h | 56 + src/rl/hal/ComException.cpp | 42 + src/rl/hal/ComException.h | 51 + src/rl/hal/Comedi.cpp | 266 + src/rl/hal/Comedi.h | 98 + src/rl/hal/Dc1394Camera.cpp | 1265 ++ src/rl/hal/Dc1394Camera.h | 378 + src/rl/hal/Dc1394CameraException.cpp | 84 + src/rl/hal/Dc1394CameraException.h | 73 + src/rl/hal/Device.cpp | 67 + src/rl/hal/Device.h | 83 + src/rl/hal/DeviceException.cpp | 42 + src/rl/hal/DeviceException.h | 51 + src/rl/hal/Exception.cpp | 42 + src/rl/hal/Exception.h | 51 + src/rl/hal/ForceSensor.cpp | 42 + src/rl/hal/ForceSensor.h | 70 + src/rl/hal/Gnuplot.cpp | 170 + src/rl/hal/Gnuplot.h | 81 + src/rl/hal/Gripper.cpp | 42 + src/rl/hal/Gripper.h | 57 + src/rl/hal/JointPositionActuator.cpp | 42 + src/rl/hal/JointPositionActuator.h | 55 + src/rl/hal/JointPositionSensor.cpp | 42 + src/rl/hal/JointPositionSensor.h | 55 + src/rl/hal/JointTorqueActuator.cpp | 42 + src/rl/hal/JointTorqueActuator.h | 55 + src/rl/hal/JointTorqueSensor.cpp | 42 + src/rl/hal/JointTorqueSensor.h | 55 + src/rl/hal/JointVelocityActuator.cpp | 42 + src/rl/hal/JointVelocityActuator.h | 55 + src/rl/hal/JointVelocitySensor.cpp | 42 + src/rl/hal/JointVelocitySensor.h | 55 + src/rl/hal/Jr3.cpp | 188 + src/rl/hal/Jr3.h | 91 + src/rl/hal/LeuzeRs4.cpp | 729 + src/rl/hal/LeuzeRs4.h | 152 + src/rl/hal/Lidar.cpp | 42 + src/rl/hal/Lidar.h | 57 + src/rl/hal/MitsubishiH7.cpp | 1414 ++ src/rl/hal/MitsubishiH7.h | 600 + src/rl/hal/MitsubishiH7Exception.cpp | 49 + src/rl/hal/MitsubishiH7Exception.h | 53 + src/rl/hal/RangeSensor.cpp | 42 + src/rl/hal/RangeSensor.h | 70 + src/rl/hal/SchmersalLss300.cpp | 613 + src/rl/hal/SchmersalLss300.h | 149 + src/rl/hal/SchunkFpsF5.cpp | 401 + src/rl/hal/SchunkFpsF5.h | 130 + src/rl/hal/Serial.cpp | 882 ++ src/rl/hal/Serial.h | 250 + src/rl/hal/SickLms200.cpp | 1323 ++ src/rl/hal/SickLms200.h | 187 + src/rl/hal/SickS300.cpp | 401 + src/rl/hal/SickS300.h | 93 + src/rl/hal/SixAxisForceTorqueSensor.cpp | 87 + src/rl/hal/SixAxisForceTorqueSensor.h | 81 + src/rl/hal/Socket.cpp | 301 + src/rl/hal/Socket.h | 73 + src/rl/hal/TcpSocket.cpp | 54 + src/rl/hal/TcpSocket.h | 53 + src/rl/hal/TimeoutException.cpp | 42 + src/rl/hal/TimeoutException.h | 51 + src/rl/hal/TorqueSensor.cpp | 42 + src/rl/hal/TorqueSensor.h | 70 + src/rl/hal/UdpSocket.cpp | 54 + src/rl/hal/UdpSocket.h | 53 + src/rl/hal/WeissWsg50.cpp | 1006 ++ src/rl/hal/WeissWsg50.h | 341 + src/rl/hal/endian.cpp | 201 + src/rl/hal/endian.h | 118 + src/rl/hal/types.h | 43 + src/rl/kin/CMakeLists.txt | 78 + src/rl/kin/Element.cpp | 42 + src/rl/kin/Element.h | 53 + src/rl/kin/Exception.cpp | 42 + src/rl/kin/Exception.h | 51 + src/rl/kin/Frame.cpp | 43 + src/rl/kin/Frame.h | 57 + src/rl/kin/Joint.cpp | 65 + src/rl/kin/Joint.h | 90 + src/rl/kin/Kinematics.cpp | 1031 ++ src/rl/kin/Kinematics.h | 388 + src/rl/kin/Link.cpp | 47 + src/rl/kin/Link.h | 69 + src/rl/kin/Prismatic.cpp | 80 + src/rl/kin/Prismatic.h | 62 + src/rl/kin/Puma.cpp | 378 + src/rl/kin/Puma.h | 122 + src/rl/kin/Revolute.cpp | 93 + src/rl/kin/Revolute.h | 62 + src/rl/kin/Rhino.cpp | 266 + src/rl/kin/Rhino.h | 107 + src/rl/kin/Transform.cpp | 52 + src/rl/kin/Transform.h | 65 + src/rl/math/ArticulatedBodyInertia.h | 200 + src/rl/math/ArticulatedBodyInertia.hxx | 63 + src/rl/math/CMakeLists.txt | 62 + src/rl/math/Cubic.h | 107 + src/rl/math/ForceVector.h | 161 + src/rl/math/ForceVector.hxx | 48 + src/rl/math/Kalman.h | 148 + src/rl/math/Matrix.h | 113 + src/rl/math/MatrixBaseAddons.h | 89 + src/rl/math/MotionVector.h | 169 + src/rl/math/MotionVector.hxx | 60 + src/rl/math/Pid.h | 103 + src/rl/math/PlueckerTransform.h | 199 + src/rl/math/PlueckerTransform.hxx | 141 + src/rl/math/Quaternion.h | 45 + src/rl/math/QuaternionBaseAddons.h | 51 + src/rl/math/Quintic.h | 126 + src/rl/math/Real.h | 55 + src/rl/math/RigidBodyInertia.h | 197 + src/rl/math/RigidBodyInertia.hxx | 51 + src/rl/math/Rotation.h | 54 + src/rl/math/Spatial.h | 63 + src/rl/math/Transform.h | 252 + src/rl/math/TrapezoidalVelocity.h | 773 + src/rl/math/Unit.h | 244 + src/rl/math/Vector.h | 73 + src/rl/math/dummy.cpp | 0 src/rl/mdl/Body.cpp | 138 + src/rl/mdl/Body.h | 91 + src/rl/mdl/CMakeLists.txt | 96 + src/rl/mdl/Compound.cpp | 77 + src/rl/mdl/Compound.h | 122 + src/rl/mdl/Cylindrical.cpp | 66 + src/rl/mdl/Cylindrical.h | 53 + src/rl/mdl/Dynamic.cpp | 390 + src/rl/mdl/Dynamic.h | 189 + src/rl/mdl/Element.cpp | 55 + src/rl/mdl/Element.h | 78 + src/rl/mdl/Exception.cpp | 42 + src/rl/mdl/Exception.h | 51 + src/rl/mdl/Factory.cpp | 50 + src/rl/mdl/Factory.h | 57 + src/rl/mdl/Fixed.cpp | 42 + src/rl/mdl/Fixed.h | 51 + src/rl/mdl/Frame.cpp | 121 + src/rl/mdl/Frame.h | 107 + src/rl/mdl/Helical.cpp | 76 + src/rl/mdl/Helical.h | 57 + src/rl/mdl/Joint.cpp | 323 + src/rl/mdl/Joint.h | 156 + src/rl/mdl/Kinematic.cpp | 310 + src/rl/mdl/Kinematic.h | 165 + src/rl/mdl/Metric.cpp | 248 + src/rl/mdl/Metric.h | 77 + src/rl/mdl/Model.cpp | 517 + src/rl/mdl/Model.h | 223 + src/rl/mdl/Prismatic.cpp | 56 + src/rl/mdl/Prismatic.h | 53 + src/rl/mdl/Revolute.cpp | 130 + src/rl/mdl/Revolute.h | 59 + src/rl/mdl/Spherical.cpp | 85 + src/rl/mdl/Spherical.h | 57 + src/rl/mdl/Transform.cpp | 129 + src/rl/mdl/Transform.h | 98 + src/rl/mdl/World.cpp | 58 + src/rl/mdl/World.h | 55 + src/rl/mdl/XmlFactory.cpp | 337 + src/rl/mdl/XmlFactory.h | 53 + src/rl/plan/AddRrtConCon.cpp | 127 + src/rl/plan/AddRrtConCon.h | 64 + src/rl/plan/AdvancedOptimizer.cpp | 140 + src/rl/plan/AdvancedOptimizer.h | 57 + src/rl/plan/BridgeSampler.cpp | 93 + src/rl/plan/BridgeSampler.h | 58 + src/rl/plan/CMakeLists.txt | 140 + src/rl/plan/DistanceModel.cpp | 189 + src/rl/plan/DistanceModel.h | 63 + src/rl/plan/Eet.cpp | 480 + src/rl/plan/Eet.h | 131 + src/rl/plan/Exception.cpp | 42 + src/rl/plan/Exception.h | 51 + src/rl/plan/GaussianSampler.cpp | 102 + src/rl/plan/GaussianSampler.h | 60 + src/rl/plan/MatrixPtr.h | 41 + src/rl/plan/Model.cpp | 541 + src/rl/plan/Model.h | 140 + src/rl/plan/Optimizer.cpp | 44 + src/rl/plan/Optimizer.h | 63 + src/rl/plan/Orthogonal_k_neighbor_search.h | 145 + src/rl/plan/Planner.cpp | 81 + src/rl/plan/Planner.h | 96 + src/rl/plan/Prm.cpp | 423 + src/rl/plan/Prm.h | 220 + src/rl/plan/PrmUtilityGuided.cpp | 231 + src/rl/plan/PrmUtilityGuided.h | 105 + src/rl/plan/RealList.h | 41 + src/rl/plan/RecursiveVerifier.cpp | 91 + src/rl/plan/RecursiveVerifier.h | 56 + src/rl/plan/Rrt.cpp | 470 + src/rl/plan/Rrt.h | 199 + src/rl/plan/RrtCon.cpp | 84 + src/rl/plan/RrtCon.h | 55 + src/rl/plan/RrtConCon.cpp | 101 + src/rl/plan/RrtConCon.h | 55 + src/rl/plan/RrtDual.cpp | 117 + src/rl/plan/RrtDual.h | 57 + src/rl/plan/RrtExtCon.cpp | 101 + src/rl/plan/RrtExtCon.h | 55 + src/rl/plan/RrtExtExt.cpp | 101 + src/rl/plan/RrtExtExt.h | 55 + src/rl/plan/RrtGoalBias.cpp | 75 + src/rl/plan/RrtGoalBias.h | 65 + src/rl/plan/Sampler.cpp | 57 + src/rl/plan/Sampler.h | 59 + src/rl/plan/SequentialVerifier.cpp | 74 + src/rl/plan/SequentialVerifier.h | 53 + src/rl/plan/SimpleModel.cpp | 117 + src/rl/plan/SimpleModel.h | 68 + src/rl/plan/SimpleOptimizer.cpp | 86 + src/rl/plan/SimpleOptimizer.h | 53 + src/rl/plan/TransformPtr.h | 41 + src/rl/plan/UniformSampler.cpp | 73 + src/rl/plan/UniformSampler.h | 60 + src/rl/plan/Vector3List.h | 41 + src/rl/plan/Vector3Ptr.h | 41 + src/rl/plan/VectorList.h | 41 + src/rl/plan/VectorPtr.h | 41 + src/rl/plan/Verifier.cpp | 43 + src/rl/plan/Verifier.h | 59 + src/rl/plan/Viewer.cpp | 41 + src/rl/plan/Viewer.h | 88 + src/rl/plan/WorkspaceSphere.cpp | 47 + src/rl/plan/WorkspaceSphere.h | 67 + src/rl/plan/WorkspaceSphereExplorer.cpp | 292 + src/rl/plan/WorkspaceSphereExplorer.h | 135 + src/rl/plan/WorkspaceSphereList.h | 42 + src/rl/plan/WorkspaceSphereVector.h | 42 + src/rl/sg/Body.cpp | 145 + src/rl/sg/Body.h | 100 + src/rl/sg/CMakeLists.txt | 215 + src/rl/sg/DepthScene.cpp | 42 + src/rl/sg/DepthScene.h | 57 + src/rl/sg/DistanceScene.cpp | 190 + src/rl/sg/DistanceScene.h | 72 + src/rl/sg/Exception.cpp | 42 + src/rl/sg/Exception.h | 51 + src/rl/sg/Model.cpp | 110 + src/rl/sg/Model.h | 82 + src/rl/sg/RaycastScene.cpp | 42 + src/rl/sg/RaycastScene.h | 59 + src/rl/sg/Scene.cpp | 357 + src/rl/sg/Scene.h | 83 + src/rl/sg/Shape.cpp | 62 + src/rl/sg/Shape.h | 66 + src/rl/sg/SimpleScene.cpp | 95 + src/rl/sg/SimpleScene.h | 63 + src/rl/sg/bullet/Body.cpp | 106 + src/rl/sg/bullet/Body.h | 68 + src/rl/sg/bullet/Model.cpp | 60 + src/rl/sg/bullet/Model.h | 60 + src/rl/sg/bullet/Scene.cpp | 332 + src/rl/sg/bullet/Scene.h | 120 + src/rl/sg/bullet/Shape.cpp | 216 + src/rl/sg/bullet/Shape.h | 71 + src/rl/sg/ode/Body.cpp | 113 + src/rl/sg/ode/Body.h | 68 + src/rl/sg/ode/Model.cpp | 63 + src/rl/sg/ode/Model.h | 62 + src/rl/sg/ode/Scene.cpp | 276 + src/rl/sg/ode/Scene.h | 81 + src/rl/sg/ode/Shape.cpp | 186 + src/rl/sg/ode/Shape.h | 68 + src/rl/sg/pqp/Body.cpp | 78 + src/rl/sg/pqp/Body.h | 66 + src/rl/sg/pqp/Model.cpp | 60 + src/rl/sg/pqp/Model.h | 58 + src/rl/sg/pqp/Scene.cpp | 164 + src/rl/sg/pqp/Scene.h | 68 + src/rl/sg/pqp/Shape.cpp | 144 + src/rl/sg/pqp/Shape.h | 82 + src/rl/sg/so/Body.cpp | 136 + src/rl/sg/so/Body.h | 74 + src/rl/sg/so/Model.cpp | 94 + src/rl/sg/so/Model.h | 68 + src/rl/sg/so/Scene.cpp | 77 + src/rl/sg/so/Scene.h | 62 + src/rl/sg/so/Shape.cpp | 112 + src/rl/sg/so/Shape.h | 69 + src/rl/sg/solid/Body.cpp | 87 + src/rl/sg/solid/Body.h | 42 + src/rl/sg/solid/Model.cpp | 69 + src/rl/sg/solid/Model.h | 60 + src/rl/sg/solid/Scene.cpp | 288 + src/rl/sg/solid/Scene.h | 86 + src/rl/sg/solid/Shape.cpp | 253 + src/rl/sg/solid/Shape.h | 99 + src/rl/util/CMakeLists.txt | 43 + src/rl/util/Mutex.h | 114 + src/rl/util/MutexLocker.h | 58 + src/rl/util/MutexTryLocker.h | 69 + src/rl/util/Semaphore.h | 117 + src/rl/util/Thread.h | 142 + src/rl/util/Timer.h | 139 + src/rl/util/dummy.cpp | 0 src/rl/xml/Attribute.h | 105 + src/rl/xml/CMakeLists.txt | 66 + src/rl/xml/Document.h | 132 + src/rl/xml/DomParser.h | 86 + src/rl/xml/Exception.h | 56 + src/rl/xml/Namespace.h | 89 + src/rl/xml/Node.h | 259 + src/rl/xml/Object.h | 105 + src/rl/xml/Path.h | 95 + src/rl/xml/Schema.h | 72 + src/rl/xml/dummy.cpp | 0 tests/rlDynamicsTest/CMakeLists.txt | 34 + tests/rlDynamicsTest/rlDynamicsTest.cpp | 221 + tests/rlHalEndianTest/CMakeLists.txt | 16 + tests/rlHalEndianTest/rlHalEndianTest.cpp | 53 + tests/rlInverseKinematicsTest/CMakeLists.txt | 37 + .../rlInverseKinematicsTest.cpp | 164 + tests/rlPrmTest/CMakeLists.txt | 124 + tests/rlPrmTest/rlPrmTest.cpp | 172 + 589 files changed, 122750 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 Doxyfile.in create mode 100644 LICENSE create mode 100644 LICENSE.GPL create mode 100644 Modules/FindAtidaq.cmake create mode 100644 Modules/FindBullet.cmake create mode 100644 Modules/FindCgal.cmake create mode 100644 Modules/FindCoin.cmake create mode 100644 Modules/FindComedi.cmake create mode 100644 Modules/FindEigen.cmake create mode 100644 Modules/FindIconv.cmake create mode 100644 Modules/FindLibXml2.cmake create mode 100644 Modules/FindLibdc1394.cmake create mode 100644 Modules/FindOde.cmake create mode 100644 Modules/FindPqp.cmake create mode 100644 Modules/FindSoQt.cmake create mode 100644 Modules/FindSolid.cmake create mode 100644 Modules/FindZLIB.cmake create mode 100644 demos/rlAxisControllerDemo/CMakeLists.txt create mode 100644 demos/rlAxisControllerDemo/rlAxisControllerDemo.cpp create mode 100644 demos/rlCameraDemo/CMakeLists.txt create mode 100644 demos/rlCameraDemo/rlCameraDemo.cpp create mode 100644 demos/rlCoachKin/CMakeLists.txt create mode 100644 demos/rlCoachKin/ConfigurationDelegate.cpp create mode 100644 demos/rlCoachKin/ConfigurationDelegate.h create mode 100644 demos/rlCoachKin/ConfigurationModel.cpp create mode 100644 demos/rlCoachKin/ConfigurationModel.h create mode 100644 demos/rlCoachKin/MainWindow.cpp create mode 100644 demos/rlCoachKin/MainWindow.h create mode 100644 demos/rlCoachKin/OperationalDelegate.cpp create mode 100644 demos/rlCoachKin/OperationalDelegate.h create mode 100644 demos/rlCoachKin/OperationalModel.cpp create mode 100644 demos/rlCoachKin/OperationalModel.h create mode 100644 demos/rlCoachKin/Server.cpp create mode 100644 demos/rlCoachKin/Server.h create mode 100644 demos/rlCoachKin/Socket.cpp create mode 100644 demos/rlCoachKin/Socket.h create mode 100644 demos/rlCoachKin/rlCoachKin.cpp create mode 100644 demos/rlCoachKin/rlCoachKin.desktop create mode 100644 demos/rlCoachMdl/CMakeLists.txt create mode 100644 demos/rlCoachMdl/ConfigurationDelegate.cpp create mode 100644 demos/rlCoachMdl/ConfigurationDelegate.h create mode 100644 demos/rlCoachMdl/ConfigurationModel.cpp create mode 100644 demos/rlCoachMdl/ConfigurationModel.h create mode 100644 demos/rlCoachMdl/MainWindow.cpp create mode 100644 demos/rlCoachMdl/MainWindow.h create mode 100644 demos/rlCoachMdl/OperationalDelegate.cpp create mode 100644 demos/rlCoachMdl/OperationalDelegate.h create mode 100644 demos/rlCoachMdl/OperationalModel.cpp create mode 100644 demos/rlCoachMdl/OperationalModel.h create mode 100644 demos/rlCoachMdl/Server.cpp create mode 100644 demos/rlCoachMdl/Server.h create mode 100644 demos/rlCoachMdl/Socket.cpp create mode 100644 demos/rlCoachMdl/Socket.h create mode 100644 demos/rlCoachMdl/rlCoachMdl.cpp create mode 100644 demos/rlCoachMdl/rlCoachMdl.desktop create mode 100644 demos/rlCollisionDemo/CMakeLists.txt create mode 100644 demos/rlCollisionDemo/MainWindow.cpp create mode 100644 demos/rlCollisionDemo/MainWindow.h create mode 100644 demos/rlCollisionDemo/TestWidget.cpp create mode 100644 demos/rlCollisionDemo/TestWidget.h create mode 100644 demos/rlCollisionDemo/rlCollisionDemo.cpp create mode 100644 demos/rlCollisionDemo/rlCollisionDemo.desktop create mode 100644 demos/rlDenavitHartenbergDemo/CMakeLists.txt create mode 100644 demos/rlDenavitHartenbergDemo/rlDenavitHartenbergDemo.cpp create mode 100644 demos/rlDynamics1Demo/CMakeLists.txt create mode 100644 demos/rlDynamics1Demo/rlDynamics1Demo.cpp create mode 100644 demos/rlDynamics2Demo/CMakeLists.txt create mode 100644 demos/rlDynamics2Demo/rlDynamics2Demo.cpp create mode 100644 demos/rlGripperDemo/CMakeLists.txt create mode 100644 demos/rlGripperDemo/rlGripperDemo.cpp create mode 100644 demos/rlInterpolatorDemo/CMakeLists.txt create mode 100644 demos/rlInterpolatorDemo/rlInterpolatorDemo.cpp create mode 100644 demos/rlInversePositionDemo/CMakeLists.txt create mode 100644 demos/rlInversePositionDemo/rlInversePositionDemo.cpp create mode 100644 demos/rlJacobianDemo/CMakeLists.txt create mode 100644 demos/rlJacobianDemo/rlJacobianDemo.cpp create mode 100644 demos/rlKalmanDemo/CMakeLists.txt create mode 100644 demos/rlKalmanDemo/rlKalmanDemo.cpp create mode 100644 demos/rlLaserDemo/CMakeLists.txt create mode 100644 demos/rlLaserDemo/rlLaserDemo.cpp create mode 100644 demos/rlLoadXmlDemo/CMakeLists.txt create mode 100644 demos/rlLoadXmlDemo/rlLoadXmlDemo.cpp create mode 100644 demos/rlPcaDemo/CMakeLists.txt create mode 100644 demos/rlPcaDemo/hald-ingredients.txt create mode 100644 demos/rlPcaDemo/hald.txt create mode 100644 demos/rlPcaDemo/rlPcaDemo.cpp create mode 100644 demos/rlPlanDemo/CMakeLists.txt create mode 100644 demos/rlPlanDemo/ConfigurationDelegate.cpp create mode 100644 demos/rlPlanDemo/ConfigurationDelegate.h create mode 100644 demos/rlPlanDemo/ConfigurationModel.cpp create mode 100644 demos/rlPlanDemo/ConfigurationModel.h create mode 100644 demos/rlPlanDemo/ConfigurationSpaceScene.cpp create mode 100644 demos/rlPlanDemo/ConfigurationSpaceScene.h create mode 100644 demos/rlPlanDemo/ConfigurationSpaceThread.cpp create mode 100644 demos/rlPlanDemo/ConfigurationSpaceThread.h create mode 100644 demos/rlPlanDemo/MainWindow.cpp create mode 100644 demos/rlPlanDemo/MainWindow.h create mode 100644 demos/rlPlanDemo/PlannerModel.cpp create mode 100644 demos/rlPlanDemo/PlannerModel.h create mode 100644 demos/rlPlanDemo/Thread.cpp create mode 100644 demos/rlPlanDemo/Thread.h create mode 100644 demos/rlPlanDemo/Viewer.cpp create mode 100644 demos/rlPlanDemo/Viewer.h create mode 100644 demos/rlPlanDemo/rlPlanDemo.cpp create mode 100644 demos/rlPlanDemo/rlPlanDemo.desktop create mode 100644 demos/rlPrmDemo/CMakeLists.txt create mode 100644 demos/rlPrmDemo/rlPrmDemo.cpp create mode 100644 demos/rlPumaDemo/CMakeLists.txt create mode 100644 demos/rlPumaDemo/rlPumaDemo.cpp create mode 100644 demos/rlQuaternionDemo/CMakeLists.txt create mode 100644 demos/rlQuaternionDemo/rlQuaternionDemo.cpp create mode 100644 demos/rlRangeSensorDemo/CMakeLists.txt create mode 100644 demos/rlRangeSensorDemo/rlRangeSensorDemo.cpp create mode 100644 demos/rlRodriguesDemo/CMakeLists.txt create mode 100644 demos/rlRodriguesDemo/rlRodriguesDemo.cpp create mode 100644 demos/rlSixAxisForceTorqueSensorDemo/CMakeLists.txt create mode 100644 demos/rlSixAxisForceTorqueSensorDemo/rlSixAxisForceTorqueSensorDemo.cpp create mode 100644 demos/rlSpatialDemo/CMakeLists.txt create mode 100644 demos/rlSpatialDemo/rlSpatialDemo.cpp create mode 100644 demos/rlThreadsDemo/CMakeLists.txt create mode 100644 demos/rlThreadsDemo/rlThreadsDemo.cpp create mode 100644 demos/rlTimerDemo/CMakeLists.txt create mode 100644 demos/rlTimerDemo/rlTimerDemo.cpp create mode 100644 demos/rlTrapezoidalVelocityDemo/CMakeLists.txt create mode 100644 demos/rlTrapezoidalVelocityDemo/rlTrapezoidalVelocityDemo.cpp create mode 100644 demos/rlViewDemo/CMakeLists.txt create mode 100644 demos/rlViewDemo/rlViewDemo.cpp create mode 100644 demos/rlViewDemo/rlViewDemo.desktop create mode 100644 examples/CMakeLists.txt create mode 100644 examples/README create mode 100644 examples/rlkin/mitsubishi-rv6sl.xml create mode 100644 examples/rlkin/rlkin.xsd create mode 100644 examples/rlkin/staeubli-tx60l.xml create mode 100644 examples/rlkin/unimation-puma560.xml create mode 100644 examples/rlmdl/mitsubishi-rv6sl.xml create mode 100644 examples/rlmdl/planar2.xml create mode 100644 examples/rlmdl/rlmdl.xsd create mode 100644 examples/rlmdl/unimation-puma560.xml create mode 100644 examples/rlplan/mitsubishi-rv6sl_boxes_prm.xml create mode 100644 examples/rlplan/mitsubishi-rv6sl_boxes_rrtConCon.xml create mode 100644 examples/rlplan/rlplan.xsd create mode 100644 examples/rlplan/staeubli-tx60l_wall_prm.xml create mode 100644 examples/rlplan/staeubli-tx60l_wall_rrtConCon.xml create mode 100644 examples/rlplan/unimation-puma560_boxes_prm.xml create mode 100644 examples/rlplan/unimation-puma560_boxes_rrtConCon.xml create mode 100644 examples/rlsg/boxes.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link0.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link1.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link2.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link3.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link4.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link5.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/link6.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl.convex/mitsubishi-rv6sl.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link0.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link1.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link2.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link3.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link4.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link5.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/link6.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl/mitsubishi-rv6sl.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl_boxes.convex.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl_boxes.convex.xml create mode 100644 examples/rlsg/mitsubishi-rv6sl_boxes.wrl create mode 100644 examples/rlsg/mitsubishi-rv6sl_boxes.xml create mode 100644 examples/rlsg/rlsg.xsd create mode 100644 examples/rlsg/scene.wrl create mode 100644 examples/rlsg/scene.xml create mode 100644 examples/rlsg/staeubli-tx60l.convex/link0.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/link1.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/link2.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/link3.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/link4.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/link5.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/link6.wrl create mode 100644 examples/rlsg/staeubli-tx60l.convex/staeubli-tx60l.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link0.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link1.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link2.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link3.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link4.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link5.wrl create mode 100644 examples/rlsg/staeubli-tx60l/link6.wrl create mode 100644 examples/rlsg/staeubli-tx60l/staeubli-tx60l.wrl create mode 100644 examples/rlsg/staeubli-tx60l_wall.convex.wrl create mode 100644 examples/rlsg/staeubli-tx60l_wall.convex.xml create mode 100644 examples/rlsg/staeubli-tx60l_wall.wrl create mode 100644 examples/rlsg/staeubli-tx60l_wall.xml create mode 100644 examples/rlsg/unimation-puma560.convex.wrl create mode 100644 examples/rlsg/unimation-puma560.convex.xml create mode 100644 examples/rlsg/unimation-puma560.convex/link0.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/link1.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/link2.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/link3.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/link4.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/link5.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/link6.wrl create mode 100644 examples/rlsg/unimation-puma560.convex/unimation-puma560.wrl create mode 100644 examples/rlsg/unimation-puma560.wrl create mode 100644 examples/rlsg/unimation-puma560.xml create mode 100644 examples/rlsg/unimation-puma560/link0.wrl create mode 100644 examples/rlsg/unimation-puma560/link1.wrl create mode 100644 examples/rlsg/unimation-puma560/link2.wrl create mode 100644 examples/rlsg/unimation-puma560/link3.wrl create mode 100644 examples/rlsg/unimation-puma560/link4.wrl create mode 100644 examples/rlsg/unimation-puma560/link5.wrl create mode 100644 examples/rlsg/unimation-puma560/link6.wrl create mode 100644 examples/rlsg/unimation-puma560/unimation-puma560.wrl create mode 100644 examples/rlsg/unimation-puma560_boxes.convex.wrl create mode 100644 examples/rlsg/unimation-puma560_boxes.convex.xml create mode 100644 examples/rlsg/unimation-puma560_boxes.wrl create mode 100644 examples/rlsg/unimation-puma560_boxes.xml create mode 100644 examples/rlsg/wall.wrl create mode 100644 extras/3rdpartylicenses/LICENSE.BSL.txt create mode 100644 extras/3rdpartylicenses/LICENSE.FREE_USE.txt create mode 100644 extras/3rdpartylicenses/LICENSE.GPL.txt create mode 100644 extras/3rdpartylicenses/LICENSE.LGPL.txt create mode 100644 extras/3rdpartylicenses/LICENSE_QPL.txt create mode 100644 extras/3rdpartylicenses/all_sources.txt create mode 100644 extras/3rdpartylicenses/boost.txt create mode 100644 extras/3rdpartylicenses/bullet.txt create mode 100644 extras/3rdpartylicenses/cgal.txt create mode 100644 extras/3rdpartylicenses/coin.txt create mode 100644 extras/3rdpartylicenses/eigen.txt create mode 100644 extras/3rdpartylicenses/ode.txt create mode 100644 extras/3rdpartylicenses/pqp.txt create mode 100644 extras/3rdpartylicenses/qt.txt create mode 100644 extras/3rdpartylicenses/simage.txt create mode 100644 extras/3rdpartylicenses/solid.txt create mode 100644 extras/3rdpartylicenses/soqt.txt create mode 100644 extras/3rdpartylicenses/xml2.txt create mode 100644 extras/3rdpartylicenses/zlib.txt create mode 100644 extras/debian/README.txt create mode 100644 extras/debian/changelog create mode 100644 extras/debian/compat create mode 100644 extras/debian/control create mode 100644 extras/debian/copyright create mode 100644 extras/debian/librl-dev.install create mode 100644 extras/debian/librl.install create mode 100644 extras/debian/rules create mode 100644 extras/w32installer/CMakeLists.txt create mode 100644 extras/w32installer/README.txt create mode 100644 extras/wrlview/CMakeLists.txt create mode 100644 extras/wrlview/MainWindow.cpp create mode 100644 extras/wrlview/MainWindow.h create mode 100644 extras/wrlview/wrlview.cpp create mode 100644 extras/wrlview/wrlview.desktop create mode 100644 extras/wrlview/wrlview.ico create mode 100644 extras/wrlview/wrlview.rc create mode 100644 extras/wrlview/wrlview.svg create mode 100644 rl-config.cmake.in create mode 100644 robotics-library.ico create mode 100644 robotics-library.rc create mode 100644 robotics-library.svg create mode 100644 src/rl/hal/Ati.cpp create mode 100644 src/rl/hal/Ati.h create mode 100644 src/rl/hal/AxisController.cpp create mode 100644 src/rl/hal/AxisController.h create mode 100644 src/rl/hal/CMakeLists.txt create mode 100644 src/rl/hal/Camera.cpp create mode 100644 src/rl/hal/Camera.h create mode 100644 src/rl/hal/CartesianPositionActuator.cpp create mode 100644 src/rl/hal/CartesianPositionActuator.h create mode 100644 src/rl/hal/CartesianPositionSensor.cpp create mode 100644 src/rl/hal/CartesianPositionSensor.h create mode 100644 src/rl/hal/Coach.cpp create mode 100644 src/rl/hal/Coach.h create mode 100644 src/rl/hal/Com.cpp create mode 100644 src/rl/hal/Com.h create mode 100644 src/rl/hal/ComException.cpp create mode 100644 src/rl/hal/ComException.h create mode 100644 src/rl/hal/Comedi.cpp create mode 100644 src/rl/hal/Comedi.h create mode 100644 src/rl/hal/Dc1394Camera.cpp create mode 100644 src/rl/hal/Dc1394Camera.h create mode 100644 src/rl/hal/Dc1394CameraException.cpp create mode 100644 src/rl/hal/Dc1394CameraException.h create mode 100644 src/rl/hal/Device.cpp create mode 100644 src/rl/hal/Device.h create mode 100644 src/rl/hal/DeviceException.cpp create mode 100644 src/rl/hal/DeviceException.h create mode 100644 src/rl/hal/Exception.cpp create mode 100644 src/rl/hal/Exception.h create mode 100644 src/rl/hal/ForceSensor.cpp create mode 100644 src/rl/hal/ForceSensor.h create mode 100644 src/rl/hal/Gnuplot.cpp create mode 100644 src/rl/hal/Gnuplot.h create mode 100644 src/rl/hal/Gripper.cpp create mode 100644 src/rl/hal/Gripper.h create mode 100644 src/rl/hal/JointPositionActuator.cpp create mode 100644 src/rl/hal/JointPositionActuator.h create mode 100644 src/rl/hal/JointPositionSensor.cpp create mode 100644 src/rl/hal/JointPositionSensor.h create mode 100644 src/rl/hal/JointTorqueActuator.cpp create mode 100644 src/rl/hal/JointTorqueActuator.h create mode 100644 src/rl/hal/JointTorqueSensor.cpp create mode 100644 src/rl/hal/JointTorqueSensor.h create mode 100644 src/rl/hal/JointVelocityActuator.cpp create mode 100644 src/rl/hal/JointVelocityActuator.h create mode 100644 src/rl/hal/JointVelocitySensor.cpp create mode 100644 src/rl/hal/JointVelocitySensor.h create mode 100644 src/rl/hal/Jr3.cpp create mode 100644 src/rl/hal/Jr3.h create mode 100644 src/rl/hal/LeuzeRs4.cpp create mode 100644 src/rl/hal/LeuzeRs4.h create mode 100644 src/rl/hal/Lidar.cpp create mode 100644 src/rl/hal/Lidar.h create mode 100644 src/rl/hal/MitsubishiH7.cpp create mode 100644 src/rl/hal/MitsubishiH7.h create mode 100644 src/rl/hal/MitsubishiH7Exception.cpp create mode 100644 src/rl/hal/MitsubishiH7Exception.h create mode 100644 src/rl/hal/RangeSensor.cpp create mode 100644 src/rl/hal/RangeSensor.h create mode 100644 src/rl/hal/SchmersalLss300.cpp create mode 100644 src/rl/hal/SchmersalLss300.h create mode 100644 src/rl/hal/SchunkFpsF5.cpp create mode 100644 src/rl/hal/SchunkFpsF5.h create mode 100644 src/rl/hal/Serial.cpp create mode 100644 src/rl/hal/Serial.h create mode 100644 src/rl/hal/SickLms200.cpp create mode 100644 src/rl/hal/SickLms200.h create mode 100644 src/rl/hal/SickS300.cpp create mode 100644 src/rl/hal/SickS300.h create mode 100644 src/rl/hal/SixAxisForceTorqueSensor.cpp create mode 100644 src/rl/hal/SixAxisForceTorqueSensor.h create mode 100644 src/rl/hal/Socket.cpp create mode 100644 src/rl/hal/Socket.h create mode 100644 src/rl/hal/TcpSocket.cpp create mode 100644 src/rl/hal/TcpSocket.h create mode 100644 src/rl/hal/TimeoutException.cpp create mode 100644 src/rl/hal/TimeoutException.h create mode 100644 src/rl/hal/TorqueSensor.cpp create mode 100644 src/rl/hal/TorqueSensor.h create mode 100644 src/rl/hal/UdpSocket.cpp create mode 100644 src/rl/hal/UdpSocket.h create mode 100644 src/rl/hal/WeissWsg50.cpp create mode 100644 src/rl/hal/WeissWsg50.h create mode 100644 src/rl/hal/endian.cpp create mode 100644 src/rl/hal/endian.h create mode 100644 src/rl/hal/types.h create mode 100644 src/rl/kin/CMakeLists.txt create mode 100644 src/rl/kin/Element.cpp create mode 100644 src/rl/kin/Element.h create mode 100644 src/rl/kin/Exception.cpp create mode 100644 src/rl/kin/Exception.h create mode 100644 src/rl/kin/Frame.cpp create mode 100644 src/rl/kin/Frame.h create mode 100644 src/rl/kin/Joint.cpp create mode 100644 src/rl/kin/Joint.h create mode 100644 src/rl/kin/Kinematics.cpp create mode 100644 src/rl/kin/Kinematics.h create mode 100644 src/rl/kin/Link.cpp create mode 100644 src/rl/kin/Link.h create mode 100644 src/rl/kin/Prismatic.cpp create mode 100644 src/rl/kin/Prismatic.h create mode 100644 src/rl/kin/Puma.cpp create mode 100644 src/rl/kin/Puma.h create mode 100644 src/rl/kin/Revolute.cpp create mode 100644 src/rl/kin/Revolute.h create mode 100644 src/rl/kin/Rhino.cpp create mode 100644 src/rl/kin/Rhino.h create mode 100644 src/rl/kin/Transform.cpp create mode 100644 src/rl/kin/Transform.h create mode 100644 src/rl/math/ArticulatedBodyInertia.h create mode 100644 src/rl/math/ArticulatedBodyInertia.hxx create mode 100644 src/rl/math/CMakeLists.txt create mode 100644 src/rl/math/Cubic.h create mode 100644 src/rl/math/ForceVector.h create mode 100644 src/rl/math/ForceVector.hxx create mode 100644 src/rl/math/Kalman.h create mode 100644 src/rl/math/Matrix.h create mode 100644 src/rl/math/MatrixBaseAddons.h create mode 100644 src/rl/math/MotionVector.h create mode 100644 src/rl/math/MotionVector.hxx create mode 100644 src/rl/math/Pid.h create mode 100644 src/rl/math/PlueckerTransform.h create mode 100644 src/rl/math/PlueckerTransform.hxx create mode 100644 src/rl/math/Quaternion.h create mode 100644 src/rl/math/QuaternionBaseAddons.h create mode 100644 src/rl/math/Quintic.h create mode 100644 src/rl/math/Real.h create mode 100644 src/rl/math/RigidBodyInertia.h create mode 100644 src/rl/math/RigidBodyInertia.hxx create mode 100644 src/rl/math/Rotation.h create mode 100644 src/rl/math/Spatial.h create mode 100644 src/rl/math/Transform.h create mode 100644 src/rl/math/TrapezoidalVelocity.h create mode 100644 src/rl/math/Unit.h create mode 100644 src/rl/math/Vector.h create mode 100644 src/rl/math/dummy.cpp create mode 100644 src/rl/mdl/Body.cpp create mode 100644 src/rl/mdl/Body.h create mode 100644 src/rl/mdl/CMakeLists.txt create mode 100644 src/rl/mdl/Compound.cpp create mode 100644 src/rl/mdl/Compound.h create mode 100644 src/rl/mdl/Cylindrical.cpp create mode 100644 src/rl/mdl/Cylindrical.h create mode 100644 src/rl/mdl/Dynamic.cpp create mode 100644 src/rl/mdl/Dynamic.h create mode 100644 src/rl/mdl/Element.cpp create mode 100644 src/rl/mdl/Element.h create mode 100644 src/rl/mdl/Exception.cpp create mode 100644 src/rl/mdl/Exception.h create mode 100644 src/rl/mdl/Factory.cpp create mode 100644 src/rl/mdl/Factory.h create mode 100644 src/rl/mdl/Fixed.cpp create mode 100644 src/rl/mdl/Fixed.h create mode 100644 src/rl/mdl/Frame.cpp create mode 100644 src/rl/mdl/Frame.h create mode 100644 src/rl/mdl/Helical.cpp create mode 100644 src/rl/mdl/Helical.h create mode 100644 src/rl/mdl/Joint.cpp create mode 100644 src/rl/mdl/Joint.h create mode 100644 src/rl/mdl/Kinematic.cpp create mode 100644 src/rl/mdl/Kinematic.h create mode 100644 src/rl/mdl/Metric.cpp create mode 100644 src/rl/mdl/Metric.h create mode 100644 src/rl/mdl/Model.cpp create mode 100644 src/rl/mdl/Model.h create mode 100644 src/rl/mdl/Prismatic.cpp create mode 100644 src/rl/mdl/Prismatic.h create mode 100644 src/rl/mdl/Revolute.cpp create mode 100644 src/rl/mdl/Revolute.h create mode 100644 src/rl/mdl/Spherical.cpp create mode 100644 src/rl/mdl/Spherical.h create mode 100644 src/rl/mdl/Transform.cpp create mode 100644 src/rl/mdl/Transform.h create mode 100644 src/rl/mdl/World.cpp create mode 100644 src/rl/mdl/World.h create mode 100644 src/rl/mdl/XmlFactory.cpp create mode 100644 src/rl/mdl/XmlFactory.h create mode 100644 src/rl/plan/AddRrtConCon.cpp create mode 100644 src/rl/plan/AddRrtConCon.h create mode 100644 src/rl/plan/AdvancedOptimizer.cpp create mode 100644 src/rl/plan/AdvancedOptimizer.h create mode 100644 src/rl/plan/BridgeSampler.cpp create mode 100644 src/rl/plan/BridgeSampler.h create mode 100644 src/rl/plan/CMakeLists.txt create mode 100644 src/rl/plan/DistanceModel.cpp create mode 100644 src/rl/plan/DistanceModel.h create mode 100644 src/rl/plan/Eet.cpp create mode 100644 src/rl/plan/Eet.h create mode 100644 src/rl/plan/Exception.cpp create mode 100644 src/rl/plan/Exception.h create mode 100644 src/rl/plan/GaussianSampler.cpp create mode 100644 src/rl/plan/GaussianSampler.h create mode 100644 src/rl/plan/MatrixPtr.h create mode 100644 src/rl/plan/Model.cpp create mode 100644 src/rl/plan/Model.h create mode 100644 src/rl/plan/Optimizer.cpp create mode 100644 src/rl/plan/Optimizer.h create mode 100644 src/rl/plan/Orthogonal_k_neighbor_search.h create mode 100644 src/rl/plan/Planner.cpp create mode 100644 src/rl/plan/Planner.h create mode 100644 src/rl/plan/Prm.cpp create mode 100644 src/rl/plan/Prm.h create mode 100644 src/rl/plan/PrmUtilityGuided.cpp create mode 100644 src/rl/plan/PrmUtilityGuided.h create mode 100644 src/rl/plan/RealList.h create mode 100644 src/rl/plan/RecursiveVerifier.cpp create mode 100644 src/rl/plan/RecursiveVerifier.h create mode 100644 src/rl/plan/Rrt.cpp create mode 100644 src/rl/plan/Rrt.h create mode 100644 src/rl/plan/RrtCon.cpp create mode 100644 src/rl/plan/RrtCon.h create mode 100644 src/rl/plan/RrtConCon.cpp create mode 100644 src/rl/plan/RrtConCon.h create mode 100644 src/rl/plan/RrtDual.cpp create mode 100644 src/rl/plan/RrtDual.h create mode 100644 src/rl/plan/RrtExtCon.cpp create mode 100644 src/rl/plan/RrtExtCon.h create mode 100644 src/rl/plan/RrtExtExt.cpp create mode 100644 src/rl/plan/RrtExtExt.h create mode 100644 src/rl/plan/RrtGoalBias.cpp create mode 100644 src/rl/plan/RrtGoalBias.h create mode 100644 src/rl/plan/Sampler.cpp create mode 100644 src/rl/plan/Sampler.h create mode 100644 src/rl/plan/SequentialVerifier.cpp create mode 100644 src/rl/plan/SequentialVerifier.h create mode 100644 src/rl/plan/SimpleModel.cpp create mode 100644 src/rl/plan/SimpleModel.h create mode 100644 src/rl/plan/SimpleOptimizer.cpp create mode 100644 src/rl/plan/SimpleOptimizer.h create mode 100644 src/rl/plan/TransformPtr.h create mode 100644 src/rl/plan/UniformSampler.cpp create mode 100644 src/rl/plan/UniformSampler.h create mode 100644 src/rl/plan/Vector3List.h create mode 100644 src/rl/plan/Vector3Ptr.h create mode 100644 src/rl/plan/VectorList.h create mode 100644 src/rl/plan/VectorPtr.h create mode 100644 src/rl/plan/Verifier.cpp create mode 100644 src/rl/plan/Verifier.h create mode 100644 src/rl/plan/Viewer.cpp create mode 100644 src/rl/plan/Viewer.h create mode 100644 src/rl/plan/WorkspaceSphere.cpp create mode 100644 src/rl/plan/WorkspaceSphere.h create mode 100644 src/rl/plan/WorkspaceSphereExplorer.cpp create mode 100644 src/rl/plan/WorkspaceSphereExplorer.h create mode 100644 src/rl/plan/WorkspaceSphereList.h create mode 100644 src/rl/plan/WorkspaceSphereVector.h create mode 100644 src/rl/sg/Body.cpp create mode 100644 src/rl/sg/Body.h create mode 100644 src/rl/sg/CMakeLists.txt create mode 100644 src/rl/sg/DepthScene.cpp create mode 100644 src/rl/sg/DepthScene.h create mode 100644 src/rl/sg/DistanceScene.cpp create mode 100644 src/rl/sg/DistanceScene.h create mode 100644 src/rl/sg/Exception.cpp create mode 100644 src/rl/sg/Exception.h create mode 100644 src/rl/sg/Model.cpp create mode 100644 src/rl/sg/Model.h create mode 100644 src/rl/sg/RaycastScene.cpp create mode 100644 src/rl/sg/RaycastScene.h create mode 100644 src/rl/sg/Scene.cpp create mode 100644 src/rl/sg/Scene.h create mode 100644 src/rl/sg/Shape.cpp create mode 100644 src/rl/sg/Shape.h create mode 100644 src/rl/sg/SimpleScene.cpp create mode 100644 src/rl/sg/SimpleScene.h create mode 100644 src/rl/sg/bullet/Body.cpp create mode 100644 src/rl/sg/bullet/Body.h create mode 100644 src/rl/sg/bullet/Model.cpp create mode 100644 src/rl/sg/bullet/Model.h create mode 100644 src/rl/sg/bullet/Scene.cpp create mode 100644 src/rl/sg/bullet/Scene.h create mode 100644 src/rl/sg/bullet/Shape.cpp create mode 100644 src/rl/sg/bullet/Shape.h create mode 100644 src/rl/sg/ode/Body.cpp create mode 100644 src/rl/sg/ode/Body.h create mode 100644 src/rl/sg/ode/Model.cpp create mode 100644 src/rl/sg/ode/Model.h create mode 100644 src/rl/sg/ode/Scene.cpp create mode 100644 src/rl/sg/ode/Scene.h create mode 100644 src/rl/sg/ode/Shape.cpp create mode 100644 src/rl/sg/ode/Shape.h create mode 100644 src/rl/sg/pqp/Body.cpp create mode 100644 src/rl/sg/pqp/Body.h create mode 100644 src/rl/sg/pqp/Model.cpp create mode 100644 src/rl/sg/pqp/Model.h create mode 100644 src/rl/sg/pqp/Scene.cpp create mode 100644 src/rl/sg/pqp/Scene.h create mode 100644 src/rl/sg/pqp/Shape.cpp create mode 100644 src/rl/sg/pqp/Shape.h create mode 100644 src/rl/sg/so/Body.cpp create mode 100644 src/rl/sg/so/Body.h create mode 100644 src/rl/sg/so/Model.cpp create mode 100644 src/rl/sg/so/Model.h create mode 100644 src/rl/sg/so/Scene.cpp create mode 100644 src/rl/sg/so/Scene.h create mode 100644 src/rl/sg/so/Shape.cpp create mode 100644 src/rl/sg/so/Shape.h create mode 100644 src/rl/sg/solid/Body.cpp create mode 100644 src/rl/sg/solid/Body.h create mode 100644 src/rl/sg/solid/Model.cpp create mode 100644 src/rl/sg/solid/Model.h create mode 100644 src/rl/sg/solid/Scene.cpp create mode 100644 src/rl/sg/solid/Scene.h create mode 100644 src/rl/sg/solid/Shape.cpp create mode 100644 src/rl/sg/solid/Shape.h create mode 100644 src/rl/util/CMakeLists.txt create mode 100644 src/rl/util/Mutex.h create mode 100644 src/rl/util/MutexLocker.h create mode 100644 src/rl/util/MutexTryLocker.h create mode 100644 src/rl/util/Semaphore.h create mode 100644 src/rl/util/Thread.h create mode 100644 src/rl/util/Timer.h create mode 100644 src/rl/util/dummy.cpp create mode 100644 src/rl/xml/Attribute.h create mode 100644 src/rl/xml/CMakeLists.txt create mode 100644 src/rl/xml/Document.h create mode 100644 src/rl/xml/DomParser.h create mode 100644 src/rl/xml/Exception.h create mode 100644 src/rl/xml/Namespace.h create mode 100644 src/rl/xml/Node.h create mode 100644 src/rl/xml/Object.h create mode 100644 src/rl/xml/Path.h create mode 100644 src/rl/xml/Schema.h create mode 100644 src/rl/xml/dummy.cpp create mode 100644 tests/rlDynamicsTest/CMakeLists.txt create mode 100644 tests/rlDynamicsTest/rlDynamicsTest.cpp create mode 100644 tests/rlHalEndianTest/CMakeLists.txt create mode 100644 tests/rlHalEndianTest/rlHalEndianTest.cpp create mode 100644 tests/rlInverseKinematicsTest/CMakeLists.txt create mode 100644 tests/rlInverseKinematicsTest/rlInverseKinematicsTest.cpp create mode 100644 tests/rlPrmTest/CMakeLists.txt create mode 100644 tests/rlPrmTest/rlPrmTest.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..dae47476 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +*.a +*.app +*.dll +*.dylib +*.exe +*.la +*.lai +*.lib +*.lo +*.o +*.obj +*.out +*.slo +*.so diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..b0af9fd3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,287 @@ +cmake_minimum_required(VERSION 2.8.11) + +project(rl) + +enable_testing() + +include(CMakeDependentOption) +include(GNUInstallDirs) + +set(VERSION_MAJOR 0) +set(VERSION_MINOR 6) +set(VERSION_PATCH 2) +set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) + +set(Boost_ADDITIONAL_VERSIONS "1.56.0" "1.56" "1.55.0" "1.55" "1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51" "1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47") + +option(BUILD_DEMOS "Build demos" TRUE) +option(BUILD_EXTRAS "Build extras" TRUE) +option(BUILD_RL_MATH "Build RL::MATH" TRUE) +option(BUILD_RL_UTIL "Build RL::UTIL" TRUE) +option(BUILD_RL_XML "Build RL::XML" TRUE) +option(BUILD_TESTS "Build tests" TRUE) + +cmake_dependent_option(BUILD_RL_HAL "Build RL::HAL" ON "BUILD_RL_MATH;BUILD_RL_UTIL" OFF) +cmake_dependent_option(BUILD_RL_KIN "Build RL::KIN" ON "BUILD_RL_MATH;BUILD_RL_XML" OFF) +cmake_dependent_option(BUILD_RL_MDL "Build RL::MDL" ON "BUILD_RL_MATH;BUILD_RL_XML" OFF) +cmake_dependent_option(BUILD_RL_SG "Build RL::SG" ON "BUILD_RL_MATH;BUILD_RL_UTIL;BUILD_RL_XML" OFF) + +cmake_dependent_option(BUILD_RL_PLAN "Build RL::PLAN" ON "BUILD_RL_KIN;BUILD_RL_MATH;BUILD_RL_MDL;BUILD_RL_SG;BUILD_RL_UTIL;BUILD_RL_XML" OFF) + +if(CMAKE_SIZEOF_VOID_P EQUAL 4) + add_definitions(-DEIGEN_DONT_ALIGN) +endif(CMAKE_SIZEOF_VOID_P EQUAL 4) + +if(WIN32) + add_definitions( + -D_CRT_SECURE_NO_WARNINGS + -D_SCL_SECURE_NO_WARNINGS + -D_USE_MATH_DEFINES + -D_WIN32_WINNT=0x400 + -DNOMINMAX + ) +endif(WIN32) + +include_directories(${rl_SOURCE_DIR}/src) + +if(BUILD_RL_MATH) + add_subdirectory(src/rl/math) + if(BUILD_DEMOS) + add_subdirectory(demos/rlDenavitHartenbergDemo) + add_subdirectory(demos/rlInterpolatorDemo) + add_subdirectory(demos/rlKalmanDemo) + add_subdirectory(demos/rlPcaDemo) + add_subdirectory(demos/rlQuaternionDemo) + #add_subdirectory(demos/rlRodriguesDemo) + add_subdirectory(demos/rlSpatialDemo) + add_subdirectory(demos/rlTrapezoidalVelocityDemo) + endif(BUILD_DEMOS) + set(RL_MATH_FOUND TRUE) + set(TARGETS ${TARGETS} rlmath) +endif(BUILD_RL_MATH) + +if(BUILD_RL_UTIL) + add_subdirectory(src/rl/util) + if(BUILD_DEMOS) + add_subdirectory(demos/rlThreadsDemo) + add_subdirectory(demos/rlTimerDemo) + endif(BUILD_DEMOS) + set(RL_UTIL_FOUND TRUE) + set(TARGETS ${TARGETS} rlutil) +endif(BUILD_RL_UTIL) + +if(BUILD_RL_XML) + add_subdirectory(src/rl/xml) + if(BUILD_DEMOS) + add_subdirectory(demos/rlLoadXmlDemo) + endif(BUILD_DEMOS) + set(RL_XML_FOUND TRUE) + set(TARGETS ${TARGETS} rlxml) +endif(BUILD_RL_XML) + +if(BUILD_RL_KIN) + add_subdirectory(src/rl/kin) + if(BUILD_DEMOS) + add_subdirectory(demos/rlJacobianDemo) + add_subdirectory(demos/rlPumaDemo) + endif(BUILD_DEMOS) + if(BUILD_TESTS) + add_subdirectory(tests/rlInverseKinematicsTest) + endif(BUILD_TESTS) + set(RL_KIN_FOUND TRUE) + set(TARGETS ${TARGETS} rlkin) +endif(BUILD_RL_KIN) + +if(BUILD_RL_MDL) + add_subdirectory(src/rl/mdl) + if(BUILD_DEMOS) + add_subdirectory(demos/rlDynamics1Demo) + add_subdirectory(demos/rlDynamics2Demo) + add_subdirectory(demos/rlInversePositionDemo) + endif(BUILD_DEMOS) + if(BUILD_TESTS) + add_subdirectory(tests/rlDynamicsTest) + endif(BUILD_TESTS) + set(RL_MDL_FOUND TRUE) + set(TARGETS ${TARGETS} rlmdl) +endif(BUILD_RL_MDL) + +if(BUILD_RL_HAL) + add_subdirectory(src/rl/hal) + if(BUILD_DEMOS) + add_subdirectory(demos/rlAxisControllerDemo) + add_subdirectory(demos/rlCameraDemo) + add_subdirectory(demos/rlGripperDemo) + add_subdirectory(demos/rlLaserDemo) + add_subdirectory(demos/rlRangeSensorDemo) + add_subdirectory(demos/rlSixAxisForceTorqueSensorDemo) + endif(BUILD_DEMOS) + if(BUILD_TESTS) + add_subdirectory(tests/rlHalEndianTest) + endif(BUILD_TESTS) + set(RL_HAL_FOUND TRUE) + set(TARGETS ${TARGETS} rlhal) +endif(BUILD_RL_HAL) + +if(BUILD_RL_SG) + add_subdirectory(src/rl/sg) + if(BUILD_DEMOS) + add_subdirectory(demos/rlCollisionDemo) + add_subdirectory(demos/rlViewDemo) + endif(BUILD_DEMOS) + set(RL_SG_FOUND TRUE) + set(TARGETS ${TARGETS} rlsg) +endif(BUILD_RL_SG) + +if(BUILD_RL_KIN AND BUILD_RL_SG) + if(BUILD_DEMOS) + add_subdirectory(demos/rlCoachKin) + endif(BUILD_DEMOS) +endif(BUILD_RL_KIN AND BUILD_RL_SG) + +if(BUILD_RL_MDL AND BUILD_RL_SG) + if(BUILD_DEMOS) + add_subdirectory(demos/rlCoachMdl) + endif(BUILD_DEMOS) +endif(BUILD_RL_MDL AND BUILD_RL_SG) + +if(BUILD_RL_PLAN) + add_subdirectory(src/rl/plan) + if(BUILD_DEMOS) + add_subdirectory(demos/rlPlanDemo) + add_subdirectory(demos/rlPrmDemo) + endif(BUILD_DEMOS) + if(BUILD_TESTS) + add_subdirectory(tests/rlPrmTest) + endif(BUILD_TESTS) + set(RL_PLAN_FOUND TRUE) + set(TARGETS ${TARGETS} rlplan) +endif(BUILD_RL_PLAN) + +add_subdirectory(examples) + +if(BUILD_EXTRAS) + add_subdirectory(extras/wrlview) +endif(BUILD_EXTRAS) + +if(UNIX) + install(FILES robotics-library.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps COMPONENT demos) +endif(UNIX) + +find_package(Doxygen) +find_package(LATEX) + +if(DOXYGEN_FOUND) + option(BUILD_DOCUMENTATION "Build documentation" FALSE) + configure_file(${rl_SOURCE_DIR}/Doxyfile.in ${rl_BINARY_DIR}/Doxyfile) + if(BUILD_DOCUMENTATION) + add_custom_target(doc ALL ${DOXYGEN_EXECUTABLE} ${rl_BINARY_DIR}/Doxyfile) + else(BUILD_DOCUMENTATION) + add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${rl_BINARY_DIR}/Doxyfile) + endif(BUILD_DOCUMENTATION) + file(MAKE_DIRECTORY ${rl_BINARY_DIR}/doc) + install(DIRECTORY ${rl_BINARY_DIR}/doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT documentation) +endif(DOXYGEN_FOUND) + +set(CPACK_COMPONENT_DEMOS_DEPENDS examples libraries) +set(CPACK_COMPONENT_DEMOS_DISPLAY_NAME "Demos") +set(CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation") +set(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "Examples") +set(CPACK_COMPONENT_EXTRAS_DISPLAY_NAME "Extras") +set(CPACK_COMPONENT_HEADERS_DEPENDS libraries) +set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "Headers") +set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries") +set(CPACK_COMPONENTS_ALL demos documentation examples extras headers libraries) +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://www.roboticslibrary.org/") +set(CPACK_DEBIAN_PACKAGE_NAME "librl") +set(CPACK_DEBIAN_PACKAGE_SECTION "devel") +set( + CPACK_NSIS_MENU_LINKS + "http://www.roboticslibrary.org/" "RL" + "https://github.com/roboticslibrary" "RL on GitHub" + "https://launchpad.net/roblib" "RL on Launchpad" + "http://sourceforge.net/projects/roblib" "RL on SourceForge" + "http://www.youtube.com/roboticslibrary" "RL on YouTube" +) +set(CPACK_NSIS_PACKAGE_NAME "Robotics Library ${VERSION}") +set(CPACK_NSIS_URL_INFO_ABOUT ${CPACK_DEBIAN_PACKAGE_HOMEPAGE}) +set(CPACK_PACKAGE_CONTACT "Robotics Library Team ") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The Robotics Library is a self-contained C++ library for robot kinematics, visualization, motion planning, and control.") +set(CPACK_PACKAGE_DISPLAY_NAME "Robotics Library ${VERSION}") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "rl-${VERSION}") +set(CPACK_PACKAGE_NAME "rl") +set(CPACK_PACKAGE_VERSION ${VERSION}) +set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) +set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE) +set(CPACK_RPM_COMPONENT_INSTALL ON) +set(CPACK_RPM_demos_PACKAGE_REQUIRES "rl-examples") +set(CPACK_RPM_headers_PACKAGE_SUGGESTS "rl-documentation rl-libraries") +set(CPACK_RPM_libraries_PACKAGE_SUGGESTS "rl-demos rl-examples") +set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}) +set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries") +set(CPACK_RPM_PACKAGE_LICENSE "BSD") +set(CPACK_RPM_PACKAGE_NAME "rl") +set(CPACK_RPM_PACKAGE_SUMMARY "Robotics Library") +set(CPACK_RPM_PACKAGE_URL ${CPACK_DEBIAN_PACKAGE_HOMEPAGE}) + +if(WIN32) + if(CMAKE_CL_64) + set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") # http://public.kitware.com/Bug/view.php?id=14211 + endif() +endif() + +string(REPLACE ";" " +" CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}") +string(REPLACE ";" " +" CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS}") + +include(CPack) + +include(CMakePackageConfigHelpers) + +set(RL_LIBRARIES ${TARGETS}) +set(INTERFACE_INCLUDE_DIRECTORIES ${rl_SOURCE_DIR}/src) + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/rl-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/rl-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/rl +) + +export(TARGETS ${TARGETS} FILE ${CMAKE_CURRENT_BINARY_DIR}/rl-export.cmake) + +set(INTERFACE_INCLUDE_DIRECTORIES \${PACKAGE_PREFIX_DIR}/include) + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/rl-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/rl-config-install.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/rl +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/rl-config-install.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/rl + RENAME rl-config.cmake +) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/rl-config-version.cmake + VERSION ${VERSION} + COMPATIBILITY ExactVersion +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/rl-config-version.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/rl +) + +if(DEFINED TARGETS) + install( + EXPORT rl + DESTINATION ${CMAKE_INSTALL_LIBDIR}/rl + FILE rl-export.cmake + ) +endif() diff --git a/Doxyfile.in b/Doxyfile.in new file mode 100644 index 00000000..1262cb13 --- /dev/null +++ b/Doxyfile.in @@ -0,0 +1,1749 @@ +# Doxyfile 1.7.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "Robotics Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = "${VERSION}" + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = "${CMAKE_CURRENT_BINARY_DIR}/doc" + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = "${CMAKE_CURRENT_SOURCE_DIR}/src/rl" + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. The create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = "${CMAKE_CURRENT_SOURCE_DIR}/src/rl" + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is adviced to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the stylesheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the +# mathjax.org site, so you can quickly see the result without installing +# MathJax, but it is strongly recommended to install a local copy of MathJax +# before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = "${LATEX_COMPILER}" + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = "${MAKEINDEX_COMPILER}" + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = amsmath,amssymb + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = "${PERL_EXECUTABLE}" + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = NO + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = ${DOXYGEN_DOT_FOUND} + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will write a font called Helvetica to the output +# directory and reference it in all dot files that doxygen generates. +# When you want a differently looking font you can specify the font name +# using DOT_FONTNAME. You need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = "${DOXYGEN_DOT_PATH}" + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..6821a79e --- /dev/null +++ b/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2009, Markus Rickert +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSE.GPL b/LICENSE.GPL new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/LICENSE.GPL @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Modules/FindAtidaq.cmake b/Modules/FindAtidaq.cmake new file mode 100644 index 00000000..e253df71 --- /dev/null +++ b/Modules/FindAtidaq.cmake @@ -0,0 +1,33 @@ +include(FindPackageHandleStandardArgs) + +find_path( + ATIDAQ_INCLUDE_DIRS + NAMES + atidaq/ftconfig.h + HINTS + $ENV{HOME}/include + /usr/local/include + /usr/include +) + +find_library( + ATIDAQ_LIBRARIES + NAMES + atidaq + HINTS + $ENV{HOME}/lib + /usr/local/lib + /usr/lib +) + +find_package_handle_standard_args( + ATIDAQ + DEFAULT_MSG + ATIDAQ_INCLUDE_DIRS + ATIDAQ_LIBRARIES +) + +mark_as_advanced( + ATIDAQ_INCLUDE_DIRS + ATIDAQ_LIBRARIES +) diff --git a/Modules/FindBullet.cmake b/Modules/FindBullet.cmake new file mode 100644 index 00000000..9f5f87fb --- /dev/null +++ b/Modules/FindBullet.cmake @@ -0,0 +1,171 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + BULLET_INCLUDE_PATHS + $ENV{BULLETDIR}/include/bullet + $ENV{HOME}/include/bullet + /usr/local/include/bullet + /usr/include/bullet + $ENV{ProgramW6432}/bullet*/include/bullet + $ENV{ProgramFiles}/bullet*/include/bullet + $ENV{ProgramW6432}/rl*/include/bullet + $ENV{ProgramFiles}/rl*/include/bullet +) + +file( + GLOB + BULLET_LIBRARY_PATHS + $ENV{BULLETDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{ProgramW6432}/bullet*/lib + $ENV{ProgramFiles}/bullet*/lib + $ENV{ProgramW6432}/rl*/lib + $ENV{ProgramFiles}/rl*/lib +) + +find_path( + BULLET_INCLUDE_DIRS + NAMES + Bullet-C-Api.h + HINTS + ${BULLET_INCLUDE_PATHS} +) + +find_library( + BULLET_COLLISION_LIBRARY_DEBUG + NAMES + bulletcollisiond BulletCollisiond BulletCollision_debug + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_COLLISION_LIBRARY_RELEASE + NAMES + bulletcollision BulletCollision + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_CONVEXDECOMPOSITION_LIBRARY_DEBUG + NAMES + convexdecompositiond ConvexDecompositiond ConvexDecomposition_debug + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_CONVEXDECOMPOSITION_LIBRARY_RELEASE + NAMES + convexdecomposition ConvexDecomposition + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_DYNAMICS_LIBRARY_DEBUG + NAMES + bulletdynamicsd BulletDynamicsd BulletDynamics_debug + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_DYNAMICS_LIBRARY_RELEASE + NAMES + bulletdynamics BulletDynamics + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_MATH_LIBRARY_DEBUG + NAMES + bulletmathd LinearMathd LinearMath_debug + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_MATH_LIBRARY_RELEASE + NAMES + bulletmath LinearMath + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_SOFTBODY_LIBRARY_DEBUG + NAMES + bulletsoftbodyd BulletSoftBodyd BulletSoftBody_debug + HINTS + ${BULLET_LIBRARY_PATHS} +) + +find_library( + BULLET_SOFTBODY_LIBRARY_RELEASE + NAMES + bulletsoftbody BulletSoftBody + HINTS + ${BULLET_LIBRARY_PATHS} +) + +foreach(LIBRARY BULLET_COLLISION_LIBRARY BULLET_CONVEXDECOMPOSITION_LIBRARY BULLET_DYNAMICS_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY) + set(BULLET_LIBRARY ${LIBRARY}) + + if(${LIBRARY}_DEBUG AND NOT ${LIBRARY}_RELEASE) + set(${BULLET_LIBRARY} ${${LIBRARY}_DEBUG}) + endif(${LIBRARY}_DEBUG AND NOT ${LIBRARY}_RELEASE) + + if(${LIBRARY}_RELEASE AND NOT ${LIBRARY}_DEBUG) + set(${BULLET_LIBRARY} ${${LIBRARY}_RELEASE}) + endif(${LIBRARY}_RELEASE AND NOT ${LIBRARY}_DEBUG) + + if(${LIBRARY}_DEBUG AND ${LIBRARY}_RELEASE) + set(${BULLET_LIBRARY} debug ${${LIBRARY}_DEBUG} optimized ${${LIBRARY}_RELEASE}) + endif(${LIBRARY}_DEBUG AND ${LIBRARY}_RELEASE) +endforeach(LIBRARY) + +set( + BULLET_LIBRARIES + ${BULLET_COLLISION_LIBRARY} + ${BULLET_CONVEXDECOMPOSITION_LIBRARY} + ${BULLET_DYNAMICS_LIBRARY} + ${BULLET_MATH_LIBRARY} + ${BULLET_SOFTBODY_LIBRARY} +) + +find_package_handle_standard_args( + Bullet + DEFAULT_MSG + BULLET_INCLUDE_DIRS + BULLET_COLLISION_LIBRARY +# BULLET_CONVEXDECOMPOSITION_LIBRARY + BULLET_DYNAMICS_LIBRARY + BULLET_MATH_LIBRARY + BULLET_SOFTBODY_LIBRARY +) + +mark_as_advanced( + BULLET_INCLUDE_DIRS + BULLET_COLLISION_LIBRARY + BULLET_COLLISION_LIBRARY_DEBUG + BULLET_COLLISION_LIBRARY_RELEASE + BULLET_CONVEXDECOMPOSITION_LIBRARY + BULLET_CONVEXDECOMPOSITION_LIBRARY_DEBUG + BULLET_CONVEXDECOMPOSITION_LIBRARY_RELEASE + BULLET_DYNAMICS_LIBRARY + BULLET_DYNAMICS_LIBRARY_DEBUG + BULLET_DYNAMICS_LIBRARY_RELEASE + BULLET_LIBRARIES + BULLET_MATH_LIBRARY + BULLET_MATH_LIBRARY_DEBUG + BULLET_MATH_LIBRARY_RELEASE + BULLET_SOFTBODY_LIBRARY + BULLET_SOFTBODY_LIBRARY_DEBUG + BULLET_SOFTBODY_LIBRARY_RELEASE +) diff --git a/Modules/FindCgal.cmake b/Modules/FindCgal.cmake new file mode 100644 index 00000000..b68f48c7 --- /dev/null +++ b/Modules/FindCgal.cmake @@ -0,0 +1,103 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + CGAL_COMPILER_INCLUDE_PATHS + $ENV{CGALROOT}/include/CGAL/config/* + $ENV{HOME}/include/CGAL/config/* + /usr/local/include/CGAL/config/* + /usr/include/CGAL/config/* + $ENV{ProgramW6432}/CGAL*/include/CGAL/config/* + $ENV{ProgramFiles}/CGAL*/include/CGAL/config/* +) +file( + GLOB + CGAL_INCLUDE_PATHS + $ENV{CGALROOT}/include + $ENV{HOME}/include + /usr/local/include + /usr/include + $ENV{ProgramW6432}/CGAL*/include + $ENV{ProgramFiles}/CGAL*/include +) +file( + GLOB + CGAL_LIBRARY_PATHS + $ENV{CGALROOT}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{ProgramW6432}/CGAL*/lib + $ENV{ProgramFiles}/CGAL*/lib +) + +find_path( + CGAL_COMPILER_INCLUDE_DIR + NAMES + CGAL/compiler_config.h + HINTS + ${CGAL_COMPILER_INCLUDE_PATHS} + ${CGAL_INCLUDE_PATHS} +) + +find_path( + CGAL_INCLUDE_DIR + NAMES + CGAL/CORE/CORE.h + HINTS + ${CGAL_INCLUDE_PATHS} +) + +find_library( + CGAL_LIBRARY_DEBUG + NAMES + CGALd + cgal-vc100-mt-gd-4.1 cgal-vc100-mt-gd-4.0 cgal-vc100-mt-gd + cgal-vc90-mt-gd-4.1 cgal-vc90-mt-gd-4.0 cgal-vc90-mt-gd + cgal-vc80-mt-gd-4.1 cgal-vc80-mt-gd-4.0 cgal-vc80-mt-gd + cgal-vc71-mt-gd-4.1 cgal-vc71-mt-gd-4.0 cgal-vc71-mt-gd + HINTS + ${CGAL_LIBRARY_PATHS} +) + +find_library( + CGAL_LIBRARY_RELEASE + NAMES + CGAL + cgal-vc100-mt-4.1 cgal-vc100-mt-4.0 cgal-vc100-mt + cgal-vc90-mt-4.1 cgal-vc90-mt-4.0 cgal-vc90-mt + cgal-vc80-mt-4.1 cgal-vc80-mt-4.0 cgal-vc80-mt + cgal-vc71-mt-4.1 cgal-vc71-mt-4.0 cgal-vc71-mt + HINTS + ${CGAL_LIBRARY_PATHS} +) + +if(CGAL_LIBRARY_DEBUG AND NOT CGAL_LIBRARY_RELEASE) + set(CGAL_LIBRARIES ${CGAL_LIBRARY_DEBUG}) +endif(CGAL_LIBRARY_DEBUG AND NOT CGAL_LIBRARY_RELEASE) + +if(CGAL_LIBRARY_RELEASE AND NOT CGAL_LIBRARY_DEBUG) + set(CGAL_LIBRARIES ${CGAL_LIBRARY_RELEASE}) +endif(CGAL_LIBRARY_RELEASE AND NOT CGAL_LIBRARY_DEBUG) + +if(CGAL_LIBRARY_DEBUG AND CGAL_LIBRARY_RELEASE) + set(CGAL_LIBRARIES debug ${CGAL_LIBRARY_DEBUG} optimized ${CGAL_LIBRARY_RELEASE}) +endif(CGAL_LIBRARY_DEBUG AND CGAL_LIBRARY_RELEASE) + +set(CGAL_INCLUDE_DIRS ${CGAL_INCLUDE_DIR} ${CGAL_COMPILER_INCLUDE_DIR}) + +find_package_handle_standard_args( + CGAL + DEFAULT_MSG + CGAL_INCLUDE_DIRS + CGAL_LIBRARIES +) + +mark_as_advanced( + CGAL_COMPILER_INCLUDE_DIR + CGAL_INCLUDE_DIR + CGAL_INCLUDE_DIRS + CGAL_LIBRARIES + CGAL_LIBRARY_DEBUG + CGAL_LIBRARY_RELEASE +) diff --git a/Modules/FindCoin.cmake b/Modules/FindCoin.cmake new file mode 100644 index 00000000..5bdaa960 --- /dev/null +++ b/Modules/FindCoin.cmake @@ -0,0 +1,81 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + COIN_INCLUDE_PATHS + $ENV{COINDIR}/include + $ENV{COIN3DDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include/Coin* + /usr/include + $ENV{SystemDrive}/Coin*/include + $ENV{ProgramW6432}/Coin*/include + $ENV{ProgramFiles}/Coin*/include +) + +file( + GLOB + COIN_LIBRARY_PATHS + $ENV{COINDIR}/lib + $ENV{COIN3DDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{SystemDrive}/Coin*/lib + $ENV{ProgramW6432}/Coin*/lib + $ENV{ProgramFiles}/Coin*/lib +) + +find_path( + COIN_INCLUDE_DIRS + NAMES + Inventor/So.h + HINTS + ${COIN_INCLUDE_PATHS} +) + +find_library( + COIN_LIBRARY_DEBUG + NAMES + Coind coin2d coin3d + HINTS + ${COIN_LIBRARY_PATHS} +) + +find_library( + COIN_LIBRARY_RELEASE + NAMES + Coin coin2 coin3 + HINTS + ${COIN_LIBRARY_PATHS} +) + +set(COIN_DEFINITIONS -DCOIN_NOT_DLL) + +if(COIN_LIBRARY_DEBUG AND NOT COIN_LIBRARY_RELEASE) + set(COIN_LIBRARIES ${COIN_LIBRARY_DEBUG}) +endif(COIN_LIBRARY_DEBUG AND NOT COIN_LIBRARY_RELEASE) + +if(COIN_LIBRARY_RELEASE AND NOT COIN_LIBRARY_DEBUG) + set(COIN_LIBRARIES ${COIN_LIBRARY_RELEASE}) +endif(COIN_LIBRARY_RELEASE AND NOT COIN_LIBRARY_DEBUG) + +if(COIN_LIBRARY_DEBUG AND COIN_LIBRARY_RELEASE) + set(COIN_LIBRARIES debug ${COIN_LIBRARY_DEBUG} optimized ${COIN_LIBRARY_RELEASE}) +endif(COIN_LIBRARY_DEBUG AND COIN_LIBRARY_RELEASE) + +find_package_handle_standard_args( + Coin + DEFAULT_MSG + COIN_INCLUDE_DIRS + COIN_LIBRARIES +) + +mark_as_advanced( + COIN_DEFINITIONS + COIN_INCLUDE_DIRS + COIN_LIBRARIES + COIN_LIBRARY_DEBUG + COIN_LIBRARY_RELEASE +) diff --git a/Modules/FindComedi.cmake b/Modules/FindComedi.cmake new file mode 100644 index 00000000..721eb40d --- /dev/null +++ b/Modules/FindComedi.cmake @@ -0,0 +1,33 @@ +include(FindPackageHandleStandardArgs) + +find_path( + COMEDI_INCLUDE_DIRS + NAMES + comedilib.h + HINTS + $ENV{HOME}/include + /usr/local/include + /usr/include +) + +find_library( + COMEDI_LIBRARIES + NAMES + comedi + HINTS + $ENV{HOME}/lib + /usr/local/lib + /usr/lib +) + +find_package_handle_standard_args( + Comedi + DEFAULT_MSG + COMEDI_INCLUDE_DIRS + COMEDI_LIBRARIES +) + +mark_as_advanced( + COMEDI_INCLUDE_DIRS + COMEDI_LIBRARIES +) diff --git a/Modules/FindEigen.cmake b/Modules/FindEigen.cmake new file mode 100644 index 00000000..4df4aa46 --- /dev/null +++ b/Modules/FindEigen.cmake @@ -0,0 +1,38 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + EIGEN_INCLUDE_PATHS + $ENV{EIGENDIR} + $ENV{HOME}/include + /usr/local/include/eigen3 + /usr/local/include/eigen* + /usr/local/include + /usr/include/eigen3 + /usr/include/eigen* + /usr/include + /opt/local/include/eigen* + $ENV{ProgramW6432}/eigen*/include/eigen3 + $ENV{ProgramFiles}/eigen*/include/eigen3 + $ENV{ProgramW6432}/eigen* + $ENV{ProgramFiles}/eigen* +) + +find_path( + EIGEN_INCLUDE_DIRS + NAMES + Eigen/Core + HINTS + ${EIGEN_INCLUDE_PATHS} +) + +find_package_handle_standard_args( + Eigen + DEFAULT_MSG + EIGEN_INCLUDE_DIRS +) + +mark_as_advanced( + EIGEN_FOUND + EIGEN_INCLUDE_DIRS +) diff --git a/Modules/FindIconv.cmake b/Modules/FindIconv.cmake new file mode 100644 index 00000000..a09acc2b --- /dev/null +++ b/Modules/FindIconv.cmake @@ -0,0 +1,59 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + ICONV_INCLUDE_PATHS + $ENV{ICONVDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include + $ENV{ProgramW6432}/iconv*/include + $ENV{ProgramFiles}/iconv*/include + $ENV{ProgramW6432}/libiconv*/include + $ENV{ProgramFiles}/libiconv*/include + $ENV{ProgramW6432}/GnuWin32/include + $ENV{ProgramFiles}/GnuWin32/include +) + +file( + GLOB + ICONV_LIBRARY_PATHS + $ENV{ICONVDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{ProgramW6432}/iconv*/lib + $ENV{ProgramFiles}/iconv*/lib + $ENV{ProgramW6432}/libiconv*/lib + $ENV{ProgramFiles}/libiconv*/lib + $ENV{ProgramW6432}/GnuWin32/lib + $ENV{ProgramFiles}/GnuWin32/lib +) + +find_path( + ICONV_INCLUDE_DIRS + NAMES + iconv.h + HINTS + ${ICONV_INCLUDE_PATHS} +) + +find_library( + ICONV_LIBRARIES + NAMES + iconv libiconv libiconv_a + HINTS + ${ICONV_LIBRARY_PATHS} +) + +find_package_handle_standard_args( + ICONV + DEFAULT_MSG + ICONV_INCLUDE_DIRS + ICONV_LIBRARIES +) + +mark_as_advanced( + ICONV_INCLUDE_DIRS + ICONV_LIBRARIES +) diff --git a/Modules/FindLibXml2.cmake b/Modules/FindLibXml2.cmake new file mode 100644 index 00000000..d0c33122 --- /dev/null +++ b/Modules/FindLibXml2.cmake @@ -0,0 +1,52 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + LIBXML2_INCLUDE_PATHS + $ENV{LIBXML2DIR}/include/libxml2 + $ENV{HOME}/include + $ENV{HOME}/include/libxml2 + /usr/local/include/libxml2 + /usr/include/libxml2 + $ENV{ProgramW6432}/libxml2*/include + $ENV{ProgramFiles}/libxml2*/include +) + +file( + GLOB + LIBXML2_LIBRARY_PATHS + $ENV{LIBXML2DIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{ProgramW6432}/libxml2*/lib + $ENV{ProgramFiles}/libxml2*/lib +) + +find_path( + LIBXML2_INCLUDE_DIRS + NAMES + libxml/parser.h + HINTS + ${LIBXML2_INCLUDE_PATHS} +) + +find_library( + LIBXML2_LIBRARIES + NAMES + libxml2 xml2 + HINTS + ${LIBXML2_LIBRARY_PATHS} +) + +find_package_handle_standard_args( + LibXml2 + DEFAULT_MSG + LIBXML2_INCLUDE_DIRS + LIBXML2_LIBRARIES +) + +mark_as_advanced( + LIBXML2_INCLUDE_DIRS + LIBXML2_LIBRARIES +) diff --git a/Modules/FindLibdc1394.cmake b/Modules/FindLibdc1394.cmake new file mode 100644 index 00000000..c43f0c65 --- /dev/null +++ b/Modules/FindLibdc1394.cmake @@ -0,0 +1,66 @@ +include(FindPackageHandleStandardArgs) + +find_path( + LIBDC1394_V1_INCLUDE_DIR + libdc1394/dc1394_control.h + $ENV{HOME}/include + /usr/local/include + /usr/include +) + +find_path( + LIBDC1394_V2_INCLUDE_DIR + dc1394/dc1394.h + $ENV{HOME}/include + /usr/local/include + /usr/include +) + +find_library( + LIBDC1394_V1_LIBRARY + NAMES + dc1394_control + PATHS + $ENV{HOME}/lib + /usr/local/lib + /usr/lib +) + +find_library( + LIBDC1394_V2_LIBRARY + NAMES + dc1394 + PATHS + $ENV{HOME}/lib + /usr/local/lib + /usr/lib +) + +if(LIBDC1394_V1_INCLUDE_DIR AND LIBDC1394_V1_LIBRARY) + set(LIBDC1394_DEFINITIONS -DLIBDC1394_VERSION_MAJOR=10) + set(LIBDC1394_INCLUDE_DIRS ${LIBDC1394_V1_INCLUDE_DIR}) + set(LIBDC1394_LIBRARIES ${LIBDC1394_V1_LIBRARY}) +endif(LIBDC1394_V1_INCLUDE_DIR AND LIBDC1394_V1_LIBRARY) + +if(LIBDC1394_V2_INCLUDE_DIR AND LIBDC1394_V2_LIBRARY) + set(LIBDC1394_DEFINITIONS -DLIBDC1394_VERSION_MAJOR=20) + set(LIBDC1394_INCLUDE_DIRS ${LIBDC1394_V2_INCLUDE_DIR}) + set(LIBDC1394_LIBRARIES ${LIBDC1394_V2_LIBRARY}) +endif(LIBDC1394_V2_INCLUDE_DIR AND LIBDC1394_V2_LIBRARY) + +find_package_handle_standard_args( + libdc1394 + DEFAULT_MSG + LIBDC1394_INCLUDE_DIRS + LIBDC1394_LIBRARIES +) + +mark_as_advanced( + LIBDC1394_DEFINITIONS + LIBDC1394_INCLUDE_DIRS + LIBDC1394_LIBRARIES + LIBDC1394_V1_INCLUDE_DIR + LIBDC1394_V1_LIBRARY + LIBDC1394_V2_INCLUDE_DIR + LIBDC1394_V2_LIBRARY +) diff --git a/Modules/FindOde.cmake b/Modules/FindOde.cmake new file mode 100644 index 00000000..b35b0a63 --- /dev/null +++ b/Modules/FindOde.cmake @@ -0,0 +1,100 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + ODE_INCLUDE_PATHS + $ENV{ODEDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include + $ENV{SystemDrive}/ode*/include + $ENV{ProgramW6432}/ode*/include + $ENV{ProgramFiles}/ode*/include +) + +file( + GLOB + ODE_LIBRARY_PATHS + $ENV{ODEDIR}/lib + $ENV{HOME}/lib/ReleaseSingleDLL + $ENV{HOME}/lib/DebugSingleDLL + $ENV{HOME}/lib/ReleaseDoubleDLL + $ENV{HOME}/lib/DebugDoubleDLL + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{SystemDrive}/ode*/lib/ReleaseSingleDLL + $ENV{ProgramW6432}/ode*/lib/ReleaseSingleDLL + $ENV{ProgramFiles}/ode*/lib/ReleaseSingleDLL + $ENV{SystemDrive}/ode*/lib/DebugSingleDLL + $ENV{ProgramW6432}/ode*/lib/DebugSingleDLL + $ENV{ProgramFiles}/ode*/lib/DebugSingleDLL + $ENV{SystemDrive}/ode*/lib/ReleaseDoubleDLL + $ENV{ProgramW6432}/ode*/lib/ReleaseDoubleDLL + $ENV{ProgramFiles}/ode*/lib/ReleaseDoubleDLL + $ENV{SystemDrive}/ode*/lib/DebugDoubleDLL + $ENV{ProgramW6432}/ode*/lib/DebugDoubleDLL + $ENV{ProgramFiles}/ode*/lib/DebugDoubleDLL + $ENV{SystemDrive}/ode*/lib + $ENV{ProgramW6432}/ode*/lib + $ENV{ProgramFiles}/ode*/lib +) + +find_path( + ODE_INCLUDE_DIRS + NAMES + ode/ode.h + HINTS + ${ODE_INCLUDE_PATHS} +) + +find_library( + ODE_LIBRARY_DEBUG + NAMES + oded ode_singled ode_doubled + HINTS + ${ODE_LIBRARY_PATHS} +) + +find_library( + ODE_LIBRARY_RELEASE + NAMES + ode ode_single ode_double + HINTS + ${ODE_LIBRARY_PATHS} +) + +option(ODE_USE_DOUBLE_PRECISION "ODE use double precision" FALSE) + +if(ODE_USE_DOUBLE_PRECISION) + set(ODE_DEFINITIONS -DdDOUBLE) +else(ODE_USE_DOUBLE_PRECISION) + set(ODE_DEFINITIONS -DdSINGLE) +endif(ODE_USE_DOUBLE_PRECISION) + +if(ODE_LIBRARY_DEBUG AND NOT ODE_LIBRARY_RELEASE) + set(ODE_LIBRARIES ${ODE_LIBRARY_DEBUG}) +endif(ODE_LIBRARY_DEBUG AND NOT ODE_LIBRARY_RELEASE) + +if(ODE_LIBRARY_RELEASE AND NOT ODE_LIBRARY_DEBUG) + set(ODE_LIBRARIES ${ODE_LIBRARY_RELEASE}) +endif(ODE_LIBRARY_RELEASE AND NOT ODE_LIBRARY_DEBUG) + +if(ODE_LIBRARY_DEBUG AND ODE_LIBRARY_RELEASE) + set(ODE_LIBRARIES debug ${ODE_LIBRARY_DEBUG} optimized ${ODE_LIBRARY_RELEASE}) +endif(ODE_LIBRARY_DEBUG AND ODE_LIBRARY_RELEASE) + +find_package_handle_standard_args( + ODE + DEFAULT_MSG + ODE_INCLUDE_DIRS + ODE_LIBRARIES +) + +mark_as_advanced( + ODE_DEFINITIONS + ODE_INCLUDE_DIRS + ODE_LIBRARIES + ODE_LIBRARY_DEBUG + ODE_LIBRARY_RELEASE +) diff --git a/Modules/FindPqp.cmake b/Modules/FindPqp.cmake new file mode 100644 index 00000000..b3a52666 --- /dev/null +++ b/Modules/FindPqp.cmake @@ -0,0 +1,53 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + PQP_INCLUDE_PATHS + $ENV{PQPDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include + $ENV{SystemDrive}/pqp*/include + $ENV{ProgramW6432}/pqp*/include + $ENV{ProgramFiles}/pqp*/include +) + +file( + GLOB + PQP_LIBRARY_PATHS + $ENV{PQPDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{SystemDrive}/pqp*/lib + $ENV{ProgramW6432}/pqp*/lib + $ENV{ProgramFiles}/pqp*/lib +) + +find_path( + PQP_INCLUDE_DIRS + NAMES + PQP.h + HINTS + ${PQP_INCLUDE_PATHS} +) + +find_library( + PQP_LIBRARIES + NAMES + PQP + HINTS + ${PQP_LIBRARY_PATHS} +) + +find_package_handle_standard_args( + PQP + DEFAULT_MSG + PQP_INCLUDE_DIRS + PQP_LIBRARIES +) + +mark_as_advanced( + PQP_INCLUDE_DIRS + PQP_LIBRARIES +) diff --git a/Modules/FindSoQt.cmake b/Modules/FindSoQt.cmake new file mode 100644 index 00000000..9921b388 --- /dev/null +++ b/Modules/FindSoQt.cmake @@ -0,0 +1,81 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + SOQT_INCLUDE_PATHS + $ENV{COINDIR}/include + $ENV{COIN3DDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include/Coin* + /usr/include + $ENV{SystemDrive}/Coin*/include + $ENV{ProgramW6432}/Coin*/include + $ENV{ProgramFiles}/Coin*/include +) + +file( + GLOB + SOQT_LIBRARY_PATHS + $ENV{COINDIR}/lib + $ENV{COIN3DDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{SystemDrive}/Coin*/lib + $ENV{ProgramW6432}/Coin*/lib + $ENV{ProgramFiles}/Coin*/lib +) + +find_path( + SOQT_INCLUDE_DIRS + NAMES + Inventor/Qt/SoQt.h + HINTS + ${SOQT_INCLUDE_PATHS} +) + +find_library( + SOQT_LIBRARY_DEBUG + NAMES + SoQtd soqt1d + HINTS + ${SOQT_LIBRARY_PATHS} +) + +find_library( + SOQT_LIBRARY_RELEASE + NAMES + SoQt soqt1 + HINTS + ${SOQT_LIBRARY_PATHS} +) + +set(SOQT_DEFINITIONS -DSOQT_NOT_DLL) + +if(SOQT_LIBRARY_DEBUG AND NOT SOQT_LIBRARY_RELEASE) + set(SOQT_LIBRARIES ${SOQT_LIBRARY_DEBUG}) +endif(SOQT_LIBRARY_DEBUG AND NOT SOQT_LIBRARY_RELEASE) + +if(SOQT_LIBRARY_RELEASE AND NOT SOQT_LIBRARY_DEBUG) + set(SOQT_LIBRARIES ${SOQT_LIBRARY_RELEASE}) +endif(SOQT_LIBRARY_RELEASE AND NOT SOQT_LIBRARY_DEBUG) + +if(SOQT_LIBRARY_DEBUG AND SOQT_LIBRARY_RELEASE) + set(SOQT_LIBRARIES debug ${SOQT_LIBRARY_DEBUG} optimized ${SOQT_LIBRARY_RELEASE}) +endif(SOQT_LIBRARY_DEBUG AND SOQT_LIBRARY_RELEASE) + +find_package_handle_standard_args( + SoQt + DEFAULT_MSG + SOQT_INCLUDE_DIRS + SOQT_LIBRARIES +) + +mark_as_advanced( + SOQT_DEFINITIONS + SOQT_INCLUDE_DIRS + SOQT_LIBRARIES + SOQT_LIBRARY_DEBUG + SOQT_LIBRARY_RELEASE +) diff --git a/Modules/FindSolid.cmake b/Modules/FindSolid.cmake new file mode 100644 index 00000000..754d1cd8 --- /dev/null +++ b/Modules/FindSolid.cmake @@ -0,0 +1,73 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + SOLID_INCLUDE_PATHS + $ENV{SOLIDDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include + $ENV{ProgramW6432}/solid*/include + $ENV{ProgramFiles}/solid*/include +) + +file( + GLOB + SOLID_LIBRARY_PATHS + $ENV{SOLIDDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{ProgramW6432}/solid*/lib + $ENV{ProgramFiles}/solid*/lib +) + +find_path( + SOLID_INCLUDE_DIRS + NAMES + SOLID/SOLID.h + HINTS + ${SOLID_INCLUDE_PATHS} +) + +find_library( + SOLID_LIBRARY_DEBUG + NAMES + solidd solidsd + HINTS + ${SOLID_LIBRARY_PATHS} +) + +find_library( + SOLID_LIBRARY_RELEASE + NAMES + solid solids + HINTS + ${SOLID_LIBRARY_PATHS} +) + +if(SOLID_LIBRARY_DEBUG AND NOT SOLID_LIBRARY_RELEASE) + set(SOLID_LIBRARIES ${SOLID_LIBRARY_DEBUG}) +endif(SOLID_LIBRARY_DEBUG AND NOT SOLID_LIBRARY_RELEASE) + +if(SOLID_LIBRARY_RELEASE AND NOT SOLID_LIBRARY_DEBUG) + set(SOLID_LIBRARIES ${SOLID_LIBRARY_RELEASE}) +endif(SOLID_LIBRARY_RELEASE AND NOT SOLID_LIBRARY_DEBUG) + +if(SOLID_LIBRARY_DEBUG AND SOLID_LIBRARY_RELEASE) + set(SOLID_LIBRARIES debug ${SOLID_LIBRARY_DEBUG} optimized ${SOLID_LIBRARY_RELEASE}) +endif(SOLID_LIBRARY_DEBUG AND SOLID_LIBRARY_RELEASE) + +find_package_handle_standard_args( + SOLID + DEFAULT_MSG + SOLID_INCLUDE_DIRS + SOLID_LIBRARIES +) + +mark_as_advanced( + SOLID_INCLUDE_DIRS + SOLID_LIBRARIES + SOLID_LIBRARY_DEBUG + SOLID_LIBRARY_RELEASE +) diff --git a/Modules/FindZLIB.cmake b/Modules/FindZLIB.cmake new file mode 100644 index 00000000..0aff687b --- /dev/null +++ b/Modules/FindZLIB.cmake @@ -0,0 +1,55 @@ +include(FindPackageHandleStandardArgs) + +file( + GLOB + ZLIB_INCLUDE_PATHS + $ENV{ZLIBDIR}/include + $ENV{HOME}/include + /usr/local/include + /usr/include + $ENV{ProgramW6432}/zlib*/include + $ENV{ProgramFiles}/zlib*/include + $ENV{ProgramW6432}/GnuWin32/include + $ENV{ProgramFiles}/GnuWin32/include +) + +file( + GLOB + ZLIB_LIBRARY_PATHS + $ENV{ZLIBDIR}/lib + $ENV{HOME}/lib + /usr/local/lib + /usr/lib + $ENV{ProgramW6432}/zlib*/lib + $ENV{ProgramFiles}/zlib*/lib + $ENV{ProgramW6432}/GnuWin32/lib + $ENV{ProgramFiles}/GnuWin32/lib +) + +find_path( + ZLIB_INCLUDE_DIRS + NAMES + zlib.h + HINTS + ${ZLIB_INCLUDE_PATHS} +) + +find_library( + ZLIB_LIBRARIES + NAMES + z zlib zlib_a zlibstat zlibwapi zdll + HINTS + ${ZLIB_LIBRARY_PATHS} +) + +find_package_handle_standard_args( + ZLIB + DEFAULT_MSG + ZLIB_INCLUDE_DIRS + ZLIB_LIBRARIES +) + +mark_as_advanced( + ZLIB_INCLUDE_DIRS + ZLIB_LIBRARIES +) diff --git a/demos/rlAxisControllerDemo/CMakeLists.txt b/demos/rlAxisControllerDemo/CMakeLists.txt new file mode 100644 index 00000000..49726372 --- /dev/null +++ b/demos/rlAxisControllerDemo/CMakeLists.txt @@ -0,0 +1,12 @@ +project(rlAxisControllerDemo) + +add_executable( + rlAxisControllerDemo + rlAxisControllerDemo.cpp +) + +target_link_libraries( + rlAxisControllerDemo + rlhal + rlmath +) diff --git a/demos/rlAxisControllerDemo/rlAxisControllerDemo.cpp b/demos/rlAxisControllerDemo/rlAxisControllerDemo.cpp new file mode 100644 index 00000000..45df7bb2 --- /dev/null +++ b/demos/rlAxisControllerDemo/rlAxisControllerDemo.cpp @@ -0,0 +1,146 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include + +#define COACH +//#define GNUPLOT +//#define MITSUBISHI + +#define CUBIC +//#define QUINTIC + +int +main(int argc, char** argv) +{ + try + { +#ifdef COACH + rl::hal::Coach controller(6, 0.00711f, 0, "localhost"); +#endif // COACH +#ifdef GNUPLOT + rl::hal::Gnuplot controller(6, 0.00711f, -10.0f * rl::math::DEG2RAD, 10.0f * rl::math::DEG2RAD); +#endif // GNUPLOT +#ifdef MITSUBISHI + rl::hal::MitsubishiH7 controller(6, "left", "lefthost"); +#endif // MITSUBISHI + + controller.open(); + controller.start(); + + controller.step(); + + rl::math::Vector x0(controller.getDof()); + x0.setZero(); +#ifdef MITSUBISHI + controller.getJointPosition(x0); +#endif // MITSUBISHI + + rl::math::Vector xe(controller.getDof()); + xe = x0 + ::rl::math::Vector::Constant(controller.getDof(), 5.0f * rl::math::DEG2RAD); + +#ifdef CUBIC + std::vector< rl::math::Cubic< rl::math::Real > > interpolator(controller.getDof()); +#endif // CUBIC +#ifdef QUINTIC + std::vector< rl::math::Quintic< rl::math::Real > > interpolator(controller.getDof()); +#endif // QUINTIC + + rl::math::Real te = controller.getUpdateRate() * 300.0f; + + for (std::size_t i = 0; i < interpolator.size(); ++i) + { + interpolator[i].te = te; + interpolator[i].v0 = 0; + interpolator[i].ve = 0; +#ifdef QUINTIC + interpolator[i].a0 = 0; + interpolator[i].ae = 0; +#endif // QUINTIC + } + + rl::math::Vector x(controller.getDof()); + + // start -> goal + + for (std::size_t i = 0; i < interpolator.size(); ++i) + { + interpolator[i].x0 = x0[i]; + interpolator[i].xe = xe[i]; + interpolator[i].interpolate(); + } + + for (std::size_t i = 0; i <= std::ceil(te / controller.getUpdateRate()); ++i) + { + for (std::size_t j = 0; j < controller.getDof(); ++j) + { + x(j) = interpolator[j].x(i * controller.getUpdateRate()); + } + + controller.setJointPosition(x); + + controller.step(); + } + + // goal -> start + + for (std::size_t i = 0; i < interpolator.size(); ++i) + { + interpolator[i].x0 = xe[i]; + interpolator[i].xe = x0[i]; + interpolator[i].interpolate(); + } + + for (std::size_t i = 0; i <= std::ceil(te / controller.getUpdateRate()); ++i) + { + for (std::size_t j = 0; j < controller.getDof(); ++j) + { + x(j) = interpolator[j].x(i * controller.getUpdateRate()); + } + + controller.setJointPosition(x); + + controller.step(); + } + + controller.stop(); + controller.close(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlCameraDemo/CMakeLists.txt b/demos/rlCameraDemo/CMakeLists.txt new file mode 100644 index 00000000..b04abbbb --- /dev/null +++ b/demos/rlCameraDemo/CMakeLists.txt @@ -0,0 +1,15 @@ +project(rlCameraDemo) + +find_package(Libdc1394) + +if(LIBDC1394_FOUND) + add_executable( + rlCameraDemo + rlCameraDemo.cpp + ) + + target_link_libraries( + rlCameraDemo + rlhal + ) +endif(LIBDC1394_FOUND) diff --git a/demos/rlCameraDemo/rlCameraDemo.cpp b/demos/rlCameraDemo/rlCameraDemo.cpp new file mode 100644 index 00000000..985c6329 --- /dev/null +++ b/demos/rlCameraDemo/rlCameraDemo.cpp @@ -0,0 +1,77 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + try + { + rl::hal::Dc1394Camera dc1394(argc > 1 ? argv[1] : ""); + + dc1394.open(); + dc1394.start(); + + dc1394.setFramerate(rl::hal::Dc1394Camera::FRAMERATE_7_5); + dc1394.setSpeed(rl::hal::Dc1394Camera::ISO_SPEED_400); + dc1394.setVideoMode(rl::hal::Dc1394Camera::VIDEO_MODE_1024x768_RGB8); + + dc1394.setFeatureMode(rl::hal::Dc1394Camera::FEATURE_GAIN, rl::hal::Dc1394Camera::FEATURE_MODE_AUTO); + dc1394.setFeatureMode(rl::hal::Dc1394Camera::FEATURE_SHUTTER, rl::hal::Dc1394Camera::FEATURE_MODE_AUTO); + dc1394.setFeatureMode(rl::hal::Dc1394Camera::FEATURE_WHITE_BALANCE, rl::hal::Dc1394Camera::FEATURE_MODE_AUTO); + + unsigned char image[dc1394.getSize()]; + + for (unsigned int i = 0; i < 1; ++i) + { + dc1394.step(); + dc1394.grab(image); + + std::stringstream filename; + filename << "image" << i << ".pgm"; + + FILE* imagefile = fopen(filename.str().c_str(), "w"); + fprintf(imagefile, "P6\n%u %u\n255\n", dc1394.getWidth(), dc1394.getHeight()); + fwrite(image, 1, dc1394.getSize(), imagefile); + fclose(imagefile); + } + + dc1394.stop(); + dc1394.close(); + } + catch (const rl::hal::Exception& e) + { + std::cerr << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlCoachKin/CMakeLists.txt b/demos/rlCoachKin/CMakeLists.txt new file mode 100644 index 00000000..918f583d --- /dev/null +++ b/demos/rlCoachKin/CMakeLists.txt @@ -0,0 +1,114 @@ +project(rlCoachKin) + +find_package(Boost REQUIRED) +find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork QtOpenGL) +set(QT_USE_QTMAIN TRUE) +include(${QT_USE_FILE}) + +find_package(SoQt) + +if(QT_FOUND AND SOQT_FOUND) + set( + HDRS + ConfigurationDelegate.h + ConfigurationModel.h + MainWindow.h + OperationalDelegate.h + OperationalModel.h + Server.h + Socket.h + ) + + set( + SRCS + ConfigurationDelegate.cpp + ConfigurationModel.cpp + MainWindow.cpp + OperationalDelegate.cpp + OperationalModel.cpp + rlCoachKin.cpp + Server.cpp + Socket.cpp + ${rl_SOURCE_DIR}/robotics-library.rc + ) + + qt4_wrap_cpp( + MOC_SRCS + ConfigurationDelegate.h + ConfigurationModel.h + MainWindow.h + OperationalDelegate.h + OperationalModel.h + Server.h + Socket.h + OPTIONS + -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED + ) + + add_executable( + rlCoachKin + WIN32 + ${HDRS} + ${SRCS} + ${MOC_SRCS} + ) + + target_compile_definitions( + rlCoachKin + PUBLIC + ${QT_DEFINITIONS} + ${SOQT_DEFINITIONS} + ) + + target_include_directories( + rlCoachKin + PUBLIC + ${Boost_INCLUDE_DIR} + ${QT_INCLUDES} + ${SOQT_INCLUDE_DIRS} + ) + + target_link_libraries( + rlCoachKin + rlkin + rlmath + rlsg + ${QT_LIBRARIES} + ${SOQT_LIBRARIES} + ) + + set_target_properties( + rlCoachKin + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d + ) + + install( + TARGETS rlCoachKin + COMPONENT demos + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + if(UNIX) + install(FILES rlCoachKin.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT demos) + endif(UNIX) + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlCoachKin.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlCoachKin.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlsg\\\\unimation-puma560_boxes.xml\\\$\\\\\\\" \\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlkin\\\\unimation-puma560.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Visualization and kinematics demo with Unimation Puma 560\\\"" + PARENT_SCOPE + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlCoachKin.lnk\\\"" PARENT_SCOPE) +endif(QT_FOUND AND SOQT_FOUND) diff --git a/demos/rlCoachKin/ConfigurationDelegate.cpp b/demos/rlCoachKin/ConfigurationDelegate.cpp new file mode 100644 index 00000000..72e75ac4 --- /dev/null +++ b/demos/rlCoachKin/ConfigurationDelegate.cpp @@ -0,0 +1,102 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "ConfigurationDelegate.h" +#include "MainWindow.h" + +ConfigurationDelegate::ConfigurationDelegate(QObject* parent) : + QItemDelegate(parent), + id(0) +{ +} + +ConfigurationDelegate::~ConfigurationDelegate() +{ +} + +QWidget* +ConfigurationDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QDoubleSpinBox* editor = new QDoubleSpinBox(parent); + + rl::math::Vector maximum(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getMaximum(maximum); + rl::math::Vector minimum(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getMinimum(minimum); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + editor->setMinimum(minimum(index.row()) * rl::math::RAD2DEG); + editor->setMaximum(maximum(index.row()) * rl::math::RAD2DEG); + editor->setSingleStep(1.0f); + } + else + { + editor->setMinimum(minimum(index.row())); + editor->setMaximum(maximum(index.row())); + editor->setSingleStep(0.1f); + } + + QObject::connect(editor, SIGNAL(valueChanged(double)), this, SLOT(valueChanged(double))); + + return editor; +} + +void +ConfigurationDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); +} + +void +ConfigurationDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->interpretText(); + + if (!model->setData(index, doubleSpinBox->value(), Qt::EditRole)) + { + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); + } +} + +void +ConfigurationDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + editor->setGeometry(option.rect); +} + +void +ConfigurationDelegate::valueChanged(double d) +{ + emit commitData(static_cast< QWidget* >(QObject::sender())); +} diff --git a/demos/rlCoachKin/ConfigurationDelegate.h b/demos/rlCoachKin/ConfigurationDelegate.h new file mode 100644 index 00000000..31654638 --- /dev/null +++ b/demos/rlCoachKin/ConfigurationDelegate.h @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONDELEGATE_H_ +#define _CONFIGURATIONDELEGATE_H_ + +#include + +class ConfigurationDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + ConfigurationDelegate(QObject* parent = NULL); + + virtual ~ConfigurationDelegate(); + + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + void setEditorData(QWidget* editor, const QModelIndex& index) const; + + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; + + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + std::size_t id; + +public slots: + void valueChanged(double d); + +protected: + +private: + +}; + +#endif // _CONFIGURATIONDELEGATE_H_ diff --git a/demos/rlCoachKin/ConfigurationModel.cpp b/demos/rlCoachKin/ConfigurationModel.cpp new file mode 100644 index 00000000..a02343d4 --- /dev/null +++ b/demos/rlCoachKin/ConfigurationModel.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "ConfigurationModel.h" +#include "MainWindow.h" + +ConfigurationModel::ConfigurationModel(QObject* parent) : + QAbstractTableModel(parent), + id(0) +{ +} + +ConfigurationModel::~ConfigurationModel() +{ +} + +int +ConfigurationModel::columnCount(const QModelIndex& parent) const +{ + return 1; +} + +QVariant +ConfigurationModel::data(const QModelIndex& index, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (!index.isValid()) + { + return QVariant(); + } + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + rl::math::Vector q(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPosition(q); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + return q(index.row()) * rl::math::RAD2DEG; + } + else + { + return q(index.row()); + } + } + break; + case Qt::TextAlignmentRole: + return Qt::AlignRight; + break; + default: + break; + } + + return QVariant(); +} + +Qt::ItemFlags +ConfigurationModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + { + return Qt::NoItemFlags; + } + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant +ConfigurationModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (Qt::DisplayRole == role && Qt::Vertical == orientation) + { + return QString::number(section); + } + + return QVariant(); +} + +void +ConfigurationModel::operationalChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) +{ + this->reset(); +} + +int +ConfigurationModel::rowCount(const QModelIndex& parent) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return 0; + } + + return MainWindow::instance()->kinematicModels[this->id]->getDof(); +} + +bool +ConfigurationModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return false; + } + + if (index.isValid() && Qt::EditRole == role) + { + rl::math::Vector q(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPosition(q); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + q(index.row()) = value.value< ::rl::math::Real >() * rl::math::DEG2RAD; + } + else + { + q(index.row()) = value.value< ::rl::math::Real >(); + } + + MainWindow::instance()->kinematicModels[this->id]->setPosition(q); + MainWindow::instance()->kinematicModels[this->id]->updateFrames(); + + for (std::size_t i = 0; i < MainWindow::instance()->geometryModels[this->id]->getNumBodies(); ++i) + { + MainWindow::instance()->geometryModels[this->id]->getBody(i)->setFrame(MainWindow::instance()->kinematicModels[this->id]->getFrame(i)); + } + + emit dataChanged(index, index); + + return true; + } + + return false; +} + +bool +ConfigurationModel::setData(const rl::math::Vector& q) +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return false; + } + + MainWindow::instance()->kinematicModels[this->id]->setPosition(q); + MainWindow::instance()->kinematicModels[this->id]->updateFrames(); + + for (std::size_t i = 0; i < MainWindow::instance()->geometryModels[this->id]->getNumBodies(); ++i) + { + MainWindow::instance()->geometryModels[this->id]->getBody(i)->setFrame(MainWindow::instance()->kinematicModels[this->id]->getFrame(i)); + } + + emit dataChanged(this->createIndex(0, 0), this->createIndex(this->rowCount(), this->columnCount())); + + return true; +} diff --git a/demos/rlCoachKin/ConfigurationModel.h b/demos/rlCoachKin/ConfigurationModel.h new file mode 100644 index 00000000..fc34f465 --- /dev/null +++ b/demos/rlCoachKin/ConfigurationModel.h @@ -0,0 +1,67 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONMODEL_H_ +#define _CONFIGURATIONMODEL_H_ + +#include +#include + +class ConfigurationModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + ConfigurationModel(QObject* parent = NULL); + + virtual ~ConfigurationModel(); + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + + bool setData(const rl::math::Vector& q); + + std::size_t id; + +public slots: + void operationalChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); + +protected: + +private: + +}; + +#endif // _CONFIGURATIONMODEL_H_ diff --git a/demos/rlCoachKin/MainWindow.cpp b/demos/rlCoachKin/MainWindow.cpp new file mode 100644 index 00000000..ef51386b --- /dev/null +++ b/demos/rlCoachKin/MainWindow.cpp @@ -0,0 +1,211 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +#include "ConfigurationDelegate.h" +#include "ConfigurationModel.h" +#include "MainWindow.h" +#include "OperationalDelegate.h" +#include "OperationalModel.h" +#include "Server.h" + +MainWindow::MainWindow(QWidget* parent, Qt::WFlags f) : + QMainWindow(parent, f), + configurationModels(), + scene(), + configurationDelegates(), + configurationDockWidget(new QDockWidget(this)), + configurationTabWidget(new QTabWidget(this)), + configurationViews(), + operationalDelegates(), + operationalDockWidget(new QDockWidget(this)), + operationalTabWidget(new QTabWidget(this)), + operationalViews(), + saveImageAction(new QAction(this)), + saveSceneAction(new QAction(this)), + server(new Server(this)), + viewer(NULL) +{ + MainWindow::singleton = this; + + SoQt::init(this); + SoDB::init(); + + this->scene = boost::make_shared< rl::sg::so::Scene >(); + this->scene->load(QApplication::arguments()[1].toStdString()); + + for (int i = 2; i < QApplication::arguments().size(); ++i) + { + this->geometryModels.push_back(this->scene->getModel(i - 2)); + boost::shared_ptr< rl::kin::Kinematics > kinematicModel; + kinematicModel.reset(rl::kin::Kinematics::create(QApplication::arguments()[i].toStdString())); + this->kinematicModels.push_back(kinematicModel); + } + + for (std::size_t i = 0; i < this->kinematicModels.size(); ++i) + { + ConfigurationDelegate* configurationDelegate = new ConfigurationDelegate(this); + configurationDelegate->id = i; + this->configurationDelegates.push_back(configurationDelegate); + + ConfigurationModel* configurationModel = new ConfigurationModel(this); + configurationModel->id = i; + this->configurationModels.push_back(configurationModel); + + QTableView* configurationView = new QTableView(this); + configurationView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + configurationView->horizontalHeader()->hide(); + configurationView->setAlternatingRowColors(true); + configurationView->setItemDelegate(configurationDelegate); + configurationView->setModel(configurationModel); + configurationView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + this->configurationViews.push_back(configurationView); + + this->configurationTabWidget->addTab(configurationView, QString::number(i)); + + OperationalDelegate* operationalDelegate = new OperationalDelegate(this); + this->operationalDelegates.push_back(operationalDelegate); + + OperationalModel* operationalModel = new OperationalModel(this); + operationalModel->id = i; + this->operationalModels.push_back(operationalModel); + + QTableView* operationalView = new QTableView(this); + operationalView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + operationalView->setAlternatingRowColors(true); + operationalView->setItemDelegate(operationalDelegate); + operationalView->setModel(operationalModel); + operationalView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + this->operationalViews.push_back(operationalView); + + this->operationalTabWidget->addTab(operationalView, QString::number(i)); + + QObject::connect( + configurationModel, + SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), + operationalModel, + SLOT(configurationChanged(const QModelIndex&, const QModelIndex&)) + ); + + QObject::connect( + operationalModel, + SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), + configurationModel, + SLOT(operationalChanged(const QModelIndex&, const QModelIndex&)) + ); + + rl::math::Vector q(this->kinematicModels[i]->getDof()); + q.setZero(); + configurationModel->setData(q); + } + + this->addDockWidget(Qt::LeftDockWidgetArea, configurationDockWidget); + this->configurationDockWidget->resize(160, 320); + this->configurationDockWidget->setWidget(this->configurationTabWidget); + this->configurationDockWidget->setWindowTitle("Configuration"); + + this->addDockWidget(Qt::LeftDockWidgetArea, operationalDockWidget); + this->operationalDockWidget->resize(160, 320); + this->operationalDockWidget->setWidget(this->operationalTabWidget); + this->operationalDockWidget->setWindowTitle("Operational"); + + this->viewer = new SoQtExaminerViewer(this, NULL, true, SoQtFullViewer::BUILD_POPUP); + this->viewer->setSceneGraph(this->scene->root); + this->viewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); + this->viewer->viewAll(); + + this->resize(1024, 768); + this->setCentralWidget(this->viewer->getWidget()); + this->setWindowIconText("rlCoachKin"); + this->setWindowTitle("rlCoachKin"); + + this->init(); + + this->server->listen(QHostAddress::Any, 11235); +} + +MainWindow::~MainWindow() +{ + MainWindow::singleton = NULL; +} + +MainWindow* +MainWindow::instance() +{ + if (NULL == MainWindow::singleton) + { + new MainWindow(); + } + + return MainWindow::singleton; +} + +void +MainWindow::init() +{ + this->configurationDockWidget->toggleViewAction()->setShortcut(QKeySequence("F5")); + this->addAction(this->configurationDockWidget->toggleViewAction()); + + this->saveImageAction->setShortcut(QKeySequence("Return")); + QObject::connect(this->saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage())); + this->addAction(this->saveImageAction); + + this->saveSceneAction->setShortcut(QKeySequence("Ctrl+Return")); + QObject::connect(this->saveSceneAction, SIGNAL(triggered()), this, SLOT(saveScene())); + this->addAction(this->saveSceneAction); +} + +void +MainWindow::saveImage() +{ + QImage image = static_cast< QGLWidget* >(this->viewer->getGLWidget())->grabFrameBuffer(true); + image.save("coach-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".png", "PNG"); +} + +void +MainWindow::saveScene() +{ + SoOutput output; + + if (!output.openFile(QString("coach-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".wrl").toStdString().c_str())) + { + return; + } + + output.setHeaderString("#VRML V2.0 utf8"); + + SoWriteAction writeAction(&output); + writeAction.apply(this->scene->root); + + output.closeFile(); +} diff --git a/demos/rlCoachKin/MainWindow.h b/demos/rlCoachKin/MainWindow.h new file mode 100644 index 00000000..72fe99b9 --- /dev/null +++ b/demos/rlCoachKin/MainWindow.h @@ -0,0 +1,105 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _MAINWINDOW_H_ +#define _MAINWINDOW_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ConfigurationDelegate; +class ConfigurationModel; +class OperationalDelegate; +class OperationalModel; +class Server; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + virtual ~MainWindow(); + + static MainWindow* instance(); + + std::vector< ConfigurationModel* > configurationModels; + + std::vector< rl::sg::Model* > geometryModels; + + std::vector< boost::shared_ptr< rl::kin::Kinematics > > kinematicModels; + + std::vector< OperationalModel* > operationalModels; + + boost::shared_ptr< rl::sg::so::Scene > scene; + +public slots: + void saveImage(); + + void saveScene(); + +protected: + MainWindow(QWidget* parent = NULL, Qt::WindowFlags f = 0); + +private: + void init(); + + std::vector< ConfigurationDelegate* > configurationDelegates; + + QDockWidget* configurationDockWidget; + + QTabWidget* configurationTabWidget; + + std::vector< QTableView* > configurationViews; + + std::vector< OperationalDelegate* > operationalDelegates; + + QDockWidget* operationalDockWidget; + + QTabWidget* operationalTabWidget; + + std::vector< QTableView* > operationalViews; + + QAction* saveImageAction; + + QAction* saveSceneAction; + + Server* server; + + static MainWindow* singleton; + + SoQtExaminerViewer* viewer; +}; + +#endif // _MAINWINDOW_H_ diff --git a/demos/rlCoachKin/OperationalDelegate.cpp b/demos/rlCoachKin/OperationalDelegate.cpp new file mode 100644 index 00000000..c8636535 --- /dev/null +++ b/demos/rlCoachKin/OperationalDelegate.cpp @@ -0,0 +1,100 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "OperationalDelegate.h" +#include "MainWindow.h" + +OperationalDelegate::OperationalDelegate(QObject* parent) : + QItemDelegate(parent) +{ +} + +OperationalDelegate::~OperationalDelegate() +{ +} + +QWidget* +OperationalDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QDoubleSpinBox* editor = new QDoubleSpinBox(parent); + + editor->setMaximum(std::numeric_limits< double >::max()); + editor->setMinimum(-std::numeric_limits< double >::max()); + + switch (index.column()) + { + case 0: + case 1: + case 2: + editor->setSingleStep(0.01f); + break; + case 3: + case 4: + case 5: + editor->setSingleStep(1.0f); + break; + default: + break; + } + + QObject::connect(editor, SIGNAL(valueChanged(double)), this, SLOT(valueChanged(double))); + + return editor; +} + +void +OperationalDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); +} + +void +OperationalDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->interpretText(); + + if (!model->setData(index, doubleSpinBox->value(), Qt::EditRole)) + { + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); + } +} + +void +OperationalDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + editor->setGeometry(option.rect); +} + +void +OperationalDelegate::valueChanged(double d) +{ + emit commitData(static_cast< QWidget* >(QObject::sender())); +} diff --git a/demos/rlCoachKin/OperationalDelegate.h b/demos/rlCoachKin/OperationalDelegate.h new file mode 100644 index 00000000..1b74453c --- /dev/null +++ b/demos/rlCoachKin/OperationalDelegate.h @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _OPERATIONALDELEGATE_H_ +#define _OPERATIONALDELEGATE_H_ + +#include + +class OperationalDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + OperationalDelegate(QObject* parent = NULL); + + virtual ~OperationalDelegate(); + + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + void setEditorData(QWidget* editor, const QModelIndex& index) const; + + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; + + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + +public slots: + void valueChanged(double d); + +protected: + +private: + +}; + +#endif // _OPERATIONALDELEGATE_H_ diff --git a/demos/rlCoachKin/OperationalModel.cpp b/demos/rlCoachKin/OperationalModel.cpp new file mode 100644 index 00000000..4b4f72db --- /dev/null +++ b/demos/rlCoachKin/OperationalModel.cpp @@ -0,0 +1,255 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "ConfigurationModel.h" +#include "OperationalModel.h" +#include "MainWindow.h" + +OperationalModel::OperationalModel(QObject* parent) : + QAbstractTableModel(parent), + id(0) +{ +} + +OperationalModel::~OperationalModel() +{ +} + +int +OperationalModel::columnCount(const QModelIndex& parent) const +{ + return 6; +} + +void +OperationalModel::configurationChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) +{ + this->reset(); +} + +QVariant +OperationalModel::data(const QModelIndex& index, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (!index.isValid()) + { + return QVariant(); + } + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + const rl::math::Transform::ConstTranslationPart& position = MainWindow::instance()->kinematicModels[this->id]->forwardPosition(index.row()).translation(); + rl::math::Vector3 orientation = MainWindow::instance()->kinematicModels[this->id]->forwardPosition(index.row()).rotation().eulerAngles(2, 1, 0).reverse(); + + switch (index.column()) + { + case 0: + return position.x(); + break; + case 1: + return position.y(); + break; + case 2: + return position.z(); + break; + case 3: + return orientation.x() * rl::math::RAD2DEG; + break; + case 4: + return orientation.y() * rl::math::RAD2DEG; + break; + case 5: + return orientation.z() * rl::math::RAD2DEG; + break; + default: + break; + } + } + break; + case Qt::TextAlignmentRole: + return Qt::AlignRight; + break; + default: + break; + } + + return QVariant(); +} + +Qt::ItemFlags +OperationalModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + { + return Qt::NoItemFlags; + } + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant +OperationalModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (Qt::DisplayRole == role && Qt::Horizontal == orientation) + { + switch (section) + { + case 0: + return "x"; + break; + case 1: + return "y"; + break; + case 2: + return "z"; + break; + case 3: + return "a"; + break; + case 4: + return "b"; + break; + case 5: + return "c"; + break; + default: + break; + } + } + + if (Qt::DisplayRole == role && Qt::Vertical == orientation) + { + return section; + } + + return QVariant(); +} + +int +OperationalModel::rowCount(const QModelIndex& parent) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return 0; + } + + return MainWindow::instance()->kinematicModels[this->id]->getOperationalDof(); +} + +bool +OperationalModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return false; + } + + if (index.isValid() && Qt::EditRole == role) + { + rl::math::Transform x = MainWindow::instance()->kinematicModels[this->id]->forwardPosition(index.row()); + + rl::math::Transform::TranslationPart position = x.translation(); + rl::math::Vector3 orientation = x.linear().eulerAngles(2, 1, 0).reverse(); + + switch (index.column()) + { + case 0: + x.translation().x() = value.value< rl::math::Real >(); + break; + case 1: + x.translation().y() = value.value< rl::math::Real >(); + break; + case 2: + x.translation().z() = value.value< rl::math::Real >(); + break; + case 3: + x.linear() = ( + rl::math::AngleAxis(orientation.z(), rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(orientation.y(), rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(value.value< rl::math::Real >() * rl::math::DEG2RAD, rl::math::Vector3::UnitX()) + ).toRotationMatrix(); + break; + case 4: + x.linear() = ( + rl::math::AngleAxis(orientation.z(), rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(value.value< rl::math::Real >() * rl::math::DEG2RAD, rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(orientation.x(), rl::math::Vector3::UnitX()) + ).toRotationMatrix(); + break; + case 5: + x.linear() = ( + rl::math::AngleAxis(value.value< rl::math::Real >() * rl::math::DEG2RAD, rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(orientation.y(), rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(orientation.x(), rl::math::Vector3::UnitX()) + ).toRotationMatrix(); + break; + default: + break; + } + + rl::math::Vector q(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPosition(q); + rl::math::Vector qInv(MainWindow::instance()->kinematicModels[this->id]->getDof()); + + if (MainWindow::instance()->kinematicModels[this->id]->inversePosition(x, qInv, index.row(), 1.0f)) + { + MainWindow::instance()->kinematicModels[this->id]->setPosition(qInv); + MainWindow::instance()->kinematicModels[this->id]->updateFrames(); + + for (std::size_t i = 0; i < MainWindow::instance()->geometryModels[this->id]->getNumBodies(); ++i) + { + MainWindow::instance()->geometryModels[this->id]->getBody(i)->setFrame(MainWindow::instance()->kinematicModels[this->id]->getFrame(i)); + } + + emit dataChanged(this->createIndex(0, 0), this->createIndex(this->rowCount(), this->columnCount())); + + return true; + } + else + { + MainWindow::instance()->kinematicModels[this->id]->setPosition(q); + MainWindow::instance()->kinematicModels[this->id]->updateFrames(); + } + } + + return false; +} diff --git a/demos/rlCoachKin/OperationalModel.h b/demos/rlCoachKin/OperationalModel.h new file mode 100644 index 00000000..b443f324 --- /dev/null +++ b/demos/rlCoachKin/OperationalModel.h @@ -0,0 +1,64 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _OPERATIONALMODEL_H_ +#define _OPERATIONALMODEL_H_ + +#include + +class OperationalModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + OperationalModel(QObject* parent = NULL); + + virtual ~OperationalModel(); + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + + std::size_t id; + +public slots: + void configurationChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); + +protected: + +private: + +}; + +#endif // _OPERATIONALMODEL_H_ diff --git a/demos/rlCoachKin/Server.cpp b/demos/rlCoachKin/Server.cpp new file mode 100644 index 00000000..7f91ad7a --- /dev/null +++ b/demos/rlCoachKin/Server.cpp @@ -0,0 +1,44 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Server.h" +#include "Socket.h" + +Server::Server(QObject* parent) : + QTcpServer(parent) +{ +} + +Server::~Server() +{ +} + +void +Server::incomingConnection(int socketDescriptor) +{ + Socket* socket = new Socket(this); + socket->setSocketDescriptor(socketDescriptor); +} diff --git a/demos/rlCoachKin/Server.h b/demos/rlCoachKin/Server.h new file mode 100644 index 00000000..918e471c --- /dev/null +++ b/demos/rlCoachKin/Server.h @@ -0,0 +1,48 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _SERVER_H_ +#define _SERVER_H_ + +#include + +class Server : public QTcpServer +{ + Q_OBJECT + +public: + Server(QObject* parent = NULL); + + virtual ~Server(); + +protected: + void incomingConnection(int socketDescriptor); + +private: + +}; + +#endif //_SERVER_H_ diff --git a/demos/rlCoachKin/Socket.cpp b/demos/rlCoachKin/Socket.cpp new file mode 100644 index 00000000..e58992ed --- /dev/null +++ b/demos/rlCoachKin/Socket.cpp @@ -0,0 +1,176 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "ConfigurationModel.h" +#include "MainWindow.h" +#include "Socket.h" + +Socket::Socket(QObject* parent) : + QTcpSocket(parent) +{ + QObject::connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater())); + QObject::connect(this, SIGNAL(readyRead()), this, SLOT(readClient())); +} + +Socket::~Socket() +{ +} + +void +Socket::readClient() +{ + QTextStream textStream(this); + + while (this->canReadLine()) + { + std::size_t cmd = 0; + textStream >> cmd; + + switch (cmd) + { + case 0: + { + std::size_t i = 0; + textStream >> i; + + std::size_t j = 0; + textStream >> j; + + rl::math::Real x = 0; + textStream >> x; + + rl::math::Real y = 0; + textStream >> y; + + rl::math::Real z = 0; + textStream >> z; + + rl::math::Real a = 0; + textStream >> a; + + rl::math::Real b = 0; + textStream >> b; + + rl::math::Real c = 0; + textStream >> c; + + rl::math::Transform t; + t = rl::math::AngleAxis(c, rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(b, rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(a, rl::math::Vector3::UnitX()); + t.translation().x() = x; + t.translation().y() = y; + t.translation().z() = z; + + if (MainWindow::instance()->scene->getNumModels() > i) + { + if (MainWindow::instance()->scene->getModel(i)->getNumBodies() > j) + { + MainWindow::instance()->scene->getModel(i)->getBody(j)->setFrame(t); + } + } + } + break; + case 1: + { + std::size_t i = 0; + textStream >> i; + + std::size_t j = 0; + textStream >> j; + + std::size_t k = 0; + textStream >> k; + + rl::math::Real x = 0; + textStream >> x; + + rl::math::Real y = 0; + textStream >> y; + + rl::math::Real z = 0; + textStream >> z; + + rl::math::Real a = 0; + textStream >> a; + + rl::math::Real b = 0; + textStream >> b; + + rl::math::Real c = 0; + textStream >> c; + + rl::math::Transform t; + t = rl::math::AngleAxis(c, rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(b, rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(a, rl::math::Vector3::UnitX()); + t.translation().x() = x; + t.translation().y() = y; + t.translation().z() = z; + + if (MainWindow::instance()->scene->getNumModels() > i) + { + if (MainWindow::instance()->scene->getModel(i)->getNumBodies() > j) + { + if (MainWindow::instance()->scene->getModel(i)->getBody(j)->getNumShapes() > k) + { + MainWindow::instance()->scene->getModel(i)->getBody(j)->getShape(k)->setTransform(t); + } + } + } + } + break; + case 2: + { + std::size_t i = 0; + textStream >> i; + + if (i < MainWindow::instance()->kinematicModels.size()) + { + rl::math::Vector q(MainWindow::instance()->kinematicModels[i]->getDof()); + q.setZero(); + + for (std::ptrdiff_t j = 0; j < q.size(); ++j) + { + textStream >> q(j); + } + + MainWindow::instance()->configurationModels[i]->setData(q); + } + } + break; + default: + break; + } + + textStream << endl; + } +} diff --git a/demos/rlCoachKin/Socket.h b/demos/rlCoachKin/Socket.h new file mode 100644 index 00000000..37e7ac8c --- /dev/null +++ b/demos/rlCoachKin/Socket.h @@ -0,0 +1,49 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _SOCKET_H_ +#define _SOCKET_H_ + +#include + +class Socket : public QTcpSocket +{ + Q_OBJECT + +public: + Socket(QObject* parent = NULL); + + virtual ~Socket(); + +protected: + +private: + +private slots: + void readClient(); +}; + +#endif // _SOCKET_H_ diff --git a/demos/rlCoachKin/rlCoachKin.cpp b/demos/rlCoachKin/rlCoachKin.cpp new file mode 100644 index 00000000..03e3e89f --- /dev/null +++ b/demos/rlCoachKin/rlCoachKin.cpp @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "MainWindow.h" + +MainWindow* MainWindow::singleton = NULL; + +int +main(int argc, char** argv) +{ + if (argc < 3) + { + std::cout << "Usage: rlCoachKin SCENEFILE KINEMATICSFILE1 ... KINEMATICSFILEn" << std::endl; + return 1; + } + + try + { + QApplication application(argc, argv); + + QObject::connect(&application, SIGNAL(lastWindowClosed()), &application, SLOT(quit())); + + MainWindow::instance()->show(); + + return application.exec(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return -1; + } +} diff --git a/demos/rlCoachKin/rlCoachKin.desktop b/demos/rlCoachKin/rlCoachKin.desktop new file mode 100644 index 00000000..7bd322da --- /dev/null +++ b/demos/rlCoachKin/rlCoachKin.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Categories=Science;Robotics; +Comment=Visualization and kinematics demo with Unimation Puma 560 +Exec=sh -c "rlCoachKin $(dirname %k)/../rl/examples/rlsg/unimation-puma560_boxes.xml $(dirname %k)/../rl/examples/rlkin/unimation-puma560.xml" +Icon=robotics-library +Name=Robotics Library (rlCoachKin) +Type=Application +X-Unity-IconBackgroundColor=#ffffff diff --git a/demos/rlCoachMdl/CMakeLists.txt b/demos/rlCoachMdl/CMakeLists.txt new file mode 100644 index 00000000..99f781b6 --- /dev/null +++ b/demos/rlCoachMdl/CMakeLists.txt @@ -0,0 +1,114 @@ +project(rlCoachMdl) + +find_package(Boost REQUIRED) +find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork QtOpenGL) +set(QT_USE_QTMAIN TRUE) +include(${QT_USE_FILE}) + +find_package(SoQt) + +if(QT_FOUND AND SOQT_FOUND) + set( + HDRS + ConfigurationDelegate.h + ConfigurationModel.h + MainWindow.h + OperationalDelegate.h + OperationalModel.h + Server.h + Socket.h + ) + + set( + SRCS + ConfigurationDelegate.cpp + ConfigurationModel.cpp + MainWindow.cpp + OperationalDelegate.cpp + OperationalModel.cpp + rlCoachMdl.cpp + Server.cpp + Socket.cpp + ${rl_SOURCE_DIR}/robotics-library.rc + ) + + qt4_wrap_cpp( + MOC_SRCS + ConfigurationDelegate.h + ConfigurationModel.h + MainWindow.h + OperationalDelegate.h + OperationalModel.h + Server.h + Socket.h + OPTIONS + -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED + ) + + add_executable( + rlCoachMdl + WIN32 + ${HDRS} + ${SRCS} + ${MOC_SRCS} + ) + + target_compile_definitions( + rlCoachMdl + PUBLIC + ${QT_DEFINITIONS} + ${SOQT_DEFINITIONS} + ) + + target_include_directories( + rlCoachMdl + PUBLIC + ${Boost_INCLUDE_DIR} + ${QT_INCLUDES} + ${SOQT_INCLUDE_DIRS} + ) + + target_link_libraries( + rlCoachMdl + rlmath + rlmdl + rlsg + ${QT_LIBRARIES} + ${SOQT_LIBRARIES} + ) + + set_target_properties( + rlCoachMdl + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d + ) + + install( + TARGETS rlCoachMdl + COMPONENT demos + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + if(UNIX) + install(FILES rlCoachMdl.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT demos) + endif(UNIX) + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlCoachMdl.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlCoachMdl.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlsg\\\\unimation-puma560_boxes.xml\\\$\\\\\\\" \\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlmdl\\\\unimation-puma560.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Visualization and kinematics demo with Unimation Puma 560\\\"" + PARENT_SCOPE + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlCoachMdl.lnk\\\"" PARENT_SCOPE) +endif(QT_FOUND AND SOQT_FOUND) diff --git a/demos/rlCoachMdl/ConfigurationDelegate.cpp b/demos/rlCoachMdl/ConfigurationDelegate.cpp new file mode 100644 index 00000000..3303a965 --- /dev/null +++ b/demos/rlCoachMdl/ConfigurationDelegate.cpp @@ -0,0 +1,105 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +#include "ConfigurationDelegate.h" +#include "MainWindow.h" + +ConfigurationDelegate::ConfigurationDelegate(QObject* parent) : + QItemDelegate(parent), + id(0) +{ +} + +ConfigurationDelegate::~ConfigurationDelegate() +{ +} + +QWidget* +ConfigurationDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QDoubleSpinBox* editor = new QDoubleSpinBox(parent); + + rl::math::Vector maximum(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getMaximum(maximum); + rl::math::Vector minimum(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getMinimum(minimum); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + editor->setMinimum(minimum(index.row()) * rl::math::RAD2DEG); + editor->setMaximum(maximum(index.row()) * rl::math::RAD2DEG); + editor->setSingleStep(1.0f); + } + else + { + editor->setMinimum(minimum(index.row())); + editor->setMaximum(maximum(index.row())); + editor->setSingleStep(0.1f); + } + + QObject::connect(editor, SIGNAL(valueChanged(double)), this, SLOT(valueChanged(double))); + + return editor; +} + +void +ConfigurationDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); +} + +void +ConfigurationDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->interpretText(); + + if (!model->setData(index, doubleSpinBox->value(), Qt::EditRole)) + { + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); + } +} + +void +ConfigurationDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + editor->setGeometry(option.rect); +} + +void +ConfigurationDelegate::valueChanged(double d) +{ + emit commitData(static_cast< QWidget* >(QObject::sender())); +} diff --git a/demos/rlCoachMdl/ConfigurationDelegate.h b/demos/rlCoachMdl/ConfigurationDelegate.h new file mode 100644 index 00000000..31654638 --- /dev/null +++ b/demos/rlCoachMdl/ConfigurationDelegate.h @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONDELEGATE_H_ +#define _CONFIGURATIONDELEGATE_H_ + +#include + +class ConfigurationDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + ConfigurationDelegate(QObject* parent = NULL); + + virtual ~ConfigurationDelegate(); + + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + void setEditorData(QWidget* editor, const QModelIndex& index) const; + + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; + + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + std::size_t id; + +public slots: + void valueChanged(double d); + +protected: + +private: + +}; + +#endif // _CONFIGURATIONDELEGATE_H_ diff --git a/demos/rlCoachMdl/ConfigurationModel.cpp b/demos/rlCoachMdl/ConfigurationModel.cpp new file mode 100644 index 00000000..7207b4e9 --- /dev/null +++ b/demos/rlCoachMdl/ConfigurationModel.cpp @@ -0,0 +1,219 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "ConfigurationModel.h" +#include "MainWindow.h" + +ConfigurationModel::ConfigurationModel(QObject* parent) : + QAbstractTableModel(parent), + id(0) +{ +} + +ConfigurationModel::~ConfigurationModel() +{ +} + +int +ConfigurationModel::columnCount(const QModelIndex& parent) const +{ + return 1; +} + +QVariant +ConfigurationModel::data(const QModelIndex& index, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (!index.isValid()) + { + return QVariant(); + } + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + rl::math::Vector q(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPosition(q); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->kinematicModels[this->id]->getDof()); + MainWindow::instance()->kinematicModels[this->id]->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + return q(index.row()) * rl::math::RAD2DEG; + } + else + { + return q(index.row()); + } + } + break; + case Qt::TextAlignmentRole: + return Qt::AlignRight; + break; + default: + break; + } + + return QVariant(); +} + +Qt::ItemFlags +ConfigurationModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + { + return Qt::NoItemFlags; + } + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant +ConfigurationModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (Qt::DisplayRole == role && Qt::Vertical == orientation) + { + if (rl::mdl::Kinematic* kinematic = dynamic_cast< rl::mdl::Kinematic* >(MainWindow::instance()->kinematicModels[this->id].get())) + { + for (std::size_t i = 0, j = 0; i < kinematic->getJoints(); ++i) + { + rl::mdl::Joint* joint = kinematic->getJoint(i); + + for (std::size_t k = 0; k < joint->getDofPosition(); ++j, ++k) + { + if (section == j) + { + return QString::fromStdString(joint->getName()); + } + } + } + } + } + + return QVariant(); +} + +void +ConfigurationModel::operationalChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) +{ + this->reset(); +} + +int +ConfigurationModel::rowCount(const QModelIndex& parent) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return 0; + } + + return MainWindow::instance()->kinematicModels[this->id]->getDof(); +} + +bool +ConfigurationModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return false; + } + + if (index.isValid() && Qt::EditRole == role) + { + if (rl::mdl::Kinematic* kinematic = dynamic_cast< rl::mdl::Kinematic* >(MainWindow::instance()->kinematicModels[this->id].get())) + { + rl::math::Vector q(kinematic->getDof()); + kinematic->getPosition(q); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(kinematic->getDof()); + kinematic->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + q(index.row()) = value.value< ::rl::math::Real >() * rl::math::DEG2RAD; + } + else + { + q(index.row()) = value.value< ::rl::math::Real >(); + } + + kinematic->setPosition(q); + kinematic->forwardPosition(); + + for (std::size_t i = 0; i < MainWindow::instance()->geometryModels[this->id]->getNumBodies(); ++i) + { + MainWindow::instance()->geometryModels[this->id]->getBody(i)->setFrame(kinematic->getFrame(i)); + } + + emit dataChanged(index, index); + + return true; + } + } + + return false; +} + +bool +ConfigurationModel::setData(const rl::math::Vector& q) +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return false; + } + + if (rl::mdl::Kinematic* kinematic = dynamic_cast< rl::mdl::Kinematic* >(MainWindow::instance()->kinematicModels[this->id].get())) + { + kinematic->setPosition(q); + kinematic->forwardPosition(); + + for (std::size_t i = 0; i < MainWindow::instance()->geometryModels[this->id]->getNumBodies(); ++i) + { + MainWindow::instance()->geometryModels[this->id]->getBody(i)->setFrame(kinematic->getFrame(i)); + } + + emit dataChanged(this->createIndex(0, 0), this->createIndex(this->rowCount(), this->columnCount())); + + return true; + } + + return false; +} diff --git a/demos/rlCoachMdl/ConfigurationModel.h b/demos/rlCoachMdl/ConfigurationModel.h new file mode 100644 index 00000000..fc34f465 --- /dev/null +++ b/demos/rlCoachMdl/ConfigurationModel.h @@ -0,0 +1,67 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONMODEL_H_ +#define _CONFIGURATIONMODEL_H_ + +#include +#include + +class ConfigurationModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + ConfigurationModel(QObject* parent = NULL); + + virtual ~ConfigurationModel(); + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + + bool setData(const rl::math::Vector& q); + + std::size_t id; + +public slots: + void operationalChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); + +protected: + +private: + +}; + +#endif // _CONFIGURATIONMODEL_H_ diff --git a/demos/rlCoachMdl/MainWindow.cpp b/demos/rlCoachMdl/MainWindow.cpp new file mode 100644 index 00000000..197fe14f --- /dev/null +++ b/demos/rlCoachMdl/MainWindow.cpp @@ -0,0 +1,214 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ConfigurationDelegate.h" +#include "ConfigurationModel.h" +#include "MainWindow.h" +#include "OperationalDelegate.h" +#include "OperationalModel.h" +#include "Server.h" + +MainWindow::MainWindow(QWidget* parent, Qt::WFlags f) : + QMainWindow(parent, f), + configurationModels(), + scene(), + configurationDelegates(), + configurationDockWidget(new QDockWidget(this)), + configurationTabWidget(new QTabWidget(this)), + configurationViews(), + operationalDelegates(), + operationalDockWidget(new QDockWidget(this)), + operationalTabWidget(new QTabWidget(this)), + operationalViews(), + saveImageAction(new QAction(this)), + saveSceneAction(new QAction(this)), + server(new Server(this)), + viewer(NULL) +{ + MainWindow::singleton = this; + + SoQt::init(this); + SoDB::init(); + + this->scene = boost::make_shared< rl::sg::so::Scene >(); + this->scene->load(QApplication::arguments()[1].toStdString()); + + rl::mdl::XmlFactory factory; + + for (int i = 2; i < QApplication::arguments().size(); ++i) + { + this->geometryModels.push_back(this->scene->getModel(i - 2)); + boost::shared_ptr< rl::mdl::Model > kinematicModel; + kinematicModel.reset(factory.create(QApplication::arguments()[i].toStdString())); + this->kinematicModels.push_back(kinematicModel); + } + + for (std::size_t i = 0; i < this->kinematicModels.size(); ++i) + { + ConfigurationDelegate* configurationDelegate = new ConfigurationDelegate(this); + configurationDelegate->id = i; + this->configurationDelegates.push_back(configurationDelegate); + + ConfigurationModel* configurationModel = new ConfigurationModel(this); + configurationModel->id = i; + this->configurationModels.push_back(configurationModel); + + QTableView* configurationView = new QTableView(this); + configurationView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + configurationView->horizontalHeader()->hide(); + configurationView->setAlternatingRowColors(true); + configurationView->setItemDelegate(configurationDelegate); + configurationView->setModel(configurationModel); + configurationView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + this->configurationViews.push_back(configurationView); + + this->configurationTabWidget->addTab(configurationView, QString::number(i)); + + OperationalDelegate* operationalDelegate = new OperationalDelegate(this); + this->operationalDelegates.push_back(operationalDelegate); + + OperationalModel* operationalModel = new OperationalModel(this); + operationalModel->id = i; + this->operationalModels.push_back(operationalModel); + + QTableView* operationalView = new QTableView(this); + operationalView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + operationalView->setAlternatingRowColors(true); + operationalView->setItemDelegate(operationalDelegate); + operationalView->setModel(operationalModel); + operationalView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + this->operationalViews.push_back(operationalView); + + this->operationalTabWidget->addTab(operationalView, QString::number(i)); + + QObject::connect( + configurationModel, + SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), + operationalModel, + SLOT(configurationChanged(const QModelIndex&, const QModelIndex&)) + ); + + QObject::connect( + operationalModel, + SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)), + configurationModel, + SLOT(operationalChanged(const QModelIndex&, const QModelIndex&)) + ); + + rl::math::Vector q(this->kinematicModels[i]->getDof()); + q.setZero(); + configurationModel->setData(q); + } + + this->addDockWidget(Qt::LeftDockWidgetArea, configurationDockWidget); + this->configurationDockWidget->resize(160, 320); + this->configurationDockWidget->setWidget(this->configurationTabWidget); + this->configurationDockWidget->setWindowTitle("Configuration"); + + this->addDockWidget(Qt::LeftDockWidgetArea, operationalDockWidget); + this->operationalDockWidget->resize(160, 320); + this->operationalDockWidget->setWidget(this->operationalTabWidget); + this->operationalDockWidget->setWindowTitle("Operational"); + + this->viewer = new SoQtExaminerViewer(this, NULL, true, SoQtFullViewer::BUILD_POPUP); + this->viewer->setSceneGraph(this->scene->root); + this->viewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); + this->viewer->viewAll(); + + this->resize(1024, 768); + this->setCentralWidget(this->viewer->getWidget()); + this->setWindowIconText("rlCoachMdl"); + this->setWindowTitle("rlCoachMdl"); + + this->init(); + + this->server->listen(QHostAddress::Any, 11235); +} + +MainWindow::~MainWindow() +{ + MainWindow::singleton = NULL; +} + +MainWindow* +MainWindow::instance() +{ + if (NULL == MainWindow::singleton) + { + new MainWindow(); + } + + return MainWindow::singleton; +} + +void +MainWindow::init() +{ + this->configurationDockWidget->toggleViewAction()->setShortcut(QKeySequence("F5")); + this->addAction(this->configurationDockWidget->toggleViewAction()); + + this->saveImageAction->setShortcut(QKeySequence("Return")); + QObject::connect(this->saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage())); + this->addAction(this->saveImageAction); + + this->saveSceneAction->setShortcut(QKeySequence("Ctrl+Return")); + QObject::connect(this->saveSceneAction, SIGNAL(triggered()), this, SLOT(saveScene())); + this->addAction(this->saveSceneAction); +} + +void +MainWindow::saveImage() +{ + QImage image = static_cast< QGLWidget* >(this->viewer->getGLWidget())->grabFrameBuffer(true); + image.save("coach-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".png", "PNG"); +} + +void +MainWindow::saveScene() +{ + SoOutput output; + + if (!output.openFile(QString("coach-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".wrl").toStdString().c_str())) + { + return; + } + + output.setHeaderString("#VRML V2.0 utf8"); + + SoWriteAction writeAction(&output); + writeAction.apply(this->scene->root); + + output.closeFile(); +} diff --git a/demos/rlCoachMdl/MainWindow.h b/demos/rlCoachMdl/MainWindow.h new file mode 100644 index 00000000..b94e1b0c --- /dev/null +++ b/demos/rlCoachMdl/MainWindow.h @@ -0,0 +1,105 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _MAINWINDOW_H_ +#define _MAINWINDOW_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ConfigurationDelegate; +class ConfigurationModel; +class OperationalDelegate; +class OperationalModel; +class Server; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + virtual ~MainWindow(); + + static MainWindow* instance(); + + std::vector< ConfigurationModel* > configurationModels; + + std::vector< rl::sg::Model* > geometryModels; + + std::vector< boost::shared_ptr< rl::mdl::Model > > kinematicModels; + + std::vector< OperationalModel* > operationalModels; + + boost::shared_ptr< rl::sg::so::Scene > scene; + +public slots: + void saveImage(); + + void saveScene(); + +protected: + MainWindow(QWidget* parent = NULL, Qt::WindowFlags f = 0); + +private: + void init(); + + std::vector< ConfigurationDelegate* > configurationDelegates; + + QDockWidget* configurationDockWidget; + + QTabWidget* configurationTabWidget; + + std::vector< QTableView* > configurationViews; + + std::vector< OperationalDelegate* > operationalDelegates; + + QDockWidget* operationalDockWidget; + + QTabWidget* operationalTabWidget; + + std::vector< QTableView* > operationalViews; + + QAction* saveImageAction; + + QAction* saveSceneAction; + + Server* server; + + static MainWindow* singleton; + + SoQtExaminerViewer* viewer; +}; + +#endif // _MAINWINDOW_H_ diff --git a/demos/rlCoachMdl/OperationalDelegate.cpp b/demos/rlCoachMdl/OperationalDelegate.cpp new file mode 100644 index 00000000..c8636535 --- /dev/null +++ b/demos/rlCoachMdl/OperationalDelegate.cpp @@ -0,0 +1,100 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "OperationalDelegate.h" +#include "MainWindow.h" + +OperationalDelegate::OperationalDelegate(QObject* parent) : + QItemDelegate(parent) +{ +} + +OperationalDelegate::~OperationalDelegate() +{ +} + +QWidget* +OperationalDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QDoubleSpinBox* editor = new QDoubleSpinBox(parent); + + editor->setMaximum(std::numeric_limits< double >::max()); + editor->setMinimum(-std::numeric_limits< double >::max()); + + switch (index.column()) + { + case 0: + case 1: + case 2: + editor->setSingleStep(0.01f); + break; + case 3: + case 4: + case 5: + editor->setSingleStep(1.0f); + break; + default: + break; + } + + QObject::connect(editor, SIGNAL(valueChanged(double)), this, SLOT(valueChanged(double))); + + return editor; +} + +void +OperationalDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); +} + +void +OperationalDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->interpretText(); + + if (!model->setData(index, doubleSpinBox->value(), Qt::EditRole)) + { + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); + } +} + +void +OperationalDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + editor->setGeometry(option.rect); +} + +void +OperationalDelegate::valueChanged(double d) +{ + emit commitData(static_cast< QWidget* >(QObject::sender())); +} diff --git a/demos/rlCoachMdl/OperationalDelegate.h b/demos/rlCoachMdl/OperationalDelegate.h new file mode 100644 index 00000000..1b74453c --- /dev/null +++ b/demos/rlCoachMdl/OperationalDelegate.h @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _OPERATIONALDELEGATE_H_ +#define _OPERATIONALDELEGATE_H_ + +#include + +class OperationalDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + OperationalDelegate(QObject* parent = NULL); + + virtual ~OperationalDelegate(); + + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + void setEditorData(QWidget* editor, const QModelIndex& index) const; + + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; + + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + +public slots: + void valueChanged(double d); + +protected: + +private: + +}; + +#endif // _OPERATIONALDELEGATE_H_ diff --git a/demos/rlCoachMdl/OperationalModel.cpp b/demos/rlCoachMdl/OperationalModel.cpp new file mode 100644 index 00000000..26bf38ac --- /dev/null +++ b/demos/rlCoachMdl/OperationalModel.cpp @@ -0,0 +1,257 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "ConfigurationModel.h" +#include "OperationalModel.h" +#include "MainWindow.h" + +OperationalModel::OperationalModel(QObject* parent) : + QAbstractTableModel(parent), + id(0) +{ +} + +OperationalModel::~OperationalModel() +{ +} + +int +OperationalModel::columnCount(const QModelIndex& parent) const +{ + return 6; +} + +void +OperationalModel::configurationChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) +{ + this->reset(); +} + +QVariant +OperationalModel::data(const QModelIndex& index, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (!index.isValid()) + { + return QVariant(); + } + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + const rl::math::Transform::ConstTranslationPart& position = MainWindow::instance()->kinematicModels[this->id]->getOperationalPosition(index.row()).translation(); + rl::math::Vector3 orientation = MainWindow::instance()->kinematicModels[this->id]->getOperationalPosition(index.row()).rotation().eulerAngles(2, 1, 0).reverse(); + + switch (index.column()) + { + case 0: + return position.x(); + break; + case 1: + return position.y(); + break; + case 2: + return position.z(); + break; + case 3: + return orientation.x() * rl::math::RAD2DEG; + break; + case 4: + return orientation.y() * rl::math::RAD2DEG; + break; + case 5: + return orientation.z() * rl::math::RAD2DEG; + break; + default: + break; + } + } + break; + case Qt::TextAlignmentRole: + return Qt::AlignRight; + break; + default: + break; + } + + return QVariant(); +} + +Qt::ItemFlags +OperationalModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + { + return Qt::NoItemFlags; + } + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant +OperationalModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return QVariant(); + } + + if (Qt::DisplayRole == role && Qt::Horizontal == orientation) + { + switch (section) + { + case 0: + return "x"; + break; + case 1: + return "y"; + break; + case 2: + return "z"; + break; + case 3: + return "a"; + break; + case 4: + return "b"; + break; + case 5: + return "c"; + break; + default: + break; + } + } + + if (Qt::DisplayRole == role && Qt::Vertical == orientation) + { + return section; + } + + return QVariant(); +} + +int +OperationalModel::rowCount(const QModelIndex& parent) const +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return 0; + } + + return MainWindow::instance()->kinematicModels[this->id]->getOperationalDof(); +} + +bool +OperationalModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (NULL == MainWindow::instance()->kinematicModels[this->id]) + { + return false; + } + + if (index.isValid() && Qt::EditRole == role) + { + if (rl::mdl::Kinematic* kinematic = dynamic_cast< rl::mdl::Kinematic* >(MainWindow::instance()->kinematicModels[this->id].get())) + { + rl::math::Transform x = kinematic->getOperationalPosition(index.row()); + + rl::math::Transform::TranslationPart position = x.translation(); + rl::math::Vector3 orientation = x.linear().eulerAngles(2, 1, 0).reverse(); + + switch (index.column()) + { + case 0: + x.translation().x() = value.value< rl::math::Real >(); + break; + case 1: + x.translation().y() = value.value< rl::math::Real >(); + break; + case 2: + x.translation().z() = value.value< rl::math::Real >(); + break; + case 3: + x.linear() = ( + rl::math::AngleAxis(orientation.z(), rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(orientation.y(), rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(value.value< rl::math::Real >() * rl::math::DEG2RAD, rl::math::Vector3::UnitX()) + ).toRotationMatrix(); + break; + case 4: + x.linear() = ( + rl::math::AngleAxis(orientation.z(), rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(value.value< rl::math::Real >() * rl::math::DEG2RAD, rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(orientation.x(), rl::math::Vector3::UnitX()) + ).toRotationMatrix(); + break; + case 5: + x.linear() = ( + rl::math::AngleAxis(value.value< rl::math::Real >() * rl::math::DEG2RAD, rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(orientation.y(), rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(orientation.x(), rl::math::Vector3::UnitX()) + ).toRotationMatrix(); + break; + default: + break; + } + + rl::math::Vector q(kinematic->getDof()); + kinematic->getPosition(q); + + if (kinematic->calculateInversePosition(x, index.row(), 1.0f)) + { + kinematic->forwardPosition(); + + for (std::size_t i = 0; i < MainWindow::instance()->geometryModels[this->id]->getNumBodies(); ++i) + { + MainWindow::instance()->geometryModels[this->id]->getBody(i)->setFrame(kinematic->getFrame(i)); + } + + emit dataChanged(this->createIndex(0, 0), this->createIndex(this->rowCount(), this->columnCount())); + + return true; + } + else + { + kinematic->setPosition(q); + kinematic->forwardPosition(); + } + } + } + + return false; +} diff --git a/demos/rlCoachMdl/OperationalModel.h b/demos/rlCoachMdl/OperationalModel.h new file mode 100644 index 00000000..b443f324 --- /dev/null +++ b/demos/rlCoachMdl/OperationalModel.h @@ -0,0 +1,64 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _OPERATIONALMODEL_H_ +#define _OPERATIONALMODEL_H_ + +#include + +class OperationalModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + OperationalModel(QObject* parent = NULL); + + virtual ~OperationalModel(); + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + + std::size_t id; + +public slots: + void configurationChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight); + +protected: + +private: + +}; + +#endif // _OPERATIONALMODEL_H_ diff --git a/demos/rlCoachMdl/Server.cpp b/demos/rlCoachMdl/Server.cpp new file mode 100644 index 00000000..7f91ad7a --- /dev/null +++ b/demos/rlCoachMdl/Server.cpp @@ -0,0 +1,44 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Server.h" +#include "Socket.h" + +Server::Server(QObject* parent) : + QTcpServer(parent) +{ +} + +Server::~Server() +{ +} + +void +Server::incomingConnection(int socketDescriptor) +{ + Socket* socket = new Socket(this); + socket->setSocketDescriptor(socketDescriptor); +} diff --git a/demos/rlCoachMdl/Server.h b/demos/rlCoachMdl/Server.h new file mode 100644 index 00000000..918e471c --- /dev/null +++ b/demos/rlCoachMdl/Server.h @@ -0,0 +1,48 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _SERVER_H_ +#define _SERVER_H_ + +#include + +class Server : public QTcpServer +{ + Q_OBJECT + +public: + Server(QObject* parent = NULL); + + virtual ~Server(); + +protected: + void incomingConnection(int socketDescriptor); + +private: + +}; + +#endif //_SERVER_H_ diff --git a/demos/rlCoachMdl/Socket.cpp b/demos/rlCoachMdl/Socket.cpp new file mode 100644 index 00000000..58259124 --- /dev/null +++ b/demos/rlCoachMdl/Socket.cpp @@ -0,0 +1,176 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "ConfigurationModel.h" +#include "MainWindow.h" +#include "Socket.h" + +Socket::Socket(QObject* parent) : + QTcpSocket(parent) +{ + QObject::connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater())); + QObject::connect(this, SIGNAL(readyRead()), this, SLOT(readClient())); +} + +Socket::~Socket() +{ +} + +void +Socket::readClient() +{ + QTextStream textStream(this); + + while (this->canReadLine()) + { + std::size_t cmd = 0; + textStream >> cmd; + + switch (cmd) + { + case 0: + { + std::size_t i = 0; + textStream >> i; + + std::size_t j = 0; + textStream >> j; + + rl::math::Real x = 0; + textStream >> x; + + rl::math::Real y = 0; + textStream >> y; + + rl::math::Real z = 0; + textStream >> z; + + rl::math::Real a = 0; + textStream >> a; + + rl::math::Real b = 0; + textStream >> b; + + rl::math::Real c = 0; + textStream >> c; + + rl::math::Transform t; + t = rl::math::AngleAxis(a, rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(b, rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(c, rl::math::Vector3::UnitX()); + t.translation().x() = x; + t.translation().y() = y; + t.translation().z() = z; + + if (MainWindow::instance()->scene->getNumModels() > i) + { + if (MainWindow::instance()->scene->getModel(i)->getNumBodies() > j) + { + MainWindow::instance()->scene->getModel(i)->getBody(j)->setFrame(t); + } + } + } + break; + case 1: + { + std::size_t i = 0; + textStream >> i; + + std::size_t j = 0; + textStream >> j; + + std::size_t k = 0; + textStream >> k; + + rl::math::Real x = 0; + textStream >> x; + + rl::math::Real y = 0; + textStream >> y; + + rl::math::Real z = 0; + textStream >> z; + + rl::math::Real a = 0; + textStream >> a; + + rl::math::Real b = 0; + textStream >> b; + + rl::math::Real c = 0; + textStream >> c; + + rl::math::Transform t; + t = rl::math::AngleAxis(a, rl::math::Vector3::UnitZ()) * + rl::math::AngleAxis(b, rl::math::Vector3::UnitY()) * + rl::math::AngleAxis(c, rl::math::Vector3::UnitX()); + t.translation().x() = x; + t.translation().y() = y; + t.translation().z() = z; + + if (MainWindow::instance()->scene->getNumModels() > i) + { + if (MainWindow::instance()->scene->getModel(i)->getNumBodies() > j) + { + if (MainWindow::instance()->scene->getModel(i)->getBody(j)->getNumShapes() > k) + { + MainWindow::instance()->scene->getModel(i)->getBody(j)->getShape(k)->setTransform(t); + } + } + } + } + break; + case 2: + { + std::size_t i = 0; + textStream >> i; + + if (i < MainWindow::instance()->kinematicModels.size()) + { + rl::math::Vector q(MainWindow::instance()->kinematicModels[i]->getDof()); + q.setZero(); + + for (std::ptrdiff_t j = 0; j < q.size(); ++j) + { + textStream >> q(j); + } + + MainWindow::instance()->configurationModels[i]->setData(q); + } + } + break; + default: + break; + } + + textStream << endl; + } +} diff --git a/demos/rlCoachMdl/Socket.h b/demos/rlCoachMdl/Socket.h new file mode 100644 index 00000000..37e7ac8c --- /dev/null +++ b/demos/rlCoachMdl/Socket.h @@ -0,0 +1,49 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _SOCKET_H_ +#define _SOCKET_H_ + +#include + +class Socket : public QTcpSocket +{ + Q_OBJECT + +public: + Socket(QObject* parent = NULL); + + virtual ~Socket(); + +protected: + +private: + +private slots: + void readClient(); +}; + +#endif // _SOCKET_H_ diff --git a/demos/rlCoachMdl/rlCoachMdl.cpp b/demos/rlCoachMdl/rlCoachMdl.cpp new file mode 100644 index 00000000..5b0db1bf --- /dev/null +++ b/demos/rlCoachMdl/rlCoachMdl.cpp @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "MainWindow.h" + +MainWindow* MainWindow::singleton = NULL; + +int +main(int argc, char** argv) +{ + if (argc < 3) + { + std::cout << "Usage: rlCoachMdl SCENEFILE MODELFILE1 ... MODELFILEn" << std::endl; + return 1; + } + + try + { + QApplication application(argc, argv); + + QObject::connect(&application, SIGNAL(lastWindowClosed()), &application, SLOT(quit())); + + MainWindow::instance()->show(); + + return application.exec(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return -1; + } +} diff --git a/demos/rlCoachMdl/rlCoachMdl.desktop b/demos/rlCoachMdl/rlCoachMdl.desktop new file mode 100644 index 00000000..b754f8f5 --- /dev/null +++ b/demos/rlCoachMdl/rlCoachMdl.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Categories=Science;Robotics; +Comment=Visualization and kinematics demo with Unimation Puma 560 +Exec=sh -c "rlCoachMdl $(dirname %k)/../rl/examples/rlsg/unimation-puma560_boxes.xml $(dirname %k)/../rl/examples/rlmdl/unimation-puma560.xml" +Icon=robotics-library +Name=Robotics Library (rlCoachMdl) +Type=Application +X-Unity-IconBackgroundColor=#ffffff diff --git a/demos/rlCollisionDemo/CMakeLists.txt b/demos/rlCollisionDemo/CMakeLists.txt new file mode 100644 index 00000000..c529b0e5 --- /dev/null +++ b/demos/rlCollisionDemo/CMakeLists.txt @@ -0,0 +1,99 @@ +project(rlCollisionDemo) + +find_package(Boost REQUIRED) +find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL) +include(${QT_USE_FILE}) + +find_package(Bullet) +find_package(Ode) +find_package(Pqp) +find_package(Solid) +find_package(SoQt) + +if(QT_FOUND AND SOQT_FOUND) + if(BULLET_FOUND OR ODE_FOUND OR PQP_FOUND OR SOLID_FOUND) + set( + HDRS + MainWindow.h + TestWidget.h + ) + + set( + SRCS + MainWindow.cpp + rlCollisionDemo.cpp + TestWidget.cpp + ${rl_SOURCE_DIR}/robotics-library.rc + ) + + qt4_wrap_cpp( + MOC_SRCS + TestWidget.h + OPTIONS + -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED + ) + + add_executable( + rlCollisionDemo + ${HDRS} + ${SRCS} + ${MOC_SRCS} + ) + + target_compile_definitions( + rlCollisionDemo + PUBLIC + ${QT_DEFINITIONS} + ${SOQT_DEFINITIONS} + ) + + target_include_directories( + rlCollisionDemo + PUBLIC + ${Boost_INCLUDE_DIR} + ${QT_INCLUDES} + ${SOQT_INCLUDE_DIRS} + ) + + target_link_libraries( + rlCollisionDemo + rlsg + ${QT_LIBRARIES} + ${SOQT_LIBRARIES} + ) + + set_target_properties( + rlCollisionDemo + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d + ) + + install( + TARGETS rlCollisionDemo + COMPONENT demos + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + if(UNIX) + install(FILES rlCollisionDemo.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT demos) + endif(UNIX) + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlCollisionDemo.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlCollisionDemo.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlsg\\\\scene.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Collision detection and distance computation demo with basic scene\\\"" + PARENT_SCOPE + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlCollisionDemo.lnk\\\"" PARENT_SCOPE) + endif(BULLET_FOUND OR ODE_FOUND OR PQP_FOUND OR SOLID_FOUND) +endif(QT_FOUND AND SOQT_FOUND) diff --git a/demos/rlCollisionDemo/MainWindow.cpp b/demos/rlCollisionDemo/MainWindow.cpp new file mode 100644 index 00000000..d84b671b --- /dev/null +++ b/demos/rlCollisionDemo/MainWindow.cpp @@ -0,0 +1,260 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef RL_SG_HAVE_BULLET +#include +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_ODE +#include +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP +#include +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_SOLID +#include +#endif // RL_SG_HAVE_SOLID + +#include "MainWindow.h" +#include "TestWidget.h" + +MainWindow::MainWindow(QWidget* parent, Qt::WFlags f) : + QMainWindow(parent, f), + collisionScene(), + viewScene(), + body(0), + engine(), + filename(), + model(0) +{ + MainWindow::singleton = this; + + SoQt::init(this); + SoDB::init(); + + QStringList engines; +#ifdef RL_SG_HAVE_ODE + engines.push_back("ode"); + this->engine = "ode"; +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP + engines.push_back("pqp"); + this->engine = "pqp"; +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_BULLET + engines.push_back("bullet"); + this->engine = "bullet"; +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_SOLID + engines.push_back("solid"); + this->engine = "solid"; +#endif // RL_SG_HAVE_SOLID + engines.sort(); + + QRegExp bodyRegExp("--body=(\\d*)"); + QRegExp engineRegExp("--engine=(" + engines.join("|") + ")"); + QRegExp helpRegExp("--help"); + QRegExp modelRegExp("--model=(\\d*)"); + + for (int i = 1; i < QApplication::arguments().size(); ++i) + { + if (-1 != bodyRegExp.indexIn(QApplication::arguments()[i])) + { + this->body = bodyRegExp.cap(1).toInt(); + } + else if (-1 != engineRegExp.indexIn(QApplication::arguments()[i])) + { + this->engine = engineRegExp.cap(1); + } + else if (-1 != helpRegExp.indexIn(QApplication::arguments()[i])) + { + std::cout << "Usage: rlCollisionDemo [SCENEFILE] [--engine=" << engines.join("|").toStdString() << "] [--help] [--model=MODEL] [--body=BODY]" << std::endl; + } + else if (-1 != modelRegExp.indexIn(QApplication::arguments()[i])) + { + this->model = modelRegExp.cap(1).toInt(); + } + else + { + this->filename = QApplication::arguments()[i]; + } + } + + while (this->filename.isEmpty()) + { + this->filename = QFileDialog::getOpenFileName(this, "", this->filename, "All Formats (*.xml)"); + } + + this->resize(1024, 768); + +#ifdef RL_SG_HAVE_BULLET + if ("bullet" == this->engine) + { + this->collisionScene = boost::make_shared< rl::sg::bullet::Scene >(); + } +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_ODE + if ("ode" == this->engine) + { + this->collisionScene = boost::make_shared< rl::sg::ode::Scene >(); + } +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP + if ("pqp" == this->engine) + { + this->collisionScene = boost::make_shared< rl::sg::pqp::Scene >(); + } +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_SOLID + if ("solid" == this->engine) + { + this->collisionScene = boost::make_shared< rl::sg::solid::Scene >(); + } +#endif // RL_SG_HAVE_SOLID + + this->viewScene = boost::make_shared< rl::sg::so::Scene >(); + + this->viewer = new SoQtExaminerViewer(this, NULL, true, SoQtFullViewer::BUILD_POPUP); + this->viewer->setFeedbackVisibility(true); + this->viewer->setSceneGraph(this->viewScene->root); + this->viewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); + + this->setCentralWidget(this->viewer->getWidget()); + this->setFocusProxy(this->viewer->getWidget()); + + this->setWindowTitle(filename + " - " + this->engine + " - rlCollisionDemo"); + + this->collisionScene->load(this->filename.toStdString()); + this->viewScene->load(this->filename.toStdString()); + + this->viewer->viewAll(); + + TestWidget* testWidget = new TestWidget( + this->viewScene->getModel(this->model)->getBody(this->body), + this->collisionScene->getModel(this->model)->getBody(this->body), + this + ); + + QDockWidget* testDockWidget = new QDockWidget(this); + testDockWidget->setFeatures(QDockWidget::NoDockWidgetFeatures | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable); + testDockWidget->setFloating(true); + testDockWidget->setWidget(testWidget); + testDockWidget->show(); + + SoVRMLShape* lineShape = new SoVRMLShape(); + this->lineCoordinate = new SoVRMLCoordinate(); + this->lineSet = new SoVRMLIndexedLineSet(); + SoVRMLAppearance* lineAppearance = new SoVRMLAppearance(); + SoVRMLMaterial* lineMaterial = new SoVRMLMaterial(); + lineMaterial->diffuseColor.setValue(1.0f, 0.0f, 0.0f); + lineAppearance->material = lineMaterial; + lineShape->appearance = lineAppearance; + this->lineSet->coord = this->lineCoordinate; + lineShape->geometry = this->lineSet; + this->viewScene->root->addChild(lineShape); + + this->test(); +} + +MainWindow::~MainWindow() +{ + MainWindow::singleton = NULL; +} + +MainWindow* +MainWindow::instance() +{ + if (NULL == MainWindow::singleton) + { + new MainWindow(); + } + + return MainWindow::singleton; +} + +void +MainWindow::test() +{ + if (rl::sg::SimpleScene* simpleScene = dynamic_cast< rl::sg::SimpleScene* >(this->collisionScene.get())) + { + bool test = simpleScene->isColliding(); + + if (test) + { + this->viewer->setBackgroundColor(SbColor(1, 0, 0)); + } + else + { + this->viewer->setBackgroundColor(SbColor(0, 0, 0)); + } + } + + if (rl::sg::DistanceScene* distanceScene = dynamic_cast< rl::sg::DistanceScene* >(this->collisionScene.get())) + { + rl::math::Vector3 point1; + rl::math::Vector3 point2; + + rl::math::Real distance = distanceScene->distance( + this->collisionScene->getModel(0)->getBody(0), + this->collisionScene->getModel(1)->getBody(0), + point1, + point2 + ); + + this->lineCoordinate->point.setNum(0); + this->lineSet->coordIndex.setNum(0); + this->lineCoordinate->point.set1Value( + this->lineCoordinate->point.getNum(), + point1.x(), point1.y(), point1.z() + ); + this->lineSet->coordIndex.set1Value( + this->lineSet->coordIndex.getNum(), + this->lineCoordinate->point.getNum() - 1 + ); + this->lineCoordinate->point.set1Value( + this->lineCoordinate->point.getNum(), + point2.x(), point2.y(), point2.z() + ); + this->lineSet->coordIndex.set1Value( + this->lineSet->coordIndex.getNum(), + this->lineCoordinate->point.getNum() - 1 + ); + } +} diff --git a/demos/rlCollisionDemo/MainWindow.h b/demos/rlCollisionDemo/MainWindow.h new file mode 100644 index 00000000..4d25ec2b --- /dev/null +++ b/demos/rlCollisionDemo/MainWindow.h @@ -0,0 +1,74 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _MAINWINDOW_H_ +#define _MAINWINDOW_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MainWindow : public QMainWindow +{ +public: + virtual ~MainWindow(); + + static MainWindow* instance(); + + void test(); + + boost::shared_ptr< rl::sg::Scene > collisionScene; + + boost::shared_ptr< rl::sg::so::Scene > viewScene; + +protected: + MainWindow(QWidget* parent = NULL, Qt::WFlags f = 0); + +private: + std::size_t body; + + QString engine; + + QString filename; + + SoVRMLCoordinate* lineCoordinate; + + SoVRMLIndexedLineSet* lineSet; + + std::size_t model; + + static MainWindow* singleton; + + SoQtExaminerViewer* viewer; +}; + +#endif // _MAINWINDOW_H_ diff --git a/demos/rlCollisionDemo/TestWidget.cpp b/demos/rlCollisionDemo/TestWidget.cpp new file mode 100644 index 00000000..e0bf49ee --- /dev/null +++ b/demos/rlCollisionDemo/TestWidget.cpp @@ -0,0 +1,102 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "MainWindow.h" +#include "TestWidget.h" + +TestWidget::TestWidget(rl::sg::Body* body0, rl::sg::Body* body1, QWidget* parent, Qt::WFlags f) : + QWidget(parent, f), + body0(body0), + body1(body1) +{ + QVBoxLayout* mainLayout = new QVBoxLayout(this); + mainLayout->setMargin(4); + + rl::math::Transform frame; + this->body0->getFrame(frame); + + QDoubleSpinBox* xDoubleSpinBox = new QDoubleSpinBox(this); + mainLayout->addWidget(xDoubleSpinBox); + xDoubleSpinBox->setRange(-std::numeric_limits< rl::math::Real >::max(), std::numeric_limits< rl::math::Real >::max()); + xDoubleSpinBox->setSingleStep(0.1f); + xDoubleSpinBox->setValue(frame(0, 3)); + QObject::connect(xDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setX(double))); + + QDoubleSpinBox* yDoubleSpinBox = new QDoubleSpinBox(this); + mainLayout->addWidget(yDoubleSpinBox); + yDoubleSpinBox->setRange(-std::numeric_limits< rl::math::Real >::max(), std::numeric_limits< rl::math::Real >::max()); + yDoubleSpinBox->setSingleStep(0.1f); + yDoubleSpinBox->setValue(frame(1, 3)); + QObject::connect(yDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setY(double))); + + QDoubleSpinBox* zDoubleSpinBox = new QDoubleSpinBox(this); + mainLayout->addWidget(zDoubleSpinBox); + zDoubleSpinBox->setRange(-std::numeric_limits< rl::math::Real >::max(), std::numeric_limits< rl::math::Real >::max()); + zDoubleSpinBox->setSingleStep(0.1f); + zDoubleSpinBox->setValue(frame(2, 3)); + QObject::connect(zDoubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(setZ(double))); +} + +TestWidget::~TestWidget() +{ +} + +void +TestWidget::setX(double x) +{ + rl::math::Transform frame; + this->body0->getFrame(frame); + frame(0, 3) = x; + this->body0->setFrame(frame); + this->body1->setFrame(frame); + MainWindow::instance()->test(); +} + +void +TestWidget::setY(double y) +{ + rl::math::Transform frame; + this->body0->getFrame(frame); + frame(1, 3) = y; + this->body0->setFrame(frame); + this->body1->setFrame(frame); + MainWindow::instance()->test(); +} + +void +TestWidget::setZ(double z) +{ + rl::math::Transform frame; + this->body0->getFrame(frame); + frame(2, 3) = z; + this->body0->setFrame(frame); + this->body1->setFrame(frame); + MainWindow::instance()->test(); +} diff --git a/demos/rlCollisionDemo/TestWidget.h b/demos/rlCollisionDemo/TestWidget.h new file mode 100644 index 00000000..96057c71 --- /dev/null +++ b/demos/rlCollisionDemo/TestWidget.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _TESTWIDGET_H_ +#define _TESTWIDGET_H_ + +#include +#include + +class MainWindow; + +class TestWidget : public QWidget +{ + Q_OBJECT + +public: + TestWidget(rl::sg::Body* body0, rl::sg::Body* body1, QWidget* parent = NULL, Qt::WFlags f = 0); + + virtual ~TestWidget(); + +protected: + +private: + rl::sg::Body* body0; + + rl::sg::Body* body1; + +public slots: + void setX(double); + + void setY(double); + + void setZ(double); +}; + +#endif // _TESTWIDGET_H_ diff --git a/demos/rlCollisionDemo/rlCollisionDemo.cpp b/demos/rlCollisionDemo/rlCollisionDemo.cpp new file mode 100644 index 00000000..aafcb770 --- /dev/null +++ b/demos/rlCollisionDemo/rlCollisionDemo.cpp @@ -0,0 +1,44 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "MainWindow.h" + +MainWindow* MainWindow::singleton = NULL; + +int +main(int argc, char** argv) +{ + QApplication application(argc, argv); + + QObject::connect(&application, SIGNAL(lastWindowClosed()), &application, SLOT(quit())); + + MainWindow::instance()->show(); + + return application.exec(); +} diff --git a/demos/rlCollisionDemo/rlCollisionDemo.desktop b/demos/rlCollisionDemo/rlCollisionDemo.desktop new file mode 100644 index 00000000..30db9d5e --- /dev/null +++ b/demos/rlCollisionDemo/rlCollisionDemo.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Categories=Science;Robotics; +Comment=Collision detection and distance computation demo with basic scene +Exec=sh -c "rlCollisionDemo $(dirname %k)/../rl/examples/rlsg/scene.xml" +Icon=robotics-library +Name=Robotics Library (rlCollisionDemo) +Type=Application +X-Unity-IconBackgroundColor=#ffffff diff --git a/demos/rlDenavitHartenbergDemo/CMakeLists.txt b/demos/rlDenavitHartenbergDemo/CMakeLists.txt new file mode 100644 index 00000000..899a0192 --- /dev/null +++ b/demos/rlDenavitHartenbergDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlDenavitHartenbergDemo) + +add_executable( + rlDenavitHartenbergDemo + rlDenavitHartenbergDemo.cpp +) + +target_link_libraries( + rlDenavitHartenbergDemo + rlmath +) diff --git a/demos/rlDenavitHartenbergDemo/rlDenavitHartenbergDemo.cpp b/demos/rlDenavitHartenbergDemo/rlDenavitHartenbergDemo.cpp new file mode 100644 index 00000000..eb37f00e --- /dev/null +++ b/demos/rlDenavitHartenbergDemo/rlDenavitHartenbergDemo.cpp @@ -0,0 +1,83 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + rl::math::Real a = 31.0f; + rl::math::Real alpha = 271.0f * rl::math::DEG2RAD; + rl::math::Real d = 101.0f; + rl::math::Real theta = 181.0f * rl::math::DEG2RAD; + + rl::math::Transform t_d(::rl::math::Translation(0, 0, d)); + + std::cout << "T_d = " << std::endl << t_d.matrix() << std::endl; + + rl::math::Transform t_theta( + ::rl::math::AngleAxis(theta, ::rl::math::Vector3::UnitZ()) * + ::rl::math::AngleAxis(0, ::rl::math::Vector3::UnitY()) * + ::rl::math::AngleAxis(0, ::rl::math::Vector3::UnitX()) + ); + + std::cout << "T_theta = " << std::endl << t_theta.matrix() << std::endl; + + rl::math::Transform t_a(::rl::math::Translation(a, 0, 0)); + + std::cout << "T_a = " << std::endl << t_a.matrix() << std::endl; + + rl::math::Transform t_alpha( + ::rl::math::AngleAxis(0, ::rl::math::Vector3::UnitZ()) * + ::rl::math::AngleAxis(0, ::rl::math::Vector3::UnitY()) * + ::rl::math::AngleAxis(alpha, ::rl::math::Vector3::UnitX()) + ); + + std::cout << "T_alpha = " << std::endl << t_alpha.matrix() << std::endl; + + rl::math::Transform t = t_d * t_theta * t_a * t_alpha; + + std::cout << "A = " << std::endl << t.matrix() << std::endl; + + rl::math::Transform dh; + rl::math::transform::setDenavitHartenberg(d, theta, a, alpha, dh); + + std::cout << "A = " << std::endl << dh.matrix() << std::endl; + + rl::math::transform::getDenavitHartenberg(dh, d, theta, a, alpha); + + std::cout << "a = " << a << std::endl; + std::cout << "alpha = " << alpha * rl::math::RAD2DEG << std::endl; + std::cout << "d = " << d << std::endl; + std::cout << "theta = " << theta * rl::math::RAD2DEG << std::endl; + + return 0; +} diff --git a/demos/rlDynamics1Demo/CMakeLists.txt b/demos/rlDynamics1Demo/CMakeLists.txt new file mode 100644 index 00000000..4546653c --- /dev/null +++ b/demos/rlDynamics1Demo/CMakeLists.txt @@ -0,0 +1,19 @@ +project(rlDynamics1Demo) + +find_package(Boost REQUIRED) + +add_executable( + rlDynamics1Demo + rlDynamics1Demo.cpp +) + +target_include_directories( + rlDynamics1Demo + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlDynamics1Demo + rlmdl +) diff --git a/demos/rlDynamics1Demo/rlDynamics1Demo.cpp b/demos/rlDynamics1Demo/rlDynamics1Demo.cpp new file mode 100644 index 00000000..094a4132 --- /dev/null +++ b/demos/rlDynamics1Demo/rlDynamics1Demo.cpp @@ -0,0 +1,88 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlDynamics1Demo MODELFILE Q1 ... Qn QD1 ... QDn QDD1 ... QDDn" << std::endl; + return 1; + } + + try + { + rl::mdl::XmlFactory factory; + boost::shared_ptr< rl::mdl::Model > model(factory.create(argv[1])); + + rl::mdl::Dynamic* dynamic = dynamic_cast< rl::mdl::Dynamic* >(model.get()); + + rl::math::Vector q(model->getDof()); + rl::math::Vector qd(model->getDof()); + rl::math::Vector qdd(model->getDof()); + rl::math::Vector tau(model->getDof()); + + for (std::size_t i = 0; i < model->getDof(); ++i) + { + q(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2]); + qd(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2 + model->getDof()]); + qdd(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2 + 2 * model->getDof()]); + } + + dynamic->setPosition(q); + dynamic->setVelocity(qd); + dynamic->setAcceleration(qdd); + + dynamic->inverseDynamics(); + dynamic->getTorque(tau); + std::cout << "tau = " << tau.transpose() << std::endl; + + dynamic->forwardDynamics(); + dynamic->getAcceleration(qdd); + std::cout << "qdd = " << qdd.transpose() << std::endl; + + dynamic->rungeKuttaNystrom(1); + dynamic->getPosition(q); + dynamic->getVelocity(qd); + std::cout << "q = " << q.transpose() << std::endl; + std::cout << "qd = " << qd.transpose() << std::endl; + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlDynamics2Demo/CMakeLists.txt b/demos/rlDynamics2Demo/CMakeLists.txt new file mode 100644 index 00000000..ec8de1c5 --- /dev/null +++ b/demos/rlDynamics2Demo/CMakeLists.txt @@ -0,0 +1,19 @@ +project(rlDynamics2Demo) + +find_package(Boost REQUIRED) + +add_executable( + rlDynamics2Demo + rlDynamics2Demo.cpp +) + +target_include_directories( + rlDynamics2Demo + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlDynamics2Demo + rlmdl +) diff --git a/demos/rlDynamics2Demo/rlDynamics2Demo.cpp b/demos/rlDynamics2Demo/rlDynamics2Demo.cpp new file mode 100644 index 00000000..5f155083 --- /dev/null +++ b/demos/rlDynamics2Demo/rlDynamics2Demo.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlDynamics2Demo MODELFILE Q1 ... Qn QD1 ... QDn QDD1 ... QDDn" << std::endl; + return 1; + } + + try + { + rl::mdl::XmlFactory factory; + boost::shared_ptr< rl::mdl::Model > model(factory.create(argv[1])); + + rl::mdl::Dynamic* dynamic = dynamic_cast< rl::mdl::Dynamic* >(model.get()); + + rl::math::Vector q(dynamic->getDof()); + rl::math::Vector qd(dynamic->getDof()); + rl::math::Vector qdd(dynamic->getDof()); + rl::math::Vector tau(dynamic->getDof()); + + for (std::size_t i = 0; i < dynamic->getDof(); ++i) + { + q(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2]); + qd(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2 + dynamic->getDof()]); + qdd(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2 + 2 * dynamic->getDof()]); + } + + rl::math::Vector g(3); + dynamic->getWorldGravity(g); + + rl::math::Vector tmp(dynamic->getDof()); + rl::math::Vector tmp2(6 * dynamic->getOperationalDof()); + + std::cout << "===============================================================================" << std::endl; + + // FP + + dynamic->setPosition(q); + dynamic->forwardPosition(); + const rl::math::Transform::ConstTranslationPart& position = dynamic->getOperationalPosition(0).translation(); + rl::math::Vector3 orientation = dynamic->getOperationalPosition(0).rotation().eulerAngles(2, 1, 0).reverse(); + std::cout << "x = " << position.x() << " m, y = " << position.y() << " m, z = " << position.z() << " m, a = " << orientation.x() * rl::math::RAD2DEG << " deg, b = " << orientation.y() * rl::math::RAD2DEG << " deg, c = " << orientation.z() * rl::math::RAD2DEG << " deg" << std::endl; + + std::cout << "===============================================================================" << std::endl; + + // FV + + dynamic->setPosition(q); + dynamic->setVelocity(qd); + dynamic->forwardVelocity(); + std::cout << "xd = " << dynamic->getOperationalVelocity(0).linear().transpose() << " " << dynamic->getOperationalVelocity(0).angular().transpose() << std::endl; + + std::cout << "-------------------------------------------------------------------------------" << std::endl; + + // J + + rl::math::Matrix J(6 * dynamic->getOperationalDof(), dynamic->getDof()); + dynamic->calculateJacobian(J); + std::cout << "J = " << std::endl << J << std::endl; + + // J * qd + + tmp2 = J * qd; + std::cout << "xd = " << tmp2.transpose() << std::endl; + + // invJ + + rl::math::Matrix invJ(dynamic->getDof(), 6 * dynamic->getOperationalDof()); + dynamic->calculateJacobianInverse(J, invJ); + std::cout << "J^{-1} = " << std::endl << invJ << std::endl; + + std::cout << "===============================================================================" << std::endl; + + // FA + + dynamic->setPosition(q); + dynamic->setVelocity(qd); + dynamic->setAcceleration(qdd); + dynamic->setWorldGravity(g); + dynamic->forwardVelocity(); + dynamic->forwardAcceleration(); + std::cout << "xdd = " << dynamic->getOperationalAcceleration(0).linear().transpose() << " " << dynamic->getOperationalAcceleration(0).angular().transpose() << std::endl; + + std::cout << "-------------------------------------------------------------------------------" << std::endl; + + // Jd * qd + + rl::math::Vector Jdqd(6 * dynamic->getOperationalDof()); + dynamic->calculateJacobianDerivative(Jdqd); + std::cout << "Jd*qd = " << Jdqd.transpose() << std::endl; + + // J * qdd + Jd * qd + + tmp2 = J * qdd + Jdqd; + std::cout << "xdd = " << tmp2.transpose() << std::endl; + + std::cout << "===============================================================================" << std::endl; + + // RNE + + dynamic->setPosition(q); + dynamic->setVelocity(qd); + dynamic->setAcceleration(qdd); + dynamic->inverseDynamics(); + dynamic->getTorque(tau); + std::cout << "tau = " << tau.transpose() << std::endl; + + std::cout << "-------------------------------------------------------------------------------" << std::endl; + + // M + + rl::math::Matrix M(dynamic->getDof(), dynamic->getDof()); + dynamic->setPosition(q); + dynamic->calculateMassMatrix(M); + std::cout << "M = " << std::endl << M << std::endl; + + // V + + rl::math::Vector V(dynamic->getDof()); + dynamic->setPosition(q); + dynamic->setVelocity(qd); + dynamic->calculateCentrifugalCoriolis(V); + std::cout << "V = " << V.transpose() << std::endl; + + // G + + rl::math::Vector G(dynamic->getDof()); + dynamic->setPosition(q); + dynamic->setWorldGravity(g); + dynamic->calculateGravity(G); + std::cout << "G = " << G.transpose() << std::endl; + + // M * qdd + V + G + + tmp = M * qdd + V + G; + std::cout << "tau = " << tmp.transpose() << std::endl; + + std::cout << "===============================================================================" << std::endl; + + // FD + + dynamic->setPosition(q); + dynamic->setVelocity(qd); + dynamic->setTorque(tau); + dynamic->forwardDynamics(); + dynamic->getAcceleration(tmp); + std::cout << "qdd = " << tmp.transpose() << std::endl; + + std::cout << "-------------------------------------------------------------------------------" << std::endl; + + // M^{-1} + + rl::math::Matrix invM(dynamic->getDof(), dynamic->getDof()); + dynamic->setPosition(q); + dynamic->calculateMassMatrixInverse(invM); + std::cout << "M^{-1} = " << std::endl << invM << std::endl; + + // V + + std::cout << "V = " << V.transpose() << std::endl; + + // G + + std::cout << "G = " << G.transpose() << std::endl; + + // M^{-1} * ( tau - V - G ) + + tmp = invM * (tau - V - G); + std::cout << "qdd = " << tmp.transpose() << std::endl; + + std::cout << "===============================================================================" << std::endl; + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlGripperDemo/CMakeLists.txt b/demos/rlGripperDemo/CMakeLists.txt new file mode 100644 index 00000000..ff8bd439 --- /dev/null +++ b/demos/rlGripperDemo/CMakeLists.txt @@ -0,0 +1,12 @@ +project(rlGripperDemo) + +add_executable( + rlGripperDemo + rlGripperDemo.cpp +) + +target_link_libraries( + rlGripperDemo + rlhal + rlutil +) diff --git a/demos/rlGripperDemo/rlGripperDemo.cpp b/demos/rlGripperDemo/rlGripperDemo.cpp new file mode 100644 index 00000000..5ec3dfb9 --- /dev/null +++ b/demos/rlGripperDemo/rlGripperDemo.cpp @@ -0,0 +1,61 @@ +// +// Copyright (c) 2013, Andre Gaschler +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + try + { + rl::hal::WeissWsg50 gripper; + + gripper.open(); + gripper.start(); + + gripper.doSetAcceleration(0.2f); + gripper.doSetForceLimit(40.0f); + gripper.doPrePositionFingers(0.02f); + rl::util::Timer::sleep(1.0f); + + gripper.doSetAcceleration(0.5f); + gripper.doSetForceLimit(20.0f); + gripper.doPrePositionFingers(0.1f, 0.4f); + + gripper.stop(); + gripper.close(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlInterpolatorDemo/CMakeLists.txt b/demos/rlInterpolatorDemo/CMakeLists.txt new file mode 100644 index 00000000..229a9a42 --- /dev/null +++ b/demos/rlInterpolatorDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlInterpolatorDemo) + +add_executable( + rlInterpolatorDemo + rlInterpolatorDemo.cpp +) + +target_link_libraries( + rlInterpolatorDemo + rlmath +) diff --git a/demos/rlInterpolatorDemo/rlInterpolatorDemo.cpp b/demos/rlInterpolatorDemo/rlInterpolatorDemo.cpp new file mode 100644 index 00000000..ec8b4c3e --- /dev/null +++ b/demos/rlInterpolatorDemo/rlInterpolatorDemo.cpp @@ -0,0 +1,61 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +int +main(int argc, char** argv) +{ +// rl::math::Cubic< rl::math::Real > interpolator; + rl::math::Quintic< rl::math::Real > interpolator; + + interpolator.te = 2.0f; + + interpolator.x0 = 0.0f; + interpolator.v0 = 0.0f; + interpolator.a0 = 0.0f; + interpolator.xe = 1.0f; + interpolator.ve = 0.0f; + interpolator.ae = 0.0f; + + interpolator.interpolate(); + + for (std::size_t i = 0; i <= 100; ++i) + { + std::cout << i * interpolator.te / 100.0f; + std::cout << "\t"; + std::cout << interpolator.x(i * interpolator.te / 100.0f); + std::cout << "\t"; + std::cout << interpolator.v(i * interpolator.te / 100.0f); + std::cout << "\t"; + std::cout << interpolator.a(i * interpolator.te / 100.0f); + std::cout << std::endl; + } + + return 0; +} diff --git a/demos/rlInversePositionDemo/CMakeLists.txt b/demos/rlInversePositionDemo/CMakeLists.txt new file mode 100644 index 00000000..3e64b6fb --- /dev/null +++ b/demos/rlInversePositionDemo/CMakeLists.txt @@ -0,0 +1,21 @@ +project(rlInversePositionDemo) + +find_package(Boost REQUIRED) + +add_executable( + rlInversePositionDemo + rlInversePositionDemo.cpp +) + +target_include_directories( + rlInversePositionDemo + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlInversePositionDemo + rlhal + rlmdl + rlutil +) diff --git a/demos/rlInversePositionDemo/rlInversePositionDemo.cpp b/demos/rlInversePositionDemo/rlInversePositionDemo.cpp new file mode 100644 index 00000000..25180638 --- /dev/null +++ b/demos/rlInversePositionDemo/rlInversePositionDemo.cpp @@ -0,0 +1,104 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define COACH + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlInversePositionDemo MODELFILE Q1 ... Qn" << std::endl; + return 1; + } + + try + { + srand(static_cast< unsigned int >(rl::util::Timer::now() * 1.0e9f)); + + rl::mdl::XmlFactory factory; + boost::shared_ptr< rl::mdl::Model > model(factory.create(argv[1])); + + rl::mdl::Kinematic* kinematic = dynamic_cast< rl::mdl::Kinematic* >(model.get()); + + rl::math::Vector q(kinematic->getDof()); + + for (std::ptrdiff_t i = 0; i < q.size(); ++i) + { + q(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2]); + } + + kinematic->setPosition(q); + + kinematic->forwardPosition(); + rl::math::Vector3 position = kinematic->getOperationalPosition(0).translation(); + rl::math::Vector3 orientation = kinematic->getOperationalPosition(0).rotation().eulerAngles(2, 1, 0).reverse(); + std::cout << "x: " << position.x() << " m, y: " << position.y() << " m, z: " << position.z() << " m, a: " << orientation.x() * rl::math::RAD2DEG << " deg, b: " << orientation.y() * rl::math::RAD2DEG << " deg, c: " << orientation.z() * rl::math::RAD2DEG << " deg" << std::endl; + + rl::math::Transform x = kinematic->getOperationalPosition(0); + kinematic->setPosition(rl::math::Vector::Random(kinematic->getDof())); + rl::util::Timer timer; + timer.start(); + bool result = kinematic->calculateInversePosition(x); + timer.stop(); + std::cout << (result ? "true" : "false") << " " << timer.elapsed() * 1000 << " ms" << std::endl; + + kinematic->forwardPosition(); + position = kinematic->getOperationalPosition(0).translation(); + orientation = kinematic->getOperationalPosition(0).rotation().eulerAngles(2, 1, 0).reverse(); + std::cout << "x: " << position.x() << " m, y: " << position.y() << " m, z: " << position.z() << " m, a: " << orientation.x() * rl::math::RAD2DEG << " deg, b: " << orientation.y() * rl::math::RAD2DEG << " deg, c: " << orientation.z() * rl::math::RAD2DEG << " deg" << std::endl; + + kinematic->getPosition(q); + std::cout << "q: " << q.transpose() << std::endl; + +#ifdef COACH + rl::hal::Coach controller(kinematic->getDof(), 0.001f, 0, "localhost"); + controller.open(); + controller.start(); + controller.setJointPosition(q); + controller.step(); + controller.stop(); + controller.close(); +#endif // COACH + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlJacobianDemo/CMakeLists.txt b/demos/rlJacobianDemo/CMakeLists.txt new file mode 100644 index 00000000..f47a28e8 --- /dev/null +++ b/demos/rlJacobianDemo/CMakeLists.txt @@ -0,0 +1,19 @@ +project(rlJacobianDemo) + +find_package(Boost REQUIRED) + +add_executable( + rlJacobianDemo + rlJacobianDemo.cpp +) + +target_include_directories( + rlJacobianDemo + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlJacobianDemo + rlkin +) diff --git a/demos/rlJacobianDemo/rlJacobianDemo.cpp b/demos/rlJacobianDemo/rlJacobianDemo.cpp new file mode 100644 index 00000000..7221bd89 --- /dev/null +++ b/demos/rlJacobianDemo/rlJacobianDemo.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlJacobianDemo KINEMATICSFILE Q1 ... Qn QD1 ... QDn" << std::endl; + return 1; + } + + try + { + boost::shared_ptr< rl::kin::Kinematics > kinematics(rl::kin::Kinematics::create(argv[1])); + + rl::math::Vector q(kinematics->getDof()); + + for (std::ptrdiff_t i = 0; i < q.size(); ++i) + { + q(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2]); + } + + rl::math::Vector qdot(kinematics->getDof()); + + for (std::ptrdiff_t i = 0; i < qdot.size(); ++i) + { + qdot(i) = boost::lexical_cast< rl::math::Real >(argv[q.size() + i + 2]); + } + + kinematics->setPosition(q); + kinematics->updateFrames(); + kinematics->updateJacobian(); + + std::cout << "J=" << std::endl << kinematics->getJacobian() << std::endl; + + rl::math::Vector xdot(kinematics->getOperationalDof() * 6); + + kinematics->forwardVelocity(qdot, xdot); + + std::cout << "xdot=" << std::endl; + + for (std::size_t i = 0; i < kinematics->getOperationalDof(); ++i) + { + std::cout << i << " " << xdot.transpose() << std::endl; + } + + kinematics->updateJacobianInverse(1.0e-9f); + + std::cout << "invJ=" << std::endl << kinematics->getJacobianInverse() << std::endl; + + kinematics->inverseVelocity(xdot, qdot); + + std::cout << "qdot=" << std::endl << qdot.transpose() << std::endl; + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlKalmanDemo/CMakeLists.txt b/demos/rlKalmanDemo/CMakeLists.txt new file mode 100644 index 00000000..90c5dbe8 --- /dev/null +++ b/demos/rlKalmanDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlKalmanDemo) + +add_executable( + rlKalmanDemo + rlKalmanDemo.cpp +) + +target_link_libraries( + rlKalmanDemo + rlmath +) diff --git a/demos/rlKalmanDemo/rlKalmanDemo.cpp b/demos/rlKalmanDemo/rlKalmanDemo.cpp new file mode 100644 index 00000000..93b26bbf --- /dev/null +++ b/demos/rlKalmanDemo/rlKalmanDemo.cpp @@ -0,0 +1,106 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + std::size_t t = 20; + + std::size_t ss = 4; + std::size_t os = 2; + + rl::math::Matrix a(ss, ss); + a.setIdentity(); +// rl::math::Matrix b(ss, ss); +// b.setZero(); + std::vector< rl::math::Matrix > p(t + 1, rl::math::Matrix(ss, ss)); + p[0].setIdentity(); + rl::math::Matrix q(ss, ss); + q.setIdentity(); +// rl::math::Vector u(ss); +// u.setZero(); + + rl::math::Matrix h(os, ss); + h.setIdentity(); + rl::math::Matrix r(os, os); + r.setIdentity(); + + std::vector< rl::math::Vector > x(t + 1, rl::math::Vector(ss)); + x[0].setZero(); + std::vector< rl::math::Vector > z(t, rl::math::Vector(os)); + z[0].setZero(); + + a(0, 2) = 1; + a(1, 3) = 1; + p[0] *= 1.0e-12f; + q *= 0.01f; + r *= 0.01f; + + for (std::size_t i = 0; i < t; ++i) + { + x[i](0) = static_cast< rl::math::Real >(i) + 1; + x[i](1) = static_cast< rl::math::Real >(i) + 1; + + if (i > 0) + { + x[i](2) = x[i](0) - x[i - 1](0); + x[i](3) = x[i](1) - x[i - 1](1); + } + else + { + x[i](2) = 0; + x[i](3) = 0; + } + + z[i](0) = x[i](0); + z[i](1) = x[i](1); + } + + for (std::size_t i = 0; i < t; ++i) std::cout << "x[" << i << "] = " << x[i].transpose() << std::endl; + for (std::size_t i = 0; i < t; ++i) std::cout << "z[" << i << "] = " << z[i].transpose() << std::endl; + + for (std::size_t i = 0; i < t; ++i) + { + if (i > 0) + { + rl::math::Kalman::predict(x[i - 1], p[i - 1], a, q, x[i], p[i]); + } + + rl::math::Kalman::correct(x[i], p[i], h, r, z[i], x[i], p[i]); + } + + rl::math::Kalman::predict(x[t - 1], p[t - 1], a, q, x[t], p[t]); + + for (std::size_t i = 0; i < t + 1; ++i) std::cout << "x[" << i << "] = " << x[i].transpose() << std::endl; + for (std::size_t i = 0; i < t + 1; ++i) std::cout << "p[" << i << "] = " << std::endl << p[i] << std::endl; + + return 0; +} diff --git a/demos/rlLaserDemo/CMakeLists.txt b/demos/rlLaserDemo/CMakeLists.txt new file mode 100644 index 00000000..1a52b34f --- /dev/null +++ b/demos/rlLaserDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlLaserDemo) + +add_executable( + rlLaserDemo + rlLaserDemo.cpp +) + +target_link_libraries( + rlLaserDemo + rlhal +) diff --git a/demos/rlLaserDemo/rlLaserDemo.cpp b/demos/rlLaserDemo/rlLaserDemo.cpp new file mode 100644 index 00000000..7b9951ea --- /dev/null +++ b/demos/rlLaserDemo/rlLaserDemo.cpp @@ -0,0 +1,152 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +//#define LEUZE +//#define SCHMERSAL +//#define SICKLMS200 +#define SICKS300 + +#ifdef LEUZE +#include +#endif +#ifdef SCHMERSAL +#include +#endif +#ifdef SICKLMS200 +#include +#endif +#ifdef SICKS300 +#include +#endif + +#ifdef WIN32 +#ifndef popen +#define popen _popen +#endif // popen +#ifndef pclose +#define pclose _pclose +#endif // pclose +#define GNUPLOT "pgnuplot.exe" +#else // WIN32 +#define GNUPLOT "gnuplot" +#endif // WIN32 + +bool running = true; + +void handler(int signum) +{ + running = false; +} + +int +main(int argc, char** argv) +{ + signal(SIGINT, handler); + + FILE* gnuplot = popen(GNUPLOT, "w"); + + if (NULL == gnuplot) + { + std::cerr << "cannot open " << GNUPLOT << std::endl; + return 1; + } + + try + { +#ifdef LEUZE + rl::hal::LeuzeRs4 laser( + "/dev/ttyUSB0", + rl::hal::LeuzeRs4::BAUDRATE_57600BPS + ); +#endif +#ifdef SCHMERSAL + rl::hal::SchmersalLss300 laser( + "/dev/ttyUSB0", + rl::hal::SchmersalLss300::BAUDRATE_9600BPS, + rl::hal::SchmersalLss300::MONITORING_CONTINUOUS + ); +#endif +#ifdef SICKLMS200 + rl::hal::SickLms200 laser( + "/dev/ttyUSB0", + rl::hal::SickLms200::BAUDRATE_9600BPS, + rl::hal::SickLms200::MONITORING_CONTINUOUS + ); +#endif +#ifdef SICKS300 + rl::hal::SickS300 laser( + "/dev/ttyS1", + rl::hal::Serial::BAUDRATE_115200BPS + ); +#endif + + laser.open(); + + fprintf(gnuplot, "set polar\n"); + fprintf(gnuplot, "set xrange [-5:5]\n"); + fprintf(gnuplot, "set yrange [0:5]\n"); + + laser.start(); + + rl::math::Vector data(laser.getDistancesCount()); + rl::math::Real resolution = laser.getResolution(); + rl::math::Real startAngle = laser.getStartAngle(); + + while (running) + { + laser.step(); + laser.getDistances(data); + + fprintf(gnuplot, "plot '-' with lines\n"); + + for (std::ptrdiff_t i = 0; i < data.size(); ++i) + { + fprintf(gnuplot, "%f %f\n", startAngle + resolution * i, data(i)); + } + + fprintf(gnuplot, "e\n"); + fflush(gnuplot); + } + + laser.stop(); + laser.close(); + + pclose(gnuplot); + } + catch (const std::exception& e) + { + pclose(gnuplot); + std::cerr << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlLoadXmlDemo/CMakeLists.txt b/demos/rlLoadXmlDemo/CMakeLists.txt new file mode 100644 index 00000000..21d313ea --- /dev/null +++ b/demos/rlLoadXmlDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlLoadXmlDemo) + +add_executable( + rlLoadXmlDemo + rlLoadXmlDemo.cpp +) + +target_link_libraries( + rlLoadXmlDemo + rlxml +) diff --git a/demos/rlLoadXmlDemo/rlLoadXmlDemo.cpp b/demos/rlLoadXmlDemo/rlLoadXmlDemo.cpp new file mode 100644 index 00000000..aa82aa88 --- /dev/null +++ b/demos/rlLoadXmlDemo/rlLoadXmlDemo.cpp @@ -0,0 +1,46 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlLoadXmlDemo XMLFILE" << std::endl; + return 1; + } + + rl::xml::DomParser parser; + rl::xml::Document doc = parser.readFile(argv[1], "", XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + doc.substitute(XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + doc.save("-"); + + return 0; +} diff --git a/demos/rlPcaDemo/CMakeLists.txt b/demos/rlPcaDemo/CMakeLists.txt new file mode 100644 index 00000000..5f51207a --- /dev/null +++ b/demos/rlPcaDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlPcaDemo) + +add_executable( + rlPcaDemo + rlPcaDemo.cpp +) + +target_link_libraries( + rlPcaDemo + rlmath +) diff --git a/demos/rlPcaDemo/hald-ingredients.txt b/demos/rlPcaDemo/hald-ingredients.txt new file mode 100644 index 00000000..f0e5bd3a --- /dev/null +++ b/demos/rlPcaDemo/hald-ingredients.txt @@ -0,0 +1,15 @@ +13 +4 +7 26 6 60 +1 29 15 52 +11 56 8 20 +11 31 8 47 +7 52 6 33 +11 55 9 22 +3 71 17 6 +1 31 22 44 +2 54 18 22 +21 47 4 26 +1 40 23 34 +11 66 9 12 +10 68 8 12 diff --git a/demos/rlPcaDemo/hald.txt b/demos/rlPcaDemo/hald.txt new file mode 100644 index 00000000..22c1e870 --- /dev/null +++ b/demos/rlPcaDemo/hald.txt @@ -0,0 +1,15 @@ +13 +5 +7.0000 26.0000 6.0000 60.0000 78.5000 +1.0000 29.0000 15.0000 52.0000 74.3000 +11.0000 56.0000 8.0000 20.0000 104.3000 +11.0000 31.0000 8.0000 47.0000 87.6000 +7.0000 52.0000 6.0000 33.0000 95.9000 +11.0000 55.0000 9.0000 22.0000 109.2000 +3.0000 71.0000 17.0000 6.0000 102.7000 +1.0000 31.0000 22.0000 44.0000 72.5000 +2.0000 54.0000 18.0000 22.0000 93.1000 +21.0000 47.0000 4.0000 26.0000 115.9000 +1.0000 40.0000 23.0000 34.0000 83.8000 +11.0000 66.0000 9.0000 12.0000 113.3000 +10.0000 68.0000 8.0000 12.0000 109.4000 diff --git a/demos/rlPcaDemo/rlPcaDemo.cpp b/demos/rlPcaDemo/rlPcaDemo.cpp new file mode 100644 index 00000000..8c274a60 --- /dev/null +++ b/demos/rlPcaDemo/rlPcaDemo.cpp @@ -0,0 +1,95 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlPcaDemo FILE" << std::endl; + return 1; + } + + std::ifstream data; + data.open(argv[1]); + + std::size_t rows; + data >> rows; + std::size_t cols; + data >> cols; + + rl::math::Matrix src(rows, cols); + + for (std::size_t i = 0; i < rows; ++i) + { + for (std::size_t j = 0; j < cols; ++j) + { + data >> src(i, j); + } + } + + data.close(); + + std::cout << "src = " << std::endl << src << std::endl; + + rl::math::Vector mean(cols); + mean.setZero(); + + for (std::size_t i = 0; i < rows; ++i) + { + mean += src.row(i); + } + + mean /= static_cast< rl::math::Real >(rows); + + std::cout << "mean = " << mean.transpose() << std::endl; + + rl::math::Matrix covariance(cols, cols); + covariance.setZero(); + + for (std::size_t i = 0; i < rows; ++i) + { + rl::math::Vector delta = src.row(i).transpose() - mean; + covariance += delta * delta.transpose(); + } + + covariance /= static_cast< rl::math::Real >(rows) - 1; + + std::cout << "covariance = " << std::endl << covariance << std::endl; + + Eigen::EigenSolver< rl::math::Matrix > eigen(covariance); + + std::cout << "eigenvectors = " << std::endl << eigen.eigenvectors() << std::endl; + std::cout << "eigenvalues = " << std::endl << eigen.eigenvalues() << std::endl; + + return 0; +} diff --git a/demos/rlPlanDemo/CMakeLists.txt b/demos/rlPlanDemo/CMakeLists.txt new file mode 100644 index 00000000..2545c87d --- /dev/null +++ b/demos/rlPlanDemo/CMakeLists.txt @@ -0,0 +1,146 @@ +project(rlPlanDemo) + +find_package(Boost REQUIRED) +find_package(OpenGL REQUIRED) +find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL) +include(${QT_USE_FILE}) + +find_package(Bullet) +find_package(Ode) +find_package(Pqp) +find_package(Solid) +find_package(SoQt) + +if(QT_FOUND AND SOQT_FOUND AND (BULLET_FOUND OR ODE_FOUND OR PQP_FOUND OR SOLID_FOUND)) + set( + HDRS + ConfigurationDelegate.h + ConfigurationModel.h + ConfigurationSpaceScene.h + ConfigurationSpaceThread.h + MainWindow.h + PlannerModel.h + Thread.h + Viewer.h + ) + + set( + SRCS + ConfigurationDelegate.cpp + ConfigurationModel.cpp + ConfigurationSpaceScene.cpp + ConfigurationSpaceThread.cpp + MainWindow.cpp + PlannerModel.cpp + rlPlanDemo.cpp + Thread.cpp + Viewer.cpp + ${rl_SOURCE_DIR}/robotics-library.rc + ) + + qt4_wrap_cpp( + MOC_SRCS + ConfigurationDelegate.h + ConfigurationSpaceScene.h + ConfigurationSpaceThread.h + MainWindow.h + Thread.h + Viewer.h + OPTIONS + -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED + ) + + add_executable( + rlPlanDemo + ${HDRS} + ${SRCS} + ${MOC_SRCS} + ) + + target_compile_definitions( + rlPlanDemo + PUBLIC + ${QT_DEFINITIONS} + ${SOQT_DEFINITIONS} + ) + + target_include_directories( + rlPlanDemo + PUBLIC + ${OPENGL_INCLUDE_DIR} + ${QT_INCLUDES} + ${SOQT_INCLUDE_DIRS} + ) + + target_link_libraries( + rlPlanDemo + rlplan + rlkin + rlsg + ${OPENGL_LIBRARIES} + ${QT_LIBRARIES} + ${SOQT_LIBRARIES} + ) + + set_target_properties( + rlPlanDemo + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d + ) + + install( + TARGETS rlPlanDemo + COMPONENT demos + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + if(UNIX) + install(FILES rlPlanDemo.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT demos) + endif(UNIX) + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlPlanDemo.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlPlanDemo.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlplan\\\\unimation-puma560_boxes_rrtConCon.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Path planning demo with Unimation Puma 560 and RRT algorithm\\\"" + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlPlanDemo.lnk\\\"") + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlPlanDemo2.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlPlanDemo.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlplan\\\\staeubli-tx60l_wall_rrtConCon.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Path planning demo with Staeubli TX-60L and RRT algorithm\\\"" + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlPlanDemo2.lnk\\\"") + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlPlanDemo3.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlPlanDemo.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlplan\\\\mitsubishi-rv6sl_boxes_rrtConCon.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Path planning demo with Mitsubishi RV-6SL and RRT algorithm\\\"" + PARENT_SCOPE + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlPlanDemo3.lnk\\\"" PARENT_SCOPE) +endif(QT_FOUND AND SOQT_FOUND AND (BULLET_FOUND OR ODE_FOUND OR PQP_FOUND OR SOLID_FOUND)) diff --git a/demos/rlPlanDemo/ConfigurationDelegate.cpp b/demos/rlPlanDemo/ConfigurationDelegate.cpp new file mode 100644 index 00000000..e79a8aee --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationDelegate.cpp @@ -0,0 +1,97 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "ConfigurationDelegate.h" +#include "MainWindow.h" + +ConfigurationDelegate::ConfigurationDelegate(QObject* parent) : + QItemDelegate(parent) +{ +} + +ConfigurationDelegate::~ConfigurationDelegate() +{ +} + +QWidget* +ConfigurationDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + QDoubleSpinBox* editor = new QDoubleSpinBox(parent); + + rl::math::Vector maximum(MainWindow::instance()->model->getDof()); + MainWindow::instance()->model->getMaximum(maximum); + rl::math::Vector minimum(MainWindow::instance()->model->getDof()); + MainWindow::instance()->model->getMinimum(minimum); + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->model->getDof()); + MainWindow::instance()->model->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + editor->setMinimum(minimum(index.row()) * rl::math::RAD2DEG); + editor->setMaximum(maximum(index.row()) * rl::math::RAD2DEG); + editor->setSingleStep(1.0f); + } + else + { + editor->setMinimum(minimum(index.row())); + editor->setMaximum(maximum(index.row())); + editor->setSingleStep(0.1f); + } + + QObject::connect(editor, SIGNAL(valueChanged(double)), this, SLOT(valueChanged(double))); + + return editor; +} + +void +ConfigurationDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->setValue(index.model()->data(index, Qt::DisplayRole).toDouble()); +} + +void +ConfigurationDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const +{ + QDoubleSpinBox* doubleSpinBox = static_cast< QDoubleSpinBox* >(editor); + doubleSpinBox->interpretText(); + model->setData(index, doubleSpinBox->value(), Qt::EditRole); +} + +void +ConfigurationDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const +{ + editor->setGeometry(option.rect); +} + +void +ConfigurationDelegate::valueChanged(double d) +{ + emit commitData(static_cast< QWidget* >(QObject::sender())); +} diff --git a/demos/rlPlanDemo/ConfigurationDelegate.h b/demos/rlPlanDemo/ConfigurationDelegate.h new file mode 100644 index 00000000..bf656041 --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationDelegate.h @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONDELEGATE_H_ +#define _CONFIGURATIONDELEGATE_H_ + +#include + +class ConfigurationDelegate : public QItemDelegate +{ + Q_OBJECT + +public: + ConfigurationDelegate(QObject* parent = NULL); + + virtual ~ConfigurationDelegate(); + + QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; + + void setEditorData(QWidget* editor, const QModelIndex& index) const; + + void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; + + void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; + +public slots: + void valueChanged(double d); + +protected: + +private: + +}; + +#endif // _CONFIGURATIONDELEGATE_H_ diff --git a/demos/rlPlanDemo/ConfigurationModel.cpp b/demos/rlPlanDemo/ConfigurationModel.cpp new file mode 100644 index 00000000..dcb661a6 --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationModel.cpp @@ -0,0 +1,161 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "ConfigurationModel.h" +#include "MainWindow.h" +#include "Thread.h" +#include "Viewer.h" + +ConfigurationModel::ConfigurationModel(QObject* parent) : + QAbstractTableModel(parent) +{ +} + +ConfigurationModel::~ConfigurationModel() +{ +} + +int +ConfigurationModel::columnCount(const QModelIndex& parent) const +{ + return 1; +} + +QVariant +ConfigurationModel::data(const QModelIndex& index, int role) const +{ + if (NULL == MainWindow::instance()->model) + { + return QVariant(); + } + + if (!index.isValid()) + { + return QVariant(); + } + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + { + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->model->getDof()); + MainWindow::instance()->model->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + return (*MainWindow::instance()->q)(index.row()) * rl::math::RAD2DEG; + } + else + { + return (*MainWindow::instance()->q)(index.row()); + } + } + case Qt::TextAlignmentRole: + return Qt::AlignRight; + break; + default: + break; + } + + return QVariant(); +} + +Qt::ItemFlags +ConfigurationModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + { + return Qt::NoItemFlags; + } + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant +ConfigurationModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (Qt::DisplayRole == role && Qt::Vertical == orientation) + { + return QString::number(section); + } + + return QVariant(); +} + +void +ConfigurationModel::invalidate() +{ + this->reset(); +} + +int +ConfigurationModel::rowCount(const QModelIndex& parent) const +{ + if (NULL == MainWindow::instance()->model) + { + return 0; + } + + return MainWindow::instance()->model->getDof(); +} + +bool +ConfigurationModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (NULL == MainWindow::instance()->model) + { + return false; + } + + if (MainWindow::instance()->thread->isRunning()) + { + return false; + } + + if (index.isValid() && Qt::EditRole == role) + { + Eigen::Matrix< rl::math::Unit, Eigen::Dynamic, 1 > qUnits(MainWindow::instance()->model->getDof()); + MainWindow::instance()->model->getPositionUnits(qUnits); + + if (rl::math::UNIT_RADIAN == qUnits(index.row())) + { + (*MainWindow::instance()->q)(index.row()) = value.value< ::rl::math::Real >() * rl::math::DEG2RAD; + } + else + { + (*MainWindow::instance()->q)(index.row()) = value.value< ::rl::math::Real >(); + } + + MainWindow::instance()->viewer->drawConfiguration(*MainWindow::instance()->q); + + emit dataChanged(index, index); + + return true; + } + + return false; +} diff --git a/demos/rlPlanDemo/ConfigurationModel.h b/demos/rlPlanDemo/ConfigurationModel.h new file mode 100644 index 00000000..49651d92 --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationModel.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONMODEL_H_ +#define _CONFIGURATIONMODEL_H_ + +#include + +class ConfigurationModel : public QAbstractTableModel +{ +public: + ConfigurationModel(QObject* parent = NULL); + + virtual ~ConfigurationModel(); + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + void invalidate(); + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + +protected: + +private: + +}; + +#endif // _CONFIGURATIONMODEL_H_ diff --git a/demos/rlPlanDemo/ConfigurationSpaceScene.cpp b/demos/rlPlanDemo/ConfigurationSpaceScene.cpp new file mode 100644 index 00000000..064c56e1 --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationSpaceScene.cpp @@ -0,0 +1,293 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "ConfigurationModel.h" +#include "ConfigurationSpaceScene.h" +#include "ConfigurationSpaceThread.h" +#include "MainWindow.h" +#include "Thread.h" +#include "Viewer.h" + +ConfigurationSpaceScene::ConfigurationSpaceScene(QObject* parent) : + QGraphicsScene(parent), + delta(1.0f), + model(NULL), + x(0), + y(1), + edges(), + path(), + thread(new ConfigurationSpaceThread(this)) +{ + QObject::connect( + this->thread, + SIGNAL(addCollision(const qreal&, const qreal&, const qreal&, const qreal&, const int&)), + this, + SLOT(addCollision(const qreal&, const qreal&, const qreal&, const qreal&, const int&)) + ); +} + +ConfigurationSpaceScene::~ConfigurationSpaceScene() +{ + this->thread->stop(); +} + +void +ConfigurationSpaceScene::addCollision(const qreal& x, const qreal& y, const qreal& w, const qreal& h, const int& rgb) +{ + QGraphicsRectItem* rect = this->addRect( + x - w / 2.0f, + -y - h / 2.0f, + w, + h, + QPen(Qt::NoPen), + QBrush(QColor(rgb, rgb, rgb)) + ); + + rect->setZValue(1); +} + +void +ConfigurationSpaceScene::clear() +{ + QList items = this->items(); + + while (!items.isEmpty()) + { + delete items.takeFirst(); + } + + this->edges.clear(); + this->path.clear(); +} + +void +ConfigurationSpaceScene::drawConfiguration(const rl::math::Vector& q) +{ +} + +void +ConfigurationSpaceScene::drawConfigurationEdge(const rl::math::Vector& u, const rl::math::Vector& v, const bool& free) +{ + QGraphicsLineItem* line = this->addLine( + u(this->x), + -u(this->y), + v(this->x), + -v(this->y), + free ? QPen(QBrush(QColor(0, 128, 0)), 0.0f) : QPen(QBrush(QColor(128, 0, 0)), 0.0f) + ); + + line->setZValue(2); + + this->edges.push_back(line); +} + +void +ConfigurationSpaceScene::drawConfigurationVertex(const rl::math::Vector& q, const bool& free) +{ +} + +void +ConfigurationSpaceScene::drawConfigurationPath(const rl::plan::VectorList& path) +{ + this->resetPath(); + + rl::plan::VectorList::const_iterator i = path.begin(); + rl::plan::VectorList::const_iterator j = ++path.begin(); + + while (i != path.end() && j != path.end()) + { + QGraphicsLineItem* line = this->addLine( + (*i)(this->x), + -(*i)(this->y), + (*j)(this->x), + -(*j)(this->y), + QPen(QBrush(QColor(0, 255, 0)), 0.0f) + ); + + line->setZValue(3); + + this->path.push_back(line); + + ++i; + ++j; + } +} + +void +ConfigurationSpaceScene::drawLine(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1) +{ +} + +void +ConfigurationSpaceScene::drawPoint(const rl::math::Vector& xyz) +{ +} + +void +ConfigurationSpaceScene::drawSphere(const rl::math::Vector& center, const rl::math::Real& radius) +{ +} + +void +ConfigurationSpaceScene::drawSweptVolume(const rl::plan::VectorList& path) +{ +} + +void +ConfigurationSpaceScene::drawWork(const rl::math::Transform& t) +{ +} + +void +ConfigurationSpaceScene::drawWorkEdge(const rl::math::Vector& u, const rl::math::Vector& v) +{ +} + +void +ConfigurationSpaceScene::drawWorkPath(const rl::plan::VectorList& path) +{ +} + +void +ConfigurationSpaceScene::drawWorkVertex(const rl::math::Vector& q) +{ +} + +void +ConfigurationSpaceScene::eval() +{ + this->thread->stop(); + + this->clear(); + + rl::math::Vector maximum(this->model->getDof()); + this->model->getMaximum(maximum); + rl::math::Vector minimum(this->model->getDof()); + this->model->getMinimum(minimum); + + QGraphicsRectItem* rect = this->addRect( + minimum(this->x), + -maximum(this->y), + std::abs(maximum(this->x) - minimum(this->x)), + std::abs(maximum(this->y) - minimum(this->y)), + QPen(Qt::NoPen), + QBrush(Qt::white) + ); + + rect->setZValue(0); + + this->thread->delta = this->delta; + this->thread->model = this->model; + this->thread->x = this->x; + this->thread->y = this->y; + + this->thread->start(); +} + +void +ConfigurationSpaceScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent) +{ + this->mousePressEvent(mouseEvent); +} + +void +ConfigurationSpaceScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) +{ + if (Qt::LeftButton == mouseEvent->buttons()) + { + if (!MainWindow::instance()->thread->isRunning()) + { + rl::math::Vector maximum(this->model->getDof()); + this->model->getMaximum(maximum); + rl::math::Vector minimum(this->model->getDof()); + this->model->getMinimum(minimum); + + if (mouseEvent->scenePos().x() > minimum(this->x) && + mouseEvent->scenePos().x() < maximum(this->x)) + { + (*MainWindow::instance()->q)(this->x) = mouseEvent->scenePos().x(); + } + + if (mouseEvent->scenePos().y() > minimum(this->y) && + mouseEvent->scenePos().y() < maximum(this->y)) + { + (*MainWindow::instance()->q)(this->y) = -mouseEvent->scenePos().y(); + } + + MainWindow::instance()->configurationModel->invalidate(); + MainWindow::instance()->viewer->drawConfiguration(*MainWindow::instance()->q); + } + } +} + +void +ConfigurationSpaceScene::reset() +{ + this->resetEdges(); + this->resetLines(); + this->resetPath(); +} + +void +ConfigurationSpaceScene::resetEdges() +{ + while (!this->edges.isEmpty()) + { + delete this->edges.takeFirst(); + } +} + +void +ConfigurationSpaceScene::resetLines() +{ +} + +void +ConfigurationSpaceScene::resetPath() +{ + while (!this->path.isEmpty()) + { + delete this->path.takeFirst(); + } +} + +void +ConfigurationSpaceScene::resetPoints() +{ +} + +void +ConfigurationSpaceScene::resetSpheres() +{ +} + +void +ConfigurationSpaceScene::resetVertices() +{ +} diff --git a/demos/rlPlanDemo/ConfigurationSpaceScene.h b/demos/rlPlanDemo/ConfigurationSpaceScene.h new file mode 100644 index 00000000..3d99e996 --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationSpaceScene.h @@ -0,0 +1,113 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONSPACESCENE_H_ +#define _CONFIGURATIONSPACESCENE_H_ + +#include +#include +#include +#include +#include + +class ConfigurationSpaceThread; + +class ConfigurationSpaceScene : public QGraphicsScene, public rl::plan::Viewer +{ + Q_OBJECT + +public: + ConfigurationSpaceScene(QObject* parent = NULL); + + virtual ~ConfigurationSpaceScene(); + + rl::math::Real delta; + + rl::plan::Model* model; + + std::size_t x; + + std::size_t y; + +public slots: + void addCollision(const qreal& x, const qreal& y, const qreal& w, const qreal& h, const int& rgb); + + void clear(); + + void drawConfiguration(const rl::math::Vector& q); + + void drawConfigurationEdge(const rl::math::Vector& u, const rl::math::Vector& v, const bool& free = true); + + void drawConfigurationPath(const rl::plan::VectorList& path); + + void drawConfigurationVertex(const rl::math::Vector& q, const bool& free = true); + + void drawLine(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1); + + void drawPoint(const rl::math::Vector& xyz); + + void drawSphere(const rl::math::Vector& center, const rl::math::Real& radius); + + void drawSweptVolume(const rl::plan::VectorList& path); + + void drawWork(const rl::math::Transform& t); + + void drawWorkEdge(const rl::math::Vector& u, const rl::math::Vector& v); + + void drawWorkPath(const rl::plan::VectorList& path); + + void drawWorkVertex(const rl::math::Vector& q); + + void eval(); + + void reset(); + + void resetEdges(); + + void resetLines(); + + void resetPath(); + + void resetPoints(); + + void resetSpheres(); + + void resetVertices(); + +protected: + void mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent); + + void mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent); + +private: + QLinkedList edges; + + QLinkedList path; + + ConfigurationSpaceThread* thread; +}; + +#endif // _CONFIGURATIONSPACESCENE_H_ diff --git a/demos/rlPlanDemo/ConfigurationSpaceThread.cpp b/demos/rlPlanDemo/ConfigurationSpaceThread.cpp new file mode 100644 index 00000000..69f36f2b --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationSpaceThread.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "ConfigurationSpaceThread.h" +#include "MainWindow.h" + +ConfigurationSpaceThread::ConfigurationSpaceThread(QObject* parent) : + QThread(parent), + delta(1.0f), + model(NULL), + x(0), + y(1), + running(false) +{ +} + +ConfigurationSpaceThread::~ConfigurationSpaceThread() +{ +} + +void +ConfigurationSpaceThread::run() +{ + QMutexLocker lock(&MainWindow::instance()->mutex); + + this->running = true; + + if (rl::plan::SimpleModel* model = dynamic_cast< rl::plan::SimpleModel* >(this->model)) + { + rl::math::Vector maximum(model->getDof()); + model->getMaximum(maximum); + rl::math::Vector minimum(model->getDof()); + model->getMinimum(minimum); + + rl::math::Real range0 = std::abs(maximum(this->x) - minimum(this->x)); + rl::math::Real range1 = std::abs(maximum(this->y) - minimum(this->y)); + + rl::math::Real delta0 = range0 / std::ceil(range0 / this->delta); + rl::math::Real delta1 = range1 / std::ceil(range1 / this->delta); + + std::size_t steps0 = static_cast< std::size_t >(std::ceil(range0 / delta0)); + std::size_t steps1 = static_cast< std::size_t >(std::ceil(range1 / delta1)); + + rl::math::Vector q(*MainWindow::instance()->start); + + for (std::size_t i = 0; i < steps1 + 1 && this->running; ++i) + { + q(this->y) = maximum(this->y) - i * delta1; + + for (std::size_t j = 0; j < steps0 + 1 && this->running; ++j) + { + q(this->x) = minimum(this->x) + j * delta0; + + model->setPosition(q); + model->updateFrames(); + + if (model->isColliding()) + { + emit addCollision( + q(this->x), + q(this->y), + delta0, + delta1, + 0 + ); + } + } + } + } + + this->running = false; +} + +void +ConfigurationSpaceThread::stop() +{ + if (this->running) + { + this->running = false; + + while (!this->isFinished()) + { + QThread::usleep(0); + } + } +} diff --git a/demos/rlPlanDemo/ConfigurationSpaceThread.h b/demos/rlPlanDemo/ConfigurationSpaceThread.h new file mode 100644 index 00000000..8900072b --- /dev/null +++ b/demos/rlPlanDemo/ConfigurationSpaceThread.h @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _CONFIGURATIONSPACETHREAD_H_ +#define _CONFIGURATIONSPACETHREAD_H_ + +#include +#include + +class ConfigurationSpaceThread : public QThread +{ + Q_OBJECT + +public: + ConfigurationSpaceThread(QObject* parent = NULL); + + virtual ~ConfigurationSpaceThread(); + + void run(); + + void stop(); + + rl::math::Real delta; + + rl::plan::Model* model; + + std::size_t x; + + std::size_t y; + +protected: + +private: + bool running; + +signals: + void addCollision(const qreal& x, const qreal& y, const qreal& w, const qreal& h, const int& rgb); +}; + +#endif // _CONFIGURATIONSPACETHREAD_H_ diff --git a/demos/rlPlanDemo/MainWindow.cpp b/demos/rlPlanDemo/MainWindow.cpp new file mode 100644 index 00000000..2b741155 --- /dev/null +++ b/demos/rlPlanDemo/MainWindow.cpp @@ -0,0 +1,1810 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef RL_SG_HAVE_BULLET +#include +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_ODE +#include +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP +#include +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_SOLID +#include +#endif // RL_SG_HAVE_SOLID + +#include "ConfigurationDelegate.h" +#include "ConfigurationModel.h" +#include "ConfigurationSpaceScene.h" +#include "MainWindow.h" +#include "PlannerModel.h" +#include "Thread.h" +#include "Viewer.h" + +MainWindow::MainWindow(QWidget* parent, Qt::WFlags f) : + QMainWindow(parent, f), + configurationModel(new ConfigurationModel(this)), + explorerGoals(), + explorers(), + explorerStarts(), + goal(), + kin(), + kin2(), + mdl(), + mdl2(), + model(), + model2(), + mutex(), + planner(), + plannerModel(new PlannerModel(this)), + q(), + sampler(), + sampler2(), + sigma(), + scene(), + scene2(), + sceneModel(NULL), + sceneModel2(NULL), + start(), + thread(new Thread(this)), + verifier(), + verifier2(), + viewer(NULL), + configurationDelegate(new ConfigurationDelegate(this)), + configurationDockWidget(new QDockWidget(this)), + configurationSpaceDockWidget(new QDockWidget(this)), + configurationSpaceScene(new ConfigurationSpaceScene(this)), + configurationSpaceView(new QGraphicsView(this)), + configurationView(new QTableView(this)), + engine(), + evalAction(new QAction(this)), + exitAction(new QAction(this)), + filename(), + getGoalConfigurationAction(new QAction(this)), + getRandomConfigurationAction(new QAction(this)), + getRandomFreeConfigurationAction(new QAction(this)), + getStartConfigurationAction(new QAction(this)), + openAction(new QAction(this)), + plannerDockWidget(new QDockWidget(this)), + plannerView(new QTableView(this)), + resetAction(new QAction(this)), + saveImageAction(new QAction(this)), + savePdfAction(new QAction(this)), + saveSceneAction(new QAction(this)), + setGoalConfigurationAction(new QAction(this)), + setStartConfigurationAction(new QAction(this)), + startThreadAction(new QAction(this)), + toggleCameraAction(new QAction(this)), + toggleConfigurationAction(new QAction(this)), + toggleConfigurationEdgesAction(new QAction(this)), + toggleConfigurationSpaceAction(new QAction(this)), + toggleConfigurationVerticesAction(new QAction(this)), + toggleLinesAction(new QAction(this)), + togglePlannerAction(new QAction(this)), + togglePointsAction(new QAction(this)), + toggleSpheresAction(new QAction(this)), + toggleViewAction(new QAction(this)), + toggleWorkFramesAction(new QAction(this)), + wait(true) +{ + MainWindow::singleton = this; + + SoQt::init(this); + SoDB::init(); + + this->viewer = new Viewer(this); + this->setCentralWidget(this->viewer); + + this->configurationSpaceView->setEnabled(false); + this->configurationSpaceView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + this->configurationSpaceView->setScene(this->configurationSpaceScene); + this->configurationSpaceView->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + this->configurationSpaceView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + this->configurationView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + this->configurationView->horizontalHeader()->hide(); + this->configurationView->setAlternatingRowColors(true); + this->configurationView->setItemDelegate(this->configurationDelegate); + this->configurationView->setModel(this->configurationModel); + this->configurationView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + + this->configurationDockWidget->hide(); + this->configurationDockWidget->resize(160, 320); + this->configurationDockWidget->setFloating(true); + this->configurationDockWidget->setWidget(this->configurationView); + this->configurationDockWidget->setWindowTitle("Configuration"); + + this->configurationSpaceDockWidget->hide(); + this->configurationSpaceDockWidget->setFloating(true); + this->configurationSpaceDockWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + this->configurationSpaceDockWidget->setWidget(this->configurationSpaceView); + this->configurationSpaceDockWidget->setWindowTitle("C-Space"); + + this->plannerView->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + this->plannerView->setAlternatingRowColors(true); + this->plannerView->setModel(this->plannerModel); + this->plannerView->setWordWrap(false); + this->plannerView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); + + this->plannerDockWidget->hide(); + this->plannerDockWidget->resize(160, 320); + this->plannerDockWidget->setFloating(true); + this->plannerDockWidget->setWidget(this->plannerView); + this->plannerDockWidget->setWindowTitle("Planner"); + + this->init(); + + QStringList engines; +#ifdef RL_SG_HAVE_ODE + engines.push_back("ode"); + this->engine = "ode"; +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP + engines.push_back("pqp"); + this->engine = "pqp"; +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_BULLET + engines.push_back("bullet"); + this->engine = "bullet"; +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_SOLID + engines.push_back("solid"); + this->engine = "solid"; +#endif // RL_SG_HAVE_SOLID + engines.sort(); + + QRegExp engineRegExp("--engine=(" + engines.join("|") + ")"); + QRegExp helpRegExp("--help"); + QRegExp heightRegExp("--height=(\\d*)"); + QRegExp viewerRegExp("--disable-viewer"); + QRegExp waitRegExp("--disable-wait"); + QRegExp widthRegExp("--width=(\\d*)"); + QRegExp quitRegExp("--enable-quit"); + + int width = 1024; + int height = 768; + + for (int i = 1; i < QApplication::arguments().size(); ++i) + { + if (-1 != engineRegExp.indexIn(QApplication::arguments()[i])) + { + this->engine = engineRegExp.cap(1); + } + else if (-1 != helpRegExp.indexIn(QApplication::arguments()[i])) + { + std::cout << "Usage: rlPlanDemo [PLANFILE] [--engine=" << engines.join("|").toStdString() << "] [--help] [--disable-viewer] [--disable-wait] [--enable-quit] [--width=WIDTH] [--height=HEIGHT]" << std::endl; + } + else if (-1 != heightRegExp.indexIn(QApplication::arguments()[i])) + { + height = heightRegExp.cap(1).toInt(); + } + else if (-1 != viewerRegExp.indexIn(QApplication::arguments()[i])) + { + QObject::disconnect(this->toggleViewAction, SIGNAL(toggled(bool)), this, SLOT(toggleView(bool))); + this->toggleViewAction->setChecked(false); + QObject::connect(this->toggleViewAction, SIGNAL(toggled(bool)), this, SLOT(toggleView(bool))); + } + else if (-1 != waitRegExp.indexIn(QApplication::arguments()[i])) + { + this->wait = false; + } + else if (-1 != widthRegExp.indexIn(QApplication::arguments()[i])) + { + width = widthRegExp.cap(1).toInt(); + } + else if (-1 != quitRegExp.indexIn(QApplication::arguments()[i])) + { + this->thread->quit = true; + } + else + { + this->filename = QApplication::arguments()[i]; + } + } + + this->resize(width, height); + this->viewer->setMinimumSize(width, height); + + if (this->filename.isEmpty()) + { + this->open(); + } + else + { + this->load(this->filename); + } +} + +MainWindow::~MainWindow() +{ + this->thread->stop(); + + MainWindow::singleton = NULL; +} + +void +MainWindow::clear() +{ + this->explorerGoals.clear(); + this->explorers.clear(); + this->explorerStarts.clear(); + this->goal.reset(); + this->kin.reset(); + this->kin2.reset(); + this->mdl.reset(); + this->mdl2.reset(); + this->model.reset(); + this->model2.reset(); + this->optimizer.reset(); + this->planner.reset(); + this->q.reset(); + this->sampler.reset(); + this->sampler2.reset(); + this->sigma.reset(); + this->scene.reset(); + this->scene2.reset(); + this->sceneModel = NULL; + this->sceneModel2 = NULL; + this->start.reset(); + this->verifier.reset(); + this->verifier2.reset(); +} + +void +MainWindow::connect(const QObject* sender, const QObject* receiver) +{ + QObject::connect( + sender, + SIGNAL(configurationRequested(const rl::math::Vector&)), + receiver, + SLOT(drawConfiguration(const rl::math::Vector&)) + ); + + QObject::connect( + sender, + SIGNAL(configurationEdgeRequested(const rl::math::Vector&, const rl::math::Vector&, const bool&)), + receiver, + SLOT(drawConfigurationEdge(const rl::math::Vector&, const rl::math::Vector&, const bool&)) + ); + + QObject::connect( + sender, + SIGNAL(configurationPathRequested(const rl::plan::VectorList&)), + receiver, + SLOT(drawConfigurationPath(const rl::plan::VectorList&)) + ); + + QObject::connect( + sender, + SIGNAL(configurationVertexRequested(const rl::math::Vector&, const bool&)), + receiver, + SLOT(drawConfigurationVertex(const rl::math::Vector&, const bool&)) + ); + + QObject::connect( + sender, + SIGNAL(edgeResetRequested()), + receiver, + SLOT(resetEdges()) + ); + + QObject::connect( + sender, + SIGNAL(lineRequested(const rl::math::Vector&, const rl::math::Vector&)), + receiver, + SLOT(drawLine(const rl::math::Vector&, const rl::math::Vector&)) + ); + + QObject::connect( + sender, + SIGNAL(lineResetRequested()), + receiver, + SLOT(resetLines()) + ); + + QObject::connect( + sender, + SIGNAL(pointRequested(const rl::math::Vector&)), + receiver, + SLOT(drawPoint(const rl::math::Vector&)) + ); + + QObject::connect( + sender, + SIGNAL(pointResetRequested()), + receiver, + SLOT(resetPoints()) + ); + + QObject::connect( + sender, + SIGNAL(resetRequested()), + receiver, + SLOT(reset()) + ); + + QObject::connect( + sender, + SIGNAL(sphereRequested(const rl::math::Vector&, const rl::math::Real&)), + receiver, + SLOT(drawSphere(const rl::math::Vector&, const rl::math::Real&)) + ); + + QObject::connect( + sender, + SIGNAL(sphereResetRequested()), + receiver, + SLOT(resetSpheres()) + ); + + QObject::connect( + sender, + SIGNAL(sweptVolumeRequested(const rl::plan::VectorList&)), + receiver, + SLOT(drawSweptVolume(const rl::plan::VectorList&)) + ); + + QObject::connect( + sender, + SIGNAL(vertexResetRequested()), + receiver, + SLOT(resetVertices()) + ); + + QObject::connect( + sender, + SIGNAL(workRequested(const rl::math::Transform&)), + receiver, + SLOT(drawWork(const rl::math::Transform&)) + ); + + QObject::connect( + sender, + SIGNAL(workEdgeRequested(const rl::math::Vector&, const rl::math::Vector&)), + receiver, + SLOT(drawWorkEdge(const rl::math::Vector&, const rl::math::Vector&)) + ); + + QObject::connect( + sender, + SIGNAL(workPathRequested(const rl::plan::VectorList&)), + receiver, + SLOT(drawWorkPath(const rl::plan::VectorList&)) + ); +} + +void +MainWindow::disconnect(const QObject* sender, const QObject* receiver) +{ + QObject::disconnect(sender, NULL, receiver, NULL); +} + +void +MainWindow::eval() +{ + this->configurationSpaceScene->eval(); +} + +void +MainWindow::getGoalConfiguration() +{ + *this->q = *this->goal; + this->configurationModel->invalidate(); + this->viewer->drawConfiguration(*this->q); +} + +void +MainWindow::getRandomConfiguration() +{ + this->sampler2->generate(*this->q); + this->configurationModel->invalidate(); + this->viewer->drawConfiguration(*this->q); +} + +void +MainWindow::getRandomFreeConfiguration() +{ + this->sampler2->generateCollisionFree(*this->q); + this->configurationModel->invalidate(); + this->viewer->drawConfiguration(*this->q); +} + +void +MainWindow::getStartConfiguration() +{ + *this->q = *this->start; + this->configurationModel->invalidate(); + this->viewer->drawConfiguration(*this->q); +} + +void +MainWindow::init() +{ + QMenu* fileMenu = this->menuBar()->addMenu("File"); + + this->openAction->setText("Open..."); + this->openAction->setShortcut(QKeySequence::Open); + QObject::connect(this->openAction, SIGNAL(triggered()), this, SLOT(open())); + this->addAction(this->openAction); + fileMenu->addAction(this->openAction); + + fileMenu->addSeparator(); + + this->saveImageAction->setText("Save as PNG"); + this->saveImageAction->setShortcut(QKeySequence("Return")); + QObject::connect(this->saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage())); + this->addAction(this->saveImageAction); + fileMenu->addAction(this->saveImageAction); + + this->saveSceneAction->setText("Save as VRML"); + this->saveSceneAction->setShortcut(QKeySequence("Ctrl+Return")); + QObject::connect(this->saveSceneAction, SIGNAL(triggered()), this, SLOT(saveScene())); + this->addAction(this->saveSceneAction); + fileMenu->addAction(this->saveSceneAction); + + this->savePdfAction->setText("Save as PDF"); + this->savePdfAction->setShortcut(QKeySequence("Alt+Return")); + QObject::connect(this->savePdfAction, SIGNAL(triggered()), this, SLOT(savePdf())); + this->addAction(this->savePdfAction); + fileMenu->addAction(this->savePdfAction); + + fileMenu->addSeparator(); + + this->exitAction->setText("Exit"); + QObject::connect(this->exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + this->addAction(this->exitAction); + fileMenu->addAction(this->exitAction); + + QMenu* configurationMenu = this->menuBar()->addMenu("Configuration"); + + this->toggleConfigurationAction->setText("Show/Hide"); + this->toggleConfigurationAction->setShortcut(QKeySequence("F5")); + QObject::connect(this->toggleConfigurationAction, SIGNAL(triggered()), this, SLOT(toggleConfiguration())); + this->addAction(this->toggleConfigurationAction); + configurationMenu->addAction(this->toggleConfigurationAction); + + configurationMenu->addSeparator(); + + this->getRandomConfigurationAction->setText("Random"); + this->getRandomConfigurationAction->setShortcut(QKeySequence("F3")); + QObject::connect(this->getRandomConfigurationAction, SIGNAL(triggered()), this, SLOT(getRandomConfiguration())); + this->addAction(this->getRandomConfigurationAction); + configurationMenu->addAction(this->getRandomConfigurationAction); + + this->getRandomFreeConfigurationAction->setText("Random (Collision-Free)"); + this->getRandomFreeConfigurationAction->setShortcut(QKeySequence("F4")); + QObject::connect(this->getRandomFreeConfigurationAction, SIGNAL(triggered()), this, SLOT(getRandomFreeConfiguration())); + this->addAction(this->getRandomFreeConfigurationAction); + configurationMenu->addAction(this->getRandomFreeConfigurationAction); + + QMenu* cSpaceMenu = this->menuBar()->addMenu("C-Space"); + + this->toggleConfigurationSpaceAction->setText("Show/Hide"); + this->toggleConfigurationSpaceAction->setShortcut(QKeySequence("F6")); + QObject::connect(this->toggleConfigurationSpaceAction, SIGNAL(triggered()), this, SLOT(toggleConfigurationSpace())); + this->addAction(this->toggleConfigurationSpaceAction); + cSpaceMenu->addAction(this->toggleConfigurationSpaceAction); + + cSpaceMenu->addSeparator(); + + this->evalAction->setText("Evaluate"); + this->evalAction->setShortcut(QKeySequence("F11")); + QObject::connect(this->evalAction, SIGNAL(triggered()), this, SLOT(eval())); + this->addAction(this->evalAction); + cSpaceMenu->addAction(this->evalAction); + + QMenu* plannerMenu = this->menuBar()->addMenu("Planner"); + + this->togglePlannerAction->setText("Show/Hide"); + this->togglePlannerAction->setShortcut(QKeySequence("F7")); + QObject::connect(this->togglePlannerAction, SIGNAL(triggered()), this, SLOT(togglePlanner())); + this->addAction(this->togglePlannerAction); + plannerMenu->addAction(this->togglePlannerAction); + + plannerMenu->addSeparator(); + + this->getStartConfigurationAction->setText("Get Start Configuration"); + this->getStartConfigurationAction->setShortcut(QKeySequence("F1")); + QObject::connect(this->getStartConfigurationAction, SIGNAL(triggered()), this, SLOT(getStartConfiguration())); + this->addAction(this->getStartConfigurationAction); + plannerMenu->addAction(this->getStartConfigurationAction); + + this->setStartConfigurationAction->setText("Set Start Configuration"); + this->setStartConfigurationAction->setShortcut(QKeySequence("CTRL+F1")); + QObject::connect(this->setStartConfigurationAction, SIGNAL(triggered()), this, SLOT(setStartConfiguration())); + this->addAction(this->setStartConfigurationAction); + plannerMenu->addAction(this->setStartConfigurationAction); + + plannerMenu->addSeparator(); + + this->getGoalConfigurationAction->setText("Get Goal Configuration"); + this->getGoalConfigurationAction->setShortcut(QKeySequence("F2")); + QObject::connect(this->getGoalConfigurationAction, SIGNAL(triggered()), this, SLOT(getGoalConfiguration())); + this->addAction(this->getGoalConfigurationAction); + plannerMenu->addAction(this->getGoalConfigurationAction); + + this->setGoalConfigurationAction->setText("Set Goal Configuration"); + this->setGoalConfigurationAction->setShortcut(QKeySequence("CTRL+F2")); + QObject::connect(this->setGoalConfigurationAction, SIGNAL(triggered()), this, SLOT(setGoalConfiguration())); + this->addAction(this->setGoalConfigurationAction); + plannerMenu->addAction(this->setGoalConfigurationAction); + + plannerMenu->addSeparator(); + + this->startThreadAction->setText("Start"); + this->startThreadAction->setShortcut(QKeySequence("Space")); + QObject::connect(this->startThreadAction, SIGNAL(triggered()), this, SLOT(startThread())); + this->addAction(this->startThreadAction); + plannerMenu->addAction(this->startThreadAction); + + this->resetAction->setText("Reset"); + this->resetAction->setShortcut(QKeySequence("F12")); + QObject::connect(this->resetAction, SIGNAL(triggered()), this, SLOT(reset())); + this->addAction(this->resetAction); + plannerMenu->addAction(this->resetAction); + + QMenu* viewMenu = this->menuBar()->addMenu("View"); + + this->toggleViewAction->setCheckable(true); + this->toggleViewAction->setChecked(true); + this->toggleViewAction->setText("Active"); + QObject::connect(this->toggleViewAction, SIGNAL(toggled(bool)), this, SLOT(toggleView(bool))); + this->addAction(this->toggleViewAction); + viewMenu->addAction(this->toggleViewAction); + + viewMenu->addSeparator(); + + this->toggleConfigurationEdgesAction->setCheckable(true); + this->toggleConfigurationEdgesAction->setChecked(true); + this->toggleConfigurationEdgesAction->setText("Configuration Edges"); + QObject::connect(this->toggleConfigurationEdgesAction, SIGNAL(toggled(bool)), this->viewer, SLOT(toggleConfigurationEdges(bool))); + this->addAction(this->toggleConfigurationEdgesAction); + viewMenu->addAction(this->toggleConfigurationEdgesAction); + + this->toggleConfigurationVerticesAction->setCheckable(true); + this->toggleConfigurationVerticesAction->setChecked(false); + this->toggleConfigurationVerticesAction->setText("Configuration Vertices"); + QObject::connect(this->toggleConfigurationVerticesAction, SIGNAL(toggled(bool)), this->viewer, SLOT(toggleConfigurationVertices(bool))); + this->addAction(this->toggleConfigurationVerticesAction); + viewMenu->addAction(this->toggleConfigurationVerticesAction); + + viewMenu->addSeparator(); + + this->toggleWorkFramesAction->setCheckable(true); + this->toggleWorkFramesAction->setChecked(false); + this->toggleWorkFramesAction->setText("Work Frames"); + QObject::connect(this->toggleWorkFramesAction, SIGNAL(toggled(bool)), this->viewer, SLOT(toggleWorkFrames(bool))); + this->addAction(this->toggleWorkFramesAction); + viewMenu->addAction(this->toggleWorkFramesAction); + + viewMenu->addSeparator(); + + this->toggleLinesAction->setCheckable(true); + this->toggleLinesAction->setChecked(true); + this->toggleLinesAction->setText("Lines"); + QObject::connect(this->toggleLinesAction, SIGNAL(toggled(bool)), this->viewer, SLOT(toggleLines(bool))); + this->addAction(this->toggleLinesAction); + viewMenu->addAction(this->toggleLinesAction); + + this->togglePointsAction->setCheckable(true); + this->togglePointsAction->setChecked(true); + this->togglePointsAction->setText("Points"); + QObject::connect(this->togglePointsAction, SIGNAL(toggled(bool)), this->viewer, SLOT(togglePoints(bool))); + this->addAction(this->togglePointsAction); + viewMenu->addAction(this->togglePointsAction); + + this->toggleSpheresAction->setCheckable(true); + this->toggleSpheresAction->setChecked(true); + this->toggleSpheresAction->setText("Spheres"); + QObject::connect(this->toggleSpheresAction, SIGNAL(toggled(bool)), this->viewer, SLOT(toggleSpheres(bool))); + this->addAction(this->toggleSpheresAction); + viewMenu->addAction(this->toggleSpheresAction); + + viewMenu->addSeparator(); + + this->toggleCameraAction->setText("Perspective/Orthographic"); + this->toggleCameraAction->setShortcut(QKeySequence("F9")); + QObject::connect(this->toggleCameraAction, SIGNAL(triggered()), this, SLOT(toggleCamera())); + this->addAction(this->toggleCameraAction); + viewMenu->addAction(this->toggleCameraAction); +} + +MainWindow* +MainWindow::instance() +{ + if (NULL == MainWindow::singleton) + { + new MainWindow(); + } + + return MainWindow::singleton; +} + +void +MainWindow::load(const QString& filename) +{ + QMutexLocker lock(&this->mutex); + + this->clear(); + + rl::xml::DomParser parser; + + rl::xml::Document doc = parser.readFile(filename.toStdString(), "", XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + this->filename = filename; + this->setWindowTitle(filename + " - " + this->engine + " - rlPlanDemo"); + + doc.substitute(XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + rl::xml::Path path(doc); + +#ifdef RL_SG_HAVE_BULLET + if ("bullet" == this->engine) + { + this->scene = boost::make_shared< rl::sg::bullet::Scene >(); + } +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_ODE + if ("ode" == this->engine) + { + this->scene = boost::make_shared< rl::sg::ode::Scene >(); + } +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP + if ("pqp" == this->engine) + { + this->scene = boost::make_shared< rl::sg::pqp::Scene >(); + } +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_SOLID + if ("solid" == this->engine) + { + this->scene = boost::make_shared< rl::sg::solid::Scene >(); + } +#endif // RL_SG_HAVE_SOLID + + rl::xml::Object modelScene = path.eval("//model/scene"); + this->scene->load(modelScene.getNodeTab(0).getUri(modelScene.getNodeTab(0).getAttribute("href").getValue())); + this->sceneModel = this->scene->getModel( + static_cast< int >(path.eval("number(//model/model)").getFloatval()) + ); + + if (path.eval("count(//model/kinematics) > 0").getBoolval()) + { + rl::xml::Object kin = path.eval("//model/kinematics"); + this->kin.reset(rl::kin::Kinematics::create( + kin.getNodeTab(0).getUri(kin.getNodeTab(0).getAttribute("href").getValue()) + )); + + if (path.eval("count(//model/kinematics/world) > 0").getBoolval()) + { + this->kin->world() = ::rl::math::AngleAxis( + path.eval("number(//model/kinematics/world/rotation/z)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(//model/kinematics/world/rotation/y)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(//model/kinematics/world/rotation/x)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + this->kin->world().translation().x() = path.eval("number(//model/kinematics/world/translation/x)").getFloatval(0); + this->kin->world().translation().y() = path.eval("number(//model/kinematics/world/translation/y)").getFloatval(0); + this->kin->world().translation().z() = path.eval("number(//model/kinematics/world/translation/z)").getFloatval(0); + } + } + + if (path.eval("count(//model/mdl) > 0").getBoolval()) + { + rl::xml::Object mdl = path.eval("//model/mdl"); + rl::mdl::XmlFactory factory; + this->mdl.reset(dynamic_cast< rl::mdl::Dynamic* >(factory.create( + mdl.getNodeTab(0).getUri(mdl.getNodeTab(0).getAttribute("href").getValue()) + ))); + + if (path.eval("count(//model/mdl/world) > 0").getBoolval()) + { + this->mdl->world() = ::rl::math::AngleAxis( + path.eval("number(//model/mdl/world/rotation/z)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(//model/mdl/world/rotation/y)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(//model/mdl/world/rotation/x)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + this->mdl->world().translation().x() = path.eval("number(//model/mdl/world/translation/x)").getFloatval(0); + this->mdl->world().translation().y() = path.eval("number(//model/mdl/world/translation/y)").getFloatval(0); + this->mdl->world().translation().z() = path.eval("number(//model/mdl/world/translation/z)").getFloatval(0); + } + } + + this->model = boost::make_shared< rl::plan::DistanceModel >(); + + if (NULL != this->kin) + { + this->model->kin = this->kin.get(); + } + else if (NULL != this->mdl) + { + this->model->mdl = this->mdl.get(); + } + + this->model->model = this->sceneModel; + this->model->scene = this->scene.get(); + + this->q = boost::make_shared< rl::math::Vector >(this->model->getDof()); + + if (NULL != this->scene2) + { + this->viewer->sceneGroup->removeChild(this->scene2->root); + } + + this->scene2 = boost::make_shared< rl::sg::so::Scene >(); + + rl::xml::Object viewerScene = path.eval("//viewer/model/scene"); + this->scene2->load(viewerScene.getNodeTab(0).getUri(viewerScene.getNodeTab(0).getAttribute("href").getValue())); + this->sceneModel2 = static_cast< rl::sg::so::Model* >(this->scene2->getModel( + static_cast< int >(path.eval("number(//viewer/model/model)").getFloatval()) + )); + + if (path.eval("count(//viewer/model/kinematics) > 0").getBoolval()) + { + rl::xml::Object kin2 = path.eval("//viewer/model/kinematics"); + this->kin2.reset(rl::kin::Kinematics::create( + kin2.getNodeTab(0).getUri(kin2.getNodeTab(0).getAttribute("href").getValue()) + )); + + if (path.eval("count(//viewer/model/kinematics/world) > 0").getBoolval()) + { + this->kin2->world() = ::rl::math::AngleAxis( + path.eval("number(//viewer/model/kinematics/world/rotation/z)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(//viewer/model/kinematics/world/rotation/y)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(//viewer/model/kinematics/world/rotation/x)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + this->kin2->world().translation().x() = path.eval("number(//viewer/model/kinematics/world/translation/x)").getFloatval(0); + this->kin2->world().translation().y() = path.eval("number(//viewer/model/kinematics/world/translation/y)").getFloatval(0); + this->kin2->world().translation().z() = path.eval("number(//viewer/model/kinematics/world/translation/z)").getFloatval(0); + } + } + + if (path.eval("count(//viewer/model/mdl) > 0").getBoolval()) + { + rl::xml::Object mdl2 = path.eval("//viewer/model/mdl"); + rl::mdl::XmlFactory factory; + this->mdl2.reset(dynamic_cast< rl::mdl::Dynamic* >(factory.create( + mdl2.getNodeTab(0).getUri(mdl2.getNodeTab(0).getAttribute("href").getValue()) + ))); + + if (path.eval("count(//viewer/model/mdl/world) > 0").getBoolval()) + { + this->mdl2->world() = ::rl::math::AngleAxis( + path.eval("number(//viewer/model/mdl/world/rotation/z)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(//viewer/model/mdl/world/rotation/y)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(//viewer/model/mdl/world/rotation/x)").getFloatval(0) * rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + this->mdl2->world().translation().x() = path.eval("number(//viewer/model/mdl/world/translation/x)").getFloatval(0); + this->mdl2->world().translation().y() = path.eval("number(//viewer/model/mdl/world/translation/y)").getFloatval(0); + this->mdl2->world().translation().z() = path.eval("number(//viewer/model/mdl/world/translation/z)").getFloatval(0); + } + } + + this->model2 = boost::make_shared< rl::plan::Model >(); + + if (NULL != this->kin2) + { + this->model2->kin = this->kin2.get(); + } + else if (NULL != this->mdl2) + { + this->model2->mdl = this->mdl2.get(); + } + + this->model2->model = this->sceneModel2; + this->model2->scene = this->scene2.get(); + + rl::xml::Object start = path.eval("//start//q"); + this->start = boost::make_shared< rl::math::Vector >(start.getNodeNr()); + + for (int i = 0; i < start.getNodeNr(); ++i) + { + (*this->start)(i) = std::atof(start.getNodeTab(i).getContent().c_str()); + + if (start.getNodeTab(i).hasAttribute("unit")) + { + if ("deg" == start.getNodeTab(i).getAttribute("unit").getValue()) + { + (*this->start)(i) *= rl::math::DEG2RAD; + } + } + } + + *this->q = *this->start; + + rl::xml::Object goal = path.eval("//goal//q"); + this->goal = boost::make_shared< rl::math::Vector >(goal.getNodeNr()); + + for (int i = 0; i < goal.getNodeNr(); ++i) + { + (*this->goal)(i) = std::atof(goal.getNodeTab(i).getContent().c_str()); + + if (goal.getNodeTab(i).hasAttribute("unit")) + { + if ("deg" == goal.getNodeTab(i).getAttribute("unit").getValue()) + { + (*this->goal)(i) *= rl::math::DEG2RAD; + } + } + } + + rl::xml::Object sigma = path.eval("//sigma//q"); + this->sigma = boost::make_shared< rl::math::Vector >(sigma.getNodeNr()); + + for (int i = 0; i < sigma.getNodeNr(); ++i) + { + (*this->sigma)(i) = std::atof(sigma.getNodeTab(i).getContent().c_str()); + + if (sigma.getNodeTab(i).hasAttribute("unit")) + { + if ("deg" == sigma.getNodeTab(i).getAttribute("unit").getValue()) + { + (*this->sigma)(i) *= rl::math::DEG2RAD; + } + } + } + + if (path.eval("count(//uniformSampler) > 0").getBoolval()) + { + this->sampler = boost::make_shared< rl::plan::UniformSampler >(); + rl::plan::UniformSampler* uniformSampler = static_cast< rl::plan::UniformSampler* >(this->sampler.get()); + + if (path.eval("count(//uniformSampler/seed) > 0").getBoolval()) + { + uniformSampler->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(//uniformSampler/seed)").getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + } + else if (path.eval("count(//gaussianSampler) > 0").getBoolval()) + { + this->sampler = boost::make_shared< rl::plan::GaussianSampler >(); + rl::plan::GaussianSampler* gaussianSampler = static_cast< rl::plan::GaussianSampler* >(this->sampler.get()); + + if (path.eval("count(//gaussianSampler/seed) > 0").getBoolval()) + { + gaussianSampler->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(//gaussianSampler/seed)").getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + + gaussianSampler->sigma = this->sigma.get(); + } + else if (path.eval("count(//bridgeSampler) > 0").getBoolval()) + { + this->sampler = boost::make_shared< rl::plan::BridgeSampler >(); + rl::plan::BridgeSampler* bridgeSampler = static_cast< rl::plan::BridgeSampler* >(this->sampler.get()); + bridgeSampler->ratio = path.eval("number(//bridgeSampler/ratio)").getFloatval(5.0f / 6.0f); + + if (path.eval("count(//bridgeSampler/seed) > 0").getBoolval()) + { + bridgeSampler->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(//bridgeSampler/seed)").getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + + bridgeSampler->sigma = this->sigma.get(); + } + + if (NULL != this->sampler) + { + this->sampler->model = this->model.get(); + } + + this->sampler2 = boost::make_shared< rl::plan::UniformSampler >(); + this->sampler2->model = this->model.get(); + + if (path.eval("count(//recursiveVerifier) > 0").getBoolval()) + { + this->verifier = boost::make_shared< rl::plan::RecursiveVerifier >(); + this->verifier->delta = path.eval("number(//recursiveVerifier/delta)").getFloatval(1.0f); + + if ("deg" == path.eval("string(//recursiveVerifier/delta/@unit)").getStringval()) + { + this->verifier->delta *= rl::math::DEG2RAD; + } + } + else if (path.eval("count(//sequentialVerifier) > 0").getBoolval()) + { + this->verifier = boost::make_shared< rl::plan::SequentialVerifier >(); + this->verifier->delta = path.eval("number(//sequentialVerifier/delta)").getFloatval(1.0f); + + if ("deg" == path.eval("string(//sequentialVerifier/delta/@unit)").getStringval()) + { + this->verifier->delta *= rl::math::DEG2RAD; + } + } + + if (NULL != this->verifier) + { + this->verifier->model = this->model.get(); + } + + if (path.eval("count(//simpleOptimizer/recursiveVerifier) > 0").getBoolval()) + { + this->verifier2 = boost::make_shared< rl::plan::RecursiveVerifier >(); + this->verifier2->delta = path.eval("number(//simpleOptimizer/recursiveVerifier/delta)").getFloatval(1.0f); + + if ("deg" == path.eval("string(//simpleOptimizer/recursiveVerifier/delta/@unit)").getStringval()) + { + this->verifier2->delta *= rl::math::DEG2RAD; + } + } + else if (path.eval("count(//advancedOptimizer/recursiveVerifier) > 0").getBoolval()) + { + this->verifier2 = boost::make_shared< rl::plan::RecursiveVerifier >(); + this->verifier2->delta = path.eval("number(//advancedOptimizer/recursiveVerifier/delta)").getFloatval(1.0f); + + if ("deg" == path.eval("string(//advancedOptimizer/recursiveVerifier/delta/@unit)").getStringval()) + { + this->verifier2->delta *= rl::math::DEG2RAD; + } + } + + if (NULL != this->verifier2) + { + this->verifier2->model = this->model.get(); + } + + this->optimizer.reset(); + + if (path.eval("count(//simpleOptimizer) > 0").getBoolval()) + { + this->optimizer = boost::make_shared< rl::plan::SimpleOptimizer >(); + } + else if (path.eval("count(//advancedOptimizer) > 0").getBoolval()) + { + this->optimizer = boost::make_shared< rl::plan::AdvancedOptimizer >(); + rl::plan::AdvancedOptimizer* advancedOptimizer = static_cast< rl::plan::AdvancedOptimizer* >(this->optimizer.get()); + advancedOptimizer->length = path.eval("number(//advancedOptimizer/length)").getFloatval(1.0f); + + if ("deg" == path.eval("string(//advancedOptimizer/length/@unit)").getStringval()) + { + advancedOptimizer->length *= rl::math::DEG2RAD; + } + + advancedOptimizer->ratio = path.eval("number(//advancedOptimizer/ratio)").getFloatval(0.1f); + } + + if (NULL != this->optimizer) + { + this->optimizer->model = this->model.get(); + this->optimizer->verifier = this->verifier2.get(); + } + + rl::xml::Object planner = path.eval("//addRrtConCon|//eet|//prm|//prmUtilityGuided|//rrt|//rrtCon|//rrtConCon|//rrtConExt|//rrtDual|//rrtGoalBias|//rrtExtCon|//rrtExtExt"); + + if ("addRrtConCon" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::AddRrtConCon >(); + rl::plan::AddRrtConCon* addRrtConCon = static_cast< rl::plan::AddRrtConCon* >(this->planner.get()); + addRrtConCon->alpha = path.eval("number(alpha)", planner.getNodeTab(0)).getFloatval(0.05f); + addRrtConCon->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + addRrtConCon->delta *= rl::math::DEG2RAD; + } + + addRrtConCon->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + addRrtConCon->epsilon *= rl::math::DEG2RAD; + } + + addRrtConCon->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + addRrtConCon->lower = path.eval("number(lower)", planner.getNodeTab(0)).getFloatval(2.0f); + + if ("deg" == path.eval("string(lower/@unit)", planner.getNodeTab(0)).getStringval()) + { + addRrtConCon->lower *= rl::math::DEG2RAD; + } + + addRrtConCon->radius = path.eval("number(radius)", planner.getNodeTab(0)).getFloatval(20.0f); + + if ("deg" == path.eval("string(radius/@unit)", planner.getNodeTab(0)).getStringval()) + { + addRrtConCon->radius *= rl::math::DEG2RAD; + } + + addRrtConCon->sampler = this->sampler.get(); + } + else if ("eet" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::Eet >(); + rl::plan::Eet* eet = static_cast< rl::plan::Eet* >(this->planner.get()); + eet->alpha = path.eval("number(alpha)", planner.getNodeTab(0)).getFloatval(0.01f); + eet->alternativeDistanceComputation = path.eval("count(alternativeDistanceComputation) > 0", planner.getNodeTab(0)).getBoolval() ? true : false; + eet->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + eet->delta *= rl::math::DEG2RAD; + } + + eet->distanceWeight = path.eval("number(distanceWeight)", planner.getNodeTab(0)).getFloatval(0.1f); + eet->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + eet->epsilon *= rl::math::DEG2RAD; + } + + eet->gamma = path.eval("number(gamma)", planner.getNodeTab(0)).getFloatval(1.f/3.f); + eet->goalEpsilon = path.eval("number(goalEpsilon)", planner.getNodeTab(0)).getFloatval(0.1f); + + if (path.eval("translate(string(goalEpsilon/@orientation), 'TRUE', 'true') = 'true' or string(goalEpsilon/@orientation) = '1'", planner.getNodeTab(0)).getBoolval()) + { + eet->goalEpsilonUseOrientation = true; + } + else + { + eet->goalEpsilonUseOrientation = false; + } + + eet->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + eet->max.x() = path.eval("number(max/x)", planner.getNodeTab(0)).getFloatval(0.0f); + eet->max.y() = path.eval("number(max/y)", planner.getNodeTab(0)).getFloatval(0.0f); + eet->max.z() = path.eval("number(max/z)", planner.getNodeTab(0)).getFloatval(0.0f); + eet->min.x() = path.eval("number(min/x)", planner.getNodeTab(0)).getFloatval(0.0f); + eet->min.y() = path.eval("number(min/y)", planner.getNodeTab(0)).getFloatval(0.0f); + eet->min.z() = path.eval("number(min/z)", planner.getNodeTab(0)).getFloatval(0.0f); + eet->sampler = this->sampler.get(); + + if (path.eval("count(seed) > 0", planner.getNodeTab(0)).getBoolval()) + { + eet->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(seed)", planner.getNodeTab(0)).getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + + rl::xml::Object explorers = path.eval("explorer", planner.getNodeTab(0)); + + for (int i = 0; i < explorers.getNodeNr(); ++i) + { + boost::shared_ptr< rl::plan::WorkspaceSphereExplorer > explorer = boost::make_shared< rl::plan::WorkspaceSphereExplorer >(); + this->explorers.push_back(explorer); + eet->explorers.push_back(explorer.get()); + + rl::plan::Eet::ExplorerSetup explorerSetup; + + boost::shared_ptr< rl::math::Vector3 > explorerStart = boost::make_shared< rl::math::Vector3 >(); + this->explorerStarts.push_back(explorerStart); + explorer->start = explorerStart.get(); + + (*explorerStart).x() = path.eval("number(start/x)", explorers.getNodeTab(i)).getFloatval(0.0f); + (*explorerStart).y() = path.eval("number(start/y)", explorers.getNodeTab(i)).getFloatval(0.0f); + (*explorerStart).z() = path.eval("number(start/z)", explorers.getNodeTab(i)).getFloatval(0.0f); + + if (path.eval("count(start/goal) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.startConfiguration = this->goal.get(); + } + else if (path.eval("count(start/start) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.startConfiguration = this->start.get(); + } + else + { + explorerSetup.startConfiguration = NULL; + } + + if (path.eval("count(start//frame) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.startFrame = static_cast< int >(path.eval("number(start//frame)", explorers.getNodeTab(i)).getFloatval()); + } + else if (path.eval("count(start//tcp) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.startFrame = -1; + } + + boost::shared_ptr< rl::math::Vector3 > explorerGoal = boost::make_shared< rl::math::Vector3 >(); + this->explorerGoals.push_back(explorerGoal); + explorer->goal = explorerGoal.get(); + + (*explorerGoal).x() = path.eval("number(goal/x)", explorers.getNodeTab(i)).getFloatval(0.0f); + (*explorerGoal).y() = path.eval("number(goal/y)", explorers.getNodeTab(i)).getFloatval(0.0f); + (*explorerGoal).z() = path.eval("number(goal/z)", explorers.getNodeTab(i)).getFloatval(0.0f); + + if (path.eval("count(goal/goal) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.goalConfiguration = this->goal.get(); + } + else if (path.eval("count(goal/start) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.goalConfiguration = this->start.get(); + } + else + { + explorerSetup.goalConfiguration = NULL; + } + + if (path.eval("count(goal//frame) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.goalFrame = static_cast< int >(path.eval("number(goal//frame)", explorers.getNodeTab(i)).getFloatval()); + } + else if (path.eval("count(goal//tcp) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorerSetup.goalFrame = -1; + } + + if (path.eval("count(distance) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorer->greedy = rl::plan::WorkspaceSphereExplorer::GREEDY_DISTANCE; + } + else if (path.eval("count(sourcedistance) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorer->greedy = rl::plan::WorkspaceSphereExplorer::GREEDY_SOURCE_DISTANCE; + } + else if (path.eval("count(space) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorer->greedy = rl::plan::WorkspaceSphereExplorer::GREEDY_SPACE; + } + + explorer->model = this->model.get(); + explorer->radius = path.eval("number(radius)", explorers.getNodeTab(i)).getFloatval(0.0f); + explorer->range = path.eval("number(range)", explorers.getNodeTab(i)).getFloatval(std::numeric_limits< rl::math::Real >::max()); + explorer->samples = static_cast< int >(path.eval("number(samples)", explorers.getNodeTab(i)).getFloatval(10.0f)); + + if (path.eval("count(seed) > 0", explorers.getNodeTab(i)).getBoolval()) + { + explorer->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(seed)", explorers.getNodeTab(i)).getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + + eet->explorersSetup.push_back(explorerSetup); + } + } + else if ("prm" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::Prm >(); + rl::plan::Prm* prm = static_cast< rl::plan::Prm* >(this->planner.get()); + prm->degree = static_cast< int >(path.eval("number(degree)", planner.getNodeTab(0)).getFloatval(std::numeric_limits< std::size_t >::max())); + prm->k = static_cast< int >(path.eval("number(k)", planner.getNodeTab(0)).getFloatval(30.0f)); + prm->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + prm->radius = path.eval("number(radius)", planner.getNodeTab(0)).getFloatval(std::numeric_limits< rl::math::Real >::max()); + + if ("deg" == path.eval("string(radius/@unit)", planner.getNodeTab(0)).getStringval()) + { + prm->radius *= rl::math::DEG2RAD; + } + + prm->sampler = this->sampler.get(); + prm->verifier = this->verifier.get(); + } + else if ("prmUtilityGuided" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::PrmUtilityGuided >(); + rl::plan::PrmUtilityGuided* prmUtilityGuided = static_cast< rl::plan::PrmUtilityGuided* >(this->planner.get()); + prmUtilityGuided->degree = static_cast< int >(path.eval("number(degree)", planner.getNodeTab(0)).getFloatval(std::numeric_limits< std::size_t >::max())); + prmUtilityGuided->k = static_cast< int >(path.eval("number(k)", planner.getNodeTab(0)).getFloatval(30.0f)); + prmUtilityGuided->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + prmUtilityGuided->radius = path.eval("number(radius)", planner.getNodeTab(0)).getFloatval(std::numeric_limits< rl::math::Real >::max()); + + if ("deg" == path.eval("string(radius/@unit)", planner.getNodeTab(0)).getStringval()) + { + prmUtilityGuided->radius *= rl::math::DEG2RAD; + } + + if (path.eval("count(seed) > 0", planner.getNodeTab(0)).getBoolval()) + { + prmUtilityGuided->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(seed)", planner.getNodeTab(0)).getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + + prmUtilityGuided->sampler = this->sampler.get(); + prmUtilityGuided->verifier = this->verifier.get(); + } + else if ("rrt" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::Rrt >(); + rl::plan::Rrt* rrt = static_cast< rl::plan::Rrt* >(this->planner.get()); + rrt->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrt->delta *= rl::math::DEG2RAD; + } + + rrt->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrt->epsilon *= rl::math::DEG2RAD; + } + + rrt->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrt->sampler = this->sampler.get(); + } + else if ("rrtCon" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::RrtCon >(); + rl::plan::RrtCon* rrtCon = static_cast< rl::plan::RrtCon* >(this->planner.get()); + rrtCon->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtCon->delta *= rl::math::DEG2RAD; + } + + rrtCon->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtCon->epsilon *= rl::math::DEG2RAD; + } + + rrtCon->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrtCon->probability = path.eval("number(probability)", planner.getNodeTab(0)).getFloatval(0.05f); + rrtCon->sampler = this->sampler.get(); + + if (path.eval("count(seed) > 0", planner.getNodeTab(0)).getBoolval()) + { + rrtCon->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(seed)", planner.getNodeTab(0)).getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + } + else if ("rrtConCon" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::RrtConCon >(); + rl::plan::RrtConCon* rrtConCon = static_cast< rl::plan::RrtConCon* >(this->planner.get()); + rrtConCon->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtConCon->delta *= rl::math::DEG2RAD; + } + + rrtConCon->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtConCon->epsilon *= rl::math::DEG2RAD; + } + + rrtConCon->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrtConCon->sampler = this->sampler.get(); + } + else if ("rrtDual" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::RrtDual >(); + rl::plan::RrtDual* rrtDual = static_cast< rl::plan::RrtDual* >(this->planner.get()); + rrtDual->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtDual->delta *= rl::math::DEG2RAD; + } + + rrtDual->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtDual->epsilon *= rl::math::DEG2RAD; + } + + rrtDual->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrtDual->sampler = this->sampler.get(); + } + else if ("rrtExtCon" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::RrtExtCon >(); + rl::plan::RrtExtCon* rrtExtCon = static_cast< rl::plan::RrtExtCon* >(this->planner.get()); + rrtExtCon->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtExtCon->delta *= rl::math::DEG2RAD; + } + + rrtExtCon->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtExtCon->epsilon *= rl::math::DEG2RAD; + } + + rrtExtCon->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrtExtCon->sampler = this->sampler.get(); + } + else if ("rrtExtExt" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::RrtExtExt >(); + rl::plan::RrtExtExt* rrtExtExt = static_cast< rl::plan::RrtExtExt* >(this->planner.get()); + rrtExtExt->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtExtExt->delta *= rl::math::DEG2RAD; + } + + rrtExtExt->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtExtExt->epsilon *= rl::math::DEG2RAD; + } + + rrtExtExt->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrtExtExt->sampler = this->sampler.get(); + } + else if ("rrtGoalBias" == planner.getNodeTab(0).getName()) + { + this->planner = boost::make_shared< rl::plan::RrtGoalBias >(); + rl::plan::RrtGoalBias* rrtGoalBias = static_cast< rl::plan::RrtGoalBias* >(this->planner.get()); + rrtGoalBias->delta = path.eval("number(delta)", planner.getNodeTab(0)).getFloatval(1.0f); + + if ("deg" == path.eval("string(delta/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtGoalBias->delta *= rl::math::DEG2RAD; + } + + rrtGoalBias->epsilon = path.eval("number(epsilon)", planner.getNodeTab(0)).getFloatval(1.0e-3f); + + if ("deg" == path.eval("string(epsilon/@unit)", planner.getNodeTab(0)).getStringval()) + { + rrtGoalBias->epsilon *= rl::math::DEG2RAD; + } + + rrtGoalBias->kd = path.eval("count(bruteForce) > 0", planner.getNodeTab(0)).getBoolval() ? false : true; + rrtGoalBias->probability = path.eval("number(probability)", planner.getNodeTab(0)).getFloatval(0.05f); + rrtGoalBias->sampler = this->sampler.get(); + + if (path.eval("count(seed) > 0", planner.getNodeTab(0)).getBoolval()) + { + rrtGoalBias->seed( + static_cast< boost::mt19937::result_type >(path.eval("number(seed)", planner.getNodeTab(0)).getFloatval(rl::util::Timer::now() * 1000000.0f)) + ); + } + } + + this->planner->duration = path.eval("number(//duration)").getFloatval(std::numeric_limits< rl::math::Real >::max()); + this->planner->goal = this->goal.get(); + this->planner->model = this->model.get(); + this->planner->start = this->start.get(); + + this->viewer->delta = path.eval("number(//viewer/delta)").getFloatval(); + + if ("deg" == path.eval("string(//viewer/delta/@unit)").getStringval()) + { + this->viewer->delta *= rl::math::DEG2RAD; + } + + this->viewer->sceneGroup->addChild(this->scene2->root); + this->viewer->model = this->model2.get(); + + this->configurationSpaceScene->model = this->model.get(); + + if (this->toggleViewAction->isChecked()) + { + this->toggleView(true); + } + else + { + this->toggleView(false); + } + + if (path.eval("count(//viewer/swept) > 0").getBoolval()) + { + this->thread->swept = true; + } + + this->viewer->viewer->setBackgroundColor(SbColor( + path.eval("number(//viewer/background/r)").getFloatval(0.0f), + path.eval("number(//viewer/background/g)").getFloatval(0.0f), + path.eval("number(//viewer/background/b)").getFloatval(0.0f) + )); + + if (path.eval("count(//viewer/camera/orthographic) > 0").getBoolval()) + { + this->viewer->viewer->setCameraType(SoOrthographicCamera::getClassTypeId()); + } + else + { + this->viewer->viewer->setCameraType(SoPerspectiveCamera::getClassTypeId()); + } + + this->viewer->viewer->getCamera()->setToDefaults(); + + this->viewer->viewer->viewAll(); + + this->viewer->viewer->getCamera()->position.setValue( + path.eval("number(//viewer/camera/position/x)").getFloatval(this->viewer->viewer->getCamera()->position.getValue()[0]), + path.eval("number(//viewer/camera/position/y)").getFloatval(this->viewer->viewer->getCamera()->position.getValue()[1]), + path.eval("number(//viewer/camera/position/z)").getFloatval(this->viewer->viewer->getCamera()->position.getValue()[2]) + ); + + if (path.eval("count(//viewer/camera/target) > 0").getBoolval()) + { + this->viewer->viewer->getCamera()->pointAt( + SbVec3f( + path.eval("number(//viewer/camera/target/x)").getFloatval(0), + path.eval("number(//viewer/camera/target/y)").getFloatval(0), + path.eval("number(//viewer/camera/target/z)").getFloatval(0) + ), + SbVec3f( + path.eval("number(//viewer/camera/up/x)").getFloatval(0), + path.eval("number(//viewer/camera/up/y)").getFloatval(0), + path.eval("number(//viewer/camera/up/z)").getFloatval(1) + ) + ); + } + + this->viewer->viewer->getCamera()->scaleHeight( + path.eval("number(//viewer/camera/scale)").getFloatval(1.0f) + ); + + if (path.eval("count(//viewer/cspace) > 0").getBoolval()) + { + this->evalAction->setEnabled(true); + this->savePdfAction->setEnabled(true); + this->toggleConfigurationSpaceAction->setEnabled(true); + + this->configurationSpaceScene->delta = path.eval("number(//viewer/cspace/delta)").getFloatval(1.0f); + + if ("deg" == path.eval("string(//viewer/cspace/delta/@unit)").getStringval()) + { + this->configurationSpaceScene->delta *= rl::math::DEG2RAD; + } + + this->configurationSpaceScene->x = static_cast< std::size_t >(path.eval("number(//viewer/cspace/x)").getFloatval(0)); + this->configurationSpaceScene->y = static_cast< std::size_t >(path.eval("number(//viewer/cspace/y)").getFloatval(1)); + + this->configurationSpaceScene->eval(); + + qreal scale = static_cast< std::size_t >(path.eval("number(//viewer/cspace/scale)").getFloatval(1.0f)); + + this->configurationSpaceView->setEnabled(true); + + rl::math::Vector maximum(this->planner->model->getDof()); + this->planner->model->getMaximum(maximum); + rl::math::Vector minimum(this->planner->model->getDof()); + this->planner->model->getMinimum(minimum); + + this->configurationSpaceView->setSceneRect( + minimum(this->configurationSpaceScene->x), + -maximum(this->configurationSpaceScene->y), + std::abs(maximum(this->configurationSpaceScene->x) - minimum(this->configurationSpaceScene->x)), + std::abs(maximum(this->configurationSpaceScene->y) - minimum(this->configurationSpaceScene->y)) + ); + + this->configurationSpaceView->resetMatrix(); + this->configurationSpaceView->scale(scale, scale); + + this->configurationSpaceView->adjustSize(); + this->configurationSpaceDockWidget->adjustSize(); + + this->configurationSpaceDockWidget->setUpdatesEnabled(false); + this->configurationSpaceDockWidget->setFloating(!this->configurationSpaceDockWidget->isFloating()); + this->configurationSpaceDockWidget->setFloating(!this->configurationSpaceDockWidget->isFloating()); + this->configurationSpaceDockWidget->setUpdatesEnabled(true); + } + else + { + this->evalAction->setEnabled(false); + this->savePdfAction->setEnabled(false); + this->toggleConfigurationSpaceAction->setEnabled(false); + + this->configurationSpaceScene->clear(); + this->configurationSpaceDockWidget->hide(); + this->configurationSpaceView->setEnabled(false); + this->disconnect(this->thread, this->configurationSpaceScene); + } + + this->viewer->drawConfiguration(*this->start); + + this->configurationModel->invalidate(); + this->plannerModel->invalidate(); + + if (!this->wait) + { + this->startThread(); + } +} + +void +MainWindow::open() +{ + if (NULL != this->planner) + { + this->reset(); + } + + QString filename = QFileDialog::getOpenFileName(this, "", this->filename, "All Formats (*.xml)"); + + if (!filename.isEmpty()) + { + this->load(filename); + } +} + +void +MainWindow::reset() +{ + rl::math::Real duration = this->planner->duration; + + this->thread->blockSignals(true); + QCoreApplication::processEvents(); + this->planner->duration = 0; + this->thread->stop(); + this->planner->duration = duration; + this->thread->blockSignals(false); + + this->planner->reset(); + this->model->reset(); + this->viewer->reset(); + this->configurationSpaceScene->reset(); + + this->configurationView->setEnabled(true); + this->evalAction->setEnabled(true); + this->getGoalConfigurationAction->setEnabled(true); + this->getRandomConfigurationAction->setEnabled(true); + this->getRandomFreeConfigurationAction->setEnabled(true); + this->getStartConfigurationAction->setEnabled(true); + this->openAction->setEnabled(true); + this->plannerView->setEnabled(true); + this->setGoalConfigurationAction->setEnabled(true); + this->setStartConfigurationAction->setEnabled(true); + this->startThreadAction->setEnabled(true); + this->toggleViewAction->setEnabled(true); +} + +void +MainWindow::saveImage() +{ + this->viewer->saveImage("planDemo-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".png"); +} + +void +MainWindow::savePdf() +{ + QPrinter printer; + printer.setOutputFileName("planDemo-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".pdf"); + printer.setOutputFormat(QPrinter::PdfFormat); + printer.setPageSize(QPrinter::A4); + + QPainter painter(&printer); + + this->configurationSpaceScene->render(&painter); +} + +void +MainWindow::saveScene() +{ + this->viewer->saveScene("planDemo-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".wrl"); +} + +void +MainWindow::setGoalConfiguration() +{ + *this->goal = *this->q; +} + +void +MainWindow::setStartConfiguration() +{ + *this->start = *this->q; +} + +void +MainWindow::startThread() +{ + this->configurationView->setEnabled(false); + this->evalAction->setEnabled(false); + this->getGoalConfigurationAction->setEnabled(false); + this->getRandomConfigurationAction->setEnabled(false); + this->getRandomFreeConfigurationAction->setEnabled(false); + this->getStartConfigurationAction->setEnabled(false); + this->openAction->setEnabled(false); + this->plannerView->setEnabled(false); + this->setGoalConfigurationAction->setEnabled(false); + this->setStartConfigurationAction->setEnabled(false); + this->startThreadAction->setEnabled(false); + this->toggleViewAction->setEnabled(false); + + this->model->reset(); + this->thread->start(); +} + +void +MainWindow::toggleCamera() +{ + if (SoPerspectiveCamera::getClassTypeId() == this->viewer->viewer->getCameraType()) + { + this->viewer->viewer->setCameraType(SoOrthographicCamera::getClassTypeId()); + } + else + { + this->viewer->viewer->setCameraType(SoPerspectiveCamera::getClassTypeId()); + } + + SbVec3f position = this->viewer->viewer->getCamera()->position.getValue(); + SbRotation orientation = this->viewer->viewer->getCamera()->orientation.getValue(); + this->viewer->viewer->getCamera()->setToDefaults(); + this->viewer->viewer->getCamera()->position.setValue(position); + this->viewer->viewer->getCamera()->orientation.setValue(orientation); + this->viewer->viewer->viewAll(); +} + +void +MainWindow::toggleConfiguration() +{ + if (this->configurationDockWidget->isVisible()) + { + this->configurationDockWidget->hide(); + } + else + { + this->configurationDockWidget->show(); + } +} + +void +MainWindow::toggleConfigurationSpace() +{ + if (this->configurationSpaceView->isEnabled()) + { + if (this->configurationSpaceDockWidget->isVisible()) + { + this->configurationSpaceDockWidget->hide(); + } + else + { + this->configurationSpaceDockWidget->show(); + } + } +} + +void +MainWindow::togglePlanner() +{ + if (this->plannerDockWidget->isVisible()) + { + this->plannerDockWidget->hide(); + } + else + { + this->plannerDockWidget->show(); + } +} + +void +MainWindow::toggleView(const bool& doOn) +{ + if (doOn) + { + this->planner->viewer = this->thread; + + if (NULL != this->optimizer) + { + this->optimizer->viewer = this->thread; + } + + for (std::vector< boost::shared_ptr< rl::plan::WorkspaceSphereExplorer > >::iterator i = this->explorers.begin(); i != this->explorers.end(); ++i) + { + (*i)->viewer = this->thread; + } + + this->connect(this->thread, this->configurationSpaceScene); + this->connect(this->thread, this->viewer); + } + else + { + this->disconnect(this->thread, this->configurationSpaceScene); + this->disconnect(this->thread, this->viewer); + + this->planner->viewer = NULL; + + if (NULL != this->optimizer) + { + this->optimizer->viewer = NULL; + } + + for (std::vector< boost::shared_ptr< rl::plan::WorkspaceSphereExplorer > >::iterator i = this->explorers.begin(); i != this->explorers.end(); ++i) + { + (*i)->viewer = NULL; + } + } +} diff --git a/demos/rlPlanDemo/MainWindow.h b/demos/rlPlanDemo/MainWindow.h new file mode 100644 index 00000000..bfb03c7e --- /dev/null +++ b/demos/rlPlanDemo/MainWindow.h @@ -0,0 +1,248 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _MAINWINDOW_H_ +#define _MAINWINDOW_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class ConfigurationDelegate; +class ConfigurationModel; +class ConfigurationSpaceScene; +class PlannerModel; +class Thread; +class Viewer; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + virtual ~MainWindow(); + + static MainWindow* instance(); + + ConfigurationModel* configurationModel; + + std::vector< boost::shared_ptr< rl::math::Vector3 > > explorerGoals; + + std::vector< boost::shared_ptr< rl::plan::WorkspaceSphereExplorer > > explorers; + + std::vector< boost::shared_ptr< rl::math::Vector3 > > explorerStarts; + + boost::shared_ptr< rl::math::Vector > goal; + + boost::shared_ptr< rl::kin::Kinematics > kin; + + boost::shared_ptr< rl::kin::Kinematics > kin2; + + boost::shared_ptr< rl::mdl::Dynamic > mdl; + + boost::shared_ptr< rl::mdl::Dynamic > mdl2; + + boost::shared_ptr< rl::plan::DistanceModel > model; + + boost::shared_ptr< rl::plan::Model > model2; + + QMutex mutex; + + boost::shared_ptr< rl::plan::Optimizer > optimizer; + + boost::shared_ptr< rl::plan::Planner > planner; + + PlannerModel* plannerModel; + + boost::shared_ptr< rl::math::Vector > q; + + boost::shared_ptr< rl::plan::Sampler > sampler; + + boost::shared_ptr< rl::plan::Sampler > sampler2; + + boost::shared_ptr< rl::math::Vector > sigma; + + boost::shared_ptr< rl::sg::Scene > scene; + + boost::shared_ptr< rl::sg::so::Scene > scene2; + + rl::sg::Model* sceneModel; + + rl::sg::so::Model* sceneModel2; + + boost::shared_ptr< rl::math::Vector > start; + + Thread* thread; + + boost::shared_ptr< rl::plan::Verifier > verifier; + + boost::shared_ptr< rl::plan::Verifier > verifier2; + + Viewer* viewer; + +public slots: + void eval(); + + void getGoalConfiguration(); + + void getRandomConfiguration(); + + void getRandomFreeConfiguration(); + + void getStartConfiguration(); + + void open(); + + void reset(); + + void saveImage(); + + void savePdf(); + + void saveScene(); + + void setGoalConfiguration(); + + void setStartConfiguration(); + + void startThread(); + + void toggleCamera(); + + void toggleConfiguration(); + + void toggleConfigurationSpace(); + + void togglePlanner(); + + void toggleView(const bool& doOn); + +protected: + MainWindow(QWidget* parent = NULL, Qt::WindowFlags f = 0); + +private: + void clear(); + + void connect(const QObject* sender, const QObject* receiver); + + void disconnect(const QObject* sender, const QObject* receiver); + + void init(); + + void load(const QString& filename); + + ConfigurationDelegate* configurationDelegate; + + QDockWidget* configurationDockWidget; + + QDockWidget* configurationSpaceDockWidget; + + ConfigurationSpaceScene* configurationSpaceScene; + + QGraphicsView* configurationSpaceView; + + QTableView* configurationView; + + QString engine; + + QAction* evalAction; + + QAction* exitAction; + + QString filename; + + QAction* getGoalConfigurationAction; + + QAction* getRandomConfigurationAction; + + QAction* getRandomFreeConfigurationAction; + + QAction* getStartConfigurationAction; + + QAction* openAction; + + QDockWidget* plannerDockWidget; + + QTableView* plannerView; + + QAction* resetAction; + + QAction* saveImageAction; + + QAction* savePdfAction; + + QAction* saveSceneAction; + + QAction* setGoalConfigurationAction; + + QAction* setStartConfigurationAction; + + static MainWindow* singleton; + + QAction* startThreadAction; + + QAction* toggleCameraAction; + + QAction* toggleConfigurationAction; + + QAction* toggleConfigurationEdgesAction; + + QAction* toggleConfigurationSpaceAction; + + QAction* toggleConfigurationVerticesAction; + + QAction* toggleLinesAction; + + QAction* togglePlannerAction; + + QAction* togglePointsAction; + + QAction* toggleSpheresAction; + + QAction* toggleViewAction; + + QAction* toggleWorkFramesAction; + + bool wait; +}; + +#endif // _MAINWINDOW_H_ diff --git a/demos/rlPlanDemo/PlannerModel.cpp b/demos/rlPlanDemo/PlannerModel.cpp new file mode 100644 index 00000000..9f8804d9 --- /dev/null +++ b/demos/rlPlanDemo/PlannerModel.cpp @@ -0,0 +1,446 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +#include "MainWindow.h" +#include "PlannerModel.h" +#include "Thread.h" + +PlannerModel::PlannerModel(QObject* parent) : + QAbstractTableModel(parent) +{ + +} + +PlannerModel::~PlannerModel() +{ +} + +int +PlannerModel::columnCount(const QModelIndex& parent) const +{ + return 1; +} + +QVariant +PlannerModel::data(const QModelIndex& index, int role) const +{ + if (NULL == MainWindow::instance()->planner) + { + return QVariant(); + } + + if (!index.isValid()) + { + return QVariant(); + } + + switch (role) + { + case Qt::DisplayRole: + case Qt::EditRole: + switch (index.row()) + { + case 0: + return MainWindow::instance()->planner->duration; + break; + default: + break; + } + + if (rl::plan::Eet* eet = dynamic_cast< rl::plan::Eet* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 4: + return eet->alpha; + break; + case 5: + return eet->distanceWeight; + break; + case 6: + return eet->gamma; + break; + case 7: + return eet->max.x(); + break; + case 8: + return eet->max.y(); + break; + case 9: + return eet->max.z(); + break; + case 10: + return eet->min.x(); + break; + case 11: + return eet->min.y(); + break; + case 12: + return eet->min.z(); + break; + default: + break; + } + } + + if (rl::plan::Prm* prm = dynamic_cast< rl::plan::Prm* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 1: + return static_cast< unsigned int >(prm->degree); + break; + case 2: + return prm->verifier->delta; + break; + case 3: + return static_cast< unsigned int >(prm->k); + break; + case 4: + return prm->radius; + break; + default: + break; + } + } + + if (rl::plan::Rrt* rrt = dynamic_cast< rl::plan::Rrt* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 1: + return rrt->delta; + break; + case 2: + return rrt->epsilon; + break; + default: + break; + } + } + + if (rl::plan::RrtGoalBias* rrtGoalBias = dynamic_cast< rl::plan::RrtGoalBias* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 3: + return rrtGoalBias->probability; + break; + default: + break; + } + } + case Qt::TextAlignmentRole: + return Qt::AlignRight; + break; + default: + break; + } + + return QVariant(); +} + +Qt::ItemFlags +PlannerModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + { + return Qt::NoItemFlags; + } + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant +PlannerModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (NULL == MainWindow::instance()->planner) + { + return QVariant(); + } + + if (Qt::DisplayRole == role && Qt::Horizontal == orientation) + { + if (0 == section) + { + return MainWindow::instance()->planner->getName().c_str(); + } + } + + if (Qt::DisplayRole == role && Qt::Vertical == orientation) + { + switch (section) + { + case 0: + return "duration"; + break; + default: + break; + } + + if (dynamic_cast< rl::plan::Eet* >(MainWindow::instance()->planner.get())) + { + switch (section) + { + case 4: + return "alpha"; + break; + case 5: + return "distanceWeight"; + break; + case 6: + return "gamma"; + break; + case 7: + return "max.x"; + break; + case 8: + return "max.y"; + break; + case 9: + return "max.z"; + break; + case 10: + return "min.x"; + break; + case 11: + return "min.y"; + break; + case 12: + return "min.z"; + break; + default: + break; + } + } + + if (dynamic_cast< rl::plan::Prm* >(MainWindow::instance()->planner.get())) + { + switch (section) + { + case 1: + return "degree"; + break; + case 2: + return "delta"; + break; + case 3: + return "k"; + break; + case 4: + return "radius"; + break; + default: + break; + } + } + + if (dynamic_cast< rl::plan::Rrt* >(MainWindow::instance()->planner.get())) + { + switch (section) + { + case 1: + return "delta"; + break; + case 2: + return "epsilon"; + break; + default: + break; + } + } + + if (dynamic_cast< rl::plan::RrtGoalBias* >(MainWindow::instance()->planner.get())) + { + switch (section) + { + case 3: + return "probability"; + break; + default: + break; + } + } + } + + return QVariant(); +} + +void +PlannerModel::invalidate() +{ + this->reset(); +} + +int +PlannerModel::rowCount(const QModelIndex& parent) const +{ + if (NULL == MainWindow::instance()->planner) + { + return 0; + } + + if (dynamic_cast< rl::plan::Prm* >(MainWindow::instance()->planner.get())) + { + return 5; + } + else if (dynamic_cast< rl::plan::Eet* >(MainWindow::instance()->planner.get())) + { + return 13; + } + else if (dynamic_cast< rl::plan::RrtGoalBias* >(MainWindow::instance()->planner.get())) + { + return 4; + } + else if (dynamic_cast< rl::plan::Rrt* >(MainWindow::instance()->planner.get())) + { + return 3; + } + + return 0; +} + +bool +PlannerModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if (NULL == MainWindow::instance()->planner) + { + return false; + } + + if (MainWindow::instance()->thread->isRunning()) + { + return false; + } + + if (index.isValid() && Qt::EditRole == role) + { + switch (index.row()) + { + case 0: + MainWindow::instance()->planner->duration = value.value< ::rl::math::Real >(); + break; + default: + break; + } + + if (rl::plan::Eet* eet = dynamic_cast< rl::plan::Eet* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 4: + eet->alpha = value.value< ::rl::math::Real >(); + break; + case 5: + eet->distanceWeight = value.value< ::rl::math::Real >(); + break; + case 6: + eet->gamma = value.value< ::rl::math::Real >(); + break; + case 7: + eet->max.x() = value.value< ::rl::math::Real >(); + break; + case 8: + eet->max.y() = value.value< ::rl::math::Real >(); + break; + case 9: + eet->max.z() = value.value< ::rl::math::Real >(); + break; + case 10: + eet->min.x() = value.value< ::rl::math::Real >(); + break; + case 11: + eet->min.y() = value.value< ::rl::math::Real >(); + break; + case 12: + eet->min.z() = value.value< ::rl::math::Real >(); + break; + default: + break; + } + } + + if (rl::plan::Prm* prm = dynamic_cast< rl::plan::Prm* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 1: + prm->degree = value.value< ::std::size_t >(); + break; + case 2: + prm->verifier->delta = value.value< ::rl::math::Real >(); + break; + case 3: + prm->k = value.value< ::std::size_t >(); + break; + case 4: + prm->radius = value.value< ::rl::math::Real >(); + break; + default: + break; + } + } + + if (rl::plan::Rrt* rrt = dynamic_cast< rl::plan::Rrt* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 1: + rrt->delta = value.value< ::rl::math::Real >(); + break; + case 2: + rrt->epsilon = value.value< ::rl::math::Real >(); + break; + default: + break; + } + } + + if (rl::plan::RrtGoalBias* rrtGoalBias = dynamic_cast< rl::plan::RrtGoalBias* >(MainWindow::instance()->planner.get())) + { + switch (index.row()) + { + case 3: + rrtGoalBias->probability = value.value< ::rl::math::Real >(); + break; + default: + break; + } + } + + emit dataChanged(index, index); + + return true; + } + + return false; +} diff --git a/demos/rlPlanDemo/PlannerModel.h b/demos/rlPlanDemo/PlannerModel.h new file mode 100644 index 00000000..d36b7f50 --- /dev/null +++ b/demos/rlPlanDemo/PlannerModel.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _PLANNERMODEL_H_ +#define _PLANNERMODEL_H_ + +#include + +class PlannerModel : public QAbstractTableModel +{ +public: + PlannerModel(QObject* parent = NULL); + + virtual ~PlannerModel(); + + int columnCount(const QModelIndex& parent = QModelIndex()) const; + + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + + void invalidate(); + + int rowCount(const QModelIndex& parent = QModelIndex()) const; + + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + +protected: + +private: + +}; + +#endif // _PLANNERMODEL_H_ diff --git a/demos/rlPlanDemo/Thread.cpp b/demos/rlPlanDemo/Thread.cpp new file mode 100644 index 00000000..8561e21d --- /dev/null +++ b/demos/rlPlanDemo/Thread.cpp @@ -0,0 +1,396 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MainWindow.h" +#include "Thread.h" +#include "Viewer.h" + +Thread::Thread(QObject* parent) : + QThread(parent), + quit(false), + swept(false), + running(false) +{ +} + +Thread::~Thread() +{ +} + +void +Thread::drawConfiguration(const rl::math::Vector& q) +{ + emit configurationRequested(q); +} + +void +Thread::drawConfigurationEdge(const rl::math::Vector& q0, const rl::math::Vector& q1, const bool& free) +{ + emit configurationEdgeRequested(q0, q1, free); +} + +void +Thread::drawConfigurationPath(const rl::plan::VectorList& path) +{ + emit configurationPathRequested(path); +} + +void +Thread::drawConfigurationVertex(const rl::math::Vector& q, const bool& free) +{ + emit configurationVertexRequested(q, free); +} + +void +Thread::drawLine(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1) +{ + emit lineRequested(xyz0, xyz1); +} + +void +Thread::drawPoint(const rl::math::Vector& xyz) +{ + emit pointRequested(xyz); +} + +void +Thread::drawSphere(const rl::math::Vector& center, const rl::math::Real& radius) +{ + emit sphereRequested(center, radius); +} + +void +Thread::drawSweptVolume(const rl::plan::VectorList& path) +{ + emit sweptVolumeRequested(path); +} + +void +Thread::drawWork(const rl::math::Transform& t) +{ + emit workRequested(t); +} + +void +Thread::drawWorkEdge(const rl::math::Vector& q0, const rl::math::Vector& q1) +{ +// emit workEdgeRequested(q0, q1); +} + +void +Thread::drawWorkPath(const rl::plan::VectorList& path) +{ + emit workPathRequested(path); +} + +void +Thread::drawWorkVertex(const rl::math::Vector& q) +{ +// emit workVertexRequested(q); +} + +void +Thread::reset() +{ + emit resetRequested(); +} + +void +Thread::resetEdges() +{ + emit edgeResetRequested(); +} + +void +Thread::resetLines() +{ + emit lineResetRequested(); +} + +void +Thread::resetPoints() +{ + emit pointResetRequested(); +} + +void +Thread::resetSpheres() +{ + emit sphereResetRequested(); +} + +void +Thread::resetVertices() +{ + emit vertexResetRequested(); +} + +void +Thread::run() +{ + QMutexLocker lock(&MainWindow::instance()->mutex); + + this->running = true; + + rl::util::Timer timer; + + this->drawConfiguration(*MainWindow::instance()->planner->start); + + if (NULL != MainWindow::instance()->planner->viewer) + { + usleep(static_cast< std::size_t >(2.0f * 1000.0f * 1000.0f)); + } + + if (!this->running) return; + + this->drawConfiguration(*MainWindow::instance()->planner->goal); + + if (NULL != MainWindow::instance()->planner->viewer) + { + usleep(static_cast< std::size_t >(2.0f * 1000.0f * 1000.0f)); + } + + if (!this->running) return; + + if (!MainWindow::instance()->planner->verify()) + { + std::cout << "start or goal invalid" << std::endl; + return; + } + + std::cout << "solve() ... " << std::endl;; + timer.start(); + bool solved = MainWindow::instance()->planner->solve(); + timer.stop(); + std::cout << "solve() " << (solved ? "true" : "false") << " " << timer.elapsed() * 1000.0f << " ms" << std::endl; + + std::fstream benchmark; + benchmark.open("benchmark.csv", std::ios::app | std::ios::in | std::ios::out); + int peek = benchmark.peek(); + + if (std::ifstream::traits_type::eof() == peek) + { + benchmark.clear(); + benchmark << "Date,Time,Solved,Planner,Robot,Vertices,Edges,Total CD,Free CD,Exploration Duration (s),Duration (s), Path Length" << std::endl; + } + else + { + benchmark.seekp(peek); + } + + benchmark << QDateTime::currentDateTime().toString("yyyy-MM-dd,HH:mm:ss.zzz").toStdString(); + benchmark << ","; + benchmark << (solved ? "true" : "false"); + benchmark << ","; + benchmark << MainWindow::instance()->planner->getName(); + benchmark << ","; + benchmark << MainWindow::instance()->model->getManufacturer(); + benchmark << (!MainWindow::instance()->model->getManufacturer().empty() && !MainWindow::instance()->model->getName().empty() ? " " : ""); + benchmark << MainWindow::instance()->model->getName(); + benchmark << ","; + + if (rl::plan::Prm* prm = dynamic_cast< rl::plan::Prm* >(MainWindow::instance()->planner.get())) + { + benchmark << prm->getNumVertices(); + } + else if (rl::plan::Rrt* rrt = dynamic_cast< rl::plan::Rrt* >(MainWindow::instance()->planner.get())) + { + benchmark << rrt->getNumVertices(); + } + + benchmark << ","; + + if (rl::plan::Prm* prm = dynamic_cast< rl::plan::Prm* >(MainWindow::instance()->planner.get())) + { + benchmark << prm->getNumEdges(); + } + else if (rl::plan::Rrt* rrt = dynamic_cast< rl::plan::Rrt* >(MainWindow::instance()->planner.get())) + { + benchmark << rrt->getNumEdges(); + } + + benchmark << ","; + benchmark << MainWindow::instance()->model->getTotalQueries(); + benchmark << ","; + benchmark << MainWindow::instance()->model->getFreeQueries(); + benchmark << ","; + + if (rl::plan::Eet* eet = dynamic_cast< rl::plan::Eet* >(MainWindow::instance()->planner.get())) + { + benchmark << eet->getExplorationTime(); + } + else + { + benchmark << 0.0f; + } + + benchmark << ","; + benchmark << timer.elapsed(); + + rl::plan::VectorList path; + + if (solved) + { + MainWindow::instance()->planner->getPath(path); + + rl::plan::VectorList::iterator i = path.begin(); + rl::plan::VectorList::iterator j = ++path.begin(); + + rl::math::Real length = 0; + + for (; i != path.end() && j != path.end(); ++i, ++j) + { + length += MainWindow::instance()->model->distance(*i, *j); + } + + benchmark << ","; + benchmark << length; + } + + benchmark << std::endl; + benchmark.close(); + + if (!this->running) return; + + if (this->quit) + { + QApplication::quit(); + return; + } + + if (solved) + { + if (this->swept) + { + this->drawSweptVolume(path); + return; + } + + this->drawConfigurationPath(path); + + if (!this->running) return; + + if (NULL != MainWindow::instance()->optimizer) + { + usleep(static_cast< std::size_t >(2.0f * 1000.0f * 1000.0f)); + + std::cout << "optimize() ... " << std::endl;; + timer.start(); + MainWindow::instance()->optimizer->process(path); + timer.stop(); + std::cout << "optimize() " << timer.elapsed() * 1000.0f << " ms" << std::endl; + + this->drawConfigurationPath(path); + } + + rl::math::Vector diff(MainWindow::instance()->model->getDof()); + rl::math::Vector inter(MainWindow::instance()->model->getDof()); + + while (true) + { + if (!this->running) break; + + rl::plan::VectorList::iterator i = path.begin(); + rl::plan::VectorList::iterator j = ++path.begin(); + + if (i != path.end() && j != path.end()) + { + this->drawConfiguration(*i); + usleep(static_cast< std::size_t >(0.01f * 1000.0f * 1000.0f)); + } + + rl::math::Real delta = MainWindow::instance()->viewer->delta; + + for (; i != path.end() && j != path.end(); ++i, ++j) + { + diff = *j - *i; + + rl::math::Real steps = std::ceil(MainWindow::instance()->model->distance(*i, *j) / delta); + + for (std::size_t k = 1; k < steps + 1; ++k) + { + if (!this->running) break; + + MainWindow::instance()->model->interpolate(*i, *j, k / steps, inter); + this->drawConfiguration(inter); + usleep(static_cast< std::size_t >(0.01f * 1000.0f * 1000.0f)); + } + } + + if (!this->running) break; + + rl::plan::VectorList::reverse_iterator ri = path.rbegin(); + rl::plan::VectorList::reverse_iterator rj = ++path.rbegin(); + + if (ri != path.rend() && rj != path.rend()) + { + this->drawConfiguration(*ri); + usleep(static_cast< std::size_t >(0.01f * 1000.0f * 1000.0f)); + } + + for (; ri != path.rend() && rj != path.rend(); ++ri, ++rj) + { + diff = *rj - *ri; + + rl::math::Real steps = std::ceil(MainWindow::instance()->model->distance(*ri, *rj) / delta); + + for (std::size_t k = 1; k < steps + 1; ++k) + { + if (!this->running) break; + + MainWindow::instance()->model->interpolate(*ri, *rj, k / steps, inter); + this->drawConfiguration(inter); + usleep(static_cast< std::size_t >(0.01f * 1000.0f * 1000.0f)); + } + } + } + } +} + +void +Thread::stop() +{ + if (this->running) + { + this->running = false; + + while (!this->isFinished()) + { + QThread::usleep(0); + } + } +} diff --git a/demos/rlPlanDemo/Thread.h b/demos/rlPlanDemo/Thread.h new file mode 100644 index 00000000..72d19c62 --- /dev/null +++ b/demos/rlPlanDemo/Thread.h @@ -0,0 +1,129 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _THREAD_H_ +#define _THREAD_H_ + +#include +#include + +class Thread : public QThread, public rl::plan::Viewer +{ + Q_OBJECT + +public: + Thread(QObject* parent = NULL); + + virtual ~Thread(); + + void drawConfiguration(const rl::math::Vector& q); + + void drawConfigurationEdge(const rl::math::Vector& q0, const rl::math::Vector& q1, const bool& free = true); + + void drawConfigurationPath(const rl::plan::VectorList& path); + + void drawConfigurationVertex(const rl::math::Vector& q, const bool& free = true); + + void drawLine(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1); + + void drawPoint(const rl::math::Vector& xyz); + + void drawSphere(const rl::math::Vector& center, const rl::math::Real& radius); + + void drawSweptVolume(const rl::plan::VectorList& path); + + void drawWork(const rl::math::Transform& t); + + void drawWorkEdge(const rl::math::Vector& q0, const rl::math::Vector& q1); + + void drawWorkPath(const rl::plan::VectorList& path); + + void drawWorkVertex(const rl::math::Vector& q); + + void reset(); + + void resetEdges(); + + void resetLines(); + + void resetPoints(); + + void resetSpheres(); + + void resetVertices(); + + void run(); + + void stop(); + + bool quit; + + bool swept; + +protected: + +private: + bool running; + +signals: + void configurationRequested(const rl::math::Vector& q); + + void configurationEdgeRequested(const rl::math::Vector& q0, const rl::math::Vector& q1, const bool& free); + + void configurationVertexRequested(const rl::math::Vector& q, const bool& free); + + void configurationPathRequested(const rl::plan::VectorList& path); + + void edgeResetRequested(); + + void lineRequested(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1); + + void lineResetRequested(); + + void pointRequested(const rl::math::Vector& xyz); + + void pointResetRequested(); + + void resetRequested(); + + void sphereRequested(const rl::math::Vector& center, const rl::math::Real& radius); + + void sphereResetRequested(); + + void sweptVolumeRequested(const rl::plan::VectorList& path); + + void vertexResetRequested(); + + void workRequested(const rl::math::Transform& t); + + void workEdgeRequested(const rl::math::Vector& q0, const rl::math::Vector& q1); + + void workPathRequested(const rl::plan::VectorList& path); + + void workVertexRequested(const rl::math::Vector& q); +}; + +#endif // _THREAD_H_ diff --git a/demos/rlPlanDemo/Viewer.cpp b/demos/rlPlanDemo/Viewer.cpp new file mode 100644 index 00000000..15ba179d --- /dev/null +++ b/demos/rlPlanDemo/Viewer.cpp @@ -0,0 +1,983 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MainWindow.h" +#include "Viewer.h" + +Viewer::Viewer(QWidget* parent, Qt::WindowFlags f) : + QWidget(parent, f), + delta(1.0f), + model(NULL), + sceneGroup(new SoVRMLGroup()), + viewer(new SoQtExaminerViewer(this, NULL, true, SoQtFullViewer::BUILD_POPUP)), + edges(new SoVRMLSwitch()), + edgesColliding(new SoVRMLSwitch()), + edgesCollidingAppearance(new SoVRMLAppearance()), + edgesCollidingCoordinate(new SoVRMLCoordinate()), + edgesCollidingDrawStyle(new SoDrawStyle()), + edgesCollidingIndexedLineSet(new SoVRMLIndexedLineSet()), + edgesCollidingMaterial(new SoVRMLMaterial()), + edgesCollidingShape(new SoVRMLShape()), + edgesFree(new SoVRMLSwitch()), + edgesFreeAppearance(new SoVRMLAppearance()), + edgesFreeCoordinate(new SoVRMLCoordinate()), + edgesFreeDrawStyle(new SoDrawStyle()), + edgesFreeIndexedLineSet(new SoVRMLIndexedLineSet()), + edgesFreeMaterial(new SoVRMLMaterial()), + edgesFreeShape(new SoVRMLShape()), + edges3(new SoVRMLSwitch()), + edges3Appearance(new SoVRMLAppearance()), + edges3Coordinate(new SoVRMLCoordinate()), + edges3DrawStyle(new SoDrawStyle()), + edges3IndexedLineSet(new SoVRMLIndexedLineSet()), + edges3Material(new SoVRMLMaterial()), + edges3Shape(new SoVRMLShape()), + frameIndexedLineSet(new SoVRMLIndexedLineSet()), + lines(new SoVRMLSwitch()), + linesAppearance(new SoVRMLAppearance()), + linesCoordinate(new SoVRMLCoordinate()), + linesDrawStyle(new SoDrawStyle()), + linesIndexedLineSet(new SoVRMLIndexedLineSet()), + linesMaterial(new SoVRMLMaterial()), + linesShape(new SoVRMLShape()), + path(new SoVRMLSwitch()), + pathAppearance(new SoVRMLAppearance()), + pathCoordinate(new SoVRMLCoordinate()), + pathDrawStyle(new SoDrawStyle()), + pathIndexedLineSet(new SoVRMLIndexedLineSet()), + pathMaterial(new SoVRMLMaterial()), + pathShape(new SoVRMLShape()), + path3(new SoVRMLSwitch()), + path3Appearance(new SoVRMLAppearance()), + path3Coordinate(new SoVRMLCoordinate()), + path3DrawStyle(new SoDrawStyle()), + path3IndexedLineSet(new SoVRMLIndexedLineSet()), + path3Material(new SoVRMLMaterial()), + path3Shape(new SoVRMLShape()), + points(new SoVRMLSwitch()), + pointsAppearance(new SoVRMLAppearance()), + pointsCoordinate(new SoVRMLCoordinate()), + pointsDrawStyle(new SoDrawStyle()), + pointsPointSet(new SoVRMLPointSet()), + pointsMaterial(new SoVRMLMaterial()), + pointsShape(new SoVRMLShape()), + root(new SoVRMLSwitch()), + scene(new SoVRMLSwitch()), + sceneDrawStyle(new SoDrawStyle()), + spheres(new SoVRMLSwitch()), + spheresAppearance(new SoVRMLAppearance()), + spheresDrawStyle(new SoDrawStyle()), + spheresGroup(new SoVRMLGroup()), + spheresMaterial(new SoVRMLMaterial()), + swept(new SoVRMLSwitch()), + sweptGroup(new SoVRMLGroup()), + vertices(new SoVRMLSwitch()), + verticesColliding(new SoVRMLSwitch()), + verticesCollidingAppearance(new SoVRMLAppearance()), + verticesCollidingColor(new SoVRMLColor()), + verticesCollidingCoordinate(new SoVRMLCoordinate()), + verticesCollidingDrawStyle(new SoDrawStyle()), + verticesCollidingPointSet(new SoVRMLPointSet()), + verticesCollidingMaterial(new SoVRMLMaterial()), + verticesCollidingShape(new SoVRMLShape()), + verticesFree(new SoVRMLSwitch()), + verticesFreeAppearance(new SoVRMLAppearance()), + verticesFreeColor(new SoVRMLColor()), + verticesFreeCoordinate(new SoVRMLCoordinate()), + verticesFreeDrawStyle(new SoDrawStyle()), + verticesFreePointSet(new SoVRMLPointSet()), + verticesFreeMaterial(new SoVRMLMaterial()), + verticesFreeShape(new SoVRMLShape()), + work(new SoVRMLSwitch()), + workDrawStyle(new SoDrawStyle()), + workTransform(new SoVRMLTransform()) +{ + this->root->ref(); + + this->viewer->setSceneGraph(this->root); + this->viewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); + + // edgesColliding + + this->edgesColliding->setName("edgesColliding"); + this->edgesColliding->whichChoice = SO_SWITCH_ALL; + + this->edgesCollidingDrawStyle->lineWidth = 1.0f; + this->edgesCollidingDrawStyle->pointSize = 0.0f; + this->edgesColliding->addChild(this->edgesCollidingDrawStyle); + + this->edgesCollidingMaterial->diffuseColor.setValue(0.5f, 0.5f, 0.5f); + this->edgesCollidingAppearance->material = this->edgesCollidingMaterial; + this->edgesCollidingShape->appearance = this->edgesCollidingAppearance; + + this->edgesCollidingIndexedLineSet->coord = this->edgesCollidingCoordinate; + this->edgesCollidingShape->geometry = this->edgesCollidingIndexedLineSet; + + this->edgesColliding->addChild(this->edgesCollidingShape); + + this->edges->addChild(this->edgesColliding); + + // edgesFree + + this->edgesFree->setName("edgesFree"); + this->edgesFree->whichChoice = SO_SWITCH_ALL; + + this->edgesFreeDrawStyle->lineWidth = 1.0f; + this->edgesFreeDrawStyle->pointSize = 0.0f; + this->edgesFree->addChild(this->edgesFreeDrawStyle); + + this->edgesFreeMaterial->diffuseColor.setValue(0.5f, 0.5f, 0.5f); + this->edgesFreeAppearance->material = this->edgesFreeMaterial; + this->edgesFreeShape->appearance = this->edgesFreeAppearance; + + this->edgesFreeIndexedLineSet->coord = this->edgesFreeCoordinate; + this->edgesFreeShape->geometry = this->edgesFreeIndexedLineSet; + + this->edgesFree->addChild(this->edgesFreeShape); + + this->edges->addChild(this->edgesFree); + + // edges + + this->edges->setName("edges"); + this->edges->whichChoice = SO_SWITCH_ALL; + + this->root->addChild(this->edges); + + // edges3 + + this->edges3->setName("edges3"); + this->edges3->whichChoice = SO_SWITCH_ALL; + + this->edges3DrawStyle->lineWidth = 1.0f; + this->edges3DrawStyle->pointSize = 0.0f; + this->edges3->addChild(this->edges3DrawStyle); + + this->edges3Material->diffuseColor.setValue(0.5f, 0.5f, 0.5f); + this->edges3Appearance->material = this->edges3Material; + this->edges3Shape->appearance = this->edges3Appearance; + + this->edges3IndexedLineSet->coord = this->edges3Coordinate; + this->edges3Shape->geometry = this->edges3IndexedLineSet; + + this->edges3->addChild(this->edges3Shape); + + this->root->addChild(this->edges3); + + // frame + + this->frameIndexedLineSet->colorPerVertex = false; + + SoVRMLColor* frameColor = new SoVRMLColor(); + this->frameIndexedLineSet->color = frameColor; + frameColor->color.set1Value(0, 1.0f, 0.0f, 0.0f); + frameColor->color.set1Value(1, 0.0f, 1.0f, 0.0f); + frameColor->color.set1Value(2, 0.0f, 0.0f, 1.0f); + + this->frameIndexedLineSet->colorIndex.set1Value(0, 0); + this->frameIndexedLineSet->colorIndex.set1Value(1, 1); + this->frameIndexedLineSet->colorIndex.set1Value(2, 2); + + SoVRMLCoordinate* frameCoordinate = new SoVRMLCoordinate(); + this->frameIndexedLineSet->coord = frameCoordinate; + frameCoordinate->point.set1Value(0, 0.0f, 0.0f, 0.0f); + frameCoordinate->point.set1Value(1, 0.25f, 0.0f, 0.0f); + frameCoordinate->point.set1Value(2, 0.0f, 0.25f, 0.0f); + frameCoordinate->point.set1Value(3, 0.0f, 0.0f, 0.25f); + + this->frameIndexedLineSet->coordIndex.set1Value(0, 0); + this->frameIndexedLineSet->coordIndex.set1Value(1, 1); + this->frameIndexedLineSet->coordIndex.set1Value(2, SO_END_FACE_INDEX); + this->frameIndexedLineSet->coordIndex.set1Value(3, 0); + this->frameIndexedLineSet->coordIndex.set1Value(4, 2); + this->frameIndexedLineSet->coordIndex.set1Value(5, SO_END_FACE_INDEX); + this->frameIndexedLineSet->coordIndex.set1Value(6, 0); + this->frameIndexedLineSet->coordIndex.set1Value(7, 3); + this->frameIndexedLineSet->coordIndex.set1Value(8, SO_END_FACE_INDEX); + + // lines + + this->lines->setName("lines"); + this->lines->whichChoice = SO_SWITCH_ALL; + + this->linesDrawStyle->lineWidth = 1.0f; + this->linesDrawStyle->pointSize = 0.0f; + this->lines->addChild(this->linesDrawStyle); + + this->linesMaterial->diffuseColor.setValue(232.0f / 255.0f, 21.0f / 255.0f, 21.0f / 255.0f); + this->linesAppearance->material = this->linesMaterial; + this->linesShape->appearance = this->linesAppearance; + + this->linesIndexedLineSet->coord = this->linesCoordinate; + this->linesShape->geometry = this->linesIndexedLineSet; + + this->lines->addChild(this->linesShape); + + this->root->addChild(this->lines); + + // path + + this->path->setName("path"); + this->path->whichChoice = SO_SWITCH_ALL; + + this->pathDrawStyle->lineWidth = 3.0f; + this->pathDrawStyle->pointSize = 0.0f; + this->path->addChild(this->pathDrawStyle); + + this->pathMaterial->diffuseColor.setValue(55.0f / 255.0f, 176.0f / 255.0f, 55.0f / 255.0f); + this->pathAppearance->material = this->pathMaterial; + this->pathShape->appearance = this->pathAppearance; + + this->pathIndexedLineSet->coord = this->pathCoordinate; + this->pathShape->geometry = this->pathIndexedLineSet; + + this->path->addChild(this->pathShape); + + this->root->addChild(this->path); + + // path3 + + this->path3->setName("path3"); + this->path3->whichChoice = SO_SWITCH_ALL; + + this->path3DrawStyle->lineWidth = 3.0f; + this->path3DrawStyle->pointSize = 0.0f; + this->path3->addChild(this->path3DrawStyle); + + this->path3Material->diffuseColor.setValue(55.0f / 255.0f, 176.0f / 255.0f, 55.0f / 255.0f); + this->path3Appearance->material = this->path3Material; + this->path3Shape->appearance = this->path3Appearance; + + this->path3IndexedLineSet->coord = this->path3Coordinate; + this->path3Shape->geometry = this->path3IndexedLineSet; + + this->path3->addChild(this->path3Shape); + + this->root->addChild(this->path3); + + // points + + this->points->setName("points"); + this->points->whichChoice = SO_SWITCH_ALL; + + this->pointsDrawStyle->lineWidth = 0.0f; + this->pointsDrawStyle->pointSize = 4.0f; + this->points->addChild(this->pointsDrawStyle); + + this->pointsMaterial->emissiveColor.setValue(232.0f / 255.0f, 21.0f / 255.0f, 21.0f / 255.0f); + this->pointsAppearance->material = this->pointsMaterial; + this->pointsShape->appearance = this->pointsAppearance; + + this->pointsPointSet->coord = this->pointsCoordinate; + this->pointsShape->geometry = this->pointsPointSet; + + this->points->addChild(this->pointsShape); + + this->root->addChild(this->points); + + // spheres + + this->spheres->setName("spheres"); + this->spheres->whichChoice = SO_SWITCH_ALL; + + this->spheres->addChild(this->spheresDrawStyle); + + this->spheresMaterial->diffuseColor.setValue(55.0f / 255.0f, 176.0f / 255.0f, 55.0f / 255.0f); + this->spheresMaterial->transparency.setValue(0.9f); + this->spheresAppearance->material = this->spheresMaterial; + + this->spheresAppearance->ref(); + + this->spheres->addChild(this->spheresGroup); + + this->root->addChild(this->spheres); + + // swept + + this->swept->setName("swept"); + this->swept->whichChoice = SO_SWITCH_ALL; + + this->swept->addChild(this->sweptGroup); + + this->root->addChild(this->swept); + + // verticesColliding + + this->verticesColliding->setName("verticesColliding"); + this->verticesColliding->whichChoice = SO_SWITCH_ALL; + + this->verticesCollidingDrawStyle->lineWidth = 0.0f; + this->verticesCollidingDrawStyle->pointSize = 8.0f; + this->verticesColliding->addChild(this->verticesCollidingDrawStyle); + + this->verticesCollidingMaterial->emissiveColor.setValue(232.0f / 255.0f, 21.0f / 255.0f, 21.0f / 255.0f); + this->verticesCollidingAppearance->material = this->verticesCollidingMaterial; + this->verticesCollidingShape->appearance = this->verticesCollidingAppearance; + + this->verticesCollidingPointSet->coord = this->verticesCollidingCoordinate; + this->verticesCollidingShape->geometry = this->verticesCollidingPointSet; + + this->verticesColliding->addChild(this->verticesCollidingShape); + + this->root->addChild(this->verticesColliding); + + // verticesFree + + this->verticesFree->setName("verticesFree"); + this->verticesFree->whichChoice = SO_SWITCH_ALL; + + this->verticesFreeDrawStyle->lineWidth = 0.0f; + this->verticesFreeDrawStyle->pointSize = 8.0f; + this->verticesFree->addChild(this->verticesFreeDrawStyle); + + this->verticesFreeMaterial->emissiveColor.setValue(55.0f / 255.0f, 176.0f / 255.0f, 55.0f / 255.0f); + this->verticesFreeAppearance->material = this->verticesFreeMaterial; + this->verticesFreeShape->appearance = this->verticesFreeAppearance; + + this->verticesFreePointSet->coord = this->verticesFreeCoordinate; + this->verticesFreeShape->geometry = this->verticesFreePointSet; + + this->verticesFree->addChild(this->verticesFreeShape); + + this->vertices->addChild(this->verticesFree); + + // vertices + + this->vertices->setName("vertices"); + this->vertices->whichChoice = SO_SWITCH_NONE; + + this->root->addChild(this->vertices); + + // work + + this->work->setName("work"); + this->work->whichChoice = SO_SWITCH_NONE; + + this->work->addChild(this->workDrawStyle); + + this->workTransform->addChild(this->frameIndexedLineSet); + + this->work->addChild(this->workTransform); + + this->root->addChild(this->work); + + // scene + + this->scene->setName("scene"); + this->scene->whichChoice = SO_SWITCH_ALL; + + this->scene->addChild(this->sceneDrawStyle); + + this->scene->addChild(this->sceneGroup); + + this->root->addChild(this->scene); + + // root + + this->root->setName("root"); + this->root->whichChoice = SO_SWITCH_ALL; +} + +Viewer::~Viewer() +{ + this->spheresAppearance->unref(); + this->root->unref(); +} + +void +Viewer::drawConfiguration(const rl::math::Vector& q) +{ + this->model->setPosition(q); + this->model->updateFrames(); +} + +void +Viewer::drawConfigurationEdge(const rl::math::Vector& u, const rl::math::Vector& v, const bool& free) +{ + SoVRMLCoordinate* coordinate = NULL; + SoVRMLIndexedLineSet* indexedLineSet = NULL; + + if (free) + { + coordinate = this->edgesFreeCoordinate; + indexedLineSet = this->edgesFreeIndexedLineSet; + } + else + { + coordinate = this->edgesCollidingCoordinate; + indexedLineSet = this->edgesCollidingIndexedLineSet; + } + + this->edges->enableNotify(false); + + rl::math::Vector inter(this->model->getDof()); + + rl::math::Real steps = std::ceil(this->model->distance(u, v) / this->delta); + + if (steps > 0) + { + for (std::size_t l = 0; l < this->model->getOperationalDof(); ++l) + { + for (std::size_t i = 0; i < steps + 1; ++i) + { + this->model->interpolate(u, v, i / steps, inter); + + this->model->setPosition(inter); + this->model->updateFrames(false); + + coordinate->point.set1Value( + coordinate->point.getNum(), + this->model->forwardPosition(l)(0, 3), + this->model->forwardPosition(l)(1, 3), + this->model->forwardPosition(l)(2, 3) + ); + + indexedLineSet->coordIndex.set1Value( + indexedLineSet->coordIndex.getNum(), + coordinate->point.getNum() - 1 + ); + } + + indexedLineSet->coordIndex.set1Value( + indexedLineSet->coordIndex.getNum(), + SO_END_FACE_INDEX + ); + } + } + + this->edges->enableNotify(true); + + this->edges->touch(); +} + +void +Viewer::drawConfigurationPath(const rl::plan::VectorList& path) +{ + this->path->enableNotify(false); + + this->pathCoordinate->point.setNum(0); + this->pathIndexedLineSet->coordIndex.setNum(0); + + rl::math::Vector inter(this->model->getDof()); + + for (std::size_t l = 0; l < this->model->getOperationalDof(); ++l) + { + rl::plan::VectorList::const_iterator i = path.begin(); + rl::plan::VectorList::const_iterator j = ++path.begin(); + + if (i != path.end() && j != path.end()) + { + this->model->setPosition(*i); + this->model->updateFrames(); + + this->pathCoordinate->point.set1Value( + this->pathCoordinate->point.getNum(), + this->model->forwardPosition(l)(0, 3), + this->model->forwardPosition(l)(1, 3), + this->model->forwardPosition(l)(2, 3) + ); + + this->pathIndexedLineSet->coordIndex.set1Value( + this->pathIndexedLineSet->coordIndex.getNum(), + this->pathCoordinate->point.getNum() - 1 + ); + } + + for (; i != path.end() && j != path.end(); ++i, ++j) + { + rl::math::Real steps = std::ceil(this->model->distance(*i, *j) / this->delta); + + for (std::size_t k = 1; k < steps + 1; ++k) + { + this->model->interpolate(*i, *j, k / steps, inter); + + this->model->setPosition(inter); + this->model->updateFrames(false); + + this->pathCoordinate->point.set1Value( + this->pathCoordinate->point.getNum(), + this->model->forwardPosition(l)(0, 3), + this->model->forwardPosition(l)(1, 3), + this->model->forwardPosition(l)(2, 3) + ); + + this->pathIndexedLineSet->coordIndex.set1Value( + this->pathIndexedLineSet->coordIndex.getNum(), + this->pathCoordinate->point.getNum() - 1 + ); + } + } + + this->pathIndexedLineSet->coordIndex.set1Value( + this->pathIndexedLineSet->coordIndex.getNum(), + SO_END_FACE_INDEX + ); + } + + this->path->enableNotify(true); + + this->path->touch(); +} + +void +Viewer::drawConfigurationVertex(const rl::math::Vector& q, const bool& free) +{ + SoVRMLCoordinate* coordinate = NULL; + + if (free) + { + coordinate = this->verticesFreeCoordinate; + } + else + { + coordinate = this->verticesCollidingCoordinate; + } + + this->vertices->enableNotify(false); + + this->model->setPosition(q); + this->model->updateFrames(false); + + for (std::size_t l = 0; l < this->model->getOperationalDof(); ++l) + { + coordinate->point.set1Value( + coordinate->point.getNum(), + this->model->forwardPosition(l)(0, 3), + this->model->forwardPosition(l)(1, 3), + this->model->forwardPosition(l)(2, 3) + ); + } + + this->vertices->enableNotify(true); + + this->vertices->touch(); +} + +void +Viewer::drawLine(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1) +{ + this->linesCoordinate->point.set1Value( + this->linesCoordinate->point.getNum(), + xyz0(0), + xyz0(1), + xyz0(2) + ); + + this->linesIndexedLineSet->coordIndex.set1Value( + this->linesIndexedLineSet->coordIndex.getNum(), + this->linesCoordinate->point.getNum() - 1 + ); + + this->linesCoordinate->point.set1Value( + this->linesCoordinate->point.getNum(), + xyz1(0), + xyz1(1), + xyz1(2) + ); + + this->linesIndexedLineSet->coordIndex.set1Value( + this->linesIndexedLineSet->coordIndex.getNum(), + this->linesCoordinate->point.getNum() - 1 + ); + + this->linesIndexedLineSet->coordIndex.set1Value( + this->linesIndexedLineSet->coordIndex.getNum(), + SO_END_FACE_INDEX + ); +} + +void +Viewer::drawPoint(const rl::math::Vector& xyz) +{ + this->pointsCoordinate->point.set1Value( + this->pointsCoordinate->point.getNum(), + xyz(0), + xyz(1), + xyz(2) + ); +} + +void +Viewer::drawSphere(const rl::math::Vector& center, const rl::math::Real& radius) +{ + SoVRMLTransform* transform = new SoVRMLTransform(); + transform->translation.setValue(center(0), center(1), center(2)); + + SoVRMLShape* shape = new SoVRMLShape(); + + shape->appearance = this->spheresAppearance; + + SoVRMLSphere* sphere = new SoVRMLSphere(); + sphere->radius = radius; + + shape->geometry = sphere; + + transform->addChild(shape); + + this->spheresGroup->addChild(transform); +} + +void +Viewer::drawSweptVolume(const rl::plan::VectorList& path) +{ + this->sweptGroup->enableNotify(false); + + this->sweptGroup->removeAllChildren(); + + rl::math::Vector inter(this->model->getDof()); + + rl::plan::VectorList::const_iterator i = path.begin(); + rl::plan::VectorList::const_iterator j = ++path.begin(); + + if (i != path.end() && j != path.end()) + { + this->model->setPosition(*i); + this->model->updateFrames(); + + SoVRMLGroup* model = new SoVRMLGroup(); + + for (std::size_t i = 0; i < this->model->model->getNumBodies(); ++i) + { + SoVRMLTransform* frame = new SoVRMLTransform(); + frame->copyFieldValues(static_cast< rl::sg::so::Body* >(this->model->model->getBody(i))->root); + + for (std::size_t j = 0; j < this->model->model->getBody(i)->getNumShapes(); ++j) + { + SoVRMLTransform* transform = new SoVRMLTransform(); + transform->copyFieldValues(static_cast< rl::sg::so::Shape* >(this->model->model->getBody(i)->getShape(j))->root); + transform->addChild(static_cast< rl::sg::so::Shape* >(this->model->model->getBody(i)->getShape(j))->shape); + frame->addChild(transform); + } + + model->addChild(frame); + } + + this->sweptGroup->addChild(model); + } + + for (; i != path.end() && j != path.end(); ++i, ++j) + { + rl::math::Real steps = std::ceil(this->model->distance(*i, *j) / this->delta); + + for (std::size_t k = 1; k < steps + 1; ++k) + { + this->model->interpolate(*i, *j, k / steps, inter); + + this->model->setPosition(inter); + this->model->updateFrames(); + + SoVRMLGroup* model = new SoVRMLGroup(); + + for (std::size_t i = 0; i < this->model->model->getNumBodies(); ++i) + { + SoVRMLTransform* frame = new SoVRMLTransform(); + frame->copyFieldValues(static_cast< rl::sg::so::Body* >(this->model->model->getBody(i))->root); + + for (std::size_t j = 0; j < this->model->model->getBody(i)->getNumShapes(); ++j) + { + SoVRMLTransform* transform = new SoVRMLTransform(); + transform->copyFieldValues(static_cast< rl::sg::so::Shape* >(this->model->model->getBody(i)->getShape(j))->root); + transform->addChild(static_cast< rl::sg::so::Shape* >(this->model->model->getBody(i)->getShape(j))->shape); + frame->addChild(transform); + } + + model->addChild(frame); + } + + this->sweptGroup->addChild(model); + } + } + + this->sweptGroup->enableNotify(true); + + this->sweptGroup->touch(); +} + +void +Viewer::drawWork(const rl::math::Transform& t) +{ + SbMatrix matrix; + + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 4; ++j) + { + matrix[i][j] = static_cast< float >(t(j, i)); + } + } + + this->workTransform->setMatrix(matrix); +} + +void +Viewer::drawWorkEdge(const rl::math::Vector& u, const rl::math::Vector& v) +{ + this->edges3Coordinate->point.set1Value( + this->edges3Coordinate->point.getNum(), + u(0), + u(1), + u(2) + ); + + this->edges3IndexedLineSet->coordIndex.set1Value( + this->edges3IndexedLineSet->coordIndex.getNum(), + this->edges3Coordinate->point.getNum() - 1 + ); + + this->edges3Coordinate->point.set1Value( + this->edges3Coordinate->point.getNum(), + v(0), + v(1), + v(2) + ); + + this->edges3IndexedLineSet->coordIndex.set1Value( + this->edges3IndexedLineSet->coordIndex.getNum(), + this->edges3Coordinate->point.getNum() - 1 + ); + + this->edges3IndexedLineSet->coordIndex.set1Value( + this->edges3IndexedLineSet->coordIndex.getNum(), + SO_END_FACE_INDEX + ); +} + +void +Viewer::drawWorkPath(const rl::plan::VectorList& path) +{ + this->path3->enableNotify(false); + + this->path3Coordinate->point.setNum(0); + this->path3IndexedLineSet->coordIndex.setNum(0); + + for (rl::plan::VectorList::const_iterator i = path.begin(); i != path.end(); ++i) + { + this->path3Coordinate->point.set1Value( + this->path3Coordinate->point.getNum(), + (*i)(0), + (*i)(1), + (*i)(2) + ); + + this->path3IndexedLineSet->coordIndex.set1Value( + this->path3IndexedLineSet->coordIndex.getNum(), + this->path3Coordinate->point.getNum() - 1 + ); + } + + this->path3IndexedLineSet->coordIndex.set1Value( + this->path3IndexedLineSet->coordIndex.getNum(), + SO_END_FACE_INDEX + ); + + this->path3->enableNotify(true); + + this->path3->touch(); +} + +void +Viewer::drawWorkVertex(const rl::math::Vector& q) +{ +} + +void +Viewer::reset() +{ + this->resetEdges(); + this->resetLines(); + this->resetPoints(); + this->resetSpheres(); + this->resetVertices(); + this->pathCoordinate->point.setNum(0); + this->pathIndexedLineSet->coordIndex.setNum(0); + this->path3Coordinate->point.setNum(0); + this->path3IndexedLineSet->coordIndex.setNum(0); + this->sweptGroup->removeAllChildren(); + this->workTransform->setMatrix(SbMatrix::identity()); +} + +void +Viewer::resetEdges() +{ + this->edgesCollidingCoordinate->point.setNum(0); + this->edgesCollidingIndexedLineSet->coordIndex.setNum(0); + this->edgesFreeCoordinate->point.setNum(0); + this->edgesFreeIndexedLineSet->coordIndex.setNum(0); + this->edges3Coordinate->point.setNum(0); + this->edges3IndexedLineSet->coordIndex.setNum(0); +} + +void +Viewer::resetLines() +{ + this->linesCoordinate->point.setNum(0); + this->linesIndexedLineSet->coordIndex.setNum(0); +} + +void +Viewer::resetPoints() +{ + this->pointsCoordinate->point.setNum(0); +} + +void +Viewer::resetSpheres() +{ + this->spheresGroup->removeAllChildren(); +} + +void +Viewer::resetVertices() +{ + this->verticesCollidingCoordinate->point.setNum(0); + this->verticesFreeCoordinate->point.setNum(0); +} + +void +Viewer::saveImage(const QString& filename) +{ + glReadBuffer(GL_FRONT); + QImage image = static_cast< QGLWidget* >(this->viewer->getGLWidget())->grabFrameBuffer(false); + + QString format = filename.right(filename.length() - filename.lastIndexOf('.') - 1).toUpper(); + + if (("JFIF" == format) || ("JPE" == format) || ("JPG" == format)) + { + format = "JPEG"; + } + + if (!image.save(filename, format.toStdString().c_str())) + { + QMessageBox::critical(this, this->windowTitle(), "Error writing " + filename + "."); + } +} + +void +Viewer::saveScene(const QString& filename) +{ + SoOutput output; + + if (!output.openFile(filename.toStdString().c_str())) + { + return; + } + + output.setHeaderString("#VRML V2.0 utf8"); + + SoWriteAction writeAction(&output); + writeAction.apply(this->root); + + output.closeFile(); +} + +void +Viewer::toggleConfigurationEdges(const bool& doOn) +{ + if (doOn) + { + this->edges->whichChoice = SO_SWITCH_ALL; + } + else + { + this->edges->whichChoice = SO_SWITCH_NONE; + } +} + +void +Viewer::toggleConfigurationVertices(const bool& doOn) +{ + if (doOn) + { + this->vertices->whichChoice = SO_SWITCH_ALL; + } + else + { + this->vertices->whichChoice = SO_SWITCH_NONE; + } +} + +void +Viewer::toggleLines(const bool& doOn) +{ + if (doOn) + { + this->lines->whichChoice = SO_SWITCH_ALL; + } + else + { + this->lines->whichChoice = SO_SWITCH_NONE; + } +} + +void +Viewer::togglePoints(const bool& doOn) +{ + if (doOn) + { + this->points->whichChoice = SO_SWITCH_ALL; + } + else + { + this->points->whichChoice = SO_SWITCH_NONE; + } +} + +void +Viewer::toggleSpheres(const bool& doOn) +{ + if (doOn) + { + this->spheres->whichChoice = SO_SWITCH_ALL; + } + else + { + this->spheres->whichChoice = SO_SWITCH_NONE; + } +} + +void +Viewer::toggleWorkFrames(const bool& doOn) +{ + if (doOn) + { + this->work->whichChoice = SO_SWITCH_ALL; + } + else + { + this->work->whichChoice = SO_SWITCH_NONE; + } +} diff --git a/demos/rlPlanDemo/Viewer.h b/demos/rlPlanDemo/Viewer.h new file mode 100644 index 00000000..8bc6608b --- /dev/null +++ b/demos/rlPlanDemo/Viewer.h @@ -0,0 +1,283 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _VIEWER_H_ +#define _VIEWER_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class Viewer : public QWidget, public rl::plan::Viewer +{ + Q_OBJECT + +public: + Viewer(QWidget* parent = NULL, Qt::WindowFlags f = 0); + + virtual ~Viewer(); + + rl::math::Real delta; + + rl::plan::Model* model; + + SoVRMLGroup* sceneGroup; + + SoQtExaminerViewer* viewer; + +public slots: + void drawConfiguration(const rl::math::Vector& q); + + void drawConfigurationEdge(const rl::math::Vector& u, const rl::math::Vector& v, const bool& free = true); + + void drawConfigurationPath(const rl::plan::VectorList& path); + + void drawConfigurationVertex(const rl::math::Vector& q, const bool& free = true); + + void drawLine(const rl::math::Vector& xyz0, const rl::math::Vector& xyz1); + + void drawPoint(const rl::math::Vector& xyz); + + void drawSphere(const rl::math::Vector& center, const rl::math::Real& radius); + + void drawSweptVolume(const rl::plan::VectorList& path); + + void drawWork(const rl::math::Transform& t); + + void drawWorkEdge(const rl::math::Vector& u, const rl::math::Vector& v); + + void drawWorkPath(const rl::plan::VectorList& path); + + void drawWorkVertex(const rl::math::Vector& q); + + void reset(); + + void resetEdges(); + + void resetLines(); + + void resetPoints(); + + void resetSpheres(); + + void resetVertices(); + + void saveImage(const QString& filename); + + void saveScene(const QString& filename); + + void toggleConfigurationEdges(const bool& doOn); + + void toggleConfigurationVertices(const bool& doOn); + + void toggleLines(const bool& doOn); + + void togglePoints(const bool& doOn); + + void toggleSpheres(const bool& doOn); + + void toggleWorkFrames(const bool& doOn); + +protected: + +private: + SoVRMLSwitch* edges; + + SoVRMLSwitch* edgesColliding; + + SoVRMLAppearance* edgesCollidingAppearance; + + SoVRMLCoordinate* edgesCollidingCoordinate; + + SoDrawStyle* edgesCollidingDrawStyle; + + SoVRMLIndexedLineSet* edgesCollidingIndexedLineSet; + + SoVRMLMaterial* edgesCollidingMaterial; + + SoVRMLShape* edgesCollidingShape; + + SoVRMLSwitch* edgesFree; + + SoVRMLAppearance* edgesFreeAppearance; + + SoVRMLCoordinate* edgesFreeCoordinate; + + SoDrawStyle* edgesFreeDrawStyle; + + SoVRMLIndexedLineSet* edgesFreeIndexedLineSet; + + SoVRMLMaterial* edgesFreeMaterial; + + SoVRMLShape* edgesFreeShape; + + SoVRMLSwitch* edges3; + + SoVRMLAppearance* edges3Appearance; + + SoVRMLCoordinate* edges3Coordinate; + + SoDrawStyle* edges3DrawStyle; + + SoVRMLIndexedLineSet* edges3IndexedLineSet; + + SoVRMLMaterial* edges3Material; + + SoVRMLShape* edges3Shape; + + SoVRMLIndexedLineSet* frameIndexedLineSet; + + SoVRMLSwitch* lines; + + SoVRMLAppearance* linesAppearance; + + SoVRMLCoordinate* linesCoordinate; + + SoDrawStyle* linesDrawStyle; + + SoVRMLIndexedLineSet* linesIndexedLineSet; + + SoVRMLMaterial* linesMaterial; + + SoVRMLShape* linesShape; + + SoVRMLSwitch* path; + + SoVRMLAppearance* pathAppearance; + + SoVRMLCoordinate* pathCoordinate; + + SoDrawStyle* pathDrawStyle; + + SoVRMLIndexedLineSet* pathIndexedLineSet; + + SoVRMLMaterial* pathMaterial; + + SoVRMLShape* pathShape; + + SoVRMLSwitch* path3; + + SoVRMLAppearance* path3Appearance; + + SoVRMLCoordinate* path3Coordinate; + + SoDrawStyle* path3DrawStyle; + + SoVRMLIndexedLineSet* path3IndexedLineSet; + + SoVRMLMaterial* path3Material; + + SoVRMLShape* path3Shape; + + SoVRMLSwitch* points; + + SoVRMLAppearance* pointsAppearance; + + SoVRMLCoordinate* pointsCoordinate; + + SoDrawStyle* pointsDrawStyle; + + SoVRMLPointSet* pointsPointSet; + + SoVRMLMaterial* pointsMaterial; + + SoVRMLShape* pointsShape; + + SoVRMLSwitch* root; + + SoVRMLSwitch* scene; + + SoDrawStyle* sceneDrawStyle; + + SoVRMLSwitch* spheres; + + SoVRMLAppearance* spheresAppearance; + + SoDrawStyle* spheresDrawStyle; + + SoVRMLGroup* spheresGroup; + + SoVRMLMaterial* spheresMaterial; + + SoVRMLSwitch* swept; + + SoVRMLGroup* sweptGroup; + + SoVRMLSwitch* vertices; + + SoVRMLSwitch* verticesColliding; + + SoVRMLAppearance* verticesCollidingAppearance; + + SoVRMLColor* verticesCollidingColor; + + SoVRMLCoordinate* verticesCollidingCoordinate; + + SoDrawStyle* verticesCollidingDrawStyle; + + SoVRMLPointSet* verticesCollidingPointSet; + + SoVRMLMaterial* verticesCollidingMaterial; + + SoVRMLShape* verticesCollidingShape; + + SoVRMLSwitch* verticesFree; + + SoVRMLAppearance* verticesFreeAppearance; + + SoVRMLColor* verticesFreeColor; + + SoVRMLCoordinate* verticesFreeCoordinate; + + SoDrawStyle* verticesFreeDrawStyle; + + SoVRMLPointSet* verticesFreePointSet; + + SoVRMLMaterial* verticesFreeMaterial; + + SoVRMLShape* verticesFreeShape; + + SoVRMLSwitch* work; + + SoDrawStyle* workDrawStyle; + + SoVRMLTransform* workTransform; +}; + +#endif // _VIEWER_H_ diff --git a/demos/rlPlanDemo/rlPlanDemo.cpp b/demos/rlPlanDemo/rlPlanDemo.cpp new file mode 100644 index 00000000..670a7a30 --- /dev/null +++ b/demos/rlPlanDemo/rlPlanDemo.cpp @@ -0,0 +1,61 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include + +#include "MainWindow.h" + +MainWindow* MainWindow::singleton = NULL; + +int +main(int argc, char** argv) +{ + try + { + QApplication application(argc, argv); + + qRegisterMetaType< rl::math::Real >("rl::math::Real"); + qRegisterMetaType< rl::math::Transform >("rl::math::Transform"); + qRegisterMetaType< rl::math::Vector >("rl::math::Vector"); + qRegisterMetaType< rl::plan::VectorList >("rl::plan::VectorList"); + + QObject::connect(&application, SIGNAL(lastWindowClosed()), &application, SLOT(quit())); + + MainWindow::instance()->show(); + + return application.exec(); + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return -1; + } +} diff --git a/demos/rlPlanDemo/rlPlanDemo.desktop b/demos/rlPlanDemo/rlPlanDemo.desktop new file mode 100644 index 00000000..88fa4fdf --- /dev/null +++ b/demos/rlPlanDemo/rlPlanDemo.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Categories=Science;Robotics; +Comment=Path planning demo with Unimation Puma 560 and RRT algorithm +Exec=sh -c "rlPlanDemo $(dirname %k)/../rl/examples/rlplan/unimation-puma560_boxes_rrtConCon.xml" +Icon=robotics-library +Name=Robotics Library (rlPlanDemo) +Type=Application +X-Unity-IconBackgroundColor=#ffffff diff --git a/demos/rlPrmDemo/CMakeLists.txt b/demos/rlPrmDemo/CMakeLists.txt new file mode 100644 index 00000000..e32ba9af --- /dev/null +++ b/demos/rlPrmDemo/CMakeLists.txt @@ -0,0 +1,25 @@ +project(rlPrmDemo) + +find_package(Boost REQUIRED) + +find_package(Solid) + +if(SOLID_FOUND) + add_executable( + rlPrmDemo + rlPrmDemo.cpp + ) + + target_include_directories( + rlPrmDemo + PUBLIC + ${Boost_INCLUDE_DIR} + ) + + target_link_libraries( + rlPrmDemo + rlplan + rlkin + rlsg + ) +endif(SOLID_FOUND) diff --git a/demos/rlPrmDemo/rlPrmDemo.cpp b/demos/rlPrmDemo/rlPrmDemo.cpp new file mode 100644 index 00000000..f16cdddd --- /dev/null +++ b/demos/rlPrmDemo/rlPrmDemo.cpp @@ -0,0 +1,115 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 3) + { + std::cout << "Usage: rlPrmDemo SCENEFILE KINEMATICSFILE START1 ... STARTn GOAL1 ... GOALn" << std::endl; + return 1; + } + + try + { + rl::sg::solid::Scene scene; + scene.load(argv[1]); + + ::boost::shared_ptr< ::rl::kin::Kinematics > kinematics(::rl::kin::Kinematics::create(argv[2])); + + rl::plan::SimpleModel model; + model.kin = kinematics.get(); + model.model = scene.getModel(0); + model.scene = &scene; + + rl::plan::Prm planner; + rl::plan::UniformSampler sampler; + rl::plan::RecursiveVerifier verifier; + + planner.model = &model; + planner.sampler = &sampler; + planner.verifier = &verifier; + + sampler.model = &model; + + verifier.delta = 1.0f * rl::math::DEG2RAD; + verifier.model = &model; + + rl::math::Vector start(kinematics->getDof()); + + for (std::size_t i = 0; i < kinematics->getDof(); ++i) + { + start(i) = boost::lexical_cast< rl::math::Real >(argv[i + 3]); + } + + planner.start = &start; + + rl::math::Vector goal(kinematics->getDof()); + + for (std::size_t i = 0; i < kinematics->getDof(); ++i) + { + goal(i) = boost::lexical_cast< rl::math::Real >(argv[kinematics->getDof() + i + 3]); + } + + planner.goal = &goal; + + rl::util::Timer timer; + + std::cout << "construct() ... " << std::endl;; + timer.start(); + planner.construct(15); + timer.stop(); + std::cout << "construct() " << timer.elapsed() * 1000.0f << " ms" << std::endl; + + std::cout << "solve() ... " << std::endl;; + timer.start(); + bool solved = planner.solve(); + timer.stop(); + std::cout << "solve() " << (solved ? "true" : "false") << " " << timer.elapsed() * 1000.0f << " ms" << std::endl; + + return 0; + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return -1; + } +} diff --git a/demos/rlPumaDemo/CMakeLists.txt b/demos/rlPumaDemo/CMakeLists.txt new file mode 100644 index 00000000..53095cfb --- /dev/null +++ b/demos/rlPumaDemo/CMakeLists.txt @@ -0,0 +1,19 @@ +project(rlPumaDemo) + +find_package(Boost REQUIRED) + +add_executable( + rlPumaDemo + rlPumaDemo.cpp +) + +target_include_directories( + rlPumaDemo + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlPumaDemo + rlkin +) diff --git a/demos/rlPumaDemo/rlPumaDemo.cpp b/demos/rlPumaDemo/rlPumaDemo.cpp new file mode 100644 index 00000000..90fe3e21 --- /dev/null +++ b/demos/rlPumaDemo/rlPumaDemo.cpp @@ -0,0 +1,121 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 8) + { + std::cout << "Usage: rlPumaDemo PUMAFILE Q1 Q2 Q3 Q4 Q5 Q6" << std::endl; + return 1; + } + + try + { + boost::shared_ptr< rl::kin::Kinematics > kinematics(rl::kin::Kinematics::create(argv[1])); + + if (rl::kin::Puma* puma = dynamic_cast< rl::kin::Puma* >(kinematics.get())) + { + rl::math::Vector q(puma->getDof()); + + for (std::ptrdiff_t i = 0; i < q.size(); ++i) + { + q(i) = boost::lexical_cast< rl::math::Real >(argv[i + 2]) * rl::math::DEG2RAD; + } + + rl::kin::Puma::Arm arm; + rl::kin::Puma::Elbow elbow; + rl::kin::Puma::Wrist wrist; + + puma->parameters(q, arm, elbow, wrist); + + puma->setArm(arm); + puma->setElbow(elbow); + puma->setWrist(wrist); + + std::cout + << "Arm: " << (arm == rl::kin::Puma::ARM_LEFT ? "LEFT" : "RIGHT") + << ", Elbow: " << (elbow == rl::kin::Puma::ELBOW_ABOVE ? "ABOVE" : "BELOW") + << ", Wrist: " << (wrist == rl::kin::Puma::WRIST_FLIP ? "FLIP" : "NONFLIP") + << std::endl; + + std::cout << "q=" << std::endl << q.transpose() * rl::math::RAD2DEG << std::endl; + + puma->setPosition(q); + puma->updateFrames(); + + const rl::math::Transform::ConstTranslationPart& position = puma->forwardPosition().translation(); + + rl::math::Vector3 orientation = puma->forwardPosition().rotation().eulerAngles(2, 1, 0).reverse(); + + std::cout << "x=" << std::endl << "x: " << position.x() << " m, y: " << position.y() << " m, z: " << position.z() << " m, a: " << orientation.x() * rl::math::RAD2DEG << " deg, b: " << orientation.y() * rl::math::RAD2DEG << " deg, c: " << orientation.z() * rl::math::RAD2DEG << " deg" << std::endl; + + rl::math::Vector q2(puma->getDof()); + q2.setConstant(1.0 * rl::math::DEG2RAD); + + rl::math::Transform x = puma->forwardPosition(); + + if (!puma->inversePosition(x, q2)) + { + std::cout << "out of reach" << std::endl; + return 1; + } + + std::cout << "q=" << std::endl << q2.transpose() * rl::math::RAD2DEG << std::endl; + + puma->setPosition(q2); + puma->updateFrames(); + + orientation = puma->forwardPosition().rotation().eulerAngles(2, 1, 0).reverse(); + + std::cout << "x=" << std::endl << "x: " << position.x() << " m, y: " << position.y() << " m, z: " << position.z() << " m, a: " << orientation.x() * rl::math::RAD2DEG << " deg, b: " << orientation.y() * rl::math::RAD2DEG << " deg, c: " << orientation.z() * rl::math::RAD2DEG << " deg" << std::endl; + } + else + { + return 1; + } + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlQuaternionDemo/CMakeLists.txt b/demos/rlQuaternionDemo/CMakeLists.txt new file mode 100644 index 00000000..d098e428 --- /dev/null +++ b/demos/rlQuaternionDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlQuaternionDemo) + +add_executable( + rlQuaternionDemo + rlQuaternionDemo.cpp +) + +target_link_libraries( + rlQuaternionDemo + rlmath +) diff --git a/demos/rlQuaternionDemo/rlQuaternionDemo.cpp b/demos/rlQuaternionDemo/rlQuaternionDemo.cpp new file mode 100644 index 00000000..e95a01f8 --- /dev/null +++ b/demos/rlQuaternionDemo/rlQuaternionDemo.cpp @@ -0,0 +1,86 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + rl::math::Matrix33 r1( + ::rl::math::AngleAxis(120.0f * rl::math::DEG2RAD, ::rl::math::Vector3::UnitZ()) * + ::rl::math::AngleAxis(0.0f * rl::math::DEG2RAD, ::rl::math::Vector3::UnitY()) * + ::rl::math::AngleAxis(0.0f * rl::math::DEG2RAD, ::rl::math::Vector3::UnitX()) + ); + std::cout << "r1 = " << std::endl << r1 << std::endl; + + rl::math::Quaternion q1(r1); + std::cout << "q1 = " << q1.coeffs().transpose() << std::endl; + + r1 = q1.toRotationMatrix(); + std::cout << "r1 = " << std::endl << r1 << std::endl; + + rl::math::Matrix33 r2( + ::rl::math::AngleAxis(-120.0f * rl::math::DEG2RAD, ::rl::math::Vector3::UnitZ()) * + ::rl::math::AngleAxis(0.0f * rl::math::DEG2RAD, ::rl::math::Vector3::UnitY()) * + ::rl::math::AngleAxis(0.0f * rl::math::DEG2RAD, ::rl::math::Vector3::UnitX()) + ); + std::cout << "r2 = " << std::endl << r2 << std::endl; + + rl::math::Quaternion q2(r2); + std::cout << "q2 = " << q2.coeffs().transpose() << std::endl; + + rl::math::Quaternion q = q1.slerp(0.5f, q2); + std::cout << "q = " << q.coeffs().transpose() << std::endl; + + rl::math::Matrix33 r(q); + std::cout << "r = " << std::endl << r << std::endl; + + std::cout << q1.angularDistance(q2) << std::endl; + std::cout << q1.angularDistance(q) << std::endl; + std::cout << q.angularDistance(q2) << std::endl; + +// rl::math::Transform t1; +// boost::numeric::bindings::ippm::loadIdentity(t1); +// rl::math::rotation::fromXyz(0.0f * rl::math::DEG2RAD, 0.0f * rl::math::DEG2RAD, 120.0f * rl::math::DEG2RAD, t1); +// std::cout << t1 << std::endl; +// +// rl::math::Transform t2; +// boost::numeric::bindings::ippm::loadIdentity(t2); +// rl::math::rotation::fromXyz(0.0f * rl::math::DEG2RAD, 0.0f * rl::math::DEG2RAD, -120.0f * rl::math::DEG2RAD, t2); +// std::cout << t2 << std::endl; +// +// rl::math::Transform t3; +// rl::math::transform::slerp(t1, t2, 0.5f, t3); +// std::cout << t3 << std::endl; + + return 0; +} diff --git a/demos/rlRangeSensorDemo/CMakeLists.txt b/demos/rlRangeSensorDemo/CMakeLists.txt new file mode 100644 index 00000000..051df87d --- /dev/null +++ b/demos/rlRangeSensorDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlRangeSensorDemo) + +add_executable( + rlRangeSensorDemo + rlRangeSensorDemo.cpp +) + +target_link_libraries( + rlRangeSensorDemo + rlhal +) diff --git a/demos/rlRangeSensorDemo/rlRangeSensorDemo.cpp b/demos/rlRangeSensorDemo/rlRangeSensorDemo.cpp new file mode 100644 index 00000000..9dd5cb79 --- /dev/null +++ b/demos/rlRangeSensorDemo/rlRangeSensorDemo.cpp @@ -0,0 +1,108 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +//#define LEUZE +//#define SCHMERSAL +#define SCHUNK +//#define SICK + +#ifdef LEUZE +#include +#endif +#ifdef SCHMERSAL +#include +#endif +#ifdef SCHUNK +#include +#endif +#ifdef SICK +#include +#endif + +bool running = true; + +void handler(int signum) +{ + running = false; +} + +int +main(int argc, char** argv) +{ + try + { +#ifdef LEUZE + rl::hal::LeuzeRs4 sensor( + "/dev/ttyUSB0", + rl::hal::LeuzeRs4::BAUDRATE_57600BPS + ); +#endif +#ifdef SCHMERSAL + rl::hal::SchmersalLss300 sensor( + "/dev/ttyUSB0", + rl::hal::SchmersalLss300::BAUDRATE_9600BPS, + rl::hal::SchmersalLss300::MONITORING_CONTINUOUS + ); +#endif +#ifdef SCHUNK + rl::hal::SchunkFpsF5 sensor("/dev/ttyS0"); +#endif +#ifdef SICK + rl::hal::SickLms200 sensor( + "/dev/ttyUSB0", + rl::hal::SickLms200::BAUDRATE_9600BPS, + rl::hal::SickLms200::MONITORING_CONTINUOUS + ); +#endif + + sensor.open(); + sensor.start(); + + rl::math::Vector data(sensor.getDistancesCount()); + + while (running) + { + sensor.step(); + sensor.getDistances(data); + + std::cout << data << std::endl; + } + + sensor.stop(); + sensor.close(); + + return 0; + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return -1; + } +} diff --git a/demos/rlRodriguesDemo/CMakeLists.txt b/demos/rlRodriguesDemo/CMakeLists.txt new file mode 100644 index 00000000..8dc35471 --- /dev/null +++ b/demos/rlRodriguesDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlRodriguesDemo) + +add_executable( + rlRodriguesDemo + rlRodriguesDemo.cpp +) + +target_link_libraries( + rlRodriguesDemo + rlmath +) diff --git a/demos/rlRodriguesDemo/rlRodriguesDemo.cpp b/demos/rlRodriguesDemo/rlRodriguesDemo.cpp new file mode 100644 index 00000000..489606d9 --- /dev/null +++ b/demos/rlRodriguesDemo/rlRodriguesDemo.cpp @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +int +main(int argc, char** argv) +{ + rl::math::Rotation r; + rl::math::rotation::fromXyz(0.0f * rl::math::DEG2RAD, 0.0f * rl::math::DEG2RAD, 90.0f * rl::math::DEG2RAD, r); + std::cout << r << std::endl; + + rl::math::Vector3 rodrigues; + rl::math::rotation::toRodrigues(r, rodrigues); + std::cout << rodrigues(0) * rl::math::RAD2DEG << " " << rodrigues(1) * rl::math::RAD2DEG << " " << rodrigues(2) * rl::math::RAD2DEG << std::endl; + + rl::math::rotation::fromRodrigues(rodrigues(0), rodrigues(1), rodrigues(2), r); + std::cout << r << std::endl; + + rl::math::Rotation t0; + boost::numeric::bindings::ippm::loadIdentity(t0); + rl::math::Rotation t1; + boost::numeric::bindings::ippm::loadIdentity(t1); + rl::math::rotation::fromXyz(10.0f * rl::math::DEG2RAD, 20.0f * rl::math::DEG2RAD, 30.0f * rl::math::DEG2RAD, t1); + + rl::math::Vector3 e; + + e(0) = t0(1, 0) * t1(2, 0) / 0.2e1 - t0(2, 0) * t1(1, 0) / 0.2e1 + t0(1, 1) * t1(2, 1) / 0.2e1 - t0(2, 1) * t1(1, 1) / 0.2e1 + t0(1, 2) * t1(2, 2) / 0.2e1 - t0(2, 2) * t1(1, 2) / 0.2e1; + e(1) = t0(2, 0) * t1(0, 0) / 0.2e1 - t0(0, 0) * t1(2, 0) / 0.2e1 + t0(2, 1) * t1(0, 1) / 0.2e1 - t0(0, 1) * t1(2, 1) / 0.2e1 + t0(2, 2) * t1(0, 2) / 0.2e1 - t0(0, 2) * t1(2, 2) / 0.2e1; + e(2) = t0(0, 0) * t1(1, 0) / 0.2e1 - t0(1, 0) * t1(0, 0) / 0.2e1 + t0(0, 1) * t1(1, 1) / 0.2e1 - t0(1, 1) * t1(0, 1) / 0.2e1 + t0(0, 2) * t1(1, 2) / 0.2e1 - t0(1, 2) * t1(0, 2) / 0.2e1; + + std::cout << e(0) * rl::math::RAD2DEG << " " << e(1) * rl::math::RAD2DEG << " " << e(2) * rl::math::RAD2DEG << std::endl; + + return 0; +} diff --git a/demos/rlSixAxisForceTorqueSensorDemo/CMakeLists.txt b/demos/rlSixAxisForceTorqueSensorDemo/CMakeLists.txt new file mode 100644 index 00000000..c7123607 --- /dev/null +++ b/demos/rlSixAxisForceTorqueSensorDemo/CMakeLists.txt @@ -0,0 +1,14 @@ +project(rlSixAxisForceTorqueSensorDemo) + +if(COMEDI_FOUND) + add_executable( + rlSixAxisForceTorqueSensorDemo + rlSixAxisForceTorqueSensorDemo.cpp + ) + + target_link_libraries( + rlSixAxisForceTorqueSensorDemo + rlhal + rlutil + ) +endif(COMEDI_FOUND) diff --git a/demos/rlSixAxisForceTorqueSensorDemo/rlSixAxisForceTorqueSensorDemo.cpp b/demos/rlSixAxisForceTorqueSensorDemo/rlSixAxisForceTorqueSensorDemo.cpp new file mode 100644 index 00000000..36cbb06a --- /dev/null +++ b/demos/rlSixAxisForceTorqueSensorDemo/rlSixAxisForceTorqueSensorDemo.cpp @@ -0,0 +1,106 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +//#define ATI +#define JR3 + +#ifdef ATI +#include +#endif +#ifdef JR3 +#include +#endif + +bool running = true; + +void handler(int signum) +{ + running = false; +} + +int +main(int argc, char** argv) +{ + std::ofstream ft; + ft.open("ft.txt", std::fstream::trunc); + + try + { +#ifdef ATI + rl::hal::Ati sensor("/usr/local/share/atidaq/left.cal", 0, "/dev/comedi0"); +#endif +#ifdef JR3 + rl::hal::Jr3 sensor("/dev/comedi0"); +#endif + + sensor.open(); + sensor.start(); + + sensor.step(); + sensor.bias(); + + rl::math::Vector data(6); + ::std::size_t t = 0; + + while (running) + { + sensor.step(); + sensor.getForcesTorques(data); + + std::cout << data << std::endl; + ft << t++; + + for (::std::size_t i = 0; i < 6; ++i) + { + ft << " " << data(i); + } + + ft << std::endl; + ft.flush(); + + rl::util::Timer::sleep(0.001f); + } + + sensor.stop(); + sensor.close(); + + ft.close(); + } + catch (rl::hal::Exception& e) + { + ft.close(); + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/demos/rlSpatialDemo/CMakeLists.txt b/demos/rlSpatialDemo/CMakeLists.txt new file mode 100644 index 00000000..abd681f4 --- /dev/null +++ b/demos/rlSpatialDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlSpatialDemo) + +add_executable( + rlSpatialDemo + rlSpatialDemo.cpp +) + +target_link_libraries( + rlSpatialDemo + rlmath +) diff --git a/demos/rlSpatialDemo/rlSpatialDemo.cpp b/demos/rlSpatialDemo/rlSpatialDemo.cpp new file mode 100644 index 00000000..db76c10f --- /dev/null +++ b/demos/rlSpatialDemo/rlSpatialDemo.cpp @@ -0,0 +1,306 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#define EIGEN_MATRIXBASE_PLUGIN + +#include +#include + +int +main(int argc, char** argv) +{ + { + rl::math::MotionVector v1; + v1.angular() << 0, 1, 2; + v1.linear() << 3, 4, 5; + std::cout << "v1 = " << v1.matrix().transpose() << std::endl; + v1 = v1.matrix(); + std::cout << "v1 = " << v1.matrix().transpose() << std::endl; + + rl::math::MotionVector v2; + v2.angular() << 0, 1, 2; + v2.linear() << 3, 4, 5; + std::cout << "v2 = " << v2.matrix().transpose() << std::endl; + + rl::math::MotionVector v3; + v3 = v1 + v2; + std::cout << "v3 = " << v3.matrix().transpose() << std::endl; + v3 = v1 + v2 + v1; + std::cout << "v3 = " << v3.matrix().transpose() << std::endl; + v3 = v1 - v2; + std::cout << "v3 = " << v3.matrix().transpose() << std::endl; + v3 = v1 - v2 - v1; + std::cout << "v3 = " << v3.matrix().transpose() << std::endl; + + v3 = v1.cross(v2); + std::cout << "v3 = " << v3.matrix().transpose() << std::endl; + } + + std::cout << std::endl; + + { + rl::math::ForceVector f1; + f1.moment() << 0, 1, 2; + f1.force() << 3, 4, 5; + std::cout << "f1 = " << f1.matrix().transpose() << std::endl; + f1 = f1.matrix(); + std::cout << "f1 = " << f1.matrix().transpose() << std::endl; + + rl::math::ForceVector f2; + f2.moment() << 0, 1, 2; + f2.force() << 3, 4, 5; + std::cout << "f2 = " << f2.matrix().transpose() << std::endl; + + rl::math::ForceVector f3; + f3 = f1 + f2; + std::cout << "f3 = " << f3.matrix().transpose() << std::endl; + f3 = f1 + f2 + f3; + std::cout << "f3 = " << f3.matrix().transpose() << std::endl; + f3 = f1 - f2; + std::cout << "f3 = " << f3.matrix().transpose() << std::endl; + f3 = f1 - f2 - f1; + std::cout << "f3 = " << f3.matrix().transpose() << std::endl; + + rl::math::MotionVector v1; + v1.angular() << 0, 1, 2; + v1.linear() << 3, 4, 5; + + f3 = v1.cross(f2); + std::cout << "f3 = " << f3.matrix().transpose() << std::endl; + + std::cout << v1.dot(f1) << std::endl; + std::cout << f1.dot(v1) << std::endl; + } + + std::cout << std::endl; + + { + rl::math::PlueckerTransform X1; + X1.rotation() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + X1.translation() << 0, 1, 2; + std::cout << "X1.rotation = " << std::endl << X1.rotation() << std::endl; + std::cout << "X1.translation = " << X1.translation().transpose() << std::endl; + std::cout << "X1.matrixMotion = " << std::endl << X1.matrixMotion() << std::endl; + std::cout << "X1.matrixForce = " << std::endl << X1.matrixForce() << std::endl; + std::cout << "X1.inverseMotion = " << std::endl << X1.inverseMotion() << std::endl; + std::cout << "X1.inverseForce = " << std::endl << X1.inverseForce() << std::endl; + std::cout << "X1.transform = " << std::endl << X1.transform().matrix() << std::endl; + + rl::math::PlueckerTransform X2; + X2.rotation() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + X2.translation() << 0, 1, 2; + std::cout << "X2.rotation = " << std::endl << X2.rotation() << std::endl; + std::cout << "X2.translation = " << X2.translation().transpose() << std::endl; + + rl::math::PlueckerTransform X3; + X3 = X1 * X2; + std::cout << "X3.rotation = " << std::endl << X3.rotation() << std::endl; + std::cout << "X3.translation = " << X3.translation().transpose() << std::endl; + + rl::math::MotionVector v1; + v1.angular() << 0, 1, 2; + v1.linear() << 3, 4, 5; + std::cout << "v1 = " << v1.matrix().transpose() << std::endl; + + rl::math::MotionVector v2; + v2 = X1 * v1; + std::cout << "v2 = " << v2.matrix().transpose() << std::endl; + rl::math::MotionVector::MatrixType v2vector; + v2vector = X1.matrixMotion() * v1.matrix(); + std::cout << "v2vector = " << v2vector.transpose() << std::endl; + v2 = X1 / v1; + std::cout << "v2 = " << v2.matrix().transpose() << std::endl; + v2vector = X1.inverseMotion() * v1.matrix(); + std::cout << "v2vector = " << v2vector.transpose() << std::endl; + + rl::math::ForceVector f1; + f1.moment() << 0, 1, 2; + f1.force() << 3, 4, 5; + std::cout << "f1 = " << f1.matrix().transpose() << std::endl; + + rl::math::ForceVector f2; + f2 = X1 * f1; + std::cout << "f2 = " << f2.matrix().transpose() << std::endl; + rl::math::ForceVector::MatrixType f2vector; + f2vector = X1.matrixForce() * f1.matrix(); + std::cout << "f2vector = " << f2vector.transpose() << std::endl; + f2 = X1 / f1; + std::cout << "f2 = " << f2.matrix().transpose() << std::endl; + f2vector = X1.inverseForce() * f1.matrix(); + std::cout << "f2vector = " << f2vector.transpose() << std::endl; + } + + std::cout << std::endl; + + { + rl::math::PlueckerTransform X1; + X1.rotation() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + X1.translation() << 0, 1, 2; + std::cout << "X1.rotation = " << std::endl << X1.rotation() << std::endl; + std::cout << "X1.translation = " << X1.translation().transpose() << std::endl; + + rl::math::RigidBodyInertia I1; + I1.cog() << 0, 1, 2; + I1.inertia() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + I1.mass() = 1; + std::cout << "I1.cog = " << I1.cog().transpose() << std::endl; + std::cout << "I1.inertia = " << std::endl << I1.inertia() << std::endl; + std::cout << "I1.mass = " << I1.mass() << std::endl; + std::cout << "I1.matrix = " << std::endl << I1.matrix() << std::endl; + I1 = I1.matrix(); + std::cout << "I1.matrix = " << std::endl << I1.matrix() << std::endl; + + rl::math::RigidBodyInertia I2; + I2.cog() << 0, 1, 2; + I2.inertia() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + I2.mass() = 1; + + rl::math::RigidBodyInertia I3; + I3 = I1 + I2; + std::cout << "I3.cog = " << I3.cog().transpose() << std::endl; + std::cout << "I3.inertia = " << std::endl << I3.inertia() << std::endl; + std::cout << "I3.mass = " << I3.mass() << std::endl; + I3 = I1 - I2; + std::cout << "I3.cog = " << I3.cog().transpose() << std::endl; + std::cout << "I3.inertia = " << std::endl << I3.inertia() << std::endl; + std::cout << "I3.mass = " << I3.mass() << std::endl; + I3 = I1 * 2; + std::cout << "I3.cog = " << I3.cog().transpose() << std::endl; + std::cout << "I3.inertia = " << std::endl << I3.inertia() << std::endl; + std::cout << "I3.mass = " << I3.mass() << std::endl; + I3 = I1 / 2; + std::cout << "I3.cog = " << I3.cog().transpose() << std::endl; + std::cout << "I3.inertia = " << std::endl << I3.inertia() << std::endl; + std::cout << "I3.mass = " << I3.mass() << std::endl; + + I2 = X1 * I1; + std::cout << "I2.cog = " << I2.cog().transpose() << std::endl; + std::cout << "I2.inertia = " << std::endl << I2.inertia() << std::endl; + std::cout << "I2.mass = " << I2.mass() << std::endl; + std::cout << "I2.matrix = " << std::endl << I2.matrix() << std::endl; + rl::math::RigidBodyInertia::MatrixType I2matrix; + I2matrix = X1.matrixForce() * I1.matrix() * X1.inverseMotion(); + std::cout << "I2matrix = " << std::endl << I2matrix << std::endl; + + I2 = X1 / I1; + std::cout << "I2.cog = " << I2.cog().transpose() << std::endl; + std::cout << "I2.inertia = " << std::endl << I2.inertia() << std::endl; + std::cout << "I2.mass = " << I2.mass() << std::endl; + std::cout << "I2.matrix = " << std::endl << I2.matrix() << std::endl; + I2matrix = X1.inverseForce() * I1.matrix() * X1.matrixMotion(); + std::cout << "I2matrix = " << std::endl << I2matrix << std::endl; + + rl::math::MotionVector v1; + v1.angular() << 0, 1, 2; + v1.linear() << 3, 4, 5; + std::cout << "v1 = " << v1.matrix().transpose() << std::endl; + + rl::math::ForceVector f1; + f1 = I1 * v1; + std::cout << "f1 = " << f1.matrix().transpose() << std::endl; + } + + std::cout << std::endl; + + { + rl::math::PlueckerTransform X1; + X1.rotation() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + X1.translation() << 0, 1, 2; + std::cout << "X1.rotation = " << std::endl << X1.rotation() << std::endl; + std::cout << "X1.translation = " << X1.translation().transpose() << std::endl; + + rl::math::ArticulatedBodyInertia IA1; + IA1.cog() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + IA1.inertia() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + IA1.mass() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + std::cout << "IA1.cog = " << std::endl << IA1.cog() << std::endl; + std::cout << "IA1.inertia = " << std::endl << IA1.inertia() << std::endl; + std::cout << "IA1.mass = " << std::endl << IA1.mass() << std::endl; + std::cout << "IA1.matrix = " << std::endl << IA1.matrix() << std::endl; + IA1 = IA1.matrix(); + std::cout << "IA1.matrix = " << std::endl << IA1.matrix() << std::endl; + + rl::math::RigidBodyInertia I1; + I1.cog() << 0, 1, 2; + I1.inertia() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + I1.mass() = 1; + IA1 = I1; + std::cout << "IA1.cog = " << std::endl << IA1.cog() << std::endl; + std::cout << "IA1.inertia = " << std::endl << IA1.inertia() << std::endl; + std::cout << "IA1.mass = " << std::endl << IA1.mass() << std::endl; + + rl::math::ArticulatedBodyInertia IA2; + IA2.cog() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + IA2.inertia() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + IA2.mass() << 0, 1, 2, 3, 4, 5, 6, 7, 8; + + rl::math::ArticulatedBodyInertia IA3; + IA3 = IA1 + IA2; + std::cout << "IA3.cog = " << std::endl << IA3.cog() << std::endl; + std::cout << "IA3.inertia = " << std::endl << IA3.inertia() << std::endl; + std::cout << "IA3.mass = " << std::endl << IA3.mass() << std::endl; + IA3 = IA1 - IA2; + std::cout << "IA3.cog = " << std::endl << IA3.cog() << std::endl; + std::cout << "IA3.inertia = " << std::endl << IA3.inertia() << std::endl; + std::cout << "IA3.mass = " << std::endl << IA3.mass() << std::endl; + IA3 = IA1 * 2; + std::cout << "IA3.cog = " << std::endl << IA3.cog() << std::endl; + std::cout << "IA3.inertia = " << std::endl << IA3.inertia() << std::endl; + std::cout << "IA3.mass = " << std::endl << IA3.mass() << std::endl; + IA3 = IA1 / 2; + std::cout << "IA3.cog = " << std::endl << IA3.cog() << std::endl; + std::cout << "IA3.inertia = " << std::endl << IA3.inertia() << std::endl; + std::cout << "IA3.mass = " << std::endl << IA3.mass() << std::endl; + + IA2 = X1 * IA1; + std::cout << "IA2.cog = " << std::endl << IA2.cog() << std::endl; + std::cout << "IA2.inertia = " << std::endl << IA2.inertia() << std::endl; + std::cout << "IA2.mass = " << std::endl << IA2.mass() << std::endl; + std::cout << "IA2.matrix = " << std::endl << IA2.matrix() << std::endl; + rl::math::ArticulatedBodyInertia::MatrixType IA2matrix; + IA2matrix = X1.matrixForce() * IA1.matrix() * X1.inverseMotion(); + std::cout << "IA2matrix = " << std::endl << IA2matrix << std::endl; + + IA2 = X1 / IA1; + std::cout << "IA2.cog = " << std::endl << IA2.cog() << std::endl; + std::cout << "IA2.inertia = " << std::endl << IA2.inertia() << std::endl; + std::cout << "IA2.mass = " << std::endl << IA2.mass() << std::endl; + std::cout << "IA2.matrix = " << std::endl << IA2.matrix() << std::endl; + IA2matrix = X1.inverseForce() * IA1.matrix() * X1.matrixMotion(); + std::cout << "IA2matrix = " << std::endl << IA2matrix << std::endl; + + rl::math::MotionVector v1; + v1.angular() << 0, 1, 2; + v1.linear() << 3, 4, 5; + std::cout << "v1 = " << v1.matrix().transpose() << std::endl; + + rl::math::ForceVector f1; + f1 = IA1 * v1; + std::cout << "f1 = " << f1.matrix().transpose() << std::endl; + } + + return 0; +} diff --git a/demos/rlThreadsDemo/CMakeLists.txt b/demos/rlThreadsDemo/CMakeLists.txt new file mode 100644 index 00000000..22a2ce31 --- /dev/null +++ b/demos/rlThreadsDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlThreadsDemo) + +add_executable( + rlThreadsDemo + rlThreadsDemo.cpp +) + +target_link_libraries( + rlThreadsDemo + rlutil +) diff --git a/demos/rlThreadsDemo/rlThreadsDemo.cpp b/demos/rlThreadsDemo/rlThreadsDemo.cpp new file mode 100644 index 00000000..e9b63f08 --- /dev/null +++ b/demos/rlThreadsDemo/rlThreadsDemo.cpp @@ -0,0 +1,88 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +class TestThread : public rl::util::Thread +{ +public: + TestThread(const std::size_t& i = 0) : + i(i) + { + }; + + virtual ~TestThread() + { + }; + + void run() + { +#ifdef WIN32 + srand(static_cast< unsigned int >(rl::util::Timer::now() * 1000000.0f)); +#endif // WIN32 + + for (std::size_t j = 0; j < 5; ++j) + { + std::size_t time = rand() % 1000 + 100; + sleep(time / 1000.0f); + std::cout << "TestThread[" << i << "]::run() - " << j << " - " << time / 1000.0f << " seconds" << std::endl; + } + } + +private: + std::size_t i; +}; + +int +main(int argc, char** argv) +{ + srand(static_cast< unsigned int >(rl::util::Timer::now() * 1000000.0f)); + + std::vector< rl::util::Thread* > threads; + + for (std::size_t i = 0; i < 5; ++i) + { + std::cout << "TestThread[" << i << "]" << std::endl; + TestThread* thread = new TestThread(i); + std::cout << "TestThread[" << i << "]::start()" << std::endl; + thread->start(); + threads.push_back(thread); + } + + std::cout << "before join()" << std::endl; + + for (std::size_t i = 0; i < 5; ++i) + { + threads[i]->join(); + } + + std::cout << "after join()" << std::endl; + + return 0; +} diff --git a/demos/rlTimerDemo/CMakeLists.txt b/demos/rlTimerDemo/CMakeLists.txt new file mode 100644 index 00000000..3921ccc4 --- /dev/null +++ b/demos/rlTimerDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlTimerDemo) + +add_executable( + rlTimerDemo + rlTimerDemo.cpp +) + +target_link_libraries( + rlTimerDemo + rlutil +) diff --git a/demos/rlTimerDemo/rlTimerDemo.cpp b/demos/rlTimerDemo/rlTimerDemo.cpp new file mode 100644 index 00000000..481430d1 --- /dev/null +++ b/demos/rlTimerDemo/rlTimerDemo.cpp @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + srand(static_cast< unsigned int >(rl::util::Timer::now() * 1000000.0f)); + + rl::util::Timer timer; + + double seconds = 0.0f; + + for (std::size_t i = 0; i < 7; ++i) + { + seconds += static_cast< double >(rand() % 42) * M_PI / 256.0f; + + std::cout << seconds << " seconds... " << std::flush; + + timer.start(); + rl::util::Timer::sleep(seconds); + timer.stop(); + + std::cout << timer.elapsed() << " seconds" << std::endl; + } + + return 0; +} diff --git a/demos/rlTrapezoidalVelocityDemo/CMakeLists.txt b/demos/rlTrapezoidalVelocityDemo/CMakeLists.txt new file mode 100644 index 00000000..b5e50bd9 --- /dev/null +++ b/demos/rlTrapezoidalVelocityDemo/CMakeLists.txt @@ -0,0 +1,11 @@ +project(rlTrapezoidalVelocityDemo) + +add_executable( + rlTrapezoidalVelocityDemo + rlTrapezoidalVelocityDemo.cpp +) + +target_link_libraries( + rlTrapezoidalVelocityDemo + rlmath +) diff --git a/demos/rlTrapezoidalVelocityDemo/rlTrapezoidalVelocityDemo.cpp b/demos/rlTrapezoidalVelocityDemo/rlTrapezoidalVelocityDemo.cpp new file mode 100644 index 00000000..038cc2de --- /dev/null +++ b/demos/rlTrapezoidalVelocityDemo/rlTrapezoidalVelocityDemo.cpp @@ -0,0 +1,67 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +int +main(int argc, char** argv) +{ + rl::math::TrapezoidalVelocity< rl::math::Real > interpolator; + + interpolator.x0 = 50.0; + interpolator.xe = -200.0; + interpolator.v0 = 5.0; + interpolator.ve = 0.0; + interpolator.vm = 10.5; + interpolator.am = 0.055; + interpolator.dm = 0.055; + + interpolator.interpolate(); + + double updateRate = 0.00711; + double t = interpolator.t(); + + for (std::size_t i = 0; i < t / updateRate * 1.1; ++i) + { + interpolator.interpolate(); + double x = interpolator.x(updateRate); + double v = interpolator.v(updateRate); + double a = interpolator.a(updateRate); + std::cout << i * updateRate; + std::cout << " "; + std::cout << x; + std::cout << " "; + std::cout << v * 100.0f; + std::cout << " "; + std::cout << a * 1000.0f; + std::cout << std::endl; + interpolator.x0 = x; + interpolator.v0 = v; + } + + return 0; +} diff --git a/demos/rlViewDemo/CMakeLists.txt b/demos/rlViewDemo/CMakeLists.txt new file mode 100644 index 00000000..1f609614 --- /dev/null +++ b/demos/rlViewDemo/CMakeLists.txt @@ -0,0 +1,69 @@ +project(rlViewDemo) + +find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL) +include(${QT_USE_FILE}) + +find_package(SoQt) + +if(QT_FOUND AND SOQT_FOUND) + add_executable( + rlViewDemo + rlViewDemo.cpp + ${rl_SOURCE_DIR}/robotics-library.rc + ) + + target_compile_definitions( + rlViewDemo + PUBLIC + ${QT_DEFINITIONS} + ${SOQT_DEFINITIONS} + ) + + include_directories( + rlViewDemo + PUBLIC + ${QT_INCLUDES} + ${SOQT_INCLUDE_DIRS} + ) + + target_link_libraries( + rlViewDemo + rlsg + ${QT_LIBRARIES} + ${SOQT_LIBRARIES} + ) + + set_target_properties( + rlViewDemo + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d + ) + + install( + TARGETS rlViewDemo + COMPONENT demos + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + if(UNIX) + install(FILES rlViewDemo.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT demos) + endif(UNIX) + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\rlViewDemo.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\rlViewDemo.exe\\\" \\\\ + \\\"\\\\ + \\\$\\\\\\\"$INSTDIR\\\\${CMAKE_INSTALL_DATADIR}\\\\rl\\\\examples\\\\rlsg\\\\unimation-puma560_boxes.xml\\\$\\\\\\\"\\\\ + \\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Visualization demo with Unimation Puma 560\\\"" + PARENT_SCOPE + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\rlViewDemo.lnk\\\"" PARENT_SCOPE) +endif(QT_FOUND AND SOQT_FOUND) diff --git a/demos/rlViewDemo/rlViewDemo.cpp b/demos/rlViewDemo/rlViewDemo.cpp new file mode 100644 index 00000000..b83bf26e --- /dev/null +++ b/demos/rlViewDemo/rlViewDemo.cpp @@ -0,0 +1,71 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlViewDemo SCENEFILE" << std::endl; + return 1; + } + + try + { + SoDB::init(); + + QWidget* widget = SoQt::init(argc, argv, argv[0]); + widget->resize(800, 600); + + rl::sg::so::Scene scene; + scene.load(argv[1]); + + SoQtExaminerViewer viewer(widget, NULL, true, SoQtFullViewer::BUILD_POPUP); + viewer.setSceneGraph(scene.root); + viewer.setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); + viewer.show(); + + widget->setWindowTitle(QString(argv[1]) + " - rlViewDemo"); + + SoQt::show(widget); + SoQt::mainLoop(); + + return 0; + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return -1; + } +} diff --git a/demos/rlViewDemo/rlViewDemo.desktop b/demos/rlViewDemo/rlViewDemo.desktop new file mode 100644 index 00000000..a008ce48 --- /dev/null +++ b/demos/rlViewDemo/rlViewDemo.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Categories=Science;Robotics; +Comment=Visualization demo with Unimation Puma 560 +Exec=sh -c "rlViewDemo $(dirname %k)/../rl/examples/rlsg/unimation-puma560_boxes.xml" +Icon=robotics-library +Name=Robotics Library (rlViewDemo) +Type=Application +X-Unity-IconBackgroundColor=#ffffff diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 00000000..dc0195ba --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,29 @@ +project(examples) + +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/rlkin/ + DESTINATION ${CMAKE_INSTALL_DATADIR}/rl/examples/rlkin + COMPONENT examples + PATTERN .svn EXCLUDE +) + +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/rlmdl/ + DESTINATION ${CMAKE_INSTALL_DATADIR}/rl/examples/rlmdl + COMPONENT examples + PATTERN .svn EXCLUDE +) + +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/rlplan/ + DESTINATION ${CMAKE_INSTALL_DATADIR}/rl/examples/rlplan + COMPONENT examples + PATTERN .svn EXCLUDE +) + +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/rlsg/ + DESTINATION ${CMAKE_INSTALL_DATADIR}/rl/examples/rlsg + COMPONENT examples + PATTERN .svn EXCLUDE +) diff --git a/examples/README b/examples/README new file mode 100644 index 00000000..cdd0be27 --- /dev/null +++ b/examples/README @@ -0,0 +1 @@ +For further example files see http://www.roboticslibrary.org/ \ No newline at end of file diff --git a/examples/rlkin/mitsubishi-rv6sl.xml b/examples/rlkin/mitsubishi-rv6sl.xml new file mode 100644 index 00000000..eb23dd66 --- /dev/null +++ b/examples/rlkin/mitsubishi-rv6sl.xml @@ -0,0 +1,173 @@ + + + + Mitsubishi + RV-6SL + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + + + + + 0.35 + 0 + 0.085 + -90 + + 170 + -170 + 250 + + + + + + + + + + + + 0 + -90 + 0.38 + 0 + + 135 + -92 + 267 + + + + + + + + + + + + + 0 + -90 + 0.1 + -90 + + 166 + -129 + 267 + + + + + + + + + + + + 0.425 + 0 + 0 + 90 + + 160 + -160 + 352 + + + + + + + + + + + + + + 0 + 180 + 0 + 90 + + 120 + -120 + 450 + + + + + + + + + + + + 0.085 + 0 + 0 + 0 + + 360 + -360 + 660 + + + + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + diff --git a/examples/rlkin/rlkin.xsd b/examples/rlkin/rlkin.xsd new file mode 100644 index 00000000..a7e7b551 --- /dev/null +++ b/examples/rlkin/rlkin.xsd @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/rlkin/staeubli-tx60l.xml b/examples/rlkin/staeubli-tx60l.xml new file mode 100644 index 00000000..313dcb6b --- /dev/null +++ b/examples/rlkin/staeubli-tx60l.xml @@ -0,0 +1,167 @@ + + + + Stäubli + TX-60L + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + + + + + 0.375 + 0 + 0 + -90 + + 180 + -180 + + + + + + + + + + + + 0 + -90 + 0.4 + 0 + + 127.5 + -127.5 + + + + + + + + + + + + + 0.02 + -90 + 0 + -90 + + 152.5 + -152.5 + + + + + + + + + + + + 0.45 + 0 + 0 + 90 + + 270 + -270 + + + + + + + + + + + + + + 0 + 180 + 0 + 90 + + 133.5 + -122.5 + + + + + + + + + + + + 0.07 + 0 + 0 + 0 + + 270 + -270 + + + + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + diff --git a/examples/rlkin/unimation-puma560.xml b/examples/rlkin/unimation-puma560.xml new file mode 100644 index 00000000..21814021 --- /dev/null +++ b/examples/rlkin/unimation-puma560.xml @@ -0,0 +1,167 @@ + + + + Unimation + Puma 560 + + + 0 + 0 + 90 + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + + + + + 0.6604 + 0 + 0 + -90 + + 160 + -160 + + + + + + + + + + + + 0.1291 + 0 + 0.4318 + 0 + + 45 + -225 + + + + + + + + + + + + + 0 + 0 + -0.0203 + 90 + + 225 + -45 + + + + + + + + + + + + 0.4331 + 0 + 0 + -90 + + 170 + -110 + + + + + + + + + + + + + + 0 + 0 + 0 + 90 + + 100 + -100 + + + + + + + + + + + + 0.04125 + 0 + 0 + 0 + + 266 + -266 + + + + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + diff --git a/examples/rlmdl/mitsubishi-rv6sl.xml b/examples/rlmdl/mitsubishi-rv6sl.xml new file mode 100644 index 00000000..7e5cbb0e --- /dev/null +++ b/examples/rlmdl/mitsubishi-rv6sl.xml @@ -0,0 +1,278 @@ + + + + Mitsubishi + RV6-SL + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + 0 + 0 + 9.86055 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0.35 + + + + + + + + 170 + -170 + 250 + + + + + + + + -90 + 0 + 0 + + + 0.085 + 0 + 0 + + + + + + + + 135 + -92 + 267 + + + + + + + + 0 + 0 + -90 + + + 0 + -0.38 + 0 + + + + + + + + 166 + -129 + 267 + + + + + + + + -90 + 0 + -90 + + + 0 + -0.1 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0.425 + + + + + + + + 160 + -160 + 352 + + + + + + + + 90 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + 120 + -120 + 450 + + + + + + + + 90 + 0 + 180 + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0.085 + + + + + + + + 360 + -360 + 660 + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + diff --git a/examples/rlmdl/planar2.xml b/examples/rlmdl/planar2.xml new file mode 100644 index 00000000..fe21ce38 --- /dev/null +++ b/examples/rlmdl/planar2.xml @@ -0,0 +1,119 @@ + + + + Featherstone + planar2 + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + 0 + 0 + 9.80665 + + + + + + 0.5 + 0 + 0 + + + 0.01 + 0.083333333 + 0.083333333 + 0 + 0 + 0 + + 1 + + + + + 0.5 + 0 + 0 + + + 0.01 + 0.083333333 + 0.083333333 + 0 + 0 + 0 + + 1 + + + + + + + + + -90 + 0 + 0 + + + 0 + 0 + 2 + + + + + + + + + + + + + + + 0 + 0 + 0 + + + 1 + 0 + 0 + + + + + + + + + + + + + + + 0 + 0 + 0 + + + 1 + 0 + 0 + + + + diff --git a/examples/rlmdl/rlmdl.xsd b/examples/rlmdl/rlmdl.xsd new file mode 100644 index 00000000..68ae26d7 --- /dev/null +++ b/examples/rlmdl/rlmdl.xsd @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/rlmdl/unimation-puma560.xml b/examples/rlmdl/unimation-puma560.xml new file mode 100644 index 00000000..e4b3a421 --- /dev/null +++ b/examples/rlmdl/unimation-puma560.xml @@ -0,0 +1,324 @@ + + + + Unimation + Puma 560 + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + 0 + 0 + 9.86055 + + + + + + + + + + + 0 + 0 + 0 + + + 0 + 0.35 + 0 + 0 + 0 + 0 + + + + 0 + + + + + -0.3638 + 0.006 + 0.2275 + + + 0.13 + 0.524 + 0.539 + 0 + 0 + 0 + + + + + 17.4 + + + + + -0.0203 + -0.0141 + 0.07 + + + 0.066 + 0.086 + 0.0125 + 0 + 0 + 0 + + + + 4.8 + + + + + 0 + 0.019 + 0 + + + 1.8e-3 + 1.3e-3 + 1.8e-3 + 0 + 0 + 0 + + + + + + 0.82 + + + + + 0 + 0 + 0 + + + 0.3e-3 + 0.4e-3 + 0.3e-3 + 0 + 0 + 0 + + + + 0.34 + + + + + 0 + 0 + 0.032 + + + 0.15e-3 + 0.15e-3 + 0.04e-3 + 0 + 0 + 0 + + + + 0.09 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + 160 + -160 + + + + + + + + -90 + 0 + 0 + + + 0 + 0 + 0.6604 + + + + + + + + 45 + -225 + + + + + + + + 0 + 0 + 0 + + + 0.4318 + 0 + 0.1291 + + + + + + + + 225 + -45 + + + + + + + + 90 + 0 + 0 + + + -0.0203 + 0 + 0 + + + + + + + + + 170 + -110 + + + + + + + + -90 + 0 + 0 + + + 0 + 0 + 0.4331 + + + + + + + + 100 + -100 + + + + + + + + 90 + 0 + 0 + + + 0 + 0 + 0 + + + + + + + + 266 + -266 + + + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0.04125 + + + + diff --git a/examples/rlplan/mitsubishi-rv6sl_boxes_prm.xml b/examples/rlplan/mitsubishi-rv6sl_boxes_prm.xml new file mode 100644 index 00000000..aa0792d4 --- /dev/null +++ b/examples/rlplan/mitsubishi-rv6sl_boxes_prm.xml @@ -0,0 +1,95 @@ + + + + 120 + + 90 + 90 + 0 + 0 + 0 + 0 + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + 0 + + + + 0 + 90 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + 1 + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + 0 + + + + 768 + 1024 + + + + + + 1 + + + diff --git a/examples/rlplan/mitsubishi-rv6sl_boxes_rrtConCon.xml b/examples/rlplan/mitsubishi-rv6sl_boxes_rrtConCon.xml new file mode 100644 index 00000000..2d792b56 --- /dev/null +++ b/examples/rlplan/mitsubishi-rv6sl_boxes_rrtConCon.xml @@ -0,0 +1,93 @@ + + + + 120 + + 90 + 90 + 0 + 0 + 0 + 0 + + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + 0 + + + + 0 + 90 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + 1 + + + + + 0 + 0 + 0 + + + 0 + 0 + 0 + + + + 0 + + + + 768 + 1024 + + + + 1 + + + diff --git a/examples/rlplan/rlplan.xsd b/examples/rlplan/rlplan.xsd new file mode 100644 index 00000000..63593b9e --- /dev/null +++ b/examples/rlplan/rlplan.xsd @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/rlplan/staeubli-tx60l_wall_prm.xml b/examples/rlplan/staeubli-tx60l_wall_prm.xml new file mode 100644 index 00000000..000e66dc --- /dev/null +++ b/examples/rlplan/staeubli-tx60l_wall_prm.xml @@ -0,0 +1,93 @@ + + + + 1200 + + -25 + 90 + 0 + 0 + 0 + 0 + + + + + + 0 + 0 + 0 + + + -0.625 + 0 + 0 + + + + 0 + + + + 20 + 90 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + -1.25 + -1.25 + 2.5 + + 1 + + 0 + 0 + 0.25 + + + 0 + 0 + 1 + + + 1 + + + + + 0 + 0 + 0 + + + -0.625 + 0 + 0 + + + + 0 + + + + 768 + 1024 + + + + + + 1 + + + diff --git a/examples/rlplan/staeubli-tx60l_wall_rrtConCon.xml b/examples/rlplan/staeubli-tx60l_wall_rrtConCon.xml new file mode 100644 index 00000000..5dc7f058 --- /dev/null +++ b/examples/rlplan/staeubli-tx60l_wall_rrtConCon.xml @@ -0,0 +1,91 @@ + + + + 1200 + + -25 + 90 + 0 + 0 + 0 + 0 + + + + + + 0 + 0 + 0 + + + -0.625 + 0 + 0 + + + + 0 + + + + 20 + 90 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + -1.25 + -1.25 + 2.5 + + 1 + + 0 + 0 + 0.25 + + + 0 + 0 + 1 + + + 1 + + + + + 0 + 0 + 0 + + + -0.625 + 0 + 0 + + + + 0 + + + + 768 + 1024 + + + + 1 + + + diff --git a/examples/rlplan/unimation-puma560_boxes_prm.xml b/examples/rlplan/unimation-puma560_boxes_prm.xml new file mode 100644 index 00000000..60309c64 --- /dev/null +++ b/examples/rlplan/unimation-puma560_boxes_prm.xml @@ -0,0 +1,70 @@ + + + + 1200 + + 0 + 0 + 90 + 0 + 0 + 0 + + + + + + 0 + 0 + 90 + + + 0 + 0 + 0 + + + + 0 + + + + 90 + -180 + 90 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + 1 + + + + + 0 + 0 + 90 + + + 0 + 0 + 0 + + + + 0 + + + + + + 1 + + + diff --git a/examples/rlplan/unimation-puma560_boxes_rrtConCon.xml b/examples/rlplan/unimation-puma560_boxes_rrtConCon.xml new file mode 100644 index 00000000..a0fa97ae --- /dev/null +++ b/examples/rlplan/unimation-puma560_boxes_rrtConCon.xml @@ -0,0 +1,69 @@ + + + + 1200 + + 0 + 0 + 90 + 0 + 0 + 0 + + + + + + 0 + 0 + 90 + + + 0 + 0 + 0 + + + + 0 + + + + 90 + -180 + 90 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + 1 + + + + + 0 + 0 + 90 + + + 0 + 0 + 0 + + + + 0 + + + + 1 + 1e-9 + + + diff --git a/examples/rlsg/boxes.wrl b/examples/rlsg/boxes.wrl new file mode 100644 index 00000000..7cdb4c3c --- /dev/null +++ b/examples/rlsg/boxes.wrl @@ -0,0 +1,123 @@ +#VRML V2.0 utf8 +DEF room2 Transform { + children [ + DEF floor Transform { + translation 0 0 -0.05 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.5 + } + } + geometry Box { + size 5.2 5.2 0.1 + } + } + ] + } + DEF north Transform { + translation 0 2.55 0.5 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.5 + } + } + geometry Box { + size 5.2 0.1 1 + } + } + ] + } + DEF south Transform { + translation 0 -2.55 0.5 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.5 + } + } + geometry Box { + size 5.2 0.1 1 + } + } + ] + } + DEF west Transform { + translation -2.55 0 0.5 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.5 + } + } + geometry Box { + size 0.1 5 1 + } + } + ] + } + DEF east Transform { + translation 2.55 0 0.5 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.5 + } + } + geometry Box { + size 0.1 5 1 + } + } + ] + } + DEF box1 Transform { + translation -1 0 0.5 + children [ + Shape { + appearance Appearance { + material Material { + } + } + geometry Box { + size 1 1 1 + } + } + ] + } + DEF box2 Transform { + translation 0 -1 0.5 + children [ + Shape { + appearance Appearance { + material Material { + } + } + geometry Box { + size 1 1 1 + } + } + ] + } + DEF box3 Transform { + translation 0.75 0.75 0.5 + children [ + Shape { + appearance Appearance { + material Material { + } + } + geometry Box { + size 1 1 1 + } + } + ] + } + ] +} + diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link0.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link0.wrl new file mode 100644 index 00000000..22a1dd4b --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link0.wrl @@ -0,0 +1,469 @@ +#VRML V2.0 utf8 + + +DEF link0 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.039802998 0.12001 0.20889699, + -0.139999 -0.105 2.4720558e-012, + -0.200104 0.097000003 0.212006, + -0.19999699 0.100006 0.21305799, + -0.129997 0.115 0.020004001, + -0.13367499 0.114298 0.010178, + -0.200104 -0.097000003 0.212006, + -0.19999699 -0.100006 0.21305799, + -0.139236 0.108827 1.3221668e-013, + -0.099319004 0.083182 -5.6973011e-012, + -0.133827 0.114239 6.0124622e-012, + -0.13707 0.112071 4.1261907e-012, + -0.19977599 0.100006 0.212128, + -0.139999 0.105 3.7965828e-012, + -0.139236 -0.108827 -1.5283795e-011, + -0.19999699 -0.09877 0.238846, + -0.19999699 -0.099411003 0.238419, + -0.200104 -0.097000003 0.235504, + -0.076991998 -0.01532 0.258003, + -0.098077998 -0.019516001 0.25499699, + -0.072525002 0.030029001 0.258003, + 0.113522 -0.044204 7.9410888e-012, + -0.070708998 -0.070708998 0.25499699, + -0.019508 -0.098082997 0.25499901, + -0.098077998 0.019516001 0.25499699, + -0.076990999 0.01532 0.258003, + -0.1 -8.5027705e-012 0.25499699, + -0.078500003 -1.3843293e-011 0.258003, + -0.030037001 0.072509997 0.257999, + -0.19999699 0.099854 0.237762, + -0.040413 0.11937 0.238415, + -0.19999699 0.100006 0.237, + -0.016937001 0.120834 0.237736, + -0.016953001 0.120392 0.238415, + -0.040459 0.119812 0.237736, + -0.039810002 0.12001 0.237, + 0.0063319998 0.119263 0.237, + -0.129997 0.115 5.7456162e-012, + -0.016716 0.120972 0.208931, + -0.016716 0.120972 0.237, + 0.022499001 -0.122 0.014999, + 0.071892001 0.097976997 0.23841099, + -0.055507999 0.055511001 0.257999, + -0.043609999 0.065277003 0.257999, + -0.055557001 0.083145 0.25500101, + -0.070708998 0.070708998 0.25499699, + -0.19999699 -0.098007001 0.238998, + 1.0881691e-011 -0.100006 0.255, + -0.055557001 -0.083145 0.25500101, + -0.055507999 -0.055511001 0.257999, + 6.4830624e-012 -0.078491002 0.25799999, + 0.019508 0.098082997 0.25499901, + 0.109435 -0.013016 0.237, + 0.006546 -0.119095 0.237736, + 0.006325 -0.119263 0.237, + -0.016716 -0.120972 0.237, + -0.19999699 0.09877 0.238846, + -0.019508 0.098082997 0.25499901, + -0.19999699 0.099411003 0.238419, + -0.19999699 0.098007001 0.238998, + -0.200104 0.097000003 0.235504, + -0.038268998 0.092391998 0.25500101, + 0.029030001 0.114899 0.237, + 0.006546 0.119095 0.237736, + 0.0064849998 0.118652 0.238414, + 0.029387999 0.114197 0.238415, + 0.111671 0.075168997 1.4618829e-011, + 0.113522 0.044204 7.4461461e-012, + 0.111671 -0.075168997 -6.3329628e-012, + 0.073821999 0.097411998 0.237, + 0.10986 1.655705e-012 0.23774, + 0.109247 0.013535 0.237747, + 0.114998 0.07 0.014999, + 0.114998 0.07 0.002998, + 0.107742 0.025924999 0.237, + 0.109435 0.013016 0.237, + 0.11 -9.4015793e-012 0.237, + 0.114998 -0.07 0.014999, + 0.114998 -0.07 0.002998, + -0.040459 -0.119812 0.237736, + -0.016930001 -0.120834 0.237736, + -0.016945001 -0.120392 0.238415, + -0.040421002 -0.11937 0.238415, + -0.19999699 -0.099854 0.237762, + -0.199944 -0.100006 0.212585, + -0.19999699 -0.100006 0.21305799, + -0.039802998 -0.12001 0.237, + -0.19999699 -0.100006 0.237, + 0.051476002 0.107635 0.237736, + 0.07209 0.098373003 0.237762, + 0.051323 0.107224 0.238415, + 0.029495001 0.114639 0.237736, + 0.051064 0.107941 0.237, + 0.072159 0.098494999 0.237, + 0.029381 -0.114197 0.238415, + 0.019508 -0.098082997 0.25499901, + 0.029495001 -0.114639 0.237736, + 0.0064849998 -0.118652 0.238414, + -0.030037001 -0.072509997 0.257999, + -0.015312 -0.076995999 0.25799999, + -0.038268998 -0.092391998 0.25500101, + -0.043609999 -0.065277003 0.257999, + 0.083145 -0.055557001 0.25499699, + 0.015312 -0.076995999 0.25799999, + -6.4788539e-012 0.078491002 0.25799999, + 0.015312 0.076995999 0.25799999, + -0.015312 0.076995999 0.25799999, + -6.5974773e-012 0.100006 0.255, + -0.065269001 0.043609999 0.258003, + 0.073448002 0.096954003 0.23841099, + 0.073729999 0.097305 0.23774, + 0.070708998 0.070708998 0.25499699, + 0.104004 -0.039841 0.23841099, + 0.105598 0.112437 1.731522e-013, + 0.105606 0.112436 0.020088, + 0.105598 0.112437 5.5929122e-013, + 0.090461999 0.115 -5.790526e-012, + 0.10788 0.109437 0.010155, + 0.108856 0.10606 0.020308999, + 0.107819 0.10955 -5.6947836e-012, + 0.108856 0.106061 1.5781817e-011, + 0.102379 0.114382 0.010155, + 0.098922998 0.115 0.019997001, + 0.10273 0.114243 0.020035001, + 0.102493 0.114337 3.1982201e-012, + 0.098922998 0.115 5.0088219e-012, + 0.096081004 0.063110001 0.237, + 0.10104 0.051070999 0.237, + 0.104939 0.038635001 0.237, + 0.107424 0.026900999 0.23774, + -0.129997 -0.115 -1.2230799e-011, + -0.022499001 -0.122 0.014999, + -0.022499001 -0.122 0.003, + -0.129997 -0.115 0.020004001, + -0.13382 -0.114239 -1.0828014e-011, + -0.133682 -0.114298 0.010178, + 0.022499001 -0.122 0.003, + -0.13707 -0.112071 -1.9408523e-011, + 0.098922998 -0.115 0.019997001, + 0.029030001 -0.114899 0.237, + 0.051070999 -0.107941 0.237, + 0.102486 -0.114337 -1.370406e-011, + 0.102386 -0.114382 0.010155, + 0.098922998 -0.115 -1.4115289e-011, + 0.072525002 -0.030029001 0.258003, + 0.092387997 -0.038268998 0.25499699, + 0.076990999 -0.01532 0.258003, + -0.072525002 -0.030029001 0.258003, + -0.065269001 -0.043609999 0.258003, + 0.043609999 -0.065277003 0.257999, + 0.055507999 -0.055511001 0.257999, + 0.030037001 -0.072509997 0.257999, + 0.065269001 -0.043609999 0.258003, + 0.098077998 0.019516001 0.25499699, + 0.078500003 -5.8356128e-012 0.258003, + 0.1 -5.3604243e-012 0.25499699, + 0.099933997 0.052382998 0.23841099, + 0.094856001 0.064331003 0.23841099, + 0.100349 0.052536 0.23774, + 0.104004 0.039841 0.23841099, + 0.104435 0.039963 0.23774, + 0.043609999 0.065277003 0.257999, + 0.055507999 0.055511001 0.257999, + 0.055557001 0.083145 0.25500101, + 0.038268998 0.092391998 0.25500101, + 0.030037001 0.072509997 0.257999, + 0.075232998 0.096023999 0.237, + 0.090095997 0.074676998 0.237, + 0.107712 0.109774 0.02018, + 0.083130002 0.085677996 0.237, + 0.095261 0.064514004 0.23774, + 0.10104 -0.051070999 0.237, + 0.107424 -0.026900999 0.23774, + 0.104435 -0.039963 0.23774, + 0.098077998 -0.019516001 0.25499699, + 0.109247 -0.013535 0.237747, + 0.107742 -0.025924999 0.237, + 0.104939 -0.038635001 0.237, + 0.075232998 -0.096023999 0.237, + 0.075119004 -0.095931999 0.237762, + 0.10788 -0.109437 0.010155, + 0.108849 -0.10606 0.020308999, + 0.107819 -0.10955 -2.7269539e-012, + 0.108849 -0.106061 -1.4863203e-011, + 0.105606 -0.112436 0.020088, + 0.10273 -0.114243 0.020035001, + 0.105606 -0.112436 0.020088, + 0.105598 -0.112437 9.5793538e-012, + 0.072525002 0.030029001 0.258003, + 0.092387997 0.038268998 0.25499699, + 0.065269001 0.043609999 0.258003, + 0.076991998 0.01532 0.258003, + 0.082161002 0.086029001 0.23841099, + 0.074782997 0.095656998 0.23841099, + 0.075119004 0.095931999 0.237762, + 0.082520001 0.086287998 0.23774, + 0.083145 0.055557001 0.25499699, + 0.088890001 0.075576998 0.23841099, + 0.089279003 0.075790003 0.23774, + 0.100349 -0.052536 0.23774, + 0.096081004 -0.063110001 0.237, + 0.099933997 -0.052382998 0.23841099, + 0.094856001 -0.064331003 0.23841099, + 0.089279003 -0.075790003 0.23774, + 0.107704 -0.109774 0.02018, + 0.083130002 -0.085677996 0.237, + 0.090095997 -0.074676998 0.237, + 0.082520001 -0.086287998 0.23774, + 0.082161002 -0.086029001 0.23841099, + 0.088890001 -0.075576998 0.23841099, + 0.095261 -0.064514004 0.23774, + 0.074782997 -0.095656998 0.23841099, + 0.070708998 -0.070708998 0.25499699, + 0.038268998 -0.092391998 0.25500101, + 0.055557001 -0.083145 0.25500101, + 0.07209 -0.098373003 0.237762, + 0.073448002 -0.096954003 0.23841099, + 0.073729999 -0.097305 0.23774, + 0.071892001 -0.097976997 0.23841099, + 0.073821999 -0.097411998 0.237, + 0.072159 -0.098494999 0.237, + 0.051483002 -0.107635 0.237736, + 0.051314998 -0.107224 0.238415 ] + + } + coordIndex [ 116, 183, 137, -1, 3, 60, 31, -1, + 78, 77, 183, -1, 181, 183, 77, -1, + 1, 84, 6, -1, 38, 37, 0, -1, + 17, 60, 6, -1, 17, 46, 60, -1, + 5, 3, 31, -1, 2, 13, 1, -1, + 2, 1, 6, -1, 2, 6, 60, -1, + 2, 60, 3, -1, 35, 39, 38, -1, + 35, 38, 0, -1, 35, 0, 37, -1, + 70, 76, 75, -1, 68, 21, 78, -1, + 68, 78, 183, -1, 7, 17, 6, -1, + 14, 137, 84, -1, 14, 84, 1, -1, + 14, 1, 13, -1, 12, 3, 11, -1, + 12, 13, 2, -1, 12, 2, 3, -1, + 9, 116, 137, -1, 22, 46, 48, -1, + 16, 17, 83, -1, 82, 47, 23, -1, + 82, 23, 16, -1, 82, 16, 83, -1, + 100, 48, 46, -1, 18, 46, 147, -1, + 18, 19, 46, -1, 27, 147, 108, -1, + 27, 108, 25, -1, 27, 18, 147, -1, + 59, 60, 46, -1, 10, 11, 3, -1, + 10, 3, 5, -1, 10, 5, 37, -1, + 33, 107, 64, -1, 33, 30, 107, -1, + 4, 37, 5, -1, 4, 35, 37, -1, + 4, 5, 31, -1, 4, 31, 35, -1, + 176, 181, 77, -1, 85, 6, 84, -1, + 85, 7, 6, -1, 87, 83, 17, -1, + 87, 17, 7, -1, 87, 7, 85, -1, + 8, 116, 9, -1, 8, 37, 116, -1, + 8, 10, 37, -1, 8, 11, 10, -1, + 8, 13, 12, -1, 8, 12, 11, -1, + 8, 9, 137, -1, 8, 137, 14, -1, + 8, 14, 13, -1, 15, 16, 23, -1, + 15, 100, 46, -1, 15, 23, 100, -1, + 15, 46, 17, -1, 15, 17, 16, -1, + 81, 47, 82, -1, 81, 97, 47, -1, + 26, 19, 18, -1, 26, 18, 27, -1, + 26, 46, 19, -1, 26, 59, 46, -1, + 20, 25, 108, -1, 20, 108, 59, -1, + 20, 59, 25, -1, 61, 59, 44, -1, + 61, 44, 43, -1, 34, 30, 33, -1, + 34, 35, 31, -1, 63, 36, 39, -1, + 63, 33, 64, -1, 67, 21, 68, -1, + 67, 78, 21, -1, 67, 73, 78, -1, + 131, 132, 136, -1, 51, 164, 65, -1, + 51, 64, 107, -1, 51, 65, 64, -1, + 90, 65, 164, -1, 41, 163, 109, -1, + 41, 164, 163, -1, 41, 90, 164, -1, + 45, 44, 59, -1, 49, 22, 48, -1, + 49, 46, 22, -1, 99, 100, 23, -1, + 99, 23, 47, -1, 209, 145, 102, -1, + 154, 108, 147, -1, 177, 181, 176, -1, + 52, 77, 76, -1, 52, 176, 77, -1, + 52, 76, 70, -1, 174, 155, 154, -1, + 24, 25, 59, -1, 24, 59, 26, -1, + 24, 27, 25, -1, 24, 26, 27, -1, + 57, 106, 107, -1, 57, 61, 106, -1, + 57, 107, 30, -1, 57, 30, 58, -1, + 28, 106, 61, -1, 28, 61, 43, -1, + 28, 108, 106, -1, 28, 43, 108, -1, + 29, 58, 30, -1, 29, 30, 34, -1, + 29, 34, 31, -1, 29, 31, 60, -1, + 29, 60, 58, -1, 32, 63, 39, -1, + 32, 33, 63, -1, 32, 34, 33, -1, + 32, 39, 35, -1, 32, 35, 34, -1, + 62, 36, 63, -1, 122, 39, 36, -1, + 122, 36, 62, -1, 122, 62, 123, -1, + 125, 116, 37, -1, 125, 37, 38, -1, + 125, 38, 39, -1, 125, 39, 122, -1, + 114, 123, 93, -1, 114, 166, 168, -1, + 114, 115, 123, -1, 127, 128, 168, -1, + 118, 168, 128, -1, 118, 128, 74, -1, + 66, 120, 73, -1, 66, 73, 67, -1, + 86, 131, 55, -1, 86, 55, 80, -1, + 135, 87, 85, -1, 221, 96, 140, -1, + 221, 222, 96, -1, 40, 136, 138, -1, + 40, 138, 54, -1, 40, 54, 55, -1, + 40, 55, 131, -1, 40, 131, 136, -1, + 143, 138, 136, -1, 143, 137, 183, -1, + 139, 54, 138, -1, 139, 140, 96, -1, + 92, 93, 123, -1, 92, 123, 62, -1, + 89, 109, 110, -1, 89, 41, 109, -1, + 89, 90, 41, -1, 42, 43, 44, -1, + 42, 44, 45, -1, 42, 108, 43, -1, + 42, 59, 108, -1, 42, 45, 59, -1, + 111, 109, 163, -1, 95, 103, 47, -1, + 95, 213, 103, -1, 95, 47, 97, -1, + 148, 147, 46, -1, 148, 46, 49, -1, + 50, 47, 103, -1, 50, 99, 47, -1, + 50, 148, 99, -1, 101, 48, 100, -1, + 101, 49, 48, -1, 101, 148, 49, -1, + 211, 102, 212, -1, 202, 145, 209, -1, + 152, 212, 102, -1, 152, 102, 145, -1, + 152, 50, 103, -1, 152, 148, 50, -1, + 105, 51, 107, -1, 105, 164, 51, -1, + 105, 165, 164, -1, 190, 196, 111, -1, + 190, 165, 105, -1, 190, 108, 154, -1, + 194, 166, 110, -1, 112, 174, 145, -1, + 175, 176, 52, -1, 175, 155, 174, -1, + 175, 70, 155, -1, 175, 52, 70, -1, + 53, 97, 81, -1, 53, 81, 80, -1, + 53, 96, 97, -1, 53, 55, 54, -1, + 53, 80, 55, -1, 53, 54, 139, -1, + 53, 139, 96, -1, 56, 57, 58, -1, + 56, 60, 59, -1, 56, 58, 60, -1, + 56, 59, 61, -1, 56, 61, 57, -1, + 91, 62, 63, -1, 91, 64, 65, -1, + 91, 63, 64, -1, 91, 92, 62, -1, + 91, 65, 90, -1, 119, 120, 66, -1, + 119, 66, 67, -1, 119, 68, 183, -1, + 119, 67, 68, -1, 119, 183, 116, -1, + 124, 123, 115, -1, 124, 116, 125, -1, + 69, 114, 93, -1, 69, 89, 110, -1, + 69, 93, 89, -1, 69, 110, 166, -1, + 69, 166, 114, -1, 71, 75, 74, -1, + 71, 153, 155, -1, 71, 70, 75, -1, + 71, 155, 70, -1, 129, 74, 128, -1, + 129, 153, 71, -1, 129, 71, 74, -1, + 158, 168, 126, -1, 158, 127, 168, -1, + 72, 73, 120, -1, 72, 120, 118, -1, + 72, 118, 74, -1, 72, 74, 75, -1, + 72, 75, 76, -1, 72, 76, 77, -1, + 72, 77, 78, -1, 72, 78, 73, -1, + 79, 86, 80, -1, 79, 81, 82, -1, + 79, 80, 81, -1, 79, 82, 83, -1, + 79, 83, 87, -1, 79, 87, 86, -1, + 134, 84, 137, -1, 134, 85, 84, -1, + 134, 135, 85, -1, 133, 131, 86, -1, + 133, 86, 87, -1, 133, 87, 135, -1, + 204, 181, 177, -1, 204, 177, 171, -1, + 204, 178, 186, -1, 220, 221, 140, -1, + 187, 204, 186, -1, 142, 138, 143, -1, + 88, 90, 89, -1, 88, 91, 90, -1, + 88, 92, 91, -1, 88, 93, 92, -1, + 88, 89, 93, -1, 94, 213, 95, -1, + 94, 96, 222, -1, 94, 222, 213, -1, + 94, 97, 96, -1, 94, 95, 97, -1, + 98, 100, 99, -1, 98, 101, 100, -1, + 98, 99, 148, -1, 98, 148, 101, -1, + 208, 209, 102, -1, 208, 102, 211, -1, + 208, 211, 179, -1, 201, 145, 202, -1, + 201, 112, 145, -1, 146, 145, 174, -1, + 146, 174, 154, -1, 151, 152, 103, -1, + 151, 103, 213, -1, 150, 214, 212, -1, + 150, 212, 152, -1, 189, 196, 190, -1, + 189, 197, 196, -1, 189, 157, 197, -1, + 162, 111, 163, -1, 162, 190, 111, -1, + 104, 190, 105, -1, 104, 107, 106, -1, + 104, 105, 107, -1, 104, 106, 108, -1, + 104, 108, 190, -1, 193, 110, 109, -1, + 193, 194, 110, -1, 193, 109, 111, -1, + 193, 111, 196, -1, 173, 171, 177, -1, + 173, 112, 201, -1, 173, 174, 112, -1, + 113, 168, 119, -1, 113, 114, 168, -1, + 113, 115, 114, -1, 113, 119, 116, -1, + 113, 116, 124, -1, 113, 124, 115, -1, + 117, 168, 118, -1, 117, 119, 168, -1, + 117, 118, 120, -1, 117, 120, 119, -1, + 121, 122, 123, -1, 121, 123, 124, -1, + 121, 125, 122, -1, 121, 124, 125, -1, + 170, 158, 126, -1, 170, 126, 168, -1, + 170, 168, 167, -1, 170, 197, 157, -1, + 159, 189, 153, -1, 160, 128, 127, -1, + 160, 127, 158, -1, 160, 129, 128, -1, + 160, 153, 129, -1, 160, 159, 153, -1, + 130, 132, 131, -1, 130, 131, 133, -1, + 130, 135, 134, -1, 130, 133, 135, -1, + 130, 136, 132, -1, 130, 143, 136, -1, + 130, 137, 143, -1, 130, 134, 137, -1, + 219, 186, 178, -1, 182, 204, 187, -1, + 185, 138, 142, -1, 185, 140, 139, -1, + 185, 139, 138, -1, 185, 220, 140, -1, + 141, 142, 143, -1, 141, 182, 187, -1, + 141, 187, 185, -1, 141, 185, 142, -1, + 141, 143, 183, -1, 141, 183, 182, -1, + 207, 208, 179, -1, 207, 179, 178, -1, + 207, 178, 204, -1, 207, 204, 205, -1, + 144, 152, 145, -1, 144, 145, 146, -1, + 144, 146, 154, -1, 144, 154, 147, -1, + 144, 147, 148, -1, 144, 148, 152, -1, + 149, 214, 150, -1, 149, 213, 214, -1, + 149, 151, 213, -1, 149, 152, 151, -1, + 149, 150, 152, -1, 191, 153, 189, -1, + 191, 190, 154, -1, 191, 155, 153, -1, + 191, 154, 155, -1, 156, 157, 189, -1, + 156, 170, 157, -1, 156, 158, 170, -1, + 156, 189, 159, -1, 156, 160, 158, -1, + 156, 159, 160, -1, 161, 162, 163, -1, + 161, 163, 164, -1, 161, 164, 165, -1, + 161, 165, 190, -1, 161, 190, 162, -1, + 195, 168, 166, -1, 195, 169, 168, -1, + 195, 166, 194, -1, 198, 167, 168, -1, + 198, 168, 169, -1, 198, 169, 195, -1, + 198, 197, 170, -1, 198, 170, 167, -1, + 199, 171, 173, -1, 199, 173, 201, -1, + 199, 204, 171, -1, 199, 200, 204, -1, + 172, 174, 173, -1, 172, 176, 175, -1, + 172, 175, 174, -1, 172, 177, 176, -1, + 172, 173, 177, -1, 217, 178, 179, -1, + 217, 219, 178, -1, 217, 179, 211, -1, + 180, 181, 204, -1, 180, 204, 182, -1, + 180, 183, 181, -1, 180, 182, 183, -1, + 184, 220, 185, -1, 184, 186, 219, -1, + 184, 219, 220, -1, 184, 187, 186, -1, + 184, 185, 187, -1, 188, 189, 190, -1, + 188, 190, 191, -1, 188, 191, 189, -1, + 192, 194, 193, -1, 192, 195, 194, -1, + 192, 193, 196, -1, 192, 196, 197, -1, + 192, 197, 198, -1, 192, 198, 195, -1, + 210, 200, 199, -1, 210, 201, 202, -1, + 210, 199, 201, -1, 210, 202, 209, -1, + 210, 204, 200, -1, 210, 206, 204, -1, + 203, 205, 204, -1, 203, 204, 206, -1, + 203, 207, 205, -1, 203, 209, 208, -1, + 203, 208, 207, -1, 203, 210, 209, -1, + 203, 206, 210, -1, 216, 217, 211, -1, + 216, 212, 214, -1, 216, 211, 212, -1, + 218, 213, 222, -1, 218, 214, 213, -1, + 218, 216, 214, -1, 215, 217, 216, -1, + 215, 216, 218, -1, 215, 220, 219, -1, + 215, 219, 217, -1, 215, 221, 220, -1, + 215, 222, 221, -1, 215, 218, 222, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link1.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link1.wrl new file mode 100644 index 00000000..8c3f2508 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link1.wrl @@ -0,0 +1,891 @@ +#VRML V2.0 utf8 + + +DEF link1 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.168144 0.094008997 0.055557001, + -0.185 0.094008997 -2.1967122e-013, + -0.184222 0.049743999 -0.012451, + -0.070006996 0.017333999 -0.16198701, + -0.025009001 0.043304 -0.16198701, + 0.078143999 -0.015656 -0.038757, + 0.072439998 0.034118999 -1.3731891e-012, + 0.078308001 0.0035399999 -0.082001001, + 0.079631999 -0.0032649999 -0.038757, + 0.079999 -0.0032649999 0.0045170002, + 0.052680999 0.052673001 0.093993999, + 0.061942998 0.041382 0.093993999, + 0.018736999 -0.077820003 0.0045170002, + 0.036423001 -0.069397002 -0.081992999, + -0.178207 0.049743999 0.036224, + -0.177387 0.094008997 0.038268998, + -0.14055599 0.093993999 0.083145, + -0.181923 0.049743999 -0.024628, + -0.178207 0.049743999 -0.036224, + -0.123268 0.093993999 -0.092377, + -0.123268 0.093993999 -0.092377, + -0.001854 0.094008997 -0.055542, + 0.077248 0.013336 -0.082001001, + 0.074478 0.019958001 -0.13308699, + 0.076126002 0.02359 -0.038757, + -0.001854 0.094008997 0.055557001, + 0.0073890002 0.094008997 0.038268998, + 0.042610001 0.078766003 0.089988999, + -0.001579 -0.078368999 -0.082001001, + -0.18394899 0.013794 -0.014465, + -0.115555 -0.017059 -0.13281301, + -0.118958 -0.0088200001 -0.132751, + -0.168148 0.070220999 -0.055542, + -0.173233 0.049743999 -0.047058001, + -0.177387 0.094008997 -0.038268998, + -0.18307699 0.094008997 -0.019501001, + -0.022887999 -0.052338 -0.155121, + 0.004894 -0.079346001 0.047759999, + 0.0049299998 -0.079925999 0.0045170002, + 0.016113 -0.076995999 0.074920997, + 0.0098080002 -0.078795999 0.050995, + 0.014404 -0.076995999 0.083282001, + 0.018603999 -0.077271 0.047759999, + 0.061942998 -0.041382 0.093993999, + 0.052680999 -0.052673001 0.093993999, + 0.041389 -0.061951 0.093993999, + 0.041389 -0.061951 0.093993999, + 0.019463001 -0.076995999 0.050987002, + 0.031385999 -0.073669001 0.0045170002, + 0.038277 -0.067962997 0.091003001, + 0.031166 -0.073151 0.047759999, + 0.075369 -0.027008001 0.0045170002, + -0.173233 0.049743999 0.047058001, + -0.168144 0.094008997 0.055557001, + 0.041389 0.061951 0.093993999, + 0.028511001 0.068816997 0.094002001, + -0.016541 0.054687999 -0.155121, + 0.076447003 0.010071 -0.13308699, + 0.079943001 -1.0711104e-012 0.022766, + 0.078139998 0.017487001 3.2908431e-012, + 0.080071002 7.0747171e-012 3.7165492e-012, + 0.079066999 0.01001 -0.038757, + 0.050099999 0.092009999 0.015625, + 0.013079 0.094008997 0.019516001, + 0.042319998 -0.067534998 -0.038764998, + -0.0094410004 -0.079131998 -0.038757, + -7.1619056e-012 -0.077118002 -0.13308699, + -0.0096129999 -0.056304999 -0.155121, + -0.012955 -0.048278999 -0.16198701, + 0.012939 -0.048278999 -0.16198701, + -0.18394899 0.013794 0.014465, + -0.181923 0.049743999 0.024628, + -0.18079001 0.012146 0.028717, + -0.18307699 0.094008997 0.019516001, + -0.184222 0.049743999 0.012451, + -0.023716001 -0.076080002 -0.038757, + -0.185 0.014343 -6.24917e-012, + -0.18394899 0.013794 -0.014465, + -0.185 0.014343 5.8639591e-012, + -0.18394899 0.013794 0.014465, + -0.083541997 0.016876001 -0.15505999, + -0.074142002 0.01413 -0.16198701, + -0.097000003 -0.013794 -0.14785799, + -0.1064 -0.015594 -0.140411, + -0.092651002 -0.019531 -0.14785799, + -0.077331997 -0.01001 -0.16198701, + -0.077331997 -0.01001 -0.16198701, + -0.087311 -0.011932 -0.15505999, + -0.168144 0.094008997 -0.055542, + -0.080002002 3.2716442e-012 -0.16198701, + -0.079329997 -0.0051879999 -0.16198701, + -0.089676 -0.0061650001 -0.15505999, + -0.099747002 -0.0071410001 -0.147888, + -0.109497 -0.0080869999 -0.140442, + -0.103058 -0.029541001 -0.13308699, + -0.086792 -0.023833999 -0.14798, + -0.101471 -0.022064 -0.140411, + -0.110123 -0.024109 -0.13290399, + -0.168148 0.0055240002 -0.055542, + -0.168148 0.0055240002 -0.055542, + -0.032028001 -0.05545 -0.14798, + -0.067290999 -0.042785998 -0.14065599, + -0.02832 -0.064788997 -0.14065599, + -0.025009001 -0.043304 -0.16198701, + -0.025009001 -0.043304 -0.16198701, + -0.083541997 -0.016876001 -0.15505999, + -0.074142002 -0.01413 -0.16198701, + 3.7664589e-012 -0.079406999 0.050995, + 0.014534 -0.073059 0.093993999, + 0.025764 -0.073608004 0.091003001, + 0.012451 -0.076995999 0.091003001, + 0.028511001 -0.068816997 0.094002001, + 0.065883003 -0.045502 0.0045170002, + -0.155937 0.070496 0.070220999, + -0.16027801 0.070404001 0.065825999, + -0.15159599 0.070556998 0.074584998, + -0.14055599 0.093993999 0.083145, + -0.142204 0.070679002 0.082030997, + -0.041389 -0.061951 0.093993999, + -0.084999003 0.071014002 0.100006, + 4.478716e-012 -0.074492998 0.093993999, + -0.097916 0.070983998 0.099151999, + -0.110023 0.070952997 0.096832, + -0.103973 0.070952997 0.097992003, + 0.033142 0.092009999 0.064484, + 0.036880001 0.083466001 0.089996003, + 0.030609 0.092009999 0.065613002, + -0.029441999 0.093993999 0.083145, + -0.01429 0.094008997 0.070708998, + -0.046730001 0.093993999 0.092391998, + 0.042969 0.092009999 0.046050999, + 0.041122001 0.081084996 0.089996003, + 0.041122001 0.081084996 0.089996003, + 0.047410998 0.092009999 0.031036001, + 0.036830999 0.092009999 0.060454998, + 0.036830999 0.092009999 0.060454998, + 0.035271 0.091980003 0.062743999, + 0.039184999 0.082611002 0.089996003, + 0.042969 0.092009999 0.046050999, + -0.065490998 0.093993999 0.098082997, + -0.065490998 0.093993999 0.098082997, + -0.084999003 0.093993999 -0.100006, + -0.155708 0.094008997 -0.070708998, + 0.0073890002 0.094008997 -0.038268998, + -0.065490998 0.093993999 -0.098082997, + 0.066771999 0.038543999 -0.13308699, + 0.070251003 0.0078739999 -0.14065599, + 0.056763001 0.0063479999 -0.155121, + 0.063629001 0.0071410001 -0.14798, + 0.073067002 0.014526 0.093993999, + 0.073067002 0.014526 0.093993999, + 0.073067002 -0.014526 0.093993999, + 0.074836999 -0.026825 0.047759999, + 0.078506 -0.015747 0.0045170002, + 0.067345001 -0.039368 0.091003001, + 0.068832003 -0.028503001 0.093993999, + 0.061942998 -0.041382 0.093993999, + 0.059395 -0.050567999 0.091003001, + 0.070525996 -0.036681999 0.047759999, + 0.065417998 -0.045166001 0.047759999, + 0.071227998 -0.029510001 -0.13308699, + 0.074478 -0.019958001 -0.13308699, + 0.071028002 -0.036956999 0.0045170002, + 0.07502 -0.026885999 -0.038757, + 0.066284001 -0.024536001 -0.14065599, + 0.064025998 -1.6199089e-013 -0.14798, + 0.056763001 -0.0063780001 -0.155121, + 0.048294 -0.012939 -0.16198701, + 0.049988002 2.8513455e-012 -0.16198701, + 0.057128999 7.0655283e-012 -0.155121, + 0.042217001 -0.067351997 0.047759999, + 0.049605999 -0.060210999 0.091003001, + 0.059296001 -0.052948002 0.047759999, + 0.056641001 -0.029846 -0.14798, + -0.011902 -0.069672003 -0.14065599, + -0.010071 -0.076447003 -0.13308699, + -0.019958001 -0.074492998 -0.13308699, + 0.005539 -0.056853998 -0.155121, + 0.012939 -0.048278999 -0.16198701, + -3.6797379e-012 -0.049988002 -0.16198701, + 0.013397 -0.055542 -0.155121, + -0.002197 -0.057098001 -0.155121, + 0.0049060001 -0.079529002 -0.038757, + -0.018539 -0.061278999 -0.14798, + -0.010773 -0.063110001 -0.14798, + -0.016541 -0.054687999 -0.155121, + -0.020477001 -0.067657001 -0.14065599, + -0.02565 -0.058685001 -0.14798, + 0.028564001 -0.049469002 -0.155113, + 0.031242 -0.073334001 -0.038757, + -0.077331997 0.01001 -0.16198701, + -0.118958 0.0088200001 -0.132751, + -0.120117 6.7868703e-013 -0.132751, + -0.11055 6.6713616e-013 -0.140442, + -0.100677 4.0973158e-012 -0.147888, + -0.175522 0.0093989996 -0.042479999, + -0.18079001 0.012146 -0.028717, + -0.034727 -0.072144002 -4.0114409e-012, + -0.16384099 0.003082 -0.057495002, + -0.16664501 0.0046999999 -0.057312001, + -0.166897 0.0047610002 -0.054717999, + -0.099834003 -0.033844002 -0.058502, + -0.060516 -0.031036001 -0.155121, + -0.070006996 -0.017333999 -0.16198701, + -0.028580001 -0.049469002 -0.155121, + -0.078537002 -0.02063 -0.155121, + -0.063965 -0.037018001 -0.14798, + -0.023829 -0.076447003 0.0045170002, + -0.0094879996 -0.079498 0.0045170002, + -0.049605999 -0.060180999 0.091003001, + -0.159832 0.00085399998 0.059997998, + -0.166897 0.0047610002 0.054717999, + -0.168148 0.0055240002 0.055542, + -0.175522 0.0093989996 0.042479999, + -0.165501 0.0039980002 0.056304999, + -0.014534 -0.073059 0.093993999, + -0.028511001 -0.068816997 0.093993999, + -0.014534 -0.073059 0.093993999, + -0.012451 -0.076995999 0.091003001, + -5.0630012e-012 -0.074492998 0.093993999, + -0.104507 0.093993999 0.098082997, + -0.084999003 0.093993999 0.100006, + -0.084999003 0.093993999 0.100006, + -0.155708 0.094008997 0.070708998, + -0.104507 0.093993999 0.098082997, + -0.084999003 0.093993999 0.100006, + -0.123268 0.093993999 0.092391998, + -0.104507 0.093993999 -0.098082997, + -0.010071 0.076447003 -0.13308699, + 0.035271 0.091980003 -0.062743999, + 0.036830999 0.092009999 -0.060454998, + 0.042969 0.092009999 -0.046043001, + 0.030609 0.092009999 -0.065613002, + -0.029441999 0.093993999 -0.083159998, + 0.033142 0.092009999 -0.064484, + -0.01429 0.094008997 -0.070708998, + -0.046730001 0.093993999 -0.092377, + 0.066771999 0.038543999 -0.13308699, + 0.057495002 0.041106999 -0.14065599, + 0.074478 0.019958001 -0.13308699, + 0.071227998 0.029510001 -0.13308699, + 0.050099999 0.092009999 0.015625, + 0.064856999 0.043334998 0.091003001, + 0.068832003 0.028503001 0.093993999, + 0.073067002 -0.014526 0.093993999, + 0.073204003 -0.026946999 0.091003001, + 0.077953003 -0.015625 0.047759999, + 0.066771999 -0.038543999 -0.13308699, + 0.071227998 -0.029510001 -0.13308699, + 0.070702001 -0.036773998 -0.038757, + 0.065577999 -0.045288 -0.038757, + 0.060043 -0.022247 -0.14798, + 0.055617999 -0.013031 -0.155121, + 0.053574 -0.019835999 -0.155121, + 0.070251003 -0.0078739999 -0.14065599, + 0.068832003 -0.016113 -0.14065599, + 0.076447003 -0.010071 -0.13308699, + 0.063629001 -0.0071410001 -0.14798, + 0.070694 -5.3166751e-012 -0.14065599, + 0.062346999 -0.014587 -0.14798, + 0.077102996 -6.7974524e-012 -0.13308699, + 0.051961999 -0.060913 0.0045170002, + 0.059714999 -0.053344999 0.0045170002, + 0.051594 -0.060486 0.047759999, + 0.042516999 -0.067841001 0.0045170002, + 0.03537 -0.044861 -0.155121, + 0.035355002 -0.035339002 -0.16198701, + 0.024994001 -0.043304 -0.16198701, + 0.039641999 -0.050292999 -0.14798, + 0.05452 -0.054535002 -0.13308699, + 0.046936002 -0.061188001 -0.13308699, + 0.043761998 -0.055511001 -0.14065599, + 0.059441 -0.053100999 -0.038757, + 0.061172001 -0.046936002 -0.13308699, + 0.051723 -0.060637999 -0.038757, + 0.046463002 -0.033234 -0.155121, + 0.050537001 -0.026642 -0.155121, + 0.043288998 -0.024994001 -0.16198701, + 0.035355002 -0.035339002 -0.16198701, + 0.041382 -0.039368 -0.155113, + 0.046386998 -0.044128001 -0.14798, + 0.057495002 -0.041106999 -0.14065599, + 0.062531002 -0.032958999 -0.14065599, + 0.066771999 -0.038543999 -0.13308699, + 0.052078001 -0.037230998 -0.14798, + 0.061172001 -0.046936002 -0.13308699, + 0.051208001 -0.048737001 -0.14065599, + 0.0062099998 -0.063721001 -0.14798, + 3.9249454e-012 -0.077118002 -0.13308699, + -0.0027310001 -0.070648 -0.14065599, + -0.002472 -0.063995004 -0.14798, + 0.010056 -0.076447003 -0.13308699, + 0.018650001 -0.077483997 -0.038757, + 0.027419999 -0.073455997 -0.081992999, + 0.023712 -0.059478998 -0.14798, + 0.021164 -0.053070001 -0.155121, + 0.032012999 -0.05545 -0.14798, + 0.038543999 -0.066771999 -0.13308699, + 0.029495001 -0.071227998 -0.13308699, + 0.038543999 -0.066771999 -0.13308699, + 0.035339002 -0.061218001 -0.14065599, + 0.046936002 -0.061188001 -0.13308699, + -0.089676 0.0061650001 -0.15505999, + -0.090484999 -4.8689259e-013 -0.15505999, + -0.079329997 0.0051879999 -0.16198701, + -0.079329997 0.0051879999 -0.16198701, + -0.087311 0.011932 -0.15505999, + -0.1064 0.015594 -0.140411, + -0.109497 0.0080869999 -0.140442, + -0.115555 0.017059 -0.13281301, + -0.14055599 0.093993999 -0.083159998, + -0.097000003 0.013794 -0.14785799, + -0.099747002 0.0071410001 -0.147888, + -0.034683 -0.071319997 -0.05542, + -0.034366999 -0.071533002 -0.053497002, + -0.035633001 -0.070800997 -0.057037, + -0.03706 -0.070037998 -0.058104999, + -0.038738001 -0.069091998 -0.058502, + -0.039608002 -0.068604 -0.058502, + -0.0094179995 -0.078948997 0.047759999, + -0.019459 -0.076995999 0.050995, + -0.023659 -0.075897001 0.047759999, + -0.061942998 -0.041382 0.093993999, + -0.052680999 -0.052673001 0.093993999, + -0.16237301 0.002319 0.059661999, + -0.068824999 -0.028503001 0.093993999, + -0.164692 0.0036319999 0.058745999, + -0.164692 0.0036319999 0.058745999, + -0.038738001 -0.069091998 0.058502, + -0.039608002 -0.068604 0.058502, + -0.039585002 -0.068572998 0.059997998, + -0.034635998 -0.071990997 0.026764, + -0.03706 -0.070037998 0.058104999, + -0.0027310001 0.070648 -0.14065599, + -5.7914481e-012 0.077118002 -0.13308699, + -0.010071 0.076447003 -0.13308699, + -0.011902 0.069701999 -0.14065599, + 0.010056 0.076447003 -0.13308699, + 0.038543999 0.066771999 -0.13308699, + -0.012955 0.048308998 -0.16198701, + 0.034653001 0.031769 -0.16199499, + -0.012955 0.048308998 -0.16198701, + 0.050099 0.092009999 -0.015625, + 0.050099 0.092009999 -0.015625, + 0.047410998 0.092009999 -0.031036001, + 0.047410998 0.092009999 -0.031036001, + 0.013079 0.094008997 -0.019501001, + 0.015 0.094008997 2.3703053e-012, + 0.05452 0.054535002 -0.13308699, + 0.061172001 0.046936002 -0.13308699, + 0.035355002 0.03537 -0.16198701, + 0.068832003 0.016113 -0.14065599, + 0.066284001 0.024536001 -0.14065599, + 0.062531002 0.032958999 -0.14065599, + 0.072067 0.029846 0.091003001, + 0.079437003 -0.003235 0.047759999, + 0.079556003 4.824459e-012 0.045502, + 0.079556003 6.4561091e-012 0.045502, + 0.016586 -0.068726003 -0.14065599, + 0.015015 -0.062256001 -0.14798, + 0.026184 -0.065673999 -0.14065599, + 0.019943001 -0.074463002 -0.13308699, + 0.010056 -0.076447003 -0.13308699, + 0.0068509998 -0.070373997 -0.14065599, + -0.038559001 -0.066771999 -0.13308699, + -0.029510001 -0.071227998 -0.13308699, + -0.038559001 -0.066771999 -0.13308699, + -0.038559001 -0.066771999 -0.13308699, + -0.102753 -0.029724 -0.13308699, + -0.102753 -0.029724 -0.13308699, + -0.016121 -0.076995999 0.074890003, + -0.0098040001 -0.078795999 0.050995, + -0.012451 -0.076995999 0.091003001, + -0.017792 -0.076995999 0.064575002, + -0.12677801 0.070831001 0.090668, + -0.13214099 0.070800997 0.088196002, + -0.121422 0.070891999 0.093139999, + -0.16237301 0.002319 0.059661999, + -0.034683 -0.071319997 0.05542, + -0.025764 -0.073608004 0.091003001, + -0.038277 -0.067962997 0.091003001, + -0.035633001 -0.070800997 0.057037, + -0.034366999 -0.071533002 0.053497002, + 0.029495001 0.071227998 -0.13308699, + 0.019943001 0.074492998 -0.13308699, + 0.043761998 0.055511001 -0.14065599, + 0.046936002 0.061188001 -0.13308699, + 0.05452 0.054535002 -0.13308699, + 0.035339002 0.061218001 -0.14065599, + -0.0096129999 0.056304999 -0.155121, + -0.010773 0.063110001 -0.14798, + 0.046386998 0.044128001 -0.14798, + 0.039641999 0.050292999 -0.14798, + 0.041382 0.039368 -0.155113, + 0.051208001 0.048737001 -0.14065599, + 0.052078001 0.037230998 -0.14798, + 0.046463002 0.033234 -0.155121, + 0.053574 0.019835999 -0.155121, + 0.056641001 0.029846 -0.14798, + 0.050537001 0.026642 -0.155121, + 0.060043 0.022217 -0.14798, + 0.043288998 0.024994001 -0.16198701, + 0.048294 0.012939 -0.16198701, + 0.055617999 0.013031 -0.155121, + 0.062346999 0.014587 -0.14798, + 0.076374002 0.022278 0.045502, + 0.078208998 0.010468 0.068268001, + 0.078850001 0.010559 0.045502, + 0.075751998 0.022095 0.068268001, + 0.079235002 0.01062 0.022766, + 0.076746002 0.022368999 0.022766, + 0.050999999 0.092009999 -2.5253541e-013, + 0.078002997 6.2976993e-012 0.091003001, + 0.076789998 -0.013672 0.091003001, + 0.074501 -4.4471059e-012 0.093993999, + 0.078002997 2.977783e-013 0.091003001, + 0.076499999 0.015228 0.091003001, + 0.028564001 0.049469002 -0.155113, + 0.03537 0.044861 -0.155121, + 0.024994001 0.043304 -0.16198701, + 0.032012999 0.05545 -0.14798, + 0.021164 0.053070001 -0.155121, + 0.023712 0.059478998 -0.14798, + 0.026184 0.065673999 -0.14065599, + 0.016586 0.068726003 -0.14065599, + 0.0068509998 0.070373997 -0.14065599, + 0.005539 0.056853998 -0.155121, + -0.002197 0.057098001 -0.155121, + -7.1597932e-012 0.049988002 -0.16198701, + 0.0062099998 0.063721001 -0.14798, + -0.002472 0.063995004 -0.14798, + 0.015015 0.062256001 -0.14798, + 0.013397 0.055542 -0.155121, + 0.012939 0.048308998 -0.16198701 ] + + } + coordIndex [ 2, 78, 1, -1, 73, 15, 1, -1, + 182, 292, 38, -1, 163, 161, 5, -1, + 163, 5, 153, -1, 4, 20, 341, -1, + 8, 153, 5, -1, 414, 225, 119, -1, + 65, 28, 182, -1, 65, 38, 208, -1, + 65, 182, 38, -1, 207, 65, 208, -1, + 29, 78, 2, -1, 29, 17, 196, -1, + 195, 33, 99, -1, 32, 99, 33, -1, + 310, 20, 81, -1, 310, 19, 20, -1, + 310, 142, 19, -1, 107, 208, 38, -1, + 189, 48, 292, -1, 51, 153, 152, -1, + 51, 163, 153, -1, 74, 1, 78, -1, + 74, 73, 1, -1, 0, 223, 15, -1, + 0, 53, 223, -1, 0, 15, 53, -1, + 114, 223, 53, -1, 16, 223, 116, -1, + 143, 235, 142, -1, 35, 143, 142, -1, + 35, 346, 143, -1, 35, 1, 15, -1, + 35, 2, 1, -1, 35, 17, 29, -1, + 35, 29, 2, -1, 125, 129, 139, -1, + 128, 139, 129, -1, 128, 15, 223, -1, + 128, 35, 15, -1, 128, 346, 35, -1, + 3, 340, 81, -1, 3, 4, 340, -1, + 3, 81, 20, -1, 3, 20, 4, -1, + 339, 340, 4, -1, 339, 4, 341, -1, + 240, 411, 24, -1, 240, 24, 23, -1, + 239, 23, 57, -1, 239, 240, 23, -1, + 7, 260, 57, -1, 7, 8, 260, -1, + 256, 260, 8, -1, 256, 8, 5, -1, + 256, 5, 161, -1, 6, 411, 410, -1, + 6, 24, 411, -1, 6, 410, 24, -1, + 61, 7, 57, -1, 61, 60, 8, -1, + 61, 8, 7, -1, 9, 60, 58, -1, + 9, 8, 60, -1, 9, 153, 8, -1, + 243, 11, 225, -1, 243, 242, 11, -1, + 355, 153, 9, -1, 355, 9, 58, -1, + 10, 11, 131, -1, 10, 131, 54, -1, + 10, 225, 11, -1, 10, 54, 225, -1, + 132, 131, 11, -1, 132, 11, 242, -1, + 168, 340, 402, -1, 272, 273, 250, -1, + 266, 340, 277, -1, 266, 267, 340, -1, + 75, 176, 65, -1, 75, 65, 207, -1, + 18, 195, 196, -1, 30, 83, 97, -1, + 30, 97, 99, -1, 30, 99, 31, -1, + 190, 81, 340, -1, 86, 340, 106, -1, + 192, 31, 99, -1, 192, 99, 32, -1, + 101, 366, 369, -1, 101, 369, 95, -1, + 68, 340, 179, -1, 68, 104, 340, -1, + 36, 68, 185, -1, 103, 36, 204, -1, + 103, 104, 68, -1, 103, 68, 36, -1, + 40, 41, 110, -1, 372, 107, 110, -1, + 12, 292, 48, -1, 12, 38, 292, -1, + 12, 40, 38, -1, 12, 42, 40, -1, + 47, 12, 48, -1, 47, 42, 12, -1, + 44, 157, 156, -1, 46, 44, 119, -1, + 46, 45, 44, -1, 109, 110, 41, -1, + 171, 157, 44, -1, 171, 45, 49, -1, + 171, 44, 45, -1, 13, 189, 299, -1, + 64, 264, 48, -1, 64, 48, 189, -1, + 64, 189, 13, -1, 64, 274, 264, -1, + 64, 13, 299, -1, 14, 15, 72, -1, + 14, 213, 15, -1, 14, 72, 213, -1, + 52, 53, 15, -1, 52, 15, 213, -1, + 71, 15, 73, -1, 71, 72, 15, -1, + 115, 116, 223, -1, 118, 209, 380, -1, + 118, 323, 209, -1, 118, 119, 323, -1, + 121, 119, 225, -1, 121, 323, 119, -1, + 121, 322, 323, -1, 226, 16, 116, -1, + 226, 223, 16, -1, 347, 346, 63, -1, + 21, 235, 143, -1, 34, 17, 35, -1, + 34, 33, 195, -1, 34, 195, 18, -1, + 34, 196, 17, -1, 34, 18, 196, -1, + 126, 129, 125, -1, 55, 225, 54, -1, + 222, 139, 128, -1, 222, 128, 223, -1, + 25, 63, 346, -1, 25, 346, 128, -1, + 25, 26, 63, -1, 227, 20, 19, -1, + 227, 341, 20, -1, 227, 19, 142, -1, + 230, 21, 143, -1, 230, 235, 21, -1, + 146, 57, 260, -1, 22, 23, 24, -1, + 22, 24, 61, -1, 22, 57, 23, -1, + 22, 61, 57, -1, 59, 24, 410, -1, + 59, 61, 24, -1, 150, 225, 414, -1, + 150, 243, 225, -1, 151, 414, 119, -1, + 151, 119, 155, -1, 357, 355, 58, -1, + 241, 133, 242, -1, 135, 26, 25, -1, + 135, 25, 128, -1, 130, 63, 26, -1, + 130, 133, 63, -1, 130, 26, 135, -1, + 27, 242, 133, -1, 27, 132, 242, -1, + 27, 133, 132, -1, 167, 253, 277, -1, + 167, 277, 340, -1, 167, 340, 168, -1, + 255, 256, 161, -1, 262, 274, 272, -1, + 66, 182, 28, -1, 66, 28, 65, -1, + 295, 69, 267, -1, 295, 180, 69, -1, + 79, 331, 72, -1, 329, 213, 72, -1, + 329, 72, 331, -1, 77, 29, 196, -1, + 77, 78, 29, -1, 197, 207, 331, -1, + 197, 75, 207, -1, 197, 77, 196, -1, + 197, 331, 79, -1, 304, 340, 89, -1, + 304, 190, 340, -1, 90, 89, 340, -1, + 90, 340, 86, -1, 93, 92, 83, -1, + 93, 30, 31, -1, 93, 83, 30, -1, + 93, 31, 192, -1, 87, 105, 84, -1, + 88, 192, 32, -1, 88, 32, 33, -1, + 88, 33, 34, -1, 88, 35, 142, -1, + 88, 34, 35, -1, 309, 142, 310, -1, + 194, 92, 93, -1, 96, 84, 95, -1, + 96, 97, 83, -1, 96, 83, 84, -1, + 199, 200, 195, -1, 199, 99, 97, -1, + 206, 101, 95, -1, 365, 366, 102, -1, + 365, 176, 75, -1, 187, 36, 185, -1, + 187, 204, 36, -1, 205, 206, 95, -1, + 205, 95, 84, -1, 205, 84, 105, -1, + 37, 107, 38, -1, 37, 38, 40, -1, + 37, 110, 107, -1, 37, 40, 110, -1, + 39, 41, 40, -1, 39, 40, 42, -1, + 39, 42, 47, -1, 39, 109, 41, -1, + 39, 47, 109, -1, 321, 331, 207, -1, + 319, 208, 107, -1, 43, 44, 156, -1, + 43, 119, 44, -1, 43, 156, 155, -1, + 43, 155, 119, -1, 111, 49, 45, -1, + 111, 109, 49, -1, 111, 45, 46, -1, + 111, 46, 119, -1, 50, 47, 48, -1, + 50, 109, 47, -1, 50, 49, 109, -1, + 50, 48, 264, -1, 170, 171, 49, -1, + 170, 49, 50, -1, 170, 50, 264, -1, + 293, 189, 292, -1, 162, 51, 152, -1, + 162, 152, 158, -1, 162, 163, 51, -1, + 162, 158, 159, -1, 212, 52, 213, -1, + 212, 53, 52, -1, 212, 114, 53, -1, + 212, 327, 115, -1, 117, 115, 327, -1, + 117, 116, 115, -1, 217, 219, 119, -1, + 122, 376, 325, -1, 122, 325, 322, -1, + 122, 226, 376, -1, 127, 128, 129, -1, + 137, 55, 54, -1, 137, 54, 131, -1, + 137, 136, 125, -1, 140, 225, 55, -1, + 140, 55, 137, -1, 140, 125, 139, -1, + 140, 137, 125, -1, 334, 144, 337, -1, + 390, 227, 336, -1, 390, 389, 227, -1, + 390, 336, 430, -1, 56, 389, 341, -1, + 56, 341, 227, -1, 56, 227, 389, -1, + 344, 349, 348, -1, 234, 384, 337, -1, + 234, 235, 230, -1, 401, 402, 340, -1, + 351, 239, 57, -1, 351, 57, 146, -1, + 147, 403, 148, -1, 147, 168, 402, -1, + 147, 402, 403, -1, 245, 158, 152, -1, + 409, 357, 58, -1, 409, 59, 410, -1, + 409, 58, 60, -1, 409, 61, 59, -1, + 409, 60, 61, -1, 356, 355, 357, -1, + 62, 63, 133, -1, 62, 133, 241, -1, + 62, 347, 63, -1, 62, 411, 347, -1, + 62, 241, 411, -1, 258, 148, 146, -1, + 258, 165, 148, -1, 258, 146, 260, -1, + 276, 277, 253, -1, 283, 273, 285, -1, + 164, 255, 161, -1, 252, 253, 167, -1, + 172, 159, 157, -1, 172, 262, 159, -1, + 172, 157, 171, -1, 301, 64, 299, -1, + 301, 274, 64, -1, 280, 268, 265, -1, + 175, 65, 176, -1, 175, 66, 65, -1, + 288, 182, 66, -1, 288, 175, 289, -1, + 288, 66, 175, -1, 186, 102, 187, -1, + 186, 176, 365, -1, 186, 365, 102, -1, + 290, 184, 181, -1, 67, 185, 68, -1, + 67, 184, 185, -1, 67, 181, 184, -1, + 67, 68, 179, -1, 67, 179, 181, -1, + 178, 340, 267, -1, 178, 267, 69, -1, + 178, 179, 340, -1, 178, 69, 180, -1, + 296, 265, 268, -1, 300, 296, 268, -1, + 360, 296, 300, -1, 70, 72, 71, -1, + 70, 79, 72, -1, 70, 71, 73, -1, + 70, 73, 74, -1, 70, 74, 78, -1, + 70, 78, 79, -1, 314, 75, 197, -1, + 314, 365, 75, -1, 76, 78, 77, -1, + 76, 77, 197, -1, 76, 79, 78, -1, + 76, 197, 79, -1, 80, 310, 81, -1, + 80, 306, 310, -1, 80, 81, 190, -1, + 80, 190, 306, -1, 82, 83, 92, -1, + 82, 92, 87, -1, 82, 84, 83, -1, + 82, 87, 84, -1, 85, 90, 86, -1, + 85, 87, 90, -1, 85, 105, 87, -1, + 85, 86, 106, -1, 85, 106, 105, -1, + 91, 87, 92, -1, 91, 90, 87, -1, + 191, 88, 142, -1, 191, 192, 88, -1, + 191, 142, 309, -1, 303, 304, 89, -1, + 303, 89, 90, -1, 303, 90, 91, -1, + 303, 92, 194, -1, 303, 91, 92, -1, + 193, 93, 192, -1, 193, 194, 93, -1, + 312, 303, 194, -1, 94, 95, 369, -1, + 94, 96, 95, -1, 94, 97, 96, -1, + 94, 369, 368, -1, 94, 199, 97, -1, + 94, 368, 199, -1, 98, 195, 99, -1, + 98, 99, 199, -1, 98, 199, 195, -1, + 201, 195, 200, -1, 100, 101, 206, -1, + 100, 187, 102, -1, 100, 206, 204, -1, + 100, 204, 187, -1, 100, 366, 101, -1, + 100, 102, 366, -1, 203, 103, 204, -1, + 203, 104, 103, -1, 203, 105, 106, -1, + 203, 205, 105, -1, 203, 106, 340, -1, + 203, 340, 104, -1, 371, 107, 372, -1, + 371, 319, 107, -1, 120, 372, 110, -1, + 108, 110, 109, -1, 108, 109, 111, -1, + 108, 120, 110, -1, 108, 219, 120, -1, + 108, 119, 219, -1, 108, 111, 119, -1, + 112, 250, 162, -1, 112, 162, 159, -1, + 112, 159, 262, -1, 112, 272, 250, -1, + 112, 262, 272, -1, 214, 213, 329, -1, + 214, 327, 212, -1, 113, 114, 212, -1, + 113, 212, 115, -1, 113, 223, 114, -1, + 113, 115, 223, -1, 326, 117, 327, -1, + 375, 226, 116, -1, 375, 116, 117, -1, + 375, 376, 226, -1, 375, 117, 326, -1, + 382, 331, 321, -1, 382, 321, 379, -1, + 216, 119, 118, -1, 216, 217, 119, -1, + 216, 118, 380, -1, 216, 380, 379, -1, + 218, 379, 372, -1, 218, 120, 219, -1, + 218, 372, 120, -1, 123, 322, 121, -1, + 123, 122, 322, -1, 224, 121, 225, -1, + 224, 226, 122, -1, 224, 123, 121, -1, + 224, 122, 123, -1, 124, 125, 136, -1, + 124, 126, 125, -1, 124, 128, 127, -1, + 124, 129, 126, -1, 124, 127, 129, -1, + 124, 136, 135, -1, 124, 135, 128, -1, + 138, 130, 135, -1, 138, 137, 131, -1, + 138, 131, 132, -1, 138, 132, 133, -1, + 138, 133, 130, -1, 134, 135, 136, -1, + 134, 136, 137, -1, 134, 138, 135, -1, + 134, 137, 138, -1, 221, 139, 222, -1, + 221, 140, 139, -1, 221, 225, 140, -1, + 141, 144, 334, -1, 141, 235, 144, -1, + 141, 228, 227, -1, 141, 334, 228, -1, + 141, 142, 235, -1, 141, 227, 142, -1, + 231, 344, 348, -1, 231, 230, 143, -1, + 231, 143, 346, -1, 343, 145, 349, -1, + 343, 349, 344, -1, 343, 411, 240, -1, + 343, 240, 145, -1, 383, 230, 338, -1, + 236, 337, 144, -1, 236, 144, 235, -1, + 237, 349, 145, -1, 237, 145, 240, -1, + 237, 240, 353, -1, 404, 146, 148, -1, + 404, 351, 146, -1, 404, 148, 403, -1, + 169, 168, 147, -1, 169, 148, 165, -1, + 169, 147, 148, -1, 149, 243, 150, -1, + 416, 243, 149, -1, 416, 150, 414, -1, + 416, 149, 150, -1, 244, 151, 155, -1, + 244, 155, 245, -1, 244, 414, 151, -1, + 246, 245, 152, -1, 246, 152, 153, -1, + 246, 153, 355, -1, 154, 155, 156, -1, + 154, 245, 155, -1, 154, 156, 157, -1, + 154, 158, 245, -1, 154, 157, 159, -1, + 154, 159, 158, -1, 282, 160, 283, -1, + 282, 164, 160, -1, 248, 283, 160, -1, + 248, 161, 163, -1, 248, 164, 161, -1, + 248, 160, 164, -1, 249, 162, 250, -1, + 249, 163, 162, -1, 249, 248, 163, -1, + 251, 276, 253, -1, 251, 173, 276, -1, + 251, 255, 164, -1, 251, 282, 173, -1, + 251, 164, 282, -1, 257, 169, 165, -1, + 257, 165, 258, -1, 166, 167, 168, -1, + 166, 252, 167, -1, 166, 168, 169, -1, + 166, 257, 252, -1, 166, 169, 257, -1, + 263, 171, 170, -1, 263, 172, 171, -1, + 263, 262, 172, -1, 263, 170, 264, -1, + 270, 274, 301, -1, 279, 280, 265, -1, + 286, 268, 280, -1, 284, 276, 173, -1, + 284, 173, 282, -1, 284, 286, 280, -1, + 174, 289, 175, -1, 174, 290, 289, -1, + 174, 184, 290, -1, 174, 175, 176, -1, + 174, 176, 186, -1, 174, 186, 184, -1, + 359, 180, 295, -1, 177, 179, 178, -1, + 177, 178, 180, -1, 177, 181, 179, -1, + 177, 180, 359, -1, 177, 359, 287, -1, + 177, 290, 181, -1, 177, 287, 290, -1, + 291, 182, 288, -1, 291, 292, 182, -1, + 183, 185, 184, -1, 183, 184, 186, -1, + 183, 187, 185, -1, 183, 186, 187, -1, + 188, 295, 267, -1, 188, 296, 295, -1, + 188, 267, 265, -1, 188, 265, 296, -1, + 298, 360, 300, -1, 298, 299, 189, -1, + 298, 189, 293, -1, 305, 190, 304, -1, + 305, 306, 190, -1, 311, 306, 312, -1, + 311, 310, 306, -1, 308, 191, 309, -1, + 308, 192, 191, -1, 308, 193, 192, -1, + 308, 194, 193, -1, 308, 312, 194, -1, + 316, 197, 317, -1, 316, 314, 197, -1, + 315, 314, 316, -1, 318, 195, 201, -1, + 318, 196, 195, -1, 318, 317, 197, -1, + 318, 197, 196, -1, 318, 201, 368, -1, + 198, 200, 199, -1, 198, 201, 200, -1, + 198, 199, 368, -1, 198, 368, 201, -1, + 202, 203, 204, -1, 202, 205, 203, -1, + 202, 204, 206, -1, 202, 206, 205, -1, + 320, 321, 207, -1, 320, 207, 208, -1, + 320, 208, 319, -1, 330, 380, 210, -1, + 330, 214, 329, -1, 330, 210, 214, -1, + 324, 209, 323, -1, 324, 327, 214, -1, + 324, 214, 210, -1, 324, 380, 209, -1, + 324, 210, 380, -1, 211, 212, 213, -1, + 211, 213, 214, -1, 211, 214, 212, -1, + 332, 380, 330, -1, 215, 216, 379, -1, + 215, 217, 216, -1, 215, 379, 218, -1, + 215, 219, 217, -1, 215, 218, 219, -1, + 220, 221, 222, -1, 220, 222, 223, -1, + 220, 224, 225, -1, 220, 225, 221, -1, + 220, 223, 226, -1, 220, 226, 224, -1, + 425, 429, 430, -1, 425, 334, 337, -1, + 433, 419, 340, -1, 335, 336, 227, -1, + 335, 227, 228, -1, 335, 228, 334, -1, + 345, 231, 346, -1, 345, 344, 231, -1, + 229, 234, 230, -1, 229, 230, 383, -1, + 229, 384, 234, -1, 229, 383, 384, -1, + 386, 338, 230, -1, 386, 231, 348, -1, + 386, 230, 231, -1, 350, 340, 419, -1, + 350, 401, 340, -1, 232, 234, 337, -1, + 232, 337, 236, -1, 232, 236, 234, -1, + 233, 235, 234, -1, 233, 236, 235, -1, + 233, 234, 236, -1, 398, 399, 395, -1, + 398, 395, 353, -1, 238, 237, 353, -1, + 238, 353, 395, -1, 238, 349, 237, -1, + 394, 238, 395, -1, 394, 349, 238, -1, + 396, 399, 401, -1, 396, 395, 399, -1, + 396, 401, 350, -1, 352, 240, 239, -1, + 352, 239, 351, -1, 352, 353, 240, -1, + 354, 241, 242, -1, 354, 242, 243, -1, + 354, 243, 416, -1, 354, 411, 241, -1, + 407, 357, 409, -1, 406, 357, 407, -1, + 413, 414, 244, -1, 413, 244, 245, -1, + 413, 246, 355, -1, 413, 245, 246, -1, + 247, 283, 248, -1, 247, 248, 249, -1, + 247, 249, 250, -1, 247, 250, 273, -1, + 247, 273, 283, -1, 259, 255, 251, -1, + 259, 252, 257, -1, 259, 253, 252, -1, + 259, 251, 253, -1, 254, 256, 255, -1, + 254, 257, 258, -1, 254, 255, 259, -1, + 254, 259, 257, -1, 254, 260, 256, -1, + 254, 258, 260, -1, 261, 274, 262, -1, + 261, 262, 263, -1, 261, 264, 274, -1, + 261, 263, 264, -1, 278, 279, 265, -1, + 278, 267, 266, -1, 278, 265, 267, -1, + 278, 266, 277, -1, 271, 268, 286, -1, + 271, 300, 268, -1, 271, 301, 300, -1, + 269, 270, 301, -1, 269, 301, 271, -1, + 269, 271, 286, -1, 269, 286, 285, -1, + 269, 273, 272, -1, 269, 285, 273, -1, + 269, 274, 270, -1, 269, 272, 274, -1, + 275, 277, 276, -1, 275, 276, 284, -1, + 275, 278, 277, -1, 275, 279, 278, -1, + 275, 280, 279, -1, 275, 284, 280, -1, + 281, 282, 283, -1, 281, 284, 282, -1, + 281, 283, 285, -1, 281, 285, 286, -1, + 281, 286, 284, -1, 363, 287, 359, -1, + 363, 362, 291, -1, 363, 291, 288, -1, + 363, 288, 289, -1, 363, 289, 290, -1, + 363, 290, 287, -1, 361, 360, 298, -1, + 361, 291, 362, -1, 361, 292, 291, -1, + 361, 293, 292, -1, 361, 298, 293, -1, + 294, 359, 295, -1, 294, 360, 359, -1, + 294, 295, 296, -1, 294, 296, 360, -1, + 297, 299, 298, -1, 297, 298, 300, -1, + 297, 301, 299, -1, 297, 300, 301, -1, + 302, 303, 312, -1, 302, 304, 303, -1, + 302, 305, 304, -1, 302, 312, 306, -1, + 302, 306, 305, -1, 307, 308, 309, -1, + 307, 309, 310, -1, 307, 310, 311, -1, + 307, 311, 312, -1, 307, 312, 308, -1, + 313, 365, 314, -1, 313, 315, 365, -1, + 313, 314, 315, -1, 367, 365, 315, -1, + 367, 315, 316, -1, 367, 316, 317, -1, + 367, 318, 368, -1, 367, 317, 318, -1, + 373, 319, 371, -1, 373, 320, 319, -1, + 373, 379, 321, -1, 373, 321, 320, -1, + 377, 323, 322, -1, 377, 324, 323, -1, + 377, 322, 325, -1, 377, 325, 376, -1, + 377, 375, 326, -1, 377, 326, 327, -1, + 377, 327, 324, -1, 328, 329, 331, -1, + 328, 331, 332, -1, 328, 330, 329, -1, + 328, 332, 330, -1, 381, 331, 382, -1, + 381, 332, 331, -1, 381, 380, 332, -1, + 333, 425, 430, -1, 333, 334, 425, -1, + 333, 335, 334, -1, 333, 430, 336, -1, + 333, 336, 335, -1, 424, 337, 384, -1, + 424, 425, 337, -1, 388, 383, 338, -1, + 388, 338, 386, -1, 421, 419, 433, -1, + 428, 340, 339, -1, 428, 433, 340, -1, + 428, 339, 341, -1, 428, 341, 389, -1, + 342, 343, 344, -1, 342, 344, 345, -1, + 342, 345, 346, -1, 342, 346, 347, -1, + 342, 347, 411, -1, 342, 411, 343, -1, + 418, 350, 419, -1, 387, 386, 348, -1, + 387, 348, 349, -1, 387, 349, 394, -1, + 393, 396, 350, -1, 393, 350, 418, -1, + 400, 351, 404, -1, 400, 352, 351, -1, + 400, 398, 353, -1, 400, 353, 352, -1, + 408, 411, 354, -1, 408, 354, 416, -1, + 408, 416, 406, -1, 415, 406, 416, -1, + 415, 413, 355, -1, 415, 355, 356, -1, + 415, 356, 357, -1, 415, 357, 406, -1, + 358, 359, 360, -1, 358, 360, 361, -1, + 358, 361, 362, -1, 358, 362, 363, -1, + 358, 363, 359, -1, 364, 366, 365, -1, + 364, 365, 367, -1, 364, 367, 368, -1, + 364, 369, 366, -1, 364, 368, 369, -1, + 370, 371, 372, -1, 370, 373, 371, -1, + 370, 372, 379, -1, 370, 379, 373, -1, + 374, 376, 375, -1, 374, 377, 376, -1, + 374, 375, 377, -1, 378, 379, 380, -1, + 378, 380, 381, -1, 378, 382, 379, -1, + 378, 381, 382, -1, 423, 383, 388, -1, + 423, 384, 383, -1, 423, 424, 384, -1, + 385, 392, 388, -1, 385, 388, 386, -1, + 385, 394, 392, -1, 385, 386, 387, -1, + 385, 387, 394, -1, 420, 421, 422, -1, + 420, 422, 423, -1, 420, 423, 388, -1, + 420, 388, 392, -1, 420, 392, 418, -1, + 432, 421, 433, -1, 427, 428, 389, -1, + 427, 389, 390, -1, 427, 390, 430, -1, + 391, 418, 392, -1, 391, 393, 418, -1, + 391, 392, 394, -1, 391, 394, 395, -1, + 391, 395, 396, -1, 391, 396, 393, -1, + 397, 399, 398, -1, 397, 398, 400, -1, + 397, 402, 401, -1, 397, 401, 399, -1, + 397, 403, 402, -1, 397, 404, 403, -1, + 397, 400, 404, -1, 405, 406, 407, -1, + 405, 408, 406, -1, 405, 409, 410, -1, + 405, 407, 409, -1, 405, 410, 411, -1, + 405, 411, 408, -1, 412, 414, 413, -1, + 412, 413, 415, -1, 412, 416, 414, -1, + 412, 415, 416, -1, 417, 418, 419, -1, + 417, 420, 418, -1, 417, 419, 421, -1, + 417, 421, 420, -1, 431, 422, 421, -1, + 431, 421, 432, -1, 431, 423, 422, -1, + 431, 424, 423, -1, 431, 429, 425, -1, + 431, 425, 424, -1, 426, 428, 427, -1, + 426, 430, 429, -1, 426, 427, 430, -1, + 426, 429, 431, -1, 426, 431, 432, -1, + 426, 433, 428, -1, 426, 432, 433, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link2.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link2.wrl new file mode 100644 index 00000000..c4893281 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link2.wrl @@ -0,0 +1,739 @@ +#VRML V2.0 utf8 + + +DEF link2 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.37522101 -0.078735001 0.119751, + -0.00083199999 -0.078429997 0.120544, + -0.0047149998 -0.078552 0.120239, + -0.38977101 -0.077881001 0.105255, + -0.37999699 -0.078002997 0.091491997, + -0.37999699 -0.078491002 0.105255, + -0.39521801 -0.076508 0.091491997, + -0.39932299 -0.076080002 0.105255, + -0.395226 0.076508 0.091491997, + -0.378883 -0.078948997 0.119049, + -0.37911999 -0.078521997 0.120361, + -0.38942 -0.078368999 0.119385, + -0.398651 -0.044220001 0.16500901, + -0.389397 -0.078156002 0.120087, + -0.389404 -0.078308001 0.119751, + -0.438667 0.05249 0.120087, + -0.410629 0.036956999 0.16500901, + -0.40490699 0.041046001 0.16500901, + -0.39863601 0.044220001 0.16500901, + -0.37999699 0.078002997 0.091491997, + -0.40843201 -0.073151 0.105255, + -0.44278699 -0.047088999 0.105255, + -0.438835 -0.052643001 0.119385, + -0.298004 -0.0098270001 0.078002997, + -0.298004 0.0097350003 0.078002997, + -0.39521801 -0.076508 0.091491997, + -0.37999699 -0.078002997 0.091491997, + -0.298004 -0.010223 0.078033, + -0.082092002 -0.010376 0.078064002, + 0.019317999 -0.076110996 0.106262, + 0.011528 -0.077575997 0.120544, + 0.023506001 -0.075072996 0.120239, + 1.5210042e-011 -0.078002997 0.091491997, + 0.015221 -0.076476999 0.091491997, + 0.0097730001 -0.077941999 0.106262, + -0.42333201 0.064850003 0.091491997, + -0.458 -4.2150853e-012 0.091491997, + 0.038437001 -0.020447001 0.164978, + 0.048645001 -0.061829001 0.120239, + -0.40348101 -0.075134002 0.120087, + -0.391487 -0.077666998 0.120361, + -0.43515801 -0.055144999 0.091491997, + -0.41677099 -0.069580004 0.120087, + -0.398651 -0.044220001 0.16500901, + -0.438667 -0.05249 0.120087, + -0.43878201 -0.052581999 0.119751, + 0.013641 0.04425 0.164978, + -0.00083199999 0.078429997 0.120544, + 0.066505 0.041992001 0.120239, + -0.45778701 0.010406 0.105255, + -0.45871699 -2.8704957e-012 0.120087, + -0.458244 0.0097960001 0.119751, + -0.42343101 0.020416001 0.16500901, + -0.45810699 0.0097960001 0.120087, + -0.42799401 3.2248715e-012 0.16500901, + -0.37999699 0.078491002 0.105255, + -0.41678599 0.069580004 0.120087, + 0.055153001 0.055176001 0.091491997, + 0.062812999 0.047118999 0.106262, + 0.023598 0.075378001 0.119141, + 0.028434999 0.073181003 0.106262, + 0.019317999 0.076110996 0.106262, + 0.015221 0.076476999 0.091491997, + 0.029839 0.072082996 0.091491997, + 0.055153001 0.055176001 0.091491997, + -0.42749 -0.0070190001 0.16500901, + -0.42594901 -0.013855 0.16500901, + -0.45810699 -0.0097960001 0.120087, + -0.41515401 -0.070708998 0.119049, + -0.41508499 -0.070251003 0.120361, + -0.40354899 -0.075347997 0.119385, + -0.403557 -0.075378001 0.119049, + -0.40352601 -0.075255997 0.119751, + -0.39136499 -0.078125 0.119049, + -0.45535299 -0.021973001 0.105255, + -0.444855 -0.043334998 0.091491997, + -0.452301 -0.031128 0.120087, + 0.043334998 -0.064879999 0.091491997, + 0.029846 -0.072082996 0.091491997, + 0.0094600003 -0.078247003 0.119873, + 0.011406 -0.078125 0.119141, + 0.0094379997 -0.078125 0.120239, + 0.0094600003 -0.078368999 0.119507, + -0.00106 -0.078979 0.119141, + 0.036873002 -0.069701999 0.119873, + 0.035080001 -0.070129 0.120544, + -0.431602 0.059113 0.105255, + -0.42469001 0.064514004 0.105255, + -0.42333201 0.064850003 0.091491997, + -0.450546 0.034393001 0.105255, + -0.44486201 0.043334998 0.091491997, + -0.43515801 0.055144999 0.091491997, + -0.43515801 0.055144999 0.091491997, + -0.298004 0.0099790003 0.078002997, + 0.030685 -0.032104 0.164978, + 0.055160999 -0.055785999 0.120544, + 0.038437001 0.020447001 0.164986, + 0.072250001 0.031067001 0.120239, + 0.038437001 0.020447001 0.164986, + 0.019897001 -0.041016001 0.164978, + 0.019897001 -0.041016001 0.164978, + 0.02562 -0.036986999 0.164978, + 0.045685001 -0.063721001 0.120544, + 0.036781002 -0.069518998 0.120239, + 0.013641 -0.04425 0.164978, + -0.431602 -0.059142999 0.105255, + -0.43544 -0.056244001 0.119049, + -0.41684699 -0.069733001 0.119751, + -0.410629 -0.036956999 0.16500901, + -0.40490699 -0.041046001 0.16500901, + -0.410431 -0.035828002 0.16500901, + -0.41569501 -0.032104 0.16500901, + -0.42343101 -0.020416001 0.16500901, + -0.398651 -0.044220001 0.16500901, + -0.398972 -0.042998999 0.16500901, + -0.42865801 -0.061859 0.120087, + -0.435204 -0.055847 0.120361, + -0.428749 -0.061981 0.119751, + -0.410629 -0.036956999 0.16500901, + -0.42572001 -0.063842997 0.120361, + 0.0097730001 0.077881001 0.106262, + -7.9999945e-006 0.078002997 0.091491997, + -0.45832801 0.0097960001 0.119385, + -0.41937301 0.025665 0.16500901, + -0.42343101 0.020416001 0.16500901, + -0.42594901 0.013855 0.16500901, + -0.42749 0.0070190001 0.16500901, + -0.41999799 0.026550001 0.16500901, + -0.41569501 0.032104 0.16500901, + -0.42799401 -7.641502e-012 0.16500901, + -0.410629 0.036956999 0.16500901, + -0.38977799 0.077881001 0.105255, + -0.395226 0.076508 0.091491997, + -0.41693899 0.069243997 0.105255, + -0.41689301 0.069793999 0.119385, + -0.41684699 0.069733001 0.119751, + -0.39932299 0.076049998 0.105255, + 0.036949001 0.069274999 0.106262, + 0.030685 0.032104 0.164978, + 0.025436001 0.035828002 0.164986, + 0.034988001 0.026550001 0.164986, + 0.030685 0.032104 0.164978, + 0.02562 0.036986999 0.164978, + 0.058768999 0.052551001 0.119873, + 0.058846001 0.052611999 0.119507, + 0.058623999 0.052429002 0.120239, + 0.063239999 0.046386998 0.120544, + 0.055160999 0.055725001 0.120544, + 0.063637003 0.046753 0.119141, + -0.45620701 -0.020293999 0.119751, + -0.45629099 -0.020293999 0.119385, + -0.457535 -0.01236 0.120361, + -0.45607001 -0.020233 0.120087, + -0.45462 -0.024444999 0.120361, + -0.45832801 -0.0098270001 0.119385, + -0.45778701 -0.010437 0.105255, + -0.457977 -0.012451 0.119049, + -0.458244 -0.0097960001 0.119751, + -0.458 9.5332128e-012 0.091491997, + -0.458969 6.585509e-012 0.119049, + -0.45893899 -6.5516997e-012 0.119385, + -0.458855 3.3364873e-012 0.119751, + -0.456505 -0.015228 0.091491997, + -0.456505 -0.015228 0.091491997, + -0.298004 -0.01001 0.078002997, + -0.45206499 -0.029846 0.091491997, + -0.44361901 -0.046783 0.119049, + -0.44675401 -0.042174999 0.119385, + -0.45251501 -0.031219 0.119385, + -0.450546 -0.034393001 0.105255, + -0.450203 -0.036162999 0.119049, + -0.452438 -0.031189 0.119751, + -0.45206499 -0.029846 0.091491997, + -0.45504001 -0.024628 0.119049, + 0.043334998 -0.064879999 0.091491997, + 0.035186999 -0.070679002 0.119141, + 0.035186999 -0.070679002 0.119141, + 0.036949001 -0.069274999 0.106262, + 0.029846 -0.072082996 0.091491997, + 0.028441999 -0.073181003 0.106262, + 0.023598 -0.075378001 0.119141, + 0.02359 -0.075317003 0.119507, + 0.023560001 -0.075255997 0.119873, + -0.428749 0.061981 0.119751, + -0.42881 0.062042002 0.119385, + -0.43544799 0.056212999 0.119049, + -0.435204 0.055817001 0.120361, + -0.42865801 0.061859 0.120087, + -0.42572001 0.063842997 0.120361, + -0.42587301 0.064269997 0.119049, + -0.452301 0.031128 0.120087, + -0.45206499 0.029846 0.091499001, + -0.45251501 0.031219 0.119392, + -0.45243099 0.031189 0.119751, + 0.078658998 -7.4623892e-012 0.120239, + 0.042998999 -1.0528791e-011 0.164978, + 0.072059996 -0.029846 0.091491997, + 0.064850003 -0.043334998 0.091491997, + 0.042479999 -0.0070190001 0.164978, + 0.076499999 -0.015198 0.091491997, + -0.082001001 -0.01001 0.078002997, + 0.077995002 -1.6633252e-012 0.091491997, + -0.082001001 -0.0098270001 0.078002997, + -0.082001001 0.0097049996 0.078002997, + 0.070572004 -0.034423999 0.106262, + 0.072509997 -0.031189 0.119507, + 0.075370997 -0.021973001 0.106262, + 0.072059996 -0.029846 0.091491997, + 0.062812999 -0.047118999 0.106262, + 0.055153001 -0.055176001 0.091491997, + 0.064850003 -0.043334998 0.091491997, + 0.058846001 -0.052611999 0.119507, + 0.072059996 0.029846 0.091499001, + 0.069756001 -0.035828002 0.120544, + 0.070206001 -0.036132999 0.119141, + 0.066749997 -0.042174999 0.119507, + 0.066520996 -0.041992001 0.120239, + 0.034988001 -0.026550001 0.164978, + 0.030685 -0.032104 0.164978, + 0.058623999 -0.052429002 0.120239, + 0.076012 0.020203 0.120239, + 0.042479999 0.0070190001 0.164978, + 0.040955 0.013855 0.164978, + 0.074524 0.024413999 0.120544, + 0.076286003 0.020264 0.119514, + 0.076499999 0.015198 0.091491997, + 0.075370997 0.021973001 0.106262, + -0.42587301 -0.064269997 0.119049, + -0.42587301 -0.064269997 0.119049, + -0.42469001 -0.064514004 0.105255, + -0.42880201 -0.062042002 0.119385, + -0.416931 -0.069243997 0.105255, + -0.41687801 -0.069793999 0.119385, + -0.42333201 -0.064850003 0.091491997, + -0.41515401 -0.070708998 0.119049, + -0.40985101 -0.072052002 0.091491997, + 0.0094529996 0.078247003 0.119873, + 0.0094600003 0.078368999 0.119507, + -0.00106 0.078979 0.119141, + 0.0094379997 0.078125 0.120239, + 0.066742003 0.042114001 0.119499, + 0.066650003 0.042114001 0.119881, + 0.069756001 0.035828002 0.120544, + 0.064850003 0.043334998 0.091491997, + -0.44486201 0.043334998 0.091491997, + -0.44278699 0.047088999 0.105255, + -0.438835 0.052643001 0.119385, + -0.43878201 0.052581999 0.119751, + -0.41999799 0.026550001 0.16500901, + -0.389404 0.078277998 0.119751, + -0.38943499 0.078368999 0.119385, + -0.37889901 0.078948997 0.119049, + -0.389397 0.078156002 0.120087, + -0.37911999 0.078521997 0.120361, + -0.40843999 0.073151 0.105255, + -0.409859 0.072052002 0.091491997, + -0.40348101 0.075134002 0.120087, + -0.41510001 0.070220999 0.120361, + -0.391487 0.077666998 0.120361, + -0.40356401 0.075347997 0.119385, + -0.41515401 0.070708998 0.119049, + -0.403557 0.075378001 0.119049, + -0.403557 0.075378001 0.119049, + -0.40352601 0.075255997 0.119751, + -0.39136499 0.078156002 0.119049, + 0.04882 0.062011998 0.119507, + 0.055458002 0.056212999 0.119141, + 0.051628001 0.059142999 0.106262, + 0.043327 0.064879999 0.091491997, + -0.44654101 -0.042052999 0.120087, + -0.44331399 -0.046448 0.120361, + -0.41999799 -0.026550001 0.16500901, + -0.44667101 -0.042114001 0.119751, + -0.449837 -0.035889 0.120361, + 0.051628001 -0.059142999 0.106262, + 0.048758999 -0.061951 0.119873, + 0.055458002 -0.056212999 0.119141, + -0.45535299 0.021973001 0.105255, + -0.456505 0.015228 0.091491997, + -0.45620701 0.020293999 0.119751, + -0.45462 0.024444999 0.120354, + -0.45606199 0.020233 0.120087, + -0.45504001 0.024597 0.119049, + -0.45629099 0.020293999 0.119377, + -0.457977 0.012451 0.119049, + -0.457535 0.01236 0.120361, + 0.076286003 -0.020324999 0.119507, + 0.040955 -0.013855 0.164978, + 0.078048997 -0.0097660003 0.120239, + 0.077437997 -0.012329 0.120544, + 0.077995002 -3.0499056e-012 0.091491997, + 0.076499999 0.015198 0.091491997, + -0.082001001 0.0099489996 0.078002997, + 0.077995002 -7.7637913e-012 0.091491997, + 0.072502002 0.031189 0.119507, + 0.072411001 0.031128 0.119873, + 0.075026996 0.024597 0.119141, + 0.072059996 0.029846 0.091499001, + 0.070572004 0.034423999 0.10627, + 0.070206001 0.036132999 0.119141, + 0.063248001 -0.046386998 0.120544, + 0.066657998 -0.042114001 0.119873, + 0.063629001 -0.046753 0.119141, + 0.063248001 -0.046386998 0.120544, + 0.058768999 -0.052551001 0.119873, + 0.077820003 0.010437 0.106262, + -0.44667801 0.042114001 0.119751, + -0.44362599 0.046753 0.119049, + -0.443306 0.046448 0.120361, + -0.446556 0.042022999 0.120087, + -0.44675401 0.042144999 0.119385, + -0.450203 0.036132999 0.119049, + -0.44982901 0.035889 0.120361, + 0.019897001 0.041016001 0.164978, + 0.02562 0.036986999 0.164978, + 0.048636999 0.061829001 0.120239, + 0.048758999 0.061951 0.119873, + 0.036926001 0.069762997 0.119507, + 0.036781002 0.069518998 0.120239, + 0.045891002 0.064269997 0.119141, + 0.045699999 0.063721001 0.120544, + 0.045898002 -0.064269997 0.119141, + 0.04882 -0.062011998 0.119507, + 0.045898002 -0.064269997 0.119141, + 0.044707999 -0.064575002 0.106262, + 0.036926001 -0.069762997 0.119507, + 0.074524 -0.024413999 0.120544, + 0.072417997 -0.031189 0.119873, + 0.072250001 -0.031067001 0.120239, + 0.074524 -0.024413999 0.120544, + 0.075034998 -0.024597 0.119141, + 0.076187 -0.020264 0.119873, + 0.076012 -0.020203 0.120239, + 0.078322999 -0.0098270001 0.119507, + 0.077972002 -0.012451 0.119141, + 0.077820003 -0.010437 0.106262, + 0.078217 -0.0098270001 0.119873, + 0.078971997 -8.3756075e-012 0.119141, + 0.078933999 -1.0056007e-011 0.119507, + 0.078217 0.0098270001 0.119873, + 0.078048997 0.0097660003 0.120239, + 0.078841999 4.8389747e-012 0.119873, + 0.078322999 0.0098270001 0.119507, + 0.077972002 0.012451 0.119141, + 0.077437997 0.012329 0.120544, + 0.076187 0.020264 0.119873, + 0.036858 0.069701999 0.119873, + 0.035179 0.070679002 0.119141, + 0.023506001 0.075072996 0.120239, + 0.035080001 0.070129 0.120544, + 0.013641 0.04425 0.164978, + 0.011528 0.077575997 0.120544, + 0.011528 0.077575997 0.120544, + 0.023582 0.075317003 0.119507, + 0.035179 0.070679002 0.119141, + 0.023598 0.075378001 0.119141, + 0.023552001 0.075255997 0.119873, + 0.011406 0.078125 0.119141 ] + + } + coordIndex [ 113, 104, 98, -1, 113, 18, 114, -1, + 113, 98, 18, -1, 2, 10, 83, -1, + 17, 114, 18, -1, 17, 130, 114, -1, + 129, 114, 130, -1, 139, 350, 18, -1, + 5, 32, 83, -1, 0, 83, 10, -1, + 9, 11, 5, -1, 9, 0, 10, -1, + 9, 5, 83, -1, 9, 83, 0, -1, + 256, 257, 18, -1, 251, 253, 238, -1, + 93, 121, 292, -1, 93, 19, 121, -1, + 112, 114, 129, -1, 30, 31, 104, -1, + 30, 104, 81, -1, 1, 81, 104, -1, + 1, 10, 2, -1, 1, 2, 83, -1, + 1, 83, 81, -1, 1, 104, 12, -1, + 1, 12, 10, -1, 85, 104, 31, -1, + 85, 103, 104, -1, 43, 104, 113, -1, + 43, 12, 104, -1, 13, 10, 12, -1, + 140, 18, 98, -1, 140, 139, 18, -1, + 47, 253, 18, -1, 47, 238, 253, -1, + 4, 26, 32, -1, 4, 32, 5, -1, + 4, 6, 26, -1, 308, 248, 128, -1, + 258, 256, 18, -1, 185, 247, 186, -1, + 62, 292, 121, -1, 62, 63, 292, -1, + 268, 57, 292, -1, 268, 292, 63, -1, + 313, 350, 139, -1, 131, 19, 132, -1, + 8, 132, 19, -1, 8, 19, 93, -1, + 273, 271, 112, -1, 65, 129, 54, -1, + 25, 26, 6, -1, 3, 11, 73, -1, + 3, 73, 6, -1, 3, 6, 4, -1, + 3, 5, 11, -1, 3, 4, 5, -1, + 7, 73, 71, -1, 7, 6, 73, -1, + 235, 25, 6, -1, 235, 6, 7, -1, + 235, 233, 164, -1, 235, 164, 25, -1, + 235, 71, 20, -1, 235, 7, 71, -1, + 41, 106, 22, -1, 41, 164, 233, -1, + 41, 75, 164, -1, 202, 164, 23, -1, + 28, 33, 32, -1, 80, 30, 81, -1, + 80, 29, 180, -1, 80, 33, 29, -1, + 255, 132, 8, -1, 255, 8, 93, -1, + 86, 88, 92, -1, 86, 92, 185, -1, + 100, 98, 104, -1, 100, 101, 98, -1, + 94, 98, 101, -1, 287, 98, 37, -1, + 14, 9, 10, -1, 14, 10, 13, -1, + 14, 11, 9, -1, 14, 73, 11, -1, + 40, 12, 43, -1, 40, 13, 12, -1, + 40, 14, 13, -1, 40, 72, 73, -1, + 40, 73, 14, -1, 228, 119, 117, -1, + 46, 18, 350, -1, 46, 47, 18, -1, + 48, 146, 140, -1, 48, 140, 242, -1, + 51, 285, 284, -1, 127, 128, 248, -1, + 312, 190, 52, -1, 312, 52, 248, -1, + 125, 52, 190, -1, 252, 18, 253, -1, + 252, 258, 18, -1, 15, 186, 247, -1, + 15, 128, 186, -1, 15, 247, 308, -1, + 15, 308, 128, -1, 16, 128, 130, -1, + 16, 186, 128, -1, 16, 187, 186, -1, + 16, 188, 187, -1, 16, 130, 17, -1, + 16, 17, 188, -1, 246, 247, 185, -1, + 246, 185, 92, -1, 246, 92, 245, -1, + 56, 188, 17, -1, 56, 18, 257, -1, + 56, 17, 18, -1, 120, 62, 121, -1, + 120, 357, 62, -1, 137, 268, 63, -1, + 355, 59, 63, -1, 141, 140, 146, -1, + 144, 148, 58, -1, 55, 19, 131, -1, + 55, 251, 238, -1, 55, 238, 121, -1, + 55, 121, 19, -1, 76, 273, 112, -1, + 66, 112, 129, -1, 66, 129, 65, -1, + 66, 76, 112, -1, 66, 153, 76, -1, + 67, 151, 65, -1, 67, 54, 50, -1, + 67, 65, 54, -1, 234, 235, 20, -1, + 234, 20, 71, -1, 24, 93, 292, -1, + 45, 22, 106, -1, 45, 166, 22, -1, + 45, 44, 270, -1, 45, 270, 166, -1, + 150, 156, 163, -1, 155, 158, 163, -1, + 155, 163, 156, -1, 36, 164, 163, -1, + 36, 163, 158, -1, 36, 23, 164, -1, + 36, 24, 23, -1, 36, 93, 24, -1, + 21, 22, 166, -1, 21, 166, 75, -1, + 21, 41, 22, -1, 21, 75, 41, -1, + 203, 202, 23, -1, 203, 24, 292, -1, + 203, 23, 24, -1, 27, 26, 25, -1, + 27, 25, 164, -1, 27, 32, 26, -1, + 27, 28, 32, -1, 200, 164, 202, -1, + 200, 27, 164, -1, 200, 28, 27, -1, + 200, 78, 33, -1, 200, 33, 28, -1, + 178, 180, 29, -1, 178, 33, 78, -1, + 178, 29, 33, -1, 178, 78, 174, -1, + 182, 31, 30, -1, 182, 30, 80, -1, + 182, 85, 31, -1, 34, 32, 33, -1, + 34, 33, 80, -1, 34, 83, 32, -1, + 82, 83, 34, -1, 82, 34, 80, -1, + 136, 132, 255, -1, 35, 255, 93, -1, + 35, 88, 255, -1, 35, 93, 91, -1, + 35, 92, 88, -1, 35, 91, 92, -1, + 278, 36, 158, -1, 278, 158, 49, -1, + 278, 93, 36, -1, 278, 49, 284, -1, + 244, 245, 92, -1, 328, 37, 213, -1, + 328, 287, 37, -1, 304, 276, 211, -1, + 209, 211, 276, -1, 305, 291, 343, -1, + 225, 343, 291, -1, 243, 292, 57, -1, + 243, 58, 148, -1, 217, 37, 98, -1, + 217, 98, 94, -1, 217, 213, 37, -1, + 198, 195, 98, -1, 198, 98, 287, -1, + 222, 223, 97, -1, 95, 276, 304, -1, + 95, 304, 219, -1, 95, 275, 276, -1, + 95, 38, 275, -1, 95, 101, 38, -1, + 102, 38, 101, -1, 102, 323, 275, -1, + 102, 275, 38, -1, 39, 40, 43, -1, + 39, 72, 40, -1, 39, 43, 69, -1, + 39, 69, 72, -1, 105, 106, 41, -1, + 105, 41, 233, -1, 105, 233, 229, -1, + 107, 42, 119, -1, 107, 119, 228, -1, + 107, 69, 42, -1, 109, 119, 42, -1, + 109, 113, 118, -1, 109, 43, 113, -1, + 109, 69, 43, -1, 109, 42, 69, -1, + 111, 271, 270, -1, 111, 270, 44, -1, + 111, 112, 271, -1, 116, 106, 117, -1, + 116, 111, 44, -1, 116, 118, 111, -1, + 116, 45, 106, -1, 116, 44, 45, -1, + 239, 47, 46, -1, 239, 238, 47, -1, + 239, 46, 350, -1, 295, 242, 97, -1, + 295, 223, 296, -1, 295, 97, 223, -1, + 241, 148, 146, -1, 241, 146, 48, -1, + 241, 48, 242, -1, 122, 284, 49, -1, + 122, 51, 284, -1, 122, 158, 159, -1, + 122, 49, 158, -1, 161, 67, 50, -1, + 161, 51, 122, -1, 53, 50, 54, -1, + 53, 285, 51, -1, 53, 161, 50, -1, + 53, 51, 161, -1, 124, 248, 52, -1, + 124, 127, 248, -1, 124, 52, 125, -1, + 311, 244, 89, -1, 280, 125, 190, -1, + 280, 281, 125, -1, 126, 281, 285, -1, + 126, 125, 281, -1, 126, 285, 53, -1, + 126, 53, 54, -1, 126, 54, 129, -1, + 250, 251, 55, -1, 250, 55, 131, -1, + 135, 188, 56, -1, 135, 189, 188, -1, + 135, 134, 189, -1, 135, 56, 257, -1, + 133, 255, 88, -1, 133, 88, 134, -1, + 64, 57, 268, -1, 64, 268, 267, -1, + 64, 144, 58, -1, 64, 243, 57, -1, + 64, 58, 243, -1, 60, 63, 59, -1, + 354, 59, 355, -1, 354, 60, 59, -1, + 354, 137, 63, -1, 354, 63, 60, -1, + 61, 62, 357, -1, 61, 357, 355, -1, + 61, 63, 62, -1, 61, 355, 63, -1, + 145, 141, 146, -1, 145, 147, 141, -1, + 142, 313, 139, -1, 266, 64, 267, -1, + 266, 144, 64, -1, 152, 65, 151, -1, + 152, 66, 65, -1, 152, 153, 66, -1, + 157, 156, 151, -1, 157, 151, 67, -1, + 157, 67, 161, -1, 68, 72, 69, -1, + 68, 234, 72, -1, 68, 69, 107, -1, + 68, 107, 234, -1, 70, 234, 71, -1, + 70, 72, 234, -1, 70, 71, 73, -1, + 70, 73, 72, -1, 74, 172, 173, -1, + 74, 163, 172, -1, 74, 173, 150, -1, + 74, 150, 163, -1, 165, 164, 75, -1, + 165, 75, 172, -1, 165, 172, 163, -1, + 167, 75, 166, -1, 167, 170, 75, -1, + 169, 172, 75, -1, 169, 75, 170, -1, + 171, 273, 76, -1, 171, 170, 273, -1, + 171, 153, 173, -1, 171, 76, 153, -1, + 77, 174, 78, -1, 77, 78, 200, -1, + 77, 209, 174, -1, 77, 200, 209, -1, + 179, 180, 178, -1, 181, 80, 180, -1, + 181, 182, 80, -1, 79, 80, 81, -1, + 79, 82, 80, -1, 79, 81, 83, -1, + 79, 83, 82, -1, 84, 176, 325, -1, + 84, 103, 85, -1, 84, 325, 323, -1, + 84, 85, 182, -1, 84, 182, 176, -1, + 84, 102, 103, -1, 84, 323, 102, -1, + 324, 325, 174, -1, 177, 174, 325, -1, + 177, 178, 174, -1, 87, 134, 88, -1, + 87, 189, 134, -1, 184, 86, 185, -1, + 184, 189, 87, -1, 184, 88, 86, -1, + 184, 87, 88, -1, 192, 311, 89, -1, + 191, 89, 244, -1, 191, 278, 277, -1, + 191, 93, 278, -1, 191, 192, 89, -1, + 90, 92, 91, -1, 90, 244, 92, -1, + 90, 91, 93, -1, 90, 93, 191, -1, + 90, 191, 244, -1, 201, 305, 337, -1, + 201, 291, 305, -1, 201, 337, 335, -1, + 201, 335, 199, -1, 327, 328, 213, -1, + 302, 210, 215, -1, 302, 304, 211, -1, + 212, 291, 292, -1, 212, 292, 243, -1, + 212, 225, 291, -1, 216, 213, 217, -1, + 218, 217, 94, -1, 218, 95, 219, -1, + 218, 94, 101, -1, 218, 101, 95, -1, + 288, 198, 289, -1, 288, 341, 194, -1, + 288, 194, 195, -1, 288, 195, 198, -1, + 96, 98, 222, -1, 96, 222, 97, -1, + 96, 97, 242, -1, 96, 140, 98, -1, + 96, 242, 140, -1, 345, 296, 223, -1, + 221, 222, 98, -1, 221, 98, 195, -1, + 99, 101, 100, -1, 99, 102, 101, -1, + 99, 103, 102, -1, 99, 104, 103, -1, + 99, 100, 104, -1, 230, 105, 229, -1, + 230, 228, 117, -1, 230, 117, 106, -1, + 230, 106, 105, -1, 232, 228, 229, -1, + 232, 107, 228, -1, 232, 229, 233, -1, + 232, 234, 107, -1, 108, 118, 119, -1, + 108, 119, 109, -1, 108, 109, 118, -1, + 110, 112, 111, -1, 110, 113, 114, -1, + 110, 114, 112, -1, 110, 118, 113, -1, + 110, 111, 118, -1, 115, 116, 117, -1, + 115, 118, 116, -1, 115, 117, 119, -1, + 115, 119, 118, -1, 237, 357, 120, -1, + 237, 121, 238, -1, 237, 120, 121, -1, + 351, 239, 350, -1, 240, 243, 148, -1, + 240, 148, 241, -1, 160, 122, 159, -1, + 160, 161, 122, -1, 123, 124, 125, -1, + 123, 125, 126, -1, 123, 128, 127, -1, + 123, 127, 124, -1, 123, 126, 129, -1, + 123, 129, 130, -1, 123, 130, 128, -1, + 310, 244, 311, -1, 264, 131, 132, -1, + 264, 250, 131, -1, 264, 132, 136, -1, + 260, 255, 133, -1, 260, 133, 134, -1, + 260, 134, 135, -1, 260, 135, 257, -1, + 262, 136, 255, -1, 262, 264, 136, -1, + 317, 137, 354, -1, 317, 319, 268, -1, + 317, 268, 137, -1, 138, 142, 139, -1, + 138, 141, 142, -1, 138, 139, 140, -1, + 138, 140, 141, -1, 314, 141, 147, -1, + 314, 142, 141, -1, 314, 147, 315, -1, + 314, 313, 142, -1, 316, 315, 147, -1, + 316, 147, 266, -1, 143, 144, 266, -1, + 143, 145, 146, -1, 143, 147, 145, -1, + 143, 266, 147, -1, 143, 146, 148, -1, + 143, 148, 144, -1, 149, 156, 150, -1, + 149, 151, 156, -1, 149, 152, 151, -1, + 149, 150, 173, -1, 149, 173, 153, -1, + 149, 153, 152, -1, 154, 155, 156, -1, + 154, 156, 157, -1, 154, 159, 158, -1, + 154, 158, 155, -1, 154, 160, 159, -1, + 154, 157, 161, -1, 154, 161, 160, -1, + 162, 163, 164, -1, 162, 164, 165, -1, + 162, 165, 163, -1, 272, 166, 270, -1, + 272, 167, 166, -1, 272, 273, 170, -1, + 272, 170, 167, -1, 168, 169, 170, -1, + 168, 170, 171, -1, 168, 172, 169, -1, + 168, 173, 172, -1, 168, 171, 173, -1, + 274, 174, 209, -1, 274, 324, 174, -1, + 274, 209, 276, -1, 175, 325, 176, -1, + 175, 177, 325, -1, 175, 178, 177, -1, + 175, 179, 178, -1, 175, 180, 179, -1, + 175, 181, 180, -1, 175, 176, 182, -1, + 175, 182, 181, -1, 183, 184, 185, -1, + 183, 186, 187, -1, 183, 185, 186, -1, + 183, 187, 188, -1, 183, 188, 189, -1, + 183, 189, 184, -1, 193, 311, 192, -1, + 193, 190, 312, -1, 193, 312, 311, -1, + 193, 280, 190, -1, 282, 191, 277, -1, + 282, 192, 191, -1, 282, 280, 193, -1, + 282, 193, 192, -1, 340, 194, 341, -1, + 340, 344, 221, -1, 340, 195, 194, -1, + 340, 221, 195, -1, 204, 210, 207, -1, + 204, 207, 205, -1, 197, 210, 209, -1, + 197, 209, 200, -1, 196, 200, 199, -1, + 196, 199, 207, -1, 196, 197, 200, -1, + 196, 207, 210, -1, 196, 210, 197, -1, + 206, 207, 199, -1, 206, 199, 286, -1, + 332, 289, 198, -1, 332, 198, 287, -1, + 334, 286, 199, -1, 334, 199, 335, -1, + 293, 199, 200, -1, 293, 201, 199, -1, + 293, 200, 202, -1, 293, 202, 203, -1, + 293, 203, 292, -1, 293, 291, 201, -1, + 214, 327, 213, -1, 214, 205, 327, -1, + 214, 204, 205, -1, 214, 215, 210, -1, + 214, 210, 204, -1, 330, 327, 205, -1, + 330, 206, 286, -1, 330, 205, 207, -1, + 330, 207, 206, -1, 208, 209, 210, -1, + 208, 210, 302, -1, 208, 211, 209, -1, + 208, 302, 211, -1, 297, 243, 298, -1, + 297, 212, 243, -1, 297, 296, 226, -1, + 297, 226, 225, -1, 297, 225, 212, -1, + 301, 213, 216, -1, 301, 214, 213, -1, + 301, 215, 214, -1, 301, 302, 215, -1, + 303, 216, 217, -1, 303, 218, 219, -1, + 303, 217, 218, -1, 303, 219, 304, -1, + 303, 301, 216, -1, 220, 344, 345, -1, + 220, 222, 221, -1, 220, 221, 344, -1, + 220, 223, 222, -1, 220, 345, 223, -1, + 224, 343, 225, -1, 224, 345, 343, -1, + 224, 225, 226, -1, 224, 226, 296, -1, + 224, 296, 345, -1, 227, 229, 228, -1, + 227, 230, 229, -1, 227, 228, 230, -1, + 231, 232, 233, -1, 231, 234, 232, -1, + 231, 233, 235, -1, 231, 235, 234, -1, + 236, 239, 357, -1, 236, 357, 237, -1, + 236, 238, 239, -1, 236, 237, 238, -1, + 352, 357, 239, -1, 352, 239, 351, -1, + 299, 240, 241, -1, 299, 242, 295, -1, + 299, 241, 242, -1, 299, 298, 243, -1, + 299, 243, 240, -1, 307, 245, 244, -1, + 307, 244, 310, -1, 307, 246, 245, -1, + 307, 308, 247, -1, 307, 247, 246, -1, + 309, 248, 308, -1, 309, 312, 248, -1, + 249, 250, 264, -1, 249, 251, 250, -1, + 249, 258, 252, -1, 249, 264, 258, -1, + 249, 253, 251, -1, 249, 252, 253, -1, + 254, 255, 260, -1, 254, 260, 261, -1, + 254, 262, 255, -1, 254, 261, 262, -1, + 263, 257, 256, -1, 263, 260, 257, -1, + 263, 256, 258, -1, 263, 258, 264, -1, + 259, 261, 260, -1, 259, 262, 261, -1, + 259, 260, 263, -1, 259, 264, 262, -1, + 259, 263, 264, -1, 318, 350, 313, -1, + 265, 266, 267, -1, 265, 316, 266, -1, + 265, 319, 316, -1, 265, 268, 319, -1, + 265, 267, 268, -1, 269, 270, 271, -1, + 269, 272, 270, -1, 269, 271, 273, -1, + 269, 273, 272, -1, 322, 324, 274, -1, + 322, 275, 323, -1, 322, 276, 275, -1, + 322, 274, 276, -1, 283, 282, 277, -1, + 283, 278, 284, -1, 283, 277, 278, -1, + 279, 281, 280, -1, 279, 280, 282, -1, + 279, 282, 283, -1, 279, 283, 284, -1, + 279, 284, 285, -1, 279, 285, 281, -1, + 331, 289, 332, -1, 331, 286, 334, -1, + 331, 330, 286, -1, 329, 287, 328, -1, + 329, 332, 287, -1, 336, 288, 289, -1, + 336, 289, 331, -1, 336, 331, 334, -1, + 336, 341, 288, -1, 290, 292, 291, -1, + 290, 293, 292, -1, 290, 291, 293, -1, + 294, 295, 296, -1, 294, 296, 297, -1, + 294, 297, 298, -1, 294, 298, 299, -1, + 294, 299, 295, -1, 300, 302, 301, -1, + 300, 301, 303, -1, 300, 304, 302, -1, + 300, 303, 304, -1, 342, 341, 338, -1, + 342, 338, 337, -1, 342, 337, 305, -1, + 342, 305, 343, -1, 306, 308, 307, -1, + 306, 309, 308, -1, 306, 307, 310, -1, + 306, 310, 311, -1, 306, 311, 312, -1, + 306, 312, 309, -1, 320, 318, 313, -1, + 320, 313, 314, -1, 320, 314, 315, -1, + 320, 316, 319, -1, 320, 315, 316, -1, + 349, 350, 318, -1, 346, 317, 354, -1, + 346, 349, 318, -1, 346, 319, 317, -1, + 346, 320, 319, -1, 346, 318, 320, -1, + 321, 322, 323, -1, 321, 324, 322, -1, + 321, 323, 325, -1, 321, 325, 324, -1, + 326, 328, 327, -1, 326, 329, 328, -1, + 326, 327, 330, -1, 326, 330, 331, -1, + 326, 331, 332, -1, 326, 332, 329, -1, + 333, 334, 335, -1, 333, 336, 334, -1, + 333, 335, 337, -1, 333, 337, 338, -1, + 333, 338, 341, -1, 333, 341, 336, -1, + 339, 340, 341, -1, 339, 341, 342, -1, + 339, 342, 343, -1, 339, 344, 340, -1, + 339, 343, 345, -1, 339, 345, 344, -1, + 347, 346, 354, -1, 356, 349, 346, -1, + 356, 346, 347, -1, 356, 347, 354, -1, + 356, 357, 352, -1, 348, 349, 356, -1, + 348, 350, 349, -1, 348, 351, 350, -1, + 348, 352, 351, -1, 348, 356, 352, -1, + 353, 354, 355, -1, 353, 356, 354, -1, + 353, 355, 357, -1, 353, 357, 356, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link3.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link3.wrl new file mode 100644 index 00000000..db0c0f4f --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link3.wrl @@ -0,0 +1,829 @@ +#VRML V2.0 utf8 + + +DEF link3 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.15081801 0.038757 -0.061939001, + -0.044998001 0.054016002 0.082993001, + 0.012573 -0.071410999 -0.139999, + -0.155159 -0.091003001 -0.055153001, + -0.155159 -0.091003001 -0.055153001, + -0.099997997 -0.091003001 -0.077996001, + -0.143333 -0.091003001 -0.064856999, + -0.13855 0.133118 -0.066780001, + 0.038215999 -0.071960002 -0.118904, + 0.044167001 -0.072144002 -0.112091, + 0.015871 -0.002502 -0.139442, + 0.014235 -0.002502 -0.139862, + 0.060043 -0.058715999 0.012497, + -0.044845998 -0.091003001 -0.055153001, + 0.060036 -0.059021 -0.084991999, + -0.15111201 -0.0045170002 -0.0623, + -0.150665 -0.047791 -0.061751999, + -0.15985499 -0.047791 -0.052891001, + -0.115219 -0.091003001 -0.076500997, + -0.115219 -0.091003001 -0.076500997, + -0.129852 -0.091003001 -0.072061002, + -0.172066 -0.091003001 -0.029846, + -0.164856 -0.091003001 -0.043334998, + -0.167706 -0.047791 -0.042385001, + -0.044036999 -0.077026002 -0.135002, + -0.043861002 -0.071837999 -0.139999, + 0.012764 -0.074036002 -0.137482, + 0.011894 -0.076599002 -0.135002, + -0.056664001 -0.091003001 -0.064856999, + -0.135361 0.16198701 0.035362002, + -0.130219 0.16198701 -0.036003001, + -0.176506 -0.091003001 -0.015213, + -0.18043301 -0.0045170002 -0.0049669999, + -0.107605 -0.091003001 0.077255003, + -0.115219 -0.091003001 0.076491997, + -0.100006 -0.091003001 0.078002997, + -0.15515099 -0.091003001 0.055144999, + -0.164856 -0.091003001 0.043334998, + -0.149748 -0.0045170002 0.063385002, + -0.022003001 -0.091003001 4.1787199e-012, + -0.046021 0.155029 -0.069650002, + -0.048172001 0.132751 -0.10743, + -0.043861002 0.066832997 -0.139999, + -0.074051 0.133057 -0.104012, + -0.065825999 0.132935 -0.10743, + -0.074371003 0.133118 -0.103828, + 0.061129 -0.0035399999 0.082993001, + 0.063004002 -0.034972999 0.069991998, + -0.13126899 -0.0045170002 0.074265003, + -0.061446998 0.133118 0.066771999, + 0.044998001 0.054016002 0.082993001, + 0.044998001 -0.078002997 -0.088188998, + -0.17379799 -0.047791 -0.030567, + -0.17784899 -0.047791 -0.017906001, + -0.178534 -0.0045170002 -0.018059, + -0.178085 0.038757 -0.017960001, + -0.16791201 0.038757 -0.042514998, + -0.174023 0.038757 -0.030658999, + -0.174448 -0.0045170002 -0.030838, + -0.168303 -0.0045170002 -0.042759001, + -0.16003799 0.038757 -0.053055, + -0.160385 -0.0045170002 -0.053362001, + -0.070152 -0.091003001 -0.072061002, + 0.013084 -0.076599002 -0.134903, + 0.013084 -0.076599002 -0.134903, + -0.084784999 -0.091003001 -0.076500997, + 0.031440999 -0.077026002 -0.119354, + 0.031440999 -0.077026002 -0.119354, + 0.032660998 -0.074401997 -0.121712, + 0.018363999 0.066467002 -0.138153, + 0.017906001 -0.071471997 -0.138458, + 0.017416 -0.002502 -0.138752, + -0.143814 0.14801 0.046691999, + -0.135345 0.140625 0.061218001, + -0.119965 0.133118 0.074478, + -0.129517 0.133118 0.071227998, + -0.091872998 -0.080017 0.092087001, + -0.110062 0.133118 0.076447003, + -0.154526 0.133118 -0.054527, + -0.156479 -0.047791 0.056473002, + -0.149323 -0.047791 0.062835999, + -0.15515099 -0.091003001 0.055144999, + -0.143341 -0.091003001 0.064850003, + -0.027938999 -0.091003001 -0.029846, + -0.035149001 -0.091003001 -0.043334998, + -0.023499001 -0.091003001 -0.015213, + -0.027938999 -0.091003001 0.029854, + -0.023499001 -0.091003001 0.015221, + -0.059997998 0.16198701 -0.069284, + 0.063004002 0.034972999 0.050003, + 0.060219001 0.052306999 -0.038715001, + 0.060284 0.051819 -0.084939003, + 0.060943998 0.024109 -0.084799998, + 0.061122 -0.0036009999 -0.084762, + 0.063004002 -0.034972999 0.050003, + 0.063004002 -0.034972999 0.069991998, + -0.033295002 0.140442 -0.084344, + -0.027450999 0.13281301 -0.091531001, + -0.036773998 0.147827 -0.070473999, + -0.039551001 0.147888 -0.077110998, + -0.050689999 0.16198701 -0.057137001, + -0.043625001 0.155029 -0.063910998, + -0.052673001 0.16198701 -0.061958, + -0.042862002 0.15509 -0.057700999, + 0.013092 0.066467002 -0.139984, + 0.013611 0.066467002 -0.139946, + -0.057007 0.13281301 -0.108589, + -0.043861002 0.066832997 -0.139999, + 0.012573 0.066405997 -0.139999, + 0.012573 0.066405997 -0.139999, + 0.012573 -0.071410999 -0.139999, + 0.013092 -0.071410999 -0.139984, + 0.013611 -0.071471997 -0.139946, + -0.074676998 0.133118 -0.103661, + 0.060196001 -0.052184999 0.082993001, + 0.060286999 -0.051635999 0.082993001, + -0.14082301 -0.047791 0.068649001, + -0.130997 -0.047791 0.073624, + -0.091918997 -0.085022002 0.092072003, + -0.131088 0.038757 0.073836997, + -0.141188 -0.0045170002 0.069260001, + -0.146942 0.133118 0.061172001, + -0.13855 0.133118 0.066771999, + -0.14195301 0.140625 0.056899998, + -0.148376 0.140625 0.051543999, + -0.14946 0.038757 0.063019, + -0.140945 0.038757 0.068862997, + 0.015845999 0.066588998 -0.13945, + 0.013611 0.066467002 -0.139946, + -0.039948002 0.132751 -0.104027, + 0.017906001 0.066528 -0.138458, + 0.015845999 0.066588998 -0.13945, + -0.048172001 0.132751 -0.10743, + 0.060036 -0.059021 0.0076520001, + 0.044472001 -0.077454001 -0.103218, + 0.018798999 -0.071471997 -0.137825, + 0.032257002 -0.071777001 -0.125725, + -0.13389599 0.15509 0.045975, + -0.138 0.14801 0.051529001, + -0.139084 0.15509 0.041664001, + -0.135361 0.16198701 0.035362002, + -0.132019 0.14801 0.05545, + -0.12831099 0.140625 0.064773999, + -0.120468 0.140625 0.067657001, + -0.121704 0.16198701 0.041694999, + -0.094879001 0.16198701 0.046707001, + -0.13389599 0.15509 -0.045981999, + -0.139084 0.15509 -0.041664001, + -0.125 0.16198701 -0.043297, + -0.148376 0.140625 -0.051552001, + -0.146942 0.133118 -0.061179999, + -0.174484 0.133118 -0.019951001, + -0.141205 0.16198701 0.022606, + -0.141693 0.16198701 -0.021706, + -0.16117901 0.133118 -0.046944, + -0.14830001 0.16198701 0.012947, + -0.17645299 0.133118 0.010063, + -0.1707 0.140625 8e-006, + -0.178038 -0.0045170002 0.020103, + -0.17426901 -0.0045170002 0.031273, + -0.172066 -0.091003001 0.029854, + -0.173622 -0.047791 0.030990999, + -0.172066 -0.091003001 0.029854, + -0.16865499 -0.047791 0.04081, + -0.164856 -0.091003001 0.043334998, + -0.179489 -0.047791 0.0078429999, + -0.17735299 -0.047791 0.019928001, + -0.176506 -0.091003001 0.015221, + -0.180197 -0.0045170002 0.0079119997, + -0.178001 -0.091003001 1.7408029e-012, + -0.179726 -0.047791 -0.004921, + -0.169264 -0.0045170002 0.041191, + -0.15698101 -0.0045170002 0.056976002, + -0.16284201 -0.047791 0.049316, + -0.0858 -0.090026997 0.091964997, + -0.070160002 -0.091003001 0.072067, + -0.084778003 -0.091003001 0.076491997, + -0.0392 -0.090026997 0.070556998, + 0.044998001 -0.060973998 0.082993001, + -0.042419001 -0.090026997 0.073105, + -0.056671001 -0.091003001 0.064850003, + -0.044845998 -0.091003001 0.055144999, + -0.038192999 -0.090026997 0.068741001, + -0.035149001 -0.091003001 0.043334998, + -0.050003 0.16198701 8e-006, + -0.050003 0.16198701 -0.051964, + -0.055861998 0.16198701 -0.066109002, + 0.060279999 0.051819 0.0076830001, + 0.044998001 0.072998002 -0.088188998, + 0.059799001 0.053100999 0.0076830001, + 0.060054999 0.052733999 -0.038715001, + 0.060051002 0.052733999 0.0076830001, + 0.025711 0.066588998 -0.131981, + 0.032258999 -0.002502 -0.125725, + 0.024101 0.071837999 -0.12668601, + 0.018798999 0.066467002 -0.137825, + 0.024788 0.069214001 -0.12943999, + 0.018798999 0.066467002 -0.137825, + -0.032883 0.132751 -0.098595999, + 0.041191 0.067078002 -0.115501, + 0.038424 -0.002502 -0.119083, + 0.031440999 0.072021 -0.119354, + -0.044723999 0.140442 -0.095742002, + -0.039948002 0.132751 -0.104027, + -0.038254 0.140442 -0.090783, + -0.054763999 0.15509 -0.078362003, + -0.049819998 0.15509 -0.074578002, + -0.059997998 0.16198701 -0.069284, + -0.043945 0.147888 -0.082803003, + -0.049667001 0.147888 -0.087182, + -0.063446 0.147888 -0.090905003, + -0.068374999 0.14038099 -0.098901004, + -0.060318001 0.140442 -0.099937998, + -0.070572004 0.147827 -0.089989997, + -0.052246001 0.140442 -0.098855004, + -0.05632 0.147888 -0.089943998, + -0.060516 0.15509 -0.080743, + -0.066680998 0.155029 -0.081582002, + -0.072844997 0.155029 -0.080789, + -0.138 0.14801 -0.051537, + -0.128571 0.15509 -0.049477, + -0.13855 0.133118 -0.066780001, + -0.14195301 0.140625 -0.056908, + -0.093704 -0.090026997 0.091095001, + -0.129852 -0.091003001 0.072067, + -0.089873999 -0.090026997 0.092574999, + -0.093704 -0.090026997 0.091095001, + -0.129852 -0.091003001 0.072067, + 0.059356999 0.046326 0.082993001, + -0.064636 0.16198701 0.035362002, + -0.056701999 0.16198701 0.025002001, + 0.059803002 -0.059875 -0.038754001, + 0.059967 -0.059448 -0.038754001, + 0.059555002 -0.060242001 -0.085095003, + 0.059799001 -0.059875 0.0076520001, + 0.059974998 -0.059142999 0.012627, + 0.060196001 -0.052184999 0.082993001, + 0.044243 -0.073546998 -0.109863, + 0.059803002 -0.059875 -0.085042, + 0.044167001 -0.072144002 -0.112091, + 0.044319 -0.074890003 -0.107628, + 0.039932001 -0.074646004 -0.113411, + 0.016251 -0.07666 -0.133469, + 0.024788 -0.074219003 -0.12943999, + 0.025711 -0.071594 -0.131981, + 0.018798999 -0.071471997 -0.137825, + 0.024101 -0.076782003 -0.12668601, + 0.016251 -0.07666 -0.133469, + 0.018363999 -0.071471997 -0.138153, + 0.017906001 -0.071471997 -0.138458, + 0.015845999 -0.071594 -0.13945, + 0.015007 -0.074219003 -0.136925, + 0.014198 -0.076599002 -0.13461301, + -0.166779 0.133118 0.038550999, + -0.154404 0.140625 0.045134999, + -0.110779 0.14801 0.063110001, + -0.109604 0.15509 0.056304999, + -0.11853 0.14801 0.061278999, + -0.111893 0.140625 0.069687001, + -0.122879 0.15509 0.052338, + -0.125641 0.14801 0.058669999, + -0.116547 0.15509 0.054671999, + -0.112946 0.16198701 0.048294, + -0.125 0.16198701 0.043288998, + -0.128571 0.15509 0.049469002, + -0.149277 0.14801 -0.040886, + -0.154404 0.140625 -0.045143001, + -0.143814 0.14801 -0.046700001, + -0.15713499 0.15509 7.9999936e-006, + -0.149994 0.16198701 7.9999982e-006, + -0.154175 0.14801 -0.034125999, + -0.1548 0.15509 -0.016151, + -0.143295 0.16198701 -0.025002001, + -0.152008 0.15509 -0.023628, + -0.14834601 0.15509 -0.030448999, + -0.143967 0.15509 -0.036476001, + -0.143295 0.16198701 -0.025002001, + -0.14830001 0.16198701 -0.012947, + -0.135361 0.16198701 -0.035347, + -0.143295 0.16198701 0.025002001, + -0.143967 0.15509 0.036476001, + -0.149261 0.14801 0.040894002, + -0.16780099 0.140625 0.019989001, + -0.15829501 0.14801 0.026481999, + -0.152008 0.15509 0.023628, + -0.1548 0.15509 0.016151, + -0.164368 0.140625 0.029243, + -0.159821 0.140625 0.037682001, + -0.154175 0.14801 0.034125999, + -0.14834601 0.15509 0.030448999, + -0.163361 0.14801 0.0091930004, + -0.161423 0.14801 0.018097, + -0.16996799 0.140625 0.010155, + -0.15654001 0.15509 0.0082019996, + -0.174484 0.133118 0.019951001, + -0.174484 0.133118 0.019951001, + -0.177597 0.038757 0.019989001, + -0.173843 0.038757 0.031090001, + -0.171234 0.133118 0.029503001, + -0.177109 0.133118 7.9999973e-006, + -0.177109 0.133118 8.0000063e-006, + -0.17645299 0.133118 0.010063, + -0.17973299 0.038757 0.0078659998, + -0.17997 0.038757 -0.0049359999, + -0.17645299 0.133118 -0.010063, + -0.16302501 0.038757 0.049469002, + -0.163389 -0.0045170002 0.049759001, + -0.168869 0.038757 0.040947001, + -0.16117901 0.133118 0.046936002, + -0.156662 0.038757 0.056655999, + -0.154526 0.133118 0.05452, + 0.059601001 -0.053100999 0.082993001, + 0.059142999 -0.053406 0.082993001, + -0.087798998 -0.090026997 0.092545003, + -0.070496 0.133118 0.071227998, + -0.064650998 0.140625 0.061218001, + -0.089934997 0.133118 0.076447003, + -0.100006 0.133118 0.077102996, + -0.102722 0.140625 0.070633002, + -0.102203 0.15509 0.057082999, + -0.102463 0.14801 0.063979998, + -0.093796 0.14801 0.063721001, + -0.100006 0.16198701 0.049988002, + 0.044319 0.069885001 -0.107628, + 0.059806999 0.053100999 -0.085042, + 0.060054999 0.052733999 -0.084988996, + 0.044472001 0.072448999 -0.103218, + 0.059806999 0.053100999 -0.085042, + 0.044167001 0.067199998 -0.112091, + 0.032257002 0.066771999 -0.125725, + 0.044167001 0.067199998 -0.112091, + 0.032660998 0.069397002 -0.121712, + 0.039932001 0.069641002 -0.113411, + 0.044243 0.068542004 -0.109863, + -0.070006996 0.16198701 -0.071969002, + -0.055861998 0.16198701 -0.066109002, + -0.064819001 0.16198701 -0.071281999, + -0.070006996 0.16198701 -0.071969002, + -0.050003 0.16198701 -0.051964, + -0.063995004 0.16198701 -0.030205, + -0.080002002 0.16198701 -0.069283001, + -0.075180002 0.16198701 -0.071281999, + -0.100082 0.14801 -0.073891997, + -0.103409 0.140625 -0.079659, + -0.077239998 0.14801 -0.087075002, + -0.132019 0.14801 -0.055458002, + -0.078598 0.15509 -0.078331999, + -0.064636 0.15509 0.044861, + -0.060348999 0.14801 0.050278001, + -0.074997 0.16198701 0.043288998, + -0.076278999 0.14801 0.059464, + -0.071442001 0.15509 0.049469002, + -0.067993 0.14801 0.05545, + -0.043228 0.15509 0.0063709999, + 0.044998001 0.072754003 -0.007156, + -0.051697001 0.16198701 0.012947, + -0.050003 0.16198701 8.0000036e-006, + 0.059769001 0.052795 0.012733, + 0.044998001 0.072998002 -0.0092850002, + 0.059813999 0.046021 0.082993001, + 0.059547 -0.060242001 0.0076520001, + 0.059799001 -0.059631001 0.01268, + 0.059967 -0.052673001 0.082993001, + -0.163361 0.14801 -0.0091930004, + -0.164032 0.14801 8.0000018e-006, + -0.16996799 0.140625 -0.010155, + -0.15654001 0.15509 -0.0082019996, + -0.164368 0.140625 -0.029243, + -0.159821 0.140625 -0.037682001, + -0.166779 0.133118 -0.038550999, + -0.15829501 0.14801 -0.026481999, + -0.171234 0.133118 -0.029503001, + -0.16780099 0.140625 -0.019997001, + -0.161423 0.14801 -0.018105, + -0.083405003 0.140625 0.068709999, + -0.093139999 0.140625 0.070358001, + -0.089934997 0.133118 0.076447003, + -0.080048002 0.133118 0.074478, + -0.073807001 0.140625 0.065659001, + -0.086594 0.15509 0.055527002, + -0.094452001 0.15509 0.056853998, + -0.087067001 0.16198701 0.048294, + -0.084976003 0.14801 0.062240999, + -0.078841999 0.15509 0.053055, + 0.060226001 0.052002002 0.012627, + 0.060051002 0.052429002 0.01268, + 0.044998001 -0.077820003 -0.002754, + 0.059601001 -0.053100999 0.082993001, + 0.044998001 -0.077820003 -0.002754, + 0.059525002 -0.059997998 0.012733, + 0.044998001 -0.078002997 -0.004768, + 0.060501002 0.044555999 0.082993001, + 0.063004002 0.034972999 0.069991998, + 0.063004002 0.034972999 0.069991998, + 0.060991 0.020508001 0.082993001, + -0.087769002 -0.085022002 0.092528999, + 0.060501002 0.044555999 0.082993001, + 0.060180999 0.045593001 0.082993001, + 0.06041 0.045104999 0.082993001, + 0.060180999 0.045593001 0.082993001, + 0.06041 0.045104999 0.082993001, + -0.089873999 -0.080017 0.092574999, + 0.059813999 0.046021 0.082993001 ] + + } + coordIndex [ 5, 19, 24, -1, 107, 109, 25, -1, + 107, 25, 42, -1, 95, 133, 94, -1, + 6, 25, 24, -1, 6, 16, 25, -1, + 6, 4, 16, -1, 303, 55, 32, -1, + 303, 304, 55, -1, 15, 25, 16, -1, + 15, 0, 42, -1, 15, 42, 25, -1, + 60, 78, 0, -1, 60, 0, 15, -1, + 169, 31, 167, -1, 183, 176, 31, -1, + 198, 97, 326, -1, 198, 204, 97, -1, + 150, 42, 0, -1, 150, 0, 78, -1, + 1, 50, 317, -1, 1, 401, 50, -1, + 1, 317, 401, -1, 76, 225, 401, -1, + 376, 317, 50, -1, 136, 193, 200, -1, + 11, 127, 250, -1, 110, 25, 109, -1, + 110, 2, 25, -1, 112, 25, 2, -1, + 112, 11, 250, -1, 112, 2, 110, -1, + 17, 16, 4, -1, 20, 19, 5, -1, + 20, 6, 24, -1, 3, 4, 6, -1, + 22, 84, 31, -1, 22, 6, 84, -1, + 22, 3, 6, -1, 22, 4, 3, -1, + 22, 23, 17, -1, 22, 17, 4, -1, + 13, 84, 28, -1, 13, 28, 67, -1, + 27, 5, 24, -1, 27, 64, 5, -1, + 65, 5, 64, -1, 65, 20, 5, -1, + 65, 84, 6, -1, 65, 6, 20, -1, + 247, 67, 28, -1, 30, 340, 278, -1, + 151, 55, 304, -1, 57, 55, 151, -1, + 153, 30, 278, -1, 154, 78, 60, -1, + 154, 266, 78, -1, 162, 167, 31, -1, + 162, 31, 82, -1, 35, 31, 176, -1, + 35, 82, 31, -1, 35, 34, 82, -1, + 80, 81, 82, -1, 87, 31, 84, -1, + 87, 183, 31, -1, 188, 326, 185, -1, + 14, 93, 94, -1, 14, 239, 93, -1, + 14, 94, 133, -1, 14, 133, 232, -1, + 330, 93, 239, -1, 330, 92, 93, -1, + 330, 239, 9, -1, 330, 9, 200, -1, + 203, 204, 198, -1, 43, 44, 42, -1, + 7, 113, 42, -1, 7, 221, 113, -1, + 7, 42, 150, -1, 7, 150, 221, -1, + 106, 44, 212, -1, 106, 214, 41, -1, + 106, 212, 214, -1, 106, 42, 44, -1, + 106, 107, 42, -1, 336, 88, 207, -1, + 313, 401, 225, -1, 313, 395, 401, -1, + 313, 225, 35, -1, 313, 35, 176, -1, + 115, 95, 47, -1, 119, 76, 75, -1, + 377, 50, 314, -1, 377, 376, 50, -1, + 316, 317, 376, -1, 229, 230, 145, -1, + 8, 9, 239, -1, 8, 239, 136, -1, + 8, 200, 9, -1, 8, 136, 200, -1, + 10, 250, 127, -1, 10, 71, 250, -1, + 10, 127, 71, -1, 105, 127, 11, -1, + 105, 11, 112, -1, 111, 112, 110, -1, + 12, 133, 95, -1, 12, 235, 133, -1, + 12, 95, 115, -1, 12, 115, 235, -1, + 134, 84, 13, -1, 134, 13, 67, -1, + 238, 14, 232, -1, 238, 239, 14, -1, + 59, 23, 52, -1, 61, 60, 15, -1, + 61, 15, 16, -1, 61, 16, 17, -1, + 61, 17, 23, -1, 61, 23, 59, -1, + 18, 24, 19, -1, 18, 20, 24, -1, + 18, 19, 20, -1, 21, 22, 31, -1, + 21, 31, 53, -1, 21, 23, 22, -1, + 21, 53, 52, -1, 21, 52, 23, -1, + 26, 27, 24, -1, 26, 24, 25, -1, + 26, 25, 112, -1, 63, 250, 251, -1, + 63, 112, 250, -1, 63, 26, 112, -1, + 63, 64, 27, -1, 63, 27, 26, -1, + 62, 247, 28, -1, 62, 28, 84, -1, + 62, 84, 65, -1, 246, 67, 247, -1, + 254, 72, 281, -1, 29, 279, 140, -1, + 29, 140, 263, -1, 29, 144, 279, -1, + 29, 263, 144, -1, 280, 139, 140, -1, + 280, 72, 139, -1, 280, 281, 72, -1, + 280, 140, 279, -1, 77, 401, 317, -1, + 143, 142, 75, -1, 148, 278, 340, -1, + 148, 340, 220, -1, 152, 340, 30, -1, + 152, 144, 145, -1, 152, 145, 340, -1, + 152, 279, 144, -1, 152, 30, 153, -1, + 371, 369, 57, -1, 371, 57, 151, -1, + 365, 151, 304, -1, 276, 153, 278, -1, + 156, 295, 292, -1, 173, 164, 81, -1, + 168, 303, 32, -1, 170, 31, 169, -1, + 170, 53, 31, -1, 170, 32, 53, -1, + 170, 168, 32, -1, 54, 32, 55, -1, + 54, 53, 32, -1, 224, 34, 225, -1, + 224, 82, 34, -1, 33, 225, 34, -1, + 33, 35, 225, -1, 33, 34, 35, -1, + 309, 125, 310, -1, 37, 164, 162, -1, + 37, 81, 164, -1, 36, 162, 82, -1, + 36, 82, 81, -1, 36, 37, 162, -1, + 36, 81, 37, -1, 116, 120, 80, -1, + 116, 80, 82, -1, 116, 117, 120, -1, + 38, 172, 80, -1, 38, 309, 172, -1, + 38, 125, 309, -1, 38, 120, 125, -1, + 38, 80, 120, -1, 85, 134, 51, -1, + 39, 51, 390, -1, 39, 390, 87, -1, + 39, 85, 51, -1, 39, 87, 84, -1, + 39, 84, 85, -1, 355, 338, 230, -1, + 339, 230, 338, -1, 339, 340, 145, -1, + 339, 145, 230, -1, 91, 92, 330, -1, + 332, 198, 326, -1, 332, 201, 198, -1, + 206, 102, 40, -1, 206, 40, 99, -1, + 101, 99, 40, -1, 101, 40, 102, -1, + 132, 41, 214, -1, 132, 214, 203, -1, + 132, 106, 41, -1, 45, 42, 113, -1, + 45, 43, 42, -1, 45, 44, 43, -1, + 108, 109, 107, -1, 211, 212, 44, -1, + 211, 44, 45, -1, 344, 45, 113, -1, + 344, 213, 211, -1, 344, 211, 45, -1, + 114, 313, 362, -1, 114, 115, 313, -1, + 46, 313, 115, -1, 46, 394, 313, -1, + 46, 115, 47, -1, 46, 47, 95, -1, + 46, 95, 393, -1, 46, 393, 394, -1, + 118, 225, 76, -1, 48, 119, 120, -1, + 48, 76, 119, -1, 48, 118, 76, -1, + 48, 120, 117, -1, 48, 117, 118, -1, + 122, 119, 75, -1, 122, 73, 123, -1, + 122, 75, 142, -1, 122, 142, 73, -1, + 315, 314, 49, -1, 228, 352, 315, -1, + 228, 315, 49, -1, 228, 314, 50, -1, + 228, 49, 314, -1, 228, 50, 401, -1, + 130, 71, 127, -1, 130, 195, 69, -1, + 241, 136, 239, -1, 241, 68, 136, -1, + 233, 51, 134, -1, 233, 134, 238, -1, + 233, 390, 51, -1, 233, 360, 390, -1, + 58, 59, 52, -1, 58, 52, 53, -1, + 58, 53, 54, -1, 58, 55, 57, -1, + 58, 54, 55, -1, 56, 57, 369, -1, + 56, 369, 154, -1, 56, 58, 57, -1, + 56, 59, 58, -1, 56, 154, 60, -1, + 56, 60, 61, -1, 56, 61, 59, -1, + 252, 247, 62, -1, 252, 64, 63, -1, + 252, 65, 64, -1, 252, 62, 65, -1, + 252, 63, 251, -1, 66, 67, 246, -1, + 66, 246, 136, -1, 66, 136, 68, -1, + 66, 68, 241, -1, 66, 134, 67, -1, + 66, 241, 134, -1, 244, 193, 136, -1, + 244, 135, 195, -1, 248, 69, 195, -1, + 248, 195, 135, -1, 248, 130, 69, -1, + 248, 249, 130, -1, 70, 250, 71, -1, + 70, 249, 250, -1, 70, 71, 130, -1, + 70, 130, 249, -1, 124, 123, 72, -1, + 124, 254, 310, -1, 124, 72, 254, -1, + 138, 72, 123, -1, 138, 139, 72, -1, + 141, 73, 142, -1, 141, 264, 138, -1, + 141, 123, 73, -1, 141, 138, 123, -1, + 318, 77, 317, -1, 318, 320, 258, -1, + 318, 258, 77, -1, 74, 143, 75, -1, + 74, 75, 76, -1, 74, 77, 258, -1, + 74, 258, 143, -1, 74, 76, 401, -1, + 74, 401, 77, -1, 149, 150, 78, -1, + 149, 78, 266, -1, 149, 266, 267, -1, + 157, 156, 292, -1, 157, 365, 304, -1, + 301, 295, 156, -1, 163, 164, 173, -1, + 163, 173, 171, -1, 163, 171, 161, -1, + 79, 81, 80, -1, 79, 173, 81, -1, + 79, 80, 172, -1, 79, 172, 173, -1, + 166, 158, 168, -1, 166, 161, 158, -1, + 166, 167, 162, -1, 166, 162, 161, -1, + 159, 158, 161, -1, 159, 161, 171, -1, + 159, 171, 307, -1, 159, 307, 297, -1, + 227, 82, 224, -1, 227, 116, 82, -1, + 83, 84, 134, -1, 83, 85, 84, -1, + 83, 134, 85, -1, 175, 180, 179, -1, + 181, 180, 175, -1, 181, 176, 183, -1, + 181, 175, 176, -1, 312, 313, 178, -1, + 86, 183, 87, -1, 86, 182, 183, -1, + 86, 87, 390, -1, 86, 390, 182, -1, + 388, 182, 390, -1, 388, 312, 178, -1, + 187, 392, 90, -1, 187, 90, 191, -1, + 356, 185, 338, -1, 356, 338, 355, -1, + 381, 229, 145, -1, 335, 88, 336, -1, + 335, 207, 88, -1, 335, 102, 206, -1, + 194, 198, 201, -1, 194, 196, 198, -1, + 189, 358, 357, -1, 385, 191, 189, -1, + 385, 189, 357, -1, 190, 191, 90, -1, + 325, 91, 330, -1, 325, 90, 91, -1, + 325, 190, 90, -1, 89, 90, 392, -1, + 89, 91, 90, -1, 89, 92, 91, -1, + 89, 93, 92, -1, 89, 94, 93, -1, + 89, 392, 393, -1, 89, 95, 94, -1, + 89, 393, 95, -1, 329, 200, 193, -1, + 329, 194, 201, -1, 197, 130, 198, -1, + 197, 195, 130, -1, 96, 97, 204, -1, + 96, 204, 99, -1, 96, 326, 97, -1, + 96, 99, 326, -1, 208, 99, 204, -1, + 208, 206, 99, -1, 103, 185, 326, -1, + 103, 326, 101, -1, 98, 326, 99, -1, + 98, 101, 326, -1, 98, 99, 101, -1, + 100, 101, 102, -1, 100, 338, 185, -1, + 100, 185, 103, -1, 100, 103, 101, -1, + 100, 335, 338, -1, 100, 102, 335, -1, + 128, 127, 105, -1, 128, 105, 106, -1, + 128, 106, 132, -1, 104, 106, 105, -1, + 104, 107, 106, -1, 104, 108, 107, -1, + 104, 109, 108, -1, 104, 110, 109, -1, + 104, 111, 110, -1, 104, 105, 112, -1, + 104, 112, 111, -1, 343, 113, 221, -1, + 343, 344, 113, -1, 346, 220, 340, -1, + 346, 340, 341, -1, 236, 114, 362, -1, + 236, 235, 115, -1, 236, 115, 114, -1, + 226, 117, 116, -1, 226, 118, 117, -1, + 226, 116, 227, -1, 226, 225, 118, -1, + 126, 120, 119, -1, 126, 119, 122, -1, + 126, 125, 120, -1, 121, 122, 123, -1, + 121, 124, 310, -1, 121, 123, 124, -1, + 121, 310, 125, -1, 121, 125, 126, -1, + 121, 126, 122, -1, 347, 228, 229, -1, + 402, 230, 229, -1, 402, 229, 228, -1, + 402, 228, 401, -1, 131, 130, 127, -1, + 131, 127, 128, -1, 131, 128, 132, -1, + 129, 203, 198, -1, 129, 198, 130, -1, + 129, 130, 131, -1, 129, 132, 203, -1, + 129, 131, 132, -1, 234, 232, 133, -1, + 234, 133, 235, -1, 234, 360, 233, -1, + 240, 134, 241, -1, 240, 238, 134, -1, + 245, 135, 244, -1, 245, 248, 135, -1, + 243, 136, 246, -1, 243, 244, 136, -1, + 253, 286, 298, -1, 253, 298, 297, -1, + 253, 297, 307, -1, 137, 139, 138, -1, + 137, 138, 264, -1, 137, 264, 263, -1, + 137, 263, 140, -1, 137, 140, 139, -1, + 319, 322, 256, -1, 257, 143, 258, -1, + 260, 264, 141, -1, 260, 257, 261, -1, + 260, 141, 142, -1, 260, 142, 143, -1, + 260, 143, 257, -1, 262, 256, 322, -1, + 262, 261, 256, -1, 262, 145, 144, -1, + 262, 144, 263, -1, 262, 381, 145, -1, + 262, 322, 381, -1, 275, 147, 267, -1, + 275, 278, 147, -1, 146, 267, 147, -1, + 146, 219, 267, -1, 146, 220, 219, -1, + 146, 148, 220, -1, 146, 278, 148, -1, + 146, 147, 278, -1, 222, 267, 219, -1, + 222, 149, 267, -1, 222, 150, 149, -1, + 222, 221, 150, -1, 372, 371, 151, -1, + 372, 151, 365, -1, 372, 365, 373, -1, + 269, 155, 279, -1, 269, 279, 152, -1, + 269, 152, 153, -1, 269, 276, 277, -1, + 269, 153, 276, -1, 368, 266, 154, -1, + 368, 154, 369, -1, 273, 271, 277, -1, + 284, 279, 155, -1, 284, 155, 285, -1, + 293, 285, 155, -1, 293, 155, 269, -1, + 293, 269, 268, -1, 293, 291, 285, -1, + 300, 157, 304, -1, 300, 156, 157, -1, + 300, 301, 156, -1, 364, 365, 157, -1, + 364, 157, 292, -1, 364, 293, 268, -1, + 296, 168, 158, -1, 296, 158, 159, -1, + 296, 159, 297, -1, 302, 303, 168, -1, + 302, 168, 296, -1, 302, 296, 301, -1, + 160, 161, 162, -1, 160, 163, 161, -1, + 160, 162, 164, -1, 160, 164, 163, -1, + 165, 167, 166, -1, 165, 166, 168, -1, + 165, 169, 167, -1, 165, 170, 169, -1, + 165, 168, 170, -1, 306, 307, 171, -1, + 306, 172, 309, -1, 306, 173, 172, -1, + 306, 171, 173, -1, 174, 175, 179, -1, + 174, 179, 178, -1, 174, 178, 313, -1, + 174, 313, 176, -1, 174, 176, 175, -1, + 177, 178, 179, -1, 177, 179, 180, -1, + 177, 180, 181, -1, 177, 183, 182, -1, + 177, 181, 183, -1, 177, 388, 178, -1, + 177, 182, 388, -1, 387, 312, 388, -1, + 184, 188, 185, -1, 184, 185, 356, -1, + 184, 358, 188, -1, 184, 356, 358, -1, + 186, 206, 207, -1, 186, 207, 335, -1, + 186, 335, 206, -1, 384, 187, 191, -1, + 384, 191, 385, -1, 384, 392, 187, -1, + 323, 326, 325, -1, 323, 332, 326, -1, + 327, 326, 188, -1, 327, 188, 358, -1, + 327, 358, 189, -1, 327, 190, 325, -1, + 327, 189, 191, -1, 327, 191, 190, -1, + 192, 329, 193, -1, 192, 193, 244, -1, + 192, 194, 329, -1, 192, 244, 195, -1, + 192, 196, 194, -1, 192, 195, 197, -1, + 192, 198, 196, -1, 192, 197, 198, -1, + 199, 330, 200, -1, 199, 200, 329, -1, + 199, 329, 330, -1, 331, 201, 332, -1, + 331, 329, 201, -1, 202, 204, 203, -1, + 202, 208, 204, -1, 202, 209, 208, -1, + 202, 203, 214, -1, 202, 214, 215, -1, + 202, 215, 209, -1, 205, 207, 206, -1, + 205, 206, 208, -1, 205, 208, 209, -1, + 205, 336, 207, -1, 205, 216, 336, -1, + 205, 215, 216, -1, 205, 209, 215, -1, + 218, 346, 341, -1, 218, 213, 344, -1, + 218, 344, 346, -1, 210, 212, 211, -1, + 210, 211, 213, -1, 210, 213, 218, -1, + 210, 218, 217, -1, 210, 214, 212, -1, + 210, 215, 214, -1, 210, 216, 215, -1, + 210, 217, 216, -1, 337, 336, 216, -1, + 337, 216, 217, -1, 337, 218, 341, -1, + 337, 217, 218, -1, 345, 219, 220, -1, + 345, 343, 221, -1, 345, 220, 346, -1, + 345, 221, 222, -1, 345, 222, 219, -1, + 223, 224, 225, -1, 223, 225, 226, -1, + 223, 227, 224, -1, 223, 226, 227, -1, + 348, 352, 228, -1, 348, 228, 347, -1, + 349, 229, 381, -1, 349, 347, 229, -1, + 359, 355, 230, -1, 359, 230, 402, -1, + 359, 358, 354, -1, 396, 395, 313, -1, + 396, 313, 394, -1, 231, 238, 232, -1, + 231, 232, 234, -1, 231, 233, 238, -1, + 231, 234, 233, -1, 361, 234, 235, -1, + 361, 236, 362, -1, 361, 235, 236, -1, + 361, 360, 234, -1, 237, 239, 238, -1, + 237, 238, 240, -1, 237, 241, 239, -1, + 237, 240, 241, -1, 242, 244, 243, -1, + 242, 245, 244, -1, 242, 246, 247, -1, + 242, 243, 246, -1, 242, 248, 245, -1, + 242, 249, 248, -1, 242, 250, 249, -1, + 242, 251, 250, -1, 242, 252, 251, -1, + 242, 247, 252, -1, 308, 310, 254, -1, + 308, 253, 307, -1, 287, 286, 253, -1, + 287, 253, 308, -1, 287, 308, 254, -1, + 287, 254, 281, -1, 287, 281, 288, -1, + 255, 256, 261, -1, 255, 261, 257, -1, + 255, 257, 258, -1, 255, 258, 320, -1, + 255, 320, 319, -1, 255, 319, 256, -1, + 259, 260, 261, -1, 259, 262, 263, -1, + 259, 261, 262, -1, 259, 263, 264, -1, + 259, 264, 260, -1, 265, 270, 274, -1, + 265, 274, 275, -1, 265, 266, 368, -1, + 265, 368, 270, -1, 265, 267, 266, -1, + 265, 275, 267, -1, 366, 364, 268, -1, + 366, 271, 373, -1, 366, 277, 271, -1, + 366, 269, 277, -1, 366, 268, 269, -1, + 370, 270, 368, -1, 370, 274, 270, -1, + 370, 273, 274, -1, 370, 373, 271, -1, + 370, 271, 273, -1, 272, 274, 273, -1, + 272, 275, 274, -1, 272, 277, 276, -1, + 272, 273, 277, -1, 272, 276, 278, -1, + 272, 278, 275, -1, 289, 279, 284, -1, + 289, 280, 279, -1, 289, 281, 280, -1, + 289, 288, 281, -1, 282, 292, 295, -1, + 282, 291, 292, -1, 282, 295, 298, -1, + 282, 298, 286, -1, 282, 286, 291, -1, + 283, 284, 285, -1, 283, 285, 291, -1, + 283, 291, 286, -1, 283, 286, 287, -1, + 283, 287, 288, -1, 283, 288, 289, -1, + 283, 289, 284, -1, 290, 292, 291, -1, + 290, 291, 293, -1, 290, 364, 292, -1, + 290, 293, 364, -1, 294, 295, 301, -1, + 294, 301, 296, -1, 294, 296, 297, -1, + 294, 298, 295, -1, 294, 297, 298, -1, + 299, 301, 300, -1, 299, 302, 301, -1, + 299, 303, 302, -1, 299, 304, 303, -1, + 299, 300, 304, -1, 305, 307, 306, -1, + 305, 308, 307, -1, 305, 306, 309, -1, + 305, 309, 310, -1, 305, 310, 308, -1, + 311, 313, 312, -1, 311, 312, 387, -1, + 311, 362, 313, -1, 311, 387, 362, -1, + 378, 377, 314, -1, 378, 314, 315, -1, + 378, 315, 352, -1, 378, 352, 350, -1, + 375, 316, 376, -1, 375, 317, 316, -1, + 375, 318, 317, -1, 375, 320, 318, -1, + 375, 321, 320, -1, 382, 378, 350, -1, + 382, 321, 375, -1, 380, 319, 320, -1, + 380, 320, 321, -1, 380, 322, 319, -1, + 380, 381, 322, -1, 380, 321, 382, -1, + 333, 325, 330, -1, 333, 323, 325, -1, + 333, 332, 323, -1, 324, 325, 326, -1, + 324, 326, 327, -1, 324, 327, 325, -1, + 328, 330, 329, -1, 328, 329, 331, -1, + 328, 331, 332, -1, 328, 333, 330, -1, + 328, 332, 333, -1, 334, 335, 336, -1, + 334, 336, 337, -1, 334, 338, 335, -1, + 334, 339, 338, -1, 334, 340, 339, -1, + 334, 341, 340, -1, 334, 337, 341, -1, + 342, 344, 343, -1, 342, 343, 345, -1, + 342, 346, 344, -1, 342, 345, 346, -1, + 351, 347, 349, -1, 351, 352, 348, -1, + 351, 348, 347, -1, 383, 349, 381, -1, + 383, 382, 350, -1, 383, 351, 349, -1, + 383, 350, 352, -1, 383, 352, 351, -1, + 353, 359, 354, -1, 353, 355, 359, -1, + 353, 356, 355, -1, 353, 354, 358, -1, + 353, 358, 356, -1, 399, 357, 358, -1, + 399, 358, 359, -1, 399, 385, 357, -1, + 399, 359, 402, -1, 389, 390, 360, -1, + 389, 360, 361, -1, 389, 362, 387, -1, + 389, 361, 362, -1, 363, 365, 364, -1, + 363, 364, 366, -1, 363, 373, 365, -1, + 363, 366, 373, -1, 367, 368, 369, -1, + 367, 370, 368, -1, 367, 369, 371, -1, + 367, 371, 372, -1, 367, 372, 373, -1, + 367, 373, 370, -1, 374, 375, 376, -1, + 374, 382, 375, -1, 374, 376, 377, -1, + 374, 377, 378, -1, 374, 378, 382, -1, + 379, 381, 380, -1, 379, 380, 382, -1, + 379, 383, 381, -1, 379, 382, 383, -1, + 398, 384, 385, -1, 398, 385, 399, -1, + 398, 392, 384, -1, 386, 387, 388, -1, + 386, 389, 387, -1, 386, 388, 390, -1, + 386, 390, 389, -1, 391, 392, 398, -1, + 391, 398, 396, -1, 391, 393, 392, -1, + 391, 394, 393, -1, 391, 396, 394, -1, + 400, 401, 395, -1, 400, 395, 396, -1, + 400, 396, 398, -1, 397, 398, 399, -1, + 397, 400, 398, -1, 397, 401, 400, -1, + 397, 402, 401, -1, 397, 399, 402, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link4.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link4.wrl new file mode 100644 index 00000000..df0315cf --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link4.wrl @@ -0,0 +1,1051 @@ +#VRML V2.0 utf8 + + +DEF link4 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.02153 -0.171875 -0.083861999, + -0.060013 -0.215027 0.0495, + -0.060013 -0.215027 -0.042479999, + -0.060013 -0.231506 -0.042479999, + -0.059096999 -0.15460201 -0.044372998, + -0.044998001 -0.341492 -0.054016002, + 0.022141 -0.171875 -0.083801001, + 0.021377999 -0.167603 -0.084472999, + 0.060013 -0.231506 0.051697001, + 0.044998001 -0.231506 0.060973998, + -0.054916002 -0.072388001 0.043945, + 1.5000011e-005 0.034972999 -0.051514, + 0.022079 -0.167542 -0.084351003, + 0.044998001 -0.341492 -0.054016002, + 0.060013 -0.075438999 -0.039062999, + 0.060013 -0.076476999 -0.040527001, + 0.060013 -0.077941999 -0.041565001, + -1.4999995e-005 -0.089965999 0.060364, + -0.037032999 -0.036804002 0.059753001, + -0.060013 -0.231506 0.051697001, + 0.059691999 -0.28649899 0.052795, + 0.058837999 -0.341492 0.053528, + 0.058837999 -0.341492 0.053528, + 0.043885998 -0.346497 0.018188, + 0.059921 -0.341492 0.052306999, + 0.058853 -0.231506 0.053528, + 0.059677001 -0.231506 0.052795, + 0.041457999 -0.096129999 0.060424998, + 0.055312999 -0.094420999 0.053100999, + 0.0092620002 -0.346497 -0.046569999, + -0.060013 -0.215027 0.051392, + -0.060013 -0.215027 0.051392, + -0.059096999 -0.15460201 0.051330999, + -0.060013 -0.215027 -0.044372998, + 0.013687 0.033386 -0.051514, + 0.006912 0.034607001 -0.051514, + 0.028214 0.027465999 -0.051635999, + 0.01918 -0.103149 -0.083861999, + -0.049240001 -0.102356 -0.083618, + -0.059326001 -0.341492 -0.046204001, + -0.058853 -0.341492 -0.046509001, + -0.059326001 -0.341492 -0.046204001, + -0.058853 -0.341492 -0.046509001, + -0.049178999 -0.169678 -0.084351003, + 0.059310999 -0.231506 -0.046204001, + -0.030869 0.022399999 0.058715999, + -0.037032999 -0.036804002 0.059753001, + -0.044998001 -0.341492 0.060973998, + -1.4999997e-005 -0.152527 0.060851999, + 0.044998001 -0.215027 0.060973998, + 0.044112999 -0.155518 0.060851999, + 0.059310999 -0.28649899 0.053222999, + 0.058853 -0.231506 0.053528, + 0.059921 -0.231506 0.052306999, + 0.060013 -0.215027 0.051392, + 0.058548 -0.154724 0.052733999, + 0.058883999 -0.154724 0.052246001, + 0.059310999 -0.231506 0.053222999, + 0.058090001 -0.154663 0.053100999, + 0.059432998 -0.215027 0.052795, + 0.059737999 -0.215027 0.052368, + 0.055771001 -0.094481997 0.052733999, + 0.050705001 -0.034302 0.053040002, + 0.037032999 -0.036804002 0.059753001, + 0.018173 -0.346497 -0.043884002, + 0.046587002 -0.346497 0.0092770001, + -0.044998001 -0.341492 -0.054016002, + 0.047502 -0.346497 5.1561654e-012, + -0.058853 -0.231506 0.053528, + -0.05632 -0.094481997 -0.044677999, + -0.059067 -0.154724 -0.044677999, + -0.056625001 -0.098632999 0.036559999, + -0.055739999 -0.084533997 0.036926001, + -0.055737998 -0.084533997 -0.031433001, + -0.059997998 -0.341492 -0.044739, + -0.059921 -0.231506 -0.045288, + -0.060013 -0.231506 -0.044739, + -0.059921 -0.341492 -0.045288, + -0.059921 -0.28649899 -0.045288, + -0.050980002 -0.169495 -0.083251998, + -0.050522 -0.169617 -0.083861999, + -0.049881 -0.169678 -0.084229, + -0.054916002 -0.072388001 -0.037903, + 0.016311999 0.045044001 -0.036559999, + 0.020584 0.042725001 -0.046082001, + 0.010391 0.045104999 -0.046082001, + 0.013687 0.033386 -0.051514, + 0.020706 0.043152001 -0.045775998, + 0.026566001 0.028564001 -0.051635999, + 0.030228 0.038879 -0.046082001, + 0.020004001 -0.107483 -0.084351003, + 0.02272 -0.167542 -0.083984002, + -0.020554001 0.042725001 -0.046082001, + -0.059921 -0.341492 -0.045288, + 0.059737999 -0.215027 -0.045348998, + 0.059677001 -0.231506 -0.045775998, + 0.059432998 -0.215027 -0.045775998, + 0.058548 -0.154724 -0.045715, + -0.041457999 -0.096129999 0.060424998, + -0.050705001 -0.034302 0.053040002, + -0.044112999 -0.155518 0.060851999, + -0.056350999 -0.094360001 0.051330999, + -0.0068819998 0.034607001 0.058533002, + -0.011093 0.046142999 -0.043396, + -0.011093 0.046142999 0.050415002, + -0.042343002 0.032471001 -0.039978001, + -0.044998001 -0.231506 0.060973998, + -0.044998001 -0.231506 0.060973998, + -0.044998001 -0.215027 0.060973998, + 0.044998001 -0.215027 0.060973998, + 0.044998001 -0.231506 0.060973998, + -0.044998001 -0.341492 0.060973998, + -0.059921 -0.341492 0.052306999, + 0.059691999 -0.341492 0.052795, + 0.059310999 -0.341492 0.053222999, + 0.060013 -0.215027 0.051392, + 0.031631 0.039429002 -0.043396, + 0.034805 0.037719999 -0.037230998, + 0.043715999 0.027771 0.053040002, + 0.044266 0.025635 0.053040002, + 0.030838 0.022399999 0.058715999, + 0.006912 0.034607001 0.058533002, + 1.5000011e-005 0.034972999 0.058472, + 0.058837999 -0.341492 -0.046509001, + 0.058837999 -0.341492 -0.046509001, + 0.044998001 -0.341492 -0.054016002, + 0.026381999 -0.346497 -0.039489999, + 0.033585001 -0.346497 -0.033569001, + -0.018173 -0.346497 -0.043884002, + -0.0092620002 -0.346497 -0.046569999, + -1.0561814e-011 -0.346497 -0.047485001, + 0.046587002 -0.346497 -0.0092770001, + 0.059997998 -0.341492 0.051697001, + 0.060013 -0.231506 0.051392, + 0.060013 -0.231506 -0.044739, + -0.056683999 -0.099792004 -0.030151, + -0.056717001 -0.10022 0.035278, + -0.056623001 -0.098632999 -0.031067001, + -0.056715 -0.100403 -0.029541001, + -0.056350999 -0.094360001 -0.044312, + -0.059096999 -0.15460201 -0.044372998, + -0.051192999 -0.105225 -0.082457997, + -0.051224001 -0.103088 -0.081909001, + -0.050980002 -0.105103 -0.083130002, + -0.050980002 -0.137512 -0.083374001, + -0.051162999 -0.167603 -0.082703002, + -0.051162999 -0.107483 -0.082703002, + -0.050949 -0.167603 -0.083374001, + -0.050949 -0.107483 -0.083374001, + -0.045456 0.025757 -0.044188999, + -0.048264001 0.001282 0.043701001, + -0.045395002 0.025757 -0.044739, + -0.044907 0.028198 -0.044188999, + -0.051773001 -0.034363002 -0.044739, + -0.045456 0.025757 0.043579001, + -0.050797001 -0.023254 0.043761998, + -0.051803999 -0.034240998 0.051270001, + 0.011063 0.046142999 -0.043396, + -0.029464999 0.026001001 -0.051697001, + -0.030869 0.022399999 0.058715999, + 1.5000002e-005 0.046997 -0.04425, + -0.0081630005 0.046509001 -0.038024999, + 0.010574 0.046204001 -0.04425, + 0.0081329998 0.046509001 -0.038024999, + 0.020615 -0.107422 -0.083984002, + 0.060013 -0.080017 -0.041992001, + -0.010422 0.045104999 -0.046082001, + -0.0068819998 0.034607001 -0.051514, + 1.4999994e-005 0.045837 -0.046082001, + -0.013657 0.033386 -0.051514, + -0.020554001 0.042725001 -0.046082001, + -0.020676 0.043152001 -0.045775998, + 0.030594001 0.039611999 -0.045288, + 0.020827999 0.043517999 -0.045288, + 0.020888999 0.043761998 -0.044799998, + 0.039810002 0.034485001 -0.044799998, + 0.030716 0.039795 -0.044799998, + 0.044876002 0.028198 -0.043396, + 0.045485999 0.025696 -0.044188999, + 0.030471999 0.039306998 -0.045775998, + 0.039260998 0.033629999 -0.046082001, + 0.041519001 0.031615999 -0.046021, + 0.039871 0.033142 -0.046082001, + 0.029495001 0.026001001 -0.051697001, + 0.019851999 -0.103149 -0.083740003, + 0.020523001 -0.103271 -0.083374001, + 0.043228 0.03009 -0.045715, + 0.042801 0.029846 -0.046021, + 0.044204999 0.027953999 -0.045715, + -0.049881 -0.107483 -0.084351003, + -0.050522 -0.107483 -0.083984002, + -0.050522 -0.167603 -0.083984002, + -0.049881 -0.167603 -0.084351003, + -0.049178999 -0.104919 -0.084289998, + -0.044174001 0.027953999 0.052733999, + -0.044296 0.025513001 0.053040002, + -0.045150999 0.025757 0.052306999, + -0.045395002 0.025757 0.051757999, + -0.044785 0.025574001 0.052733999, + -0.051192999 -0.034423999 0.052733999, + -0.055312999 -0.094420999 0.053100999, + -0.058548 -0.154724 0.052733999, + -0.058090001 -0.154663 0.053100999, + -0.041489001 0.031615999 0.053040002, + -0.029464999 0.026001001 0.058655001, + -0.028183 0.027465999 0.058655001, + -0.016891001 0.044922002 0.042603001, + -0.016341999 0.045044001 -0.036559999, + -0.016891001 0.044922002 0.043030001, + 1.4999997e-005 0.046997 -0.042479999, + -0.010544 0.046204001 0.051270001, + -0.043869 0.030456999 -0.042479999, + -0.042404 0.03241 -0.037475999, + -0.043869 0.030456999 -0.037537001, + -0.043869 0.030456999 -0.043396, + -0.059691999 -0.341492 0.052795, + -0.059326001 -0.341492 0.053222999, + 0.018173 -0.346497 0.043884002, + 0.026381999 -0.346497 0.039489999, + 0.026381999 -0.346497 0.039489999, + -0.058853 -0.341492 0.053528, + -0.059921 -0.341492 0.052306999, + -0.047499001 -0.346497 7.3761249e-012, + -0.046583001 -0.346497 -0.0092770001, + -0.059997998 -0.341492 -0.044739, + -0.059997998 -0.341492 0.051697001, + 0.060013 -0.075011998 0.043030001, + 0.060013 -0.075011998 -0.036986999, + 0.060013 -0.080017 0.047974002, + 0.031204 0.039673001 -0.042479999, + 0.028214 0.027465999 0.058655001, + 0.028214 0.027465999 0.058655001, + 0.029495001 0.026001001 0.058655001, + 0.039871 0.033142 0.053040002, + 0.039260998 0.033629999 0.053040002, + 0.026566001 0.028564001 0.058655001, + 0.044753999 0.025696 0.052733999, + 0.060013 -0.080017 0.047974002, + 0.051192999 -0.034423999 0.052733999, + 0.045120001 0.025757 0.052306999, + 0.045364 0.025757 0.051757999, + 0.040482 0.034118999 -0.04425, + 0.039505001 0.033996999 0.052733999, + 0.026566001 0.028564001 0.058655001, + 0.030228 0.038879 0.053040002, + 0.030228 0.038879 0.053040002, + -0.039487999 -0.346497 -0.026366999, + -0.033585001 -0.346497 -0.033569001, + -0.026397999 -0.346497 -0.039489999, + -0.0092620002 -0.346497 -0.046569999, + -0.043882001 -0.346497 -0.018188, + -0.059691999 -0.341492 -0.045775998, + 0.059691999 -0.341492 -0.045775998, + 0.043885998 -0.346497 -0.018188, + 0.039492 -0.346497 -0.026366999, + 0.059921 -0.341492 -0.045288, + 0.033585001 -0.346497 -0.033569001, + 0.059310999 -0.341492 -0.046204001, + 0.059310999 -0.341492 -0.046204001, + 0.059691999 -0.28649899 -0.045775998, + 0.059310999 -0.28649899 -0.046264999, + 0.059921 -0.231506 -0.045288, + 0.059997998 -0.341492 -0.044739, + 0.059997998 -0.341492 -0.044739, + 0.059997998 -0.341492 0.051697001, + 0.059997998 -0.341492 -0.044739, + -0.059677001 -0.231506 0.052795, + -0.059432998 -0.215027 0.052795, + -0.059737999 -0.215027 0.052368, + -0.059310999 -0.231506 0.053222999, + -0.059921 -0.231506 0.052306999, + -0.059691999 -0.28649899 0.052795, + -0.045150999 0.025757 -0.045288, + -0.044907 0.028198 0.050354, + -0.044907 0.028259 0.043579001, + -0.045456 0.025757 0.051208001, + -0.043869 0.030456999 0.051208001, + -0.051803999 -0.034240998 -0.043457001, + -0.051803999 -0.034240998 -0.04425, + -0.050797001 -0.023254 -0.037781, + -0.051803999 -0.034240998 -0.042479999, + -0.052994002 -0.047791 -0.037842002, + 0.016860999 0.044922002 0.042603001, + 0.016860999 0.044922002 0.043030001, + 0.011063 0.046142999 0.050415002, + 1.4999991e-005 0.046997 0.050415002, + 0.0084990002 0.046509001 0.043030001, + 1.5000009e-005 0.046997 0.0495, + 1.4999988e-005 0.046997 0.0495, + -0.0085300002 0.046509001 0.043030001, + -0.042343002 0.032471001 -0.043396, + -0.028183 0.027465999 -0.051635999, + -0.026596 0.028564001 -0.051635999, + -0.043563999 0.030273 0.052306999, + -0.043807998 0.030396 0.051757999, + -0.044601001 0.028076001 0.052306999, + -0.044845998 0.028198 0.051757999, + -0.021774 0.043517999 0.050415002, + -0.02916 0.040649001 0.043030001, + 0.045120001 0.025757 -0.045288, + 0.044753999 0.025696 -0.045715, + 0.045120001 0.025757 -0.045288, + 0.044571001 0.028076001 -0.045288, + 0.044815 0.028198 -0.044739, + 0.045364 0.025757 -0.044739, + 1.5000008e-005 0.046326 -0.045715, + 1.4999996e-005 0.046936002 -0.044799998, + 0.010574 0.046142999 -0.044799998, + 0.010513 0.045898002 -0.045288, + 0.010452 0.045531999 -0.045775998, + -0.020919999 0.043823 -0.04425, + -0.010544 0.046204001 -0.04425, + 0.039505001 0.033996999 -0.045775998, + 0.039687999 0.034302 -0.045348998, + 0.040298 0.033813 -0.045348998, + 0.040114999 0.033507999 -0.045775998, + 0.041885 0.031982001 -0.045715, + 0.039992999 0.034058001 -0.045348998, + 0.042312998 0.03241 -0.044739, + 0.040421002 0.034058001 -0.044799998, + 0.042130001 0.032226998 -0.045288, + 0.043839 0.030456999 -0.044188999, + 0.043777 0.030396 -0.044739, + 0.043593999 0.030273 -0.045288, + -0.049178999 -0.107483 -0.084472999, + -0.049881 -0.107483 -0.084351003, + -0.049178999 -0.167603 -0.084472999, + -0.049178999 -0.107483 -0.084472999, + 0.019272 -0.107483 -0.084472999, + -0.056136999 -0.094481997 0.052246001, + -0.055801 -0.094481997 0.052733999, + -0.051559001 -0.034363002 0.052246001, + -0.051773001 -0.034363002 0.051697001, + -0.05632 -0.094481997 0.051697001, + -0.058883999 -0.154724 0.052246001, + -0.059067 -0.154724 0.051697001, + -0.026596 0.028564001 0.058655001, + -0.013657 0.033386 0.058533002, + -0.010422 0.045104999 0.053040002, + 1.5000007e-005 0.046691999 0.052306999, + 0.039492 -0.346497 0.026366999, + 0.033585001 -0.346497 0.033569001, + 0.0092620002 -0.346497 0.046569999, + 0.044998001 -0.341492 0.060973998, + -0.033585001 -0.346497 0.033569001, + -0.043882001 -0.346497 0.018188, + -0.039487999 -0.346497 0.026366999, + -0.059691999 -0.341492 0.052795, + -0.059326001 -0.341492 0.053222999, + 0.060013 -0.076476999 0.046509001, + 0.060013 -0.075438999 0.045044001, + 0.060015 -0.215027 -0.028503001, + 0.060013 -0.077941999 0.047545999, + 0.045485999 0.025696 0.051208001, + 0.031204 0.039673001 0.0495, + 0.02919 0.040649001 0.043030001, + 0.030716 0.039917 -0.04425, + 0.030471999 0.039306998 0.052733999, + 0.031631 0.039429002 0.050415002, + 0.034988001 0.037659001 0.043212999, + 0.039871 0.034545999 -0.04425, + 0.040482 0.034118999 -0.042479999, + -0.049881 -0.104919 -0.084167004, + 0.020888999 0.043761998 0.051819, + 0.010574 0.046142999 0.051819, + 0.030716 0.039795 0.051819, + 1.5000005e-005 0.046997 0.051270001, + 1.5e-005 0.046997 0.051270001, + 1.5000006e-005 0.046936002 0.051819, + 0.010574 0.046204001 0.051270001, + 0.010513 0.045898002 0.052306999, + 0.020827999 0.043517999 0.052306999, + -0.043869 0.030456999 -0.044188999, + -0.044845998 0.028198 -0.044739, + -0.043807998 0.030396 -0.044739, + -0.030685 0.039795 -0.044799998, + -0.031661998 0.039429002 -0.043396, + -0.028183 0.027465999 -0.051635999, + -0.03923 0.033629999 0.053040002, + -0.039535999 0.033386 0.053040002, + -0.039841 0.033142 0.053040002, + -0.042282 0.03241 0.051757999, + -0.042343002 0.032471001 0.051208001, + -0.042343002 0.032471001 0.0495, + -0.040511999 0.034118999 -0.042479999, + -0.031235 0.039673001 -0.042479999, + -0.030746 0.039917 -0.04425, + -0.010544 0.045898002 -0.045288, + 1.5000008e-005 0.046691999 -0.045288, + -0.010483 0.045531999 -0.045775998, + -0.010544 0.046142999 -0.044799998, + -0.020798 0.043517999 -0.045288, + -0.020858999 0.043761998 -0.044799998, + -0.022751 0.043212999 -0.036804002, + -0.020919999 0.043823 -0.04425, + -0.021774 0.043517999 -0.043396, + -0.023178 0.043030001 0.042785998, + -0.028914999 0.040771 -0.036986999, + -0.010422 0.045104999 0.053040002, + -0.010483 0.045531999 0.052733999, + -0.0092620002 -0.346497 0.046569999, + -0.026397999 -0.346497 0.039489999, + -0.046583001 -0.346497 0.0092770001, + -1.0797476e-011 -0.346497 0.047485001, + -0.018173 -0.346497 0.043884002, + -0.044998001 -0.341492 0.060973998, + 0.030594001 0.039611999 0.052306999, + 0.039687999 0.034302 0.052306999, + 0.039687999 0.034302 0.052306999, + 0.042374 0.032471001 -0.044188999, + -0.050583001 -0.1026 -0.083130002, + -0.051041 -0.102844 -0.082580999, + -0.051041 -0.102844 -0.082580999, + -0.050522 -0.105042 -0.083740003, + 0.021744 0.043517999 -0.043396, + 0.020888999 0.043823 0.051270001, + 0.021255 0.043701001 -0.042479999, + 0.020888999 0.043823 -0.04425, + 0.010391 0.045104999 0.053040002, + 0.020584 0.042725001 0.053040002, + 0.020706 0.043152001 0.052733999, + 0.010452 0.045531999 0.052733999, + 0.013687 0.033386 0.058533002, + 0.006912 0.034607001 0.058533002, + 1.5000005e-005 0.045837 0.053040002, + 1.4999999e-005 0.046326 0.052733999, + -0.030258 0.038879 -0.046082001, + -0.03923 0.033629999 -0.046082001, + -0.039535999 0.033386 -0.046082001, + -0.039841 0.033142 -0.046082001, + -0.030624 0.039611999 -0.045288, + -0.030440999 0.039306998 -0.045775998, + -0.042282 0.03241 -0.044739, + -0.040511999 0.034118999 -0.04425, + -0.039841 0.034485001 -0.044799998, + -0.041855 0.031982001 0.052733999, + -0.041489001 0.031615999 0.053040002, + -0.042160001 0.032226998 0.052306999, + -0.043258999 0.03009 0.052733999, + -0.042831 0.029846 0.053040002, + -0.040024001 0.034058001 0.052306999, + -0.040329002 0.033813 0.052306999, + -0.040451001 0.034058001 0.051819, + -0.040511999 0.034118999 0.051270001, + -0.039902002 0.034545999 -0.04425, + -0.031661998 0.039429002 -0.039551001, + -0.039535999 0.033996999 0.052733999, + -0.039841 0.033752002 0.052795, + -0.030258 0.038879 0.053040002, + -0.020676 0.043152001 0.052733999, + -0.020554001 0.042725001 0.053040002, + -0.039719 0.034302 0.052306999, + -0.030440999 0.039306998 0.052733999, + -0.030746 0.039917 0.051270001, + -0.039841 0.034485001 0.051819, + -0.020858999 0.043761998 0.051819, + -0.020919999 0.043823 0.051270001, + -0.030685 0.039795 0.051819, + -0.010544 0.046142999 0.051819, + -0.030624 0.039611999 0.052306999, + -0.020798 0.043517999 0.052306999, + -0.010544 0.045898002 0.052306999, + 0.039810002 0.034485001 0.051819, + 0.030716 0.039917 0.051270001, + 0.039810002 0.033752002 0.052795, + 0.044571001 0.028076001 0.052306999, + 0.040482 0.034118999 0.051270001, + 0.040482 0.034118999 0.0495, + 0.039871 0.034545999 0.051270001, + 0.039871 0.034545999 0.051270001, + 0.021744 0.043517999 0.046021, + 0.021744 0.043517999 0.050415002, + 0.028945999 0.040771 -0.036986999, + 0.021744 0.043517999 -0.039551001, + 0.021255 0.043701001 0.0495, + -0.043258999 0.03009 -0.045715, + -0.041855 0.031982001 -0.045715, + -0.042831 0.029846 -0.046021, + -0.043563999 0.030273 -0.045288, + -0.044601001 0.028076001 -0.045288, + -0.044234999 0.027953999 -0.045715, + -0.049973 -0.102478 -0.083495997, + -0.050583001 -0.1026 -0.083130002, + -0.042160001 0.032226998 -0.045288, + -0.031661998 0.039429002 0.050415002, + -0.031235 0.039673001 0.0495, + -0.031661998 0.039429002 0.046021, + -0.039902002 0.034545999 0.051270001, + -0.030746 0.039917 0.051270001, + 0.040298 0.033813 0.052306999, + 0.040421002 0.034058001 0.051819, + 0.039992999 0.034058001 0.052306999, + 0.040298 0.033813 0.052306999, + 0.042130001 0.032226998 0.052306999, + 0.043228 0.03009 0.052733999, + 0.041885 0.031982001 0.052733999, + 0.042801 0.029846 0.053040002, + 0.044204999 0.027953999 0.052733999, + 0.043593999 0.030273 0.052306999, + -0.040024001 0.034058001 -0.045348998, + -0.040451001 0.034058001 -0.044799998, + -0.039719 0.034302 -0.045348998, + -0.040329002 0.033813 -0.045348998, + -0.040146001 0.033507999 -0.045775998, + -0.039535999 0.033996999 -0.045775998, + 0.043839 0.030456999 0.051208001, + 0.043777 0.030396 0.051757999, + 0.042312998 0.03241 0.051757999, + 0.042374 0.032471001 0.050354, + 0.043839 0.030456999 0.0495, + 0.044876002 0.028198 0.051208001, + 0.044876002 0.028259 -0.037597999, + 0.044815 0.028198 0.051757999, + 0.043839 0.030456999 0.046448 ] + + } + coordIndex [ 132, 8, 24, -1, 193, 37, 328, -1, + 43, 125, 5, -1, 43, 0, 125, -1, + 43, 7, 0, -1, 133, 8, 132, -1, + 133, 351, 8, -1, 44, 260, 91, -1, + 6, 0, 7, -1, 6, 125, 0, -1, + 258, 91, 260, -1, 111, 343, 110, -1, + 108, 48, 100, -1, 1, 2, 19, -1, + 1, 19, 30, -1, 1, 32, 2, -1, + 1, 30, 32, -1, 9, 110, 343, -1, + 9, 343, 25, -1, 58, 25, 52, -1, + 264, 132, 24, -1, 264, 24, 65, -1, + 281, 82, 10, -1, 11, 37, 193, -1, + 90, 7, 328, -1, 90, 328, 37, -1, + 292, 169, 193, -1, 88, 37, 34, -1, + 3, 74, 225, -1, 3, 225, 19, -1, + 3, 19, 2, -1, 4, 33, 2, -1, + 4, 2, 32, -1, 4, 32, 140, -1, + 76, 2, 33, -1, 76, 3, 2, -1, + 76, 74, 3, -1, 76, 33, 75, -1, + 70, 4, 140, -1, 70, 33, 4, -1, + 66, 42, 5, -1, 66, 128, 248, -1, + 66, 5, 125, -1, 81, 43, 5, -1, + 81, 5, 42, -1, 81, 42, 80, -1, + 326, 328, 7, -1, 326, 7, 43, -1, + 97, 91, 165, -1, 97, 44, 91, -1, + 12, 125, 6, -1, 12, 6, 7, -1, + 12, 7, 90, -1, 12, 90, 91, -1, + 16, 165, 301, -1, 16, 351, 165, -1, + 16, 15, 351, -1, 178, 15, 16, -1, + 18, 45, 46, -1, 57, 58, 52, -1, + 22, 52, 25, -1, 22, 25, 343, -1, + 115, 8, 351, -1, 53, 60, 26, -1, + 53, 8, 115, -1, 53, 24, 8, -1, + 353, 227, 178, -1, 49, 9, 25, -1, + 49, 110, 9, -1, 63, 17, 27, -1, + 63, 18, 17, -1, 67, 264, 65, -1, + 72, 10, 82, -1, 72, 101, 10, -1, + 79, 80, 251, -1, 146, 75, 33, -1, + 156, 281, 10, -1, 156, 10, 101, -1, + 156, 101, 332, -1, 156, 332, 275, -1, + 156, 275, 150, -1, 167, 168, 11, -1, + 167, 193, 169, -1, 167, 11, 193, -1, + 35, 34, 37, -1, 35, 37, 11, -1, + 35, 11, 168, -1, 481, 158, 377, -1, + 184, 90, 37, -1, 38, 292, 193, -1, + 38, 362, 481, -1, 38, 193, 362, -1, + 170, 169, 292, -1, 426, 431, 170, -1, + 426, 170, 292, -1, 180, 88, 89, -1, + 180, 89, 179, -1, 41, 80, 42, -1, + 247, 41, 248, -1, 247, 251, 41, -1, + 96, 44, 97, -1, 134, 261, 165, -1, + 134, 165, 351, -1, 134, 351, 133, -1, + 13, 125, 12, -1, 124, 91, 258, -1, + 124, 12, 91, -1, 124, 13, 12, -1, + 124, 125, 13, -1, 124, 258, 257, -1, + 14, 178, 227, -1, 14, 15, 178, -1, + 14, 227, 351, -1, 14, 351, 15, -1, + 304, 16, 301, -1, 304, 178, 16, -1, + 511, 178, 177, -1, 511, 177, 321, -1, + 511, 353, 178, -1, 199, 99, 198, -1, + 98, 46, 99, -1, 98, 18, 46, -1, + 98, 17, 18, -1, 98, 100, 48, -1, + 98, 27, 17, -1, 98, 48, 27, -1, + 336, 102, 337, -1, 336, 18, 63, -1, + 336, 45, 18, -1, 195, 198, 99, -1, + 195, 99, 46, -1, 348, 220, 216, -1, + 270, 268, 31, -1, 270, 30, 19, -1, + 270, 31, 30, -1, 68, 216, 220, -1, + 68, 108, 100, -1, 68, 100, 202, -1, + 68, 107, 108, -1, 68, 220, 107, -1, + 112, 19, 225, -1, 112, 225, 221, -1, + 112, 270, 19, -1, 20, 26, 57, -1, + 20, 57, 113, -1, 20, 53, 26, -1, + 20, 113, 24, -1, 20, 24, 53, -1, + 114, 52, 22, -1, 114, 113, 57, -1, + 21, 343, 219, -1, 21, 22, 343, -1, + 21, 219, 114, -1, 21, 114, 22, -1, + 23, 65, 24, -1, 23, 340, 65, -1, + 23, 24, 113, -1, 23, 113, 340, -1, + 54, 53, 115, -1, 513, 321, 409, -1, + 513, 511, 321, -1, 50, 27, 48, -1, + 50, 28, 27, -1, 50, 58, 28, -1, + 50, 25, 58, -1, 50, 49, 25, -1, + 59, 26, 60, -1, 59, 57, 26, -1, + 62, 28, 238, -1, 62, 27, 28, -1, + 62, 63, 27, -1, 62, 238, 236, -1, + 61, 28, 58, -1, 61, 238, 28, -1, + 235, 336, 63, -1, 64, 29, 125, -1, + 130, 66, 125, -1, 130, 125, 29, -1, + 130, 29, 64, -1, 335, 101, 32, -1, + 335, 32, 30, -1, 335, 30, 31, -1, + 335, 31, 268, -1, 335, 268, 334, -1, + 201, 334, 268, -1, 136, 140, 32, -1, + 136, 32, 101, -1, 413, 362, 190, -1, + 77, 79, 251, -1, 77, 74, 76, -1, + 141, 70, 142, -1, 141, 33, 70, -1, + 141, 146, 33, -1, 154, 150, 275, -1, + 152, 372, 373, -1, 151, 152, 373, -1, + 151, 142, 153, -1, 86, 88, 34, -1, + 86, 34, 35, -1, 85, 168, 309, -1, + 85, 35, 168, -1, 85, 86, 35, -1, + 85, 309, 87, -1, 282, 83, 283, -1, + 185, 90, 184, -1, 36, 183, 184, -1, + 36, 182, 183, -1, 36, 37, 88, -1, + 36, 184, 37, -1, 36, 180, 182, -1, + 36, 88, 180, -1, 291, 292, 38, -1, + 291, 481, 377, -1, 291, 38, 481, -1, + 171, 431, 391, -1, 39, 251, 80, -1, + 39, 80, 41, -1, 39, 41, 251, -1, + 40, 248, 41, -1, 40, 41, 42, -1, + 40, 66, 248, -1, 40, 42, 66, -1, + 192, 43, 81, -1, 192, 326, 43, -1, + 95, 44, 96, -1, 95, 261, 259, -1, + 95, 259, 260, -1, 95, 260, 44, -1, + 205, 204, 45, -1, 205, 45, 336, -1, + 378, 205, 336, -1, 396, 397, 298, -1, + 104, 208, 456, -1, 159, 45, 204, -1, + 159, 46, 45, -1, 159, 195, 46, -1, + 47, 111, 107, -1, 47, 107, 220, -1, + 47, 220, 405, -1, 47, 343, 111, -1, + 47, 405, 343, -1, 109, 48, 108, -1, + 109, 110, 49, -1, 109, 50, 48, -1, + 109, 49, 50, -1, 347, 348, 216, -1, + 51, 57, 52, -1, 51, 52, 114, -1, + 51, 114, 57, -1, 237, 56, 60, -1, + 237, 60, 53, -1, 237, 53, 54, -1, + 237, 54, 115, -1, 237, 238, 61, -1, + 360, 117, 359, -1, 55, 56, 237, -1, + 55, 58, 57, -1, 55, 57, 59, -1, + 55, 60, 56, -1, 55, 59, 60, -1, + 55, 61, 58, -1, 55, 237, 61, -1, + 119, 120, 63, -1, 119, 62, 236, -1, + 119, 63, 62, -1, 121, 235, 422, -1, + 121, 122, 102, -1, 121, 102, 336, -1, + 121, 336, 235, -1, 231, 63, 120, -1, + 231, 235, 63, -1, 231, 120, 232, -1, + 126, 64, 125, -1, 126, 127, 254, -1, + 126, 131, 67, -1, 126, 254, 253, -1, + 126, 253, 131, -1, 126, 67, 65, -1, + 126, 65, 340, -1, 126, 130, 64, -1, + 126, 340, 250, -1, 126, 250, 130, -1, + 129, 128, 66, -1, 129, 66, 130, -1, + 263, 67, 131, -1, 263, 264, 67, -1, + 269, 68, 202, -1, 269, 202, 201, -1, + 269, 216, 68, -1, 73, 139, 137, -1, + 73, 72, 82, -1, 73, 82, 139, -1, + 69, 70, 140, -1, 69, 140, 139, -1, + 69, 142, 70, -1, 69, 153, 142, -1, + 69, 139, 153, -1, 138, 140, 136, -1, + 71, 136, 101, -1, 71, 137, 136, -1, + 71, 101, 72, -1, 71, 72, 73, -1, + 71, 73, 137, -1, 143, 190, 148, -1, + 143, 413, 190, -1, 143, 148, 146, -1, + 143, 146, 141, -1, 224, 74, 77, -1, + 224, 225, 74, -1, 93, 251, 250, -1, + 93, 77, 251, -1, 93, 224, 77, -1, + 78, 75, 146, -1, 78, 76, 75, -1, + 78, 77, 76, -1, 145, 147, 79, -1, + 145, 79, 77, -1, 145, 78, 146, -1, + 145, 77, 78, -1, 191, 80, 79, -1, + 191, 79, 147, -1, 191, 81, 80, -1, + 191, 192, 81, -1, 274, 276, 213, -1, + 274, 372, 152, -1, 272, 151, 373, -1, + 278, 82, 281, -1, 278, 139, 82, -1, + 278, 153, 139, -1, 155, 156, 150, -1, + 155, 150, 279, -1, 173, 179, 87, -1, + 173, 87, 309, -1, 173, 309, 308, -1, + 307, 174, 173, -1, 307, 173, 308, -1, + 417, 157, 83, -1, 417, 83, 282, -1, + 417, 356, 174, -1, 284, 283, 83, -1, + 284, 83, 157, -1, 84, 86, 85, -1, + 84, 85, 87, -1, 84, 88, 86, -1, + 84, 89, 88, -1, 84, 179, 89, -1, + 84, 87, 179, -1, 479, 272, 373, -1, + 197, 296, 275, -1, 197, 275, 332, -1, + 197, 332, 331, -1, 164, 90, 185, -1, + 164, 91, 90, -1, 164, 165, 91, -1, + 92, 170, 431, -1, 92, 431, 171, -1, + 92, 171, 170, -1, 389, 171, 391, -1, + 176, 174, 356, -1, 229, 359, 117, -1, + 315, 316, 182, -1, 187, 184, 183, -1, + 325, 362, 193, -1, 325, 326, 192, -1, + 223, 93, 250, -1, 223, 224, 93, -1, + 94, 95, 96, -1, 94, 97, 165, -1, + 94, 96, 97, -1, 94, 165, 261, -1, + 94, 261, 95, -1, 200, 98, 99, -1, + 200, 99, 199, -1, 200, 100, 98, -1, + 200, 202, 100, -1, 333, 332, 101, -1, + 333, 101, 335, -1, 448, 378, 336, -1, + 297, 396, 298, -1, 297, 456, 396, -1, + 207, 208, 104, -1, 310, 456, 208, -1, + 424, 398, 102, -1, 424, 425, 398, -1, + 424, 102, 122, -1, 338, 337, 102, -1, + 338, 102, 398, -1, 103, 104, 289, -1, + 103, 289, 161, -1, 103, 161, 311, -1, + 103, 207, 104, -1, 103, 311, 310, -1, + 103, 310, 207, -1, 210, 367, 289, -1, + 210, 289, 104, -1, 210, 368, 367, -1, + 210, 104, 456, -1, 105, 384, 290, -1, + 105, 383, 384, -1, 212, 276, 382, -1, + 212, 382, 383, -1, 212, 213, 276, -1, + 212, 383, 105, -1, 212, 105, 290, -1, + 212, 290, 372, -1, 430, 391, 431, -1, + 106, 108, 107, -1, 106, 109, 108, -1, + 106, 110, 109, -1, 106, 111, 110, -1, + 106, 107, 111, -1, 215, 112, 221, -1, + 215, 221, 347, -1, 215, 270, 112, -1, + 215, 347, 216, -1, 341, 219, 218, -1, + 341, 340, 113, -1, 341, 114, 219, -1, + 341, 113, 114, -1, 402, 250, 340, -1, + 402, 221, 225, -1, 228, 115, 351, -1, + 228, 237, 115, -1, 243, 422, 235, -1, + 371, 420, 357, -1, 495, 464, 233, -1, + 495, 232, 496, -1, 510, 353, 511, -1, + 116, 117, 360, -1, 116, 360, 356, -1, + 116, 229, 117, -1, 116, 356, 229, -1, + 241, 409, 319, -1, 241, 319, 360, -1, + 497, 119, 236, -1, 497, 236, 465, -1, + 118, 120, 119, -1, 118, 496, 232, -1, + 118, 232, 120, -1, 118, 497, 496, -1, + 118, 119, 497, -1, 423, 121, 422, -1, + 423, 122, 121, -1, 423, 424, 122, -1, + 123, 124, 257, -1, 123, 257, 126, -1, + 123, 125, 124, -1, 123, 126, 125, -1, + 256, 127, 126, -1, 256, 126, 257, -1, + 256, 254, 127, -1, 249, 248, 128, -1, + 249, 128, 129, -1, 249, 130, 250, -1, + 249, 129, 130, -1, 255, 131, 253, -1, + 255, 263, 131, -1, 255, 261, 134, -1, + 265, 132, 264, -1, 265, 133, 132, -1, + 265, 134, 133, -1, 265, 255, 134, -1, + 265, 263, 255, -1, 267, 201, 268, -1, + 267, 269, 201, -1, 135, 136, 137, -1, + 135, 138, 136, -1, 135, 137, 139, -1, + 135, 139, 140, -1, 135, 140, 138, -1, + 412, 141, 142, -1, 412, 143, 141, -1, + 412, 142, 151, -1, 412, 151, 272, -1, + 412, 413, 143, -1, 144, 145, 146, -1, + 144, 147, 145, -1, 144, 146, 148, -1, + 144, 148, 190, -1, 144, 190, 191, -1, + 144, 191, 147, -1, 214, 372, 274, -1, + 149, 278, 279, -1, 149, 279, 150, -1, + 149, 152, 151, -1, 149, 151, 153, -1, + 149, 153, 278, -1, 149, 274, 152, -1, + 149, 150, 154, -1, 149, 275, 274, -1, + 149, 154, 275, -1, 280, 155, 279, -1, + 280, 156, 155, -1, 280, 281, 156, -1, + 162, 157, 417, -1, 162, 174, 307, -1, + 162, 417, 174, -1, 162, 307, 306, -1, + 471, 355, 472, -1, 286, 284, 157, -1, + 286, 162, 163, -1, 286, 157, 162, -1, + 286, 209, 287, -1, 364, 368, 339, -1, + 432, 372, 290, -1, 429, 158, 481, -1, + 429, 377, 158, -1, 439, 159, 204, -1, + 439, 195, 159, -1, 294, 437, 381, -1, + 294, 276, 296, -1, 294, 382, 276, -1, + 294, 381, 382, -1, 160, 289, 209, -1, + 160, 161, 289, -1, 160, 311, 161, -1, + 160, 306, 311, -1, 160, 162, 306, -1, + 160, 163, 162, -1, 160, 209, 286, -1, + 160, 286, 163, -1, 300, 164, 185, -1, + 300, 301, 165, -1, 300, 165, 164, -1, + 305, 168, 389, -1, 305, 309, 168, -1, + 390, 311, 306, -1, 166, 168, 167, -1, + 166, 389, 168, -1, 166, 167, 169, -1, + 166, 169, 170, -1, 166, 170, 171, -1, + 166, 171, 389, -1, 172, 313, 179, -1, + 172, 176, 313, -1, 172, 179, 173, -1, + 172, 173, 174, -1, 172, 174, 176, -1, + 175, 319, 313, -1, 175, 313, 176, -1, + 175, 360, 319, -1, 175, 176, 356, -1, + 175, 356, 360, -1, 320, 323, 316, -1, + 303, 323, 322, -1, 303, 302, 323, -1, + 303, 321, 177, -1, 303, 322, 321, -1, + 303, 177, 178, -1, 303, 178, 304, -1, + 312, 179, 313, -1, 312, 180, 179, -1, + 312, 182, 180, -1, 312, 315, 182, -1, + 181, 183, 182, -1, 181, 187, 183, -1, + 181, 182, 316, -1, 181, 316, 187, -1, + 188, 184, 187, -1, 188, 185, 184, -1, + 188, 300, 185, -1, 188, 302, 300, -1, + 188, 323, 302, -1, 186, 316, 323, -1, + 186, 187, 316, -1, 186, 323, 188, -1, + 186, 188, 187, -1, 189, 190, 362, -1, + 189, 362, 325, -1, 189, 191, 190, -1, + 189, 192, 191, -1, 189, 325, 192, -1, + 327, 193, 328, -1, 327, 325, 193, -1, + 194, 295, 198, -1, 194, 438, 295, -1, + 194, 198, 195, -1, 194, 195, 439, -1, + 194, 439, 438, -1, 196, 197, 331, -1, + 196, 198, 295, -1, 196, 296, 197, -1, + 196, 295, 296, -1, 196, 331, 199, -1, + 196, 199, 198, -1, 330, 199, 331, -1, + 330, 200, 199, -1, 330, 201, 202, -1, + 330, 202, 200, -1, 330, 334, 201, -1, + 203, 380, 436, -1, 203, 205, 380, -1, + 203, 204, 205, -1, 203, 439, 204, -1, + 203, 436, 439, -1, 379, 205, 378, -1, + 379, 380, 205, -1, 395, 386, 397, -1, + 206, 208, 207, -1, 206, 310, 208, -1, + 206, 207, 310, -1, 288, 209, 289, -1, + 288, 287, 209, -1, 458, 339, 368, -1, + 458, 368, 210, -1, 458, 210, 456, -1, + 211, 212, 372, -1, 211, 213, 212, -1, + 211, 372, 214, -1, 211, 274, 213, -1, + 211, 214, 274, -1, 385, 376, 445, -1, + 385, 386, 376, -1, 271, 270, 215, -1, + 271, 216, 269, -1, 271, 215, 216, -1, + 217, 341, 218, -1, 217, 342, 341, -1, + 217, 218, 219, -1, 217, 219, 343, -1, + 217, 343, 342, -1, 401, 404, 405, -1, + 401, 405, 220, -1, 401, 220, 348, -1, + 345, 346, 347, -1, 345, 221, 402, -1, + 345, 347, 221, -1, 222, 223, 250, -1, + 222, 250, 402, -1, 222, 224, 223, -1, + 222, 402, 225, -1, 222, 225, 224, -1, + 226, 351, 227, -1, 226, 350, 351, -1, + 226, 227, 353, -1, 226, 353, 350, -1, + 352, 228, 351, -1, 352, 353, 240, -1, + 352, 237, 228, -1, 234, 233, 464, -1, + 234, 244, 243, -1, 234, 245, 244, -1, + 234, 464, 357, -1, 234, 357, 245, -1, + 354, 359, 229, -1, 354, 358, 359, -1, + 354, 229, 356, -1, 230, 231, 232, -1, + 230, 232, 495, -1, 230, 495, 233, -1, + 230, 233, 234, -1, 230, 234, 243, -1, + 230, 235, 231, -1, 230, 243, 235, -1, + 239, 352, 240, -1, 239, 465, 236, -1, + 239, 237, 352, -1, 239, 236, 238, -1, + 239, 238, 237, -1, 512, 465, 239, -1, + 512, 239, 240, -1, 512, 240, 353, -1, + 512, 353, 510, -1, 361, 241, 360, -1, + 361, 467, 409, -1, 361, 409, 241, -1, + 242, 357, 464, -1, 242, 464, 408, -1, + 242, 408, 357, -1, 491, 408, 464, -1, + 419, 422, 243, -1, 419, 243, 244, -1, + 419, 244, 245, -1, 419, 245, 357, -1, + 419, 357, 420, -1, 246, 247, 248, -1, + 246, 248, 249, -1, 246, 249, 250, -1, + 246, 250, 251, -1, 246, 251, 247, -1, + 252, 253, 254, -1, 252, 255, 253, -1, + 252, 254, 256, -1, 252, 256, 257, -1, + 252, 257, 258, -1, 252, 260, 259, -1, + 252, 258, 260, -1, 252, 259, 261, -1, + 252, 261, 255, -1, 262, 264, 263, -1, + 262, 265, 264, -1, 262, 263, 265, -1, + 266, 267, 268, -1, 266, 269, 267, -1, + 266, 268, 270, -1, 266, 270, 271, -1, + 266, 271, 269, -1, 411, 272, 479, -1, + 411, 412, 272, -1, 273, 274, 275, -1, + 273, 275, 296, -1, 273, 276, 274, -1, + 273, 296, 276, -1, 277, 279, 278, -1, + 277, 280, 279, -1, 277, 278, 281, -1, + 277, 281, 280, -1, 414, 472, 356, -1, + 414, 356, 417, -1, 415, 282, 283, -1, + 415, 417, 282, -1, 415, 283, 284, -1, + 369, 286, 367, -1, 369, 284, 286, -1, + 369, 368, 364, -1, 369, 415, 284, -1, + 369, 364, 415, -1, 285, 367, 286, -1, + 285, 286, 287, -1, 285, 287, 288, -1, + 285, 289, 367, -1, 285, 288, 289, -1, + 370, 339, 425, -1, 370, 364, 339, -1, + 370, 371, 364, -1, 478, 479, 373, -1, + 433, 290, 384, -1, 433, 432, 290, -1, + 427, 291, 377, -1, 427, 292, 291, -1, + 427, 426, 292, -1, 293, 438, 437, -1, + 293, 437, 294, -1, 293, 295, 438, -1, + 293, 296, 295, -1, 293, 294, 296, -1, + 442, 381, 437, -1, 442, 451, 454, -1, + 488, 456, 297, -1, 488, 297, 298, -1, + 488, 298, 397, -1, 488, 397, 386, -1, + 299, 301, 300, -1, 299, 300, 302, -1, + 299, 302, 303, -1, 299, 304, 301, -1, + 299, 303, 304, -1, 388, 305, 389, -1, + 388, 390, 306, -1, 388, 307, 308, -1, + 388, 306, 307, -1, 388, 308, 309, -1, + 388, 309, 305, -1, 392, 391, 430, -1, + 392, 430, 375, -1, 392, 375, 386, -1, + 394, 310, 311, -1, 394, 311, 390, -1, + 394, 390, 392, -1, 394, 392, 386, -1, + 394, 386, 395, -1, 394, 456, 310, -1, + 317, 312, 313, -1, 317, 315, 312, -1, + 317, 313, 319, -1, 314, 316, 315, -1, + 314, 320, 316, -1, 314, 315, 317, -1, + 314, 319, 320, -1, 314, 317, 319, -1, + 318, 319, 409, -1, 318, 320, 319, -1, + 318, 409, 321, -1, 318, 321, 322, -1, + 318, 322, 323, -1, 318, 323, 320, -1, + 324, 326, 325, -1, 324, 325, 327, -1, + 324, 328, 326, -1, 324, 327, 328, -1, + 329, 330, 331, -1, 329, 331, 332, -1, + 329, 332, 333, -1, 329, 334, 330, -1, + 329, 335, 334, -1, 329, 333, 335, -1, + 450, 448, 336, -1, 450, 336, 337, -1, + 450, 337, 338, -1, 450, 338, 398, -1, + 450, 398, 449, -1, 461, 425, 339, -1, + 461, 339, 458, -1, 403, 402, 340, -1, + 403, 340, 341, -1, 403, 341, 342, -1, + 403, 342, 343, -1, 403, 343, 405, -1, + 344, 402, 401, -1, 344, 345, 402, -1, + 344, 346, 345, -1, 344, 347, 346, -1, + 344, 401, 348, -1, 344, 348, 347, -1, + 349, 351, 350, -1, 349, 352, 351, -1, + 349, 350, 353, -1, 349, 353, 352, -1, + 463, 365, 462, -1, 463, 358, 354, -1, + 463, 471, 415, -1, 463, 355, 471, -1, + 463, 354, 356, -1, 463, 356, 472, -1, + 463, 472, 355, -1, 406, 462, 365, -1, + 406, 357, 408, -1, 406, 371, 357, -1, + 468, 358, 463, -1, 468, 359, 358, -1, + 468, 360, 359, -1, 468, 467, 361, -1, + 468, 361, 360, -1, 482, 411, 479, -1, + 482, 479, 480, -1, 482, 481, 362, -1, + 482, 362, 413, -1, 416, 414, 417, -1, + 363, 364, 371, -1, 363, 415, 364, -1, + 363, 371, 406, -1, 363, 406, 365, -1, + 363, 365, 463, -1, 363, 463, 415, -1, + 366, 367, 368, -1, 366, 368, 369, -1, + 366, 369, 367, -1, 421, 370, 425, -1, + 421, 420, 371, -1, 421, 371, 370, -1, + 374, 372, 432, -1, 374, 373, 372, -1, + 374, 478, 373, -1, 483, 374, 432, -1, + 483, 478, 374, -1, 477, 429, 481, -1, + 434, 386, 375, -1, 434, 375, 430, -1, + 444, 433, 384, -1, 444, 445, 376, -1, + 444, 376, 386, -1, 444, 386, 434, -1, + 428, 377, 429, -1, 428, 427, 377, -1, + 447, 378, 448, -1, 447, 379, 378, -1, + 447, 380, 379, -1, 447, 436, 380, -1, + 441, 442, 437, -1, 441, 437, 447, -1, + 443, 382, 381, -1, 443, 381, 442, -1, + 443, 383, 382, -1, 443, 384, 383, -1, + 443, 444, 384, -1, 485, 386, 385, -1, + 485, 488, 386, -1, 485, 445, 486, -1, + 485, 385, 445, -1, 387, 388, 389, -1, + 387, 390, 388, -1, 387, 389, 391, -1, + 387, 391, 392, -1, 387, 392, 390, -1, + 393, 394, 395, -1, 393, 397, 396, -1, + 393, 395, 397, -1, 393, 396, 456, -1, + 393, 456, 394, -1, 399, 398, 425, -1, + 399, 425, 461, -1, 399, 449, 398, -1, + 460, 449, 399, -1, 460, 399, 461, -1, + 400, 401, 402, -1, 400, 402, 403, -1, + 400, 404, 401, -1, 400, 405, 404, -1, + 400, 403, 405, -1, 407, 462, 406, -1, + 407, 406, 408, -1, 490, 462, 407, -1, + 490, 408, 491, -1, 490, 407, 408, -1, + 493, 464, 495, -1, 493, 507, 490, -1, + 508, 409, 467, -1, 508, 513, 409, -1, + 508, 509, 513, -1, 410, 412, 411, -1, + 410, 411, 482, -1, 410, 413, 412, -1, + 410, 482, 413, -1, 473, 414, 416, -1, + 473, 472, 414, -1, 474, 415, 471, -1, + 474, 473, 416, -1, 474, 417, 415, -1, + 474, 416, 417, -1, 418, 419, 420, -1, + 418, 420, 421, -1, 418, 422, 419, -1, + 418, 423, 422, -1, 418, 424, 423, -1, + 418, 425, 424, -1, 418, 421, 425, -1, + 476, 483, 503, -1, 476, 503, 429, -1, + 476, 429, 477, -1, 504, 431, 426, -1, + 504, 426, 427, -1, 504, 427, 428, -1, + 504, 429, 503, -1, 504, 428, 429, -1, + 501, 434, 430, -1, 501, 430, 431, -1, + 501, 431, 504, -1, 500, 483, 432, -1, + 500, 432, 433, -1, 500, 434, 501, -1, + 500, 433, 444, -1, 500, 444, 434, -1, + 446, 451, 447, -1, 435, 436, 447, -1, + 435, 447, 437, -1, 435, 437, 438, -1, + 435, 439, 436, -1, 435, 438, 439, -1, + 440, 451, 442, -1, 440, 442, 441, -1, + 440, 447, 451, -1, 440, 441, 447, -1, + 487, 442, 454, -1, 487, 443, 442, -1, + 487, 454, 488, -1, 487, 444, 443, -1, + 487, 486, 445, -1, 487, 445, 444, -1, + 452, 451, 446, -1, 452, 447, 448, -1, + 452, 446, 447, -1, 452, 449, 460, -1, + 452, 448, 450, -1, 452, 450, 449, -1, + 459, 454, 451, -1, 459, 457, 454, -1, + 459, 451, 452, -1, 459, 452, 460, -1, + 453, 488, 454, -1, 453, 454, 457, -1, + 453, 457, 488, -1, 455, 456, 488, -1, + 455, 488, 457, -1, 455, 458, 456, -1, + 455, 457, 459, -1, 455, 459, 460, -1, + 455, 461, 458, -1, 455, 460, 461, -1, + 469, 462, 490, -1, 469, 463, 462, -1, + 469, 468, 463, -1, 492, 491, 464, -1, + 492, 464, 493, -1, 498, 493, 495, -1, + 498, 497, 465, -1, 498, 465, 512, -1, + 498, 507, 493, -1, 466, 490, 507, -1, + 466, 507, 508, -1, 466, 508, 467, -1, + 466, 467, 468, -1, 466, 468, 469, -1, + 466, 469, 490, -1, 470, 471, 472, -1, + 470, 472, 473, -1, 470, 474, 471, -1, + 470, 473, 474, -1, 475, 476, 477, -1, + 475, 478, 483, -1, 475, 483, 476, -1, + 475, 480, 479, -1, 475, 479, 478, -1, + 475, 477, 481, -1, 475, 481, 482, -1, + 475, 482, 480, -1, 502, 483, 500, -1, + 502, 503, 483, -1, 484, 485, 486, -1, + 484, 486, 487, -1, 484, 488, 485, -1, + 484, 487, 488, -1, 489, 490, 491, -1, + 489, 491, 492, -1, 489, 493, 490, -1, + 489, 492, 493, -1, 494, 495, 496, -1, + 494, 498, 495, -1, 494, 496, 497, -1, + 494, 497, 498, -1, 506, 507, 498, -1, + 506, 498, 512, -1, 499, 500, 501, -1, + 499, 502, 500, -1, 499, 503, 502, -1, + 499, 504, 503, -1, 499, 501, 504, -1, + 505, 507, 506, -1, 505, 508, 507, -1, + 505, 509, 508, -1, 505, 510, 511, -1, + 505, 512, 510, -1, 505, 506, 512, -1, + 505, 511, 513, -1, 505, 513, 509, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link5.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link5.wrl new file mode 100644 index 00000000..a992dbc1 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link5.wrl @@ -0,0 +1,789 @@ +#VRML V2.0 utf8 + + +DEF link5 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.055985998 -0.022826999 0.041747998, + 0.049481999 -4.5242508e-012 0.057007, + 0.048994001 0.020996001 0.062011998, + -0.0037990001 0.034790002 0.062011998, + -0.007584 0.03418 0.062011998, + -0.046647999 0.025208 0.062011998, + -0.047869001 0.024109 0.062011998, + -0.046647999 0.025208 0.062011998, + -0.017930999 -0.010559 -0.081969999, + -0.017839 4.4763798e-012 -0.082153, + -0.051011998 -0.022461001 -0.063689999, + 0.017042 -0.025878999 -0.076935001, + 0.048689 -0.022644 0.062011998, + 0.048994001 -0.020996001 0.062011998, + 0.050306 -0.010742 -0.001404, + 0.049116001 -0.021423001 0.057007, + 0.048994001 -0.020996001 0.062011998, + 1.2999997e-005 0.011047 -0.083313003, + 0.045148998 -0.026245 0.057007, + 0.047529001 -0.025451999 -0.024567001, + 0.030014001 0.041016001 0.056030001, + 0.007553 0.03418 0.062011998, + -1.5e-005 0.034972999 0.062011998, + 1.2999995e-005 -0.010559 -0.083313003, + 1.2999996e-005 5.1522194e-012 -0.083495997, + 1.3e-005 -0.020996001 -0.083130002, + -0.055985998 -0.022399999 0.041076999, + -0.0037990001 -0.034790002 0.057007, + -0.0036160001 -0.034790002 0.051635999, + -1.4999994e-005 -0.034972999 0.057007, + 0.0072479998 -0.034240998 0.057007, + 0.042523999 -0.027527001 0.024413999, + -0.017778 -0.020996001 -0.081817999, + 0.017317001 -0.025513001 -0.078735001, + 0.034254 -0.025574001 -0.074920997, + 0.050092999 -0.010742 0.027832, + 0.049725998 -0.021300999 0.036621001, + 0.050276 6.2419238e-013 0.027771, + 0.048994001 0.020996001 0.062011998, + 0.050032001 -0.010742 -0.030609, + 0.017927 -0.010559 -0.081969999, + 0.017836001 1.2886113e-012 -0.082153, + 0.0352 -0.021057 -0.077849999, + 0.007553 -0.03418 0.062011998, + 0.045088001 0.025878999 0.062011998, + 0.045088001 -0.025878999 0.062011998, + 0.045088001 -0.025878999 0.062011998, + 0.045088001 -0.025878999 0.062011998, + 0.047956001 -0.024536001 0.057007, + 0.048811 -0.023071 0.057007, + 0.049635001 -0.022887999 -0.024597, + 0.048811 -0.024352999 -0.024567001, + 0.049940001 -0.02124 -0.024597, + 0.050032001 -0.02124 0.016174, + -0.048723001 0.022644 0.062011998, + 0.017743999 -0.022766 -0.081450999, + 0.017561 -0.024413999 -0.080352999, + 0.017805001 -0.020996001 -0.081817999, + 1.3000001e-005 -0.022766 -0.082764, + -0.042344999 2.4531349e-012 -0.074340999, + 0.049573999 -0.021300999 -0.042511001, + 0.044447001 -0.026123 -0.059661999, + -0.0072169998 -0.034240998 0.057007, + -0.0037990001 -0.034790002 0.059509002, + -1.4999999e-005 -0.034972999 0.062011998, + 0.0038300001 -0.034790002 0.059509002, + 0.0072479998 -0.034240998 0.046264999, + 0.042493999 -0.027527001 -0.024383999, + 0.043776002 -0.026123 -0.063079998, + -0.046618 -0.025757 -0.042144999, + -0.055985998 -0.023010001 0.042479999, + -0.045061 0.025878999 0.062011998, + -0.042162001 -0.026062001 -0.066376001, + -0.017930999 0.011047 -0.081969999, + -0.051011998 -0.015991 -0.067993, + -0.055985998 -0.02179 0.040649001, + -0.051011998 -0.015991 -0.067993, + -0.055985998 -0.020996001 0.040527001, + -0.055985998 0.020996001 0.040527001, + -0.051011998 0.015991 -0.067993, + -0.044085 -0.022949001 -0.071563996, + -0.051011998 -0.018677 -0.067474, + -0.038621999 -0.021057 -0.076416001, + -0.041703999 -0.021118 -0.074371003, + -0.039384998 -0.01062 -0.076201998, + -0.038438998 -0.022826999 -0.076110996, + -0.035172999 -0.021057 -0.077849999, + -0.035294998 3.2569726e-012 -0.078185998, + -0.043076999 -0.026123 -0.064758003, + -0.017046001 -0.025878999 -0.076935001, + 1.2999999e-005 -0.025513001 -0.080017, + 1.2999996e-005 -0.025878999 -0.078217, + 1.3000003e-005 -0.024413999 -0.081665002, + -0.036272001 -0.026001001 -0.072082996, + -0.036272001 -0.026001001 -0.072082996, + -0.038591001 -0.026001001 -0.070556998, + -1.5000004e-005 -0.034972999 0.046997, + 0.0036470001 -0.034790002 0.046813998, + 0.042952001 -0.026123 -0.064727999, + 0.050489999 3.2075514e-012 -0.001404, + 0.048689 0.022644 0.062011998, + 0.040601999 -0.01062 -0.075438999, + 0.0352 -0.021057 -0.077849999, + 0.045148998 0.023314999 -0.070404001, + 0.044477001 0.025024001 -0.069733001, + 0.0038300001 -0.034790002 0.062011998, + -1.5000001e-005 -0.034972999 0.062011998, + 0.0038300001 -0.034790002 0.062011998, + 0.007553 -0.03418 0.062011998, + -0.007584 -0.03418 0.062011998, + 0.046613999 -0.025208 0.062011998, + 0.046735998 -0.025635 0.057007, + 0.047894999 -0.024109 0.062011998, + 0.046613999 -0.025208 0.062011998, + 0.048932999 -0.024352999 0.016295999, + 0.048994001 -0.024292 -0.0041499999, + 0.049818002 -0.022826999 -0.0041499999, + 0.049725998 -0.022826999 0.016295999, + 0.048567001 -0.024413999 0.036681999, + 0.049421001 -0.022887999 0.036743, + 0.047589999 -0.025451999 0.016235, + 0.047285002 -0.025513001 0.036681999, + 0.047681998 -0.025451999 -0.0041499999, + -0.048723001 -0.022644 0.062011998, + -0.048723001 -0.022644 0.062011998, + -0.049028002 -0.020996001 0.062011998, + -0.055985998 0.020996001 0.056030001, + -0.055985998 -0.020996001 0.056030001, + -0.055985998 -0.02179 0.055847, + -0.049028002 0.020996001 0.062011998, + -0.055985998 0.020996001 0.056030001, + -0.055985998 -0.023010001 0.054016002, + -0.055985998 0.022399999 0.05542, + -0.055985998 0.02179 0.055847, + -0.055985998 0.022826999 0.054749001, + 0.041731 -0.021118 -0.074371003, + 0.037916001 -0.024536001 -0.075134002, + 0.035048001 -0.022949001 -0.077454001, + 0.034742001 -0.024536001 -0.076447003, + 0.038435001 -0.022826999 -0.076110996, + 0.041487001 -0.022887999 -0.074097, + 0.040785 -0.024536001 -0.073242001, + 0.034742001 -0.024536001 -0.076447003, + -0.017717 0.023804 -0.081421003, + 1.2999998e-005 0.023743 -0.082732998, + -0.017778 0.021973001 -0.081786998, + 1.3000001e-005 0.021973001 -0.083130002, + -0.035172999 0.022034001 -0.077820003, + 0.017317001 0.026550001 -0.078704998, + 1.2999999e-005 0.025390999 -0.081665002, + -0.039476 0.011047 -0.076141, + -0.039019 -2.2372414e-012 -0.076629996, + 0.041549999 0.042479999 0.017212, + 0.046613999 0.025208 0.062011998, + 0.047894999 0.024109 0.062011998, + 0.041212 0.026550001 -0.070831001, + -1.4999995e-005 0.043517999 0.041992001, + -0.051011998 0.023010001 -0.061005, + -0.055985998 0.022826999 0.054749001, + -0.042498 -0.027527001 -0.024383999, + -0.042498 -0.027527001 0.024413999, + -0.044450998 -0.026123 -0.059661999, + -0.045182999 -0.026245 0.057007, + -0.051011998 -0.020935001 -0.065948002, + -0.051011998 -0.020935001 -0.065948002, + -0.045182999 -0.024658 -0.068053998, + -0.041948002 -0.025696 -0.069793999, + -0.043779001 -0.025696 -0.067290999, + -0.044725001 -0.025696 -0.065490998, + -0.051011998 -0.022461001 -0.063689999, + -0.017717 -0.022766 -0.081450999, + -0.035050999 -0.022949001 -0.077454001, + -0.017565001 -0.024413999 -0.080352999, + -0.040757999 -0.024536001 -0.073242001, + -0.041491002 -0.022887999 -0.074097, + -0.037919998 -0.024536001 -0.075134002, + -0.043230001 -0.024597 -0.070862003, + -0.039721001 -0.025635 -0.071960002, + -0.045977 -0.025635 -0.061707001, + -0.043779001 -0.026123 -0.063079998, + -0.045763001 -0.025818 -0.059723001, + -0.045488 -0.025635 -0.063629001, + -0.051011998 -0.023010001 -0.061005, + 0.038587999 -0.026001001 -0.070556998, + 0.037122998 -0.025635 -0.073669001, + 0.039717 -0.025635 -0.071960002, + 0.040571 -0.026062001 -0.068634003, + 0.033705 -0.026001001 -0.073151, + 0.049116001 0.021423001 0.057007, + 0.050092999 0.010742 0.027832, + 0.045118 -0.01062 -0.071135998, + 0.046491999 -0.021179 -0.068726003, + 0.044385999 -0.021118 -0.071777001, + 0.038892999 0.026611 -0.072662003, + 0.017227 0.042479999 -0.041565001, + 0.017774999 0.021973001 -0.081786998, + 0.035292 -5.9946306e-012 -0.078185998, + 0.017927 0.011047 -0.081969999, + 0.037854999 0.023864999 -0.076355003, + 0.017743999 0.023804 -0.081421003, + 0.03517 0.022034001 -0.077820003, + 0.043257002 0.026306 -0.068755999, + 0.047407001 -0.021179 -0.066559002, + 0.048108999 -0.01062 -0.065642998, + 0.046186 -0.025635 -0.059723001, + 0.046980001 -0.025574001 -0.042144999, + 0.046491999 -0.021179 -0.068726003, + 0.044080999 -0.022949001 -0.071563996, + 0.0087740002 0.042479999 -0.044128001, + -0.017321 0.026550001 -0.078704998, + 1.4999998e-005 0.042479999 -0.045012999, + 1.3000001e-005 0.026489001 -0.080017, + -0.017565001 0.025451999 -0.080352999, + -0.034258001 0.026550001 -0.074920997, + -0.044481002 0.025024001 -0.069733001, + -0.043260999 0.026306 -0.068755999, + -0.044877999 0.026001001 -0.066405997, + -0.034745999 0.025513001 -0.076416001, + 0.049603999 0.022887999 0.027953999, + 0.048811 0.023071 0.057007, + 0.048811 0.023071 0.057007, + 0.048689 0.022644 0.062011998, + 0.016098 0.043517999 0.038818002, + 0.0082240002 0.043517999 0.041198999, + -0.055985998 0.022826999 0.041747998, + -0.055985998 0.023010001 0.042479999, + -0.055985998 0.023010001 0.054016002, + -0.016068 0.043517999 0.038818002, + -0.0081940005 0.043517999 0.041198999, + -0.044998001 0.042479999 2.5836145e-012, + -0.007584 -0.03418 0.057007, + -0.042498 -0.027527001 -0.024383999, + -0.007584 -0.03418 0.062011998, + -0.0072169998 -0.034240998 0.046264999, + -0.046647999 -0.025208 0.062011998, + -0.055985998 -0.023010001 0.054016002, + -0.055985998 -0.022826999 0.054749001, + -0.045061 -0.025878999 0.062011998, + -0.055985998 -0.022399999 0.05542, + -0.045061 -0.025878999 0.062011998, + -0.055985998 -0.022399999 0.05542, + -0.047869001 -0.024109 0.062011998, + -0.047869001 -0.024109 0.062011998, + -0.034258001 -0.025574001 -0.074920997, + -0.034745999 -0.024536001 -0.076447003, + -0.037126999 -0.025635 -0.073669001, + -0.017321 -0.025513001 -0.078735001, + -0.033709001 -0.026001001 -0.073151, + 0.049391001 -4.713621e-012 -0.059813999, + 0.050032001 0.010742 -0.030609, + 0.050306 0.010742 -0.001404, + 0.050122999 0.02124 -0.001404, + 0.049849 0.022826999 -0.001312, + 0.042311002 0.025390999 -0.072021, + 0.040449001 0.023987001 -0.074828997, + 0.039808001 0.025574001 -0.073944002, + 0.043012999 0.023682 -0.072815001, + 0.040814999 -3.5718715e-012 -0.075499997, + 0.034742001 0.025513001 -0.076416001, + 0.035048001 0.023925999 -0.077454001, + 0.017561 0.025451999 -0.080352999, + 0.037367001 0.025513001 -0.075378001, + 0.034254 0.026550001 -0.074920997, + 0.036633998 0.026611 -0.073913999, + 0.047132 0.024658 -0.064240001, + 0.046186 0.024658 -0.067169003, + 0.044904999 0.026001001 -0.066405997, + 0.045485001 -0.025635 -0.063629001, + 0.047224 -0.022887999 -0.066528, + 0.045178998 -0.024658 -0.068053998, + 0.044721998 -0.025696 -0.065490998, + 0.043776002 -0.025696 -0.067290999, + 0.046247002 -0.024597 -0.066101, + 0.041944999 -0.025696 -0.069793999, + 0.043226 -0.024597 -0.070862003, + 0.046124998 -0.023071 -0.068572998, + 1.4999995e-005 0.042479999 -0.045012999, + -0.017227 0.042479999 -0.041565001, + -0.0087740002 0.042479999 -0.044128001, + -0.051011998 0.020935001 -0.065948002, + -0.055985998 0.02179 0.040649001, + -0.055985998 0.022399999 0.041076999, + -0.051011998 0.022461001 -0.063689999, + -0.035050999 0.023925999 -0.077454001, + 0.042006999 0.043517999 8.7516859e-013, + 0.041182999 0.043517999 0.0081789996, + 0.044112999 0.042479999 0.0087890001, + 0.049543001 0.022887999 -0.030548001, + 0.049849 0.021300999 -0.030609, + -0.044144001 0.042479999 -0.0087890001, + -0.041579999 0.042479999 -0.017212, + -0.029678 0.043517999 0.029724, + -0.029983999 0.041016001 0.056030001, + -0.044998001 0.042479999 2.7324733e-012, + -0.042006999 0.043517999 -4.5215017e-012, + -0.044144001 0.042479999 0.0087890001, + -0.041182999 0.043517999 -0.0082090003, + -0.041579999 0.042479999 0.017212, + -0.038773 0.043517999 0.016052, + -0.034926999 0.043517999 0.023314999, + -0.023331 0.043517999 0.034912001, + 0.046888001 0.022887999 -0.067657001, + 0.040693 0.022095 -0.075134002, + 0.040449001 0.023987001 -0.074828997, + 0.038038 0.022095 -0.076691002, + 0.040693 0.022095 -0.075134002, + 0.038038 0.022095 -0.076691002, + 0.040601999 0.011047 -0.075438999, + 0.045118 0.011047 -0.071135998, + 0.045301002 0.021911999 -0.070587002, + 0.045271002 -5.9563457e-012 -0.071258999, + 0.043164998 0.022034001 -0.073059, + 0.048323002 -0.021179 -0.064361997, + 0.048811 -0.021179 -0.062073, + 0.045972999 -0.025635 -0.061707001, + 0.047040999 -0.024475001 -0.064056002, + 0.048018001 -0.022766 -0.064361997, + 1.5000005e-005 0.043517999 -0.041992001, + 0.0081940005 0.043517999 -0.041198999, + -0.0081940005 0.043517999 -0.041198999, + 1.5000005e-005 0.043517999 -0.041992001, + 0.016068 0.043517999 -0.038818002, + 0.042006999 0.043517999 -3.9151772e-012, + 0.029709 0.043517999 -0.029694, + 0.031815 0.042479999 -0.031830002, + 0.025009001 0.042479999 -0.037415002, + 0.023331 0.043517999 -0.034912001, + 0.023331 0.043517999 -0.034912001, + -0.038897 0.026611 -0.072662003, + -0.036637999 0.026611 -0.073913999, + -0.031815 0.042479999 -0.031830002, + -0.038897 0.026611 -0.072662003, + -0.041216001 0.026550001 -0.070831001, + -0.037399001 0.042479999 -0.024994001, + -0.023331 0.043517999 -0.034912001, + -0.025009001 0.042479999 -0.037415002, + -0.051011998 0.018677 -0.067474, + -0.051011998 0.020935001 -0.065948002, + -0.040453002 0.023987001 -0.074828997, + -0.039811999 0.025574001 -0.073944002, + -0.037370998 0.025513001 -0.075378001, + -0.037859 0.023864999 -0.076355003, + -0.042314999 0.025390999 -0.072021, + -0.042986002 0.023682 -0.072815001, + -0.040697001 0.022095 -0.075134002, + -0.038042001 0.022095 -0.076691002, + 0.048505999 0.023071 -0.062194999, + 0.044998001 0.042479999 4.6675001e-013, + 0.048719 0.023071 -0.059783999, + 0.047651 0.024597 -0.062011998, + 0.047926001 0.023254 -0.064544998, + 0.049024999 0.021423001 -0.059783999, + 0.034897 0.043517999 0.023314999, + 0.029709 0.043517999 0.029724, + 0.030014001 0.041016001 0.056030001, + 0.023360999 0.043517999 0.034912001, + -0.034926999 0.043517999 -0.023345999, + -0.034926999 0.043517999 -0.023345999, + -0.038803 0.043517999 -0.016083, + -0.041214 0.043517999 0.0081789996, + 0.038803 0.043517999 0.016052, + -0.016068 0.043517999 -0.038818002, + -0.029709 0.043517999 -0.029694, + -0.029709 0.043517999 -0.029694, + 0.048200998 0.021606 -0.064758003, + 0.048780002 0.021484001 -0.062286001, + 0.048230998 -2.8156882e-012 -0.065857001, + 0.048200998 0.021606 -0.064758003, + 0.048108999 0.011047 -0.065642998, + 0.048657998 -0.023010001 -0.059783999, + 0.049024999 -0.021179 -0.059783999, + 0.04936 -0.022705 -0.042206001, + 0.048535999 -0.022705 -0.062103, + 0.048445001 -0.024352999 -0.042174999, + 0.047681998 -0.024536001 -0.059783999, + 0.047559999 -0.024413999 -0.061951, + 0.038803 0.043517999 -0.016083, + 0.041182999 0.043517999 -0.0082090003, + 0.029709 0.043517999 -0.029694, + 0.034926999 0.043517999 -0.023345999, + 0.044144001 0.042479999 -0.0087890001, + 0.03743 0.042479999 -0.024994001, + 0.041579999 0.042479999 -0.017212 ] + + } + coordIndex [ 189, 37, 99, -1, 189, 38, 37, -1, + 6, 133, 54, -1, 5, 7, 6, -1, + 4, 21, 22, -1, 67, 122, 31, -1, + 43, 31, 18, -1, 43, 18, 47, -1, + 233, 96, 28, -1, 180, 70, 182, -1, + 0, 70, 26, -1, 131, 26, 70, -1, + 131, 70, 235, -1, 131, 235, 236, -1, + 131, 281, 26, -1, 9, 24, 32, -1, + 10, 0, 26, -1, 10, 70, 0, -1, + 10, 169, 182, -1, 10, 182, 70, -1, + 77, 75, 26, -1, 77, 26, 78, -1, + 11, 96, 91, -1, 1, 37, 38, -1, + 52, 99, 14, -1, 36, 37, 1, -1, + 36, 49, 119, -1, 100, 2, 38, -1, + 100, 154, 2, -1, 16, 2, 13, -1, + 16, 38, 2, -1, 16, 1, 38, -1, + 16, 36, 1, -1, 45, 47, 18, -1, + 44, 2, 154, -1, 44, 21, 4, -1, + 44, 154, 153, -1, 44, 112, 13, -1, + 44, 13, 2, -1, 354, 44, 153, -1, + 33, 11, 91, -1, 3, 22, 292, -1, + 3, 292, 4, -1, 3, 4, 22, -1, + 71, 292, 7, -1, 71, 4, 292, -1, + 71, 7, 5, -1, 71, 6, 54, -1, + 71, 5, 6, -1, 71, 54, 129, -1, + 71, 44, 4, -1, 134, 226, 281, -1, + 134, 7, 292, -1, 132, 6, 7, -1, + 132, 7, 134, -1, 132, 133, 6, -1, + 19, 67, 205, -1, 19, 122, 67, -1, + 19, 51, 122, -1, 66, 67, 31, -1, + 107, 64, 29, -1, 107, 29, 96, -1, + 160, 235, 70, -1, 8, 32, 86, -1, + 8, 9, 32, -1, 73, 24, 9, -1, + 87, 8, 86, -1, 87, 9, 8, -1, + 87, 73, 9, -1, 164, 169, 10, -1, + 164, 26, 75, -1, 164, 10, 26, -1, + 83, 76, 84, -1, 245, 177, 175, -1, + 245, 95, 177, -1, 88, 95, 96, -1, + 88, 96, 233, -1, 187, 33, 34, -1, + 187, 11, 33, -1, 187, 96, 11, -1, + 12, 112, 49, -1, 12, 49, 16, -1, + 12, 13, 112, -1, 12, 16, 13, -1, + 53, 99, 37, -1, 53, 14, 99, -1, + 53, 52, 14, -1, 53, 36, 119, -1, + 15, 49, 36, -1, 15, 16, 49, -1, + 15, 36, 16, -1, 60, 52, 371, -1, + 41, 57, 24, -1, 41, 24, 197, -1, + 17, 197, 24, -1, 17, 146, 197, -1, + 17, 24, 73, -1, 17, 73, 146, -1, + 196, 41, 197, -1, 195, 197, 146, -1, + 46, 43, 47, -1, 120, 31, 122, -1, + 120, 121, 31, -1, 111, 45, 18, -1, + 111, 18, 31, -1, 111, 31, 121, -1, + 118, 119, 49, -1, 118, 111, 121, -1, + 116, 52, 53, -1, 373, 19, 205, -1, + 373, 51, 19, -1, 127, 125, 129, -1, + 20, 22, 21, -1, 20, 292, 22, -1, + 20, 354, 292, -1, 20, 21, 44, -1, + 20, 44, 354, -1, 58, 25, 57, -1, + 58, 32, 25, -1, 23, 32, 24, -1, + 23, 25, 32, -1, 23, 24, 57, -1, + 23, 57, 25, -1, 142, 34, 33, -1, + 56, 33, 92, -1, 56, 142, 33, -1, + 56, 138, 142, -1, 345, 87, 151, -1, + 280, 26, 281, -1, 280, 78, 26, -1, + 280, 79, 78, -1, 280, 336, 79, -1, + 156, 292, 354, -1, 158, 134, 292, -1, + 158, 226, 134, -1, 204, 205, 67, -1, + 68, 267, 314, -1, 27, 233, 28, -1, + 27, 28, 96, -1, 27, 62, 233, -1, + 27, 63, 62, -1, 27, 96, 29, -1, + 27, 29, 64, -1, 27, 64, 63, -1, + 30, 31, 43, -1, 30, 66, 31, -1, + 30, 43, 107, -1, 30, 107, 66, -1, + 65, 66, 107, -1, 65, 107, 96, -1, + 106, 64, 107, -1, 159, 160, 70, -1, + 159, 180, 161, -1, 162, 235, 160, -1, + 166, 177, 95, -1, 166, 88, 167, -1, + 145, 146, 73, -1, 81, 76, 83, -1, + 81, 164, 75, -1, 80, 164, 81, -1, + 170, 86, 32, -1, 170, 171, 86, -1, + 170, 58, 92, -1, 170, 32, 58, -1, + 85, 171, 175, -1, 85, 86, 171, -1, + 90, 92, 33, -1, 90, 33, 91, -1, + 179, 88, 233, -1, 179, 161, 180, -1, + 89, 91, 96, -1, 89, 96, 247, -1, + 94, 96, 95, -1, 94, 247, 96, -1, + 273, 185, 141, -1, 273, 141, 274, -1, + 184, 187, 34, -1, 184, 34, 142, -1, + 35, 37, 36, -1, 35, 53, 37, -1, + 35, 36, 53, -1, 221, 154, 100, -1, + 188, 100, 38, -1, 188, 38, 189, -1, + 39, 60, 248, -1, 39, 52, 60, -1, + 39, 248, 249, -1, 39, 99, 52, -1, + 39, 249, 99, -1, 257, 310, 135, -1, + 42, 102, 57, -1, 42, 196, 102, -1, + 40, 57, 41, -1, 40, 41, 196, -1, + 40, 42, 57, -1, 40, 196, 42, -1, + 199, 195, 146, -1, 199, 149, 260, -1, + 266, 104, 201, -1, 286, 154, 221, -1, + 256, 104, 103, -1, 255, 254, 261, -1, + 108, 107, 43, -1, 108, 43, 46, -1, + 108, 46, 112, -1, 108, 112, 44, -1, + 108, 44, 71, -1, 113, 45, 111, -1, + 113, 112, 46, -1, 113, 47, 45, -1, + 113, 46, 47, -1, 48, 112, 111, -1, + 48, 111, 118, -1, 48, 49, 112, -1, + 48, 118, 49, -1, 115, 122, 51, -1, + 50, 373, 371, -1, 50, 51, 373, -1, + 50, 371, 52, -1, 50, 52, 116, -1, + 50, 115, 51, -1, 50, 116, 115, -1, + 117, 53, 119, -1, 117, 116, 53, -1, + 238, 131, 236, -1, 238, 128, 131, -1, + 124, 128, 242, -1, 124, 125, 127, -1, + 124, 127, 128, -1, 130, 54, 133, -1, + 130, 129, 54, -1, 139, 137, 102, -1, + 55, 137, 138, -1, 55, 138, 56, -1, + 55, 57, 102, -1, 55, 102, 137, -1, + 55, 58, 57, -1, 55, 92, 58, -1, + 55, 56, 92, -1, 144, 199, 146, -1, + 144, 149, 199, -1, 217, 212, 283, -1, + 59, 76, 79, -1, 59, 84, 76, -1, + 59, 151, 84, -1, 344, 151, 59, -1, + 344, 59, 79, -1, 344, 79, 336, -1, + 194, 321, 325, -1, 208, 148, 210, -1, + 208, 321, 194, -1, 228, 227, 292, -1, + 228, 292, 156, -1, 370, 60, 371, -1, + 370, 313, 248, -1, 370, 248, 60, -1, + 61, 67, 68, -1, 61, 68, 314, -1, + 61, 204, 67, -1, 61, 314, 204, -1, + 270, 267, 68, -1, 270, 98, 271, -1, + 270, 68, 98, -1, 232, 233, 62, -1, + 232, 62, 63, -1, 232, 63, 64, -1, + 232, 162, 160, -1, 232, 106, 109, -1, + 232, 64, 106, -1, 97, 65, 96, -1, + 97, 66, 65, -1, 97, 67, 66, -1, + 97, 98, 68, -1, 97, 68, 67, -1, + 69, 70, 180, -1, 69, 159, 70, -1, + 69, 180, 159, -1, 239, 162, 232, -1, + 239, 232, 109, -1, 239, 108, 71, -1, + 239, 129, 242, -1, 239, 71, 129, -1, + 72, 95, 88, -1, 72, 166, 95, -1, + 72, 88, 166, -1, 147, 345, 283, -1, + 147, 87, 345, -1, 147, 73, 87, -1, + 147, 145, 73, -1, 74, 81, 75, -1, + 74, 76, 81, -1, 74, 75, 77, -1, + 74, 77, 78, -1, 74, 78, 79, -1, + 74, 79, 76, -1, 176, 177, 166, -1, + 176, 164, 80, -1, 172, 170, 92, -1, + 174, 85, 175, -1, 174, 176, 80, -1, + 174, 81, 83, -1, 174, 80, 81, -1, + 82, 83, 84, -1, 82, 86, 85, -1, + 82, 174, 83, -1, 82, 85, 174, -1, + 82, 84, 151, -1, 82, 87, 86, -1, + 82, 151, 87, -1, 168, 167, 88, -1, + 168, 88, 179, -1, 168, 179, 181, -1, + 168, 182, 169, -1, 168, 181, 182, -1, + 246, 89, 247, -1, 246, 90, 91, -1, + 246, 91, 89, -1, 246, 92, 90, -1, + 246, 172, 92, -1, 93, 245, 247, -1, + 93, 247, 94, -1, 93, 95, 245, -1, + 93, 94, 95, -1, 186, 185, 273, -1, + 186, 96, 187, -1, 186, 273, 271, -1, + 186, 97, 96, -1, 186, 271, 98, -1, + 186, 98, 97, -1, 250, 99, 249, -1, + 250, 189, 99, -1, 219, 100, 188, -1, + 219, 221, 100, -1, 219, 220, 221, -1, + 366, 203, 191, -1, 366, 191, 310, -1, + 366, 248, 313, -1, 192, 135, 310, -1, + 192, 207, 135, -1, 101, 102, 196, -1, + 101, 196, 257, -1, 101, 139, 102, -1, + 101, 257, 135, -1, 101, 135, 139, -1, + 262, 148, 208, -1, 262, 260, 148, -1, + 262, 208, 194, -1, 198, 254, 304, -1, + 198, 261, 254, -1, 265, 104, 266, -1, + 265, 103, 104, -1, 301, 368, 366, -1, + 301, 103, 265, -1, 301, 265, 350, -1, + 206, 191, 203, -1, 206, 203, 202, -1, + 206, 192, 191, -1, 206, 207, 192, -1, + 268, 206, 202, -1, 309, 256, 103, -1, + 309, 103, 301, -1, 309, 366, 310, -1, + 309, 301, 366, -1, 155, 255, 193, -1, + 155, 381, 201, -1, 253, 104, 256, -1, + 253, 255, 155, -1, 253, 201, 104, -1, + 253, 155, 201, -1, 105, 106, 107, -1, + 105, 107, 108, -1, 105, 108, 239, -1, + 105, 109, 106, -1, 105, 239, 109, -1, + 110, 111, 112, -1, 110, 112, 113, -1, + 110, 113, 111, -1, 114, 115, 116, -1, + 114, 116, 117, -1, 114, 119, 118, -1, + 114, 117, 119, -1, 114, 121, 120, -1, + 114, 118, 121, -1, 114, 120, 122, -1, + 114, 122, 115, -1, 240, 242, 128, -1, + 240, 128, 238, -1, 240, 241, 242, -1, + 123, 124, 242, -1, 123, 125, 124, -1, + 123, 242, 129, -1, 123, 129, 125, -1, + 126, 128, 127, -1, 126, 127, 129, -1, + 126, 129, 130, -1, 126, 131, 128, -1, + 126, 133, 132, -1, 126, 130, 133, -1, + 126, 132, 134, -1, 126, 281, 131, -1, + 126, 134, 281, -1, 140, 274, 141, -1, + 140, 207, 274, -1, 140, 135, 207, -1, + 140, 139, 135, -1, 136, 138, 137, -1, + 136, 137, 139, -1, 136, 140, 141, -1, + 136, 139, 140, -1, 136, 141, 185, -1, + 136, 185, 184, -1, 136, 142, 138, -1, + 136, 184, 142, -1, 143, 283, 212, -1, + 143, 212, 149, -1, 143, 149, 144, -1, + 143, 146, 145, -1, 143, 144, 146, -1, + 143, 147, 283, -1, 143, 145, 147, -1, + 276, 278, 319, -1, 276, 210, 278, -1, + 276, 208, 210, -1, 211, 210, 148, -1, + 211, 260, 149, -1, 211, 148, 260, -1, + 211, 149, 212, -1, 213, 212, 217, -1, + 213, 217, 329, -1, 290, 333, 215, -1, + 290, 282, 289, -1, 150, 345, 151, -1, + 150, 151, 344, -1, 150, 344, 345, -1, + 152, 360, 354, -1, 152, 286, 360, -1, + 152, 354, 153, -1, 152, 153, 154, -1, + 152, 154, 286, -1, 324, 379, 381, -1, + 324, 381, 155, -1, 324, 193, 325, -1, + 324, 155, 193, -1, 326, 325, 321, -1, + 223, 156, 354, -1, 223, 228, 156, -1, + 223, 355, 228, -1, 225, 281, 226, -1, + 225, 226, 229, -1, 157, 289, 282, -1, + 157, 229, 289, -1, 157, 282, 225, -1, + 157, 225, 229, -1, 297, 158, 292, -1, + 297, 226, 158, -1, 231, 160, 159, -1, + 231, 232, 160, -1, 231, 179, 233, -1, + 231, 159, 161, -1, 231, 161, 179, -1, + 237, 235, 162, -1, 237, 162, 239, -1, + 163, 169, 164, -1, 163, 176, 169, -1, + 163, 164, 176, -1, 165, 166, 167, -1, + 165, 176, 166, -1, 165, 167, 168, -1, + 165, 169, 176, -1, 165, 168, 169, -1, + 244, 171, 170, -1, 244, 170, 172, -1, + 244, 175, 171, -1, 244, 245, 175, -1, + 244, 172, 246, -1, 173, 174, 175, -1, + 173, 176, 174, -1, 173, 175, 177, -1, + 173, 177, 176, -1, 178, 179, 180, -1, + 178, 181, 179, -1, 178, 180, 182, -1, + 178, 182, 181, -1, 183, 184, 185, -1, + 183, 185, 186, -1, 183, 187, 184, -1, + 183, 186, 187, -1, 351, 249, 248, -1, + 251, 189, 250, -1, 218, 219, 188, -1, + 218, 251, 252, -1, 218, 188, 189, -1, + 218, 189, 251, -1, 190, 310, 191, -1, + 190, 191, 192, -1, 190, 192, 310, -1, + 306, 307, 257, -1, 306, 257, 196, -1, + 305, 257, 307, -1, 263, 193, 255, -1, + 263, 255, 261, -1, 263, 262, 194, -1, + 263, 325, 193, -1, 263, 194, 325, -1, + 200, 195, 199, -1, 200, 304, 306, -1, + 200, 306, 196, -1, 200, 196, 197, -1, + 200, 197, 195, -1, 259, 261, 198, -1, + 259, 199, 260, -1, 259, 200, 199, -1, + 259, 198, 304, -1, 259, 304, 200, -1, + 382, 201, 381, -1, 382, 266, 201, -1, + 312, 268, 202, -1, 312, 202, 203, -1, + 312, 366, 313, -1, 312, 203, 366, -1, + 374, 204, 314, -1, 374, 373, 205, -1, + 374, 205, 204, -1, 272, 267, 270, -1, + 275, 207, 206, -1, 275, 206, 268, -1, + 275, 268, 272, -1, 275, 274, 207, -1, + 318, 321, 208, -1, 318, 208, 276, -1, + 318, 360, 322, -1, 209, 278, 210, -1, + 209, 210, 211, -1, 209, 211, 212, -1, + 209, 212, 213, -1, 209, 213, 278, -1, + 277, 329, 335, -1, 277, 213, 329, -1, + 277, 278, 213, -1, 332, 342, 215, -1, + 332, 215, 333, -1, 216, 282, 290, -1, + 216, 290, 215, -1, 214, 215, 342, -1, + 214, 282, 216, -1, 214, 216, 215, -1, + 214, 337, 282, -1, 214, 342, 337, -1, + 340, 329, 217, -1, 340, 217, 283, -1, + 285, 360, 286, -1, 285, 322, 360, -1, + 347, 380, 322, -1, 347, 218, 252, -1, + 347, 252, 287, -1, 347, 219, 218, -1, + 347, 220, 219, -1, 347, 221, 220, -1, + 347, 286, 221, -1, 222, 355, 223, -1, + 222, 354, 355, -1, 222, 223, 354, -1, + 224, 282, 281, -1, 224, 281, 225, -1, + 224, 225, 282, -1, 295, 229, 226, -1, + 295, 226, 297, -1, 300, 292, 227, -1, + 300, 291, 292, -1, 300, 227, 228, -1, + 300, 228, 355, -1, 293, 289, 229, -1, + 293, 294, 289, -1, 293, 229, 295, -1, + 358, 290, 289, -1, 298, 297, 292, -1, + 230, 232, 231, -1, 230, 233, 232, -1, + 230, 231, 233, -1, 234, 236, 235, -1, + 234, 235, 237, -1, 234, 238, 236, -1, + 234, 237, 239, -1, 234, 241, 240, -1, + 234, 240, 238, -1, 234, 242, 241, -1, + 234, 239, 242, -1, 243, 245, 244, -1, + 243, 244, 246, -1, 243, 247, 245, -1, + 243, 246, 247, -1, 365, 351, 248, -1, + 365, 248, 366, -1, 288, 249, 351, -1, + 288, 250, 249, -1, 288, 251, 250, -1, + 288, 287, 252, -1, 288, 252, 251, -1, + 303, 256, 305, -1, 303, 253, 256, -1, + 303, 304, 254, -1, 303, 254, 255, -1, + 303, 255, 253, -1, 311, 305, 256, -1, + 311, 310, 257, -1, 311, 257, 305, -1, + 311, 256, 309, -1, 258, 259, 260, -1, + 258, 261, 259, -1, 258, 260, 262, -1, + 258, 263, 261, -1, 258, 262, 263, -1, + 264, 382, 380, -1, 264, 380, 349, -1, + 264, 265, 266, -1, 264, 266, 382, -1, + 264, 349, 350, -1, 264, 350, 265, -1, + 316, 268, 312, -1, 315, 314, 267, -1, + 315, 267, 272, -1, 315, 272, 268, -1, + 315, 268, 316, -1, 269, 270, 271, -1, + 269, 272, 270, -1, 269, 271, 273, -1, + 269, 273, 274, -1, 269, 274, 275, -1, + 269, 275, 272, -1, 320, 276, 319, -1, + 320, 318, 276, -1, 378, 318, 322, -1, + 378, 321, 318, -1, 328, 335, 329, -1, + 361, 318, 319, -1, 361, 277, 335, -1, + 361, 319, 278, -1, 361, 278, 277, -1, + 361, 360, 318, -1, 279, 336, 280, -1, + 279, 337, 336, -1, 279, 280, 281, -1, + 279, 281, 282, -1, 279, 282, 337, -1, + 339, 342, 332, -1, 339, 329, 340, -1, + 341, 283, 345, -1, 341, 340, 283, -1, + 284, 285, 286, -1, 284, 322, 285, -1, + 284, 286, 347, -1, 284, 347, 322, -1, + 348, 347, 287, -1, 348, 287, 288, -1, + 348, 288, 351, -1, 353, 355, 354, -1, + 296, 289, 294, -1, 296, 358, 289, -1, + 357, 333, 290, -1, 357, 290, 358, -1, + 299, 292, 291, -1, 299, 298, 292, -1, + 299, 291, 300, -1, 359, 294, 293, -1, + 359, 293, 295, -1, 359, 296, 294, -1, + 359, 295, 297, -1, 359, 297, 298, -1, + 359, 298, 299, -1, 359, 358, 296, -1, + 359, 355, 360, -1, 359, 300, 355, -1, + 359, 299, 300, -1, 367, 301, 350, -1, + 367, 368, 301, -1, 302, 304, 303, -1, + 302, 303, 305, -1, 302, 306, 304, -1, + 302, 307, 306, -1, 302, 305, 307, -1, + 308, 309, 310, -1, 308, 310, 311, -1, + 308, 311, 309, -1, 372, 312, 313, -1, + 372, 316, 312, -1, 372, 313, 370, -1, + 375, 374, 314, -1, 375, 314, 315, -1, + 375, 315, 316, -1, 375, 316, 372, -1, + 317, 319, 318, -1, 317, 320, 319, -1, + 317, 318, 320, -1, 327, 326, 321, -1, + 327, 321, 378, -1, 377, 378, 322, -1, + 377, 322, 380, -1, 323, 379, 324, -1, + 323, 378, 379, -1, 323, 324, 325, -1, + 323, 325, 326, -1, 323, 326, 327, -1, + 323, 327, 378, -1, 331, 335, 328, -1, + 331, 339, 332, -1, 331, 328, 329, -1, + 331, 329, 339, -1, 330, 363, 335, -1, + 330, 335, 331, -1, 330, 331, 332, -1, + 330, 332, 333, -1, 330, 333, 357, -1, + 330, 357, 363, -1, 334, 335, 363, -1, + 334, 361, 335, -1, 334, 363, 362, -1, + 334, 362, 361, -1, 343, 344, 336, -1, + 343, 336, 337, -1, 343, 337, 342, -1, + 338, 339, 340, -1, 338, 340, 341, -1, + 338, 342, 339, -1, 338, 343, 342, -1, + 338, 344, 343, -1, 338, 345, 344, -1, + 338, 341, 345, -1, 346, 380, 347, -1, + 346, 347, 348, -1, 346, 349, 380, -1, + 346, 350, 349, -1, 346, 367, 350, -1, + 346, 365, 367, -1, 346, 351, 365, -1, + 346, 348, 351, -1, 352, 353, 354, -1, + 352, 354, 360, -1, 352, 360, 355, -1, + 352, 355, 353, -1, 356, 357, 358, -1, + 356, 358, 359, -1, 356, 359, 360, -1, + 356, 360, 361, -1, 356, 361, 362, -1, + 356, 362, 363, -1, 356, 363, 357, -1, + 364, 365, 366, -1, 364, 367, 365, -1, + 364, 366, 368, -1, 364, 368, 367, -1, + 369, 370, 371, -1, 369, 372, 370, -1, + 369, 371, 373, -1, 369, 373, 374, -1, + 369, 374, 375, -1, 369, 375, 372, -1, + 376, 378, 377, -1, 376, 379, 378, -1, + 376, 377, 380, -1, 376, 381, 379, -1, + 376, 380, 382, -1, 376, 382, 381, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/link6.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/link6.wrl new file mode 100644 index 00000000..d1ccd288 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/link6.wrl @@ -0,0 +1,463 @@ +#VRML V2.0 utf8 + + +DEF link6 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.018084001 -0.00097699999 6.0759865e-012, + -0.018449999 0.0076290001 4.2824121e-012, + -0.018449999 0.0076290001 5.0494118e-012, + -0.032671001 0.0083010001 -0.0081179999, + -0.0070969998 -0.0070799999 6.5497187e-012, + -0.029131001 -0.019470001 -0.023010001, + -0.026384 -0.023010001 -0.016479, + -0.026262 -0.022949001 -0.0092770001, + -0.034318998 0.0068359999 -0.023010001, + -0.034318998 0.0068359999 -0.023010001, + -0.033953 0.0086059999 -0.016479, + -0.019975999 -3.5685788e-012 1.5833295e-012, + -0.033709001 1.9432422e-012 -0.0081179999, + -0.034318998 -0.0068359999 -0.023010001, + -0.034990001 -4.4330104e-012 -0.023010001, + -0.033953 -0.0086059999 -0.016479, + -0.030901 -0.016479 -0.016479, + -0.029131001 -0.019470001 -0.01001, + -0.029131001 -0.019470001 -0.01001, + -0.029131001 -0.019470001 -0.023010001, + -0.032366 -0.013367 -0.023010001, + 0.006821 0.034302 -0.01001, + -1.7e-005 0.020020001 2.8645729e-012, + -0.014116 0.01416 5.8965337e-012, + -0.0038010001 0.0092160003 6.3786424e-012, + -1.4999997e-005 0.034972999 -0.01001, + -0.0068509998 0.034302 -0.023010001, + -0.0068509998 0.034302 -0.023010001, + -1.4999999e-005 0.034972999 -0.023010001, + 0.018476 0.0076290001 -4.3602648e-012, + 0.013412 -0.032349002 -0.023010001, + 0.024762999 0.024719 -0.023010001, + -0.014116 -0.01416 1.9964152e-013, + -0.012651 -0.012634 6.6011298e-012, + -0.018449999 -0.0076290001 -3.6703947e-012, + -0.025408 -0.022156 -0.0081179999, + -0.033342 0.0084840003 -0.0086059999, + -0.032671001 -0.0083010001 -0.0081179999, + -0.034867998 6.1960025e-012 -0.0092770001, + -0.034318998 0.0068359999 -0.01001, + -0.034441002 5.4424525e-012 -0.0086059999, + -0.034990001 -3.6425008e-012 -0.01001, + -0.034318998 -0.0068359999 -0.01001, + -0.032366 -0.013367 -0.01001, + -0.033769999 -0.0086059999 -0.0092770001, + -0.032366 -0.013367 -0.01001, + -0.030352 -0.016174 -0.0086059999, + -0.030779 -0.016418001 -0.0092770001, + -0.025957 -0.022644 -0.0086059999, + -0.029741 -0.015869001 -0.0081179999, + -0.033342 -0.0084840003 -0.0086059999, + -1.5000004e-005 0.033752002 -0.0081789996, + -1.6999995e-005 0.020020001 2.8581822e-012, + 0.014143 0.01416 1.5037457e-012, + 0.009811 0.033629999 -0.016479, + -0.0097810002 0.033629999 -0.016479, + -0.0068509998 0.034302 -0.01001, + -0.014788 0.030334 -0.0081179999, + -0.0076469998 0.018494001 1.7698238e-012, + -0.019425999 0.029114 -0.023010001, + -0.019425999 0.029114 -0.023010001, + 0.020002 -3.3742438e-012 3.7156827e-012, + 0.032698002 0.0083010001 -0.0081179999, + 0.033918001 -0.0086059999 -0.016479, + 0.025434 0.022156 -0.0081179999, + 0.030866999 0.016479 -0.016479, + 0.035016999 3.9378813e-012 -0.023010001, + 0.035016999 -4.103259e-012 -0.023010001, + 0.034345999 -0.0068359999 -0.023010001, + 0.020979 0.028015001 -0.016479, + 0.026350001 0.023010001 -0.016479, + 0.024762999 0.024719 -0.023010001, + 0.029097 0.019470001 -0.01001, + 0.024762999 0.024719 -0.01001, + -0.0068509998 -0.034302 -0.023010001, + -1.4999996e-005 -0.034972999 -0.023010001, + -0.013382 -0.032349002 -0.023010001, + -0.013382 -0.032349002 -0.023010001, + -0.024736 -0.024719 -0.01001, + -0.024736 -0.024719 -0.023010001, + -0.015337 -0.031433001 -0.016479, + -0.021012999 -0.028015001 -0.016479, + -0.019425999 -0.029114 -0.023010001, + -0.0076469998 -0.018494001 -2.2099926e-012, + -0.02022 -0.026977999 -0.0081179999, + -0.032366 0.013367 -0.01001, + -0.033769999 0.0086059999 -0.0092770001, + -0.032366 0.013367 -0.01001, + 0.007673 0.018494001 6.136344e-012, + 0.020246999 0.026977999 -0.0081179999, + 0.013412 0.032349002 -0.023010001, + 0.006821 0.034302 -0.023010001, + 0.006821 0.034302 -0.023010001, + -1.4999994e-005 0.034972999 -0.023010001, + 0.019453 0.029114 -0.023010001, + 0.015364 0.031433001 -0.016479, + 0.013412 0.032349002 -0.023010001, + 0.019453 0.029114 -0.023010001, + -0.015093 0.030944999 -0.0086059999, + -0.0094149997 0.03241 -0.0081179999, + -0.0097810002 0.033447001 -0.0092770001, + -0.025957 0.022644 -0.0086059999, + -0.020647001 0.027527001 -0.0086059999, + -0.02022 0.026977999 -0.0081179999, + -0.025408 0.022156 -0.0081179999, + -0.029741 0.015869001 -0.0081179999, + -0.030352 0.016174 -0.0086059999, + -0.030779 0.016418001 -0.0092770001, + -0.024736 0.024719 -0.01001, + -0.021012999 0.028015001 -0.016479, + -0.026262 0.022949001 -0.0092770001, + -0.020891 0.027892999 -0.0092770001, + -0.013382 0.032349002 -0.01001, + -0.015337 0.031433001 -0.016479, + -0.019425999 0.029114 -0.01001, + -0.015276 0.031311002 -0.0092770001, + -0.013382 0.032349002 -0.01001, + -0.013382 0.032349002 -0.023010001, + -0.029131001 0.019470001 -0.023010001, + -0.024736 0.024719 -0.023010001, + -0.029131001 0.019470001 -0.023010001, + -0.026384 0.023010001 -0.016479, + -0.029131001 0.019470001 -0.01001, + -0.030901 0.016479 -0.016479, + -0.032366 0.013367 -0.023010001, + 0.033735 -6.1494945e-012 -0.0081179999, + 0.035016999 -2.7241668e-012 -0.016479, + 0.025923001 0.022644 -0.0086059999, + 0.029767999 0.015869001 -0.0081179999, + 0.026288999 0.022949001 -0.0092770001, + 0.032331999 0.013367 -0.023010001, + 0.034345999 0.0068359999 -0.023010001, + 0.029097 0.019470001 -0.023010001, + 0.032331999 0.013367 -0.023010001, + 0.029097 -0.019470001 -0.023010001, + 0.032331001 -0.013367 -0.023010001, + 0.024762999 -0.024719 -0.023010001, + -0.014788 -0.030334 -0.0081179999, + -0.020647001 -0.027527001 -0.0086059999, + 0.006821 -0.034302 -0.023010001, + -1.5e-005 -0.034972999 -0.023010001, + -0.0068509998 -0.034302 -0.023010001, + -1.5000002e-005 -0.033752002 -0.0081789996, + -1.5000001e-005 -0.034972999 -0.01001, + 0.011946 -0.013062 5.47285e-012, + -1.6999998e-005 -0.020020001 4.9118669e-012, + 0.010359 -0.013062 6.5711893e-012, + 0.020979 -0.028015001 -0.016479, + 0.019453 -0.029114 -0.023010001, + 0.0096279997 0.033020001 -0.0086059999, + 0.0094450004 0.03241 -0.0081179999, + 0.014753 0.030334 -0.0081179999, + -1.5000004e-005 0.034423999 -0.0086059999, + -1.4999999e-005 0.034423999 -0.0086059999, + -1.4999999e-005 0.034851 -0.0092160003, + -0.0096589997 0.033020001 -0.0086059999, + 0.032331999 0.013367 -0.01001, + 0.033918001 0.0086059999 -0.016479, + 0.030745 0.016418001 -0.0092770001, + 0.033369001 0.0084840003 -0.0086059999, + 0.030378001 0.016174 -0.0086059999, + 0.030866999 -0.016479 -0.016479, + 0.032331001 -0.013367 -0.01001, + 0.032698002 -0.0083010001 -0.0081179999, + 0.033369001 -0.0084840003 -0.0086059999, + -0.0097810002 -0.033629999 -0.016479, + -0.0068509998 -0.034302 -0.01001, + -0.015276 -0.031311002 -0.0092770001, + -0.019425999 -0.029114 -0.01001, + -0.020891 -0.027892999 -0.0092770001, + -0.013382 -0.032349002 -0.01001, + 0.006821 -0.034302 -0.01001, + 0.013412 -0.032349002 -0.01001, + 0.015364 -0.031433001 -0.016479, + 0.013412 -0.032349002 -0.023010001, + 0.009811 -0.033629999 -0.016479, + 0.019453 -0.029114 -0.01001, + 0.015303 0.031311002 -0.0092770001, + 0.013412 0.032349002 -0.01001, + 0.0097500002 0.033447001 -0.0092770001, + 0.015059 0.030944999 -0.0086059999, + 0.019453 0.029114 -0.01001, + 0.020918 0.027892999 -0.0092770001, + 0.020674 0.027527001 -0.0086059999, + 0.034834001 -3.0868253e-012 -0.0092770001, + 0.033796001 0.0086059999 -0.0092770001, + 0.034407001 1.2120329e-013 -0.0086059999, + 0.034345999 0.0068359999 -0.01001, + 0.035016999 2.5476897e-012 -0.01001, + 0.034345999 -0.0068359999 -0.01001, + 0.034345999 -0.0068359999 -0.01001, + 0.033796001 -0.0086059999 -0.0092770001, + 0.026350001 -0.023010001 -0.016479, + 0.024762999 -0.024719 -0.01001, + 0.020918 -0.027892999 -0.0092770001, + 0.030378001 -0.016174 -0.0086059999, + 0.025923001 -0.022644 -0.0086059999, + -0.0096589997 -0.033020001 -0.0086059999, + -0.015093 -0.030944999 -0.0086059999, + -0.0094149997 -0.03241 -0.0081179999, + -0.0097810002 -0.033447001 -0.0092770001, + -1.5000003e-005 -0.034423999 -0.0086059999, + -1.5000002e-005 -0.034851 -0.0092160003, + 0.015059 -0.030944999 -0.0086059999, + 0.0094450004 -0.03241 -0.0081179999, + 0.0096279997 -0.033020001 -0.0086059999, + 0.0097500002 -0.033447001 -0.0092770001, + 0.015303 -0.031311002 -0.0092770001, + 0.029097 -0.019470001 -0.01001, + 0.030745 -0.016418001 -0.0092770001, + 0.029097 -0.019470001 -0.01001, + 0.026288999 -0.022949001 -0.0092770001, + 0.018476 -0.0076290001 3.333231e-012, + 0.029767999 -0.015869001 -0.0081179999, + 0.020246999 -0.026977999 -0.0081179999, + 0.025434 -0.022156 -0.0081179999, + 0.020674 -0.027527001 -0.0086059999, + 0.014143 -0.01416 -4.0948781e-012, + 0.007673 -0.018494001 3.2248744e-012, + 0.014753 -0.030334 -0.0081179999 ] + + } + coordIndex [ 189, 68, 126, -1, 189, 63, 68, -1, + 0, 33, 23, -1, 34, 33, 0, -1, + 34, 0, 11, -1, 120, 59, 14, -1, + 135, 68, 63, -1, 12, 11, 3, -1, + 105, 106, 36, -1, 105, 36, 3, -1, + 2, 11, 0, -1, 2, 0, 23, -1, + 20, 14, 5, -1, 52, 99, 58, -1, + 24, 23, 33, -1, 124, 14, 8, -1, + 124, 120, 14, -1, 26, 117, 55, -1, + 79, 5, 14, -1, 132, 14, 59, -1, + 132, 79, 14, -1, 132, 135, 79, -1, + 132, 59, 93, -1, 162, 135, 63, -1, + 17, 7, 18, -1, 84, 35, 48, -1, + 145, 146, 33, -1, 40, 3, 36, -1, + 40, 12, 3, -1, 1, 23, 105, -1, + 1, 2, 23, -1, 1, 105, 3, -1, + 1, 3, 11, -1, 1, 11, 2, -1, + 47, 18, 7, -1, 47, 7, 48, -1, + 51, 99, 52, -1, 22, 58, 23, -1, + 22, 52, 58, -1, 116, 55, 117, -1, + 104, 105, 23, -1, 103, 23, 58, -1, + 103, 104, 23, -1, 119, 59, 120, -1, + 182, 183, 129, -1, 4, 33, 146, -1, + 4, 24, 33, -1, 4, 146, 24, -1, + 61, 146, 212, -1, 61, 125, 62, -1, + 27, 28, 93, -1, 27, 93, 59, -1, + 27, 59, 117, -1, 27, 117, 26, -1, + 139, 77, 79, -1, 139, 79, 135, -1, + 139, 135, 148, -1, 82, 79, 77, -1, + 19, 5, 79, -1, 19, 20, 5, -1, + 6, 78, 7, -1, 6, 79, 78, -1, + 6, 19, 79, -1, 6, 7, 17, -1, + 6, 17, 19, -1, 67, 68, 135, -1, + 67, 135, 132, -1, 31, 94, 97, -1, + 31, 132, 94, -1, 169, 48, 7, -1, + 169, 7, 78, -1, 9, 41, 39, -1, + 9, 14, 41, -1, 9, 8, 14, -1, + 9, 124, 8, -1, 10, 124, 9, -1, + 10, 9, 39, -1, 87, 10, 39, -1, + 87, 123, 124, -1, 87, 124, 10, -1, + 37, 34, 11, -1, 37, 11, 12, -1, + 37, 12, 40, -1, 86, 40, 36, -1, + 86, 87, 39, -1, 45, 15, 20, -1, + 45, 44, 42, -1, 45, 42, 15, -1, + 13, 14, 20, -1, 13, 20, 15, -1, + 13, 15, 42, -1, 13, 41, 14, -1, + 13, 42, 41, -1, 49, 48, 35, -1, + 49, 34, 37, -1, 16, 17, 18, -1, + 16, 18, 47, -1, 16, 19, 17, -1, + 16, 20, 19, -1, 16, 45, 20, -1, + 16, 47, 45, -1, 91, 93, 28, -1, + 91, 28, 92, -1, 21, 54, 92, -1, + 21, 179, 54, -1, 21, 92, 28, -1, + 21, 28, 25, -1, 21, 154, 179, -1, + 21, 25, 154, -1, 88, 52, 22, -1, + 88, 61, 53, -1, 88, 22, 23, -1, + 88, 146, 61, -1, 88, 23, 24, -1, + 88, 24, 146, -1, 178, 54, 179, -1, + 153, 99, 51, -1, 56, 154, 25, -1, + 56, 26, 55, -1, 56, 27, 26, -1, + 56, 28, 27, -1, 56, 25, 28, -1, + 188, 189, 126, -1, 64, 53, 128, -1, + 29, 62, 128, -1, 29, 61, 62, -1, + 29, 128, 53, -1, 29, 53, 61, -1, + 30, 148, 174, -1, 30, 174, 139, -1, + 30, 139, 148, -1, 131, 67, 132, -1, + 71, 97, 69, -1, 71, 31, 97, -1, + 71, 132, 31, -1, 136, 148, 135, -1, + 134, 136, 135, -1, 134, 192, 136, -1, + 75, 139, 140, -1, 75, 77, 139, -1, + 165, 170, 77, -1, 165, 141, 166, -1, + 138, 84, 48, -1, 138, 48, 169, -1, + 32, 145, 33, -1, 32, 83, 145, -1, + 32, 33, 34, -1, 32, 49, 35, -1, + 32, 34, 49, -1, 32, 35, 84, -1, + 32, 84, 83, -1, 199, 145, 83, -1, + 144, 212, 146, -1, 107, 122, 123, -1, + 107, 123, 87, -1, 107, 110, 122, -1, + 107, 36, 106, -1, 107, 86, 36, -1, + 50, 44, 47, -1, 50, 40, 44, -1, + 50, 37, 40, -1, 50, 49, 37, -1, + 38, 86, 39, -1, 38, 40, 86, -1, + 38, 39, 41, -1, 38, 41, 42, -1, + 38, 42, 44, -1, 38, 44, 40, -1, + 43, 47, 44, -1, 43, 44, 45, -1, + 43, 45, 47, -1, 46, 47, 48, -1, + 46, 48, 49, -1, 46, 50, 47, -1, + 46, 49, 50, -1, 150, 153, 51, -1, + 150, 51, 52, -1, 150, 52, 88, -1, + 89, 88, 53, -1, 89, 64, 183, -1, + 89, 53, 64, -1, 96, 54, 178, -1, + 96, 92, 54, -1, 96, 97, 94, -1, + 181, 69, 97, -1, 181, 182, 69, -1, + 100, 55, 116, -1, 100, 56, 55, -1, + 100, 154, 56, -1, 102, 98, 111, -1, + 57, 103, 58, -1, 57, 58, 99, -1, + 57, 99, 98, -1, 57, 102, 103, -1, + 57, 98, 102, -1, 109, 111, 114, -1, + 60, 117, 59, -1, 60, 109, 114, -1, + 60, 59, 119, -1, 60, 119, 109, -1, + 113, 117, 60, -1, 113, 60, 114, -1, + 115, 100, 116, -1, 115, 98, 100, -1, + 115, 111, 98, -1, 115, 114, 111, -1, + 121, 122, 110, -1, 163, 125, 61, -1, + 163, 164, 125, -1, 163, 61, 212, -1, + 159, 62, 125, -1, 159, 128, 62, -1, + 191, 63, 189, -1, 191, 162, 63, -1, + 127, 129, 183, -1, 127, 183, 64, -1, + 127, 64, 128, -1, 72, 129, 158, -1, + 72, 65, 132, -1, 72, 158, 65, -1, + 156, 65, 158, -1, 133, 132, 65, -1, + 133, 65, 156, -1, 133, 157, 131, -1, + 133, 156, 157, -1, 66, 131, 126, -1, + 66, 67, 131, -1, 66, 126, 68, -1, + 66, 68, 67, -1, 73, 182, 129, -1, + 73, 69, 182, -1, 73, 71, 69, -1, + 70, 132, 71, -1, 70, 129, 72, -1, + 70, 72, 132, -1, 70, 73, 129, -1, + 70, 71, 73, -1, 210, 192, 134, -1, + 74, 140, 141, -1, 74, 75, 140, -1, + 74, 77, 75, -1, 74, 165, 77, -1, + 74, 141, 165, -1, 76, 77, 170, -1, + 76, 170, 80, -1, 76, 82, 77, -1, + 76, 80, 82, -1, 81, 169, 78, -1, + 81, 78, 79, -1, 81, 79, 82, -1, + 168, 80, 170, -1, 168, 169, 81, -1, + 168, 82, 80, -1, 168, 81, 82, -1, + 137, 83, 84, -1, 137, 199, 83, -1, + 137, 84, 138, -1, 147, 148, 136, -1, + 173, 174, 148, -1, 175, 139, 174, -1, + 175, 171, 139, -1, 85, 87, 86, -1, + 85, 107, 87, -1, 85, 86, 107, -1, + 149, 153, 150, -1, 149, 179, 154, -1, + 149, 154, 153, -1, 151, 150, 88, -1, + 151, 88, 89, -1, 151, 89, 183, -1, + 90, 91, 92, -1, 90, 92, 96, -1, + 90, 93, 91, -1, 90, 96, 94, -1, + 90, 132, 93, -1, 90, 94, 132, -1, + 95, 97, 96, -1, 95, 181, 97, -1, + 95, 96, 178, -1, 95, 178, 181, -1, + 155, 98, 99, -1, 155, 100, 98, -1, + 155, 99, 153, -1, 155, 154, 100, -1, + 101, 111, 110, -1, 101, 102, 111, -1, + 101, 104, 103, -1, 101, 103, 102, -1, + 101, 106, 105, -1, 101, 105, 104, -1, + 101, 107, 106, -1, 101, 110, 107, -1, + 108, 109, 119, -1, 108, 119, 121, -1, + 108, 121, 110, -1, 108, 110, 111, -1, + 108, 111, 109, -1, 112, 113, 114, -1, + 112, 115, 116, -1, 112, 114, 115, -1, + 112, 116, 117, -1, 112, 117, 113, -1, + 118, 119, 120, -1, 118, 121, 119, -1, + 118, 122, 121, -1, 118, 123, 122, -1, + 118, 124, 123, -1, 118, 120, 124, -1, + 186, 159, 125, -1, 186, 125, 164, -1, + 186, 164, 191, -1, 187, 131, 157, -1, + 187, 188, 126, -1, 187, 126, 131, -1, + 160, 127, 128, -1, 160, 128, 159, -1, + 160, 158, 129, -1, 160, 129, 127, -1, + 130, 131, 132, -1, 130, 132, 133, -1, + 130, 133, 131, -1, 161, 210, 134, -1, + 161, 135, 162, -1, 161, 134, 135, -1, + 193, 136, 192, -1, 193, 147, 136, -1, + 193, 194, 147, -1, 195, 191, 164, -1, + 198, 199, 137, -1, 198, 138, 169, -1, + 198, 137, 138, -1, 143, 139, 171, -1, + 143, 140, 139, -1, 143, 141, 140, -1, + 143, 166, 141, -1, 204, 201, 205, -1, + 142, 145, 199, -1, 142, 199, 201, -1, + 142, 204, 145, -1, 142, 201, 204, -1, + 202, 205, 201, -1, 202, 143, 171, -1, + 202, 166, 143, -1, 218, 212, 144, -1, + 218, 146, 145, -1, 218, 144, 146, -1, + 218, 145, 204, -1, 176, 148, 147, -1, + 176, 147, 194, -1, 176, 194, 207, -1, + 176, 173, 148, -1, 180, 149, 150, -1, + 180, 150, 151, -1, 180, 179, 149, -1, + 180, 151, 183, -1, 152, 153, 154, -1, + 152, 154, 155, -1, 152, 155, 153, -1, + 190, 191, 189, -1, 185, 157, 156, -1, + 185, 187, 157, -1, 185, 156, 158, -1, + 185, 159, 186, -1, 185, 158, 160, -1, + 185, 160, 159, -1, 209, 161, 162, -1, + 209, 210, 161, -1, 209, 162, 191, -1, + 209, 191, 195, -1, 213, 164, 163, -1, + 213, 195, 164, -1, 213, 163, 212, -1, + 216, 207, 194, -1, 196, 195, 213, -1, + 200, 165, 166, -1, 200, 170, 165, -1, + 200, 166, 202, -1, 167, 169, 168, -1, + 167, 198, 169, -1, 167, 168, 170, -1, + 167, 170, 200, -1, 167, 200, 198, -1, + 206, 171, 175, -1, 206, 205, 202, -1, + 206, 202, 171, -1, 172, 174, 173, -1, + 172, 175, 174, -1, 172, 173, 176, -1, + 172, 176, 207, -1, 172, 206, 175, -1, + 172, 207, 206, -1, 177, 178, 179, -1, + 177, 179, 180, -1, 177, 181, 178, -1, + 177, 182, 181, -1, 177, 183, 182, -1, + 177, 180, 183, -1, 184, 185, 186, -1, + 184, 187, 185, -1, 184, 188, 187, -1, + 184, 189, 188, -1, 184, 190, 189, -1, + 184, 186, 191, -1, 184, 191, 190, -1, + 219, 218, 204, -1, 211, 192, 210, -1, + 211, 193, 192, -1, 211, 194, 193, -1, + 211, 209, 195, -1, 211, 195, 196, -1, + 211, 216, 194, -1, 211, 196, 216, -1, + 215, 196, 213, -1, 215, 216, 196, -1, + 197, 199, 198, -1, 197, 198, 200, -1, + 197, 201, 199, -1, 197, 202, 201, -1, + 197, 200, 202, -1, 203, 204, 205, -1, + 203, 219, 204, -1, 203, 205, 206, -1, + 203, 206, 207, -1, 203, 207, 216, -1, + 203, 216, 219, -1, 208, 210, 209, -1, + 208, 211, 210, -1, 208, 209, 211, -1, + 217, 212, 218, -1, 217, 213, 212, -1, + 217, 215, 213, -1, 214, 216, 215, -1, + 214, 215, 217, -1, 214, 217, 218, -1, + 214, 218, 219, -1, 214, 219, 216, -1 ] + + } + + } + +} diff --git a/examples/rlsg/mitsubishi-rv6sl.convex/mitsubishi-rv6sl.wrl b/examples/rlsg/mitsubishi-rv6sl.convex/mitsubishi-rv6sl.wrl new file mode 100644 index 00000000..2a651c5d --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl.convex/mitsubishi-rv6sl.wrl @@ -0,0 +1,63 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF link0 Transform { + children [ + Inline { + url "link0.wrl" + } + ] + } + DEF link1 Transform { + rotation 1 0 0 -1.570796 + translation 0.085 0 0.35 + children [ + Inline { + url "link1.wrl" + } + ] + } + DEF link2 Transform { + rotation 0.577350 0.577350 0.577350 -2.094395 + translation 0.085 0 0.73 + children [ + Inline { + url "link2.wrl" + } + ] + } + DEF link3 Transform { + rotation 0 0 1 3.141593 + translation -0.015 0 0.73 + children [ + Inline { + url "link3.wrl" + } + ] + } + DEF link4 Transform { + rotation 0 0.70710677 0.70710677 3.1415927 + translation -0.015 0 1.155 + children [ + Inline { + url "link4.wrl" + } + ] + } + DEF link5 Transform { + translation -0.015 0 1.155 + children [ + Inline { + url "link5.wrl" + } + ] + } + DEF link6 Transform { + translation -0.015 0 1.24 + children [ + Inline { + url "link6.wrl" + } + ] + } ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link0.wrl b/examples/rlsg/mitsubishi-rv6sl/link0.wrl new file mode 100644 index 00000000..efab3078 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link0.wrl @@ -0,0 +1,2806 @@ +#VRML V2.0 utf8 + +DEF link0 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.749020 0.749020 0.698039 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 2830 + 0.108856 0.106061 0, 0.107819 0.10955 0, 0.105598 0.112437 0, 0.102493 0.114337 0, 0.098923 0.115 0, 0.090462 0.115 0, + 0 0.044398 0, -0.090462 0.115 0, -0.129997 0.115 0, -0.133827 0.114239 0, -0.13707 0.112071 0, -0.139236 0.108827 0, + -0.139999 0.105 0, -0.139999 -0.105 0, -0.139236 -0.108827 0, -0.13707 -0.112071 0, -0.13382 -0.114239 0, -0.129997 -0.115 0, + -0.090462 -0.115 0, 0 -0.044398 0, 0.090462 -0.115 0, 0.098923 -0.115 0, 0.102486 -0.114337 0, 0.105598 -0.112437 0, + 0.107819 -0.10955 0, 0.108849 -0.106061 0, 0.111671 -0.075169 0, 0.113522 -0.044204 0, 0.056886 0 0, 0.113522 0.044204 0, + 0.111671 0.075169 0, 0.102501 0.0845 0, 0.104225 0.084157 0, 0.105682 0.083182 0, 0.106659 0.081722 0, 0.107002 0.08 0, + 0.106659 0.078278 0, 0.105682 0.076818 0, 0.104225 0.075843 0, 0.102501 0.0755 0, 0.100777 0.075843 0, 0.099319 0.076818 0, + 0.098343 0.078278 0, 0.098 0.08 0, 0.098343 0.081722 0, 0.099319 0.083182 0, 0.100777 0.084157 0, 0.102501 -0.0755 0, + 0.104225 -0.075843 0, 0.105682 -0.076818 0, 0.106659 -0.078278 0, 0.107002 -0.08 0, 0.106659 -0.081722 0, + 0.105682 -0.083182 0, 0.104225 -0.084157 0, 0.102501 -0.0845 0, 0.100777 -0.084157 0, 0.099319 -0.083182 0, + 0.098343 -0.081722 0, 0.098 -0.08 0, 0.098343 -0.078278 0, 0.099319 -0.076818 0, 0.100777 -0.075843 0, -0.102501 0.0845 0, + -0.100777 0.084157 0, -0.099319 0.083182 0, -0.098343 0.081722 0, -0.098 0.08 0, -0.098343 0.078278 0, -0.099319 0.076818 0, + -0.100777 0.075843 0, -0.102501 0.0755 0, -0.104225 0.075843 0, -0.105682 0.076818 0, -0.106659 0.078278 0, -0.107002 0.08 0, + -0.106659 0.081722 0, -0.105682 0.083182 0, -0.104225 0.084157 0, -0.102501 -0.0755 0, -0.100777 -0.075843 0, + -0.099319 -0.076818 0, -0.098343 -0.078278 0, -0.098 -0.08 0, -0.098343 -0.081722 0, -0.099319 -0.083182 0, + -0.100777 -0.084157 0, -0.102501 -0.0845 0, -0.104225 -0.084157 0, -0.105682 -0.083182 0, -0.106659 -0.081722 0, + -0.107002 -0.08 0, -0.106659 -0.078278 0, -0.105682 -0.076818 0, -0.104225 -0.075843 0, 0.102501 0.084499 0.02079, + 0.104156 0.084185 0.02079, 0.105682 0.083181 0.020805, 0.106682 0.081656 0.020813, 0.107002 0.08 0.020828, + 0.106682 0.078344 0.020844, 0.105682 0.076818 0.020859, 0.104156 0.075815 0.020866, 0.102501 0.0755 0.020866, + 0.100845 0.075815 0.020866, 0.099319 0.076818 0.020859, 0.098312 0.078344 0.020844, 0.098 0.08 0.020828, + 0.098312 0.081656 0.020813, 0.099319 0.083181 0.020805, 0.100845 0.084185 0.02079, 0.102501 0.084499 0.02079, + 0.087189 0.065001 0.020958, 0.081627 0.075474 0.020866, 0.075264 0.085476 0.020782, 0.073196 0.087662 0.02076, + 0.07196 0.08849 0.020752, 0.070572 0.089134 0.020752, 0.061584 0.092283 0.020721, 0.052452 0.094999 0.020699, + 0.109978 0.094999 0.020699, 0.111298 0.080009 0.020821, 0.112389 0.065001 0.020958, -0.089355 0.070297 0.020912, + -0.091164 0.068611 0.020927, -0.092285 0.068165 0.020935, -0.093559 0.068001 0.020935, -0.109009 0.068001 0.020927, + -0.111015 0.06842 0.02092, -0.11248 0.069403 0.02092, -0.11351 0.070833 0.020912, -0.114006 0.072826 0.020889, + -0.114777 0.094999 0.020699, -0.052452 0.094999 0.020699, -0.063698 0.091587 0.020729, -0.074722 0.087517 0.020767, + -0.076813 0.08637 0.020775, -0.078568 0.084763 0.02079, -0.084213 0.077717 0.020851, -0.102501 0.0755 0.020866, + -0.100845 0.075815 0.020866, -0.099319 0.076818 0.020859, -0.098312 0.078344 0.020844, -0.098 0.08 0.020828, + -0.098312 0.081656 0.020813, -0.099319 0.083181 0.020805, -0.100845 0.084185 0.02079, -0.102501 0.084499 0.02079, + -0.104156 0.084185 0.02079, -0.105682 0.083181 0.020805, -0.106682 0.081656 0.020813, -0.107002 0.08 0.020828, + -0.106682 0.078344 0.020844, -0.105682 0.076818 0.020866, -0.104156 0.075815 0.020866, -0.102501 0.084499 0.02079, + 0.075264 0.08548 0.205757, 0.075264 0.085476 0.020782, 0.093639 0.049376 0.021507, 0.098251 0.033333 0.022064, + 0.101048 0.016876 0.022644, 0.102 0 0.023232, 0.101048 -0.016876 0.022644, 0.098251 -0.033333 0.022064, + 0.093639 -0.049376 0.021507, 0.087189 -0.065001 0.020958, 0.081627 -0.075474 0.020866, 0.075264 -0.085476 0.020782, + 0.075264 -0.08548 0.205757, 0.086876 -0.065643 0.20507, 0.095161 -0.044785 0.204338, 0.100241 -0.022903 0.203568, + 0.102 0 0.202766, 0.100241 0.022903 0.203568, 0.095161 0.044785 0.204338, 0.086876 0.065643 0.20507, + 0.074303 0.086655 0.205803, 0.073196 0.087662 0.205833, 0.070572 0.089142 0.205887, 0.070572 0.089134 0.020752, + 0.108 0 0.202774, 0.107448 0.012848 0.203224, 0.105782 0.025604 0.203667, 0.103016 0.038162 0.204109, + 0.099171 0.05043 0.204536, 0.094276 0.062317 0.204948, 0.088364 0.07373 0.205353, 0.08149 0.084595 0.205727, + 0.073692 0.094818 0.206085, 0.072563 0.095932 0.206123, 0.071236 0.096802 0.206154, 0.05085 0.105957 0.206474, + 0.029556 0.112762 0.206713, 0.007637 0.117126 0.206865, -0.014633 0.119003 0.20693, -0.036972 0.118347 0.206905, + -0.059097 0.115173 0.206795, -0.080727 0.109528 0.206596, -0.101578 0.101486 0.206314, -0.050789 0.101868 0.206333, + 0 0.102005 0.206336, 0.018082 0.101181 0.206308, 0.035866 0.098755 0.206223, 0.053368 0.094742 0.206081, + 0.070572 0.089142 0.205887, 0.11 0 0.204773, 0.109434 0.013016 0.205223, 0.107742 0.025925 0.205666, 0.104939 0.038635 0.2061, + 0.10104 0.051071 0.206528, 0.096077 0.06311 0.206947, 0.090096 0.074677 0.207352, 0.083122 0.085678 0.207726, + 0.075233 0.096024 0.208084, 0.075104 0.095947 0.207329, 0.074768 0.095688 0.206688, 0.07428 0.095291 0.206253, + 0.073692 0.094818 0.206085, 0.108766 0 0.202927, 0.109414 0 0.203369, 0.109848 0 0.20401, 0.11 0 0.204773, + 0.109433 -0.013016 0.205223, 0.107742 -0.025925 0.205666, 0.104939 -0.038635 0.2061, 0.10104 -0.051071 0.206528, + 0.096077 -0.06311 0.206947, 0.090096 -0.074677 0.207352, 0.083122 -0.085678 0.207726, 0.075233 -0.096024 0.208084, + 0.075233 -0.096024 0.237, 0.08313 -0.085678 0.237, 0.090096 -0.074677 0.237, 0.096081 -0.06311 0.237, 0.10104 -0.051071 0.237, + 0.104939 -0.038635 0.237, 0.107742 -0.025925 0.237, 0.109435 -0.013016 0.237, 0.11 0 0.237, 0.109435 0.013016 0.237, + 0.107742 0.025925 0.237, 0.104939 0.038635 0.237, 0.10104 0.051071 0.237, 0.096081 0.06311 0.237, 0.090096 0.074677 0.237, + 0.08313 0.085678 0.237, 0.075233 0.096024 0.237, 0.075233 0.096024 0.208084, 0.108 0 0.202774, 0.107448 -0.012848 0.203224, + 0.105782 -0.025604 0.203667, 0.103016 -0.038162 0.204109, 0.099171 -0.05043 0.204536, 0.094276 -0.062317 0.204948, + 0.088364 -0.07373 0.205353, 0.08149 -0.084595 0.205727, 0.073692 -0.094818 0.206085, 0.07428 -0.095291 0.206253, + 0.074768 -0.095688 0.206688, 0.075104 -0.095947 0.207329, 0.075233 -0.096024 0.208084, 0.073196 -0.087662 0.205833, + 0.07196 -0.088486 0.205864, 0.070572 -0.089142 0.205887, 0.053368 -0.094742 0.206081, 0.035866 -0.098755 0.206223, + 0.018082 -0.101181 0.206308, 0 -0.102005 0.206336, -0.050789 -0.101868 0.206333, -0.10157 -0.101486 0.206314, + -0.080719 -0.109528 0.206596, -0.059097 -0.115173 0.206795, -0.036972 -0.118347 0.206905, -0.014633 -0.119003 0.20693, + 0.007637 -0.117126 0.206865, 0.029564 -0.112762 0.206713, 0.05085 -0.105957 0.206474, 0.071236 -0.096802 0.206154, + 0.072563 -0.095932 0.206123, 0.074303 -0.08666 0.020775, 0.073196 -0.087662 0.02076, 0.070572 -0.089134 0.020752, + 0.070572 -0.089142 0.205887, 0.052452 -0.094999 0.020699, 0.061584 -0.092283 0.020721, 0.070572 -0.089134 0.020752, + 0.112389 -0.065001 0.020958, 0.111298 -0.080009 0.020821, 0.109978 -0.094999 0.020699, 0.102501 -0.084499 0.02079, + 0.104156 -0.084185 0.02079, 0.105682 -0.083181 0.020805, 0.106682 -0.081656 0.020813, 0.107002 -0.08 0.020828, + 0.106682 -0.078344 0.020844, 0.105682 -0.076818 0.020859, 0.104156 -0.075815 0.020866, 0.102501 -0.0755 0.020866, + 0.100845 -0.075815 0.020866, 0.099319 -0.076818 0.020859, 0.098312 -0.078344 0.020844, 0.098 -0.08 0.020828, + 0.098312 -0.081656 0.020813, 0.099319 -0.083181 0.020805, 0.100845 -0.084185 0.02079, -0.093559 -0.068001 0.020935, + -0.091164 -0.068611 0.020927, -0.090179 -0.069313 0.02092, -0.089355 -0.070297 0.020912, -0.084015 -0.077982 0.020844, + -0.078133 -0.085262 0.020782, -0.076347 -0.086878 0.020767, -0.074226 -0.088018 0.02076, -0.063698 -0.091801 0.020725, + -0.052979 -0.094999 0.020699, -0.114777 -0.094999 0.020699, -0.114006 -0.072826 0.020889, -0.11351 -0.070833 0.020912, + -0.11248 -0.069403 0.02092, -0.111015 -0.06842 0.02092, -0.109009 -0.068001 0.020927, -0.102501 -0.084499 0.02079, + -0.100845 -0.084185 0.02079, -0.099319 -0.083181 0.020805, -0.098312 -0.081656 0.020813, -0.098 -0.08 0.020828, + -0.098312 -0.078344 0.020844, -0.099319 -0.076818 0.020859, -0.100845 -0.075815 0.020866, -0.102501 -0.0755 0.020866, + -0.104156 -0.075815 0.020866, -0.105682 -0.076818 0.020866, -0.106682 -0.078344 0.020844, -0.107002 -0.08 0.020828, + -0.106682 -0.081656 0.020813, -0.105682 -0.083181 0.020805, -0.104156 -0.084185 0.02079, 0.102501 -0.0755 0.020866, + -0.102501 -0.0755 0.020866, 0 -0.10199 0.100023, 0 -0.102005 0.101954, 0 -0.102005 0.206336, 0.039513 -0.098059 0.020592, + 0.026459 -0.100243 0.020515, 0 -0.101999 0.020454, -0.074226 -0.08802 0.097595, -0.05719 -0.093819 0.097805, + -0.0485 -0.096153 0.097885, -0.039711 -0.098099 0.097954, -0.02269 -0.100731 0.099047, -0.011772 -0.101662 0.100349, + 0 -0.102005 0.101954, -0.01342 -0.101559 0.02047, -0.026711 -0.100243 0.020515, -0.052979 -0.094999 0.020699, + -0.074951 -0.089813 0.099594, -0.057755 -0.095673 0.099804, -0.048973 -0.098022 0.099884, -0.0401 -0.099991 0.099953, + -0.039955 -0.099258 0.099781, -0.039833 -0.098648 0.099342, -0.039742 -0.098236 0.098705, -0.039711 -0.098099 0.097954, + -0.074287 -0.08815 0.098351, -0.074448 -0.088539 0.098991, -0.074677 -0.089119 0.099426, -0.112831 -0.096458 0.099831, + -0.113052 -0.097984 0.099892, -0.113609 -0.099426 0.09993, -0.076851 -0.099777 0.099945, -0.0401 -0.099991 0.099953, + -0.077499 -0.08844 0.099548, -0.079643 -0.086502 0.09948, -0.085617 -0.079109 0.09922, -0.091034 -0.071304 0.098953, + -0.091515 -0.070732 0.09893, -0.092125 -0.070297 0.098915, -0.093559 -0.069931 0.0989, -0.109009 -0.069931 0.0989, + -0.11013 -0.070152 0.0989, -0.111092 -0.07077 0.09893, -0.111748 -0.071709 0.098976, -0.112007 -0.072823 0.099007, + -0.113594 -0.096436 0.099686, -0.114243 -0.096428 0.099243, -0.114677 -0.096436 0.098602, -0.11483 -0.096458 0.097832, + -0.11499 -0.097549 0.097885, -0.115387 -0.098579 0.097923, -0.115242 -0.098625 0.098694, -0.114853 -0.098801 0.099335, + -0.114281 -0.099083 0.09977, -0.11277 -0.072807 0.098862, -0.113419 -0.0728 0.098427, -0.113853 -0.072807 0.097771, + -0.114006 -0.072823 0.097008, -0.11483 -0.096458 0.097832, -0.109009 -0.069183 0.098732, -0.109009 -0.068558 0.098297, + -0.109009 -0.068146 0.097664, -0.109009 -0.068001 0.096901, -0.110878 -0.068367 0.096916, -0.11248 -0.069405 0.096924, + -0.113571 -0.070969 0.096977, -0.114006 -0.072823 0.097008, -0.093559 -0.069183 0.098732, -0.093559 -0.068558 0.098297, + -0.093559 -0.068146 0.097656, -0.093559 -0.068001 0.096901, -0.109009 -0.068001 0.096901, -0.090401 -0.070908 0.098785, + -0.089859 -0.070572 0.098351, -0.089493 -0.070358 0.09771, -0.089355 -0.070297 0.096954, -0.090157 -0.069344 0.096931, + -0.091164 -0.068611 0.096916, -0.093559 -0.068001 0.096901, -0.079071 -0.086014 0.099319, -0.07859 -0.085609 0.098877, + -0.078262 -0.085342 0.098236, -0.078133 -0.085258 0.097481, -0.084015 -0.07798 0.097221, -0.089355 -0.070297 0.096954, + -0.076347 -0.086876 0.097549, -0.078133 -0.085258 0.097481, -0.11483 -0.096457 0.020645, -0.139999 -0.101021 0.020493, + -0.129944 -0.101156 0.020477, -0.119888 -0.101282 0.020477, -0.117859 -0.100878 0.0205, -0.116371 -0.099899 0.020531, + -0.115326 -0.098465 0.020584, -0.11483 -0.096457 0.020645, 0.109436 -0.100533 0.020508, 0.108849 -0.10606 0.020309, + 0.107704 -0.109774 0.02018, 0.105606 -0.112436 0.020088, 0.10273 -0.114243 0.020035, 0.098923 -0.115 0.019997, + -0.129997 -0.115 0.020004, -0.134117 -0.114115 0.020035, -0.13707 -0.11207 0.020096, -0.139114 -0.109114 0.020203, + -0.139999 -0.105 0.020355, -0.19915 -0.100021 0.211411, -0.199776 -0.100006 0.212128, -0.199944 -0.100006 0.212585, + -0.199997 -0.100006 0.213058, -0.199997 -0.100006 0.237, -0.153137 -0.10083 0.237, -0.10627 -0.10144 0.237, + -0.10627 -0.10144 0.208252, -0.10614 -0.10144 0.207802, -0.105652 -0.10144 0.207268, -0.104301 -0.101456 0.206665, + -0.10157 -0.101486 0.206314, -0.059944 -0.101822 0.101948, -0.119888 -0.10128 0.101929, -0.119888 -0.101282 0.020477, + -0.139999 -0.101013 0.168961, -0.140228 -0.101013 0.169876, -0.140495 -0.101013 0.170273, -0.140854 -0.101013 0.170593, + -0.169998 -0.100555 0.19101, -0.19915 -0.100021 0.211411, -0.19915 -0.098007 0.211411, -0.199501 -0.098007 0.211731, + -0.199776 -0.098007 0.212128, -0.199997 -0.098007 0.213058, -0.199997 -0.100006 0.213058, -0.140854 -0.098007 0.170593, + -0.19915 0.100021 0.211411, -0.19915 0.098007 0.211411, -0.140854 0.098007 0.170593, -0.140862 0.101013 0.170593, + -0.169998 0.100555 0.19101, -0.139999 -0.098007 0.168961, -0.14006 -0.098007 0.169434, -0.140228 -0.098007 0.169876, + -0.140854 -0.098007 0.170593, -0.139999 -0.098 0.013, -0.138496 -0.098 0.013, -0.138496 -0.098007 0.168961, + -0.138603 -0.098007 0.169785, -0.138893 -0.098007 0.170578, -0.139992 -0.098007 0.171829, -0.198502 -0.098007 0.212799, + -0.198502 -0.098007 0.235001, -0.199997 -0.098007 0.235001, -0.139999 0.105 0, -0.139999 0.105 0.020355, + -0.139999 0.101021 0.020493, -0.139999 0.101013 0.168961, -0.139999 0.098007 0.168961, -0.139999 0.098 0.013, + -0.139999 0.097847 0.012238, -0.139999 0.097414 0.011581, -0.139999 0.096766 0.011154, -0.139999 0.096 0.011002, + -0.139999 -0.096 0.011002, -0.139999 -0.096766 0.011154, -0.139999 -0.097414 0.011581, -0.139999 -0.097848 0.012238, + -0.139999 -0.098 0.013, -0.139999 -0.105 0, -0.129997 0.115 0, -0.129997 0.115 0.020004, -0.134109 0.114115 0.020035, + -0.13707 0.11207 0.020096, -0.139122 0.109114 0.020203, -0.139999 0.105 0.020355, 0.098923 0.115 0, 0.098923 0.115 0.019997, + -0.129997 0.115 0.020004, -0.090462 0.115 0.002998, 0.090462 0.115 0.002998, 0.090462 0.115 0, 0.108856 0.106061 0, + 0.108856 0.10606 0.020309, 0.107712 0.109774 0.02018, 0.105606 0.112436 0.020088, 0.10273 0.114243 0.020035, + 0.098923 0.115 0.019997, 0.113522 0.044204 0.002998, 0.112869 0.057107 0.002998, 0.112045 0.07 0.002998, + 0.112045 0.07 0.014999, 0.113888 0.035022 0.014999, 0.1145 0 0.014999, 0.113888 -0.035022 0.014999, 0.112045 -0.07 0.014999, + 0.112045 -0.07 0.002998, 0.112869 -0.057107 0.002998, 0.113522 -0.044204 0.002998, 0.113522 -0.044204 0, + 0.108849 -0.10606 0.020309, 0.113972 -0.032516 0.022095, 0.114368 -0.016262 0.022659, 0.1145 0 0.023232, + 0.113972 0.032516 0.022095, 0.113312 0.048763 0.02153, 0.112389 0.065001 0.020958, 0.109436 0.100533 0.020508, + 0.056886 0 0.002998, 0.056886 0 0.002998, 0.114998 -0.07 0.002998, 0.114998 0.07 0.002998, 0.114998 -0.07 0.014999, + 0.112045 0.07 0.014999, 0.114998 0.07 0.014999, 0.114998 -0.07 0.014999, 0.098923 -0.115 0.019997, 0.090462 -0.115 0.002998, + 0.026543 -0.115 0.003, 0.026543 -0.115 0.014999, -0.026543 -0.115 0.014999, -0.026543 -0.115 0.003, -0.090462 -0.115 0.002998, + -0.090462 -0.115 0, -0.129997 -0.115 0.020004, 0 -0.044399 0.003, 0.090462 -0.115 0.002998, 0 -0.044399 0.003, + 0.022499 -0.122 0.003, 0.026543 -0.115 0.003, -0.022499 -0.122 0.003, 0.022499 -0.122 0.014999, -0.022499 -0.122 0.014999, + 0.022499 -0.122 0.014999, -0.022499 -0.122 0.014999, -0.114777 0.094999 0.020699, -0.11483 0.096457 0.020645, + -0.115326 0.098465 0.020584, -0.116371 0.099899 0.020531, -0.117859 0.100878 0.0205, -0.119888 0.101282 0.020477, + -0.129944 0.101156 0.020477, -0.139999 0.101021 0.020493, 0.026222 0.100273 0.020514, 0 0.101999 0.020454, + -0.026222 0.100273 0.020514, -0.052452 0.094999 0.020699, -0.114006 0.072823 0.097008, -0.11483 0.096458 0.097832, + -0.11483 0.096457 0.020645, -0.112007 0.072823 0.099007, -0.112831 0.096458 0.099831, -0.113594 0.096436 0.099686, + -0.114243 0.096428 0.099243, -0.114677 0.096436 0.098602, -0.11483 0.096458 0.097832, -0.113853 0.072807 0.097771, + -0.113419 0.0728 0.098427, -0.11277 0.072807 0.098862, -0.07547 0.089302 0.099579, -0.066719 0.09259 0.099693, + -0.057831 0.095474 0.099796, -0.039696 0.099991 0.099953, -0.076653 0.099777 0.099945, -0.113609 0.099426 0.09993, + -0.113052 0.097984 0.099892, -0.112831 0.096458 0.099831, -0.111748 0.071709 0.098976, -0.111092 0.07077 0.09893, + -0.11013 0.070152 0.0989, -0.109009 0.069931 0.0989, -0.093559 0.069931 0.0989, -0.092819 0.070023 0.098907, + -0.092125 0.070297 0.098915, -0.091034 0.071304 0.098953, -0.085815 0.078842 0.099213, -0.080086 0.085999 0.099464, + -0.077972 0.087929 0.099533, -0.075188 0.088615 0.099411, -0.074951 0.088036 0.098969, -0.074783 0.087646 0.098328, + -0.074722 0.087517 0.09758, -0.066063 0.090775 0.097694, -0.057259 0.093628 0.097797, -0.039307 0.098099 0.097954, + -0.039337 0.098244 0.098705, -0.039421 0.098648 0.099342, -0.039551 0.099258 0.099781, -0.079514 0.08551 0.099297, + -0.079025 0.085106 0.098862, -0.07869 0.084846 0.098221, -0.078568 0.084763 0.097466, -0.076813 0.086372 0.097534, + -0.074722 0.087517 0.09758, -0.090401 0.070908 0.098785, -0.089859 0.070572 0.098351, -0.089493 0.070358 0.09771, + -0.089355 0.070297 0.096954, -0.084213 0.077713 0.097214, -0.078568 0.084763 0.097466, -0.093559 0.069183 0.098732, + -0.093559 0.068558 0.098297, -0.093559 0.068146 0.097656, -0.093559 0.068001 0.096901, -0.092323 0.068153 0.096909, + -0.091164 0.068611 0.096916, -0.089355 0.070297 0.096954, -0.109009 0.069183 0.098732, -0.109009 0.068558 0.098297, + -0.109009 0.068146 0.097664, -0.109009 0.068001 0.096901, -0.093559 0.068001 0.096901, -0.113571 0.070969 0.096977, + -0.11248 0.069405 0.096924, -0.110878 0.068367 0.096916, -0.109009 0.068001 0.096901, 0 0.101997 0.101954, + -0.022461 0.100739 0.099047, -0.031792 0.099457 0.098238, -0.039307 0.098099 0.097954, 0 0.101997 0.101954, + -0.022682 0.101349 0.1005, -0.032112 0.100693 0.100094, -0.039696 0.099991 0.099953, -0.059937 0.10183 0.101948, + -0.117393 0.101082 0.10099, -0.115517 0.100571 0.100357, -0.113609 0.099426 0.09993, -0.199997 0.100006 0.213058, + -0.199776 0.100006 0.212128, -0.199501 0.100006 0.211731, -0.19915 0.100021 0.211411, -0.140221 0.101013 0.169876, + -0.14006 0.101013 0.169434, -0.139999 0.101013 0.168961, -0.119888 0.10128 0.101929, -0.104294 0.101456 0.206665, + -0.105644 0.10144 0.207268, -0.106148 0.10144 0.207802, -0.10627 0.10144 0.208252, -0.10627 0.10144 0.237, + -0.153137 0.10083 0.237, -0.199997 0.100006 0.237, -0.199997 0.098007 0.213058, -0.199944 0.098007 0.212585, + -0.199776 0.098007 0.212128, -0.199997 -0.097855 0.235764, -0.199997 -0.097412 0.23642, -0.199997 -0.096771 0.236847, + -0.199997 -0.095993 0.237, -0.199997 0.095993 0.237, -0.199997 0.096771 0.236847, -0.199997 0.097412 0.23642, + -0.199997 0.097855 0.235764, -0.199997 0.098007 0.235001, -0.199997 0.098007 0.213058, -0.199997 0.099854 0.237762, + -0.199997 0.099411 0.238419, -0.199997 0.09877 0.238846, -0.199997 0.098007 0.238998, -0.199997 -0.098007 0.238998, + -0.199997 -0.09877 0.238846, -0.199997 -0.099411 0.238419, -0.199997 -0.099854 0.237762, -0.199997 -0.100006 0.237, + -0.198502 -0.095993 0.237, -0.199997 -0.095993 0.237, -0.198502 -0.097855 0.235764, -0.198502 -0.097412 0.23642, + -0.198502 -0.096771 0.236847, -0.198502 0.095993 0.237, -0.199997 0.095993 0.237, -0.198502 -0.093506 0.212799, + -0.198502 -0.093506 0.232498, -0.198502 0.093506 0.232498, -0.198502 0.093506 0.212799, -0.198502 0.098007 0.212799, + -0.198502 0.098007 0.235001, -0.198502 0.097855 0.235764, -0.198502 0.097412 0.23642, -0.198502 0.096771 0.236847, + -0.198502 0.095993 0.237, -0.139992 -0.093506 0.171829, -0.198502 -0.093506 0.212799, -0.139992 0.098007 0.171829, + -0.198502 0.098007 0.212799, -0.139992 0.093506 0.171829, -0.138496 -0.093506 0.168961, -0.138603 -0.093506 0.169785, + -0.138893 -0.093506 0.170578, -0.139992 -0.093506 0.171829, -0.138496 -0.098 0.013, -0.138496 -0.097848 0.012238, + -0.138496 -0.097414 0.011581, -0.138496 -0.096766 0.011154, -0.138496 -0.096 0.011002, -0.138496 0.096 0.011002, + -0.138496 0.096766 0.011154, -0.138496 0.097414 0.011581, -0.138496 0.097847 0.012238, -0.138496 0.098 0.013, + -0.138496 0.098007 0.168961, -0.138496 0.093506 0.168961, -0.138496 0.0935 0.015503, -0.138496 -0.0935 0.015503, + -0.138496 -0.093506 0.168961, -0.138496 -0.096 0.011002, -0.138496 0.096 0.011002, -0.138496 0.098 0.013, + -0.198502 0.098007 0.235001, -0.138893 0.098007 0.170578, -0.138603 0.098007 0.169785, -0.138496 0.098007 0.168961, + -0.14006 0.098007 0.169434, -0.140228 0.098007 0.169876, -0.140854 0.098007 0.170593, -0.139366 0.093506 0.171265, + -0.138893 0.093506 0.170578, -0.138496 0.093506 0.168961, -0.035004 0.093506 0.232498, -0.035004 0.093498 0.105999, + -0.121002 0.093498 0.106003, -0.121002 0.0935 0.015503, -0.035004 -0.093506 0.232498, -0.035004 0.093506 0.232498, + -0.121002 -0.0935 0.015503, -0.121002 -0.093498 0.106003, -0.035004 -0.093498 0.105999, -0.035004 -0.093506 0.232498, + -0.121002 -0.0935 0.015503, -0.121002 0.093498 0.106003, -0.120998 0.061996 0.106003, -0.120998 0.062 0.019997, + -0.120998 -0.062 0.019997, -0.120998 -0.061996 0.106003, -0.121002 -0.093498 0.106003, -0.035 0.061996 0.105999, + -0.035 -0.062 0.02, -0.035 0.062 0.02, -0.035 0.061996 0.105999, -0.035 -0.061996 0.105999, -0.035 0.062 0.02, + -0.106239 0.101273 0.23777, -0.106125 0.100845 0.238426, -0.105988 0.100189 0.238846, -0.105812 0.099442 0.238998, + -0.152908 0.098831 0.238998, -0.199997 0.098007 0.238998, -0.084885 0.110184 0.237, -0.06263 0.116409 0.237, + -0.03981 0.12001 0.237, -0.016716 0.120972 0.237, 0.006332 0.119263 0.237, 0.02903 0.114899 0.237, 0.051064 0.107941 0.237, + 0.072159 0.098495 0.237, 0.07209 0.098373 0.237762, 0.071892 0.097977 0.238411, 0.071587 0.097412 0.238846, + 0.071236 0.096725 0.238998, 0.050308 0.106094 0.238998, 0.028435 0.112991 0.239, 0.005905 0.117294 0.239, + -0.016968 0.118973 0.239, -0.039879 0.117996 0.238998, -0.062515 0.11438 0.238998, -0.084602 0.10817 0.238998, + -0.10627 0.10144 0.208252, -0.084892 0.110184 0.208557, -0.062614 0.116409 0.208771, -0.039803 0.12001 0.208897, + -0.016716 0.120972 0.208931, 0.006325 0.119263 0.208871, 0.02903 0.114899 0.208721, 0.051064 0.107941 0.208481, + 0.072159 0.098495 0.208153, 0.072159 0.098495 0.237, 0.071587 0.097458 0.206322, 0.071877 0.098007 0.206764, + 0.072083 0.098373 0.207405, 0.072159 0.098495 0.208153, 0.073822 0.097412 0.208122, 0.072159 0.098495 0.208153, + 0.073822 0.097412 0.237, 0.072159 0.098495 0.237, 0.075119 0.095932 0.237762, 0.074783 0.095657 0.238411, + 0.074287 0.095245 0.238846, 0.073692 0.094742 0.238998, 0.072563 0.095856 0.238998, 0.071236 0.096725 0.238998, + 0.075119 -0.095932 0.237762, 0.074783 -0.095657 0.238411, 0.074287 -0.095245 0.238846, 0.073692 -0.094742 0.238998, + 0.081482 -0.084534 0.238998, 0.088356 -0.073669 0.238998, 0.094265 -0.062271 0.238998, 0.099159 -0.050385 0.238998, + 0.103004 -0.038116 0.238998, 0.105774 -0.025574 0.238998, 0.107442 -0.012833 0.238998, 0.108 0 0.238998, + 0.107442 0.012833 0.238998, 0.105774 0.025574 0.238998, 0.103004 0.038116 0.238998, 0.099159 0.050385 0.238998, + 0.094265 0.062271 0.238998, 0.088356 0.073669 0.238998, 0.081482 0.084534 0.238998, 0.073692 0.094742 0.238998, + 0.075233 -0.096024 0.237, 0.073822 -0.097412 0.237, 0.072159 -0.098495 0.237, 0.07209 -0.098373 0.237762, + 0.071892 -0.097977 0.238411, 0.071587 -0.097412 0.238846, 0.071236 -0.096725 0.238998, 0.072563 -0.095856 0.238998, + 0.073692 -0.094742 0.238998, 0.075233 -0.096024 0.208084, 0.073822 -0.097412 0.208122, 0.072159 -0.098495 0.208153, + 0.072159 -0.098495 0.237, 0.071587 -0.097458 0.206322, 0.071877 -0.098007 0.206764, 0.072083 -0.098373 0.207405, + 0.072159 -0.098495 0.208153, -0.084877 -0.110184 0.208557, -0.062622 -0.116409 0.208771, -0.03981 -0.12001 0.208897, + -0.016716 -0.120972 0.208931, 0.006332 -0.119263 0.208871, 0.029022 -0.114899 0.208721, 0.051064 -0.107941 0.208481, + 0.072159 -0.098495 0.208153, -0.084885 -0.110184 0.237, -0.06263 -0.116409 0.237, -0.039803 -0.12001 0.237, + -0.016716 -0.120972 0.237, 0.006325 -0.119263 0.237, 0.02903 -0.114899 0.237, 0.051071 -0.107941 0.237, + 0.072159 -0.098495 0.237, -0.10627 -0.10144 0.237, -0.106239 -0.101273 0.23777, -0.106133 -0.100845 0.238426, + -0.10598 -0.100189 0.238846, -0.105812 -0.099442 0.238998, -0.084602 -0.10817 0.238998, -0.062523 -0.11438 0.238998, + -0.039879 -0.117996 0.238998, -0.01696 -0.118973 0.239, 0.005905 -0.117294 0.239, 0.028427 -0.112991 0.239, + 0.050308 -0.106094 0.238998, 0.071236 -0.096725 0.238998, -0.199997 -0.098007 0.238998, -0.152908 -0.098831 0.238998, + -0.105812 -0.099442 0.238998, 0 -0.100006 0.239, 0.019508 -0.098083 0.239, 0.038269 -0.092392 0.238998, + 0.055557 -0.083145 0.238998, 0.070709 -0.070709 0.238998, 0.083145 -0.055557 0.238998, 0.092388 -0.038269 0.238998, + 0.098078 -0.019516 0.238998, 0.1 0 0.238998, 0.098078 0.019516 0.238998, 0.092388 0.038269 0.238998, + 0.083145 0.055557 0.238998, 0.070709 0.070709 0.238998, 0.055557 0.083145 0.238998, 0.038269 0.092392 0.238998, + 0.019508 0.098083 0.239, 0 0.100006 0.239, -0.019508 0.098083 0.239, -0.038269 0.092392 0.238998, -0.055557 0.083145 0.238998, + -0.070709 0.070709 0.238998, -0.083145 0.055557 0.238998, -0.092388 0.038269 0.238998, -0.098078 0.019516 0.238998, + -0.1 0 0.238998, -0.098078 -0.019516 0.238998, -0.092388 -0.038269 0.238998, -0.083145 -0.055557 0.238998, + -0.070709 -0.070709 0.238998, -0.055557 -0.083145 0.238998, -0.038269 -0.092392 0.238998, -0.019508 -0.098083 0.239, + 0 -0.100006 0.255, 0.019508 -0.098083 0.254999, 0.038269 -0.092392 0.255001, 0.055557 -0.083145 0.255001, + 0.070709 -0.070709 0.254997, 0.083145 -0.055557 0.254997, 0.092388 -0.038269 0.254997, 0.098078 -0.019516 0.254997, + 0.1 0 0.254997, 0.098078 0.019516 0.254997, 0.092388 0.038269 0.254997, 0.083145 0.055557 0.254997, + 0.070709 0.070709 0.254997, 0.055557 0.083145 0.255001, 0.038269 0.092392 0.255001, 0.019508 0.098083 0.254999, + 0 0.100006 0.255, -0.019508 0.098083 0.254999, -0.038269 0.092392 0.255001, -0.055557 0.083145 0.255001, + -0.070709 0.070709 0.254997, -0.083145 0.055557 0.254997, -0.092388 0.038269 0.254997, -0.098078 0.019516 0.254997, + -0.1 0 0.254997, -0.098078 -0.019516 0.254997, -0.092388 -0.038269 0.254997, -0.083145 -0.055557 0.254997, + -0.070709 -0.070709 0.254997, -0.055557 -0.083145 0.255001, -0.038269 -0.092392 0.255001, -0.019508 -0.098083 0.254999, + 0 -0.100006 0.255, 0 -0.078506 0.255, 0.015312 -0.076996 0.255, 0.030037 -0.072525 0.254999, 0.04361 -0.065277 0.255001, + 0.055508 -0.055511 0.255001, 0.065269 -0.04361 0.254997, 0.072525 -0.030045 0.254997, 0.076991 -0.01532 0.254997, + 0.0785 0 0.254997, 0.076992 0.01532 0.254997, 0.072525 0.030045 0.254997, 0.065269 0.04361 0.254997, + 0.055508 0.055511 0.255001, 0.04361 0.065277 0.255001, 0.030037 0.072525 0.254999, 0.015312 0.076996 0.255, 0 0.078506 0.255, + -0.015312 0.076996 0.255, -0.030037 0.072525 0.254999, -0.04361 0.065277 0.255001, -0.055508 0.055511 0.255001, + -0.065269 0.04361 0.254997, -0.072525 0.030045 0.254997, -0.076991 0.01532 0.254997, -0.0785 0 0.254997, + -0.076992 -0.01532 0.254997, -0.072525 -0.030045 0.254997, -0.065269 -0.04361 0.254997, -0.055508 -0.055511 0.255001, + -0.04361 -0.065277 0.255001, -0.030037 -0.072525 0.254999, -0.015312 -0.076996 0.255, 0 -0.078491 0.258, + 0.015312 -0.076996 0.258, 0.030037 -0.07251 0.257999, 0.04361 -0.065277 0.257999, 0.055508 -0.055511 0.257999, + 0.065269 -0.04361 0.258003, 0.072525 -0.030029 0.258003, 0.076991 -0.01532 0.258003, 0.0785 0 0.258003, + 0.076992 0.01532 0.258003, 0.072525 0.030029 0.258003, 0.065269 0.04361 0.258003, 0.055508 0.055511 0.257999, + 0.04361 0.065277 0.257999, 0.030037 0.07251 0.257999, 0.015312 0.076996 0.258, 0 0.078491 0.258, -0.015312 0.076996 0.258, + -0.030037 0.07251 0.257999, -0.04361 0.065277 0.257999, -0.055508 0.055511 0.257999, -0.065269 0.04361 0.258003, + -0.072525 0.030029 0.258003, -0.076991 0.01532 0.258003, -0.0785 0 0.258003, -0.076992 -0.01532 0.258003, + -0.072525 -0.030029 0.258003, -0.065269 -0.04361 0.258003, -0.055508 -0.055511 0.257999, -0.04361 -0.065277 0.257999, + -0.030037 -0.07251 0.257999, -0.015312 -0.076996 0.258, 0 -0.078491 0.258, -0.11483 0.096458 0.097832, + -0.11499 0.097549 0.097885, -0.115387 0.098579 0.097923, -0.115898 0.09938 0.098129, -0.11676 0.100227 0.098785, + -0.118103 0.100975 0.100067, -0.119888 0.10128 0.101929, -0.114281 0.099083 0.09977, -0.114853 0.098801 0.099335, + -0.115242 0.098625 0.098694, -0.115387 0.098579 0.097923, 0 0.044399 0.003, -0.090462 0.115 0.002998, 0 0.044399 0.003, + -0.113609 -0.099426 0.09993, -0.114326 -0.099983 0.100037, -0.115517 -0.100571 0.100357, -0.119888 -0.10128 0.101929, + -0.011879 -0.101822 0.101152, -0.022911 -0.101349 0.1005, -0.0401 -0.099991 0.099953, -0.115898 -0.09938 0.098129, + -0.116753 -0.100227 0.098785, -0.118103 -0.100975 0.100067, 0.10376 0.08432 0.010429, 0.105202 0.0836 0.010437, + 0.106468 0.082118 0.010437, 0.107002 0.08 0.010437, 0.106468 0.077883 0.010437, 0.105202 0.0764 0.010437, + 0.10376 0.07568 0.010429, 0.101242 0.07568 0.010437, 0.0998 0.0764 0.010437, 0.098526 0.077883 0.010437, 0.098 0.08 0.010437, + 0.098526 0.082118 0.010437, 0.0998 0.0836 0.010437, 0.101242 0.08432 0.010437, -0.101242 0.08432 0.010429, + -0.0998 0.0836 0.010437, -0.098526 0.082118 0.010437, -0.098 0.08 0.010437, -0.098526 0.077883 0.010437, + -0.0998 0.0764 0.010437, -0.101242 0.07568 0.010429, -0.10376 0.07568 0.010437, -0.105202 0.0764 0.010429, + -0.106468 0.077883 0.010445, -0.107002 0.08 0.010437, -0.106468 0.082118 0.010445, -0.105202 0.0836 0.010429, + -0.10376 0.08432 0.010437, 0.086349 -0.066711 0.113274, 0.094837 -0.045799 0.113274, 0.100176 -0.023323 0.113274, + 0.102 0 0.113274, 0.100176 0.023323 0.113274, 0.094837 0.045799 0.113274, 0.086349 0.066711 0.113274, + 0.071938 0.088501 0.113319, 0.073196 0.087662 0.113319, 0.074318 0.086639 0.113319, 0.082092 0.085007 0.205887, + 0.082649 0.085373 0.206345, 0.083015 0.085602 0.207031, 0.089005 0.074081 0.205505, 0.0896 0.074402 0.205956, + 0.089981 0.0746 0.206642, 0.094948 0.062607 0.205101, 0.095562 0.062881 0.205559, 0.095966 0.063049 0.206238, + 0.099865 0.050659 0.204681, 0.100502 0.050873 0.205139, 0.100922 0.05101 0.205818, 0.103729 0.03833 0.204254, + 0.104385 0.038498 0.204704, 0.104816 0.038589 0.205383, 0.106508 0.025711 0.203812, 0.107176 0.025818 0.204254, + 0.107615 0.025864 0.204941, 0.108181 0.012909 0.203377, 0.108856 0.012939 0.203812, 0.109301 0.012955 0.204491, + 0.082642 -0.086365 0.220886, 0.089401 -0.075867 0.220886, 0.09539 -0.064575 0.220886, 0.100479 -0.052582 0.220886, + 0.104568 -0.039993 0.220886, 0.107563 -0.026932 0.220886, 0.109386 -0.01355 0.220886, 0.11 0 0.220886, + 0.109386 0.01355 0.220886, 0.107563 0.026932 0.220886, 0.104568 0.039993 0.220886, 0.100479 0.052582 0.220886, + 0.09539 0.064575 0.220886, 0.089401 0.075867 0.220886, 0.082642 0.086365 0.220886, 0.108181 -0.012909 0.203377, + 0.108857 -0.012939 0.203812, 0.109301 -0.012955 0.204491, 0.106508 -0.025711 0.203812, 0.107176 -0.025818 0.204254, + 0.107615 -0.025864 0.204941, 0.103729 -0.03833 0.204254, 0.104385 -0.038498 0.204704, 0.104816 -0.038589 0.205383, + 0.099865 -0.050659 0.204681, 0.100502 -0.050873 0.205139, 0.100922 -0.05101 0.205818, 0.094948 -0.062607 0.205101, + 0.095562 -0.062881 0.205559, 0.095966 -0.063049 0.206238, 0.089005 -0.074081 0.205505, 0.0896 -0.074402 0.205956, + 0.089981 -0.0746 0.206642, 0.082092 -0.085007 0.205887, 0.082649 -0.085373 0.206345, 0.083015 -0.085602 0.207031, + 0.071938 -0.088501 0.113319, 0.073196 -0.087654 0.113319, 0.074318 -0.086639 0.113319, 0.10376 -0.075679 0.010429, + 0.105202 -0.076401 0.010437, 0.106468 -0.077883 0.010437, 0.107002 -0.08 0.010437, 0.106468 -0.082118 0.010437, + 0.105202 -0.0836 0.010437, 0.10376 -0.08432 0.010429, 0.101242 -0.08432 0.010437, 0.0998 -0.0836 0.010437, + 0.098526 -0.082118 0.010437, 0.098 -0.08 0.010437, 0.098526 -0.077883 0.010437, 0.0998 -0.076401 0.010437, + 0.101242 -0.075679 0.010437, -0.101242 -0.075679 0.010429, -0.0998 -0.076401 0.010437, -0.098526 -0.077883 0.010437, + -0.098 -0.08 0.010437, -0.098526 -0.082118 0.010437, -0.0998 -0.0836 0.010437, -0.101242 -0.08432 0.010429, + -0.10376 -0.08432 0.010437, -0.105202 -0.0836 0.010429, -0.106468 -0.082118 0.010445, -0.107002 -0.08 0.010437, + -0.106468 -0.077883 0.010445, -0.105202 -0.076401 0.010429, -0.10376 -0.075679 0.010437, 0.053474 -0.094719 0.113396, + 0.035866 -0.098755 0.113396, 0.017967 -0.101189 0.113396, -0.018921 -0.10112 0.061205, -0.037766 -0.098473 0.061203, + -0.056274 -0.094082 0.061203, -0.048805 -0.097328 0.099724, -0.048645 -0.096695 0.099277, -0.048538 -0.096283 0.09861, + -0.057549 -0.094986 0.099644, -0.057365 -0.094353 0.099194, -0.057236 -0.093948 0.098526, -0.066185 -0.092255 0.099548, + -0.065971 -0.091637 0.099098, -0.065826 -0.091232 0.098427, -0.113754 -0.097809 0.099739, -0.11441 -0.097649 0.099297, + -0.114845 -0.097557 0.09861, -0.113152 -0.084618 0.099274, -0.113831 -0.08461 0.098831, -0.114273 -0.084618 0.09816, + -0.110405 -0.069473 0.09874, -0.110664 -0.068863 0.098289, -0.110825 -0.068474 0.097588, -0.111603 -0.070251 0.098778, + -0.112076 -0.069778 0.09832, -0.112381 -0.069481 0.097626, -0.112419 -0.071419 0.098816, -0.113037 -0.071159 0.098358, + -0.113449 -0.070999 0.097679, -0.10128 -0.069214 0.09874, -0.10128 -0.068558 0.098297, -0.10128 -0.068138 0.097626, + -0.091019 -0.070206 0.098778, -0.090561 -0.069733 0.09832, -0.090256 -0.069427 0.097649, -0.091774 -0.069664 0.098755, + -0.091454 -0.069092 0.098305, -0.09124 -0.068718 0.097626, -0.092636 -0.069321 0.098747, -0.092468 -0.068687 0.098289, + -0.092361 -0.068275 0.09761, -0.085037 -0.078682 0.099075, -0.084496 -0.078293 0.098625, -0.084137 -0.078049 0.097954, + -0.077087 -0.08786 0.099396, -0.076698 -0.087326 0.098946, -0.076439 -0.086983 0.098274, -0.076347 -0.086876 0.059181, + -0.084015 -0.07798 0.059135, -0.090141 -0.069355 0.058937, -0.091164 -0.068611 0.058937, -0.092346 -0.06815 0.058937, + -0.110809 -0.068336 0.058952, -0.11248 -0.069405 0.058952, -0.113602 -0.071033 0.058952, -0.050003 -0.101868 0.128738, + -0.100006 -0.101501 0.128746, -0.199944 -0.099014 0.212585, -0.199776 -0.099014 0.212128, -0.199501 -0.099014 0.211731, + -0.140053 -0.099503 0.169434, -0.140228 -0.099503 0.169876, -0.140503 -0.099503 0.170288, -0.13929 0.108681 0.010178, + -0.13707 0.112071 0.010178, -0.133675 0.114298 0.010178, 0.102379 0.114382 0.010155, 0.105598 0.112436 0.010155, + 0.10788 0.109437 0.010155, 0.102386 -0.114382 0.010155, 0.105598 -0.112436 0.010155, 0.10788 -0.109437 0.010155, + -0.133682 -0.114298 0.010178, -0.13707 -0.112071 0.010178, -0.139297 -0.108681 0.010178, -0.113152 0.084618 0.099274, + -0.113831 0.08461 0.098831, -0.114273 0.084618 0.09816, -0.066483 0.091919 0.099533, -0.066261 0.091301 0.099091, + -0.066116 0.090897 0.098419, -0.057625 0.094788 0.099636, -0.057434 0.094162 0.099186, -0.057304 0.093758 0.098518, + -0.048645 0.097252 0.099724, -0.048477 0.096619 0.099274, -0.04837 0.096199 0.098606, -0.07756 0.087349 0.09938, + -0.077164 0.086815 0.09893, -0.076904 0.086472 0.098259, -0.085236 0.078415 0.09906, -0.084694 0.078026 0.098618, + -0.084335 0.077782 0.097946, -0.092636 0.069321 0.098747, -0.092468 0.068687 0.098289, -0.092361 0.068275 0.09761, + -0.091774 0.069664 0.098755, -0.091454 0.069092 0.098305, -0.09124 0.068718 0.097626, -0.091019 0.070206 0.098778, + -0.090561 0.069733 0.09832, -0.090256 0.069427 0.097649, -0.10128 0.069214 0.09874, -0.10128 0.068558 0.098297, + -0.10128 0.068138 0.097626, -0.112419 0.071419 0.098816, -0.113037 0.071159 0.098358, -0.113449 0.070999 0.097679, + -0.111603 0.070251 0.098778, -0.112076 0.069778 0.09832, -0.112381 0.069481 0.097626, -0.110405 0.069473 0.09874, + -0.110664 0.068863 0.098289, -0.110825 0.068474 0.097588, -0.113602 0.071033 0.058952, -0.11248 0.069405 0.058952, + -0.110809 0.068336 0.058952, -0.092346 0.06815 0.058937, -0.091164 0.068611 0.058937, -0.090141 0.069355 0.058937, + -0.084213 0.077717 0.059128, -0.076813 0.086372 0.059174, 0.016548 0.101311 0.113396, 0.035095 0.0989 0.113396, + 0.053177 0.094803 0.113396, -0.029678 0.100304 0.09973, -0.029572 0.099915 0.099047, -0.019768 0.101135 0.100023, + -0.059937 0.100609 0.100109, -0.059937 0.101257 0.100559, -0.059944 0.101685 0.101227, -0.100006 0.101501 0.128746, + -0.050003 0.101868 0.128738, -0.199944 0.099014 0.212585, -0.199776 0.099014 0.212128, -0.199501 0.099014 0.211731, + -0.199249 -0.096741 0.236862, -0.199249 -0.097412 0.23642, -0.199249 -0.097855 0.235733, -0.138596 -0.095749 0.169785, + -0.138893 -0.095749 0.170578, -0.139374 -0.095749 0.17128, -0.139252 -0.097859 0.012268, -0.139252 -0.097414 0.011581, + -0.139252 -0.096736 0.011139, -0.139252 0.096736 0.011139, -0.139252 0.097414 0.011581, -0.139252 0.097859 0.012268, + -0.199249 0.097855 0.235733, -0.199249 0.097412 0.23642, -0.199249 0.096741 0.236862, -0.138596 0.095749 0.169785, + -0.138893 0.095749 0.170578, -0.139374 0.095749 0.17128, -0.140053 0.099503 0.169434, -0.140228 0.099503 0.169876, + -0.140503 0.099503 0.170288, -0.152916 0.099564 0.238861, -0.152931 0.10025 0.238419, -0.152924 0.100693 0.237732, + 0.051476 0.107635 0.237736, 0.051323 0.107224 0.238415, 0.051071 0.106598 0.238861, 0.029495 0.114639 0.237736, + 0.029388 0.114197 0.238415, 0.029221 0.113541 0.238859, 0.006546 0.119095 0.237736, 0.006485 0.118652 0.238414, + 0.006393 0.117981 0.23886, -0.016937 0.120834 0.237736, -0.016953 0.120392 0.238415, -0.016945 0.11972 0.238859, + -0.040459 0.119812 0.237736, -0.040413 0.11937 0.238415, -0.040344 0.118698 0.238861, -0.063538 0.116058 0.237736, + -0.063438 0.115631 0.238415, -0.063301 0.11496 0.238861, -0.085724 0.109741 0.23774, -0.085587 0.109329 0.238411, + -0.08535 0.108688 0.238861, 0.051567 0.107758 0.222576, 0.029633 0.114746 0.222576, 0.006721 0.119202 0.222577, + -0.016716 0.120972 0.222576, -0.040184 0.11998 0.222576, -0.06324 0.116272 0.222576, -0.085396 0.110001 0.22258, + -0.08448 0.109039 0.206718, -0.084686 0.10965 0.207169, -0.084824 0.110062 0.20784, -0.062363 0.115219 0.206932, + -0.0625 0.11586 0.207386, -0.062599 0.116272 0.208054, -0.039673 0.118805 0.207058, -0.039742 0.119461 0.207512, + -0.039787 0.119888 0.208179, -0.016731 0.119766 0.207092, -0.016724 0.120407 0.207544, -0.016716 0.120834 0.208214, + 0.006165 0.118057 0.207033, 0.006256 0.118698 0.207484, 0.006317 0.119125 0.208154, 0.028717 0.113724 0.206881, + 0.028877 0.114349 0.207333, 0.028992 0.114777 0.208002, 0.050613 0.106812 0.206642, 0.05085 0.107422 0.207088, + 0.05101 0.107819 0.20776, 0.073021 0.096497 0.206284, 0.073441 0.097 0.206734, 0.073723 0.097321 0.207405, + 0.073822 0.097412 0.222542, 0.07373 0.097305 0.23774, 0.073448 0.096954 0.238411, 0.073029 0.096436 0.238861, + 0.08252 -0.086288 0.23774, 0.082161 -0.086029 0.238411, 0.081604 -0.085648 0.238861, 0.089279 -0.07579 0.23774, + 0.08889 -0.075577 0.238411, 0.08831 -0.075226 0.238861, 0.095261 -0.064514 0.23774, 0.094856 -0.064331 0.238411, + 0.094246 -0.064041 0.238861, 0.100349 -0.052536 0.23774, 0.099934 -0.052383 0.238411, 0.099297 -0.052139 0.238861, + 0.104435 -0.039963 0.23774, 0.104004 -0.039841 0.238411, 0.103352 -0.039658 0.238861, 0.107424 -0.026901 0.23774, + 0.106985 -0.026825 0.238411, 0.106319 -0.026703 0.238861, 0.109247 -0.013535 0.237747, 0.108804 -0.013489 0.238411, + 0.108129 -0.013428 0.238861, 0.10986 0 0.23774, 0.109414 0 0.238411, 0.108736 0 0.238861, 0.109247 0.013535 0.237747, + 0.108804 0.013489 0.238411, 0.108129 0.013428 0.238861, 0.107424 0.026901 0.23774, 0.106985 0.026825 0.238411, + 0.106319 0.026703 0.238861, 0.104435 0.039963 0.23774, 0.104004 0.039841 0.238411, 0.103352 0.039658 0.238861, + 0.100349 0.052536 0.23774, 0.099934 0.052383 0.238411, 0.099297 0.052139 0.238861, 0.095261 0.064514 0.23774, + 0.094856 0.064331 0.238411, 0.094246 0.064041 0.238861, 0.089279 0.07579 0.23774, 0.08889 0.075577 0.238411, + 0.08831 0.075226 0.238861, 0.08252 0.086288 0.23774, 0.082161 0.086029 0.238411, 0.081604 0.085648 0.238861, + 0.073029 -0.096436 0.238861, 0.073448 -0.096954 0.238411, 0.07373 -0.097305 0.23774, 0.073822 -0.097412 0.222542, + 0.073021 -0.096497 0.206284, 0.073441 -0.097 0.206734, 0.073723 -0.097321 0.207405, 0.050613 -0.106812 0.206642, + 0.05085 -0.107422 0.207092, 0.05101 -0.107819 0.20776, 0.028725 -0.113724 0.206881, 0.028877 -0.114365 0.207333, + 0.028999 -0.114777 0.208002, 0.006165 -0.118057 0.207033, 0.006256 -0.118698 0.207484, 0.00631 -0.119125 0.208154, + -0.016739 -0.119766 0.207092, -0.016716 -0.120407 0.207544, -0.016716 -0.120834 0.208214, -0.039673 -0.118805 0.207058, + -0.039742 -0.119461 0.207512, -0.039795 -0.119888 0.208179, -0.062355 -0.115219 0.206932, -0.0625 -0.11586 0.207386, + -0.062592 -0.116272 0.208054, -0.084473 -0.109039 0.206718, -0.084694 -0.10965 0.207169, -0.084831 -0.110062 0.20784, + -0.085396 -0.110001 0.22258, -0.06324 -0.116272 0.222576, -0.040184 -0.11998 0.222576, -0.016716 -0.120972 0.222576, + 0.006714 -0.119202 0.222577, 0.02964 -0.114746 0.222576, 0.051575 -0.107758 0.222576, -0.085724 -0.109741 0.23774, + -0.085587 -0.109329 0.238411, -0.08535 -0.108688 0.238861, -0.063538 -0.116058 0.237736, -0.063438 -0.115631 0.238415, + -0.063301 -0.11496 0.238861, -0.040459 -0.119812 0.237736, -0.040421 -0.11937 0.238415, -0.040344 -0.118698 0.238861, + -0.01693 -0.120834 0.237736, -0.016945 -0.120392 0.238415, -0.016953 -0.11972 0.238859, 0.006546 -0.119095 0.237736, + 0.006485 -0.118652 0.238414, 0.006393 -0.117981 0.23886, 0.029495 -0.114639 0.237736, 0.029381 -0.114197 0.238415, + 0.029221 -0.113541 0.238859, 0.051483 -0.107635 0.237736, 0.051315 -0.107224 0.238415, 0.051064 -0.106598 0.238861, + -0.152916 -0.099564 0.238861, -0.152931 -0.10025 0.238419, -0.152931 -0.100693 0.237732, 0.013275 -0.099121 0.247, + 0.028 -0.095993 0.247, 0.043823 -0.08989 0.247002, 0.059998 -0.080002 0.247002, 0.067871 -0.073441 0.247002, + 0.07534 -0.06575 0.247002, 0.082207 -0.056946 0.247002, 0.088234 -0.047058 0.247002, 0.093208 -0.036224 0.247002, + 0.096924 -0.024612 0.247002, 0.099222 -0.012451 0.247002, 0.1 0 0.247002, 0.099222 0.012451 0.247002, + 0.096924 0.024612 0.247002, 0.093208 0.036224 0.247002, 0.088234 0.047058 0.247002, 0.082207 0.056946 0.247002, + 0.07534 0.06575 0.247002, 0.067871 0.073441 0.247002, 0.059998 0.080002 0.247002, 0.043823 0.08989 0.247002, + 0.028 0.095993 0.247, 0.013275 0.099121 0.247, -0.013275 0.099121 0.247, -0.028 0.095993 0.247, -0.043823 0.08989 0.247002, + -0.059998 0.080002 0.247002, -0.067871 0.073441 0.247002, -0.07534 0.06575 0.247002, -0.082207 0.056946 0.247002, + -0.088234 0.047058 0.247002, -0.093208 0.036224 0.247002, -0.096924 0.024612 0.247002, -0.099222 0.012451 0.247002, + -0.1 0 0.247002, -0.099222 -0.012451 0.247002, -0.096924 -0.024612 0.247002, -0.093208 -0.036224 0.247002, + -0.088234 -0.047058 0.247002, -0.082207 -0.056946 0.247002, -0.07534 -0.06575 0.247002, -0.067871 -0.073441 0.247002, + -0.059998 -0.080002 0.247002, -0.043823 -0.08989 0.247002, -0.028 -0.095993 0.247, -0.013275 -0.099121 0.247, + 0.010422 -0.07782 0.2565, 0.02198 -0.075348 0.2565, 0.034401 -0.070557 0.2565, 0.0471 -0.062805 0.2565, + 0.059143 -0.051605 0.2565, 0.064533 -0.044708 0.2565, 0.069263 -0.036926 0.2565, 0.073168 -0.028442 0.2565, + 0.076084 -0.019318 0.2565, 0.077889 -0.009766 0.2565, 0.0785 0 0.2565, 0.077889 0.009766 0.2565, 0.076084 0.019318 0.2565, + 0.073168 0.028442 0.2565, 0.069263 0.036926 0.2565, 0.064533 0.044708 0.2565, 0.059143 0.051605 0.2565, + 0.0471 0.062805 0.2565, 0.034401 0.070557 0.2565, 0.02198 0.075348 0.2565, 0.010422 0.07782 0.2565, -0.010422 0.07782 0.2565, + -0.02198 0.075348 0.2565, -0.034401 0.070557 0.2565, -0.0471 0.062805 0.2565, -0.059143 0.051605 0.2565, + -0.064533 0.044708 0.2565, -0.069263 0.036926 0.2565, -0.073168 0.028442 0.2565, -0.076084 0.019318 0.2565, + -0.077889 0.009766 0.2565, -0.0785 0 0.2565, -0.077889 -0.009766 0.2565, -0.076084 -0.019318 0.2565, + -0.073168 -0.028442 0.2565, -0.069263 -0.036926 0.2565, -0.064533 -0.044708 0.2565, -0.059143 -0.051605 0.2565, + -0.0471 -0.062805 0.2565, -0.034401 -0.070557 0.2565, -0.02198 -0.075348 0.2565, -0.010422 -0.07782 0.2565, + -0.115234 0.098259 0.061203, -0.116364 0.099899 0.061203, -0.118065 0.10096 0.061203, -0.113754 0.097809 0.099739, + -0.11441 0.097649 0.099297, -0.114845 0.097557 0.09861, -0.118637 0.101143 0.1007, -0.116997 0.100655 0.100174, + -0.117447 0.100677 0.09951, -0.115479 0.09996 0.099831, -0.115982 0.099785 0.099236, -0.116325 0.099854 0.098511, + -0.059937 -0.100609 0.100109, -0.059944 -0.101257 0.100559, -0.059944 -0.101685 0.101227, -0.115479 -0.09996 0.099831, + -0.115982 -0.099785 0.099236, -0.116325 -0.099854 0.098511, -0.116997 -0.100655 0.100174, -0.117455 -0.100677 0.09951, + -0.118645 -0.101143 0.1007, -0.115234 -0.098259 0.061203, -0.116371 -0.099899 0.061203, -0.118065 -0.10096 0.061203, + -0.019974 -0.101135 0.100023, -0.029984 -0.100304 0.09973, -0.029877 -0.099907 0.099047, -0.092361 -0.068306 0.096909, + -0.089912 -0.101547 0.101936, -0.139999 -0.101021 0.094727, -0.139999 0.098 0.090973, -0.139999 0.098 0.051987, + -0.139999 0.098 0.032501, -0.139999 0.098 0.022751, -0.139999 -0.098 0.090973, -0.139999 -0.098 0.051987, + -0.139999 -0.098 0.032501, -0.139999 -0.098 0.022751, -0.139999 -0.101021 0.094727, -0.139999 -0.101021 0.057602, + -0.139999 -0.101021 0.039047, -0.139999 -0.101021 0.02977, -0.139999 -0.101021 0.025131, 0.112968 0.052511 0.014999, + 0.112968 -0.052511 0.014999, -0.090263 0.06945 0.096931, -0.01123 0.101364 0.100501, -0.005615 0.101692 0.101228, + -0.011345 0.101677 0.101228, -0.02713 0.100098 0.098642, 0 0.101997 0.101954, -0.01123 0.101364 0.1005, + -0.016846 0.101051 0.099773, -0.019653 0.100891 0.099411, -0.005615 0.101677 0.101227, -0.008423 0.101524 0.100864, + -0.118637 0.101181 0.101463, -0.119888 0.10128 0.101929, -0.139999 0.101021 0.094727, -0.089912 0.101547 0.101936, + -0.169243 0.098007 0.192307, -0.169998 0.098007 0.19101, -0.138496 0.093498 0.092224, -0.138496 -0.093498 0.092224, + -0.10627 0.10144 0.208252, -0.106209 -0.10144 0.208031, -0.106239 -0.10144 0.208145, -0.106255 -0.10144 0.208206, + -0.10627 -0.10144 0.208229, -0.10627 -0.10144 0.208244, -0.106277 -0.10144 0.208244, -0.10627 -0.10144 0.208252, + -0.105896 -0.099823 0.23893, -0.10585 -0.099625 0.23896, -0.105827 -0.099533 0.238983, -0.10582 -0.099487 0.238991, + -0.105812 -0.099457 0.238998, -0.105812 -0.099457 0.239006, -0.105812 -0.099442 0.238991, -0.105812 -0.099442 0.239006, + -0.105812 -0.099442 0.238991, -0.105812 -0.099442 0.238991, -0.118996 0.101128 0.101006, -0.118546 0.101044 0.10054, + -0.118774 0.101089 0.100769, -0.117432 0.100601 0.099426, -0.117767 0.100792 0.099747, -0.116325 0.0998 0.098465, + -0.005936 -0.101913 0.101553, 0 -0.102005 0.101954, -0.116325 -0.0998 0.098465, -0.117439 -0.100601 0.099426, + -0.117767 -0.100792 0.099747, -0.118996 -0.10112 0.101006, -0.118546 -0.101051 0.10054, -0.118774 -0.101089 0.100769, + -0.005882 -0.10183 0.101152, -0.008827 -0.101746 0.100751, -0.017235 -0.101196 0.099699, -0.019958 -0.100967 0.099373, + -0.031204 -0.099419 0.098501, -0.026947 -0.100075 0.098774, -0.029076 -0.099747 0.098637, 0 -0.10199 0.101954, + 0.102501 0.0845 0, 0.104225 0.084157 0, 0.105682 0.083182 0, 0.106659 0.081722 0, 0.106659 0.078278 0, 0.107002 0.08 0, + 0.105682 0.076818 0, 0.104225 0.075843 0, 0.102501 0.0755 0, 0.102501 0.0755 0.020866, 0.100777 0.075843 0, + 0.099319 0.076818 0, 0.098343 0.078278 0, 0.098343 0.081722 0, 0.098 0.08 0, 0.099319 0.083182 0, 0.100777 0.084157 0, + 0.102501 0.0845 0, 0.105682 0.076818 0.020859, 0.104156 0.075815 0.020866, 0.102501 0.0755 0.020866, + 0.106682 0.078344 0.020844, 0.107002 0.08 0.020828, 0.100845 0.075815 0.020866, 0.099319 0.076818 0.020859, + 0.098312 0.078344 0.020844, 0.098 0.08 0.020828, 0.098312 0.081656 0.020813, 0.106682 0.081656 0.020813, + 0.105682 0.083181 0.020805, 0.104156 0.084185 0.02079, 0.102501 0.084499 0.02079, 0.100845 0.084185 0.02079, + 0.099319 0.083181 0.020805, -0.100845 0.084185 0.02079, -0.102501 0.0845 0, -0.098312 0.081656 0.020813, + -0.099319 0.083181 0.020805, -0.100777 0.084157 0, -0.099319 0.083182 0, -0.098343 0.081722 0, -0.098 0.08 0.020828, + -0.099319 0.076818 0.020859, -0.098312 0.078344 0.020844, -0.098343 0.078278 0, -0.102501 0.0755 0.020866, + -0.100845 0.075815 0.020866, -0.098 0.08 0, -0.099319 0.076818 0, -0.100777 0.075843 0, -0.102501 0.0755 0, + -0.104156 0.075815 0.020866, -0.102501 0.0755 0.020866, -0.105682 0.076818 0.020866, -0.106682 0.078344 0.020844, + -0.104225 0.075843 0, -0.105682 0.076818 0, -0.106659 0.078278 0, -0.107002 0.08 0.020828, -0.105682 0.083181 0.020805, + -0.106682 0.081656 0.020813, -0.106659 0.081722 0, -0.104156 0.084185 0.02079, -0.102501 0.084499 0.02079, -0.107002 0.08 0, + -0.105682 0.083182 0, -0.104225 0.084157 0, -0.102501 0.0845 0, 0.087189 0.065001 0.020958, 0.081627 0.075474 0.020866, + 0.07196 0.08849 0.020752, 0.073196 0.087662 0.02076, 0.075264 0.08548 0.205757, 0.075264 0.085476 0.020782, + 0.100241 0.022903 0.203568, 0.095161 0.044785 0.204338, 0.086876 0.065643 0.20507, 0.102 0 0.202766, + 0.074303 0.086655 0.205803, 0.073196 0.087662 0.205833, 0.075264 0.08548 0.205757, 0.08149 0.084595 0.205727, + 0.094276 0.062317 0.204948, 0.088364 0.07373 0.205353, 0.099171 0.05043 0.204536, 0.103016 0.038162 0.204109, + 0.105782 0.025604 0.203667, 0.107448 0.012848 0.203224, 0.108 0 0.202774, 0.107742 0.025925 0.205666, + 0.104939 0.038635 0.2061, 0.109434 0.013016 0.205223, 0.10104 0.051071 0.206528, 0.096077 0.06311 0.206947, + 0.083122 0.085678 0.207726, 0.090096 0.074677 0.207352, 0.108766 0 0.202927, 0.109414 0 0.203369, 0.109848 0 0.20401, + 0.11 0 0.204773, 0.107742 -0.025925 0.205666, 0.109433 -0.013016 0.205223, 0.104939 -0.038635 0.2061, + 0.10104 -0.051071 0.206528, 0.090096 -0.074677 0.207352, 0.083122 -0.085678 0.207726, 0.096077 -0.06311 0.206947, + 0.073692 -0.094818 0.206085, 0.075264 -0.08548 0.205757, 0.08149 -0.084595 0.205727, 0.086876 -0.065643 0.20507, + 0.088364 -0.07373 0.205353, 0.099171 -0.05043 0.204536, 0.094276 -0.062317 0.204948, 0.103016 -0.038162 0.204109, + 0.095161 -0.044785 0.204338, 0.100241 -0.022903 0.203568, 0.102 0 0.202766, 0.107448 -0.012848 0.203224, + 0.105782 -0.025604 0.203667, 0.108 0 0.202774, 0.07196 -0.088486 0.205864, 0.073196 -0.087662 0.205833, + 0.075264 -0.085476 0.020782, 0.075264 -0.08548 0.205757, 0.073196 -0.087662 0.02076, 0.075264 -0.085476 0.020782, + 0.074303 -0.08666 0.020775, 0.087189 -0.065001 0.020958, 0.081627 -0.075474 0.020866, 0.104156 -0.075815 0.020866, + 0.102501 -0.0755 0, 0.105682 -0.076818 0.020859, 0.106682 -0.078344 0.020844, 0.104225 -0.075843 0, 0.105682 -0.076818 0, + 0.106659 -0.078278 0, 0.107002 -0.08 0.020828, 0.105682 -0.083181 0.020805, 0.106682 -0.081656 0.020813, 0.106659 -0.081722 0, + 0.104156 -0.084185 0.02079, 0.102501 -0.084499 0.02079, 0.107002 -0.08 0, 0.105682 -0.083182 0, 0.104225 -0.084157 0, + 0.102501 -0.0845 0, 0.100845 -0.084185 0.02079, 0.102501 -0.084499 0.02079, 0.098312 -0.081656 0.020813, + 0.099319 -0.083181 0.020805, 0.100777 -0.084157 0, 0.099319 -0.083182 0, 0.098343 -0.081722 0, 0.098 -0.08 0.020828, + 0.099319 -0.076818 0.020859, 0.098312 -0.078344 0.020844, 0.098343 -0.078278 0, 0.102501 -0.0755 0.020866, + 0.100845 -0.075815 0.020866, 0.098 -0.08 0, 0.099319 -0.076818 0, 0.100777 -0.075843 0, 0.102501 -0.0755 0, + -0.100845 -0.075815 0.020866, -0.102501 -0.0755 0, -0.099319 -0.076818 0.020859, -0.098312 -0.078344 0.020844, + -0.100777 -0.075843 0, -0.099319 -0.076818 0, -0.098343 -0.078278 0, -0.098 -0.08 0.020828, -0.099319 -0.083181 0.020805, + -0.098312 -0.081656 0.020813, -0.098343 -0.081722 0, -0.100845 -0.084185 0.02079, -0.102501 -0.084499 0.02079, -0.098 -0.08 0, + -0.099319 -0.083182 0, -0.100777 -0.084157 0, -0.102501 -0.0845 0, -0.104156 -0.084185 0.02079, -0.102501 -0.084499 0.02079, + -0.106682 -0.081656 0.020813, -0.105682 -0.083181 0.020805, -0.104225 -0.084157 0, -0.105682 -0.083182 0, + -0.106659 -0.081722 0, -0.107002 -0.08 0.020828, -0.105682 -0.076818 0.020866, -0.106682 -0.078344 0.020844, + -0.106659 -0.078278 0, -0.102501 -0.0755 0.020866, -0.104156 -0.075815 0.020866, -0.107002 -0.08 0, -0.105682 -0.076818 0, + -0.104225 -0.075843 0, -0.102501 -0.0755 0, 0.070572 -0.089142 0.205887, 0.061584 -0.092283 0.020721, + 0.053368 -0.094742 0.206081, 0.070572 -0.089134 0.020752, 0.052452 -0.094999 0.020699, 0.035866 -0.098755 0.206223, + 0.018082 -0.101181 0.206308, 0 -0.10199 0.100023, 0 -0.101999 0.020454, -0.063698 -0.091801 0.020725, + -0.074226 -0.088018 0.02076, -0.0485 -0.096153 0.097885, -0.05719 -0.093819 0.097805, -0.074226 -0.08802 0.097595, + -0.048973 -0.098022 0.099884, -0.057755 -0.095673 0.099804, -0.074951 -0.089813 0.099594, -0.112831 -0.096458 0.099831, + -0.113052 -0.097984 0.099892, -0.113609 -0.099426 0.09993, -0.112007 -0.072823 0.099007, -0.113594 -0.096436 0.099686, + -0.112831 -0.096458 0.099831, -0.114677 -0.096436 0.098602, -0.114243 -0.096428 0.099243, -0.109009 -0.069931 0.0989, + -0.11013 -0.070152 0.0989, -0.111092 -0.07077 0.09893, -0.111748 -0.071709 0.098976, -0.112007 -0.072823 0.099007, + -0.11277 -0.072807 0.098862, -0.113853 -0.072807 0.097771, -0.113419 -0.0728 0.098427, -0.093559 -0.069931 0.0989, + -0.109009 -0.069183 0.098732, -0.109009 -0.069931 0.0989, -0.109009 -0.068146 0.097664, -0.109009 -0.068558 0.098297, + -0.091034 -0.071304 0.098953, -0.091515 -0.070732 0.09893, -0.092125 -0.070297 0.098915, -0.093559 -0.069931 0.0989, + -0.093559 -0.069183 0.098732, -0.093559 -0.068558 0.098297, -0.093559 -0.068146 0.097656, -0.079643 -0.086502 0.09948, + -0.085617 -0.079109 0.09922, -0.090401 -0.070908 0.098785, -0.091034 -0.071304 0.098953, -0.089493 -0.070358 0.09771, + -0.089859 -0.070572 0.098351, -0.074951 -0.089813 0.099594, -0.077499 -0.08844 0.099548, -0.079071 -0.086014 0.099319, + -0.079643 -0.086502 0.09948, -0.074677 -0.089119 0.099426, -0.074448 -0.088539 0.098991, -0.074226 -0.08802 0.097595, + -0.074287 -0.08815 0.098351, -0.078262 -0.085342 0.098236, -0.07859 -0.085609 0.098877, -0.074226 -0.088018 0.02076, + -0.074226 -0.08802 0.097595, -0.076347 -0.086876 0.097549, -0.078133 -0.085262 0.020782, -0.078133 -0.085258 0.097481, + -0.076347 -0.086878 0.020767, -0.078133 -0.085262 0.020782, -0.078133 -0.085258 0.097481, -0.084015 -0.07798 0.097221, + -0.089355 -0.070297 0.096954, -0.089355 -0.070297 0.020912, -0.084015 -0.077982 0.020844, -0.090157 -0.069344 0.096931, + -0.089355 -0.070297 0.096954, -0.089355 -0.070297 0.020912, -0.090179 -0.069313 0.02092, -0.091164 -0.068611 0.020927, + -0.093559 -0.068001 0.020935, -0.091164 -0.068611 0.096916, -0.093559 -0.068001 0.096901, -0.109009 -0.068001 0.096901, + -0.109009 -0.068001 0.020927, -0.093559 -0.068001 0.020935, -0.111015 -0.06842 0.02092, -0.109009 -0.068001 0.020927, + -0.110878 -0.068367 0.096916, -0.109009 -0.068001 0.096901, -0.11248 -0.069405 0.096924, -0.114006 -0.072826 0.020889, + -0.11351 -0.070833 0.020912, -0.11248 -0.069403 0.02092, -0.113571 -0.070969 0.096977, -0.114006 -0.072823 0.097008, + -0.11483 -0.096458 0.097832, -0.114777 -0.094999 0.020699, -0.114006 -0.072826 0.020889, 0 -0.101999 0.020454, + 0.026459 -0.100243 0.020515, -0.01342 -0.101559 0.02047, -0.026711 -0.100243 0.020515, 0.039513 -0.098059 0.020592, + 0.109978 -0.094999 0.020699, 0.052452 -0.094999 0.020699, -0.052979 -0.094999 0.020699, -0.114777 -0.094999 0.020699, + 0 -0.102005 0.206336, -0.050789 -0.101868 0.206333, 0 -0.102005 0.101954, -0.129944 -0.101156 0.020477, + -0.139999 -0.101021 0.020493, -0.199944 -0.100006 0.212585, -0.199776 -0.100006 0.212128, -0.169998 -0.100555 0.19101, + -0.19915 -0.100021 0.211411, -0.19915 -0.098007 0.211411, -0.140854 -0.101013 0.170593, -0.140228 -0.101013 0.169876, + -0.139999 -0.101013 0.168961, -0.140495 -0.101013 0.170273, -0.19915 -0.098007 0.211411, -0.199997 -0.098007 0.213058, + -0.199776 -0.098007 0.212128, -0.199501 -0.098007 0.211731, -0.140854 -0.098007 0.170593, -0.140228 -0.098007 0.169876, + -0.14006 -0.098007 0.169434, -0.139999 -0.098007 0.168961, -0.139999 -0.105 0.020355, -0.139999 -0.101021 0.020493, + -0.139999 -0.101013 0.168961, -0.139999 0.105 0, -0.139236 0.108827 0, -0.13707 0.112071 0, -0.133827 0.114239 0, + -0.090462 0.115 0, -0.129997 0.115 0, 0.098923 0.115 0, 0.102493 0.114337 0, 0.105598 0.112437 0, 0.107819 0.10955 0, + 0.109978 0.094999 0.020699, 0.108856 0.106061 0, 0.108856 0.10606 0.020309, 0.111298 0.080009 0.020821, 0.111671 0.075169 0, + 0.113522 0.044204 0, 0.112389 -0.065001 0.020958, 0.111298 -0.080009 0.020821, 0.109978 -0.094999 0.020699, + 0.109436 -0.100533 0.020508, 0.108849 -0.106061 0, 0.111671 -0.075169 0, 0.113522 0.044204 0.002998, 0.056886 0 0, + 0.113522 0.044204 0, 0.113522 -0.044204 0.002998, 0.113522 -0.044204 0, 0.056886 0 0, 0.113522 0.044204 0.002998, + 0.112869 0.057107 0.002998, 0.113522 -0.044204 0.002998, 0.112045 0.07 0.002998, 0.112869 -0.057107 0.002998, + 0.112045 -0.07 0.002998, 0.056886 0 0.002998, 0.112045 -0.07 0.002998, 0.114998 -0.07 0.002998, 0.112045 -0.07 0.014999, + 0.113888 -0.035022 0.014999, 0.1145 0 0.014999, 0.113888 0.035022 0.014999, 0.112045 0.07 0.014999, 0.114998 0.07 0.014999, + 0.114998 0.07 0.002998, 0.112045 0.07 0.002998, 0.114998 -0.07 0.002998, 0.114998 0.07 0.002998, 0.114998 0.07 0.014999, + 0.114998 -0.07 0.014999, 0.098923 -0.115 0, 0.102486 -0.114337 0, 0.10273 -0.114243 0.020035, 0.105598 -0.112437 0, + 0.107819 -0.10955 0, 0.108849 -0.106061 0, 0.105606 -0.112436 0.020088, 0.107704 -0.109774 0.02018, + 0.108849 -0.10606 0.020309, -0.129997 -0.115 0, 0.098923 -0.115 0.019997, 0.090462 -0.115 0, 0.098923 -0.115 0, + 0.090462 -0.115 0, 0 -0.044398 0, -0.090462 -0.115 0.002998, -0.090462 -0.115 0, -0.026543 -0.115 0.003, + 0.090462 -0.115 0.002998, 0 -0.044399 0.003, -0.090462 -0.115 0.002998, 0.022499 -0.122 0.003, 0.026543 -0.115 0.003, + 0.026543 -0.115 0.014999, -0.022499 -0.122 0.003, 0.022499 -0.122 0.003, -0.026543 -0.115 0.014999, -0.026543 -0.115 0.003, + -0.022499 -0.122 0.003, -0.026543 -0.115 0.014999, -0.022499 -0.122 0.014999, 0.026543 -0.115 0.014999, + 0.022499 -0.122 0.014999, -0.129997 -0.115 0.020004, -0.134117 -0.114115 0.020035, -0.129997 -0.115 0, -0.13382 -0.114239 0, + -0.13707 -0.112071 0, -0.13707 -0.11207 0.020096, -0.139114 -0.109114 0.020203, -0.139999 -0.105 0.020355, + -0.139236 -0.108827 0, -0.139999 -0.105 0, 0.112389 -0.065001 0.020958, 0.098251 -0.033333 0.022064, + 0.093639 -0.049376 0.021507, 0.113972 -0.032516 0.022095, 0.087189 -0.065001 0.020958, 0.114368 -0.016262 0.022659, + 0.1145 0 0.023232, 0.102 0 0.023232, 0.101048 -0.016876 0.022644, 0.1145 0 0.023232, 0.113972 0.032516 0.022095, + 0.101048 0.016876 0.022644, 0.102 0 0.023232, 0.098251 0.033333 0.022064, 0.113312 0.048763 0.02153, + 0.112389 0.065001 0.020958, 0.093639 0.049376 0.021507, 0.087189 0.065001 0.020958, 0.052452 0.094999 0.020699, + 0.109978 0.094999 0.020699, 0.109436 0.100533 0.020508, 0.108856 0.10606 0.020309, 0.107712 0.109774 0.02018, + 0.105606 0.112436 0.020088, 0.10273 0.114243 0.020035, 0.098923 0.115 0.019997, -0.13707 0.11207 0.020096, + -0.129997 0.115 0.020004, -0.139999 0.105 0.020355, -0.134109 0.114115 0.020035, -0.139122 0.109114 0.020203, + -0.114777 0.094999 0.020699, -0.114006 0.072826 0.020889, -0.114006 0.072823 0.097008, -0.112007 0.072823 0.099007, + -0.07547 0.089302 0.099579, -0.066719 0.09259 0.099693, -0.057831 0.095474 0.099796, -0.039696 0.099991 0.099953, + -0.080086 0.085999 0.099464, -0.077972 0.087929 0.099533, -0.07547 0.089302 0.099579, -0.075188 0.088615 0.099411, + -0.074783 0.087646 0.098328, -0.074951 0.088036 0.098969, -0.091034 0.071304 0.098953, -0.085815 0.078842 0.099213, + -0.080086 0.085999 0.099464, -0.079514 0.08551 0.099297, -0.07869 0.084846 0.098221, -0.079025 0.085106 0.098862, + -0.092819 0.070023 0.098907, -0.093559 0.069931 0.0989, -0.092125 0.070297 0.098915, -0.091034 0.071304 0.098953, + -0.090401 0.070908 0.098785, -0.089493 0.070358 0.09771, -0.089859 0.070572 0.098351, -0.109009 0.069931 0.0989, + -0.093559 0.069183 0.098732, -0.093559 0.069931 0.0989, -0.093559 0.068146 0.097656, -0.093559 0.068558 0.098297, + -0.112007 0.072823 0.099007, -0.111748 0.071709 0.098976, -0.11277 0.072807 0.098862, -0.113419 0.0728 0.098427, + -0.111092 0.07077 0.09893, -0.109009 0.069931 0.0989, -0.109009 0.069183 0.098732, -0.11013 0.070152 0.0989, + -0.109009 0.068558 0.098297, -0.113853 0.072807 0.097771, -0.114006 0.072823 0.097008, -0.109009 0.068146 0.097664, + -0.11351 0.070833 0.020912, -0.114006 0.072826 0.020889, -0.113571 0.070969 0.096977, -0.114006 0.072823 0.097008, + -0.11248 0.069403 0.02092, -0.111015 0.06842 0.02092, -0.109009 0.068001 0.020927, -0.110878 0.068367 0.096916, + -0.11248 0.069405 0.096924, -0.109009 0.068001 0.096901, -0.093559 0.068001 0.096901, -0.093559 0.068001 0.020935, + -0.109009 0.068001 0.020927, -0.092323 0.068153 0.096909, -0.093559 0.068001 0.096901, -0.093559 0.068001 0.020935, + -0.092285 0.068165 0.020935, -0.091164 0.068611 0.020927, -0.089355 0.070297 0.020912, -0.091164 0.068611 0.096916, + -0.089355 0.070297 0.096954, -0.089355 0.070297 0.020912, -0.084213 0.077713 0.097214, -0.084213 0.077717 0.020851, + -0.078568 0.084763 0.097466, -0.078568 0.084763 0.02079, -0.076813 0.08637 0.020775, -0.078568 0.084763 0.097466, + -0.076813 0.086372 0.097534, -0.074722 0.087517 0.09758, -0.074722 0.087517 0.020767, -0.026222 0.100273 0.020514, + -0.074722 0.087517 0.09758, -0.066063 0.090775 0.097694, -0.063698 0.091587 0.020729, -0.057259 0.093628 0.097797, + -0.052452 0.094999 0.020699, 0 0.101999 0.020454, 0 0.102005 0.206336, 0.018082 0.101181 0.206308, 0.035866 0.098755 0.206223, + 0.053368 0.094742 0.206081, 0.070572 0.089142 0.205887, 0.026222 0.100273 0.020514, 0.061584 0.092283 0.020721, + 0.070572 0.089134 0.020752, 0.052452 0.094999 0.020699, -0.039551 0.099258 0.099781, -0.031792 0.099457 0.098238, + -0.039337 0.098244 0.098705, -0.039421 0.098648 0.099342, -0.039307 0.098099 0.097954, -0.022461 0.100739 0.099047, + -0.076653 0.099777 0.099945, -0.039696 0.099991 0.099953, -0.032112 0.100693 0.100094, -0.022682 0.101349 0.1005, + -0.169998 0.100555 0.19101, -0.129944 0.101156 0.020477, -0.140862 0.101013 0.170593, -0.101578 0.101486 0.206314, + -0.050789 0.101868 0.206333, 0 0.102005 0.206336, -0.119888 0.101282 0.020477, -0.139999 0.101021 0.020493, + -0.059937 0.10183 0.101948, 0 0.101997 0.101954, -0.199997 0.100006 0.213058, -0.199776 0.100006 0.212128, + -0.199501 0.100006 0.211731, -0.19915 0.100021 0.211411, -0.19915 0.098007 0.211411, -0.199997 0.100006 0.213058, + -0.199997 0.100006 0.237, -0.199997 -0.098007 0.213058, -0.199997 -0.100006 0.213058, -0.199997 -0.098007 0.235001, + -0.199997 -0.096771 0.236847, -0.199997 -0.097412 0.23642, -0.199997 -0.097855 0.235764, -0.198502 -0.098007 0.235001, + -0.198502 -0.095993 0.237, -0.199997 -0.095993 0.237, -0.198502 -0.098007 0.212799, -0.198502 -0.098007 0.235001, + -0.198502 -0.095993 0.237, -0.198502 -0.096771 0.236847, -0.198502 -0.097412 0.23642, -0.198502 -0.097855 0.235764, + -0.139992 -0.098007 0.171829, -0.198502 -0.098007 0.212799, -0.198502 0.093506 0.212799, -0.138603 -0.098007 0.169785, + -0.138496 -0.098007 0.168961, -0.138893 -0.098007 0.170578, -0.139992 -0.098007 0.171829, -0.138496 -0.098007 0.168961, + -0.139999 -0.097848 0.012238, -0.139999 -0.098 0.013, -0.138496 -0.097848 0.012238, -0.138496 -0.098 0.013, + -0.139999 -0.097414 0.011581, -0.139999 -0.096766 0.011154, -0.139999 -0.096 0.011002, -0.138496 -0.096766 0.011154, + -0.138496 -0.097414 0.011581, -0.139999 -0.096 0.011002, -0.138496 -0.096 0.011002, -0.139999 0.096 0.011002, + -0.139999 0.096766 0.011154, -0.138496 0.096766 0.011154, -0.138496 0.096 0.011002, -0.139999 0.097414 0.011581, + -0.139999 0.097847 0.012238, -0.139999 0.098 0.013, -0.138496 0.097847 0.012238, -0.138496 0.097414 0.011581, + -0.198502 0.098007 0.212799, -0.199997 0.098007 0.213058, -0.139992 0.098007 0.171829, -0.19915 0.098007 0.211411, + -0.199776 0.098007 0.212128, -0.199997 0.098007 0.235001, -0.199944 0.098007 0.212585, -0.139999 0.098007 0.168961, + -0.138496 0.098 0.013, -0.139999 0.098 0.013, -0.199997 0.097855 0.235764, -0.199997 0.098007 0.235001, + -0.198502 0.097855 0.235764, -0.198502 0.098007 0.235001, -0.199997 0.097412 0.23642, -0.199997 0.096771 0.236847, + -0.199997 0.095993 0.237, -0.198502 0.096771 0.236847, -0.198502 0.097412 0.23642, -0.198502 0.095993 0.237, + -0.138496 0.098007 0.168961, -0.138603 0.098007 0.169785, -0.138893 0.098007 0.170578, -0.139992 0.093506 0.171829, + -0.139992 0.098007 0.171829, -0.138496 0.093506 0.168961, -0.138496 0.0935 0.015503, -0.198502 0.093506 0.232498, + -0.198502 0.093506 0.212799, -0.139992 0.093506 0.171829, -0.139366 0.093506 0.171265, -0.138893 0.093506 0.170578, + -0.198502 -0.093506 0.232498, -0.198502 0.093506 0.232498, -0.139992 -0.093506 0.171829, -0.198502 -0.093506 0.212799, + -0.198502 -0.093506 0.232498, -0.138893 -0.093506 0.170578, -0.138603 -0.093506 0.169785, -0.138496 -0.093506 0.168961, + -0.138496 -0.0935 0.015503, -0.121002 0.0935 0.015503, -0.138496 0.0935 0.015503, -0.121002 0.0935 0.015503, + -0.121002 -0.0935 0.015503, -0.121002 0.093498 0.106003, -0.120998 0.061996 0.106003, -0.035004 0.093498 0.105999, + -0.035004 -0.093506 0.232498, -0.035004 -0.093498 0.105999, -0.035004 0.093506 0.232498, -0.120998 -0.062 0.019997, + -0.035 -0.062 0.02, -0.120998 0.062 0.019997, -0.035 0.061996 0.105999, -0.035 0.062 0.02, -0.120998 0.061996 0.106003, + -0.120998 -0.062 0.019997, -0.120998 -0.061996 0.106003, -0.035 -0.061996 0.105999, -0.035 -0.062 0.02, + -0.120998 -0.061996 0.106003, -0.121002 -0.093498 0.106003, -0.035004 -0.093498 0.105999, -0.035 -0.061996 0.105999, + -0.139999 0.101013 0.168961, -0.14006 0.101013 0.169434, -0.14006 0.098007 0.169434, -0.139999 0.098007 0.168961, + -0.140228 0.098007 0.169876, -0.140221 0.101013 0.169876, -0.140862 0.101013 0.170593, -0.140854 0.098007 0.170593, + -0.199997 0.09877 0.238846, -0.199997 0.099411 0.238419, -0.199997 0.099854 0.237762, -0.153137 0.10083 0.237, + -0.199997 0.100006 0.237, -0.10627 0.10144 0.237, -0.106239 0.101273 0.23777, -0.106125 0.100845 0.238426, + -0.105988 0.100189 0.238846, -0.105812 0.099442 0.238998, 0.051064 0.107941 0.237, 0.02903 0.114899 0.237, + 0.006332 0.119263 0.237, -0.016716 0.120972 0.237, -0.03981 0.12001 0.237, -0.06263 0.116409 0.237, -0.084885 0.110184 0.237, + -0.10627 0.10144 0.237, -0.101578 0.101486 0.206314, -0.080727 0.109528 0.206596, -0.104294 0.101456 0.206665, + -0.036972 0.118347 0.206905, -0.059097 0.115173 0.206795, -0.105644 0.10144 0.207268, -0.014633 0.119003 0.20693, + 0.029556 0.112762 0.206713, 0.007637 0.117126 0.206865, 0.05085 0.105957 0.206474, 0.071236 0.096802 0.206154, + -0.106148 0.10144 0.207802, -0.062614 0.116409 0.208771, -0.039803 0.12001 0.208897, -0.016716 0.120972 0.208931, + -0.084892 0.110184 0.208557, 0.006325 0.119263 0.208871, 0.02903 0.114899 0.208721, 0.051064 0.107941 0.208481, + 0.071236 0.096802 0.206154, 0.071587 0.097458 0.206322, 0.07428 0.095291 0.206253, 0.073692 0.094818 0.206085, + 0.072563 0.095932 0.206123, 0.071877 0.098007 0.206764, 0.072083 0.098373 0.207405, 0.075104 0.095947 0.207329, + 0.074768 0.095688 0.206688, 0.075233 0.096024 0.208084, 0.075233 0.096024 0.237, 0.073822 0.097412 0.208122, + 0.072159 0.098495 0.208153, 0.075233 0.096024 0.237, 0.073822 0.097412 0.237, 0.072159 0.098495 0.237, + 0.07209 0.098373 0.237762, 0.071892 0.097977 0.238411, 0.071587 0.097412 0.238846, 0.075233 -0.096024 0.237, + 0.08313 -0.085678 0.237, 0.090096 -0.074677 0.237, 0.096081 -0.06311 0.237, 0.10104 -0.051071 0.237, 0.104939 -0.038635 0.237, + 0.107742 -0.025925 0.237, 0.109435 -0.013016 0.237, 0.11 0 0.237, 0.109435 0.013016 0.237, 0.107742 0.025925 0.237, + 0.104939 0.038635 0.237, 0.10104 0.051071 0.237, 0.096081 0.06311 0.237, 0.090096 0.074677 0.237, 0.08313 0.085678 0.237, + 0.075233 0.096024 0.237, 0.075119 0.095932 0.237762, 0.074783 0.095657 0.238411, 0.074287 0.095245 0.238846, + 0.074287 -0.095245 0.238846, 0.074783 -0.095657 0.238411, 0.075119 -0.095932 0.237762, 0.075233 -0.096024 0.237, + 0.073822 -0.097412 0.237, 0.073692 -0.094818 0.206085, 0.07428 -0.095291 0.206253, 0.072563 -0.095932 0.206123, + 0.071236 -0.096802 0.206154, 0.074768 -0.095688 0.206688, 0.075104 -0.095947 0.207329, 0.075233 -0.096024 0.208084, + 0.073822 -0.097412 0.208122, 0.007637 -0.117126 0.206865, 0.029564 -0.112762 0.206713, 0.05085 -0.105957 0.206474, + 0.071236 -0.096802 0.206154, 0.071587 -0.097458 0.206322, 0.071877 -0.098007 0.206764, 0.072083 -0.098373 0.207405, + -0.036972 -0.118347 0.206905, -0.014633 -0.119003 0.20693, -0.059097 -0.115173 0.206795, -0.080719 -0.109528 0.206596, + -0.10157 -0.101486 0.206314, -0.104301 -0.101456 0.206665, -0.105652 -0.10144 0.207268, -0.10614 -0.10144 0.207802, + -0.10627 -0.10144 0.208252, -0.084877 -0.110184 0.208557, -0.10627 -0.10144 0.237, -0.062622 -0.116409 0.208771, + -0.03981 -0.12001 0.208897, -0.016716 -0.120972 0.208931, 0.006332 -0.119263 0.208871, 0.029022 -0.114899 0.208721, + 0.051064 -0.107941 0.208481, 0.072159 -0.098495 0.208153, -0.084885 -0.110184 0.237, -0.06263 -0.116409 0.237, + -0.039803 -0.12001 0.237, -0.016716 -0.120972 0.237, 0.006325 -0.119263 0.237, 0.02903 -0.114899 0.237, + 0.051071 -0.107941 0.237, 0.072159 -0.098495 0.237, 0.07209 -0.098373 0.237762, 0.071892 -0.097977 0.238411, + 0.071587 -0.097412 0.238846, -0.10598 -0.100189 0.238846, -0.106239 -0.101273 0.23777, -0.106133 -0.100845 0.238426, + -0.10627 -0.10144 0.237, -0.199997 -0.09877 0.238846, -0.199997 -0.099411 0.238419, -0.199997 -0.099854 0.237762, + -0.199997 -0.100006 0.237, -0.153137 -0.10083 0.237, 0.071236 -0.096725 0.238998, 0.072563 -0.095856 0.238998, + 0.073692 -0.094742 0.238998, 0.081482 -0.084534 0.238998, 0.088356 -0.073669 0.238998, 0.050308 -0.106094 0.238998, + 0.028427 -0.112991 0.239, 0.103004 -0.038116 0.238998, 0.105774 -0.025574 0.238998, 0.107442 -0.012833 0.238998, + 0.108 0 0.238998, 0.094265 -0.062271 0.238998, 0.099159 -0.050385 0.238998, -0.01696 -0.118973 0.239, + 0.005905 -0.117294 0.239, -0.039879 -0.117996 0.238998, -0.062523 -0.11438 0.238998, -0.084602 -0.10817 0.238998, + -0.152908 -0.098831 0.238998, -0.105812 -0.099442 0.238998, -0.199997 -0.098007 0.238998, 0.107442 0.012833 0.238998, + 0.105774 0.025574 0.238998, 0.103004 0.038116 0.238998, 0.099159 0.050385 0.238998, 0.094265 0.062271 0.238998, + 0.088356 0.073669 0.238998, 0.081482 0.084534 0.238998, 0.073692 0.094742 0.238998, 0.072563 0.095856 0.238998, + 0.071236 0.096725 0.238998, 0.050308 0.106094 0.238998, 0.028435 0.112991 0.239, -0.105812 0.099442 0.238998, + -0.062515 0.11438 0.238998, -0.084602 0.10817 0.238998, -0.199997 0.098007 0.238998, -0.152908 0.098831 0.238998, + -0.016968 0.118973 0.239, 0.005905 0.117294 0.239, -0.039879 0.117996 0.238998, 0.019508 -0.098083 0.239, + 0.038269 -0.092392 0.238998, 0 -0.100006 0.239, 0.055557 -0.083145 0.238998, 0.083145 -0.055557 0.238998, + 0.070709 -0.070709 0.238998, 0.092388 -0.038269 0.238998, 0.098078 -0.019516 0.238998, 0.1 0 0.238998, + 0.098078 0.019516 0.238998, 0.092388 0.038269 0.238998, 0.083145 0.055557 0.238998, 0.070709 0.070709 0.238998, + 0.055557 0.083145 0.238998, 0.038269 0.092392 0.238998, 0.019508 0.098083 0.239, 0 0.100006 0.239, -0.019508 0.098083 0.239, + -0.038269 0.092392 0.238998, -0.055557 0.083145 0.238998, 0 0.100006 0.255, -0.070709 0.070709 0.238998, + -0.083145 0.055557 0.238998, -0.092388 0.038269 0.238998, -0.098078 0.019516 0.238998, -0.1 0 0.238998, + -0.098078 -0.019516 0.238998, -0.092388 -0.038269 0.238998, -0.083145 -0.055557 0.238998, -0.038269 -0.092392 0.238998, + -0.055557 -0.083145 0.238998, -0.019508 -0.098083 0.239, -0.070709 -0.070709 0.238998, 0 -0.100006 0.239, + -0.055557 0.083145 0.255001, -0.070709 0.070709 0.254997, -0.083145 0.055557 0.254997, -0.019508 0.098083 0.254999, + -0.038269 0.092392 0.255001, 0 0.100006 0.255, -0.092388 0.038269 0.254997, -0.098078 0.019516 0.254997, -0.1 0 0.254997, + 0.019508 0.098083 0.254999, 0.038269 0.092392 0.255001, 0.055557 0.083145 0.255001, 0.070709 0.070709 0.254997, + 0.083145 0.055557 0.254997, 0.092388 0.038269 0.254997, 0.098078 0.019516 0.254997, 0.1 0 0.254997, + -0.098078 -0.019516 0.254997, -0.092388 -0.038269 0.254997, -0.083145 -0.055557 0.254997, -0.070709 -0.070709 0.254997, + -0.055557 -0.083145 0.255001, -0.038269 -0.092392 0.255001, 0 -0.100006 0.255, -0.019508 -0.098083 0.254999, + 0.092388 -0.038269 0.254997, 0.083145 -0.055557 0.254997, 0.098078 -0.019516 0.254997, 0.070709 -0.070709 0.254997, + 0.038269 -0.092392 0.255001, 0.019508 -0.098083 0.254999, 0.055557 -0.083145 0.255001, 0 -0.078506 0.255, + 0.015312 -0.076996 0.255, 0.030037 -0.072525 0.254999, 0.04361 -0.065277 0.255001, 0.055508 -0.055511 0.255001, + 0.065269 -0.04361 0.254997, 0.072525 -0.030045 0.254997, 0.076991 -0.01532 0.254997, 0.0785 0 0.254997, + 0.076992 0.01532 0.254997, 0.072525 0.030045 0.254997, 0.065269 0.04361 0.254997, 0.055508 0.055511 0.255001, + 0.04361 0.065277 0.255001, 0.030037 0.072525 0.254999, 0.015312 0.076996 0.255, 0 0.078506 0.255, -0.015312 0.076996 0.255, + -0.030037 0.072525 0.254999, -0.04361 0.065277 0.255001, 0 0.078491 0.258, -0.055508 0.055511 0.255001, + -0.065269 0.04361 0.254997, -0.072525 0.030045 0.254997, -0.076991 0.01532 0.254997, -0.0785 0 0.254997, + -0.076992 -0.01532 0.254997, -0.072525 -0.030045 0.254997, -0.065269 -0.04361 0.254997, -0.055508 -0.055511 0.255001, + -0.04361 -0.065277 0.255001, -0.030037 -0.072525 0.254999, -0.015312 -0.076996 0.255, 0 -0.078506 0.255, + -0.04361 0.065277 0.257999, 0 0.078491 0.258, -0.030037 0.07251 0.257999, -0.015312 0.076996 0.258, + -0.055508 0.055511 0.257999, -0.065269 0.04361 0.258003, -0.076991 0.01532 0.258003, -0.0785 0 0.258003, + -0.072525 0.030029 0.258003, 0.065269 0.04361 0.258003, -0.065269 -0.04361 0.258003, 0.015312 0.076996 0.258, + 0.030037 0.07251 0.257999, 0.04361 0.065277 0.257999, 0.055508 0.055511 0.257999, 0.0785 0 0.258003, + 0.076992 0.01532 0.258003, 0.072525 0.030029 0.258003, -0.072525 -0.030029 0.258003, 0.065269 -0.04361 0.258003, + -0.04361 -0.065277 0.257999, -0.055508 -0.055511 0.257999, -0.030037 -0.07251 0.257999, 0 -0.078491 0.258, + -0.015312 -0.076996 0.258, 0.04361 -0.065277 0.257999, 0.072525 -0.030029 0.258003, 0.076991 -0.01532 0.258003, + 0.030037 -0.07251 0.257999, 0.055508 -0.055511 0.257999, 0.015312 -0.076996 0.258, -0.076992 -0.01532 0.258003, + -0.115326 0.098465 0.020584, -0.11483 0.096457 0.020645, -0.116371 0.099899 0.020531, -0.117859 0.100878 0.0205, + -0.119888 0.101282 0.020477, -0.113609 0.099426 0.09993, -0.113052 0.097984 0.099892, -0.112831 0.096458 0.099831, + -0.113594 0.096436 0.099686, -0.114243 0.096428 0.099243, -0.114677 0.096436 0.098602, -0.11483 0.096458 0.097832, + -0.11499 0.097549 0.097885, -0.117393 0.101082 0.10099, -0.119888 0.10128 0.101929, -0.115517 0.100571 0.100357, + -0.113609 0.099426 0.09993, -0.114281 0.099083 0.09977, -0.118103 0.100975 0.100067, -0.114853 0.098801 0.099335, + -0.115242 0.098625 0.098694, -0.115387 0.098579 0.097923, -0.115898 0.09938 0.098129, -0.11676 0.100227 0.098785, + 0 0.044398 0, -0.090462 0.115 0, 0.090462 0.115 0.002998, 0.090462 0.115 0, 0 0.044398 0, 0.090462 0.115 0.002998, + 0 0.044399 0.003, -0.090462 0.115 0.002998, -0.059944 -0.101822 0.101948, -0.076851 -0.099777 0.099945, + -0.114281 -0.099083 0.09977, -0.113609 -0.099426 0.09993, -0.114326 -0.099983 0.100037, -0.115517 -0.100571 0.100357, + -0.119888 -0.10128 0.101929, -0.114853 -0.098801 0.099335, -0.115242 -0.098625 0.098694, -0.115387 -0.098579 0.097923, + -0.11499 -0.097549 0.097885, -0.11483 -0.096457 0.020645, -0.11483 -0.096458 0.097832, -0.115326 -0.098465 0.020584, + -0.115898 -0.09938 0.098129, -0.116753 -0.100227 0.098785, -0.118103 -0.100975 0.100067, -0.119888 -0.10128 0.101929, + -0.116371 -0.099899 0.020531, -0.117859 -0.100878 0.0205, -0.119888 -0.101282 0.020477, -0.011879 -0.101822 0.101152, + -0.011772 -0.101662 0.100349, -0.039742 -0.098236 0.098705, -0.039711 -0.098099 0.097954, -0.0401 -0.099991 0.099953, + -0.022911 -0.101349 0.1005, -0.039955 -0.099258 0.099781, -0.02269 -0.100731 0.099047, -0.039833 -0.098648 0.099342, + -0.138496 0.097 0.168228, -0.139069 0.097 0.170532, -0.13974 0.097 0.171524, -0.140633 0.097 0.172333, + -0.198502 0.097 0.212845, -0.198502 0.097 0.235504, -0.200104 0.097 0.235504, -0.200104 0.097 0.212006, + -0.141548 0.097 0.171021, -0.140488 0.097 0.1698, -0.140198 0.097 0.169037, -0.140099 0.097 0.168228, + -0.140099 0.097 0.011993, -0.138496 0.097 0.011993, -0.138496 0.097 0.168228, -0.138496 -0.097 0.168228, + -0.138641 -0.097 0.169418, -0.139069 -0.097 0.170532, -0.140633 -0.097 0.172333, -0.140633 0.097 0.172333, + -0.138496 -0.097 0.011993, -0.140099 -0.097 0.011993, -0.138496 -0.097 0.011993, -0.140099 0.097 0.168228, + -0.140099 -0.097 0.168228, -0.140099 -0.097 0.011993, -0.141548 -0.097 0.171021, -0.140945 -0.097 0.170471, + -0.140488 -0.097 0.1698, -0.200104 -0.097 0.212006, -0.200104 -0.097 0.235504, -0.200104 -0.097 0.212006, + -0.198502 -0.097 0.235504, -0.200104 -0.097 0.235504, -0.198502 -0.097 0.212845, -0.198502 -0.097 0.235504, + -0.198502 -0.097 0.212845, -0.139752 0 0.171539, -0.139065 0 0.170532, -0.138639 0 0.169403, -0.140195 0 0.169022, + -0.140484 0 0.1698, -0.140952 0 0.170486, -0.169563 0.097 0.192581, -0.170822 0.097 0.191513, -0.156189 0.097 0.181259, + -0.170822 -0.097 0.191513, -0.169563 -0.097 0.192581, -0.184036 -0.097 0.202713, -0.13974 0.097 0.171524, + -0.139069 0.097 0.170532, -0.138496 0.097 0.011993, -0.138496 -0.097 0.168228, -0.138496 0.097 0.168228, + -0.140099 0.097 0.011993, -0.138496 0.097 0.011993, -0.140099 0.097 0.011993, -0.140099 -0.097 0.168228, + -0.140099 0.097 0.168228, -0.140198 0.097 0.169037, -0.140488 0.097 0.1698, -0.141548 0.097 0.171021, + -0.200104 0.097 0.212006, -0.141548 -0.097 0.171021, -0.200104 0.097 0.235504, -0.200104 0.097 0.212006, + -0.198502 0.097 0.235504, -0.200104 0.097 0.235504, -0.198502 0.097 0.212845, -0.198502 0.097 0.235504, + -0.140633 -0.097 0.172333, -0.140633 0.097 0.172333, -0.198502 0.097 0.212845, -0.141548 -0.097 0.171021, + -0.140945 -0.097 0.170471, -0.140633 -0.097 0.172333, -0.140488 -0.097 0.1698, -0.200104 -0.097 0.235504, + -0.200104 -0.097 0.212006, -0.198502 -0.097 0.212845, -0.198502 -0.097 0.235504, -0.140099 -0.097 0.011993, + -0.138496 -0.097 0.011993, -0.140099 -0.097 0.168228, -0.138496 -0.097 0.168228, -0.139069 -0.097 0.170532, + -0.138641 -0.097 0.169418] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 2326 + 0 0 -1, -0.399674 -0.916653 -0.0028989, -0.163817 -0.986487 -0.00286306, -0.286112 -0.958196 7.84716e-005, + -0.1682 -0.985747 0.00329186, -0.94313 -0.332422 0.000657528, -0.725925 -0.687771 -0.00221097, + -0.870964 -0.491347 -0.000108204, -0.594973 -0.803746 -0.000191051, -1 2.78868e-005 0.000161492, + -0.404742 -0.914426 0.00283899, -0.72558 -0.688137 0.00156899, -0.941465 -0.337111 -0.000872443, -1 4.24951e-007 0, + -0.871033 0.491224 -0.000103587, -0.726011 0.68768 -0.00213331, -0.943161 0.332337 0.000685677, + -0.941452 0.337146 -0.000896803, -0.595011 0.803717 -0.000177878, -0.286299 0.95814 9.31302e-005, + -0.164299 0.986407 -0.00280671, -0.399739 0.916624 -0.00285557, -1 0 0, -0.725657 0.688055 0.00154425, + -0.404741 0.914427 0.0028386, 2.07937e-007 0.999994 0.00336204, 0.399698 0.916643 -0.0028195, 0.164245 0.986416 -0.00280216, + 0.286278 0.958147 0.000103859, 0.724553 0.689215 -0.0022066, 0.594145 0.804358 -0.000166443, 0.870869 0.491516 0.000105573, + 0.943726 0.330729 0.000691412, 1 2.75171e-005 0.000358198, 0.404654 0.914465 0.00282669, 0.72497 0.688778 0.00178064, + 0.941907 0.335874 -0.000485442, 1 4.0941e-007 0, 0.870799 -0.49164 0.00010076, 0.724466 -0.689306 -0.00228471, + 0.943695 -0.330815 0.000663223, 0.941919 -0.335839 -0.000461174, 0.594106 -0.804386 -0.000179637, + 0.399632 -0.916671 -0.00286261, 0.163763 -0.986496 -0.00285852, 0.286092 -0.958202 8.92671e-005, 1 0 0, + 0.724893 -0.688859 0.00180539, 0.404655 -0.914465 0.00282708, 0.1682 -0.985747 0.00328937, -0.000141792 0.0083573 0.999965, + 0.000909684 0.00861062 0.999963, -0.00104198 0.00771409 0.99997, 0.00143973 0.00836971 0.999964, + -3.64863e-005 0.0076843 0.99997, 0.00174582 0.00897317 0.999958, 0.0016097 0.00935948 0.999955, + -0.000180415 0.00870502 0.999962, 0.000383478 0.00810819 0.999967, 0.000343287 0.00745243 0.999972, + -0.000227431 0.00820188 0.999966, -0.000333459 0.00960364 0.999954, -0.000262834 0.00934635 0.999956, + -0.000189739 0.00768472 0.99997, 0.000895341 0.00736655 0.999972, -0.000383251 0.00792874 0.999968, + -0.000860731 0.00887803 0.99996, -0.000119935 0.00819562 0.999966, -0.000225604 0.00882694 0.999961, + -0.000327319 0.0107568 0.999942, 5.96354e-005 0.00963339 0.999954, -9.4262e-006 0.00992246 0.999951, + -8.81546e-006 0.0093482 0.999956, 0.000405574 0.0057735 0.999983, 0.000466969 0.00589896 0.999983, + -4.21882e-005 0.00885144 0.999961, 0 0.00809978 0.999967, -0.00096692 0.0169093 0.999857, 0.000393268 0.00807117 0.999967, + -0.000689762 0.0118266 0.99993, -0.00341205 0.0265066 0.999643, -0.00045798 0.00809418 0.999967, + -9.63002e-005 0.00911913 0.999958, -6.19433e-005 0.00977052 0.999952, -0.000130783 0.00853694 0.999964, + -0.000119992 0.00934937 0.999956, 0.000126318 0.00750456 0.999972, -0.00506777 -0.00755268 0.999959, + -0.00102235 0.00350057 0.999993, -0.00236332 -0.000856931 0.999997, 0.000426447 0.00776099 0.99997, + 0.000602348 0.00683451 0.999976, -0.000716892 0.0088803 0.99996, -0.000780251 0.00738831 0.999972, + -0.00207447 0.010908 0.999938, -3.07462e-005 0.00777057 0.99997, -0.000135156 0.0095662 0.999954, + -3.27304e-005 0.00991047 0.999951, 0.000262306 0.010062 0.999949, 8.37733e-005 0.00887229 0.999961, + -4.89499e-005 0.00815016 0.999967, 1.53889e-005 0.00902244 0.999959, -0.000130602 0.00830113 0.999966, 0 0.00879209 0.999961, + -0.0010923 0.00824112 0.999965, -2.23472e-006 0.00896724 0.99996, -0.00084984 0.00933222 0.999956, + 0.000382762 0.00911376 0.999958, 0.000630999 0.00903436 0.999959, -0.399641 -0.916667 -0.00286219, + -0.163763 -0.986496 -0.00285634, -0.286092 -0.958202 8.99051e-005, -0.168201 -0.985747 0.00329191, + -0.943695 -0.330815 0.000663223, -0.724466 -0.689306 -0.00228471, -0.870799 -0.491639 0.00010076, + -0.594106 -0.804387 -0.000180701, -1 2.75171e-005 0.000358198, -0.404646 -0.914469 0.00282772, -0.724893 -0.688859 0.00180539, + -0.941919 -0.335839 -0.000461174, -1 4.0941e-007 0, -0.870869 0.491516 0.000105573, -0.724553 0.689215 -0.0022066, + -0.943726 0.330729 0.000691412, -0.941907 0.335874 -0.000485442, -0.594145 0.804358 -0.0001675, + -0.286278 0.958147 0.000104489, -0.164245 0.986416 -0.00280001, -0.399706 0.916639 -0.00281909, -0.72497 0.688778 0.00178064, + -0.404645 0.91447 0.00282733, -2.07937e-007 0.999994 0.00336204, 0.399713 0.916636 -0.00285299, 0.164299 0.986407 -0.00280886, + 0.2863 0.95814 9.20002e-005, 0.726027 0.687663 -0.00213423, 0.595008 0.80372 -0.000176407, 0.871035 0.49122 -0.000105097, + 0.94316 0.332339 0.000686105, 1 2.78696e-005 0.000164215, 0.404759 0.914419 0.00283949, 0.72564 0.688073 0.00154391, + 0.941455 0.337136 -0.00089655, 1 4.24951e-007 0, 0.870964 -0.491347 -0.000108933, 0.725942 -0.687753 -0.0022115, + 0.943127 -0.332433 0.000657489, 0.941468 -0.337101 -0.000872209, 0.594973 -0.803745 -0.000189144, + 0.399657 -0.91666 -0.00289753, 0.163817 -0.986487 -0.00286525, 0.286113 -0.958196 7.73309e-005, 0.725563 -0.688154 0.00156864, + 0.40476 -0.914418 0.00283988, 0.1682 -0.985747 0.00328932, 0.865163 -0.50149 0.000745969, 0.858165 -0.513372 0.0012707, + 0.843735 -0.536761 -1.15884e-005, 0.904809 -0.425818 0.000345391, 0.900331 -0.435205 0.00102418, 0.950508 -0.3107 0.000766042, + 0.938567 -0.345097 0.000709469, 0.974319 -0.225174 0.000207792, 0.994916 -0.100706 0.00054011, 0.985611 -0.169025 0.000928153, + 1 9.33801e-010 0.000925193, 0.908535 -0.417808 0.000261484, 0.961122 -0.276123 8.89173e-005, 0.991875 -0.127212 -1.46406e-006, + 0.985611 0.169025 0.000928153, 0.994916 0.100705 0.00054011, 0.974319 0.225174 0.000207792, 0.904809 0.425818 0.000345391, + 0.865163 0.50149 0.000745969, 0.900331 0.435205 0.00102418, 0.938567 0.345097 0.000709469, 0.950508 0.3107 0.000766042, + 0.858165 0.513372 0.0012707, 0.843735 0.536761 -1.15884e-005, 0.991875 0.127212 -1.46406e-006, 0.961122 0.276123 8.89173e-005, + 0.908535 0.417808 0.000261484, 0.421757 0.906709 -2.34513e-005, 0.490046 0.871696 0.000241482, 0.512129 0.858909 8.45997e-006, + 0.457303 0.889311 0.00059008, 0.61618 0.787606 2.42206e-006, 0.655066 0.755572 -0.000405254, 0.575523 0.817786 0.000407928, + 0.708601 0.705609 -8.42853e-007, 0.726219 0.687463 -0.000245871, 0.774656 0.632383 1.19563e-006, + 0.751354 0.659899 -0.000612509, -4.74249e-005 0.0349665 -0.999389, 1.99589e-005 0.0349414 -0.999389, + -1.21019e-005 0.034941 -0.999389, 0.000115517 0.0347657 -0.999395, 4.69203e-005 0.0347372 -0.999397, + 0.000112453 0.0347537 -0.999396, -0.00012522 0.0349125 -0.99939, -0.000154178 0.0348842 -0.999391, + 9.87851e-006 0.0349543 -0.999389, 3.20189e-006 0.0347336 -0.999397, 1.25523e-005 0.0350021 -0.999387, + -2.98211e-005 0.0349908 -0.999388, 5.4824e-005 0.0347379 -0.999396, 1.55911e-005 0.0348062 -0.999394, + 5.93893e-005 0.0349745 -0.999388, 3.2264e-005 0.0349021 -0.999391, 3.23418e-005 0.034938 -0.999389, + 0.000855812 0.0351366 -0.999382, 0.000296138 0.0350835 -0.999384, 0.00051538 0.0351666 -0.999381, + -0.000340719 0.0348086 -0.999394, -0.000289797 0.0347044 -0.999398, 0.00115778 0.0349918 -0.999387, + 0.00129566 0.0350764 -0.999384, 0.000761662 0.0350692 -0.999385, 0.00133283 0.0350606 -0.999384, + -0.00106652 0.0331573 -0.99945, -0.00114373 0.032308 -0.999477, -0.000454729 0.0339856 -0.999422, + 0.00046408 0.0363816 -0.999338, -5.01227e-005 0.0348135 -0.999394, -0.000908577 0.0346404 -0.999399, + 0.160089 0.145273 -0.976354, 0.155409 0.152754 -0.975968, 0.287656 0.236631 -0.928041, 0.322177 0.220428 -0.920659, + 0.170851 0.116601 -0.978373, 0.163142 0.131057 -0.977859, 0.302703 0.262548 -0.916209, 0.518506 0.420902 -0.744307, + 0.576357 0.42771 -0.696331, 0.70995 0.556041 -0.432192, 0.611494 0.377849 -0.695201, 0.339264 0.192407 -0.920804, + 0.641198 0.323773 -0.695727, 0.757315 0.540953 -0.365847, 0.174138 0.100103 -0.97962, 0.17847 0.0844805 -0.980312, + 0.35289 0.162637 -0.921422, 0.184583 0.0693553 -0.980367, 0.361687 0.131387 -0.922995, 0.368786 0.0992147 -0.924204, + 0.195728 0.0535632 -0.979194, 0.374618 0.0672244 -0.924739, 0.198191 0.0429614 -0.979221, 0.662846 0.266529 -0.699713, + 0.850087 0.400293 -0.342223, 0.679537 0.208012 -0.703534, 0.693995 0.148064 -0.704591, 0.43987 0.0505977 -0.896635, + 0.723482 0.0830945 -0.685324, 0.80036 0.473655 -0.367526, 0.777453 0.599675 -0.189623, 0.811189 0.55391 -0.187503, + 0.856348 0.481754 -0.185959, 0.917899 0.353626 -0.180028, 0.874057 0.314967 -0.369891, 0.890811 0.419101 -0.175529, + 0.945072 0.272749 -0.180128, 0.898603 0.23822 -0.368461, 0.915139 0.1594 -0.370286, 0.895455 0.0539193 -0.441875, + 0.707257 0.0546325 -0.704842, 0.937233 0.0844086 -0.338334, 0.964745 0.189776 -0.182349, 0.977186 0.105611 -0.184266, + 0.980796 0.0488095 -0.188829, 0.827464 -0.561517 -0.00132224, 0.872728 -0.488205 -0.00135407, 0.856937 -0.515422 7.09187e-006, + 0.794305 -0.607518 -0.00132708, 0.813658 -0.581344 -0.000167294, 0.827504 -0.56146 0.000827049, + 0.898057 -0.43988 3.42648e-005, 0.872808 -0.488062 0.00108811, 0.911753 -0.410736 -0.0013989, 0.794179 -0.607683 0.000897242, + 0.99463 -0.103499 -1.53776e-005, 0.987077 -0.160248 -0.000501033, 0.997334 -0.0729669 1.56707e-007, + 0.981501 -0.191456 5.25906e-005, 0.969202 -0.246267 -0.000796127, 0.93277 -0.360471 6.39965e-005, + 0.943958 -0.330065 -0.000965552, 0.960745 -0.277434 8.81162e-005, 1 -9.57085e-006 -1.28218e-005, + 0.911792 -0.410651 0.00108566, 0.944016 -0.329899 0.000874582, 0.969219 -0.246199 0.000750058, 0.987076 -0.160252 0.000444768, + 0.997336 -0.0729501 -8.1299e-005, 1 -3.828e-005 0, 0.987073 0.160273 -0.000480793, 0.969202 0.246267 -0.000796127, + 0.981501 0.191456 5.25906e-005, 0.997334 0.0729661 4.16396e-005, 0.994628 0.103512 5.36457e-006, + 0.997336 0.0729501 -8.1299e-005, 0.987076 0.160252 0.000444768, 0.960745 0.277434 8.81163e-005, 0.93277 0.360471 6.39965e-005, + 0.943958 0.330065 -0.000965552, 0.911753 0.410736 -0.0013989, 0.827464 0.561517 -0.00132224, 0.856937 0.515422 7.09191e-006, + 0.872728 0.488205 -0.00135407, 0.898057 0.43988 3.42649e-005, 0.813658 0.581344 -0.000167294, 0.794305 0.607518 -0.00132708, + 0.969219 0.246199 0.000750058, 0.944016 0.329899 0.000874582, 0.911792 0.410651 0.00108566, 0.872808 0.488062 0.00108811, + 0.827504 0.56146 0.000827049, 0.794179 0.607683 0.000897242, 0.198191 -0.0429614 -0.979221, 0.339515 -0.0604707 -0.938655, + 0.195728 -0.0535632 -0.979194, 0.439668 -0.0505773 -0.896735, 0.368978 -0.0909812 -0.924974, 0.184583 -0.0693553 -0.980367, + 0.17847 -0.0844805 -0.980312, 0.386926 -0.133838 -0.912346, 0.680553 -0.0788912 -0.72844, 0.707259 -0.0545781 -0.704844, + 0.695772 -0.144162 -0.703646, 0.712027 -0.205554 -0.671391, 0.913108 -0.171641 -0.369828, 0.319155 -0.14634 -0.936336, + 0.923178 -0.0920016 -0.373199, 0.646065 -0.253366 -0.720004, 0.344816 -0.186076 -0.920042, 0.170851 -0.116601 -0.978373, + 0.174138 -0.100103 -0.97962, 0.163142 -0.131057 -0.977859, 0.326398 -0.213313 -0.920849, 0.309962 -0.247723 -0.917909, + 0.160089 -0.145273 -0.976354, 0.155409 -0.152754 -0.975968, 0.639977 -0.318599 -0.699232, 0.628278 -0.388313 -0.674151, + 0.518506 -0.420902 -0.744307, 0.302703 -0.262548 -0.916209, 0.597491 -0.447682 -0.665271, 0.894728 -0.250057 -0.370046, + 0.895609 -0.0538927 -0.441566, 0.980919 -0.0488302 -0.188183, 0.869816 -0.326421 -0.369959, 0.96475 -0.189752 -0.182348, + 0.97735 -0.105595 -0.183405, 0.945072 -0.272749 -0.180128, 0.917899 -0.353626 -0.180028, 0.846228 -0.410092 -0.340181, + 0.808878 -0.4861 -0.33079, 0.856348 -0.481754 -0.185959, 0.757315 -0.540953 -0.365847, 0.70995 -0.556041 -0.432192, + 0.777453 -0.599675 -0.189623, 0.811189 -0.55391 -0.187503, 0.890811 -0.419101 -0.175529, 1.55911e-005 -0.0348062 -0.999394, + 5.48428e-005 -0.0347379 -0.999396, 4.69343e-005 -0.0347372 -0.999397, 0.000115545 -0.0347657 -0.999395, + 5.93893e-005 -0.0349745 -0.999388, 3.2264e-005 -0.0349021 -0.999391, 1.99558e-005 -0.0349414 -0.999389, + 3.23385e-005 -0.034938 -0.999389, -2.9825e-005 -0.0349908 -0.999388, -1.21089e-005 -0.034941 -0.999389, + -4.74285e-005 -0.0349665 -0.999389, 0.000112471 -0.0347537 -0.999396, 7.02377e-007 -0.0347991 -0.999394, + -0.00012522 -0.0349125 -0.99939, 9.87851e-006 -0.0349543 -0.999389, -0.000799833 -0.0350992 -0.999384, + -0.000217821 -0.0349911 -0.999388, 3.20189e-006 -0.0347336 -0.999397, -0.000381135 -0.0351415 -0.999382, + 0.000233693 -0.0347628 -0.999396, 0.00015492 -0.0348593 -0.999392, -0.000340719 -0.0348086 -0.999394, + -5.01227e-005 -0.0348135 -0.999394, -0.000289798 -0.0347044 -0.999398, -0.000908577 -0.0346404 -0.999399, + 0.00051538 -0.0351666 -0.999381, 0.000296138 -0.0350835 -0.999384, 0.000855812 -0.0351366 -0.999382, + 0.00129566 -0.0350764 -0.999384, 0.00115778 -0.0349918 -0.999387, 0.000761662 -0.0350692 -0.999385, + 0.00133283 -0.0350606 -0.999384, 0.42497 -0.905208 2.88122e-006, 0.4924 -0.870369 -0.000235924, + 0.514767 -0.85733 -8.45778e-006, 0.456264 -0.889844 -0.00064799, 0.615687 -0.787991 1.01724e-005, + 0.65329 -0.757107 0.000355054, 0.575414 -0.817862 -0.000375018, 0.707974 -0.706239 4.70235e-005, + 0.725536 -0.688184 0.000239655, 0.775835 -0.630936 1.75296e-006, 0.75106 -0.660234 0.000591865, + -0.000183362 -0.00855043 0.999963, -0.000860731 -0.00887803 0.99996, -0.000225604 -0.00882694 0.999961, + -0.000383251 -0.00792874 0.999968, -0.000120622 -0.0109323 0.99994, 0.00143973 -0.00836971 0.999964, + 0.000895341 -0.00736655 0.999972, 0.000441846 -0.0102055 0.999948, 0 -0.00809978 0.999967, -4.21882e-005 -0.00885144 0.999961, + 0.000169642 -0.00789653 0.999969, -0.000189739 -0.00768472 0.99997, 4.65427e-006 -0.00854402 0.999964, + -9.4262e-006 -0.00992246 0.999951, 0.000455558 -0.0109456 0.99994, 0.00174582 -0.00897317 0.999958, + 0.0016097 -0.00935948 0.999955, 0.000909684 -0.00861062 0.999963, -0.000141792 -0.0083573 0.999965, + -0.00104198 -0.00771409 0.99997, -3.64863e-005 -0.0076843 0.99997, 0.000383478 -0.00810819 0.999967, + -0.000262834 -0.00934635 0.999956, -0.000333459 -0.00960364 0.999954, -0.000180415 -0.00870502 0.999962, + -0.000227431 -0.00820188 0.999966, 0.000343287 -0.00745243 0.999972, 5.98042e-005 -0.00857196 0.999963, + 0 -0.00813003 0.999967, 2.9894e-005 -0.00860746 0.999963, -0.000139464 -0.00792758 0.999969, + -0.000139798 -0.00819492 0.999966, 0.000239947 -0.00773041 0.99997, 0.000199349 -0.00909956 0.999959, + 0.000205475 -0.00935234 0.999956, 0.000244125 -0.00964157 0.999954, 3.18354e-005 -0.00948006 0.999955, + 0.000424592 -0.0108457 0.999941, 0.000101674 -0.0100167 0.99995, 0.000382762 -0.00911376 0.999958, + 0.000630999 -0.00903436 0.999959, -2.23472e-006 -0.00896724 0.99996, -0.0010923 -0.00824112 0.999965, + -0.000716892 -0.0088803 0.99996, -0.00084984 -0.00933222 0.999956, -0.00045798 -0.00809418 0.999967, + 6.40874e-005 -0.00861414 0.999963, 0.000569558 -0.00798535 0.999968, 0.000326224 -0.00801545 0.999968, + 0.000126318 -0.00750456 0.999972, 0.00157304 -0.00738146 0.999972, 0.0012448 -0.008227 0.999965, + -0.00102235 -0.00350057 0.999993, -0.000780251 -0.00738831 0.999972, 0.000602348 -0.00683451 0.999976, + -0.00207447 -0.010908 0.999938, 0.000426447 -0.00776099 0.99997, -0.00506777 0.00755268 0.999959, + -0.00236332 0.000856931 0.999997, -0.400084 -0.916474 -0.00287451, -0.163913 -0.986471 -0.00285408, + -0.286575 -0.958058 9.15211e-005, -0.168009 -0.98578 0.00336262, -0.725933 -0.687762 -0.00209167, + -0.595221 -0.803562 -0.000179101, -0.870978 -0.491321 -0.000103579, -0.943161 -0.332337 0.000685677, + -1 -2.78792e-005 0.000161492, -0.405086 -0.914274 0.00285501, -0.725579 -0.688137 0.00150286, + -0.941452 -0.337146 -0.000896803, -1 -4.24951e-007 0, -0.870964 0.491347 -0.000108204, -0.725925 0.687771 -0.00221097, + -0.94313 0.332422 0.000657528, -0.941465 0.337111 -0.000872443, -0.594973 0.803746 -0.000191051, + -0.399673 0.916653 -0.0028989, -0.163817 0.986487 -0.00286306, -0.286113 0.958196 7.84716e-005, -0.72558 0.688137 0.00156899, + -0.404742 0.914426 0.00283899, 1.28539e-007 0.999994 0.00333817, 0.399632 0.916671 -0.00286261, 0.163763 0.986496 -0.00285852, + 0.286092 0.958202 8.92671e-005, 0.943695 0.330815 0.000663223, 0.724466 0.689306 -0.00228471, 0.870799 0.491639 0.00010076, + 0.594106 0.804386 -0.000179637, 1 -2.75171e-005 0.000358198, 0.404655 0.914465 0.00282708, 0.724893 0.688859 0.00180539, + 0.941919 0.335839 -0.000461174, 1 -4.0941e-007 0, 0.870814 -0.491613 0.000105586, 0.724475 -0.689297 -0.00216491, + 0.943726 -0.330729 0.000691412, 0.941907 -0.335874 -0.000485442, 0.594355 -0.804203 -0.000167661, + 0.286554 -0.958064 0.000102232, 0.163859 -0.98648 -0.00284957, 0.400043 -0.916492 -0.00283845, 0.724893 -0.68886 0.00173919, + 0.404999 -0.914313 0.00284306, 0.16801 -0.98578 0.00336009, -0.400051 -0.916488 -0.00283801, -0.163859 -0.98648 -0.00284739, + -0.286554 -0.958064 0.0001029, -0.16801 -0.98578 0.00336267, -0.724475 -0.689297 -0.00216491, + -0.594354 -0.804203 -0.000168711, -0.870814 -0.491613 0.000105586, -0.943726 -0.330729 0.000691412, + -1 -2.75171e-005 0.000358198, -0.40499 -0.914317 0.00284374, -0.724893 -0.68886 0.00173919, -0.941907 -0.335874 -0.000485442, + -1 -4.0941e-007 0, -0.870799 0.49164 0.00010076, -0.724466 0.689306 -0.00228471, -0.943695 0.330815 0.000663223, + -0.941919 0.335839 -0.000461174, -0.594106 0.804387 -0.000180701, -0.399641 0.916667 -0.00286219, + -0.163763 0.986496 -0.00285634, -0.286092 0.958202 8.99051e-005, -0.724893 0.688859 0.00180539, -0.404646 0.914469 0.00282772, + -2.79762e-007 0.999994 0.00333817, 0.399657 0.91666 -0.00289753, 0.163817 0.986487 -0.00286525, + 0.286113 0.958196 7.73309e-005, 0.943127 0.332433 0.000657489, 0.725942 0.687753 -0.0022115, 0.870964 0.491347 -0.000108932, + 0.594973 0.803745 -0.000189144, 1 -2.78696e-005 0.000164215, 0.40476 0.914418 0.00283988, 0.725563 0.688154 0.00156864, + 0.941468 0.337101 -0.000872209, 1 -4.24951e-007 0, 0.87098 -0.491318 -0.000105099, 0.725949 -0.687745 -0.00209264, + 0.94316 -0.332339 0.000686105, 0.941455 -0.337136 -0.00089655, 0.595218 -0.803564 -0.000177671, + 0.286576 -0.958058 9.03562e-005, 0.163913 -0.986471 -0.00285627, 0.400058 -0.916485 -0.002872, 0.725562 -0.688155 0.0015025, + 0.405104 -0.914266 0.00285585, 0.168009 -0.98578 0.00336004, 0.314398 -0.949291 0.000512736, 0.26262 -0.964899 0.000536529, + 0.306284 -0.95194 0.000390848, 0.252367 -0.967632 4.39313e-005, 0.177299 -0.984157 0.000388529, + 0.206285 -0.978492 0.000320099, 0.33065 -0.943753 -4.0791e-005, 0.257713 -0.966222 7.72384e-005, 0.179507 -0.983757 0, + 0.105238 -0.994447 -1.72654e-005, 0.0745372 -0.997217 -0.00136898, 0.0454462 -0.998967 1.48448e-005, + 0.0478339 -0.998848 -0.0038785, 0.122103 -0.992517 -0.000931475, 0.0553451 -0.998465 -0.00199728, + 0.0473759 -0.99887 -0.003822, -0.0341084 -0.999403 -0.00545376, -0.0280656 -0.999576 -0.00776369, + -0.0471274 -0.998877 -0.00490659, -0.0813537 -0.996685 -0.00020903, -0.12579 -0.992057 1.59882e-005, + -0.0656872 -0.997838 0.00188293, -0.0394633 -0.999216 0.00322992, -0.14461 -0.989485 -0.00261805, + -0.186548 -0.982444 -0.00160732, -0.184648 -0.982805 0.000229229, -0.235507 -0.97187 -0.00235638, + -0.273878 -0.961765 -0.000212589, -0.290967 -0.956733 -0.000407282, -0.324444 -0.945904 0.00085941, + -0.237701 -0.971334 -0.002957, -0.312395 -0.949952 0.000759157, -0.33816 -0.941089 -2.44566e-005, + -0.0782677 -0.356069 -0.931176, -0.0935639 -0.453292 -0.886438, -0.0409823 -0.217821 -0.975128, -0.100421 -0.385448 -0.917249, + -0.164993 -0.699055 -0.695773, -0.0454756 -0.213804 -0.975818, -0.061322 -0.231064 -0.971004, -0.0720107 -0.240261 -0.968034, + -0.120231 -0.391406 -0.91233, -0.238344 -0.676251 -0.697049, -0.232558 -0.700588 -0.674606, -0.148133 -0.436246 -0.88755, + -0.188812 -0.663599 -0.723869, -0.191553 -0.88135 -0.43189, -0.150344 -0.701546 -0.696585, -0.223626 -0.925035 -0.307086, + -0.232331 -0.955178 -0.183457, -0.211156 -0.960066 -0.183539, -0.273854 -0.9301 -0.244783, -0.249345 -0.868994 -0.427408, + -0.304911 -0.848706 -0.432119, -0.294275 -0.877183 -0.379411, -0.313873 -0.899538 -0.303835, + -1.07492e-005 -0.0345651 -0.999402, 1.40359e-005 -0.0349584 -0.999389, -0.000155227 -0.0343848 -0.999409, + 7.96497e-005 -0.0347072 -0.999398, -0.000323555 -0.0351438 -0.999382, -0.000314125 -0.0350503 -0.999386, + -0.000172779 -0.0359942 -0.999352, -2.95317e-005 -0.0351346 -0.999383, -0.000501489 -0.0379989 -0.999278, + 0.000294604 -0.0368873 -0.999319, 0.00049171 -0.0361784 -0.999345, -0.000114797 -0.0347503 -0.999396, + -0.00230583 -0.0338902 -0.999423, -0.000177929 -0.0331375 -0.999451, -0.00199893 -0.0396336 -0.999212, + 0.0024446 -0.046533 -0.998914, 0.00259037 -0.0308296 -0.999521, 0.0105888 -0.0619792 -0.998021, + 0.0137738 -0.0698666 -0.997461, 0.000155722 -0.026407 -0.999651, 0.435804 -0.090761 -0.895454, 0.190544 -0.0634691 -0.979625, + 0.3045 -0.109983 -0.946141, 0.192406 -0.0830441 -0.977795, 0.185341 -0.0988669 -0.977688, 0.407978 -0.18783 -0.893462, + 0.680788 -0.201399 -0.704248, 0.88907 -0.139679 -0.435941, 0.702591 -0.12706 -0.700158, 0.969961 -0.149232 -0.192106, + 0.915719 -0.250767 -0.313965, 0.94711 -0.256938 -0.192262, 0.655781 -0.275368 -0.70294, 0.914477 -0.357245 -0.190021, + 0.83422 -0.339076 -0.434862, 0.336988 -0.0445449 -0.940455, 0.436583 -0.0457521 -0.8985, 0.189212 -0.0405765 -0.981098, + 0.706343 -0.0491805 -0.706159, 0.438972 -0.0472133 -0.89726, 0.189042 -0.0410299 -0.981111, 0.708383 -0.0488 -0.704139, + 0.897266 -0.046414 -0.439043, 0.938718 -0.0447402 -0.341769, 0.980285 -0.041067 -0.193273, 0.895976 -0.0468543 -0.441623, + 0.707585 -0.0492428 -0.70491, 0.980492 -0.0408001 -0.192277, 0.113702 -0.354693 -0.928044, 0.0409487 -0.215987 -0.975537, + 0.0676079 -0.202812 -0.976881, 0.127405 -0.663353 -0.737381, 0.0780711 -0.400982 -0.912753, 0.246536 -0.30831 -0.918784, + 0.25543 -0.676654 -0.690575, 0.172921 -0.892581 -0.416411, 0.109857 -0.177613 -0.977949, 0.342272 -0.19642 -0.918841, + 0.170409 -0.123442 -0.977611, 0.192754 -0.0765209 -0.978259, 0.432676 -0.137684 -0.890974, 0.486582 -0.538567 -0.687883, + 0.670358 -0.307205 -0.67546, 0.342935 -0.870266 -0.353599, 0.185138 -0.96678 -0.176238, 0.638791 -0.681017 -0.357997, + 0.425242 -0.888583 -0.172014, 0.726144 -0.665977 -0.170851, 0.865457 -0.396266 -0.306524, 0.876208 -0.218615 -0.429496, + 0.695639 -0.191052 -0.692521, 0.957166 -0.225464 -0.181657, 0.897758 -0.404955 -0.17333, 2.65029e-007 -0.361095 -0.932529, + 0.000426374 -0.45733 -0.889297, -6.51859e-005 -0.218466 -0.975845, -6.97429e-005 -0.71913 -0.694876, + -0.000425933 -0.45733 -0.889297, 6.51184e-005 -0.218466 -0.975845, 0 -0.71999 -0.693984, 0.000304573 -0.904433 -0.426616, + -0.000149233 -0.944031 -0.329856, -0.000142061 -0.982333 -0.187141, -0.00055331 -0.903884 -0.427778, 0 -0.718 -0.696044, + 4.91634e-005 -0.982514 -0.186187, -0.249881 -0.309966 -0.917322, -0.34194 -0.311151 -0.886714, -0.149696 -0.153625 -0.976724, + -0.163681 -0.322455 -0.932326, -0.116202 -0.175258 -0.977641, -0.498695 -0.51715 -0.6956, -0.537227 -0.47525 -0.696796, + -0.340068 -0.612281 -0.713768, -0.0733053 -0.193872 -0.978284, -0.0274128 -0.203968 -0.978594, -0.103154 -0.383944 -0.917576, + -0.0550768 -0.461246 -0.885561, -0.171631 -0.722303 -0.669941, -0.089837 -0.716899 -0.691364, -0.238542 -0.940456 -0.242158, + -0.287591 -0.957318 -0.028861, -0.394571 -0.857713 -0.329608, -0.623958 -0.703024 -0.341224, -0.684394 -0.587582 -0.431686, + -0.75223 -0.633057 -0.182728, -0.669191 -0.722012 -0.17573, -0.471308 -0.863983 -0.17721, -0.181136 -0.980749 -0.0729482, + -0.110405 -0.898717 -0.424404, -0.247782 -0.218834 -0.943777, -0.141854 -0.148533 -0.97868, -0.141753 -0.140223 -0.97992, + -0.358884 -0.281023 -0.890072, -0.155343 -0.14243 -0.977539, -0.560019 -0.444375 -0.699221, -0.339559 -0.305284 -0.889664, + -0.546345 -0.465043 -0.696593, -0.760274 -0.620598 -0.191942, -0.692291 -0.574171 -0.437104, -0.754573 -0.57672 -0.31307, + -0.782822 -0.593737 -0.186188, -0.732054 -0.523905 -0.435454, -0.573891 -0.423498 -0.700927, -0.803042 -0.564987 -0.189506, + -0.177801 -0.284086 -0.942169, -0.0896146 -0.196991 -0.976301, -0.104633 -0.181907 -0.977733, -0.293629 -0.355611 -0.887312, + -0.123723 -0.172419 -0.977223, -0.401871 -0.594437 -0.696523, -0.20563 -0.413227 -0.887108, -0.329905 -0.637765 -0.696002, + -0.463213 -0.866399 -0.18651, -0.420216 -0.799308 -0.429563, -0.542267 -0.78031 -0.311549, -0.563021 -0.80427 -0.19015, + -0.597592 -0.67534 -0.432202, -0.471287 -0.547121 -0.69177, -0.654617 -0.731152 -0.192076, -0.473914 -0.880571 1.15396e-005, + -0.474557 -0.880225 -1.14386e-005, -0.576839 -0.816858 1.68642e-005, -0.577255 -0.816564 0, -0.670935 -0.741516 3.86843e-005, + -0.671163 -0.74131 1.93404e-005, -0.576407 -0.817163 4.26345e-005, -0.800008 -0.599989 1.59347e-005, + -0.777837 -0.628466 3.28392e-005, -0.777795 -0.628518 1.63918e-005, -0.799969 -0.600041 0, -0.82114 -0.570727 0, + -0.821175 -0.570677 1.49337e-005, -0.800046 -0.599939 3.14016e-005, -0.651505 -0.758645 -5.00916e-005, + -0.700217 -0.71393 -8.01968e-005, -0.766471 -0.642279 -6.78942e-005, -0.767255 -0.641342 2.84577e-005, + -0.649574 -0.760298 -8.35151e-005, -0.515702 -0.856768 -5.35915e-005, -0.401583 -0.915821 0.00137568, + -0.184734 -0.982786 0.00204332, -0.269617 -0.962968 -7.45685e-007, -0.404607 -0.91449 -0.0013779, + -0.0926702 -0.995696 -0.00102598, 0 -1 0, 0.337146 -0.941452 -3.33927e-005, 0.440351 -0.897826 -1.6097e-005, + 0.193725 -0.981056 0.000527288, 0.431798 -0.90197 -5.42652e-005, 0.694984 -0.719025 -0.000197306, + 0.187572 -0.982251 -0.000225967, 0.694924 -0.719083 0, 0.928591 -0.371105 -6.42647e-006, 0.973009 -0.230765 0.000542903, + 0.881791 -0.47164 1.83367e-005, 0.695266 -0.718753 -3.7736e-005, 0.886228 -0.46325 -4.23681e-005, + 0.991501 -0.130097 -9.32649e-005, 0.999367 -0.0355856 1.36177e-005, 0.99934 -0.0363296 -4.73413e-007, + 0.999377 -0.0353074 9.53426e-006, 0.999396 -0.0347511 1.36739e-006, -0.00301951 -0.0276072 0.999614, + -0.00606936 -0.019664 0.999788, -0.00120542 -0.0312922 0.99951, 0.000544862 -0.0314826 0.999504, + 4.11618e-005 -0.0346499 0.9994, 5.83924e-006 -0.0352552 0.999378, 2.53825e-005 -0.0352394 0.999379, + -1.87918e-005 -0.0353499 0.999375, 0.000407303 -0.0325731 0.999469, 0.00161845 -0.0274804 0.999621, + 1.84347e-005 -0.0349217 0.99939, -4.70027e-005 -0.0389681 0.99924, 0.000203985 -0.0337428 0.999431, + 7.84604e-005 -0.0391622 0.999233, 5.41048e-005 -0.0362409 0.999343, 0.000370029 -0.0326891 0.999466, + -3.30799e-005 -0.0351588 0.999382, -1.92681e-005 -0.0348148 0.999394, 0.000148344 -0.0448915 0.998992, + -9.88152e-006 -0.0347186 0.999397, 0 -0.0349459 0.999389, -2.49617e-005 -0.0339962 0.999422, + -1.27873e-005 -0.0339792 0.999423, 0.00112494 -0.0346616 0.999398, 0 -0.0370117 0.999315, -7.89069e-005 -0.0336687 0.999433, + 4.6564e-005 -0.034348 0.99941, -0.0027185 -0.999996 -1.36612e-005, -0.00597506 -0.999982 8.8676e-006, + -0.00324849 -0.999995 -0.000164309, -0.0112424 -0.999936 -0.00123327, -0.00808355 -0.999967 -0.000456685, + -0.0106155 -0.999942 -0.00172977, -0.00547855 -0.999985 0.000382983, -0.00768782 -0.99997 -0.000145781, + -0.0118399 -0.99993 -0.000228052, -0.0114331 -0.999935 -5.27009e-005, -0.00759366 -0.999971 -5.88315e-005, + -0.00746933 -0.999972 -0.000355479, -0.00557775 -0.999984 -8.8592e-005, -0.00289619 -0.999996 -0.000292144, + -0.0129522 -0.999916 3.17697e-005, -0.0125293 -0.999922 2.4604e-005, -0.0130811 -0.999914 5.94965e-005, + -0.00742828 -0.999972 0.000397, -0.0127938 -0.999918 0.000111558, -0.0164521 -0.999857 -0.00390958, + -0.0168696 -0.999854 -0.00260626, -0.00756286 -0.99997 0.00152693, -0.0178719 -0.99984 0.000148835, + -0.0172485 -0.999851 9.09886e-005, -0.0229785 -0.999733 -0.00261299, 0.00430904 -0.999984 0.00355876, + -0.00644701 -0.999978 0.0015631, -0.0134246 -0.99991 0, -0.887431 0 -0.460941, -0.963175 0 -0.268876, + -0.973096 0.0115308 -0.230111, -0.993783 0 -0.111332, -0.984772 0.0287175 -0.171462, -0.847902 -0.0181793 -0.529842, + -0.922064 0.0193413 -0.386555, -0.776995 0 -0.629506, -0.673726 0 -0.738981, -0.752865 -0.0108352 -0.658085, + -0.714674 -0.026998 -0.698937, -0.573564 -0.00115716 -0.81916, -0.573361 0 -0.819303, -0.573462 -0.00173574 -0.819231, + -0.573665 -0.00173574 -0.819088, -0.632555 0.00129673 -0.774515, -0.573594 0.000647962 -0.819139, + -0.573462 0.00173574 -0.819231, -0.573857 -0.0015276 -0.818954, -0.573711 0.000971944 -0.819058, + -0.96933 0.00651303 -0.245678, -0.958335 -0.0030118 -0.285632, -0.992691 -0.00231664 -0.120663, -0.919145 0.0139188 -0.393672, + -0.983734 0.0207108 -0.178431, -0.886501 -0.000543154 -0.462726, -0.84895 -0.0143618 -0.528278, -0.7527 -0.00757805 -0.65832, + -0.706092 -0.0213634 -0.707798, -0.781165 0.00167473 -0.624323, 0 1 0, 0 1 1.49686e-005, 0 1 2.99372e-005, 0 1 4.49057e-005, + -0.939048 0.343785 -0.000253787, -0.893225 0.449609 -0.000749237, -0.707079 0.707133 -0.00144843, + -0.980002 0.198951 0.00368688, -0.98133 0.19233 -0.00119929, -0.897898 0.440203 0.000346269, -0.706261 0.707952 7.12647e-005, + -0.343938 0.938992 0.00016922, -0.4496 0.89323 0.000116851, -0.198923 0.980005 0.00444454, -0.707308 0.706906 0, + -0.440415 0.897795 0.000192976, -0.191184 0.981553 -0.00138761, 0.185502 0.982638 0.00343635, 0.420694 0.907203 3.53629e-005, + 0.322612 0.946531 4.89736e-005, 0.668251 0.743935 -0.00130935, 0.179311 0.983792 -0.00115358, 0.413321 0.910585 -7.0086e-005, + 0.668428 0.743777 7.36693e-005, 0.667793 0.744347 -0.000537466, 0.857622 0.51428 -0.000520772, 0.958183 0.286139 0.0030628, + 0.907433 0.420197 -0.000309637, 0.86164 0.507519 -0.000192421, 0.95962 0.281298 -0.00128689, 0.995231 0.0952796 -0.0209194, + 0.994998 0.09144 -0.0402187, 0.996636 0.0803919 -0.0159339, 0.995707 0.0923093 0.0068086, 0.994539 0.104366 5.13058e-006, + 0.996745 0.0800321 -0.0097007, 0.999283 0.0368953 -0.00852589, 0.999692 0.0247968 -0.00104242, + 0.999978 0.00203087 -0.00638191, 0.998671 0.0497435 -0.013447, 0.998378 0.0537465 -0.0187701, 0.998121 0.0604224 -0.010198, + 0.996707 0.0808763 0.0058971, 0.997421 0.0714047 -0.00722862, 0.998156 0.0579893 -0.0179648, 0.998722 0.0505436 0, + 0.998287 0.0550953 -0.0196845, 0.999992 0.00405985 0, 0.999832 -0.0166103 -0.00771087, 0.999127 -0.041765 -0.000390133, + 0.999491 -0.0314195 -0.00546772, 0.998309 -0.0579181 -0.00493084, 0.998679 -0.0512483 -0.0037775, + 0.996745 -0.0800321 -0.0097007, 0.996632 -0.0804335 -0.015988, 0.994998 -0.09144 -0.0402187, 0.995187 -0.0957147 -0.0210276, + 0.995667 -0.0927397 0.00682456, 0.994407 -0.105612 5.19184e-006, 0.998156 -0.0579893 -0.0179648, + 0.998287 -0.0550953 -0.0196845, 0.998722 -0.0505436 0, 0.996695 -0.0810149 0.00602649, 0.997417 -0.0714795 -0.00709927, + 0.615273 -0.788314 0, 0.615273 0.788314 0, 0 0 1, 0.179313 -0.983791 -0.00127759, 0.413415 -0.910543 -0.00039171, + 0.322975 -0.946408 -4.89794e-005, 0.668509 -0.743703 -0.00127606, 0.185329 -0.98267 0.00350541, + 0.420987 -0.907067 0.000193829, 0.668055 -0.744112 7.37025e-005, 0.907727 -0.419561 -3.23399e-005, + 0.861948 -0.506997 -0.000200177, 0.960147 -0.279493 -0.00129835, 0.668482 -0.743729 -0.000538021, + 0.857896 -0.513824 -5.16859e-005, 0.958417 -0.28535 0.00343913, -0.615255 -0.788328 -0.000131664, + -0.615257 -0.788326 -0.000263328, -0.615252 -0.788331 0, 0.615255 -0.788328 -0.000131664, 0.615252 -0.788331 0, + 0.615257 -0.788326 -0.000263328, -1.04299e-005 -3.92122e-006 -1, 7.82246e-006 -2.94092e-006 -1, + -3.12898e-005 -1.17637e-005 -1, 0 -7.84244e-006 -1, 3.12898e-005 -1.17637e-005 -1, 0.865889 -0.500236 0, + -0.865889 -0.500236 0, -0.198556 -0.98008 0.00444328, -0.450148 -0.892954 8.20568e-005, -0.344215 -0.938891 -5.60981e-005, + -0.707178 -0.707034 -0.00147516, -0.191184 -0.981553 -0.00151918, -0.440503 -0.897751 -0.000147457, -0.706955 -0.707258 0, + -0.707354 -0.706859 7.11547e-005, -0.893001 -0.450055 0.000116848, -0.979992 -0.198987 0.00437353, + -0.938846 -0.344338 1.69783e-005, -0.897684 -0.440639 -6.92329e-005, -0.981505 -0.191431 -0.00153599, + 4.22665e-005 -0.034955 0.999389, -4.89839e-006 -0.0349827 0.999388, 0.000140017 -0.0349465 0.999389, + 5.96324e-005 -0.034953 0.999389, 0 -0.0351143 0.999383, 0.000318189 -0.0349173 0.99939, 0 -0.0352137 0.99938, + 0.00024047 -0.035031 0.999386, 0.000271024 -0.0349119 0.99939, 8.00039e-005 0.0348849 0.999391, + -4.87912e-005 0.0349647 0.999389, 6.17103e-006 0.0349891 0.999388, 0 0.0348212 0.999394, -0.000131466 0.0348728 0.999392, + -0.000108158 0.0348737 0.999392, -3.57858e-005 0.0351572 0.999382, -5.31961e-005 0.0349958 0.999388, 0 0.0351143 0.999383, + -1.84531e-005 0.034683 0.999398, 0 0.0344933 0.999405, -2.57558e-005 0.0351146 0.999383, 0.000143603 0.0448674 0.998993, + 6.48271e-005 0.0380348 0.999276, -6.62091e-005 0.0404251 0.999183, -1.82705e-005 0.0353108 0.999376, + -2.47966e-005 0.0339954 0.999422, -1.30903e-005 0.0339781 0.999423, -7.82364e-005 0.0336689 0.999433, 0 0.0370117 0.999315, + 4.59728e-005 0.0343477 0.99941, 5.98151e-006 0.035261 0.999378, 3.47103e-005 0.0352835 0.999377, + 4.11544e-005 0.0346499 0.9994, -0.00120543 0.0312922 0.99951, -0.00606936 0.019664 0.999788, -0.00301951 0.0276072 0.999614, + 0.00040894 0.0325692 0.999469, 0.000547047 0.0314774 0.999504, 0.000370029 0.0326891 0.999466, 0.000161801 0.0338293 0.999428, + 0.00112494 0.0346616 0.999398, 0.00162501 0.0274646 0.999621, 6.48894e-005 0.036523 0.999333, 0.999367 0.0355856 1.36177e-005, + 0.999377 0.0353074 9.53426e-006, 0.99934 0.0363296 -4.73413e-007, 0.999394 0.0347963 1.45381e-005, + 0.999396 0.0347511 1.36739e-006, 0.336988 0.0445449 -0.940455, 0.438972 0.0472133 -0.89726, 0.189042 0.0410299 -0.981111, + 0.706343 0.0491805 -0.706159, 0.436583 0.0457521 -0.8985, 0.189212 0.0405765 -0.981098, 0.707585 0.0492428 -0.70491, + 0.895976 0.0468543 -0.441623, 0.938718 0.0447402 -0.341769, 0.980492 0.0408001 -0.192277, 0.897266 0.046414 -0.439043, + 0.708383 0.0488 -0.704139, 0.980285 0.041067 -0.193273, -0.000133245 0.0356924 -0.999363, -0.000131151 0.0345827 -0.999402, + -4.3245e-005 0.0347419 -0.999396, -0.00228485 0.0339445 -0.999421, -7.44794e-005 0.0348039 -0.999394, + 0.000424278 0.0364002 -0.999337, 7.58792e-005 0.0353051 -0.999377, 1.55986e-005 0.0346754 -0.999399, + 8.05287e-005 0.034959 -0.999389, -5.72272e-005 0.0343358 -0.99941, 2.43591e-005 0.0350755 -0.999385, + 0.00246523 0.0298255 -0.999552, 0.00483305 0.0220519 -0.999745, 0.0024446 0.046533 -0.998914, 0.0137738 0.0698666 -0.997461, + 0.0105888 0.0619792 -0.998021, -0.00199893 0.0396336 -0.999212, 0.00015489 0.0264067 -0.999651, + -0.000176963 0.0331376 -0.999451, 0.00851417 0.00763705 -0.999935, -0.0662318 0.210301 -0.975391, + -0.101264 0.322211 -0.941236, -0.151593 0.434069 -0.888034, -0.0617895 0.21089 -0.975555, -0.224814 0.658982 -0.717775, + -0.0941416 0.401257 -0.911115, -0.0564847 0.230136 -0.971518, -0.0525289 0.252406 -0.966195, -0.117688 0.416814 -0.901341, + -0.200686 0.69102 -0.694418, -0.0947402 0.453242 -0.886338, -0.17083 0.718054 -0.674697, -0.243968 0.675343 -0.695982, + -0.304271 0.889302 -0.34141, -0.312183 0.845705 -0.43281, -0.322917 0.92916 -0.179964, -0.34381 0.920939 -0.183481, + -0.254143 0.878168 -0.405255, -0.270494 0.930418 -0.247298, -0.152581 0.704253 -0.693359, -0.194384 0.879692 -0.434, + -0.219798 0.896224 -0.38532, -0.216391 0.924622 -0.313447, -0.293086 0.353335 -0.8884, -0.126449 0.175857 -0.976261, + -0.179577 0.284044 -0.941844, -0.106168 0.182428 -0.97747, -0.0913912 0.197258 -0.976083, -0.210294 0.412212 -0.886486, + -0.405524 0.590231 -0.697981, -0.601966 0.672513 -0.430538, -0.471875 0.541528 -0.69576, -0.548487 0.777206 -0.308404, + -0.659836 0.728288 -0.184966, -0.568956 0.80197 -0.182025, -0.427918 0.794218 -0.431397, -0.33789 0.634606 -0.695058, + -0.470328 0.863384 -0.182645, -0.357135 0.278891 -0.891445, -0.159933 0.145094 -0.976406, -0.249867 0.219185 -0.943146, + -0.150563 0.146171 -0.977735, -0.149351 0.153453 -0.976804, -0.33759 0.301507 -0.891699, -0.559078 0.44146 -0.701815, + -0.732665 0.523199 -0.435276, -0.574226 0.422999 -0.700954, -0.756413 0.575019 -0.311757, -0.803626 0.564107 -0.189654, + -0.78443 0.591516 -0.18649, -0.695328 0.572096 -0.435, -0.544658 0.460271 -0.70107, -0.763475 0.617754 -0.188375, + -0.156904 0.684412 -0.712012, -0.0550768 0.461246 -0.885561, -0.0772671 0.331889 -0.940149, -0.0436633 0.211177 -0.976472, + -0.0173722 0.218434 -0.975697, -0.089837 0.716899 -0.691364, -0.0892262 0.18856 -0.978, -0.135937 0.154121 -0.978656, + -0.245695 0.310807 -0.918168, -0.18322 0.395009 -0.900221, -0.331338 0.640834 -0.692493, -0.224449 0.903952 -0.363995, + -0.34194 0.311151 -0.886714, -0.498609 0.544516 -0.674456, -0.110405 0.898717 -0.424404, -0.115647 0.976482 -0.181956, + -0.281684 0.942745 -0.178566, -0.439025 0.820816 -0.365401, -0.547272 0.82952 -0.111308, -0.657541 0.714375 -0.239391, + -0.684394 0.587582 -0.431686, -0.537227 0.47525 -0.696796, -0.723576 0.685618 -0.0797858, -0.681827 0.730895 0.0300638, + 2.65029e-007 0.361095 -0.932529, -0.000425933 0.45733 -0.889297, 6.51184e-005 0.218466 -0.975845, + -6.97429e-005 0.71913 -0.694876, 0.000426374 0.45733 -0.889297, -6.51859e-005 0.218466 -0.975845, 0 0.718 -0.696044, + -0.00055331 0.903884 -0.427778, -0.000149233 0.944031 -0.329856, 4.91634e-005 0.982514 -0.186187, + 0.000304573 0.904433 -0.426616, 0 0.71999 -0.693984, -0.000142061 0.982333 -0.187141, 0.317432 0.166199 -0.933603, + 0.192754 0.0765209 -0.978259, 0.170409 0.123442 -0.977611, 0.634571 0.283206 -0.719106, 0.432676 0.137684 -0.890974, + 0.49614 0.523242 -0.692866, 0.275371 0.285003 -0.91812, 0.138091 0.373621 -0.917245, 0.695639 0.191052 -0.692521, + 0.109857 0.177613 -0.977949, 0.0409487 0.215987 -0.975537, 0.0780711 0.400982 -0.912753, 0.0676079 0.202812 -0.976881, + 0.127405 0.663353 -0.737381, 0.283285 0.716258 -0.63775, 0.84482 0.413359 -0.339727, 0.876208 0.218615 -0.429496, + 0.597976 0.719469 -0.353254, 0.957166 0.225464 -0.181657, 0.897758 0.404955 -0.17333, 0.726144 0.665977 -0.170851, + 0.316441 0.89361 -0.318317, 0.185138 0.96678 -0.176238, 0.172921 0.892581 -0.416411, 0.425242 0.888583 -0.172014, + 0.694984 0.719025 -0.000197306, 0.881791 0.47164 1.83367e-005, 0.928591 0.371105 -6.42645e-006, 0.973009 0.230765 0.000542903, + 0.886228 0.46325 -4.23681e-005, 0.974541 0.224209 -0.000200216, 0.695266 0.718753 -3.7736e-005, + 0.440351 0.897826 -1.6097e-005, 0.337146 0.941452 -3.33927e-005, 0.193725 0.981056 0.000527288, + 0.431798 0.90197 -5.42652e-005, 0.694924 0.719083 0, 0.0942044 0.995553 -0.000113487, -0.286325 0.958133 4.76254e-005, + -0.221301 0.975205 2.27318e-005, -0.121987 0.992532 -2.27565e-006, -0.124795 0.992183 9.32535e-005, + -0.288865 0.95737 -9.74891e-006, -0.443219 0.896413 -1.16051e-005, -0.553141 0.833087 0.00135959, + -0.664352 0.74742 -4.11432e-007, -0.726223 0.687456 0.00201901, -0.55249 0.833519 -0.0013605, -0.776318 0.63034 -0.000996924, + -0.821929 0.56959 0, -0.801663 0.597776 2.09321e-005, -0.801669 0.597769 6.2796e-005, -0.80166 0.59778 0, + -0.780512 0.62514 3.283e-005, -0.730143 0.683295 -9.65203e-006, -0.582276 0.812991 -1.41449e-005, + -0.582308 0.812968 -4.24322e-005, -0.675783 0.737101 0, -0.582261 0.813002 0, -0.480291 0.877109 0, + -0.41602 0.909356 -0.000198294, -0.156987 0.9876 -0.000881857, -0.0957329 0.995406 -0.00132189, -0.12659 0.991952 -0.00243181, + -0.0597022 0.998215 -0.00161353, -0.205606 0.978633 -0.00200459, -0.352154 0.935942 0, -0.335665 0.941982 -6.06277e-005, + -0.315082 0.949064 -0.000422503, -0.28022 0.959936 0.00055508, -0.243248 0.969963 -0.00156484, -0.0142454 0.999898 -0.0011652, + 0.0434983 0.999053 0.000284784, 0.103286 0.994652 0.000110177, 0.0753752 0.997155 -0.000352276, + 0.172171 0.985067 -0.000382272, 0.00955402 0.999954 -9.20258e-006, 0.193379 0.981124 9.80616e-005, + 0.260597 0.965448 0.000247933, 0.266771 0.96376 8.4525e-005, 0.314165 0.949368 0.000481938, 0.130776 0.99141 -0.00210543, + -0.0562624 0.998416 -0.000116356, 0.306051 0.952015 0.000418358, 0.33065 0.943753 -4.0791e-005, 0.234573 0.972097 -0.00140463, + -0.0237013 0.457681 -0.8888, -0.0581007 0.777157 -0.626619, -0.0650491 0.556431 -0.828344, -0.0460029 0.906932 -0.418758, + -0.105716 0.896487 -0.430272, -0.0029924 0.227889 -0.973682, -0.00479811 0.929644 -0.368427, -0.0209073 0.903486 -0.428108, + -0.00273578 0.922734 -0.385427, -0.0197255 0.790196 -0.612537, -0.00077829 0.91733 -0.398126, -0.111854 0.964666 -0.238553, + -0.145935 0.944052 -0.295753, -0.169728 0.911232 -0.375298, -0.138111 0.82771 -0.543895, -0.16739 0.966748 -0.193337, + -0.104048 0.897913 0.427698, -0.111795 0.964773 -0.238149, -6.88574e-005 0.918598 -0.395194, -7.01156e-005 0.915457 -0.402415, + -0.000595297 0.920159 -0.391545, -0.0069264 0.978051 -0.208251, -0.00911516 0.975772 -0.218599, + -0.00885379 0.973038 -0.230476, -0.00139368 0.220277 -0.975436, -0.0031009 0.28569 -0.958317, -0.0025022 0.389117 -0.921185, + -0.0053305 0.57342 -0.819244, -0.00109039 0.211031 -0.977479, -0.00166005 0.385002 -0.922914, -0.0019394 0.740443 -0.672116, + -0.00476667 0.730054 -0.683373, -0.00515572 0.934215 -0.356673, -0.00782869 0.877929 -0.478727, -0.00125122 0.952198 -0.30548, + -0.033576 0.999404 -0.00806593, -0.0274679 0.99959 -0.00806008, -0.0178719 0.99984 0.000148835, -0.0323509 0.999403 -0.012092, + -0.0106375 0.999943 0.000997671, -0.0172497 0.999851 9.14114e-005, -0.0129522 0.999916 3.17697e-005, + -0.0130811 0.999914 5.94965e-005, -0.01184 0.99993 -0.000228332, -0.00597642 0.999981 0.00165087, + -0.0105277 0.999943 -0.00181814, -0.00995709 0.999948 -0.00233211, -0.00765344 0.999971 0.00011264, + -0.0115813 0.999933 -0.000942983, -0.0127951 0.999918 0.000110879, -0.00761399 0.999971 -5.99236e-005, + -0.00753548 0.999972 -0.000330918, -0.00770467 0.99997 -0.000146717, -0.00812896 0.999967 -0.000425728, + -0.0054987 0.999985 0.000382093, -0.0114678 0.999934 -5.35857e-005, -0.00584584 0.999983 3.55213e-005, + -0.00265907 0.999996 -5.19553e-005, -0.00295712 0.999996 -0.000131771, -0.0125293 0.999922 2.4604e-005, -0.0134246 0.99991 0, + -0.00531707 0.999986 1.33728e-005, -0.00270357 0.999996 -0.00023102, -0.98476 0.0291506 -0.171458, + -0.922057 0.0196329 -0.386555, -0.973094 0.0117047 -0.23011, -0.752754 -0.0107554 -0.658214, -0.847753 -0.0180462 -0.530084, + -0.714381 -0.0267984 -0.699243, -1.80512e-006 0.339766 -0.94051, 0.00224819 0.439928 -0.89803, 0.00597159 0.187198 -0.982304, + 4.73226e-006 0.707699 -0.706514, -0.0022512 0.439928 -0.89803, -0.00597957 0.187198 -0.982304, 0 0.704869 -0.709338, + -0.010354 0.898145 -0.439578, 8.30151e-006 0.93997 -0.341258, -0.00404776 0.979922 -0.199343, 0.0103679 0.898145 -0.439578, + 0.00405317 0.979921 -0.199343, -0.573584 0 -0.819146, -0.961193 0.00200478 -0.275871, -0.976105 -8.05366e-006 -0.217301, + -0.992202 0.00153792 -0.124631, -0.992202 -0.00154821 -0.124631, -0.961192 -0.00201819 -0.275871, + -0.906294 -3.26051e-006 -0.422649, -0.848448 -0.0153193 -0.529057, -0.708856 -0.0227506 -0.704987, + -0.766483 -6.04958e-005 -0.642265, -0.848449 0.0152177 -0.529058, -0.708858 0.0225997 -0.704989, + -6.98587e-006 0.940642 0.339401, -0.000975456 0.89935 0.437228, 0.00329527 0.981315 0.19238, -2.22043e-005 0.707424 0.70679, + 0.000963826 0.89935 0.437228, -0.00325598 0.981315 0.19238, 0 0.706707 0.707506, 0.00229225 0.437482 0.899224, + 1.64213e-005 0.338939 0.940808, 0.00593907 0.188817 0.981994, -0.00226492 0.437482 0.899224, -0.00586825 0.188817 0.981995, + 0.00397527 -0.126383 0.991974, 1.64213e-005 -0.338939 0.940808, 0.00229225 -0.437482 0.899224, + -2.04977e-005 -0.707611 0.706602, -0.00226492 -0.437482 0.899224, -0.00586825 -0.188817 0.981995, 0 -0.707082 0.707132, + -0.000169485 -0.899325 0.437281, -1.21394e-006 -0.940469 0.33988, 0.00392381 -0.981191 0.192997, + 0.000167465 -0.899325 0.437281, -0.00387702 -0.981192 0.192997, 0 -1 2.24529e-005, 0 -1 1.49686e-005, 0 -1 4.49057e-005, + 8.30151e-006 -0.93997 -0.341258, -0.010354 -0.898145 -0.439578, -0.00404776 -0.979922 -0.199343, + 4.7322e-006 -0.707699 -0.706514, 0.0103679 -0.898145 -0.439578, 0.00405317 -0.979921 -0.199343, 0 -0.704869 -0.709338, + 0.00224819 -0.439928 -0.89803, -1.80512e-006 -0.339766 -0.94051, 0.00597159 -0.187198 -0.982304, + -0.0022512 -0.439928 -0.89803, -0.00597957 -0.187198 -0.982304, -0.970959 0.00769705 -0.239124, -0.98347 0.0221701 -0.179706, + -0.920759 0.0149224 -0.389847, -0.992202 -0.00153792 -0.124631, -0.887633 -0.000347602 -0.460552, + -0.961193 -0.00200478 -0.275871, -0.848449 -0.0152177 -0.529058, -0.777432 0.00114441 -0.628966, + -0.666753 0.00128868 -0.745278, -0.708858 -0.0225997 -0.704989, -0.751229 -0.00838769 -0.659988, + -2.15614e-005 -1 6.97441e-005, -3.02406e-005 -1 7.36588e-005, -2.15634e-005 -1 1.86693e-005, 0 -1 -2.61233e-005, + 8.72153e-006 -1 -2.41346e-005, -1.94147e-005 -1 9.51789e-005, -7.76707e-006 -1 1.26514e-005, -7.76707e-006 1 1.26514e-005, + -3.02406e-005 1 7.36588e-005, -2.15614e-005 1 6.97441e-005, -2.15634e-005 1 1.86693e-005, -1.94147e-005 1 9.51789e-005, + 8.72153e-006 1 -2.41346e-005, 0 1 -2.61233e-005, -1 -6.35075e-005 0.000445143, -1 -6.35054e-005 0.000445142, + -1 -0.000127011 -4.35783e-009, -1 4.23384e-005 0.000593525, -1 -0.000127007 -5.90279e-009, -1 8.46739e-005 0.00029676, + -1 0.000127011 -4.35783e-009, -1 0.000127007 -5.90279e-009, 4.65239e-005 5.90884e-009 1, -1 -3.17516e-005 -1.58122e-005, + -1 3.17516e-005 -7.90509e-006, -1 4.23355e-005 -2.10829e-005, -1 0.000127007 8.03403e-009, -1 -6.35033e-005 -1.58102e-005, + -1 -0.000127007 8.03403e-009, -3.48713e-005 0 1, -2.70719e-010 -1 -4.64781e-005, 1.62082e-009 -1 -4.648e-005, + -2.16226e-009 -1 -4.64763e-005, -2.70719e-010 1 -4.64781e-005, -2.16226e-009 1 -4.64763e-005, 1.62082e-009 1 -4.648e-005, + 4.65239e-005 -5.90884e-009 1, -0.992691 -0.00229517 -0.120663, -0.974862 1.67653e-005 -0.222811, + -0.959658 -0.00152124 -0.281166, -0.958335 0.0030118 -0.285632, -0.992691 0.00231664 -0.120663, + -0.904545 0.00138361 -0.426375, -0.84895 0.0143618 -0.528278, -0.849347 -0.0116011 -0.527708, -0.766774 0.000433473 -0.641918, + -0.699919 -0.0222117 -0.713877, -0.704126 0.0204981 -0.70978, -0.0034107 0.189529 0.981869, -0.00472286 0.312443 0.949925, + -0.00775572 0.437522 0.899174, -0.00279875 0.183692 0.98298, -0.0125684 0.705062 0.709034, -0.0107578 0.705486 0.708642, + -0.0158497 0.898161 0.43938, -0.0150245 0.982022 0.18817, -0.0173087 0.981205 0.192193, -0.0144301 0.948563 0.316261, + -0.00549867 0.432733 0.901506, -0.00235934 0.191282 0.981532, -0.00904351 0.703038 0.711094, -0.0114703 0.897743 0.44037, + -0.196826 0.962427 0.187067, 0.403582 0.900016 0.164596, 0.333402 0.926979 0.17191, 0.34726 0.876553 0.333265, + 0.264463 0.678891 0.684958, 0.233911 0.883119 0.406677, 0.368604 0.820846 0.436283, 0.289818 0.644362 0.707674, + 0.181873 0.404364 0.896332, 0.135665 0.928928 0.344511, 0.223772 0.958264 0.177925, 0.110466 0.975257 0.191496, + 0.0216595 0.934328 0.355755, 0.0157186 0.981885 0.188823, 0.173214 0.652295 0.737908, 0.101029 0.719815 0.686775, + -0.0794769 0.98134 0.175086, 0.130564 0.351865 0.9269, 0.0755508 0.167947 0.982897, 0.0611631 0.171184 0.983339, + 0.0894677 0.365903 0.926342, 0.0464162 0.374587 0.926029, 0.042279 0.182243 0.982344, 0.0204723 0.183873 0.982737, + 0.0033669 0.687796 0.725896, 0.00486533 0.313709 0.949507, -0.192929 0.965897 0.172691, -0.0950174 0.91885 0.382996, + -0.201343 0.900068 0.386443, -0.0861825 0.703237 0.705713, -0.16756 0.688915 0.705209, -0.0345885 0.37355 0.926965, + -0.303499 0.937655 0.169388, -0.304754 0.874556 0.377197, -0.341656 0.82875 0.443221, -0.244126 0.662694 0.707982, + -0.266497 0.646398 0.714947, -0.11994 0.355823 0.926825, -0.0775766 0.365736 0.92748, -0.0146058 0.181955 0.983198, + -0.0353431 0.177357 0.983512, 0.00278974 0.185391 0.982661, -0.0556336 0.171916 0.983539, -0.166049 0.402115 0.900406, + -0.0713699 0.172503 0.98242, 0.409443 0.912335 -0.00136663, 0.338256 0.941053 -0.00125821, 0.367501 0.930023 -5.17386e-006, + 0.265584 0.964088 5.76702e-006, 0.409461 0.912327 0.00133618, 0.151888 0.988398 5.35476e-006, 0.22725 0.973836 -0.000375561, + 0.112839 0.993613 0.000393657, 0.338276 0.941046 0.00121608, 0.22728 0.97383 0.000327423, 0.0163794 0.999866 1.35018e-005, + 0.112853 0.993612 -0.000416281, 0.0161905 0.999869 0, 0.0161954 0.999869 0, -0.080045 0.996791 -0.000387604, + -0.119149 0.992876 -3.70685e-005, -0.194882 0.980826 -0.000742276, -0.0800246 0.996793 0.000335044, + -0.233795 0.972286 -4.26481e-005, -0.307107 0.951675 -0.000468335, -0.336745 0.941596 6.93976e-005, + -0.379005 0.925394 -0.000763443, -0.194962 0.980811 0.000524205, -0.30717 0.951655 0.000450703, -0.378962 0.925412 0.00083248, + -0.0901133 0.255481 -0.962605, -0.121078 0.380054 -0.917005, -0.0534719 0.210672 -0.976093, -0.209985 0.544386 -0.812127, + -0.0880991 0.405085 -0.910025, -0.0441437 0.409493 -0.911245, -0.0123867 0.217992 -0.975872, -0.0327296 0.214013 -0.976282, + -0.222721 0.671242 -0.706986, -0.15111 0.703757 -0.694185, -0.319445 0.801765 -0.505102, -0.29047 0.88422 -0.365761, + -0.0716364 0.716485 -0.693915, -0.000405884 0.412224 -0.911082, 0.00888443 0.722226 -0.6916, -0.178299 0.913264 -0.366277, + 0.00847592 0.214836 -0.976613, 0.0492144 0.209612 -0.976545, 0.028615 0.211825 -0.976889, 0.0852296 0.396818 -0.913932, + 0.0679706 0.210462 -0.975236, 0.118962 0.35781 -0.926186, 0.04291 0.406553 -0.912619, 0.0890094 0.715225 -0.693203, + 0.0245541 0.913644 -0.405774, 0.0792812 0.210837 -0.974301, 0.177546 0.427793 -0.886268, 0.167049 0.696603 -0.697738, + 0.2585 0.690542 -0.675521, -0.0732541 0.928179 -0.364853, -0.367112 0.906342 -0.209218, -0.226191 0.955917 -0.187246, + -0.115608 0.977671 -0.175482, 0.0159218 0.982793 -0.184024, -0.336053 0.928232 -0.159543, 0.118666 0.919899 -0.373772, + -0.375366 0.921273 -0.101769, 0.223249 0.901629 -0.370438, 0.147101 0.971874 -0.183909, 0.363278 0.826303 -0.43041, + 0.286155 0.662894 -0.691872, 0.335044 0.891459 -0.305035, 0.258393 0.949718 -0.176829, 0.347486 0.919915 -0.181689, + 0.399352 0.898049 -0.18446, 0.197672 0.276445 -0.940481, 0.104161 0.193822 -0.975491, 0.240556 0.397544 -0.885489, + 0.438775 0.569151 -0.695373, 0.308213 0.342889 -0.887374, 0.137378 0.170551 -0.975725, 0.119222 0.181523 -0.976133, + 0.380955 0.612308 -0.692786, 0.485362 0.7613 -0.429937, 0.591256 0.7454 -0.307888, 0.53242 0.826314 -0.183668, + 0.613625 0.768283 -0.182225, 0.625514 0.650048 -0.431475, 0.492287 0.522327 -0.696296, 0.697235 0.710696 -0.0936699, + 0.626622 0.779323 0, 0.701273 0.712893 0, 0.626622 0.779323 0, 0.545715 0.837971 0, 0.443423 0.551675 0.706421, + 0.495072 0.509573 0.703732, 0.627539 0.642367 0.439953, 0.688963 0.70019 0.187254, 0.615534 0.76555 0.18722, + 0.595138 0.739047 0.315627, 0.537333 0.823248 0.183129, 0.312369 0.318632 0.89493, 0.198235 0.246646 0.948614, + 0.132898 0.131463 0.982372, 0.493278 0.750065 0.440545, 0.388799 0.591374 0.706479, 0.244139 0.374702 0.894424, + 0.100624 0.158673 0.98219, 0.113769 0.140898 0.983466, 0.782516 -0.59868 0.171029, 0.756264 -0.532875 0.379616, + 0.71305 -0.546387 0.439342, 0.814871 -0.55301 0.173682, 0.860437 -0.481384 0.167086, 0.803934 -0.479084 0.352377, + 0.826192 -0.406627 0.38995, 0.630089 -0.365155 0.68531, 0.559781 -0.399638 0.725902, 0.562514 -0.431058 0.705526, + 0.351784 -0.269755 0.89637, 0.667768 -0.310175 0.676666, 0.85058 -0.323214 0.414785, 0.364636 -0.174672 0.91462, + 0.322691 -0.194719 0.926258, 0.899406 -0.405446 0.163346, 0.9313 -0.32575 0.162996, 0.906159 -0.165065 0.389397, + 0.955478 -0.242803 0.167658, 0.971342 -0.158002 0.177567, 0.887618 -0.244703 0.390198, 0.931519 -0.0924747 0.351741, + 0.979895 -0.0717802 0.186153, 0.633595 -0.242177 0.734784, 0.678292 -0.198267 0.707538, 0.933383 -0.0054664 0.358841, + 0.982571 0 0.185889, 0.979895 0.0717802 0.186153, 0.748801 -0.0678666 0.659311, 0.674185 -0.128422 0.727312, + 0.277067 -0.196625 0.940517, 0.145221 -0.111535 0.983092, 0.163548 -0.0734566 0.983797, 0.354939 -0.129278 0.925908, + 0.155423 -0.086756 0.984031, 0.147631 -0.100013 0.983973, 0.365605 -0.0977394 0.925624, 0.334873 -0.062407 0.940194, + 0.402169 -0.0375124 0.914797, 0.169694 -0.0590542 0.983726, 0.174627 -0.0440992 0.983647, 0.179474 -0.0289363 0.983337, + 0.182577 -0.0131842 0.983103, 0.685789 0.00543671 0.72778, 0.313661 0 0.949535, 0.918161 0.0835033 0.387309, + 0.971342 0.158002 0.177567, 0.906159 0.165065 0.389397, 0.955478 0.242803 0.167658, 0.887618 0.244703 0.390198, + 0.9313 0.32575 0.162996, 0.702125 0.0743687 0.708159, 0.693571 0.137165 0.70721, 0.376041 0.0310506 0.926082, + 0.678292 0.198267 0.707538, 0.862542 0.321891 0.390394, 0.365605 0.0977394 0.925624, 0.372549 0.0647688 0.92575, + 0.831587 0.395714 0.38971, 0.899406 0.405446 0.163346, 0.860437 0.481385 0.167086, 0.783668 0.464882 0.412006, + 0.814871 0.55301 0.173682, 0.763747 0.546851 0.342992, 0.782516 0.59868 0.171029, 0.658983 0.257438 0.70673, + 0.661251 0.323298 0.676924, 0.364636 0.174672 0.91462, 0.579596 0.407509 0.705694, 0.71305 0.546387 0.439342, + 0.588151 0.339009 0.73427, 0.354939 0.129278 0.925908, 0.182577 0.0131842 0.983103, 0.174627 0.0440992 0.983647, + 0.169694 0.0590542 0.983726, 0.179474 0.0289363 0.983337, 0.183 0 0.983113, 0.163548 0.0734566 0.983797, + 0.322691 0.194719 0.926258, 0.155423 0.086756 0.984031, 0.562514 0.431058 0.705526, 0.351784 0.269755 0.89637, + 0.277067 0.196625 0.940517, 0.147631 0.100013 0.983973, 0.145221 0.111535 0.983092, 0.312369 -0.318632 0.89493, + 0.132898 -0.131463 0.982372, 0.198235 -0.246646 0.948614, 0.495072 -0.509573 0.703732, 0.443423 -0.551675 0.706421, + 0.627539 -0.642367 0.439953, 0.595138 -0.739047 0.315627, 0.688963 -0.70019 0.187254, 0.113769 -0.140898 0.983466, + 0.100624 -0.158673 0.98219, 0.244139 -0.374702 0.894424, 0.493278 -0.750065 0.440545, 0.615534 -0.76555 0.18722, + 0.537333 -0.823248 0.183129, 0.388799 -0.591374 0.706479, 0.701273 -0.712893 0, 0.626622 -0.779323 0, 0.626622 -0.779323 0, + 0.545715 -0.837971 0, 0.137378 -0.170551 -0.975725, 0.308213 -0.342889 -0.887374, 0.197672 -0.276445 -0.940481, + 0.438775 -0.569151 -0.695373, 0.240556 -0.397544 -0.885489, 0.119222 -0.181523 -0.976133, 0.104161 -0.193822 -0.975491, + 0.380955 -0.612308 -0.692786, 0.492287 -0.522327 -0.696296, 0.625514 -0.650048 -0.431475, 0.591256 -0.7454 -0.307888, + 0.687065 -0.702249 -0.186516, 0.485362 -0.7613 -0.429937, 0.53242 -0.826314 -0.183668, 0.613625 -0.768283 -0.182225, + 0.0960352 -0.416659 -0.903976, 0.0286037 -0.211811 -0.976892, 0.049227 -0.209619 -0.976543, 0.11117 -0.324662 -0.939274, + 0.0679819 -0.210465 -0.975235, 0.0792812 -0.210837 -0.974301, 0.246684 -0.654006 -0.715139, 0.178018 -0.428947 -0.885615, + 0.286047 -0.662946 -0.691867, 0.18682 -0.721872 -0.666332, 0.323865 -0.882677 -0.340577, 0.0431553 -0.370318 -0.927902, + 0.363076 -0.825963 -0.431232, 0.0955726 -0.693681 -0.713914, -0.0123872 -0.217973 -0.975876, 0.00847905 -0.214882 -0.976603, + 0.0101877 -0.412911 -0.910714, -0.0327857 -0.214246 -0.976229, -0.0336486 -0.411854 -0.910628, -0.0773337 -0.405793 -0.910687, + -0.0534845 -0.210716 -0.976083, -0.125125 -0.408588 -0.904101, -0.0897829 -0.254734 -0.962834, 0.0142421 -0.721533 -0.692234, + 0.102762 -0.922736 -0.371481, -0.0658005 -0.71545 -0.695558, -0.209339 -0.542911 -0.81328, -0.235263 -0.714939 -0.658417, + -0.145974 -0.705739 -0.69327, 0.20794 -0.907233 -0.365635, 0.258604 -0.950259 -0.173585, 0.147092 -0.971806 -0.184272, + 0.0159226 -0.982732 -0.18435, 0.00526327 -0.913945 -0.405804, -0.0895019 -0.9269 -0.364481, 0.399352 -0.898049 -0.18446, + -0.374059 -0.919657 -0.11963, -0.362951 -0.928826 -0.0744934, -0.378348 -0.925663 0, 0.347438 -0.919933 -0.181688, + 0 -0.0357729 -0.99936, -0.115602 -0.977503 -0.176421, -0.194034 -0.909568 -0.367475, -0.320132 -0.80325 -0.5023, + -0.301397 -0.893902 -0.331811, -0.226235 -0.955868 -0.187443, -0.367372 -0.906969 -0.206024, -0.375342 -0.921625 -0.098616, + -0.370797 -0.913314 -0.168424, -0.374911 -0.921004 -0.1058, -0.362692 -0.876299 0.317102, -0.378889 -0.925442 -0.000960965, + -0.307113 -0.951673 -0.000649479, -0.336698 -0.941613 -6.80755e-005, -0.233838 -0.972275 -5.19261e-005, + -0.378962 -0.925412 0.00083248, -0.11914 -0.992878 1.11038e-005, -0.194968 -0.980809 -0.000636897, + -0.0800387 -0.996792 -0.00035368, 0.016385 -0.999866 2.84057e-005, -0.30717 -0.951655 0.000450703, + -0.194947 -0.980814 0.000549054, -0.0800131 -0.996794 0.000366737, 0.0161905 -0.999869 0, 0.11288 -0.993608 0.00048232, + 0.151869 -0.988401 3.05371e-005, 0.227218 -0.973844 -0.000486781, 0.112849 -0.993612 -0.0004166, + 0.265511 -0.964108 -6.83215e-005, 0.338217 -0.941067 -0.00150014, 0.367546 -0.930005 -7.53036e-005, + 0.409508 -0.912306 -0.00148256, 0.0161954 -0.999869 0, 0.227194 -0.973849 0.000403621, 0.338282 -0.941044 0.00128143, + 0.409583 -0.912272 0.00135267, -0.374484 -0.911946 0.16768, -0.303499 -0.937655 0.169388, -0.318595 -0.884101 0.341852, + -0.217531 -0.896641 0.385635, -0.341803 -0.829205 0.442255, -0.231619 -0.667636 0.707541, -0.140684 -0.69445 0.705654, + -0.266276 -0.646115 0.715285, -0.192927 -0.96598 0.172225, -0.0794722 -0.981423 0.174621, -0.11171 -0.917442 0.381865, + 0.00736316 -0.934814 0.355061, -0.0652624 -0.734625 0.675327, -0.0423755 -0.398499 0.916189, 0.0176749 -0.687163 0.726289, + 0.0157296 -0.981912 0.188682, -0.380357 -0.92484 0, -0.379984 -0.924993 0, -0.0882328 -0.363381 0.927453, + -0.16839 -0.407782 0.897418, -0.115136 -0.323901 0.939059, -0.0663838 -0.1771 0.981952, -0.0696257 -0.168184 0.983294, + -0.380544 -0.924763 0, -0.0354057 -0.177619 0.983462, -0.0146005 -0.181901 0.983208, 0.00280734 -0.185448 0.98265, + 0.00485469 -0.313675 0.949518, 0.279056 0.67868 0.679354, 0.110487 -0.975452 0.190488, 0.123697 -0.916828 0.379638, + 0.223743 -0.958372 0.177378, 0.107351 -0.697509 0.70849, 0.229703 -0.894669 0.383151, 0.0463941 -0.374395 0.926108, + 0.33238 -0.865523 0.37469, 0.333383 -0.926983 0.171924, 0.403698 -0.899972 0.164556, 0.251593 -0.638996 0.726901, + 0.191069 -0.708019 0.679855, 0.368253 -0.819977 0.43821, -0.0752261 -0.183035 0.980224, -0.0783544 -0.190854 0.978486, + -0.0841171 -0.204766 0.97519, 0.101127 -0.390474 0.915043, 0.0204827 -0.183965 0.982719, 0.0421951 -0.181931 0.982406, + 0.0612478 -0.171373 0.983301, 0.122752 -0.315526 0.940944, 0.289725 -0.644407 0.707672, 0.181853 -0.404467 0.89629, + -0.0736062 -0.178666 0.981153, 0.0756682 -0.16824 0.982838, 0.380544 0.924763 0, -0.0023593 -0.191294 0.98153, + -0.00472264 -0.312446 0.949924, -0.00549809 -0.432697 0.901523, -0.00279875 -0.183692 0.98298, -0.0107578 -0.705463 0.708665, + -0.0114698 -0.897745 0.440365, -0.0090449 -0.703026 0.711106, -0.0144304 -0.948566 0.31625, -0.012548 -0.979729 0.199935, + -0.00775572 -0.437522 0.899174, -0.0125684 -0.705062 0.709034, -0.0034107 -0.189529 0.981869, -0.0158509 -0.898143 0.439418, + -0.0173103 -0.98122 0.192113, -0.0150249 -0.982048 0.188031, 2.38212e-005 2.093e-005 1, 5.38488e-005 3.88946e-005 1, + -2.91925e-005 -3.56068e-006 1, 3.00276e-005 1.79646e-005 1, -6.40056e-005 -1.3716e-006 1, -3.4813e-005 2.18908e-006 1, + 2.3828e-005 -2.0936e-005 1, 5.38515e-005 -3.89143e-005 1, -3.4813e-005 -2.18908e-006 1, -6.40153e-005 1.36161e-006 1, + -2.92023e-005 3.55069e-006 1, 3.00235e-005 -1.79783e-005 1, 0.198377 -0.979733 -0.0277493, 0.376845 -0.925868 -0.0274893, + 0.287775 -0.957698 1.78043e-006, 0.0822803 -0.996262 -0.0263221, 0.106823 -0.994278 1.09577e-006, + 0.198377 -0.979733 0.0277521, 0.547003 -0.836754 0.0250978, 0.463392 -0.886153 8.05909e-006, 0.547001 -0.836756 -0.0250804, + 0.376845 -0.925868 0.0274992, 0.0822816 -0.996261 0.0263243, 0.760436 -0.649413 9.74708e-006, 0.826637 -0.561949 -0.0297613, + 0.822556 -0.568684 1.29375e-006, 0.693193 -0.720111 -0.0303962, 0.625665 -0.780092 1.53513e-005, + 0.67974 -0.733453 5.25821e-006, 0.693194 -0.720108 0.0304261, 0.965432 -0.260655 8.10989e-006, 0.927778 -0.372054 -0.0283533, + 0.981056 -0.191909 -0.0264474, 0.882524 -0.470268 6.88142e-006, 0.826636 -0.561948 0.0297949, 0.932305 -0.361674 1.75293e-006, + 0.927777 -0.372054 0.0283852, 0.981055 -0.191909 0.0264773, 0.993306 -0.115511 6.04318e-006, 0.999609 1.86968e-009 0.0279579, + 0.99961 -1.86968e-009 -0.0279264, 0.993306 0.115511 6.04318e-006, 0.981056 0.191909 -0.0264474, 0.965432 0.260655 8.1102e-006, + 0.927778 0.372054 -0.0283533, 0.981055 0.191909 0.0264773, 0.932305 0.361674 1.75293e-006, 0.882524 0.470268 6.88173e-006, + 0.927777 0.372054 0.0283852, 0.826637 0.561949 -0.0297613, 0.693193 0.720111 -0.0303962, 0.760436 0.649413 9.74708e-006, + 0.822556 0.568684 1.29375e-006, 0.547001 0.836756 -0.0250804, 0.625665 0.780092 1.53513e-005, 0.376845 0.925868 -0.0274893, + 0.463392 0.886153 8.05909e-006, 0.198377 0.979733 -0.0277493, 0.287775 0.957698 1.78043e-006, 0 0.999651 -0.0264116, + 0.106823 0.994278 1.09577e-006, 0.826636 0.561948 0.0297949, 0.67974 0.733453 5.25821e-006, 0.693194 0.720108 0.0304261, + 0.547003 0.836754 0.0250978, 0.198377 0.979733 0.0277521, 0.376845 0.925868 0.0274992, 0.0822816 0.996261 0.0263243, + -0.106823 0.994278 1.09577e-006, -0.198377 0.979733 -0.0277493, -0.287775 0.957698 1.78043e-006, + -0.376845 0.925868 -0.0274893, -0.198377 0.979733 0.0277521, -0.547003 0.836754 0.0250978, -0.463392 0.886153 8.05909e-006, + -0.547001 0.836756 -0.0250804, -0.376845 0.925868 0.0274992, -0.0822816 0.996261 0.0263243, -0.693193 0.720111 -0.0303962, + -0.826637 0.561949 -0.0297613, -0.760436 0.649413 9.74708e-006, -0.625665 0.780092 1.53513e-005, + -0.67974 0.733453 5.25821e-006, -0.693194 0.720108 0.0304261, -0.927778 0.372054 -0.0283533, -0.882524 0.470268 6.88142e-006, + -0.822556 0.568684 1.29375e-006, -0.981056 0.191909 -0.0264474, -0.965432 0.260655 8.10989e-006, -0.826636 0.561948 0.0297949, + -0.932305 0.361674 1.75293e-006, -0.927777 0.372054 0.0283852, -0.981055 0.191909 0.0264773, -0.993306 0.115511 6.04318e-006, + -0.999609 -1.86968e-009 0.0279579, -0.99961 1.86968e-009 -0.0279264, -0.981056 -0.191909 -0.0264474, + -0.927778 -0.372054 -0.0283533, -0.965432 -0.260655 8.1102e-006, -0.993306 -0.115511 6.04318e-006, + -0.981055 -0.191909 0.0264773, -0.932305 -0.361674 1.75293e-006, -0.882524 -0.470268 6.88173e-006, + -0.927777 -0.372054 0.0283852, -0.826637 -0.561949 -0.0297613, -0.376845 -0.925868 -0.0274893, + -0.463392 -0.886153 8.05909e-006, -0.547001 -0.836756 -0.0250804, -0.198377 -0.979733 -0.0277493, + -0.287775 -0.957698 1.78043e-006, -0.822556 -0.568684 1.29375e-006, -0.760436 -0.649413 9.74708e-006, + -0.693193 -0.720111 -0.0303962, -0.625665 -0.780092 1.53513e-005, -0.0822803 -0.996262 -0.0263221, + -0.106823 -0.994278 1.09577e-006, -0.826636 -0.561948 0.0297949, -0.67974 -0.733453 5.25821e-006, + -0.693194 -0.720108 0.0304261, -0.547003 -0.836754 0.0250978, -0.198377 -0.979733 0.0277521, -0.376845 -0.925868 0.0274992, + -0.0822816 -0.996261 0.0263243, -6.34449e-006 -4.14739e-005 1, -0.000155477 -8.93252e-006 1, -6.07886e-005 3.4409e-005 1, + -0.000110378 -2.21579e-005 1, -0.000225231 3.94514e-005 1, 4.00643e-005 -4.12151e-005 1, 1.65386e-005 4.99299e-005 1, + 3.2939e-005 -4.40572e-005 1, 2.14553e-007 -3.4991e-006 1, 0 1.79516e-005 1, -1.65386e-005 4.99299e-005 1, + -2.14553e-007 -3.4991e-006 1, -3.2939e-005 -4.40572e-005 1, 6.34449e-006 -4.14739e-005 1, -4.00643e-005 -4.12151e-005 1, + 6.07886e-005 3.4409e-005 1, 0.000155477 -8.93252e-006 1, 0.000110378 -2.21579e-005 1, 0.000225231 3.94514e-005 1, + -0.000110378 2.21579e-005 1, -0.000155477 8.93252e-006 1, -6.07886e-005 -3.4409e-005 1, -0.000225231 -3.94514e-005 1, + -6.34449e-006 4.14739e-005 1, 4.00643e-005 4.12151e-005 1, 3.2939e-005 4.40572e-005 1, 2.14553e-007 3.4991e-006 1, + 0 -1.79516e-005 1, 1.65386e-005 -4.99299e-005 1, -2.14553e-007 3.4991e-006 1, 0.000110378 2.21579e-005 1, + 0.000225231 -3.94514e-005 1, 0.000155477 8.93252e-006 1, -4.00643e-005 4.12151e-005 1, -3.2939e-005 4.40572e-005 1, + -1.65386e-005 -4.99299e-005 1, 6.34449e-006 4.14739e-005 1, 6.07886e-005 -3.4409e-005 1, 0.0808728 -0.990769 -0.108794, + 0.197908 -0.973483 -0.114732, 0.106799 -0.994279 0.00201611, 0.37459 -0.920741 -0.109171, 0.288466 -0.957488 0.00222475, + 0.197859 -0.973279 0.116533, 0.374291 -0.919986 0.116325, 0.46234 -0.886699 0.00263992, 0.543966 -0.832818 -0.102545, + 0.0803337 -0.990081 0.115264, 0.69696 -0.709418 -0.104756, 0.625881 -0.779918 0, 0.69696 -0.709417 0.104757, + 0.771196 -0.636597 5.3931e-007, 0.820845 -0.558124 -0.121293, 0.822665 -0.568526 1.22385e-007, 0.92207 -0.369592 -0.114842, + 0.882575 -0.470171 0.00113888, 0.975655 -0.191023 -0.107735, 0.965491 -0.260434 0.000671508, 0.543722 -0.832792 0.104044, + 0.820843 -0.557996 0.12189, 0.932175 -0.362002 0.00191786, 0.921796 -0.369428 0.117538, 0.975609 -0.191111 0.108003, + 0.993299 -0.115577 3.94503e-007, 0.993459 -1.35701e-005 0.114192, 0.993459 -1.35682e-005 -0.114189, + 0.975708 0.191033 -0.107239, 0.922077 0.369609 -0.11473, 0.965485 0.260457 0.00067156, 0.993301 0.115554 3.84448e-007, + 0.975661 0.191121 0.107507, 0.932175 0.362002 0.00191786, 0.882575 0.470171 0.00113888, 0.921803 0.369446 0.117425, + 0.820845 0.558124 -0.121293, 0.69696 0.709418 -0.104756, 0.771196 0.636597 5.39311e-007, 0.822665 0.568526 1.2145e-007, + 0.543966 0.832818 -0.102545, 0.625881 0.779918 0, 0.37459 0.920741 -0.109171, 0.46234 0.886699 0.00263992, + 0.197908 0.973483 -0.114732, 0.288466 0.957488 0.00222475, 1.88123e-009 0.994025 -0.109151, 0.106799 0.994279 0.00201611, + 0.820843 0.557996 0.12189, 0.69696 0.709417 0.104757, 0.543722 0.832792 0.104044, 0.374291 0.919986 0.116325, + 0.197859 0.973279 0.116533, 0.0803337 0.990081 0.115264, -0.197908 0.973483 -0.114732, -0.37459 0.920741 -0.109171, + -0.288466 0.957488 0.00222475, -0.106799 0.994279 0.00201611, -0.197859 0.973279 0.116533, -0.374291 0.919986 0.116325, + -0.46234 0.886699 0.00263992, -0.543966 0.832818 -0.102545, -0.0803337 0.990081 0.115264, -0.625881 0.779918 0, + -0.69696 0.709418 -0.104756, -0.771196 0.636597 5.3931e-007, -0.820845 0.558124 -0.121293, -0.69696 0.709417 0.104757, + -0.882575 0.470171 0.00113888, -0.92207 0.369592 -0.114842, -0.822665 0.568526 1.22385e-007, -0.965491 0.260434 0.000671508, + -0.975655 0.191023 -0.107735, -0.543722 0.832792 0.104044, -0.820843 0.557996 0.12189, -0.932175 0.362002 0.00191786, + -0.921796 0.369428 0.117538, -0.975609 0.191111 0.108003, -0.993299 0.115577 3.94503e-007, -0.993459 1.35701e-005 0.114192, + -0.993459 1.35682e-005 -0.114189, -0.993301 -0.115554 3.84448e-007, -0.975708 -0.191033 -0.107239, + -0.965485 -0.260457 0.00067156, -0.922077 -0.369609 -0.11473, -0.975661 -0.191121 0.107507, -0.932175 -0.362002 0.00191786, + -0.882575 -0.470171 0.00113888, -0.921803 -0.369446 0.117425, -0.820845 -0.558124 -0.121293, -0.771196 -0.636597 5.39311e-007, + -0.822665 -0.568526 1.2145e-007, -0.625881 -0.779918 0, -0.69696 -0.709418 -0.104756, -0.543966 -0.832818 -0.102545, + -0.288466 -0.957488 0.00222475, -0.37459 -0.920741 -0.109171, -0.197908 -0.973483 -0.114732, -0.46234 -0.886699 0.00263992, + -0.106799 -0.994279 0.00201611, -0.0808728 -0.990769 -0.108794, -0.820843 -0.557996 0.12189, -0.69696 -0.709417 0.104757, + -0.543722 -0.832792 0.104044, -0.374291 -0.919986 0.116325, -0.197859 -0.973279 0.116533, -0.0803337 -0.990081 0.115264, + -0.000179026 0.00028383 1, 0 -0.000104699 1, -1.03875e-005 -0.000112267 1, 3.15003e-005 -0.00032263 1, + -0.000842852 0.00102685 0.999999, -0.00016857 0.000242233 1, 0.000120407 0.000199354 1, -0.000120407 -0.000199354 1, + -3.15003e-005 -0.00032263 1, 1.03875e-005 -0.000112267 1, 0.000223782 0.000308709 1, 0.000842852 0.00102685 0.999999, + 0.00016857 -0.000242233 1, -0.000223782 -0.000308709 1, -0.000842852 -0.00102685 0.999999, -1.03875e-005 0.000112267 1, + 0 0.000104699 1, 3.15003e-005 0.00032263 1, 0.000179026 -0.00028383 1, 1.03875e-005 0.000112267 1, + 0.000842852 -0.00102685 0.999999, -3.15003e-005 0.00032263 1, 0.892479 0.451089 -0.000212396, 0.923758 0.382976 -0.000956221, + 0.793116 0.60907 -0.000812482, 0.881209 0.472726 -3.70564e-005, 0.973352 0.229314 -0.000492874, 0.983263 0.182182 -0.00188729, + 0.967199 0.254016 -0.00151691, 0.692107 0.721795 -0.000193113, 0.690002 0.723808 -0.000118689, + 0.431395 0.902163 -3.82035e-005, 0.352811 0.935694 -0.00032193, 0.184363 0.982858 -0.000481638, + 0.576346 0.817206 -0.000174982, 0.170811 0.985304 -9.58605e-005, 0.332214 0.943204 -3.91812e-005, 0.407978 0.18783 -0.893462, + 0.185341 0.0988669 -0.977688, 0.3045 0.109983 -0.946141, 0.192406 0.0830441 -0.977795, 0.190544 0.0634691 -0.979625, + 0.435804 0.090761 -0.895454, 0.680788 0.201399 -0.704248, 0.702591 0.12706 -0.700158, 0.655781 0.275368 -0.70294, + 0.915719 0.250767 -0.313965, 0.83422 0.339076 -0.434862, 0.914477 0.357245 -0.190021, 0.88907 0.139679 -0.435941, + 0.969961 0.149232 -0.192106, 0.94711 0.256938 -0.192262, 0.0764834 0.971223 -0.225558, 0.0284051 0.999233 -0.0269503, + 0.0270482 0.990212 -0.136928, 0.0945198 0.956351 -0.276511, 0.213823 0.920237 -0.327787, 0.105629 0.87138 -0.479103, + -0.537665 0.569354 -0.621894, -0.538525 0.544391 -0.64314, 0.224517 0.86005 -0.458155, 0.293277 0.682598 -0.669364, + 0.154847 0.747052 -0.64648, 0.174433 0.448306 -0.876695, 0.346401 0.450261 -0.822965, 0.519915 0.717154 -0.464089, + 0.282717 0.957384 -0.0590438, 0.266432 0.957574 0.109847, 0.268516 0.946189 -0.180626, 0.0429885 0.744668 -0.666049, + -0.249092 0.695616 -0.673848, 0.51317 0.520097 -0.682755, 0.726185 0.612648 -0.311957, 0.669294 0.648921 -0.361866, + -0.536226 0.593705 -0.59998, 0.806199 0.561927 -0.185151, 0.77484 0.629443 -0.0585189, 0.0763094 0.646562 -0.759035, + 0.653994 0.490554 -0.575889, 0.532101 0.84154 -0.093157, 0.491078 0.871091 0.00657046, 0.726761 0.683378 0.0693757, + 0.615255 0.788328 -0.000131665, 0.615252 0.78833 -0.000263329, 0.615257 0.788326 0, -0.615255 0.788328 -0.000131664, + -0.615252 0.788331 0, -0.615257 0.788326 -0.000263328, 0 -2.83284e-005 -1, -0.00494265 -0.982739 -0.184931, + -0.00302887 -0.983309 -0.181918, -0.0029839 -0.983396 -0.181447, 0.00106735 -0.276825 -0.96092, + -0.00170847 -0.40235 -0.915484, -0.00120644 -0.205806 -0.978592, -0.00086813 -0.601031 -0.799225, + -0.00230321 -0.294448 -0.955665, -0.00138413 -0.186929 -0.982372, -0.00723105 -0.720363 -0.693559, + -0.00435981 -0.744878 -0.667186, -0.00639918 -0.936748 -0.349945, -0.00314738 -0.902178 -0.431353, + -0.0100961 -0.949211 -0.314479, 0.291795 -0.427004 -0.855876, 0.0806683 -0.287192 -0.95447, 0.123896 -0.417422 -0.900227, + 0.238307 -0.643096 -0.727762, 0.504991 -0.743596 -0.438235, 0.271983 -0.931466 -0.241655, 0.208772 -0.865159 -0.455977, + -0.257662 -0.691587 -0.674773, 0.0384285 -0.744627 -0.666373, 0.131464 -0.863102 -0.487619, 0.122883 -0.977997 -0.168586, + 0.204563 -0.962888 -0.176072, 0.283182 -0.956826 -0.0655175, 0.269645 -0.94543 -0.182905, 0.151253 -0.988176 -0.0251186, + 0.389232 -0.770762 0.504405, 0.125093 -0.891575 -0.435253, 0.51317 -0.520097 -0.682755, 0.670481 -0.647325 -0.362527, + 0.726185 -0.612648 -0.311957, 0.726761 -0.683378 0.0693757, 0.77484 -0.629443 -0.0585189, 0.868853 -0.491116 -0.062441, + 0.534306 -0.840522 -0.0896624, 0.0775507 -0.6465 -0.758962, 0.490177 -0.871474 0.0161131, 0.653994 -0.490554 -0.575889, + -0.560027 -0.571919 -0.599399, -0.56129 -0.545129 -0.622727, -0.561843 -0.517649 -0.645269, 0.967199 -0.254016 -0.00151691, + 0.923443 -0.383733 -0.000968862, 0.973352 -0.229314 -0.000492874, 0.983263 -0.182182 -0.00188729, + 0.880749 -0.473583 1.53542e-005, 0.69231 -0.7216 -0.000225474, 0.793329 -0.608792 -0.000916057, + 0.577324 -0.816515 -0.000303651, 0.331171 -0.943571 -4.0342e-005, 0.170811 -0.985304 -9.58605e-005, + 0.353041 -0.935608 -0.000349911, 0.69 -0.72381 0, 0.431957 -0.901894 -2.83235e-006, 0.184363 -0.982858 -0.000481638, + -0.00130851 -0.981568 -0.191109, -0.00130971 -0.982473 -0.186401, -0.013957 -0.968073 -0.250279, + -0.0359895 -0.975243 -0.218189, -0.0485702 -0.936431 -0.347474, -0.139225 -0.974104 -0.178148, -0.135429 -0.941671 -0.308082, + -0.139216 -0.973154 -0.183274, -0.00129114 -0.980664 -0.195694, -0.0377366 -0.74563 -0.66529, -0.0656003 -0.851194 -0.520736, + -0.0316047 -0.80703 -0.589664, -0.0804609 -0.975773 -0.203452, -0.0763575 -0.57992 -0.811087, -0.0283811 -0.223035 -0.974397, + -0.0971722 -0.847929 -0.521128, -0.0971917 -0.847718 -0.521467, -0.0974695 -0.809138 -0.579479, + -0.0515271 -0.965897 -0.253747, -0.114078 -0.750199 -0.651298, -0.12116 -0.881066 -0.457212, -0.110875 -0.967068 0.229098, + 0.713591 -0.000746627 0.700562, 0.847045 -0.000526562 0.531521, 0.75385 -0.000303338 0.657047, 0.780159 1.69979e-005 0.625582, + 0.886953 3.4358e-006 0.46186, 0.670437 1.57521e-005 0.741967, 0.960184 -1.65934e-006 0.279367, 0.992666 -8.613e-007 0.120886, + 0.970969 0.000314835 0.239206, 0.921232 0.000527516 0.389013, 0.983405 0.000747834 0.181424, -0.971526 0.000212556 -0.236933, + -0.983583 0.000503726 -0.180453, -0.921645 0.000363378 -0.388035, -0.992683 -6.00521e-006 -0.120748, + -0.887775 8.80392e-006 -0.460278, -0.960949 -8.62584e-006 -0.276725, -0.847709 -0.000369446 -0.530461, + -0.780195 4.2657e-005 -0.625536, -0.754058 -0.000194056 -0.656808, -0.668869 -0.000343054 -0.74338, + -0.670957 3.28184e-005 -0.741497, -0.573423 0 -0.81926, 0.573497 0 0.819207] + } + coordIndex [ + 24, 23, 21, -1,53, 52, 25, -1,26, 25, 52, -1,25, 24, 21, -1,53, 25, 54, -1,23, 22, + 21, -1,56, 55, 25, -1,20, 25, 21, -1,56, 25, 20, -1,55, 54, 25, -1,56, 20, 57, -1, + 26, 51, 50, -1,26, 50, 49, -1,26, 48, 47, -1,49, 48, 26, -1,27, 26, 47, -1,26, 52, + 51, -1,19, 60, 59, -1,58, 57, 20, -1,27, 47, 62, -1,27, 62, 61, -1,61, 60, 19, -1, + 28, 61, 19, -1,59, 58, 20, -1,87, 86, 18, -1,18, 85, 84, -1,88, 87, 18, -1,18, 86, + 85, -1,17, 88, 18, -1,16, 15, 17, -1,14, 17, 15, -1,14, 13, 17, -1,89, 17, 13, -1, + 90, 89, 13, -1,89, 88, 17, -1,83, 18, 84, -1,19, 83, 82, -1,80, 19, 81, -1,82, 81, + 19, -1,70, 80, 79, -1,83, 19, 18, -1,13, 92, 91, -1,13, 91, 90, -1,79, 94, 71, -1, + 72, 94, 93, -1,13, 93, 92, -1,19, 80, 70, -1,19, 59, 20, -1,73, 93, 13, -1,28, 27, + 61, -1,30, 29, 39, -1,36, 30, 37, -1,37, 30, 38, -1,30, 36, 35, -1,30, 35, 34, -1, + 34, 0, 30, -1,30, 39, 38, -1,29, 40, 39, -1,43, 42, 6, -1,28, 41, 29, -1,29, 41, + 40, -1,42, 41, 6, -1,0, 33, 32, -1,0, 32, 31, -1,1, 0, 4, -1,46, 0, 31, -1,0, 34, + 33, -1,1, 4, 2, -1,5, 46, 45, -1,5, 45, 44, -1,0, 46, 5, -1,5, 4, 0, -1,4, 3, 2, -1, + 43, 5, 44, -1,5, 43, 6, -1,19, 70, 6, -1,41, 28, 6, -1,68, 6, 69, -1,69, 6, 70, -1, + 6, 68, 67, -1,67, 66, 7, -1,7, 6, 67, -1,70, 79, 71, -1,71, 94, 72, -1,12, 75, 74, -1, + 12, 74, 73, -1,93, 73, 72, -1,6, 28, 19, -1,7, 65, 64, -1,7, 63, 78, -1,64, 63, 7, -1, + 8, 78, 77, -1,7, 66, 65, -1,7, 78, 8, -1,11, 8, 12, -1,77, 76, 12, -1,75, 12, 76, -1, + 9, 8, 10, -1,11, 10, 8, -1,12, 8, 77, -1,13, 12, 73, -1,96, 95, 1049, -1,95, 1688, + 1049, -1,98, 97, 1051, -1,1050, 96, 1049, -1,1050, 97, 96, -1,98, 1051, 1052, -1, + 1689, 1049, 1688, -1,1690, 1051, 1050, -1,97, 1050, 1051, -1,1051, 1690, 1691, -1, + 1052, 1051, 1691, -1,1689, 1690, 1050, -1,1050, 1049, 1689, -1,99, 98, 1052, -1,1053, + 101, 100, -1,1692, 1053, 1052, -1,100, 1052, 1053, -1,1054, 101, 1053, -1,99, 1052, + 100, -1,1055, 103, 102, -1,101, 1054, 102, -1,1693, 1692, 1052, -1,1694, 1054, 1053, -1, + 1694, 1053, 1692, -1,1694, 1695, 1054, -1,1696, 1055, 1695, -1,1054, 1695, 1055, -1, + 103, 1055, 1696, -1,1055, 102, 1054, -1,1691, 1693, 1052, -1,104, 1697, 1056, -1, + 1697, 1696, 1056, -1,105, 104, 1057, -1,1058, 106, 105, -1,104, 1056, 1057, -1,106, + 1058, 1059, -1,1698, 1056, 1696, -1,1699, 1058, 1057, -1,105, 1057, 1058, -1,1058, + 1699, 1700, -1,1059, 1058, 1700, -1,1698, 1699, 1057, -1,1057, 1056, 1698, -1,107, + 106, 1059, -1,1060, 109, 108, -1,1701, 1060, 1059, -1,108, 1059, 1060, -1,1061, 109, + 1060, -1,107, 1059, 108, -1,110, 109, 1061, -1,111, 110, 1062, -1,1702, 1701, 1059, -1, + 1703, 1061, 1060, -1,1703, 1060, 1701, -1,1703, 1704, 1061, -1,1705, 1062, 1704, -1, + 1061, 1704, 1062, -1,111, 1062, 1705, -1,1062, 110, 1061, -1,1700, 1702, 1059, -1, + 122, 1706, 1707, -1,1706, 122, 121, -1,122, 1707, 1708, -1,1709, 121, 1710, -1,121, + 1709, 1706, -1,113, 112, 1711, -1,1708, 112, 122, -1,1711, 112, 1708, -1,1711, 1712, + 113, -1,1713, 1714, 113, -1,1712, 1713, 113, -1,113, 1714, 1715, -1,1710, 121, 1716, -1, + 1716, 121, 1717, -1,1718, 120, 1719, -1,120, 1718, 1717, -1,1720, 1719, 120, -1,1720, + 114, 1721, -1,121, 120, 1717, -1,115, 1720, 120, -1,1721, 114, 1715, -1,1720, 115, + 114, -1,1715, 114, 113, -1,115, 120, 116, -1,117, 120, 118, -1,120, 117, 116, -1, + 120, 119, 118, -1,124, 123, 126, -1,126, 125, 124, -1,123, 140, 126, -1,138, 142, + 141, -1,142, 138, 143, -1,140, 123, 141, -1,141, 123, 138, -1,126, 140, 139, -1,128, + 127, 129, -1,130, 129, 127, -1,127, 139, 130, -1,154, 131, 130, -1,131, 153, 152, -1, + 153, 131, 154, -1,154, 130, 139, -1,127, 126, 139, -1,138, 144, 143, -1,144, 138, + 137, -1,145, 144, 137, -1,145, 137, 146, -1,132, 135, 134, -1,146, 137, 136, -1,136, + 135, 146, -1,132, 134, 133, -1,150, 132, 131, -1,149, 132, 150, -1,150, 131, 151, -1, + 147, 146, 132, -1,148, 132, 149, -1,132, 148, 147, -1,146, 135, 132, -1,151, 131, + 152, -1,1722, 155, 1063, -1,155, 1723, 1063, -1,1724, 1725, 1065, -1,1064, 1722, + 1063, -1,1064, 1725, 1722, -1,1724, 1065, 1066, -1,1726, 1063, 1723, -1,1727, 1065, + 1064, -1,1725, 1064, 1065, -1,1065, 1727, 1728, -1,1066, 1065, 1728, -1,1726, 1727, + 1064, -1,1064, 1063, 1726, -1,1729, 1724, 1066, -1,1067, 1730, 1731, -1,1732, 1067, + 1066, -1,1731, 1066, 1067, -1,1068, 1730, 1067, -1,1729, 1066, 1731, -1,1069, 1733, + 1734, -1,1730, 1068, 1734, -1,1735, 1732, 1066, -1,1736, 1068, 1067, -1,1736, 1067, + 1732, -1,1736, 1737, 1068, -1,1738, 1069, 1737, -1,1068, 1737, 1069, -1,1733, 1069, + 1738, -1,1069, 1734, 1068, -1,1728, 1735, 1066, -1,1739, 1740, 1070, -1,1740, 1738, + 1070, -1,1741, 1739, 1071, -1,1072, 1742, 1741, -1,1739, 1070, 1071, -1,1742, 1072, + 1073, -1,1743, 1070, 1738, -1,1744, 1072, 1071, -1,1741, 1071, 1072, -1,1072, 1744, + 1745, -1,1073, 1072, 1745, -1,1743, 1744, 1071, -1,1071, 1070, 1743, -1,1746, 1742, + 1073, -1,1074, 1747, 1748, -1,1749, 1074, 1073, -1,1748, 1073, 1074, -1,1075, 1747, + 1074, -1,1746, 1073, 1748, -1,1750, 1747, 1075, -1,1751, 1750, 1076, -1,1752, 1749, + 1073, -1,1753, 1075, 1074, -1,1753, 1074, 1749, -1,1753, 1754, 1075, -1,1755, 1076, + 1754, -1,1075, 1754, 1076, -1,1751, 1076, 1755, -1,1076, 1750, 1075, -1,1745, 1752, + 1073, -1,166, 168, 167, -1,165, 1077, 166, -1,1078, 164, 163, -1,163, 162, 1079, -1, + 165, 164, 1077, -1,1080, 1079, 162, -1,168, 1077, 169, -1,1077, 168, 166, -1,169, + 1077, 1078, -1,1078, 1079, 170, -1,1079, 1078, 163, -1,171, 170, 1079, -1,171, 1079, + 1080, -1,1078, 170, 169, -1,1077, 164, 1078, -1,1080, 162, 161, -1,1081, 1080, 160, -1, + 160, 1080, 161, -1,159, 1081, 160, -1,1756, 1757, 1083, -1,1083, 158, 1756, -1,1082, + 159, 158, -1,156, 1757, 157, -1,1080, 173, 172, -1,173, 1080, 1081, -1,174, 173, + 1081, -1,1081, 1082, 174, -1,1082, 1083, 175, -1,1083, 1082, 158, -1,156, 175, 1083, -1, + 1083, 1757, 156, -1,1082, 175, 174, -1,1081, 159, 1082, -1,1080, 172, 171, -1,179, + 1084, 1758, -1,1084, 179, 178, -1,1758, 1085, 1759, -1,1085, 1758, 1084, -1,1085, + 1084, 177, -1,1084, 178, 177, -1,176, 1086, 1085, -1,1086, 1760, 1761, -1,1760, 1086, + 176, -1,1086, 1759, 1085, -1,1761, 1759, 1086, -1,1085, 177, 176, -1,202, 201, 192, -1, + 197, 199, 198, -1,190, 204, 203, -1,204, 190, 189, -1,189, 188, 204, -1,191, 203, + 202, -1,203, 191, 190, -1,199, 196, 195, -1,195, 194, 200, -1,196, 199, 197, -1,201, + 193, 192, -1,191, 202, 192, -1,201, 200, 193, -1,194, 193, 200, -1,199, 195, 200, -1, + 1762, 1763, 183, -1,1764, 184, 1763, -1,1763, 184, 183, -1,181, 1765, 1762, -1,181, + 1762, 182, -1,182, 1762, 183, -1,180, 1765, 181, -1,1766, 1767, 187, -1,204, 188, + 1767, -1,1767, 188, 187, -1,187, 1768, 1766, -1,186, 185, 1764, -1,184, 1764, 185, -1, + 186, 1768, 187, -1,1764, 1768, 186, -1,1769, 217, 1087, -1,1090, 1770, 1771, -1,1087, + 1771, 1769, -1,1090, 1771, 1087, -1,217, 216, 1087, -1,215, 1088, 1087, -1,1088, + 215, 214, -1,1088, 1090, 1087, -1,1090, 1091, 1093, -1,1091, 1090, 1088, -1,1093, + 1091, 1094, -1,1090, 1093, 1770, -1,1088, 1089, 1091, -1,1087, 216, 215, -1,1770, + 1093, 1772, -1,1773, 1772, 1096, -1,1772, 1093, 1096, -1,1774, 1773, 1099, -1,1102, + 1775, 1774, -1,1105, 1776, 1775, -1,1096, 1099, 1773, -1,1096, 1097, 1099, -1,1097, + 1096, 1094, -1,1097, 1094, 1095, -1,1102, 1099, 1100, -1,1102, 1103, 1105, -1,218, + 1105, 1106, -1,1105, 218, 1776, -1,1102, 1105, 1775, -1,1097, 1100, 1099, -1,1099, + 1102, 1774, -1,1093, 1094, 1096, -1,1091, 1092, 1094, -1,214, 213, 1089, -1,1092, + 1089, 212, -1,1089, 1092, 1091, -1,1092, 1095, 1094, -1,211, 1095, 1092, -1,209, + 1098, 1095, -1,1095, 1098, 1097, -1,213, 212, 1089, -1,1097, 1098, 1100, -1,210, + 209, 1095, -1,211, 210, 1095, -1,212, 211, 1092, -1,1098, 209, 208, -1,1100, 1101, + 1103, -1,1100, 1098, 1101, -1,1106, 1103, 1104, -1,1100, 1103, 1102, -1,1106, 220, + 219, -1,1107, 220, 1106, -1,1106, 219, 218, -1,1104, 1103, 1101, -1,1103, 1106, 1105, -1, + 1101, 207, 1104, -1,207, 1101, 208, -1,1104, 207, 206, -1,1107, 206, 205, -1,206, + 1107, 1104, -1,1107, 205, 220, -1,1104, 1107, 1106, -1,1098, 208, 1101, -1,1089, + 1088, 214, -1,228, 227, 1109, -1,229, 228, 1108, -1,1108, 1109, 231, -1,1109, 1108, + 228, -1,1110, 1109, 227, -1,1109, 1110, 232, -1,227, 226, 1110, -1,229, 1108, 230, -1, + 1114, 223, 222, -1,1113, 224, 223, -1,1111, 226, 225, -1,1110, 226, 1111, -1,225, + 224, 1112, -1,1115, 1114, 222, -1,1108, 231, 230, -1,1111, 233, 1110, -1,1109, 232, + 231, -1,232, 1110, 233, -1,234, 233, 1111, -1,1111, 1112, 234, -1,1112, 1113, 235, -1, + 1113, 1112, 224, -1,1114, 1113, 223, -1,1113, 1114, 236, -1,236, 235, 1113, -1,237, + 236, 1114, -1,237, 1114, 1115, -1,1112, 235, 234, -1,1111, 225, 1112, -1,1115, 222, + 221, -1,1777, 1778, 1117, -1,1779, 1777, 1116, -1,1115, 1116, 239, -1,1116, 1115, + 1779, -1,1117, 1116, 1777, -1,1116, 1117, 240, -1,1778, 1118, 1117, -1,1779, 1115, + 221, -1,1119, 1780, 1781, -1,1118, 1780, 1119, -1,1782, 1121, 1783, -1,1781, 1783, + 1120, -1,1122, 1782, 247, -1,1780, 1118, 1778, -1,1117, 1118, 241, -1,1115, 239, + 238, -1,242, 1118, 1119, -1,1116, 240, 239, -1,240, 1117, 241, -1,241, 1118, 242, -1, + 1119, 243, 242, -1,1120, 1121, 244, -1,1121, 1120, 1783, -1,1122, 1121, 1782, -1, + 1121, 1122, 245, -1,244, 243, 1120, -1,246, 245, 1122, -1,244, 1121, 245, -1,1122, + 247, 246, -1,1120, 243, 1119, -1,1119, 1781, 1120, -1,1115, 238, 237, -1,248, 1123, + 249, -1,1123, 248, 1784, -1,1126, 250, 249, -1,251, 250, 1129, -1,1126, 249, 1123, -1, + 1123, 1124, 1126, -1,1124, 1123, 1784, -1,1124, 1784, 1785, -1,1126, 1124, 1127, -1, + 1129, 1127, 1130, -1,1127, 1129, 1126, -1,1130, 1127, 1128, -1,251, 1129, 1132, -1, + 1124, 1125, 1127, -1,1126, 1129, 250, -1,1133, 1129, 1130, -1,1135, 253, 252, -1, + 1132, 252, 251, -1,254, 253, 1138, -1,1141, 255, 254, -1,1141, 256, 255, -1,252, + 1132, 1135, -1,1138, 1135, 1136, -1,1133, 1135, 1132, -1,1139, 1141, 1138, -1,1135, + 1138, 253, -1,1141, 258, 257, -1,1142, 258, 1141, -1,1141, 257, 256, -1,1136, 1135, + 1133, -1,1138, 1141, 254, -1,1132, 1129, 1133, -1,1130, 1131, 1133, -1,1786, 1125, + 1124, -1,1125, 1786, 1787, -1,1125, 1128, 1127, -1,1134, 1133, 1131, -1,1130, 1128, + 1131, -1,1131, 1128, 1788, -1,1133, 1134, 1136, -1,1125, 1789, 1128, -1,1786, 1124, + 1785, -1,1790, 1131, 1788, -1,1788, 1128, 1789, -1,1134, 1790, 1791, -1,1134, 1131, + 1790, -1,1136, 1134, 1137, -1,1789, 1125, 1787, -1,1137, 1134, 1791, -1,1139, 1137, + 1140, -1,1137, 1139, 1136, -1,1140, 1137, 1792, -1,1139, 1140, 1143, -1,1142, 1143, + 259, -1,1143, 1142, 1139, -1,259, 1143, 260, -1,1142, 259, 258, -1,1140, 1793, 1143, -1, + 1139, 1142, 1141, -1,1792, 1793, 1140, -1,1794, 1792, 1137, -1,1793, 260, 1143, -1, + 1137, 1791, 1794, -1,1136, 1139, 1138, -1,272, 271, 268, -1,270, 268, 271, -1,273, + 272, 267, -1,266, 274, 267, -1,276, 275, 265, -1,266, 275, 274, -1,273, 267, 274, -1, + 272, 268, 267, -1,270, 269, 268, -1,265, 275, 266, -1,263, 277, 264, -1,276, 265, + 264, -1,263, 262, 1795, -1,278, 277, 263, -1,276, 264, 277, -1,262, 261, 1795, -1, + 261, 1796, 1797, -1,1797, 1795, 261, -1,278, 263, 1795, -1,1796, 1798, 1799, -1,1800, + 1801, 1798, -1,1799, 1798, 1801, -1,1797, 1796, 1799, -1,1802, 1803, 1804, -1,1798, + 1803, 1800, -1,1804, 1805, 1806, -1,1800, 1803, 1802, -1,1804, 1806, 1807, -1,1806, + 1805, 1808, -1,1807, 1802, 1804, -1,282, 1144, 1809, -1,1144, 282, 281, -1,1809, + 1145, 1810, -1,1145, 1809, 1144, -1,1145, 1144, 280, -1,1144, 281, 280, -1,279, 1146, + 1145, -1,1146, 1811, 1812, -1,1811, 1146, 279, -1,1146, 1810, 1145, -1,1812, 1810, + 1146, -1,1145, 280, 279, -1,288, 290, 289, -1,290, 288, 291, -1,288, 289, 304, -1, + 287, 292, 291, -1,291, 288, 287, -1,288, 304, 1813, -1,283, 288, 284, -1,284, 288, + 285, -1,302, 1814, 303, -1,1814, 1815, 304, -1,1813, 304, 1815, -1,1813, 285, 288, -1, + 303, 1814, 304, -1,287, 294, 293, -1,294, 287, 295, -1,295, 286, 296, -1,286, 295, + 287, -1,297, 296, 286, -1,286, 1816, 297, -1,301, 300, 1817, -1,302, 301, 1817, -1, + 299, 298, 1817, -1,1816, 1817, 298, -1,298, 297, 1816, -1,299, 1817, 300, -1,302, + 1817, 1814, -1,293, 292, 287, -1,315, 314, 313, -1,315, 312, 311, -1,315, 313, 312, -1, + 324, 309, 325, -1,326, 325, 309, -1,309, 324, 310, -1,311, 310, 322, -1,323, 310, + 324, -1,322, 321, 315, -1,315, 336, 335, -1,336, 315, 321, -1,315, 311, 322, -1,315, + 334, 316, -1,335, 334, 315, -1,310, 323, 322, -1,316, 334, 333, -1,328, 327, 308, -1, + 305, 329, 328, -1,308, 327, 309, -1,308, 307, 305, -1,306, 305, 307, -1,308, 305, + 328, -1,329, 305, 320, -1,331, 330, 316, -1,332, 316, 333, -1,316, 332, 331, -1,330, + 317, 316, -1,320, 319, 318, -1,318, 317, 320, -1,317, 330, 329, -1,329, 320, 317, -1, + 327, 326, 309, -1,1818, 337, 1147, -1,337, 1819, 1147, -1,1820, 1818, 1148, -1,1149, + 1821, 1820, -1,1818, 1147, 1148, -1,1821, 1149, 1150, -1,1822, 1147, 1819, -1,1823, + 1149, 1148, -1,1820, 1148, 1149, -1,1149, 1823, 1824, -1,1150, 1149, 1824, -1,1822, + 1823, 1148, -1,1148, 1147, 1822, -1,1825, 1821, 1150, -1,1151, 1826, 1827, -1,1828, + 1151, 1150, -1,1827, 1150, 1151, -1,1152, 1826, 1151, -1,1825, 1150, 1827, -1,1829, + 1826, 1152, -1,1830, 1829, 1153, -1,1831, 1828, 1150, -1,1832, 1152, 1151, -1,1832, + 1151, 1828, -1,1832, 1833, 1152, -1,1834, 1153, 1833, -1,1152, 1833, 1153, -1,1830, + 1153, 1834, -1,1153, 1829, 1152, -1,1824, 1831, 1150, -1,1835, 1836, 1154, -1,1836, + 1834, 1154, -1,1837, 1838, 1156, -1,1155, 1835, 1154, -1,1155, 1838, 1835, -1,1837, + 1156, 1157, -1,1839, 1154, 1834, -1,1840, 1156, 1155, -1,1838, 1155, 1156, -1,1156, + 1840, 1841, -1,1157, 1156, 1841, -1,1839, 1840, 1155, -1,1155, 1154, 1839, -1,1842, + 1837, 1157, -1,1158, 1843, 1844, -1,1845, 1158, 1157, -1,1844, 1157, 1158, -1,1159, + 1843, 1158, -1,1842, 1157, 1844, -1,1160, 1846, 1847, -1,1843, 1159, 1847, -1,1848, + 1845, 1157, -1,1849, 1159, 1158, -1,1849, 1158, 1845, -1,1849, 1850, 1159, -1,1851, + 1160, 1850, -1,1159, 1850, 1160, -1,1846, 1160, 1851, -1,1160, 1847, 1159, -1,1841, + 1848, 1157, -1,1852, 338, 1161, -1,338, 1853, 1161, -1,1854, 1852, 1162, -1,1163, + 1855, 1854, -1,1852, 1161, 1162, -1,1855, 1163, 1164, -1,1856, 1161, 1853, -1,1857, + 1163, 1162, -1,1854, 1162, 1163, -1,1163, 1857, 1858, -1,1164, 1163, 1858, -1,1856, + 1857, 1162, -1,1162, 1161, 1856, -1,1859, 1855, 1164, -1,1165, 1860, 1861, -1,1862, + 1165, 1164, -1,1861, 1164, 1165, -1,1166, 1860, 1165, -1,1859, 1164, 1861, -1,1863, + 1860, 1166, -1,1864, 1863, 1167, -1,1865, 1862, 1164, -1,1866, 1166, 1165, -1,1866, + 1165, 1862, -1,1866, 1867, 1166, -1,1868, 1167, 1867, -1,1166, 1867, 1167, -1,1864, + 1167, 1868, -1,1167, 1863, 1166, -1,1858, 1865, 1164, -1,1869, 1870, 1168, -1,1870, + 1868, 1168, -1,1871, 1872, 1170, -1,1169, 1869, 1168, -1,1169, 1872, 1869, -1,1871, + 1170, 1171, -1,1873, 1168, 1868, -1,1874, 1170, 1169, -1,1872, 1169, 1170, -1,1170, + 1874, 1875, -1,1171, 1170, 1875, -1,1873, 1874, 1169, -1,1169, 1168, 1873, -1,1876, + 1871, 1171, -1,1172, 1877, 1878, -1,1879, 1172, 1171, -1,1878, 1171, 1172, -1,1173, + 1877, 1172, -1,1876, 1171, 1878, -1,1174, 1880, 1881, -1,1877, 1173, 1881, -1,1882, + 1879, 1171, -1,1883, 1173, 1172, -1,1883, 1172, 1879, -1,1883, 1884, 1173, -1,1885, + 1174, 1884, -1,1173, 1884, 1174, -1,1880, 1174, 1885, -1,1174, 1881, 1173, -1,1875, + 1882, 1171, -1,1886, 1175, 1887, -1,1175, 1886, 1888, -1,1175, 1888, 1176, -1,342, + 1175, 1176, -1,1889, 1886, 1887, -1,342, 1890, 1175, -1,1175, 1890, 1887, -1,1176, + 1888, 1891, -1,1176, 1892, 1177, -1,1892, 1176, 1891, -1,1177, 341, 340, -1,341, + 1177, 1892, -1,1176, 1177, 343, -1,343, 1177, 344, -1,344, 1177, 339, -1,1177, 340, + 339, -1,1176, 343, 342, -1,1893, 351, 350, -1,1893, 350, 1178, -1,1178, 350, 349, -1, + 352, 1894, 1178, -1,1178, 353, 352, -1,1179, 353, 1178, -1,1894, 1893, 1178, -1,1178, + 349, 1179, -1,1179, 348, 347, -1,1180, 347, 346, -1,1180, 346, 345, -1,1179, 354, + 353, -1,354, 1179, 1180, -1,345, 1895, 1180, -1,1895, 345, 1896, -1,1180, 1895, 354, -1, + 1179, 347, 1180, -1,348, 1179, 349, -1,1181, 359, 358, -1,1181, 1184, 1182, -1,357, + 1181, 358, -1,1184, 1181, 357, -1,356, 355, 1187, -1,357, 356, 1184, -1,1184, 356, + 1187, -1,364, 1188, 365, -1,365, 1188, 1187, -1,355, 365, 1187, -1,1184, 1187, 1185, -1, + 1182, 359, 1181, -1,361, 360, 1182, -1,359, 1182, 360, -1,1183, 361, 1182, -1,1897, + 362, 1183, -1,361, 1183, 362, -1,1898, 1897, 1183, -1,1186, 1183, 1182, -1,363, 1189, + 1188, -1,1185, 1188, 1186, -1,364, 363, 1188, -1,1187, 1188, 1185, -1,1189, 1898, + 1186, -1,1182, 1185, 1186, -1,363, 1899, 1189, -1,1898, 1189, 1899, -1,1188, 1189, + 1186, -1,1186, 1898, 1183, -1,1184, 1185, 1182, -1,1900, 370, 369, -1,1901, 369, + 1902, -1,369, 1901, 1900, -1,1902, 369, 371, -1,366, 372, 371, -1,374, 377, 375, -1, + 373, 382, 374, -1,373, 372, 366, -1,369, 366, 371, -1,377, 374, 382, -1,382, 373, + 366, -1,366, 369, 367, -1,382, 381, 378, -1,375, 377, 376, -1,378, 380, 379, -1,378, + 377, 382, -1,380, 378, 381, -1,367, 369, 368, -1,383, 1903, 1190, -1,1190, 1904, + 1905, -1,391, 1190, 1905, -1,1190, 1903, 1904, -1,1190, 1191, 383, -1,1190, 391, + 1191, -1,385, 384, 1191, -1,386, 385, 1192, -1,1192, 385, 1191, -1,386, 1192, 387, -1, + 390, 1191, 391, -1,388, 1192, 389, -1,1191, 390, 389, -1,387, 1192, 388, -1,1191, + 389, 1192, -1,384, 383, 1191, -1,1193, 392, 1906, -1,1194, 392, 1193, -1,1907, 1193, + 1908, -1,1906, 1908, 1193, -1,1193, 1907, 1194, -1,393, 392, 1194, -1,394, 1194, + 1195, -1,393, 1194, 394, -1,395, 394, 1195, -1,1909, 1194, 1910, -1,1909, 396, 1195, -1, + 395, 1195, 396, -1,1909, 1195, 1194, -1,1907, 1910, 1194, -1,1196, 1911, 1912, -1, + 1196, 398, 397, -1,1199, 1197, 1196, -1,398, 1196, 1197, -1,1197, 399, 398, -1,1911, + 1196, 397, -1,1913, 1196, 1912, -1,1202, 1199, 1914, -1,1913, 1914, 1199, -1,1202, + 1915, 1916, -1,1199, 1202, 1200, -1,1916, 1203, 1202, -1,1914, 1915, 1202, -1,1199, + 1196, 1913, -1,1197, 1199, 1200, -1,1198, 400, 399, -1,1198, 1200, 1201, -1,1198, + 1197, 1200, -1,1198, 401, 400, -1,399, 1197, 1198, -1,1201, 401, 1198, -1,401, 1201, + 402, -1,1204, 1203, 1917, -1,1200, 1203, 1201, -1,1203, 1918, 1917, -1,1204, 1201, + 1203, -1,1916, 1918, 1203, -1,404, 403, 1204, -1,402, 1201, 1204, -1,1917, 404, 1204, -1, + 1204, 403, 402, -1,1202, 1203, 1200, -1,1205, 405, 1919, -1,1206, 405, 1205, -1,1920, + 1205, 1921, -1,1919, 1921, 1205, -1,1205, 1920, 1206, -1,406, 405, 1206, -1,407, + 1206, 1207, -1,406, 1206, 407, -1,408, 407, 1207, -1,1922, 1206, 1923, -1,1922, 409, + 1207, -1,408, 1207, 409, -1,1922, 1207, 1206, -1,1920, 1923, 1206, -1,1208, 410, + 1924, -1,1211, 1208, 1925, -1,410, 1208, 1209, -1,1209, 411, 410, -1,1925, 1208, + 1924, -1,1209, 1208, 1212, -1,1926, 1927, 1214, -1,1925, 1926, 1211, -1,1211, 1926, + 1214, -1,1214, 1928, 1215, -1,1211, 1214, 1212, -1,1928, 1929, 1215, -1,1215, 1212, + 1214, -1,1927, 1928, 1214, -1,1212, 1208, 1211, -1,1216, 1611, 1213, -1,1212, 1210, + 1209, -1,1209, 1210, 412, -1,413, 412, 1210, -1,1210, 1212, 1213, -1,1210, 414, 413, -1, + 415, 414, 1210, -1,1216, 1213, 1215, -1,1213, 1212, 1215, -1,416, 1216, 1930, -1, + 1215, 1930, 1216, -1,1213, 1611, 415, -1,1929, 1930, 1215, -1,1216, 416, 1611, -1, + 415, 1210, 1213, -1,412, 411, 1209, -1,1217, 1931, 1932, -1,1933, 1217, 1934, -1, + 1218, 1217, 1933, -1,1932, 1934, 1217, -1,1217, 417, 1931, -1,418, 417, 1218, -1, + 420, 419, 1219, -1,1218, 419, 418, -1,1219, 421, 420, -1,1935, 1218, 1936, -1,1218, + 1933, 1936, -1,422, 1219, 1935, -1,1218, 1935, 1219, -1,421, 1219, 422, -1,1219, + 419, 1218, -1,417, 1217, 1218, -1,1220, 1937, 1938, -1,1939, 1220, 1940, -1,1221, + 1220, 1939, -1,1938, 1940, 1220, -1,1220, 1941, 1937, -1,1942, 1941, 1221, -1,1943, + 1944, 1222, -1,1221, 1944, 1942, -1,1222, 423, 1943, -1,1945, 1221, 1946, -1,1221, + 1939, 1946, -1,424, 1222, 1945, -1,1221, 1945, 1222, -1,423, 1222, 424, -1,1222, + 1944, 1221, -1,1941, 1220, 1221, -1,1947, 1948, 1223, -1,1223, 1948, 1949, -1,1950, + 1223, 1951, -1,1951, 1223, 1949, -1,1950, 1952, 1223, -1,1223, 1952, 1947, -1,1224, + 1953, 1954, -1,1224, 1954, 1955, -1,1224, 1956, 1957, -1,1956, 1224, 1955, -1,1957, + 1958, 1224, -1,1224, 1958, 1953, -1,1959, 1225, 1960, -1,1961, 1960, 1225, -1,1225, + 1962, 1961, -1,1226, 1963, 1962, -1,1964, 1963, 1227, -1,1226, 1227, 1963, -1,1225, + 1959, 1226, -1,1965, 1226, 1959, -1,1965, 1966, 1227, -1,1964, 1227, 1966, -1,1965, + 1227, 1226, -1,1962, 1225, 1226, -1,1966, 1967, 1968, -1,1968, 1969, 1966, -1,1228, + 1970, 1971, -1,1228, 1972, 1229, -1,1973, 1228, 1971, -1,1228, 1973, 1972, -1,1972, + 1974, 1229, -1,1229, 1970, 1228, -1,1230, 1975, 1976, -1,1229, 1976, 1977, -1,1974, + 1978, 1229, -1,1230, 1229, 1978, -1,1978, 1979, 1230, -1,1975, 1230, 1979, -1,1230, + 1976, 1229, -1,1970, 1229, 1977, -1,1980, 425, 1981, -1,1982, 1979, 1981, -1,1980, + 1981, 1979, -1,438, 437, 436, -1,439, 438, 436, -1,435, 434, 1983, -1,1983, 434, + 1984, -1,435, 1983, 436, -1,441, 436, 1983, -1,439, 441, 440, -1,439, 436, 441, -1, + 1985, 428, 443, -1,428, 1985, 1986, -1,443, 442, 1985, -1,428, 427, 443, -1,442, + 441, 1983, -1,1985, 442, 1983, -1,1984, 433, 1987, -1,1986, 429, 428, -1,1988, 1989, + 1987, -1,1988, 1987, 433, -1,1986, 1990, 431, -1,427, 426, 443, -1,1991, 432, 1990, -1, + 431, 430, 1986, -1,432, 431, 1990, -1,429, 1986, 430, -1,1984, 434, 433, -1,1992, + 1993, 1231, -1,459, 452, 451, -1,453, 452, 1232, -1,452, 459, 457, -1,454, 453, 1232, -1, + 455, 1232, 1612, -1,456, 1231, 1993, -1,456, 1994, 1231, -1,456, 1993, 1612, -1,1994, + 1992, 1231, -1,1232, 452, 457, -1,1995, 458, 457, -1,457, 1613, 1995, -1,1232, 455, + 454, -1,1612, 1993, 455, -1,460, 451, 450, -1,457, 1612, 1232, -1,445, 447, 446, -1, + 449, 448, 463, -1,445, 444, 447, -1,444, 448, 447, -1,461, 460, 449, -1,457, 459, + 1613, -1,459, 451, 460, -1,444, 463, 448, -1,463, 462, 449, -1,461, 449, 462, -1, + 460, 450, 449, -1,1995, 1613, 1996, -1,1234, 1997, 1233, -1,1233, 469, 468, -1,1997, + 469, 1233, -1,1234, 1998, 1997, -1,1233, 468, 467, -1,467, 466, 1234, -1,466, 465, + 1235, -1,1235, 464, 1998, -1,1235, 1234, 466, -1,464, 1235, 465, -1,1235, 1998, 1234, -1, + 467, 1234, 1233, -1,1999, 2000, 2001, -1,470, 2002, 1999, -1,2001, 470, 1999, -1, + 475, 472, 471, -1,474, 473, 475, -1,472, 475, 473, -1,1236, 477, 476, -1,2003, 1236, + 2004, -1,1236, 2003, 1237, -1,476, 2004, 1236, -1,1237, 477, 1236, -1,477, 1237, + 478, -1,478, 1237, 1238, -1,479, 478, 1238, -1,2002, 1238, 2005, -1,1237, 2005, 1238, -1, + 479, 1238, 2002, -1,2003, 2005, 1237, -1,488, 487, 486, -1,486, 485, 2006, -1,488, + 486, 2007, -1,2007, 486, 2008, -1,2009, 2008, 486, -1,2006, 2009, 486, -1,485, 2010, + 2006, -1,2011, 2010, 484, -1,484, 2010, 485, -1,2011, 484, 483, -1,2012, 483, 482, -1, + 2012, 2011, 483, -1,2013, 481, 480, -1,481, 2013, 482, -1,2012, 482, 2013, -1,489, + 495, 490, -1,495, 489, 496, -1,497, 496, 489, -1,498, 497, 489, -1,489, 499, 498, -1, + 491, 490, 494, -1,1614, 492, 491, -1,1614, 491, 1615, -1,1616, 1615, 491, -1,490, + 495, 494, -1,492, 1614, 493, -1,500, 499, 504, -1,501, 504, 502, -1,504, 501, 500, -1, + 502, 504, 2014, -1,499, 489, 504, -1,1621, 503, 2015, -1,2014, 2015, 503, -1,2013, + 1618, 1622, -1,503, 502, 2014, -1,491, 1617, 1616, -1,494, 1617, 491, -1,1625, 1621, + 1626, -1,1623, 1619, 1624, -1,1622, 1618, 1623, -1,2013, 1622, 2016, -1,1623, 1618, + 1619, -1,1624, 1619, 1620, -1,1620, 1625, 1624, -1,1621, 1625, 1620, -1,2015, 1626, + 1621, -1,1239, 509, 1240, -1,510, 509, 1239, -1,2017, 1239, 2018, -1,1239, 2017, + 510, -1,1240, 2018, 1239, -1,1240, 509, 508, -1,1241, 1240, 507, -1,507, 1240, 508, -1, + 1241, 507, 506, -1,2019, 1240, 2020, -1,1241, 505, 2020, -1,505, 1241, 506, -1,1240, + 1241, 2020, -1,1240, 2019, 2018, -1,511, 516, 515, -1,512, 515, 514, -1,515, 512, + 511, -1,2021, 2022, 514, -1,514, 513, 512, -1,513, 514, 2022, -1,522, 521, 1242, -1, + 1242, 521, 1243, -1,522, 1242, 2023, -1,1242, 2024, 2023, -1,2024, 1242, 1243, -1, + 2024, 1243, 2025, -1,521, 520, 1243, -1,519, 518, 1244, -1,519, 1244, 1243, -1,2025, + 1243, 2026, -1,1244, 517, 2026, -1,517, 1244, 518, -1,1244, 2026, 1243, -1,1243, + 520, 519, -1,542, 2027, 526, -1,2028, 2029, 542, -1,2030, 526, 2027, -1,527, 539, + 528, -1,540, 1627, 541, -1,539, 527, 540, -1,526, 2030, 541, -1,526, 525, 2028, -1, + 541, 1627, 526, -1,2031, 2028, 525, -1,525, 524, 2031, -1,526, 2028, 542, -1,524, + 523, 2032, -1,524, 2032, 2031, -1,527, 1627, 540, -1,538, 528, 539, -1,537, 536, + 529, -1,529, 528, 537, -1,2033, 1628, 536, -1,537, 528, 538, -1,2034, 530, 2033, -1, + 2035, 2036, 530, -1,2034, 2035, 530, -1,2037, 2036, 535, -1,532, 534, 533, -1,531, + 2037, 2038, -1,2037, 531, 530, -1,530, 1628, 2033, -1,531, 2038, 532, -1,530, 2036, + 2037, -1,532, 2038, 534, -1,536, 1628, 529, -1,2039, 543, 2040, -1,2040, 2041, 2039, -1, + 544, 2042, 2043, -1,2043, 2044, 544, -1,546, 2045, 2046, -1,2045, 546, 2047, -1,2046, + 2048, 546, -1,2047, 545, 2049, -1,545, 2047, 546, -1,2050, 2049, 545, -1,2047, 2051, + 2045, -1,2052, 2053, 547, -1,547, 2054, 2052, -1,550, 2055, 2054, -1,2055, 550, 2056, -1, + 2056, 549, 2057, -1,549, 2056, 550, -1,548, 2057, 549, -1,2058, 2059, 2060, -1,2060, + 2061, 2058, -1,2062, 2063, 2064, -1,2064, 2065, 2062, -1,2066, 2067, 1245, -1,1245, + 2067, 1246, -1,551, 1245, 2068, -1,1245, 551, 2066, -1,1246, 2068, 1245, -1,1246, + 2067, 2069, -1,1247, 1246, 2070, -1,2070, 1246, 2069, -1,1247, 2070, 2071, -1,2072, + 1246, 2073, -1,1247, 2074, 2073, -1,2074, 1247, 2071, -1,1246, 1247, 2073, -1,1246, + 2072, 2068, -1,2075, 558, 557, -1,2075, 557, 559, -1,557, 555, 559, -1,555, 557, + 556, -1,559, 555, 2076, -1,552, 2077, 2078, -1,554, 552, 2076, -1,552, 554, 553, -1, + 2076, 552, 2078, -1,554, 2076, 555, -1,2079, 560, 2080, -1,560, 2079, 561, -1,562, + 2081, 2082, -1,2082, 2080, 562, -1,564, 563, 2083, -1,2084, 564, 2085, -1,2083, 2085, + 564, -1,2086, 2085, 2083, -1,2083, 563, 565, -1,2087, 2088, 2089, -1,2089, 566, 2087, -1, + 2090, 2091, 568, -1,568, 567, 2090, -1,569, 2092, 2093, -1,2093, 2094, 569, -1,2095, + 2096, 2097, -1,2098, 2097, 2096, -1,2099, 2100, 1248, -1,1248, 2100, 1249, -1,2099, + 1248, 2101, -1,1248, 2102, 2101, -1,2102, 1248, 1249, -1,2102, 1249, 2103, -1,2100, + 2104, 1249, -1,2105, 2106, 1250, -1,2105, 1250, 1249, -1,2103, 1249, 2107, -1,1250, + 2108, 2107, -1,2108, 1250, 2106, -1,1250, 2107, 1249, -1,1249, 2104, 2105, -1,2109, + 2110, 2111, -1,2110, 2109, 2112, -1,2111, 2113, 2109, -1,2114, 2115, 2116, -1,2114, + 2117, 2112, -1,2117, 2114, 2116, -1,2112, 2117, 2110, -1,2118, 2119, 2120, -1,2120, + 2121, 2118, -1,2119, 2122, 2120, -1,2123, 2124, 2125, -1,2125, 2122, 2123, -1,2126, + 2125, 2124, -1,2123, 2122, 2119, -1,2127, 2128, 2129, -1,574, 580, 575, -1,2129, + 578, 2127, -1,581, 580, 572, -1,571, 570, 581, -1,572, 571, 581, -1,574, 573, 580, -1, + 572, 580, 573, -1,2130, 578, 2129, -1,579, 2130, 2131, -1,2130, 579, 578, -1,579, + 2131, 2132, -1,2132, 2133, 2134, -1,579, 2132, 2135, -1,2136, 2132, 2134, -1,576, + 575, 2137, -1,580, 2137, 575, -1,576, 2137, 577, -1,2136, 2138, 2135, -1,2139, 579, + 2135, -1,2137, 579, 2139, -1,2136, 2135, 2132, -1,580, 579, 2137, -1,583, 2140, 584, -1, + 2140, 583, 582, -1,2141, 2140, 582, -1,1251, 587, 586, -1,1252, 587, 1251, -1,593, + 1251, 585, -1,586, 585, 1251, -1,1251, 593, 1252, -1,588, 587, 1252, -1,589, 1252, + 1253, -1,588, 1252, 589, -1,590, 589, 1253, -1,591, 1252, 592, -1,591, 2142, 1253, -1, + 590, 1253, 2142, -1,591, 1253, 1252, -1,593, 592, 1252, -1,601, 594, 612, -1,2143, + 610, 609, -1,601, 611, 610, -1,601, 612, 611, -1,597, 596, 598, -1,595, 594, 598, -1, + 601, 598, 594, -1,595, 598, 596, -1,606, 609, 608, -1,609, 606, 2143, -1,605, 604, + 603, -1,606, 605, 2143, -1,603, 602, 605, -1,601, 610, 2143, -1,599, 598, 600, -1, + 600, 598, 601, -1,2143, 605, 602, -1,606, 608, 607, -1,2144, 1254, 613, -1,2145, + 1254, 2144, -1,613, 1254, 1255, -1,1260, 2146, 2147, -1,2145, 2146, 1254, -1,1254, + 2146, 1257, -1,1260, 1258, 1257, -1,1254, 1257, 1255, -1,2147, 622, 1260, -1,2146, + 1260, 1257, -1,1260, 622, 1261, -1,1255, 614, 613, -1,1256, 1255, 1258, -1,614, 1255, + 615, -1,615, 1255, 1256, -1,1257, 1258, 1255, -1,617, 616, 1256, -1,615, 1256, 616, -1, + 1259, 1256, 1258, -1,617, 1256, 618, -1,621, 620, 1261, -1,1262, 1261, 620, -1,622, + 621, 1261, -1,1262, 618, 1259, -1,1256, 1259, 618, -1,620, 619, 1262, -1,618, 1262, + 619, -1,1261, 1262, 1259, -1,1259, 1258, 1261, -1,1260, 1261, 1258, -1,623, 2148, + 1263, -1,1263, 2149, 2150, -1,2151, 1263, 2150, -1,1263, 2148, 2149, -1,1263, 1264, + 623, -1,1263, 2151, 1264, -1,625, 624, 1264, -1,1265, 626, 625, -1,627, 626, 1265, -1, + 1264, 1265, 625, -1,2152, 1265, 1264, -1,2153, 1264, 2151, -1,2152, 628, 1265, -1, + 1264, 2153, 2152, -1,627, 1265, 628, -1,624, 623, 1264, -1,629, 2154, 1266, -1,1266, + 2155, 2156, -1,2157, 1266, 2156, -1,1266, 2154, 2155, -1,1266, 1267, 629, -1,1266, + 2157, 1267, -1,631, 630, 1267, -1,1268, 632, 631, -1,633, 632, 1268, -1,1267, 1268, + 631, -1,2158, 1268, 1267, -1,2159, 1267, 2157, -1,2158, 634, 1268, -1,1267, 2159, + 2158, -1,633, 1268, 634, -1,630, 629, 1267, -1,1270, 635, 1269, -1,2160, 1269, 2161, -1, + 635, 2161, 1269, -1,1270, 636, 635, -1,2162, 1269, 2160, -1,2162, 2163, 1275, -1, + 1272, 1269, 2162, -1,1272, 2162, 1275, -1,1272, 1275, 1273, -1,1271, 1270, 1273, -1, + 2163, 2164, 1275, -1,1275, 2164, 1276, -1,1276, 1273, 1275, -1,1270, 1272, 1273, -1, + 1272, 1270, 1269, -1,1270, 637, 636, -1,1271, 638, 637, -1,639, 638, 1271, -1,1271, + 1273, 1274, -1,1274, 639, 1271, -1,640, 639, 1274, -1,1277, 1276, 2165, -1,1274, + 1273, 1276, -1,1276, 2166, 2165, -1,1277, 1274, 1276, -1,2164, 2166, 1276, -1,2165, + 641, 1277, -1,641, 1629, 1277, -1,1277, 640, 1274, -1,1277, 1629, 640, -1,637, 1270, + 1271, -1,1278, 642, 2167, -1,1279, 642, 1278, -1,2168, 1278, 2169, -1,2167, 2169, + 1278, -1,1278, 2168, 1279, -1,643, 642, 1279, -1,644, 1279, 1280, -1,643, 1279, 644, -1, + 645, 644, 1280, -1,2170, 1279, 2171, -1,2170, 646, 1280, -1,645, 1280, 646, -1,2170, + 1280, 1279, -1,2168, 2171, 1279, -1,1281, 2172, 2173, -1,1282, 2174, 1281, -1,2172, + 1281, 2174, -1,1285, 1284, 1287, -1,1281, 1284, 1282, -1,1282, 2175, 2174, -1,2173, + 1284, 1281, -1,2176, 1284, 2173, -1,2177, 2178, 1287, -1,2176, 2179, 1287, -1,1287, + 2178, 2180, -1,1288, 1287, 2180, -1,2179, 2177, 1287, -1,1287, 1284, 2176, -1,1282, + 1284, 1285, -1,1282, 1283, 2181, -1,1283, 1285, 1286, -1,1283, 1282, 1285, -1,1283, + 2182, 2181, -1,2181, 2175, 1282, -1,1283, 647, 2182, -1,647, 1283, 648, -1,1289, + 1286, 1288, -1,1285, 1288, 1286, -1,650, 1289, 2183, -1,1288, 2183, 1289, -1,1289, + 649, 1286, -1,2180, 2183, 1288, -1,1286, 649, 648, -1,1289, 650, 649, -1,648, 1283, + 1286, -1,1287, 1288, 1285, -1,1291, 2184, 1290, -1,1290, 2184, 2185, -1,2186, 1290, + 2187, -1,2185, 2187, 1290, -1,1290, 2186, 1291, -1,2188, 2184, 1291, -1,2189, 1291, + 1292, -1,2188, 1291, 2189, -1,2190, 2189, 1292, -1,2191, 1291, 2192, -1,2191, 2193, + 1292, -1,2190, 1292, 2193, -1,2191, 1292, 1291, -1,2186, 2192, 1291, -1,2193, 2194, + 2195, -1,2195, 2196, 2193, -1,2197, 1293, 2198, -1,2199, 2198, 1293, -1,1293, 2200, + 2199, -1,1293, 2197, 1294, -1,2201, 2200, 1294, -1,1295, 2201, 1294, -1,2202, 2201, + 1295, -1,2203, 1294, 2197, -1,2203, 2204, 1295, -1,2202, 1295, 2204, -1,2203, 1295, + 1294, -1,2200, 1293, 1294, -1,2205, 2204, 1296, -1,1296, 2204, 2206, -1,2205, 1296, + 2207, -1,2208, 2209, 1296, -1,2207, 1296, 2209, -1,1296, 2206, 2208, -1,1297, 2210, + 2209, -1,2209, 2211, 1297, -1,1297, 2212, 2213, -1,1297, 2214, 2210, -1,1297, 2213, + 2214, -1,2212, 1297, 2211, -1,653, 652, 2215, -1,1630, 2215, 652, -1,654, 653, 2215, -1, + 2214, 2216, 2217, -1,2214, 2217, 2218, -1,2218, 2219, 2220, -1,2219, 2218, 2217, -1, + 2220, 2219, 654, -1,654, 2215, 2220, -1,1630, 2221, 2215, -1,2222, 2223, 1298, -1, + 1298, 2223, 1299, -1,2222, 1298, 651, -1,1299, 2224, 1300, -1,1300, 2225, 2226, -1, + 2224, 2225, 1300, -1,2224, 1299, 2223, -1,1298, 1299, 2227, -1,1298, 2221, 651, -1, + 1298, 2227, 2221, -1,2221, 1631, 651, -1,2226, 2228, 1300, -1,2228, 2226, 2229, -1, + 2228, 2230, 1300, -1,2230, 2227, 1299, -1,1300, 2230, 1299, -1,1631, 2221, 1630, -1, + 657, 1301, 2231, -1,1301, 1637, 1302, -1,658, 657, 2231, -1,1636, 1303, 1635, -1, + 656, 1301, 657, -1,1303, 656, 1632, -1,1632, 1635, 1303, -1,1303, 1301, 656, -1,1302, + 1633, 2232, -1,2231, 1301, 1302, -1,1637, 1303, 1636, -1,2232, 2233, 2234, -1,2235, + 2233, 2232, -1,1302, 2232, 2234, -1,2236, 1302, 1637, -1,1302, 2236, 1633, -1,2231, + 1302, 2234, -1,1301, 1303, 1637, -1,1638, 1632, 1634, -1,1639, 1632, 1638, -1,1632, + 1639, 1635, -1,659, 1640, 1641, -1,2237, 662, 1304, -1,1304, 662, 661, -1,2238, 1304, + 2239, -1,2240, 2239, 1304, -1,1304, 2238, 2237, -1,1304, 661, 1305, -1,1306, 660, + 1640, -1,1306, 1305, 660, -1,660, 1305, 661, -1,2240, 1306, 655, -1,1306, 2240, 1305, -1, + 655, 1306, 659, -1,1640, 659, 1306, -1,1305, 2240, 1304, -1,666, 663, 677, -1,664, + 663, 665, -1,677, 676, 2241, -1,666, 665, 663, -1,2242, 1642, 670, -1,2241, 666, + 677, -1,2241, 676, 2243, -1,674, 668, 667, -1,1642, 669, 670, -1,668, 674, 669, -1, + 2243, 676, 667, -1,667, 676, 675, -1,2244, 1643, 1307, -1,673, 670, 669, -1,673, + 669, 674, -1,672, 671, 1307, -1,2245, 2246, 1308, -1,673, 672, 1307, -1,670, 1307, + 1643, -1,1307, 671, 2244, -1,2247, 2242, 670, -1,673, 1307, 670, -1,2248, 1642, 2242, -1, + 1643, 2244, 2245, -1,2245, 2249, 1643, -1,2250, 2249, 1308, -1,2245, 1308, 2249, -1, + 2246, 2250, 1308, -1,667, 675, 674, -1,2251, 2252, 1309, -1,678, 1309, 679, -1,1310, + 679, 1309, -1,1309, 678, 2251, -1,1309, 2252, 1310, -1,1311, 1310, 2253, -1,2253, + 1310, 2252, -1,1311, 2253, 2254, -1,680, 1311, 2255, -1,1311, 680, 1310, -1,2255, + 1311, 2254, -1,1310, 680, 679, -1,2256, 690, 689, -1,2256, 689, 2257, -1,687, 686, + 2257, -1,688, 687, 2257, -1,689, 688, 2257, -1,691, 685, 692, -1,685, 691, 2257, -1, + 692, 694, 693, -1,694, 692, 685, -1,694, 685, 684, -1,2257, 686, 685, -1,682, 681, + 699, -1,683, 682, 699, -1,2258, 2259, 2260, -1,2260, 2259, 699, -1,681, 2260, 699, -1, + 695, 697, 696, -1,697, 695, 684, -1,684, 695, 694, -1,684, 698, 697, -1,698, 684, + 699, -1,684, 683, 699, -1,1312, 2261, 701, -1,1313, 2261, 1312, -1,704, 1312, 700, -1, + 701, 700, 1312, -1,1312, 704, 1313, -1,2262, 2261, 1313, -1,2263, 1313, 1314, -1, + 2262, 1313, 2263, -1,2260, 2263, 1314, -1,702, 1313, 703, -1,702, 2264, 1314, -1, + 2260, 1314, 2264, -1,702, 1314, 1313, -1,704, 703, 1313, -1,706, 705, 2265, -1,2265, + 2266, 706, -1,712, 711, 709, -1,710, 709, 711, -1,712, 709, 716, -1,714, 713, 716, -1, + 716, 715, 714, -1,713, 712, 716, -1,709, 708, 716, -1,708, 707, 2267, -1,2267, 2268, + 708, -1,708, 2268, 2269, -1,2270, 2269, 2271, -1,2272, 2271, 2269, -1,2269, 2268, + 2272, -1,708, 2269, 716, -1,2273, 2274, 718, -1,718, 717, 2273, -1,721, 2275, 720, -1, + 720, 719, 721, -1,2276, 1315, 2277, -1,722, 2277, 1315, -1,1315, 723, 722, -1,1316, + 724, 723, -1,725, 724, 1317, -1,1316, 1317, 724, -1,1315, 2276, 1316, -1,2278, 1316, + 2276, -1,2278, 2279, 1317, -1,725, 1317, 2279, -1,2278, 1317, 1316, -1,723, 1315, + 1316, -1,734, 733, 731, -1,732, 731, 733, -1,734, 731, 735, -1,736, 735, 738, -1, + 738, 737, 736, -1,735, 731, 738, -1,731, 730, 738, -1,730, 729, 728, -1,728, 727, + 730, -1,730, 727, 726, -1,740, 739, 2280, -1,726, 2280, 739, -1,739, 730, 726, -1, + 730, 739, 738, -1,1318, 2281, 2282, -1,1319, 2281, 1318, -1,2283, 1318, 2284, -1, + 2282, 2284, 1318, -1,1318, 2283, 1319, -1,2285, 2281, 1319, -1,2286, 1319, 1320, -1, + 2285, 1319, 2286, -1,2287, 2286, 1320, -1,2288, 1319, 2289, -1,2288, 741, 1320, -1, + 2287, 1320, 741, -1,2288, 1320, 1319, -1,2283, 2289, 1319, -1,2290, 2291, 742, -1, + 742, 2292, 2290, -1,1321, 2293, 2292, -1,1322, 2293, 1321, -1,2294, 1321, 2295, -1, + 2292, 2295, 1321, -1,1321, 2294, 1322, -1,2296, 2293, 1322, -1,2297, 1322, 1323, -1, + 2296, 1322, 2297, -1,2298, 2297, 1323, -1,2299, 1322, 2300, -1,2299, 743, 1323, -1, + 2298, 1323, 743, -1,2299, 1323, 1322, -1,2294, 2300, 1322, -1,2301, 744, 2302, -1, + 2303, 1644, 750, -1,1644, 2301, 1645, -1,2304, 2301, 2305, -1,2302, 744, 2306, -1, + 2302, 2307, 2305, -1,2302, 2305, 2301, -1,1644, 1645, 750, -1,747, 746, 745, -1,2308, + 747, 745, -1,2309, 747, 2310, -1,749, 2303, 750, -1,745, 748, 2308, -1,747, 2308, + 2310, -1,749, 748, 2303, -1,2304, 1645, 2301, -1,748, 745, 2303, -1,1324, 2311, 2312, -1, + 1325, 2311, 1324, -1,2313, 1324, 2314, -1,2312, 2314, 1324, -1,1324, 2313, 1325, -1, + 2315, 2311, 1325, -1,2316, 1325, 1326, -1,2315, 1325, 2316, -1,2317, 2316, 1326, -1, + 2318, 1325, 2319, -1,2318, 2320, 1326, -1,2317, 1326, 2320, -1,2318, 1326, 1325, -1, + 2313, 2319, 1325, -1,1327, 753, 752, -1,1327, 2321, 753, -1,1328, 2322, 1327, -1, + 1327, 2322, 2321, -1,2322, 1328, 2323, -1,1327, 752, 1328, -1,1328, 752, 751, -1, + 2324, 2325, 1329, -1,2323, 1328, 1329, -1,1329, 2325, 2323, -1,1329, 1328, 751, -1, + 1329, 751, 2324, -1,756, 2326, 1646, -1,1646, 2327, 757, -1,2326, 756, 755, -1,756, + 1646, 757, -1,755, 754, 2326, -1,2328, 2329, 2330, -1,754, 2328, 2330, -1,754, 2331, + 2332, -1,2330, 2331, 754, -1,2326, 754, 2332, -1,2333, 2334, 759, -1,759, 758, 2333, -1, + 2335, 2336, 2337, -1,2338, 2335, 763, -1,2337, 763, 2335, -1,2339, 2338, 763, -1, + 2340, 761, 1647, -1,763, 762, 2340, -1,760, 1647, 761, -1,2340, 762, 761, -1,2339, + 763, 2340, -1,2341, 1647, 760, -1,764, 2342, 2343, -1,2343, 2341, 764, -1,2344, 767, + 765, -1,767, 2344, 2345, -1,766, 765, 767, -1,768, 2345, 770, -1,2345, 768, 767, -1, + 770, 769, 768, -1,2346, 2347, 771, -1,771, 2348, 2346, -1,774, 775, 2349, -1,2350, + 2349, 775, -1,775, 773, 772, -1,775, 774, 773, -1,774, 2351, 2348, -1,2349, 2351, + 774, -1,776, 2352, 2353, -1,2352, 776, 2354, -1,2355, 2354, 2356, -1,2354, 2355, + 2357, -1,2358, 2359, 2360, -1,2360, 2361, 2358, -1,2362, 2363, 2364, -1,2364, 2365, + 2362, -1,2366, 1330, 2367, -1,2368, 1330, 2369, -1,1330, 2368, 1331, -1,2366, 2369, + 1330, -1,1331, 2367, 1330, -1,2368, 2370, 1331, -1,2371, 1331, 1332, -1,2372, 2371, + 1332, -1,2373, 1332, 2370, -1,1331, 2370, 1332, -1,2372, 1332, 2373, -1,2371, 2367, + 1331, -1,782, 1333, 2374, -1,1333, 782, 781, -1,2375, 2374, 1334, -1,2376, 2375, + 1334, -1,2377, 2378, 1335, -1,2378, 2376, 1335, -1,1333, 1334, 2374, -1,1333, 779, + 1334, -1,1333, 780, 779, -1,1334, 779, 778, -1,1335, 777, 2379, -1,777, 1335, 1334, -1, + 1335, 2379, 2377, -1,1334, 1335, 2376, -1,1334, 778, 777, -1,1333, 781, 780, -1,790, + 789, 1336, -1,1337, 1336, 1339, -1,790, 1336, 791, -1,791, 1337, 792, -1,1337, 791, + 1336, -1,792, 1337, 793, -1,1336, 789, 1339, -1,1342, 788, 787, -1,1345, 787, 786, -1, + 1337, 1339, 1340, -1,1342, 1339, 788, -1,1345, 1342, 787, -1,1343, 1339, 1342, -1, + 786, 785, 1345, -1,788, 1339, 789, -1,1343, 1342, 1345, -1,793, 1338, 794, -1,793, + 1337, 1338, -1,794, 1338, 795, -1,1338, 1341, 795, -1,1340, 1343, 1341, -1,1343, + 1340, 1339, -1,1341, 1343, 1344, -1,1340, 1341, 1338, -1,796, 1344, 797, -1,1344, + 796, 1341, -1,1346, 1344, 1343, -1,1344, 1347, 797, -1,1341, 796, 795, -1,1337, 1340, + 1338, -1,1346, 1343, 1345, -1,785, 784, 1348, -1,1348, 784, 1351, -1,1348, 1346, + 1345, -1,1348, 1349, 1346, -1,1349, 1348, 1351, -1,1349, 1351, 1352, -1,1346, 1349, + 1350, -1,784, 783, 1351, -1,1348, 1345, 785, -1,783, 2379, 1354, -1,1354, 2379, 2380, -1, + 1354, 1352, 1351, -1,1354, 1355, 1352, -1,1355, 1354, 2380, -1,1355, 2380, 2381, -1, + 1352, 1355, 1356, -1,1354, 1351, 783, -1,1349, 1352, 1353, -1,1347, 1350, 799, -1, + 1347, 1346, 1350, -1,1350, 1349, 1353, -1,1350, 1353, 800, -1,1347, 799, 798, -1, + 799, 1350, 800, -1,1353, 801, 800, -1,1347, 798, 797, -1,1355, 2382, 1356, -1,1356, + 1353, 1352, -1,1356, 2382, 2383, -1,2383, 801, 1356, -1,1356, 801, 1353, -1,1355, + 2381, 2382, -1,1346, 1347, 1344, -1,810, 809, 1357, -1,1357, 809, 1358, -1,810, 1357, + 811, -1,1359, 1358, 808, -1,808, 1358, 809, -1,1359, 808, 807, -1,1357, 1358, 2384, -1, + 811, 1357, 2384, -1,2384, 1358, 2385, -1,1359, 1360, 2386, -1,1360, 1359, 807, -1, + 2386, 1360, 2387, -1,1359, 2386, 2385, -1,1359, 2385, 1358, -1,807, 806, 1360, -1, + 805, 1361, 1360, -1,1361, 805, 804, -1,2388, 1360, 1361, -1,1362, 804, 803, -1,1361, + 804, 1362, -1,1363, 803, 802, -1,1360, 2388, 2387, -1,2388, 1361, 2389, -1,1362, + 1363, 2390, -1,1363, 1362, 803, -1,2391, 2390, 1363, -1,1363, 802, 2391, -1,1362, + 2390, 2389, -1,1362, 2389, 1361, -1,1360, 806, 805, -1,2392, 1364, 2393, -1,1364, + 2392, 2394, -1,2393, 1364, 1367, -1,1370, 2395, 2396, -1,1367, 2396, 2393, -1,1370, + 2396, 1367, -1,1364, 1365, 1367, -1,1365, 1368, 1367, -1,1365, 2394, 2397, -1,1368, + 1365, 1366, -1,1367, 1368, 1370, -1,1370, 1371, 1373, -1,1371, 1370, 1368, -1,1373, + 1371, 1374, -1,1370, 1373, 2395, -1,1368, 1369, 1371, -1,1365, 1364, 2394, -1,2395, + 1373, 2398, -1,2399, 2400, 1379, -1,2401, 2399, 1382, -1,1376, 2400, 2398, -1,1376, + 1374, 1377, -1,1376, 2398, 1373, -1,1377, 1374, 1375, -1,1376, 1377, 1379, -1,2401, + 1382, 2402, -1,2399, 1379, 1382, -1,1382, 812, 2402, -1,1380, 1382, 1379, -1,1382, + 1383, 812, -1,1380, 1379, 1377, -1,1379, 2400, 1376, -1,1373, 1374, 1376, -1,1371, + 1372, 1374, -1,2397, 2403, 1366, -1,1369, 1366, 2404, -1,1366, 1369, 1368, -1,1372, + 1371, 1369, -1,2405, 1372, 1369, -1,2406, 1375, 1372, -1,1372, 1375, 1374, -1,2403, + 2407, 1366, -1,1375, 1378, 1377, -1,2405, 2406, 1372, -1,2407, 2404, 1366, -1,2405, + 1369, 2404, -1,1648, 2407, 2403, -1,1375, 2406, 1378, -1,1380, 1378, 1381, -1,1380, + 1377, 1378, -1,1381, 1378, 2408, -1,1380, 1381, 1383, -1,1383, 814, 813, -1,1384, + 814, 1383, -1,1383, 813, 812, -1,1383, 1381, 1384, -1,1380, 1383, 1382, -1,2409, + 2410, 1384, -1,2409, 1384, 1381, -1,1384, 815, 814, -1,1384, 2410, 815, -1,2409, + 1381, 2408, -1,1378, 2406, 2408, -1,1365, 2397, 1366, -1,1385, 2411, 2412, -1,1386, + 1385, 2412, -1,1385, 2413, 2414, -1,1385, 2415, 2411, -1,1386, 2413, 1385, -1,1385, + 2414, 2415, -1,1386, 2412, 2416, -1,2417, 1387, 1386, -1,2417, 1386, 2416, -1,817, + 1387, 2417, -1,816, 1387, 817, -1,1386, 2418, 2419, -1,2418, 1386, 1387, -1,2418, + 1387, 2420, -1,2420, 1387, 816, -1,1386, 2419, 2413, -1,2420, 1388, 2421, -1,1388, + 2420, 2422, -1,1388, 818, 2421, -1,819, 1388, 2423, -1,819, 818, 1388, -1,2423, 1388, + 2422, -1,1390, 821, 820, -1,2424, 2425, 1389, -1,1389, 2425, 2426, -1,2424, 1389, + 820, -1,1390, 820, 1389, -1,822, 1391, 823, -1,1390, 1391, 822, -1,822, 821, 1390, -1, + 1389, 2427, 1390, -1,2428, 1390, 2427, -1,2428, 2429, 1390, -1,1391, 825, 824, -1, + 825, 1391, 2429, -1,1391, 824, 823, -1,1390, 2429, 1391, -1,2427, 1389, 2426, -1, + 2430, 1392, 826, -1,1392, 2430, 2431, -1,2431, 2432, 1395, -1,1395, 2432, 1398, -1, + 2431, 1395, 1392, -1,1392, 1395, 1396, -1,826, 1393, 827, -1,826, 1392, 1393, -1, + 827, 1393, 828, -1,1396, 1398, 1399, -1,1396, 1393, 1392, -1,1399, 1398, 1401, -1, + 1396, 1399, 1400, -1,1398, 1396, 1395, -1,1393, 1396, 1397, -1,2432, 2433, 1398, -1, + 2433, 2434, 1401, -1,1407, 2435, 2436, -1,2435, 1404, 2434, -1,1410, 2436, 2437, -1, + 1399, 1401, 1402, -1,1401, 2434, 1404, -1,1404, 2435, 1407, -1,1405, 1401, 1404, -1, + 2437, 1413, 1410, -1,1410, 1407, 2436, -1,1413, 2438, 2439, -1,1411, 1407, 1410, -1, + 2437, 2438, 1413, -1,1408, 1404, 1407, -1,2433, 1401, 1398, -1,1411, 1410, 1413, -1, + 828, 1394, 829, -1,828, 1393, 1394, -1,1396, 1400, 1397, -1,1397, 1394, 1393, -1, + 832, 1400, 1403, -1,1397, 1400, 831, -1,1400, 1399, 1402, -1,1394, 1397, 830, -1, + 1397, 831, 830, -1,831, 1400, 832, -1,829, 1394, 830, -1,1400, 1402, 1403, -1,1403, + 1405, 1406, -1,1405, 1403, 1402, -1,1409, 1406, 1408, -1,1408, 1406, 1405, -1,1411, + 1408, 1407, -1,1412, 1408, 1411, -1,1405, 1404, 1408, -1,1403, 1406, 833, -1,1406, + 834, 833, -1,834, 1406, 1409, -1,834, 1409, 835, -1,835, 1412, 836, -1,1412, 835, + 1409, -1,1414, 1412, 1411, -1,1409, 1408, 1412, -1,1412, 1415, 836, -1,1403, 833, + 832, -1,1402, 1401, 1405, -1,1414, 1411, 1413, -1,1416, 1414, 1413, -1,1416, 2439, + 2440, -1,1419, 2440, 2441, -1,1416, 2440, 1419, -1,1422, 2441, 2442, -1,1416, 1417, + 1414, -1,1417, 1416, 1419, -1,1417, 1419, 1420, -1,1414, 1417, 1418, -1,1420, 1422, + 1423, -1,1422, 1420, 1419, -1,1425, 1423, 1422, -1,1420, 1423, 1424, -1,1419, 2441, + 1422, -1,1417, 1420, 1421, -1,1422, 2442, 1425, -1,1416, 1413, 2439, -1,1428, 1425, + 2443, -1,2443, 1425, 2442, -1,1428, 2443, 2444, -1,1431, 2444, 2445, -1,1434, 2445, + 2446, -1,1426, 1428, 1429, -1,1428, 1426, 1425, -1,1429, 1428, 1431, -1,1426, 1429, + 1430, -1,1435, 1431, 1434, -1,1434, 1431, 2445, -1,2447, 1434, 2446, -1,1431, 1432, + 1429, -1,1428, 2444, 1431, -1,1435, 1434, 2447, -1,1425, 1426, 1423, -1,1423, 1426, + 1427, -1,1415, 1418, 838, -1,1415, 1414, 1418, -1,1421, 1424, 840, -1,1421, 1420, + 1424, -1,1424, 1423, 1427, -1,1424, 1427, 841, -1,1417, 1421, 1418, -1,1418, 1421, + 839, -1,1415, 838, 837, -1,1418, 839, 838, -1,1424, 841, 840, -1,840, 839, 1421, -1, + 841, 1427, 842, -1,1427, 1430, 842, -1,1415, 837, 836, -1,1430, 1432, 1433, -1,1430, + 1427, 1426, -1,1433, 1432, 1435, -1,1430, 1433, 843, -1,1435, 2448, 2449, -1,2448, + 1435, 2447, -1,1433, 1435, 1436, -1,1432, 1431, 1435, -1,1436, 1435, 2449, -1,1433, + 844, 843, -1,844, 1433, 1436, -1,844, 1436, 845, -1,1436, 2449, 845, -1,1430, 843, + 842, -1,1432, 1430, 1429, -1,1414, 1415, 1412, -1,2450, 854, 1437, -1,2451, 2450, + 1438, -1,1438, 2452, 2451, -1,2452, 1439, 846, -1,854, 853, 1437, -1,1437, 852, 851, -1, + 1437, 853, 852, -1,1437, 851, 1438, -1,1438, 1439, 2452, -1,1439, 1438, 849, -1,847, + 1439, 848, -1,1439, 847, 846, -1,1439, 849, 848, -1,849, 1438, 850, -1,1438, 851, + 850, -1,1437, 1438, 2450, -1,2453, 1440, 855, -1,2453, 2454, 1440, -1,1440, 857, + 856, -1,857, 1440, 858, -1,1440, 856, 855, -1,858, 1440, 2454, -1,2455, 2456, 1441, -1, + 1442, 859, 1441, -1,2457, 2455, 1441, -1,859, 2458, 1441, -1,860, 859, 1442, -1,1441, + 2458, 2457, -1,1441, 2456, 1442, -1,2459, 2460, 1442, -1,1443, 1442, 2460, -1,2459, + 1442, 2456, -1,1443, 2460, 2461, -1,861, 1443, 862, -1,1443, 861, 1442, -1,862, 1443, + 2462, -1,1443, 2461, 2462, -1,1442, 861, 860, -1,1447, 2463, 2464, -1,1444, 2464, + 2465, -1,2466, 1444, 2465, -1,1445, 1444, 2467, -1,2467, 1444, 2466, -1,1445, 2467, + 2468, -1,1447, 1445, 1448, -1,1445, 1447, 1444, -1,1448, 1445, 1446, -1,2463, 1447, + 1450, -1,2468, 2469, 1445, -1,1444, 1447, 2464, -1,1451, 1447, 1448, -1,2470, 2471, + 1453, -1,1450, 2471, 2463, -1,2472, 2470, 1456, -1,1459, 2473, 2472, -1,1462, 2474, + 2473, -1,2471, 1450, 1453, -1,1453, 1451, 1454, -1,1451, 1453, 1450, -1,1454, 1451, + 1452, -1,1453, 1454, 1456, -1,1456, 1459, 2472, -1,1459, 1456, 1457, -1,1462, 2475, + 2474, -1,1463, 2475, 1462, -1,1462, 1459, 1460, -1,1459, 1462, 2473, -1,1457, 1456, + 1454, -1,1453, 1456, 2470, -1,1450, 1447, 1451, -1,1448, 1449, 1451, -1,1446, 1449, + 1448, -1,868, 1449, 1446, -1,867, 1452, 1449, -1,1451, 1449, 1452, -1,1452, 866, + 1455, -1,867, 866, 1452, -1,1458, 1455, 866, -1,1452, 1455, 1454, -1,1446, 2469, + 870, -1,1454, 1455, 1457, -1,1652, 863, 1653, -1,869, 868, 1446, -1,867, 1449, 868, -1, + 870, 869, 1446, -1,1653, 863, 1654, -1,1458, 866, 865, -1,1457, 1458, 1460, -1,1458, + 1457, 1455, -1,1460, 1458, 1461, -1,1457, 1460, 1459, -1,2476, 1463, 1464, -1,1461, + 1463, 1460, -1,1464, 1463, 1461, -1,1463, 2476, 2475, -1,865, 1461, 1458, -1,1460, + 1463, 1462, -1,1464, 864, 863, -1,864, 1464, 1461, -1,1464, 863, 2477, -1,1650, 863, + 1651, -1,2477, 863, 1649, -1,1651, 863, 1652, -1,1464, 2477, 2476, -1,865, 864, 1461, -1, + 1446, 1445, 2469, -1,1654, 863, 1655, -1,1649, 863, 1650, -1,2478, 2479, 1465, -1, + 1466, 1465, 2479, -1,2478, 1465, 2480, -1,1467, 2481, 2482, -1,1466, 2479, 2481, -1, + 1468, 1467, 2482, -1,1465, 871, 2480, -1,871, 1465, 1466, -1,871, 1466, 872, -1,872, + 1467, 873, -1,1467, 872, 1466, -1,1468, 873, 1467, -1,1466, 2481, 1467, -1,1468, + 2482, 2483, -1,1468, 2484, 1469, -1,2484, 1468, 2483, -1,1469, 2484, 2485, -1,1468, + 1469, 875, -1,1470, 2485, 2486, -1,1469, 2485, 1470, -1,1471, 2486, 2487, -1,874, + 1468, 875, -1,875, 1469, 876, -1,1470, 1471, 877, -1,1471, 1470, 2486, -1,878, 877, + 1471, -1,1471, 2487, 878, -1,1470, 877, 876, -1,1470, 876, 1469, -1,1468, 874, 873, -1, + 879, 2488, 1472, -1,1472, 2488, 1475, -1,879, 1472, 880, -1,1472, 1473, 880, -1,1473, + 1472, 1475, -1,1473, 1475, 1476, -1,880, 1473, 881, -1,2488, 2489, 1475, -1,2489, + 2490, 1478, -1,1478, 2490, 1481, -1,1478, 1476, 1475, -1,1478, 1479, 1476, -1,1479, + 1478, 1481, -1,1480, 1479, 1482, -1,1476, 1479, 1480, -1,2490, 2491, 1481, -1,1478, + 1475, 2489, -1,884, 1661, 1660, -1,1473, 1476, 1477, -1,881, 1473, 882, -1,1473, + 1474, 882, -1,884, 1656, 1474, -1,1474, 1656, 882, -1,883, 1664, 884, -1,885, 884, + 1477, -1,1477, 884, 1474, -1,1474, 1473, 1477, -1,885, 1477, 1480, -1,1480, 886, + 885, -1,887, 886, 1483, -1,1483, 886, 1480, -1,1476, 1480, 1477, -1,1482, 1479, 1481, -1, + 884, 1662, 1661, -1,1481, 2492, 1484, -1,1484, 2492, 2493, -1,1482, 1484, 1485, -1, + 1482, 1481, 1484, -1,1487, 1485, 1484, -1,1482, 1485, 1486, -1,1484, 2493, 1487, -1, + 1481, 2491, 2492, -1,1490, 1487, 2494, -1,2494, 1487, 2493, -1,1490, 2494, 2495, -1, + 1491, 1488, 1490, -1,1490, 1488, 1487, -1,2496, 1490, 2495, -1,1491, 1490, 2496, -1, + 884, 1659, 1658, -1,1487, 1488, 1485, -1,884, 1660, 1659, -1,1485, 1488, 1489, -1, + 1483, 1486, 888, -1,1483, 1482, 1486, -1,1486, 1485, 1489, -1,1486, 1489, 889, -1, + 1486, 889, 888, -1,889, 1489, 890, -1,1489, 1492, 890, -1,1483, 888, 887, -1,1491, + 2497, 2498, -1,2497, 1491, 2496, -1,884, 1658, 1657, -1,1491, 2498, 1492, -1,891, + 1492, 2498, -1,890, 1492, 891, -1,1491, 1492, 1489, -1,1491, 1489, 1488, -1,1482, + 1483, 1480, -1,884, 1657, 1656, -1,884, 1663, 1662, -1,884, 1664, 1663, -1,1664, + 883, 1665, -1,894, 1493, 2499, -1,1493, 894, 893, -1,2499, 1493, 1494, -1,2500, 2501, + 1494, -1,1495, 2502, 2500, -1,1495, 2500, 1494, -1,2501, 2499, 1494, -1,1493, 2503, + 1494, -1,2503, 2504, 1494, -1,1493, 892, 2503, -1,2504, 2505, 1494, -1,1495, 2506, + 2507, -1,2506, 1495, 2505, -1,1495, 2507, 2502, -1,1494, 2505, 1495, -1,1493, 893, + 892, -1,2508, 2509, 2510, -1,898, 2510, 2511, -1,899, 2511, 2512, -1,2513, 2508, + 898, -1,898, 897, 2513, -1,898, 2508, 2510, -1,2511, 899, 898, -1,2513, 897, 2514, -1, + 2512, 900, 899, -1,901, 2515, 2516, -1,2516, 2517, 902, -1,903, 2517, 2518, -1,903, + 902, 2517, -1,2519, 900, 2512, -1,900, 2519, 2520, -1,2515, 901, 2520, -1,901, 2516, + 902, -1,2520, 901, 900, -1,2521, 2522, 895, -1,2522, 896, 895, -1,896, 2522, 2514, -1, + 2523, 2521, 926, -1,2524, 2523, 925, -1,2525, 2524, 924, -1,922, 2526, 2527, -1,2525, + 923, 2527, -1,926, 2521, 895, -1,923, 2525, 924, -1,924, 2524, 925, -1,922, 921, + 2526, -1,2527, 923, 922, -1,920, 2528, 2526, -1,920, 2526, 921, -1,2528, 920, 919, -1, + 925, 2523, 926, -1,2514, 897, 896, -1,903, 2529, 904, -1,2529, 2530, 904, -1,2531, + 905, 2530, -1,904, 2530, 905, -1,2532, 2533, 906, -1,906, 2533, 2534, -1,2532, 906, + 905, -1,2531, 2532, 905, -1,907, 2534, 2535, -1,2535, 2536, 908, -1,2537, 2538, 2536, -1, + 907, 2535, 908, -1,908, 2539, 909, -1,2539, 908, 2538, -1,909, 2539, 2540, -1,2536, + 2538, 908, -1,2534, 907, 906, -1,2541, 916, 915, -1,2542, 914, 913, -1,2543, 915, + 914, -1,919, 918, 2544, -1,2545, 918, 917, -1,916, 2545, 917, -1,918, 2545, 2544, -1, + 919, 2544, 2528, -1,912, 911, 2546, -1,2547, 2546, 911, -1,911, 910, 2547, -1,910, + 2540, 2547, -1,912, 2546, 2548, -1,2545, 916, 2541, -1,2542, 2543, 914, -1,2541, + 915, 2543, -1,2542, 913, 2548, -1,2548, 913, 912, -1,910, 909, 2540, -1,903, 2518, + 2529, -1,2549, 2550, 1497, -1,2551, 2549, 1496, -1,928, 2549, 1497, -1,928, 1496, + 2549, -1,930, 1498, 2552, -1,2550, 929, 1497, -1,2552, 1498, 2550, -1,929, 2550, + 1498, -1,2551, 1496, 927, -1,1501, 2553, 1502, -1,2554, 2553, 1501, -1,1499, 1500, + 931, -1,1499, 2554, 1500, -1,1505, 2555, 2556, -1,1501, 1500, 2554, -1,2553, 2555, + 1503, -1,1500, 1501, 931, -1,2554, 1499, 2552, -1,930, 2552, 1499, -1,1496, 928, + 927, -1,1501, 1502, 932, -1,1497, 929, 928, -1,929, 1498, 930, -1,931, 1501, 932, -1, + 1499, 931, 930, -1,1502, 1503, 932, -1,1503, 1504, 933, -1,1504, 1503, 2555, -1,1505, + 1504, 2555, -1,1504, 1505, 933, -1,933, 1505, 934, -1,934, 1506, 935, -1,2557, 1507, + 1506, -1,1505, 1506, 934, -1,935, 1506, 1507, -1,1505, 2556, 1506, -1,1503, 933, + 932, -1,1502, 2553, 1503, -1,1506, 2556, 2557, -1,1508, 2557, 2558, -1,1509, 2558, + 2559, -1,1508, 1509, 936, -1,1509, 1508, 2558, -1,1510, 1511, 937, -1,1511, 1510, + 2559, -1,1509, 2559, 1510, -1,1509, 1510, 937, -1,2559, 2560, 1511, -1,1508, 935, + 1507, -1,2561, 1513, 2560, -1,2560, 1513, 1512, -1,2561, 2562, 1515, -1,2563, 1516, + 2562, -1,2564, 1517, 2563, -1,2564, 2565, 1518, -1,2560, 1512, 1511, -1,1511, 1512, + 938, -1,935, 1508, 936, -1,1513, 938, 1512, -1,1514, 1513, 2561, -1,939, 1513, 1514, -1, + 936, 1509, 937, -1,939, 938, 1513, -1,1511, 938, 937, -1,1514, 1515, 939, -1,2562, + 940, 1515, -1,940, 2562, 1516, -1,2564, 942, 1517, -1,942, 2564, 1518, -1,2563, 1517, + 941, -1,2563, 941, 1516, -1,941, 940, 1516, -1,943, 942, 1518, -1,941, 1517, 942, -1, + 1518, 2565, 943, -1,1515, 940, 939, -1,1514, 2561, 1515, -1,1508, 1507, 2557, -1, + 1519, 2565, 2566, -1,1520, 2566, 2567, -1,944, 2566, 1520, -1,944, 1519, 2566, -1, + 946, 1521, 2568, -1,2567, 945, 1520, -1,2568, 1521, 2567, -1,945, 2567, 1521, -1, + 2565, 1519, 2569, -1,2570, 2571, 1524, -1,1522, 1523, 947, -1,1522, 2570, 1523, -1, + 2572, 1526, 2571, -1,1524, 1523, 2570, -1,2571, 1525, 1524, -1,1523, 1524, 947, -1, + 2572, 2573, 1528, -1,2570, 1522, 2568, -1,946, 2568, 1522, -1,1519, 944, 2569, -1, + 1524, 1525, 948, -1,1520, 945, 944, -1,945, 1521, 946, -1,947, 1524, 948, -1,1522, + 947, 946, -1,1525, 1526, 948, -1,1526, 1527, 949, -1,1527, 1526, 2572, -1,1528, 1527, + 2572, -1,1527, 1528, 949, -1,949, 1528, 950, -1,950, 1529, 951, -1,2574, 1530, 1529, -1, + 1528, 1529, 950, -1,951, 1529, 1530, -1,1528, 2573, 1529, -1,1526, 949, 948, -1,1525, + 2571, 1526, -1,1529, 2573, 2574, -1,2575, 2576, 1532, -1,2574, 2575, 1531, -1,1531, + 1532, 952, -1,1532, 1531, 2575, -1,1533, 1534, 953, -1,1534, 1533, 2576, -1,1532, + 2576, 1533, -1,1532, 1533, 953, -1,2576, 2577, 1534, -1,1531, 951, 1530, -1,2578, + 1539, 2579, -1,2580, 1540, 2578, -1,2577, 1535, 1534, -1,1536, 1535, 2577, -1,1536, + 2577, 2581, -1,2579, 1538, 2581, -1,2580, 2582, 1541, -1,1534, 1535, 954, -1,951, + 1531, 952, -1,1536, 954, 1535, -1,1537, 1536, 2581, -1,955, 1536, 1537, -1,952, 1532, + 953, -1,955, 954, 1536, -1,1534, 954, 953, -1,1537, 1538, 955, -1,2579, 956, 1538, -1, + 956, 2579, 1539, -1,2580, 958, 1540, -1,958, 2580, 1541, -1,2578, 1540, 957, -1,2578, + 957, 1539, -1,957, 956, 1539, -1,959, 958, 1541, -1,957, 1540, 958, -1,1541, 2582, + 959, -1,1538, 956, 955, -1,1537, 2581, 1538, -1,1531, 1530, 2574, -1,2583, 2584, + 979, -1,981, 2584, 2585, -1,2584, 980, 979, -1,2583, 979, 978, -1,2586, 2587, 977, -1, + 978, 977, 2587, -1,2587, 2583, 978, -1,2586, 977, 2588, -1,983, 2589, 2590, -1,984, + 2591, 985, -1,2590, 2591, 983, -1,984, 983, 2591, -1,980, 2584, 981, -1,983, 982, + 2589, -1,2585, 982, 981, -1,2585, 2589, 982, -1,2592, 2588, 975, -1,976, 975, 2588, -1, + 2588, 977, 976, -1,2592, 975, 2593, -1,2594, 2593, 974, -1,2594, 973, 2595, -1,973, + 2594, 974, -1,2593, 975, 974, -1,971, 2595, 972, -1,971, 970, 2596, -1,971, 2596, + 2595, -1,2596, 970, 2597, -1,2598, 969, 2599, -1,969, 2598, 2597, -1,970, 969, 2597, -1, + 972, 2595, 973, -1,985, 2600, 2601, -1,2600, 985, 2591, -1,985, 2601, 986, -1,986, + 2601, 2602, -1,987, 986, 2602, -1,2603, 989, 988, -1,988, 987, 2603, -1,2603, 987, + 2602, -1,2604, 989, 2603, -1,989, 2604, 990, -1,2604, 2605, 990, -1,990, 2605, 991, -1, + 960, 991, 2606, -1,2607, 2606, 991, -1,991, 2605, 2607, -1,960, 2606, 961, -1,967, + 966, 2608, -1,2609, 966, 965, -1,2608, 966, 2609, -1,968, 2599, 969, -1,968, 967, + 2599, -1,2599, 967, 2610, -1,967, 2608, 2610, -1,965, 964, 2611, -1,962, 961, 2612, -1, + 2613, 2612, 961, -1,961, 2606, 2613, -1,962, 2612, 2614, -1,965, 2611, 2609, -1,2611, + 964, 963, -1,2614, 2611, 963, -1,963, 962, 2614, -1,2615, 2616, 1542, -1,2616, 2617, + 1543, -1,993, 2616, 1543, -1,2616, 993, 1542, -1,2617, 994, 1543, -1,994, 2617, 1544, -1, + 2617, 2618, 1544, -1,2615, 1542, 992, -1,2618, 2619, 1545, -1,996, 2619, 1546, -1, + 996, 1545, 2619, -1,1546, 2620, 1547, -1,2619, 2620, 1546, -1,2621, 1548, 2620, -1, + 2621, 2622, 1550, -1,1544, 2618, 995, -1,995, 2618, 1545, -1,1542, 993, 992, -1,1546, + 1547, 997, -1,1543, 994, 993, -1,994, 1544, 995, -1,996, 1546, 997, -1,1545, 996, + 995, -1,1547, 1548, 997, -1,1548, 1549, 998, -1,1549, 1548, 2621, -1,1550, 1549, + 2621, -1,1549, 1550, 998, -1,998, 1550, 999, -1,999, 1551, 1000, -1,2623, 1552, 1551, -1, + 1550, 1551, 999, -1,1000, 1551, 1552, -1,1550, 2622, 1551, -1,1548, 998, 997, -1, + 1547, 2620, 1548, -1,1551, 2622, 2623, -1,2624, 2625, 1554, -1,2623, 2624, 1553, -1, + 1553, 1554, 1001, -1,1554, 1553, 2624, -1,1555, 1556, 1002, -1,1556, 1555, 2625, -1, + 1554, 2625, 1555, -1,1554, 1555, 1002, -1,2625, 2626, 1556, -1,1553, 1000, 1552, -1, + 2627, 1558, 2626, -1,2626, 1558, 1557, -1,2627, 2628, 1559, -1,2629, 1560, 2628, -1, + 2630, 1561, 2629, -1,2630, 2631, 1562, -1,2626, 1557, 1556, -1,1556, 1557, 1003, -1, + 1000, 1553, 1001, -1,1558, 1003, 1557, -1,1004, 2627, 1559, -1,1558, 2627, 1004, -1, + 1001, 1554, 1002, -1,1004, 1003, 1558, -1,1556, 1003, 1002, -1,1559, 1005, 1004, -1, + 2629, 1006, 1560, -1,1006, 2629, 1561, -1,1007, 2630, 1562, -1,2630, 1007, 1561, -1, + 1006, 1005, 1560, -1,1008, 1007, 1562, -1,1006, 1561, 1007, -1,1562, 2631, 1008, -1, + 1005, 1559, 2628, -1,2628, 1560, 1005, -1,1553, 1552, 2623, -1,2632, 2633, 1564, -1, + 2631, 2632, 1563, -1,1009, 2632, 1564, -1,2632, 1009, 1563, -1,2633, 1010, 1564, -1, + 1010, 2633, 1565, -1,2633, 2634, 1565, -1,2631, 1563, 2635, -1,1566, 2634, 2636, -1, + 1567, 2636, 2637, -1,1012, 2636, 1567, -1,1012, 1566, 2636, -1,1569, 2637, 2638, -1, + 1567, 2637, 1568, -1,1571, 2638, 2639, -1,1565, 2634, 1011, -1,1011, 2634, 1566, -1, + 1563, 1009, 2635, -1,1567, 1568, 1013, -1,1564, 1010, 1009, -1,1010, 1565, 1011, -1, + 1012, 1567, 1013, -1,1566, 1012, 1011, -1,1568, 1569, 1013, -1,1569, 1570, 1014, -1, + 1570, 1569, 2638, -1,1571, 1570, 2638, -1,1570, 1571, 1014, -1,1014, 1571, 1015, -1, + 1015, 1572, 1016, -1,2640, 1573, 1572, -1,1571, 1572, 1015, -1,1016, 1572, 1573, -1, + 1571, 2639, 1572, -1,1569, 1014, 1013, -1,1568, 2637, 1569, -1,1572, 2639, 2640, -1, + 1574, 2640, 2641, -1,1575, 2641, 2642, -1,1574, 1575, 1017, -1,1575, 1574, 2641, -1, + 1576, 1577, 1018, -1,1577, 1576, 2642, -1,1575, 2642, 1576, -1,1575, 1576, 1018, -1, + 2642, 2643, 1577, -1,1574, 1016, 1573, -1,1579, 1578, 2643, -1,1580, 2644, 2645, -1, + 2643, 2644, 1579, -1,1582, 2646, 2647, -1,1581, 2645, 2646, -1,1583, 2647, 2648, -1, + 2643, 1578, 1577, -1,1577, 1578, 1019, -1,1016, 1574, 1017, -1,1579, 1019, 1578, -1, + 1020, 2644, 1580, -1,1579, 2644, 1020, -1,1017, 1575, 1018, -1,1020, 1019, 1579, -1, + 1577, 1019, 1018, -1,1580, 1021, 1020, -1,2646, 1022, 1581, -1,1022, 2646, 1582, -1, + 1023, 2647, 1583, -1,2647, 1023, 1582, -1,1022, 1021, 1581, -1,1024, 1023, 1583, -1, + 1022, 1582, 1023, -1,1583, 2648, 1024, -1,1021, 1580, 2645, -1,2645, 1581, 1021, -1, + 1574, 1573, 2640, -1,2649, 2650, 2651, -1,2650, 2652, 2651, -1,2649, 2653, 2654, -1, + 2655, 2656, 2657, -1,2654, 2657, 2656, -1,2654, 2658, 2649, -1,2654, 2659, 2658, -1, + 2660, 2650, 2661, -1,2662, 2661, 2650, -1,2649, 2662, 2650, -1,2663, 2662, 2658, -1, + 2664, 2665, 2666, -1,2658, 2662, 2649, -1,2666, 2658, 2664, -1,2659, 2654, 2656, -1, + 2667, 2659, 2656, -1,2659, 2668, 2658, -1,2669, 2659, 2670, -1,2669, 2671, 2672, -1, + 2673, 2672, 2671, -1,2659, 2669, 2674, -1,2672, 2674, 2669, -1,2668, 2675, 2664, -1, + 2676, 2664, 2675, -1,2658, 2668, 2664, -1,2677, 2674, 2672, -1,2678, 2668, 2674, -1, + 2659, 2674, 2668, -1,2679, 2677, 2672, -1,2656, 2680, 2667, -1,1027, 1584, 1028, -1, + 2681, 1584, 2682, -1,1025, 2682, 1584, -1,1027, 1026, 1584, -1,1025, 1584, 1026, -1, + 1584, 2681, 1585, -1,1585, 1028, 1584, -1,1585, 2683, 2684, -1,1585, 2684, 1586, -1, + 1586, 2684, 2685, -1,1028, 1585, 1029, -1,1586, 1031, 1030, -1,1031, 1586, 2685, -1, + 1586, 1030, 1029, -1,1585, 1586, 1029, -1,1585, 2681, 2683, -1,1032, 2686, 1587, -1, + 2686, 2687, 1587, -1,2688, 1587, 2687, -1,2689, 1587, 2688, -1,2689, 1588, 1587, -1, + 2689, 2690, 1588, -1,1033, 1032, 1588, -1,1589, 1034, 1588, -1,1588, 1034, 1033, -1, + 1035, 1034, 1589, -1,2691, 1588, 2690, -1,2692, 2693, 1589, -1,1035, 1589, 2693, -1, + 2691, 2692, 1589, -1,2691, 1589, 1588, -1,1032, 1587, 1588, -1,2694, 1666, 2695, -1, + 1590, 1591, 1667, -1,1668, 1590, 1667, -1,1592, 1591, 1593, -1,2694, 1591, 1590, -1, + 2696, 1591, 2694, -1,1590, 1666, 2694, -1,2697, 2698, 1593, -1,1591, 2696, 1593, -1, + 1593, 2698, 1594, -1,2696, 2697, 1593, -1,2699, 1667, 1591, -1,1670, 2699, 1591, -1, + 1669, 1670, 1592, -1,1592, 1594, 1669, -1,2700, 2701, 1594, -1,1595, 1594, 2701, -1, + 1668, 1666, 1590, -1,2698, 2700, 1594, -1,2701, 2702, 2703, -1,1671, 2704, 1595, -1, + 1671, 1595, 2701, -1,1595, 2704, 1594, -1,2704, 1669, 1594, -1,1593, 1594, 1592, -1, + 1592, 1670, 1591, -1,2703, 1671, 2701, -1,1037, 1036, 2705, -1,2705, 2706, 1037, -1, + 1038, 2707, 2708, -1,2708, 2709, 1038, -1,2710, 2711, 2712, -1,2713, 1672, 1673, -1, + 1045, 1596, 2714, -1,1596, 1045, 1044, -1,2714, 1596, 1040, -1,1040, 1039, 2714, -1, + 1041, 1040, 1596, -1,1596, 1597, 1041, -1,1598, 1043, 1672, -1,1597, 1044, 1043, -1, + 1598, 1042, 1041, -1,1598, 1597, 1043, -1,1042, 1598, 2713, -1,1598, 1041, 1597, -1, + 1672, 2713, 1598, -1,1044, 1597, 1596, -1,2715, 2716, 2717, -1,2715, 1599, 1600, -1, + 2717, 1599, 2715, -1,1599, 1602, 1600, -1,1603, 1676, 1675, -1,2718, 1599, 2717, -1, + 2718, 1677, 1602, -1,1602, 1678, 1048, -1,1603, 1602, 1676, -1,2719, 1677, 2718, -1, + 1602, 1677, 1604, -1,1602, 1599, 2718, -1,1678, 1602, 1604, -1,2720, 2715, 1600, -1, + 1601, 2721, 1600, -1,2720, 1600, 2721, -1,2721, 1674, 1046, -1,2722, 2721, 1046, -1, + 1047, 1601, 1600, -1,1602, 1048, 1676, -1,1674, 1601, 1047, -1,1675, 1600, 1603, -1, + 1675, 1047, 1600, -1,1602, 1603, 1600, -1,1601, 1674, 2721, -1,1677, 1679, 1604, -1, + 1604, 1679, 1678, -1,2723, 2722, 1605, -1,2724, 2725, 1605, -1,1605, 2726, 2724, -1, + 1606, 2726, 1605, -1,2725, 2723, 1605, -1,1605, 2722, 2727, -1,2727, 2728, 1606, -1, + 2729, 2730, 1607, -1,2728, 2729, 1607, -1,2731, 1606, 2732, -1,2731, 2726, 1606, -1, + 2732, 1607, 2733, -1,1607, 2732, 1606, -1,2733, 1607, 2730, -1,1606, 2728, 1607, -1, + 1606, 1605, 2727, -1,1680, 1687, 2734, -1,2735, 2734, 1608, -1,1684, 2736, 2737, -1, + 1680, 2734, 1681, -1,2738, 1609, 2739, -1,1608, 2739, 1609, -1,1609, 1683, 1608, -1, + 2740, 1609, 2738, -1,1608, 2734, 2739, -1,2734, 2735, 1681, -1,1685, 2741, 1610, -1, + 1682, 1608, 1683, -1,1609, 1610, 1683, -1,2742, 1610, 2740, -1,1610, 1609, 2740, -1, + 1610, 2742, 1686, -1,1686, 2742, 2736, -1,1686, 2736, 1684, -1,1610, 2741, 1683, -1, + 1682, 2735, 1608, -1,1686, 1685, 1610, -1,2746, 2752, 2751, -1,2745, 2752, 2746, -1, + 2746, 2788, 2786, -1,2747, 2750, 2749, -1,2749, 2748, 2747, -1,2750, 2747, 2787, -1, + 2787, 2786, 2788, -1,2755, 2754, 2743, -1,2756, 2755, 2743, -1,2752, 2745, 2753, -1, + 2745, 2754, 2753, -1,2744, 2754, 2745, -1,2744, 2743, 2754, -1,2786, 2787, 2747, -1, + 2751, 2788, 2746, -1,2761, 2760, 2780, -1,2792, 2780, 2781, -1,2761, 2780, 2762, -1, + 2792, 2762, 2780, -1,2780, 2760, 2781, -1,2759, 2758, 2782, -1,2781, 2793, 2792, -1, + 2793, 2781, 2782, -1,2782, 2757, 2793, -1,2757, 2782, 2758, -1,2781, 2759, 2782, -1, + 2759, 2781, 2760, -1,2763, 2794, 2795, -1,2796, 2795, 2794, -1,2764, 2797, 2765, -1, + 2798, 2765, 2797, -1,2767, 2766, 2799, -1,2799, 2768, 2767, -1,2783, 2800, 2771, -1, + 2783, 2801, 2800, -1,2784, 2802, 2783, -1,2783, 2802, 2801, -1,2802, 2784, 2803, -1, + 2783, 2771, 2784, -1,2784, 2771, 2770, -1,2785, 2784, 2770, -1,2803, 2784, 2785, -1, + 2785, 2804, 2803, -1,2804, 2785, 2769, -1,2785, 2770, 2769, -1,2772, 2805, 2806, -1, + 2804, 2806, 2805, -1,2773, 2807, 2808, -1,2808, 2774, 2773, -1,2775, 2809, 2810, -1, + 2810, 2776, 2775, -1,2777, 2811, 2778, -1,2812, 2778, 2811, -1,2813, 2814, 2815, -1, + 2815, 2779, 2813, -1,2816, 2817, 2818, -1,2818, 2817, 2819, -1,2820, 2821, 2822, -1, + 2822, 2823, 2820, -1,2789, 2790, 2791, -1,2789, 2791, 2821, -1,2816, 2818, 2790, -1, + 2824, 2825, 2826, -1,2826, 2825, 2827, -1,2819, 2828, 2818, -1,2819, 2826, 2828, -1, + 2821, 2791, 2822, -1,2829, 2828, 2826, -1,2827, 2829, 2826, -1,2816, 2790, 2789, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,1, 2, 3, -1,2, 4, 3, -1,5, 6, 7, -1,8, 1, 3, -1, + 8, 6, 1, -1,5, 7, 9, -1,10, 3, 4, -1,11, 7, 8, -1,6, 8, 7, -1,7, 11, 12, -1,9, 7, + 12, -1,10, 11, 8, -1,8, 3, 10, -1,13, 5, 9, -1,14, 15, 16, -1,17, 14, 9, -1,16, 9, + 14, -1,18, 15, 14, -1,13, 9, 16, -1,19, 20, 21, -1,15, 18, 21, -1,22, 17, 9, -1,23, + 18, 14, -1,23, 14, 17, -1,23, 24, 18, -1,25, 19, 24, -1,18, 24, 19, -1,20, 19, 25, -1, + 19, 21, 18, -1,12, 22, 9, -1,26, 27, 28, -1,27, 25, 28, -1,29, 26, 30, -1,31, 32, + 29, -1,26, 28, 30, -1,32, 31, 33, -1,34, 28, 25, -1,35, 31, 30, -1,29, 30, 31, -1, + 31, 35, 36, -1,33, 31, 36, -1,34, 35, 30, -1,30, 28, 34, -1,37, 32, 33, -1,38, 39, + 40, -1,41, 38, 33, -1,40, 33, 38, -1,42, 39, 38, -1,37, 33, 40, -1,43, 39, 42, -1, + 44, 43, 45, -1,46, 41, 33, -1,47, 42, 38, -1,47, 38, 41, -1,47, 48, 42, -1,49, 45, + 48, -1,42, 48, 45, -1,44, 45, 49, -1,45, 43, 42, -1,36, 46, 33, -1,50, 51, 52, -1, + 51, 50, 53, -1,50, 52, 54, -1,55, 53, 56, -1,53, 55, 51, -1,57, 58, 59, -1,54, 58, + 50, -1,59, 58, 54, -1,59, 60, 57, -1,61, 62, 57, -1,60, 61, 57, -1,57, 62, 63, -1, + 56, 53, 64, -1,64, 53, 65, -1,66, 67, 68, -1,67, 66, 65, -1,69, 68, 67, -1,69, 70, + 71, -1,53, 67, 65, -1,72, 69, 67, -1,71, 70, 63, -1,69, 72, 70, -1,63, 70, 57, -1, + 72, 67, 73, -1,74, 67, 75, -1,67, 74, 73, -1,67, 76, 75, -1,77, 78, 79, -1,79, 80, + 77, -1,78, 81, 79, -1,82, 83, 84, -1,83, 82, 85, -1,81, 78, 84, -1,84, 78, 82, -1, + 79, 81, 86, -1,87, 88, 89, -1,90, 89, 88, -1,88, 86, 90, -1,91, 92, 90, -1,92, 93, + 94, -1,93, 92, 91, -1,91, 90, 86, -1,88, 79, 86, -1,82, 95, 85, -1,95, 82, 96, -1, + 97, 95, 96, -1,97, 96, 98, -1,99, 100, 101, -1,98, 96, 102, -1,102, 100, 98, -1,99, + 101, 103, -1,104, 99, 92, -1,105, 99, 104, -1,104, 92, 106, -1,107, 98, 99, -1,108, + 99, 105, -1,99, 108, 107, -1,98, 100, 99, -1,106, 92, 94, -1,109, 110, 111, -1,110, + 112, 111, -1,113, 114, 115, -1,116, 109, 111, -1,116, 114, 109, -1,113, 115, 117, -1, + 118, 111, 112, -1,119, 115, 116, -1,114, 116, 115, -1,115, 119, 120, -1,117, 115, + 120, -1,118, 119, 116, -1,116, 111, 118, -1,121, 113, 117, -1,122, 123, 124, -1,125, + 122, 117, -1,124, 117, 122, -1,126, 123, 122, -1,121, 117, 124, -1,127, 128, 129, -1, + 123, 126, 129, -1,22, 125, 117, -1,130, 126, 122, -1,130, 122, 125, -1,130, 131, + 126, -1,132, 127, 131, -1,126, 131, 127, -1,128, 127, 132, -1,127, 129, 126, -1,120, + 22, 117, -1,133, 134, 135, -1,134, 132, 135, -1,136, 133, 137, -1,138, 139, 136, -1, + 133, 135, 137, -1,139, 138, 140, -1,141, 135, 132, -1,142, 138, 137, -1,136, 137, + 138, -1,138, 142, 143, -1,140, 138, 143, -1,141, 142, 137, -1,137, 135, 141, -1,144, + 139, 140, -1,145, 146, 147, -1,148, 145, 140, -1,147, 140, 145, -1,149, 146, 145, -1, + 144, 140, 147, -1,150, 146, 149, -1,151, 150, 152, -1,46, 148, 140, -1,153, 149, + 145, -1,153, 145, 148, -1,153, 154, 149, -1,155, 152, 154, -1,149, 154, 152, -1,151, + 152, 155, -1,152, 150, 149, -1,143, 46, 140, -1,156, 157, 158, -1,159, 160, 156, -1, + 161, 162, 163, -1,163, 164, 165, -1,159, 162, 160, -1,166, 165, 164, -1,157, 160, + 167, -1,160, 157, 156, -1,167, 160, 161, -1,161, 165, 168, -1,165, 161, 163, -1,169, + 168, 165, -1,169, 165, 166, -1,161, 168, 167, -1,160, 162, 161, -1,166, 164, 46, -1, + 170, 166, 171, -1,171, 166, 46, -1,172, 170, 171, -1,173, 174, 175, -1,175, 176, + 173, -1,177, 172, 176, -1,178, 174, 179, -1,166, 180, 46, -1,180, 166, 170, -1,181, + 180, 170, -1,170, 177, 181, -1,177, 175, 182, -1,175, 177, 176, -1,178, 182, 175, -1, + 175, 174, 178, -1,177, 182, 181, -1,170, 172, 177, -1,166, 46, 169, -1,183, 184, + 185, -1,184, 183, 186, -1,185, 187, 188, -1,187, 185, 184, -1,187, 184, 189, -1,184, + 186, 189, -1,190, 191, 187, -1,191, 192, 193, -1,192, 191, 190, -1,191, 188, 187, -1, + 193, 188, 191, -1,187, 189, 190, -1,194, 195, 196, -1,197, 198, 199, -1,200, 201, + 202, -1,201, 200, 203, -1,203, 204, 201, -1,205, 202, 194, -1,202, 205, 200, -1,198, + 206, 207, -1,207, 208, 209, -1,206, 198, 197, -1,195, 210, 196, -1,205, 194, 196, -1, + 195, 209, 210, -1,208, 210, 209, -1,198, 207, 209, -1,211, 212, 213, -1,214, 215, + 212, -1,212, 215, 213, -1,216, 217, 211, -1,216, 211, 218, -1,218, 211, 213, -1,219, + 217, 216, -1,220, 221, 222, -1,201, 204, 221, -1,221, 204, 222, -1,222, 223, 220, -1, + 224, 225, 214, -1,215, 214, 225, -1,224, 223, 222, -1,214, 223, 224, -1,226, 227, + 228, -1,229, 230, 231, -1,228, 231, 226, -1,229, 231, 228, -1,227, 232, 228, -1,233, + 234, 228, -1,234, 233, 235, -1,234, 229, 228, -1,229, 236, 237, -1,236, 229, 234, -1, + 237, 236, 238, -1,229, 237, 230, -1,234, 239, 236, -1,228, 232, 233, -1,230, 237, + 240, -1,241, 240, 242, -1,240, 237, 242, -1,243, 241, 244, -1,245, 246, 243, -1,247, + 248, 246, -1,242, 244, 241, -1,242, 249, 244, -1,249, 242, 238, -1,249, 238, 250, -1, + 245, 244, 251, -1,245, 252, 247, -1,253, 247, 254, -1,247, 253, 248, -1,245, 247, + 246, -1,249, 251, 244, -1,244, 245, 243, -1,237, 238, 242, -1,236, 255, 238, -1,235, + 256, 239, -1,255, 239, 257, -1,239, 255, 236, -1,255, 250, 238, -1,258, 250, 255, -1, + 259, 260, 250, -1,250, 260, 249, -1,256, 257, 239, -1,249, 260, 251, -1,261, 259, + 250, -1,258, 261, 250, -1,257, 258, 255, -1,260, 259, 262, -1,251, 263, 252, -1,251, + 260, 263, -1,254, 252, 264, -1,251, 252, 245, -1,254, 265, 266, -1,267, 265, 254, -1, + 254, 266, 253, -1,264, 252, 263, -1,252, 254, 247, -1,263, 268, 264, -1,268, 263, + 262, -1,264, 268, 269, -1,267, 269, 270, -1,269, 267, 264, -1,267, 270, 265, -1,264, + 267, 254, -1,260, 262, 263, -1,239, 234, 235, -1,271, 272, 273, -1,274, 271, 275, -1, + 275, 273, 276, -1,273, 275, 271, -1,277, 273, 272, -1,273, 277, 278, -1,272, 279, + 277, -1,274, 275, 280, -1,281, 282, 283, -1,284, 285, 282, -1,286, 279, 287, -1,277, + 279, 286, -1,287, 285, 288, -1,289, 281, 283, -1,275, 276, 280, -1,286, 290, 277, -1, + 273, 278, 276, -1,278, 277, 290, -1,291, 290, 286, -1,286, 288, 291, -1,288, 284, + 292, -1,284, 288, 285, -1,281, 284, 282, -1,284, 281, 293, -1,293, 292, 284, -1,294, + 293, 281, -1,294, 281, 289, -1,288, 292, 291, -1,286, 287, 288, -1,289, 283, 295, -1, + 296, 297, 298, -1,299, 296, 300, -1,289, 300, 301, -1,300, 289, 299, -1,298, 300, + 296, -1,300, 298, 302, -1,297, 303, 298, -1,299, 289, 295, -1,304, 305, 306, -1,303, + 305, 304, -1,307, 308, 309, -1,306, 309, 310, -1,311, 307, 312, -1,305, 303, 297, -1, + 298, 303, 313, -1,289, 301, 46, -1,314, 303, 304, -1,300, 302, 301, -1,302, 298, + 313, -1,313, 303, 314, -1,304, 315, 314, -1,310, 308, 316, -1,308, 310, 309, -1,311, + 308, 307, -1,308, 311, 317, -1,316, 315, 310, -1,318, 317, 311, -1,316, 308, 317, -1, + 311, 312, 318, -1,310, 315, 304, -1,304, 306, 310, -1,289, 46, 294, -1,319, 320, + 321, -1,320, 319, 322, -1,323, 324, 321, -1,325, 324, 326, -1,323, 321, 320, -1,320, + 327, 323, -1,327, 320, 322, -1,327, 322, 328, -1,323, 327, 329, -1,326, 329, 330, -1, + 329, 326, 323, -1,330, 329, 331, -1,325, 326, 332, -1,327, 333, 329, -1,323, 326, + 324, -1,334, 326, 330, -1,335, 336, 337, -1,332, 337, 325, -1,338, 336, 339, -1,340, + 341, 338, -1,340, 342, 341, -1,337, 332, 335, -1,339, 335, 343, -1,334, 335, 332, -1, + 344, 340, 339, -1,335, 339, 336, -1,340, 345, 346, -1,347, 345, 340, -1,340, 346, + 342, -1,343, 335, 334, -1,339, 340, 338, -1,332, 326, 334, -1,330, 348, 334, -1,349, + 333, 327, -1,333, 349, 350, -1,333, 331, 329, -1,351, 334, 348, -1,330, 331, 348, -1, + 348, 331, 352, -1,334, 351, 343, -1,333, 353, 331, -1,349, 327, 328, -1,354, 348, + 352, -1,352, 331, 353, -1,351, 354, 355, -1,351, 348, 354, -1,343, 351, 356, -1,353, + 333, 350, -1,356, 351, 355, -1,344, 356, 357, -1,356, 344, 343, -1,357, 356, 358, -1, + 344, 357, 359, -1,347, 359, 360, -1,359, 347, 344, -1,360, 359, 361, -1,347, 360, + 345, -1,357, 362, 359, -1,344, 347, 340, -1,358, 362, 357, -1,363, 358, 356, -1,362, + 361, 359, -1,356, 355, 363, -1,343, 344, 339, -1,364, 365, 366, -1,367, 366, 365, -1, + 368, 364, 369, -1,370, 371, 369, -1,372, 373, 374, -1,370, 373, 371, -1,368, 369, + 371, -1,364, 366, 369, -1,367, 375, 366, -1,374, 373, 370, -1,376, 377, 378, -1,372, + 374, 378, -1,376, 379, 380, -1,381, 377, 376, -1,372, 378, 377, -1,379, 382, 380, -1, + 382, 383, 384, -1,384, 380, 382, -1,381, 376, 380, -1,383, 385, 386, -1,387, 388, + 385, -1,386, 385, 388, -1,384, 383, 386, -1,389, 390, 391, -1,385, 390, 387, -1,391, + 392, 393, -1,387, 390, 389, -1,391, 393, 394, -1,393, 392, 395, -1,394, 389, 391, -1, + 396, 397, 398, -1,397, 396, 399, -1,398, 400, 401, -1,400, 398, 397, -1,400, 397, + 402, -1,397, 399, 402, -1,403, 404, 400, -1,404, 405, 406, -1,405, 404, 403, -1,404, + 401, 400, -1,406, 401, 404, -1,400, 402, 403, -1,407, 408, 409, -1,408, 407, 410, -1, + 407, 409, 411, -1,412, 413, 410, -1,410, 407, 412, -1,407, 411, 414, -1,415, 407, + 416, -1,416, 407, 417, -1,418, 419, 420, -1,419, 421, 411, -1,414, 411, 421, -1,414, + 417, 407, -1,420, 419, 411, -1,412, 422, 423, -1,422, 412, 424, -1,424, 425, 426, -1, + 425, 424, 412, -1,427, 426, 425, -1,425, 428, 427, -1,429, 430, 431, -1,418, 429, + 431, -1,432, 433, 431, -1,428, 431, 433, -1,433, 427, 428, -1,432, 431, 430, -1,418, + 431, 419, -1,423, 413, 412, -1,434, 435, 436, -1,434, 437, 438, -1,434, 436, 437, -1, + 439, 440, 441, -1,442, 441, 440, -1,440, 439, 443, -1,438, 443, 444, -1,445, 443, + 439, -1,444, 446, 434, -1,434, 447, 448, -1,447, 434, 446, -1,434, 438, 444, -1,434, + 449, 450, -1,448, 449, 434, -1,443, 445, 444, -1,450, 449, 451, -1,452, 453, 454, -1, + 455, 456, 452, -1,454, 453, 440, -1,454, 457, 455, -1,458, 455, 457, -1,454, 455, + 452, -1,456, 455, 459, -1,460, 461, 450, -1,462, 450, 451, -1,450, 462, 460, -1,461, + 463, 450, -1,459, 464, 465, -1,465, 463, 459, -1,463, 461, 456, -1,456, 459, 463, -1, + 453, 442, 440, -1,466, 467, 468, -1,467, 469, 468, -1,470, 466, 471, -1,472, 473, + 470, -1,466, 468, 471, -1,473, 472, 474, -1,475, 468, 469, -1,476, 472, 471, -1,470, + 471, 472, -1,472, 476, 477, -1,474, 472, 477, -1,475, 476, 471, -1,471, 468, 475, -1, + 478, 473, 474, -1,479, 480, 481, -1,482, 479, 474, -1,481, 474, 479, -1,483, 480, + 479, -1,478, 474, 481, -1,484, 480, 483, -1,485, 484, 486, -1,22, 482, 474, -1,487, + 483, 479, -1,487, 479, 482, -1,487, 488, 483, -1,489, 486, 488, -1,483, 488, 486, -1, + 485, 486, 489, -1,486, 484, 483, -1,477, 22, 474, -1,490, 491, 492, -1,491, 489, + 492, -1,493, 494, 495, -1,496, 490, 492, -1,496, 494, 490, -1,493, 495, 497, -1,498, + 492, 489, -1,499, 495, 496, -1,494, 496, 495, -1,495, 499, 500, -1,497, 495, 500, -1, + 498, 499, 496, -1,496, 492, 498, -1,501, 493, 497, -1,502, 503, 504, -1,505, 502, + 497, -1,504, 497, 502, -1,506, 503, 502, -1,501, 497, 504, -1,507, 508, 509, -1,503, + 506, 509, -1,46, 505, 497, -1,510, 506, 502, -1,510, 502, 505, -1,510, 511, 506, -1, + 512, 507, 511, -1,506, 511, 507, -1,508, 507, 512, -1,507, 509, 506, -1,500, 46, + 497, -1,513, 514, 515, -1,514, 516, 515, -1,517, 513, 518, -1,519, 520, 517, -1,513, + 515, 518, -1,520, 519, 521, -1,522, 515, 516, -1,523, 519, 518, -1,517, 518, 519, -1, + 519, 523, 524, -1,521, 519, 524, -1,522, 523, 518, -1,518, 515, 522, -1,525, 520, + 521, -1,526, 527, 528, -1,529, 526, 521, -1,528, 521, 526, -1,530, 527, 526, -1,525, + 521, 528, -1,531, 527, 530, -1,532, 531, 533, -1,22, 529, 521, -1,534, 530, 526, -1, + 534, 526, 529, -1,534, 535, 530, -1,536, 533, 535, -1,530, 535, 533, -1,532, 533, + 536, -1,533, 531, 530, -1,524, 22, 521, -1,537, 538, 539, -1,538, 536, 539, -1,540, + 541, 542, -1,543, 537, 539, -1,543, 541, 537, -1,540, 542, 544, -1,545, 539, 536, -1, + 546, 542, 543, -1,541, 543, 542, -1,542, 546, 547, -1,544, 542, 547, -1,545, 546, + 543, -1,543, 539, 545, -1,548, 540, 544, -1,549, 550, 551, -1,552, 549, 544, -1,551, + 544, 549, -1,553, 550, 549, -1,548, 544, 551, -1,554, 555, 556, -1,550, 553, 556, -1, + 46, 552, 544, -1,557, 553, 549, -1,557, 549, 552, -1,557, 558, 553, -1,559, 554, + 558, -1,553, 558, 554, -1,555, 554, 559, -1,554, 556, 553, -1,547, 46, 544, -1,560, + 561, 562, -1,561, 560, 563, -1,561, 563, 564, -1,565, 561, 564, -1,566, 560, 562, -1, + 565, 567, 561, -1,561, 567, 562, -1,564, 563, 568, -1,564, 569, 570, -1,569, 564, + 568, -1,570, 571, 572, -1,571, 570, 569, -1,564, 570, 573, -1,573, 570, 574, -1,574, + 570, 575, -1,570, 572, 575, -1,564, 573, 565, -1,576, 577, 578, -1,576, 578, 579, -1, + 579, 578, 580, -1,581, 582, 579, -1,579, 583, 581, -1,584, 583, 579, -1,582, 576, + 579, -1,579, 580, 584, -1,584, 585, 586, -1,587, 586, 588, -1,587, 588, 589, -1,584, + 590, 583, -1,590, 584, 587, -1,589, 591, 587, -1,591, 589, 592, -1,587, 591, 590, -1, + 584, 586, 587, -1,585, 584, 580, -1,593, 594, 595, -1,593, 596, 597, -1,598, 593, + 595, -1,596, 593, 598, -1,599, 600, 601, -1,598, 599, 596, -1,596, 599, 601, -1,602, + 603, 604, -1,604, 603, 601, -1,600, 604, 601, -1,596, 601, 605, -1,597, 594, 593, -1, + 606, 607, 597, -1,594, 597, 607, -1,608, 606, 597, -1,609, 610, 608, -1,606, 608, + 610, -1,611, 609, 608, -1,612, 608, 597, -1,613, 614, 603, -1,605, 603, 612, -1,602, + 613, 603, -1,601, 603, 605, -1,614, 611, 612, -1,597, 605, 612, -1,613, 615, 614, -1, + 611, 614, 615, -1,603, 614, 612, -1,612, 611, 608, -1,596, 605, 597, -1,616, 617, + 618, -1,619, 618, 620, -1,618, 619, 616, -1,620, 618, 621, -1,622, 623, 621, -1,624, + 625, 626, -1,627, 628, 624, -1,627, 623, 622, -1,618, 622, 621, -1,625, 624, 628, -1, + 628, 627, 622, -1,622, 618, 629, -1,628, 630, 631, -1,626, 625, 632, -1,631, 633, + 634, -1,631, 625, 628, -1,633, 631, 630, -1,629, 618, 635, -1,636, 637, 638, -1,638, + 639, 640, -1,641, 638, 640, -1,638, 637, 639, -1,638, 642, 636, -1,638, 641, 642, -1, + 643, 644, 642, -1,645, 643, 646, -1,646, 643, 642, -1,645, 646, 647, -1,648, 642, + 641, -1,649, 646, 650, -1,642, 648, 650, -1,647, 646, 649, -1,642, 650, 646, -1,644, + 636, 642, -1,651, 652, 653, -1,654, 652, 651, -1,655, 651, 656, -1,653, 656, 651, -1, + 651, 655, 654, -1,657, 652, 654, -1,658, 654, 659, -1,657, 654, 658, -1,660, 658, + 659, -1,661, 654, 662, -1,661, 663, 659, -1,660, 659, 663, -1,661, 659, 654, -1,655, + 662, 654, -1,664, 665, 666, -1,664, 667, 668, -1,669, 670, 664, -1,667, 664, 670, -1, + 670, 671, 667, -1,665, 664, 668, -1,672, 664, 666, -1,673, 669, 674, -1,672, 674, + 669, -1,673, 675, 676, -1,669, 673, 677, -1,676, 678, 673, -1,674, 675, 673, -1,669, + 664, 672, -1,670, 669, 677, -1,679, 680, 671, -1,679, 677, 681, -1,679, 670, 677, -1, + 679, 682, 680, -1,671, 670, 679, -1,681, 682, 679, -1,682, 681, 683, -1,684, 678, + 685, -1,677, 678, 681, -1,678, 686, 685, -1,684, 681, 678, -1,676, 686, 678, -1,687, + 688, 684, -1,683, 681, 684, -1,685, 687, 684, -1,684, 688, 683, -1,673, 678, 677, -1, + 689, 690, 691, -1,692, 690, 689, -1,693, 689, 694, -1,691, 694, 689, -1,689, 693, + 692, -1,695, 690, 692, -1,696, 692, 697, -1,695, 692, 696, -1,698, 696, 697, -1,699, + 692, 700, -1,699, 701, 697, -1,698, 697, 701, -1,699, 697, 692, -1,693, 700, 692, -1, + 702, 703, 704, -1,705, 702, 706, -1,703, 702, 707, -1,707, 708, 703, -1,706, 702, + 704, -1,707, 702, 709, -1,710, 711, 712, -1,706, 710, 705, -1,705, 710, 712, -1,712, + 713, 714, -1,705, 712, 709, -1,713, 715, 714, -1,714, 709, 712, -1,711, 713, 712, -1, + 709, 702, 705, -1,716, 717, 718, -1,709, 719, 707, -1,707, 719, 720, -1,721, 720, + 719, -1,719, 709, 718, -1,719, 722, 721, -1,723, 722, 719, -1,716, 718, 714, -1,718, + 709, 714, -1,724, 716, 725, -1,714, 725, 716, -1,718, 717, 723, -1,715, 725, 714, -1, + 716, 724, 717, -1,723, 719, 718, -1,720, 708, 707, -1,726, 727, 728, -1,729, 726, + 730, -1,731, 726, 729, -1,728, 730, 726, -1,726, 732, 727, -1,733, 732, 731, -1,734, + 735, 736, -1,731, 735, 733, -1,736, 737, 734, -1,738, 731, 739, -1,731, 729, 739, -1, + 740, 736, 738, -1,731, 738, 736, -1,737, 736, 740, -1,736, 735, 731, -1,732, 726, + 731, -1,741, 742, 743, -1,744, 741, 745, -1,746, 741, 744, -1,743, 745, 741, -1,741, + 747, 742, -1,748, 747, 746, -1,749, 750, 751, -1,746, 750, 748, -1,751, 752, 749, -1, + 753, 746, 754, -1,746, 744, 754, -1,755, 751, 753, -1,746, 753, 751, -1,752, 751, + 755, -1,751, 750, 746, -1,747, 741, 746, -1,756, 757, 758, -1,758, 757, 759, -1,760, + 758, 761, -1,761, 758, 759, -1,760, 762, 758, -1,758, 762, 756, -1,763, 764, 765, -1, + 763, 765, 766, -1,763, 767, 768, -1,767, 763, 766, -1,768, 769, 763, -1,763, 769, + 764, -1,770, 771, 772, -1,773, 772, 771, -1,771, 774, 773, -1,775, 776, 774, -1,777, + 776, 778, -1,775, 778, 776, -1,771, 770, 775, -1,779, 775, 770, -1,779, 780, 778, -1, + 777, 778, 780, -1,779, 778, 775, -1,774, 771, 775, -1,780, 781, 781, -1,781, 781, + 780, -1,782, 783, 784, -1,782, 785, 786, -1,787, 782, 784, -1,782, 787, 785, -1,785, + 788, 786, -1,786, 783, 782, -1,789, 790, 791, -1,786, 791, 792, -1,788, 793, 786, -1, + 789, 786, 793, -1,793, 794, 789, -1,790, 789, 794, -1,789, 791, 786, -1,783, 786, + 792, -1,795, 796, 797, -1,798, 794, 797, -1,795, 797, 794, -1,799, 800, 801, -1,802, + 799, 801, -1,803, 804, 805, -1,805, 804, 806, -1,803, 805, 801, -1,807, 801, 805, -1, + 802, 807, 808, -1,802, 801, 807, -1,809, 810, 811, -1,810, 809, 812, -1,811, 813, + 809, -1,810, 814, 811, -1,813, 807, 805, -1,809, 813, 805, -1,806, 815, 816, -1,812, + 817, 810, -1,818, 819, 816, -1,818, 816, 815, -1,812, 820, 821, -1,814, 822, 811, -1, + 823, 824, 820, -1,821, 825, 812, -1,824, 821, 820, -1,817, 812, 825, -1,806, 804, + 815, -1,826, 827, 828, -1,829, 830, 831, -1,832, 830, 833, -1,830, 829, 834, -1,835, + 832, 833, -1,836, 833, 837, -1,838, 828, 827, -1,838, 839, 828, -1,838, 827, 837, -1, + 839, 826, 828, -1,833, 830, 834, -1,840, 841, 834, -1,834, 842, 840, -1,833, 836, + 835, -1,837, 827, 836, -1,843, 831, 844, -1,834, 837, 833, -1,845, 846, 781, -1,847, + 848, 849, -1,845, 850, 846, -1,850, 848, 846, -1,851, 843, 847, -1,834, 829, 842, -1, + 829, 831, 843, -1,850, 849, 848, -1,849, 852, 847, -1,851, 847, 852, -1,843, 844, + 847, -1,840, 842, 853, -1,854, 855, 856, -1,856, 857, 858, -1,855, 857, 856, -1,854, + 859, 855, -1,856, 858, 860, -1,860, 861, 854, -1,861, 862, 863, -1,863, 864, 859, -1, + 863, 854, 861, -1,864, 863, 862, -1,863, 859, 854, -1,860, 854, 856, -1,865, 866, + 867, -1,868, 869, 865, -1,867, 868, 865, -1,870, 871, 866, -1,872, 873, 870, -1,871, + 870, 873, -1,874, 875, 876, -1,877, 874, 878, -1,874, 877, 879, -1,876, 878, 874, -1, + 879, 875, 874, -1,875, 879, 880, -1,880, 879, 881, -1,882, 880, 881, -1,869, 881, + 883, -1,879, 883, 881, -1,882, 881, 869, -1,877, 883, 879, -1,884, 884, 884, -1,884, + 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1, + 884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, + 885, -1,884, 884, 884, -1,886, 887, 887, -1,887, 886, 885, -1,884, 885, 886, -1,22, + 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, + 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, + 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,888, 889, 890, -1,891, 889, 888, -1, + 892, 888, 893, -1,888, 892, 891, -1,890, 893, 888, -1,890, 889, 894, -1,895, 890, + 896, -1,896, 890, 894, -1,895, 896, 897, -1,898, 890, 899, -1,895, 900, 899, -1,900, + 895, 897, -1,890, 895, 899, -1,890, 898, 893, -1,884, 884, 884, -1,884, 884, 884, -1, + 884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,901, 902, + 903, -1,903, 902, 904, -1,901, 903, 905, -1,903, 906, 905, -1,906, 903, 904, -1,906, + 904, 907, -1,902, 908, 904, -1,909, 910, 911, -1,909, 911, 904, -1,907, 904, 912, -1, + 911, 913, 912, -1,913, 911, 910, -1,911, 912, 904, -1,904, 908, 909, -1,914, 915, + 916, -1,917, 918, 914, -1,919, 916, 915, -1,920, 921, 922, -1,923, 924, 925, -1,921, + 920, 923, -1,916, 919, 925, -1,916, 926, 917, -1,925, 924, 916, -1,927, 917, 926, -1, + 926, 928, 927, -1,916, 917, 914, -1,928, 929, 930, -1,928, 930, 927, -1,920, 924, + 923, -1,931, 922, 921, -1,932, 933, 934, -1,934, 922, 932, -1,935, 936, 933, -1,932, + 922, 931, -1,937, 938, 935, -1,939, 940, 938, -1,937, 939, 938, -1,941, 940, 942, -1, + 943, 944, 945, -1,946, 941, 947, -1,941, 946, 938, -1,938, 936, 935, -1,946, 947, + 943, -1,938, 940, 941, -1,943, 947, 944, -1,933, 936, 934, -1,948, 948, 948, -1,948, + 948, 948, -1,949, 949, 949, -1,949, 949, 949, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,781, 781, 781, -1,781, 781, 781, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, + 950, -1,884, 884, 884, -1,884, 884, 884, -1,46, 46, 46, -1,46, 46, 46, -1,951, 952, + 953, -1,953, 952, 954, -1,955, 953, 956, -1,953, 955, 951, -1,954, 956, 953, -1,954, + 952, 957, -1,958, 954, 959, -1,959, 954, 957, -1,958, 959, 960, -1,961, 954, 962, -1, + 958, 963, 962, -1,963, 958, 960, -1,954, 958, 962, -1,954, 961, 956, -1,781, 781, + 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, + 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1, + 964, 964, 965, -1,964, 964, 966, -1,967, 968, 967, -1,967, 969, 967, -1,970, 0, 971, -1, + 972, 970, 973, -1,971, 973, 970, -1,974, 973, 971, -1,971, 0, 0, -1,975, 975, 975, -1, + 975, 975, 975, -1,781, 781, 781, -1,781, 781, 781, -1,976, 976, 976, -1,976, 976, + 976, -1,950, 950, 950, -1,950, 950, 950, -1,977, 978, 979, -1,979, 978, 980, -1,977, + 979, 981, -1,979, 982, 981, -1,982, 979, 980, -1,982, 980, 983, -1,978, 984, 980, -1, + 985, 986, 987, -1,985, 987, 980, -1,983, 980, 988, -1,987, 989, 988, -1,989, 987, + 986, -1,987, 988, 980, -1,980, 984, 985, -1,990, 991, 992, -1,991, 990, 993, -1,992, + 994, 990, -1,995, 996, 997, -1,995, 998, 993, -1,998, 995, 997, -1,993, 998, 991, -1, + 999, 1000, 1001, -1,1001, 1002, 999, -1,1000, 1003, 1001, -1,1004, 1005, 1006, -1, + 1006, 1003, 1004, -1,1007, 1006, 1005, -1,1004, 1003, 1000, -1,1008, 1009, 1010, -1, + 1011, 1012, 1013, -1,1010, 1014, 1008, -1,1015, 1012, 1016, -1,1017, 1018, 1015, -1, + 1016, 1017, 1015, -1,1011, 1019, 1012, -1,1016, 1012, 1019, -1,1020, 1014, 1010, -1, + 1021, 1020, 1022, -1,1020, 1021, 1014, -1,1021, 1022, 1023, -1,1023, 1024, 1025, -1, + 1021, 1023, 1026, -1,1027, 1023, 1025, -1,1028, 1013, 1029, -1,1012, 1029, 1013, -1, + 1028, 1029, 1030, -1,1027, 1031, 1026, -1,1032, 1021, 1026, -1,1029, 1021, 1032, -1, + 1027, 1026, 1023, -1,1012, 1021, 1029, -1,1033, 1034, 1035, -1,1034, 1033, 1036, -1, + 1037, 1034, 1036, -1,1038, 1039, 1040, -1,1041, 1039, 1038, -1,1042, 1038, 1043, -1, + 1040, 1043, 1038, -1,1038, 1042, 1041, -1,1044, 1039, 1041, -1,1045, 1041, 1046, -1, + 1044, 1041, 1045, -1,1047, 1045, 1046, -1,1048, 1041, 1049, -1,1048, 1050, 1046, -1, + 1047, 1046, 1050, -1,1048, 1046, 1041, -1,1042, 1049, 1041, -1,1051, 1052, 1053, -1, + 1054, 1055, 1056, -1,1051, 1057, 1055, -1,1051, 1053, 1057, -1,1058, 1059, 1060, -1, + 1061, 1052, 1060, -1,1051, 1060, 1052, -1,1061, 1060, 1059, -1,1062, 1056, 1063, -1, + 1056, 1062, 1054, -1,1064, 1065, 1066, -1,1062, 1064, 1054, -1,1066, 1067, 1064, -1, + 1051, 1055, 1054, -1,1068, 1060, 1069, -1,1069, 1060, 1051, -1,1054, 1064, 1067, -1, + 1062, 1063, 1070, -1,1071, 1072, 1073, -1,1074, 1072, 1071, -1,1073, 1072, 1075, -1, + 1076, 1077, 1078, -1,1074, 1077, 1072, -1,1072, 1077, 1079, -1,1076, 1080, 1079, -1, + 1072, 1079, 1075, -1,1078, 1081, 1076, -1,1077, 1076, 1079, -1,1076, 1081, 1082, -1, + 1075, 1083, 1073, -1,1084, 1075, 1080, -1,1083, 1075, 1085, -1,1085, 1075, 1084, -1, + 1079, 1080, 1075, -1,1086, 1087, 1084, -1,1085, 1084, 1087, -1,1088, 1084, 1080, -1, + 1086, 1084, 1089, -1,1090, 1091, 1082, -1,1092, 1082, 1091, -1,1081, 1090, 1082, -1, + 1092, 1089, 1088, -1,1084, 1088, 1089, -1,1091, 1093, 1092, -1,1089, 1092, 1093, -1, + 1082, 1092, 1088, -1,1088, 1080, 1082, -1,1076, 1082, 1080, -1,1094, 1095, 1096, -1, + 1096, 1097, 1098, -1,1099, 1096, 1098, -1,1096, 1095, 1097, -1,1096, 1100, 1094, -1, + 1096, 1099, 1100, -1,1101, 1102, 1100, -1,1103, 1104, 1101, -1,1105, 1104, 1103, -1, + 1100, 1103, 1101, -1,1106, 1103, 1100, -1,1107, 1100, 1099, -1,1106, 1108, 1103, -1, + 1100, 1107, 1106, -1,1105, 1103, 1108, -1,1102, 1094, 1100, -1,1109, 1110, 1111, -1, + 1111, 1112, 1113, -1,1114, 1111, 1113, -1,1111, 1110, 1112, -1,1111, 1115, 1109, -1, + 1111, 1114, 1115, -1,1116, 1117, 1115, -1,1118, 1119, 1116, -1,1120, 1119, 1118, -1, + 1115, 1118, 1116, -1,1121, 1118, 1115, -1,1122, 1115, 1114, -1,1121, 1123, 1118, -1, + 1115, 1122, 1121, -1,1120, 1118, 1123, -1,1117, 1109, 1115, -1,1124, 1125, 1126, -1, + 1127, 1126, 1128, -1,1125, 1128, 1126, -1,1124, 1129, 1125, -1,1130, 1126, 1127, -1, + 1130, 1131, 1132, -1,1133, 1126, 1130, -1,1133, 1130, 1132, -1,1133, 1132, 1134, -1, + 1135, 1124, 1134, -1,1131, 1136, 1132, -1,1132, 1136, 1137, -1,1137, 1134, 1132, -1, + 1124, 1133, 1134, -1,1133, 1124, 1126, -1,1124, 1138, 1129, -1,1135, 1139, 1138, -1, + 1140, 1139, 1135, -1,1135, 1134, 1141, -1,1141, 1140, 1135, -1,1142, 1140, 1141, -1, + 1143, 1137, 1144, -1,1141, 1134, 1137, -1,1137, 1145, 1144, -1,1143, 1141, 1137, -1, + 1136, 1145, 1137, -1,1144, 1146, 1143, -1,1146, 1147, 1143, -1,1143, 1142, 1141, -1, + 1143, 1147, 1142, -1,1138, 1124, 1135, -1,1148, 1149, 1150, -1,1151, 1149, 1148, -1, + 1152, 1148, 1153, -1,1150, 1153, 1148, -1,1148, 1152, 1151, -1,1154, 1149, 1151, -1, + 1155, 1151, 1156, -1,1154, 1151, 1155, -1,1157, 1155, 1156, -1,1158, 1151, 1159, -1, + 1158, 1160, 1156, -1,1157, 1156, 1160, -1,1158, 1156, 1151, -1,1152, 1159, 1151, -1, + 1161, 1162, 1163, -1,1164, 1165, 1161, -1,1162, 1161, 1165, -1,1166, 1167, 1168, -1, + 1161, 1167, 1164, -1,1164, 1169, 1165, -1,1163, 1167, 1161, -1,1170, 1167, 1163, -1, + 1171, 1172, 1168, -1,1170, 1173, 1168, -1,1168, 1172, 1174, -1,1175, 1168, 1174, -1, + 1173, 1171, 1168, -1,1168, 1167, 1170, -1,1164, 1167, 1166, -1,1164, 1176, 1177, -1, + 1176, 1166, 1178, -1,1176, 1164, 1166, -1,1176, 1179, 1177, -1,1177, 1169, 1164, -1, + 1176, 1180, 1179, -1,1180, 1176, 1181, -1,1182, 1178, 1175, -1,1166, 1175, 1178, -1, + 1183, 1182, 1184, -1,1175, 1184, 1182, -1,1182, 1185, 1178, -1,1174, 1184, 1175, -1, + 1178, 1185, 1181, -1,1182, 1183, 1185, -1,1181, 1176, 1178, -1,1168, 1175, 1166, -1, + 1186, 1187, 1188, -1,1188, 1187, 1189, -1,1190, 1188, 1191, -1,1189, 1191, 1188, -1, + 1188, 1190, 1186, -1,1192, 1187, 1186, -1,1193, 1186, 1194, -1,1192, 1186, 1193, -1, + 1195, 1193, 1194, -1,1196, 1186, 1197, -1,1196, 1198, 1194, -1,1195, 1194, 1198, -1, + 1196, 1194, 1186, -1,1190, 1197, 1186, -1,1198, 884, 884, -1,884, 884, 1198, -1,1199, + 1200, 1201, -1,1202, 1201, 1200, -1,1200, 1203, 1202, -1,1200, 1199, 1204, -1,1205, + 1203, 1204, -1,1206, 1205, 1204, -1,1207, 1205, 1206, -1,1208, 1204, 1199, -1,1208, + 1209, 1206, -1,1207, 1206, 1209, -1,1208, 1206, 1204, -1,1203, 1200, 1204, -1,1210, + 1209, 1211, -1,1211, 1209, 1212, -1,1210, 1211, 1213, -1,1214, 1215, 1211, -1,1213, + 1211, 1215, -1,1211, 1212, 1214, -1,1216, 1217, 1215, -1,1215, 1218, 1216, -1,1216, + 1219, 1220, -1,1216, 1221, 1217, -1,1216, 1220, 1221, -1,1219, 1216, 1218, -1,1222, + 1223, 1224, -1,1225, 1224, 1223, -1,1226, 1222, 1224, -1,1221, 1227, 1228, -1,1221, + 1228, 1229, -1,1229, 1230, 1231, -1,1230, 1229, 1228, -1,1231, 1230, 1226, -1,1226, + 1224, 1231, -1,1225, 1232, 1224, -1,1233, 1234, 1235, -1,1235, 1234, 1236, -1,1233, + 1235, 1237, -1,1236, 1238, 1239, -1,1239, 1240, 1241, -1,1238, 1240, 1239, -1,1238, + 1236, 1234, -1,1235, 1236, 1242, -1,1235, 1232, 1237, -1,1235, 1242, 1232, -1,1232, + 1243, 1237, -1,1241, 1244, 1239, -1,1244, 1241, 1245, -1,1244, 1246, 1239, -1,1246, + 1242, 1236, -1,1239, 1246, 1236, -1,1243, 1232, 1225, -1,1247, 1248, 1249, -1,1248, + 1250, 1251, -1,1252, 1247, 1249, -1,1253, 1254, 1255, -1,1256, 1248, 1247, -1,1254, + 1256, 1257, -1,1257, 1255, 1254, -1,1254, 1248, 1256, -1,1251, 1258, 1259, -1,1249, + 1248, 1251, -1,1250, 1254, 1253, -1,1259, 1260, 1261, -1,1262, 1260, 1259, -1,1251, + 1259, 1261, -1,1263, 1263, 1263, -1,1251, 1264, 1258, -1,1249, 1251, 1261, -1,1248, + 1254, 1250, -1,1265, 1257, 1266, -1,1267, 1257, 1265, -1,1257, 1267, 1255, -1,1268, + 1269, 1270, -1,1271, 1272, 1273, -1,1273, 1272, 1274, -1,1275, 1273, 1276, -1,1277, + 1276, 1273, -1,1273, 1275, 1271, -1,1273, 1274, 1278, -1,1279, 1280, 1269, -1,1279, + 1278, 1280, -1,1280, 1278, 1274, -1,1277, 1279, 1281, -1,1279, 1277, 1278, -1,1281, + 1279, 1268, -1,1269, 1268, 1279, -1,1278, 1277, 1273, -1,1282, 1283, 1284, -1,884, + 1283, 1285, -1,1284, 1286, 1287, -1,1282, 1285, 1283, -1,1288, 1289, 1290, -1,1287, + 1282, 1284, -1,1287, 1286, 1291, -1,1292, 1293, 1294, -1,1289, 1295, 1290, -1,1293, + 1292, 1295, -1,1291, 1286, 1294, -1,1294, 1286, 1296, -1,1297, 1298, 1299, -1,1300, + 1290, 1295, -1,1300, 1295, 1292, -1,1301, 1302, 1299, -1,1303, 1304, 1305, -1,1300, + 1301, 1299, -1,1290, 1299, 1298, -1,1299, 1302, 1297, -1,1306, 1288, 1290, -1,1300, + 1299, 1290, -1,1307, 1289, 1288, -1,1298, 1297, 1303, -1,1303, 1308, 1298, -1,1309, + 1308, 1305, -1,1303, 1305, 1308, -1,1304, 1309, 1305, -1,1294, 1296, 1292, -1,1310, + 1311, 1312, -1,857, 1312, 855, -1,854, 855, 1312, -1,1312, 857, 1310, -1,1312, 1311, + 854, -1,1313, 854, 861, -1,861, 854, 1311, -1,1313, 861, 862, -1,1314, 1313, 1315, -1, + 1313, 1314, 854, -1,1315, 1313, 862, -1,854, 1314, 855, -1,22, 22, 22, -1,22, 22, + 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, + 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,1316, 1317, 1318, -1, + 1319, 1317, 1316, -1,1320, 1316, 1321, -1,1318, 1321, 1316, -1,1316, 1320, 1319, -1, + 1322, 1317, 1319, -1,1323, 1319, 1324, -1,1322, 1319, 1323, -1,1325, 1323, 1324, -1, + 1326, 1319, 1322, -1,1326, 1327, 1324, -1,1325, 1324, 1327, -1,1326, 1324, 1319, -1, + 1320, 1322, 1319, -1,0, 0, 0, -1,0, 0, 0, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, + 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, + 22, -1,1328, 1328, 1328, -1,1328, 1328, 1328, -1,1328, 1328, 1328, -1,1328, 1328, + 1328, -1,1329, 1330, 1331, -1,1332, 1331, 1330, -1,1330, 1333, 1332, -1,1334, 1335, + 1333, -1,1336, 1335, 1337, -1,1334, 1337, 1335, -1,1330, 1329, 1334, -1,1338, 1334, + 1329, -1,1338, 1339, 1337, -1,1336, 1337, 1339, -1,1338, 1337, 1334, -1,1333, 1330, + 1334, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1, + 22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, + 22, -1,22, 22, 22, -1,22, 22, 22, -1,22, 22, 22, -1,1340, 1341, 1342, -1,1343, 1341, + 1340, -1,1344, 1340, 1345, -1,1342, 1345, 1340, -1,1340, 1344, 1343, -1,1346, 1341, + 1343, -1,1347, 1343, 1348, -1,1346, 1343, 1347, -1,1349, 1347, 1348, -1,1350, 1343, + 1346, -1,1350, 1351, 1348, -1,1349, 1348, 1351, -1,1350, 1348, 1343, -1,1344, 1346, + 1343, -1,950, 950, 950, -1,950, 1352, 950, -1,1353, 1354, 1352, -1,1355, 1354, 1353, -1, + 1356, 1353, 1357, -1,1352, 1357, 1353, -1,1353, 1356, 1355, -1,1358, 1354, 1355, -1, + 1359, 1355, 1360, -1,1358, 1355, 1359, -1,1361, 1359, 1360, -1,1362, 1355, 1358, -1, + 1362, 1363, 1360, -1,1361, 1360, 1363, -1,1362, 1360, 1355, -1,1356, 1358, 1355, -1, + 781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, + 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,1364, 781, 781, -1, + 1365, 1364, 781, -1,1366, 1364, 1366, -1,781, 781, 781, -1,781, 781, 1365, -1,1364, + 1365, 1366, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,1367, 1368, + 1369, -1,1370, 1368, 1367, -1,1371, 1367, 1372, -1,1369, 1372, 1367, -1,1367, 1371, + 1370, -1,1373, 1368, 1370, -1,1374, 1370, 1375, -1,1373, 1370, 1374, -1,1376, 1374, + 1375, -1,1377, 1370, 1373, -1,1377, 1378, 1375, -1,1376, 1375, 1378, -1,1377, 1375, + 1370, -1,1371, 1373, 1370, -1,1379, 1380, 1381, -1,1379, 1382, 1380, -1,1383, 1384, + 1379, -1,1379, 1384, 1382, -1,1384, 1383, 1385, -1,1379, 1381, 1383, -1,1383, 1381, + 1386, -1,1387, 1388, 1389, -1,1385, 1383, 1389, -1,1389, 1388, 1385, -1,1389, 1383, + 1386, -1,1389, 1386, 1387, -1,1390, 1391, 1392, -1,1392, 1393, 1394, -1,1391, 1390, + 1395, -1,1390, 1392, 1394, -1,1395, 1396, 1391, -1,781, 781, 781, -1,1396, 781, 781, -1, + 1396, 781, 781, -1,781, 781, 1396, -1,1391, 1396, 781, -1,0, 0, 0, -1,0, 0, 0, -1, + 884, 884, 884, -1,884, 884, 1397, -1,884, 1397, 884, -1,884, 884, 1397, -1,1398, + 1399, 1400, -1,1397, 1401, 1398, -1,1402, 1400, 1399, -1,1398, 1401, 1399, -1,884, + 1397, 1398, -1,1403, 1400, 1402, -1,950, 950, 950, -1,950, 950, 950, -1,1404, 1405, + 1406, -1,1405, 1404, 1407, -1,1408, 1406, 1405, -1,1409, 1407, 1410, -1,1407, 1409, + 1405, -1,1410, 1411, 1409, -1,1412, 1412, 1412, -1,1412, 1412, 1412, -1,1413, 1414, + 1415, -1,1416, 1415, 1414, -1,1414, 22, 22, -1,1414, 1413, 22, -1,1413, 1417, 1418, -1, + 1415, 1417, 1413, -1,1419, 1419, 1419, -1,1419, 1419, 1419, -1,1420, 1420, 1421, -1, + 1420, 1420, 1422, -1,1423, 1424, 1423, -1,1423, 1425, 1423, -1,1426, 1426, 1426, -1, + 1426, 1426, 1426, -1,1427, 1428, 1429, -1,1430, 1428, 1431, -1,1428, 1430, 1432, -1, + 1427, 1431, 1428, -1,1432, 1429, 1428, -1,1430, 1433, 1432, -1,1434, 1432, 1435, -1, + 1436, 1434, 1435, -1,1437, 1435, 1433, -1,1432, 1433, 1435, -1,1436, 1435, 1437, -1, + 1434, 1429, 1432, -1,1438, 1439, 1440, -1,1439, 1438, 1441, -1,1442, 1440, 1443, -1, + 1444, 1442, 1443, -1,1445, 1446, 1447, -1,1446, 1444, 1447, -1,1439, 1443, 1440, -1, + 1439, 1448, 1443, -1,1439, 1449, 1448, -1,1443, 1448, 1450, -1,1447, 1451, 1452, -1, + 1451, 1447, 1443, -1,1447, 1452, 1445, -1,1443, 1447, 1444, -1,1443, 1450, 1451, -1, + 1439, 1441, 1449, -1,1453, 1454, 1455, -1,1456, 1455, 1457, -1,1453, 1455, 1458, -1, + 1458, 1456, 1459, -1,1456, 1458, 1455, -1,1459, 1456, 1460, -1,1455, 1454, 1457, -1, + 1461, 1462, 1463, -1,1464, 1463, 1465, -1,1456, 1457, 1466, -1,1461, 1457, 1462, -1, + 1464, 1461, 1463, -1,1467, 1457, 1461, -1,1465, 1468, 1464, -1,1462, 1457, 1454, -1, + 1467, 1461, 1464, -1,1460, 1469, 1470, -1,1460, 1456, 1469, -1,1470, 1469, 1471, -1, + 1469, 1472, 1471, -1,1466, 1467, 1472, -1,1467, 1466, 1457, -1,1472, 1467, 1473, -1, + 1466, 1472, 1469, -1,1474, 1473, 1475, -1,1473, 1474, 1472, -1,1476, 1473, 1467, -1, + 1473, 1477, 1475, -1,1472, 1474, 1471, -1,1456, 1466, 1469, -1,1476, 1467, 1464, -1, + 1468, 1478, 1479, -1,1479, 1478, 1480, -1,1479, 1476, 1464, -1,1479, 1481, 1476, -1, + 1481, 1479, 1480, -1,1481, 1480, 1482, -1,1476, 1481, 1483, -1,1478, 1484, 1480, -1, + 1479, 1464, 1468, -1,1484, 1452, 1485, -1,1485, 1452, 1486, -1,1485, 1482, 1480, -1, + 1485, 1487, 1482, -1,1487, 1485, 1486, -1,1487, 1486, 1488, -1,1482, 1487, 1489, -1, + 1485, 1480, 1484, -1,1481, 1482, 1490, -1,1477, 1483, 1491, -1,1477, 1476, 1483, -1, + 1483, 1481, 1490, -1,1483, 1490, 1492, -1,1477, 1491, 1493, -1,1491, 1483, 1492, -1, + 1490, 1494, 1492, -1,1477, 1493, 1475, -1,1487, 1495, 1489, -1,1489, 1490, 1482, -1, + 1489, 1495, 1496, -1,1496, 1494, 1489, -1,1489, 1494, 1490, -1,1487, 1488, 1495, -1, + 1476, 1477, 1473, -1,1497, 1498, 1499, -1,1499, 1498, 1500, -1,1497, 1499, 1501, -1, + 1502, 1500, 1503, -1,1503, 1500, 1498, -1,1502, 1503, 1504, -1,1499, 1500, 1505, -1, + 1501, 1499, 1505, -1,1505, 1500, 1506, -1,1502, 1507, 1508, -1,1507, 1502, 1504, -1, + 1508, 1507, 1509, -1,1502, 1508, 1506, -1,1502, 1506, 1500, -1,1504, 1510, 1507, -1, + 1511, 1512, 1507, -1,1512, 1511, 1513, -1,1514, 1507, 1512, -1,1515, 1513, 1516, -1, + 1512, 1513, 1515, -1,1517, 1516, 1518, -1,1507, 1514, 1509, -1,1514, 1512, 1519, -1, + 1515, 1517, 1520, -1,1517, 1515, 1516, -1,1521, 1520, 1517, -1,1517, 1518, 1521, -1, + 1515, 1520, 1519, -1,1515, 1519, 1512, -1,1507, 1510, 1511, -1,1522, 1523, 1524, -1, + 1523, 1522, 1525, -1,1524, 1523, 1526, -1,1527, 1528, 1529, -1,1526, 1529, 1524, -1, + 1527, 1529, 1526, -1,1523, 1530, 1526, -1,1530, 1531, 1526, -1,1530, 1525, 1532, -1, + 1531, 1530, 1533, -1,1526, 1531, 1527, -1,1527, 1534, 1535, -1,1534, 1527, 1531, -1, + 1535, 1534, 1536, -1,1527, 1535, 1528, -1,1531, 1537, 1534, -1,1530, 1523, 1525, -1, + 1528, 1535, 1538, -1,1539, 1540, 1541, -1,1542, 1539, 1543, -1,1544, 1540, 1538, -1, + 1544, 1536, 1545, -1,1544, 1538, 1535, -1,1545, 1536, 1546, -1,1544, 1545, 1541, -1, + 1542, 1543, 1547, -1,1539, 1541, 1543, -1,1543, 1548, 1547, -1,1549, 1543, 1541, -1, + 1543, 1550, 1548, -1,1549, 1541, 1545, -1,1541, 1540, 1544, -1,1535, 1536, 1544, -1, + 1534, 1551, 1536, -1,1532, 1552, 1533, -1,1537, 1533, 1553, -1,1533, 1537, 1531, -1, + 1551, 1534, 1537, -1,1554, 1551, 1537, -1,1555, 1546, 1551, -1,1551, 1546, 1536, -1, + 1552, 1556, 1533, -1,1546, 1557, 1545, -1,1554, 1555, 1551, -1,1556, 1553, 1533, -1, + 1554, 1537, 1553, -1,1558, 1556, 1552, -1,1546, 1555, 1557, -1,1549, 1557, 1559, -1, + 1549, 1545, 1557, -1,1559, 1557, 1560, -1,1549, 1559, 1550, -1,1550, 1561, 1562, -1, + 1563, 1561, 1550, -1,1550, 1562, 1548, -1,1550, 1559, 1563, -1,1549, 1550, 1543, -1, + 1564, 1565, 1563, -1,1564, 1563, 1559, -1,1563, 1566, 1561, -1,1563, 1565, 1566, -1, + 1564, 1559, 1560, -1,1557, 1555, 1560, -1,1530, 1532, 1533, -1,1567, 1568, 1569, -1, + 1570, 1567, 1569, -1,1567, 1571, 1572, -1,1567, 1573, 1568, -1,1570, 1571, 1567, -1, + 1567, 1572, 1573, -1,1570, 1569, 1574, -1,1575, 1576, 1570, -1,1575, 1570, 1574, -1, + 1577, 1576, 1575, -1,1578, 1576, 1577, -1,1570, 1579, 1580, -1,1579, 1570, 1576, -1, + 1579, 1576, 1581, -1,1581, 1576, 1578, -1,1570, 1580, 1571, -1,1581, 1582, 1583, -1, + 1582, 1581, 1584, -1,1582, 1584, 1583, -1,1585, 1582, 1585, -1,1585, 1584, 1582, -1, + 1585, 1582, 1584, -1,1586, 1587, 1588, -1,1589, 1590, 1591, -1,1591, 1590, 1592, -1, + 1589, 1591, 1588, -1,1586, 1588, 1591, -1,1593, 1594, 1595, -1,1586, 1594, 1593, -1, + 1593, 1587, 1586, -1,1591, 1596, 1586, -1,1597, 1586, 1596, -1,1597, 1598, 1586, -1, + 1594, 1599, 1600, -1,1599, 1594, 1598, -1,1594, 1600, 1595, -1,1586, 1598, 1594, -1, + 1596, 1591, 1592, -1,1601, 1602, 1603, -1,1602, 1601, 1604, -1,1604, 1605, 1606, -1, + 1606, 1605, 1607, -1,1604, 1606, 1602, -1,1602, 1606, 1608, -1,1603, 1609, 1610, -1, + 1603, 1602, 1609, -1,1610, 1609, 1611, -1,1608, 1607, 1612, -1,1608, 1609, 1602, -1, + 1612, 1607, 1613, -1,1608, 1612, 1614, -1,1607, 1608, 1606, -1,1609, 1608, 1615, -1, + 1605, 1616, 1607, -1,1616, 1617, 1613, -1,1618, 1619, 1620, -1,1619, 1621, 1617, -1, + 1622, 1620, 1623, -1,1612, 1613, 1624, -1,1613, 1617, 1621, -1,1621, 1619, 1618, -1, + 1625, 1613, 1621, -1,1623, 1626, 1622, -1,1622, 1618, 1620, -1,1626, 1627, 1628, -1, + 1629, 1618, 1622, -1,1623, 1627, 1626, -1,1630, 1621, 1618, -1,1616, 1613, 1607, -1, + 1629, 1622, 1626, -1,1611, 1631, 1632, -1,1611, 1609, 1631, -1,1608, 1614, 1615, -1, + 1615, 1631, 1609, -1,1633, 1614, 1634, -1,1615, 1614, 1635, -1,1614, 1612, 1624, -1, + 1631, 1615, 1636, -1,1615, 1635, 1636, -1,1635, 1614, 1633, -1,1632, 1631, 1636, -1, + 1614, 1624, 1634, -1,1634, 1625, 1637, -1,1625, 1634, 1624, -1,1638, 1637, 1630, -1, + 1630, 1637, 1625, -1,1629, 1630, 1618, -1,1639, 1630, 1629, -1,1625, 1621, 1630, -1, + 1634, 1637, 1640, -1,1637, 1641, 1640, -1,1641, 1637, 1638, -1,1641, 1638, 1642, -1, + 1642, 1639, 1643, -1,1639, 1642, 1638, -1,1644, 1639, 1629, -1,1638, 1630, 1639, -1, + 1639, 1645, 1643, -1,1634, 1640, 1633, -1,1624, 1613, 1625, -1,1644, 1629, 1626, -1, + 1646, 1644, 1626, -1,1646, 1628, 1647, -1,1648, 1647, 1649, -1,1646, 1647, 1648, -1, + 1650, 1649, 1651, -1,1646, 1652, 1644, -1,1652, 1646, 1648, -1,1652, 1648, 1653, -1, + 1644, 1652, 1654, -1,1653, 1650, 1655, -1,1650, 1653, 1648, -1,1656, 1655, 1650, -1, + 1653, 1655, 1657, -1,1648, 1649, 1650, -1,1652, 1653, 1658, -1,1650, 1651, 1656, -1, + 1646, 1626, 1628, -1,1659, 1656, 1660, -1,1660, 1656, 1651, -1,1659, 1660, 1661, -1, + 1662, 1661, 1663, -1,1664, 1663, 1665, -1,1666, 1659, 1667, -1,1659, 1666, 1656, -1, + 1667, 1659, 1662, -1,1666, 1667, 1668, -1,1669, 1662, 1664, -1,1664, 1662, 1663, -1, + 1670, 1664, 1665, -1,1662, 1671, 1667, -1,1659, 1661, 1662, -1,1669, 1664, 1670, -1, + 1656, 1666, 1655, -1,1655, 1666, 1672, -1,1645, 1654, 1673, -1,1645, 1644, 1654, -1, + 1658, 1657, 1674, -1,1658, 1653, 1657, -1,1657, 1655, 1672, -1,1657, 1672, 1675, -1, + 1652, 1658, 1654, -1,1654, 1658, 1676, -1,1645, 1673, 1677, -1,1654, 1676, 1673, -1, + 1657, 1675, 1674, -1,1674, 1676, 1658, -1,1675, 1672, 1678, -1,1672, 1668, 1678, -1, + 1645, 1677, 1643, -1,1668, 1671, 1679, -1,1668, 1672, 1666, -1,1679, 1671, 1669, -1, + 1668, 1679, 1680, -1,1669, 1681, 1682, -1,1681, 1669, 1670, -1,1679, 1669, 1683, -1, + 1671, 1662, 1669, -1,1683, 1669, 1682, -1,1679, 1684, 1680, -1,1684, 1679, 1683, -1, + 1684, 1683, 1685, -1,1683, 1682, 1685, -1,1668, 1680, 1678, -1,1671, 1668, 1667, -1, + 1644, 1645, 1639, -1,1686, 1687, 1688, -1,1689, 1686, 1690, -1,1690, 1691, 1689, -1, + 1691, 1692, 1693, -1,1687, 1694, 1688, -1,1688, 1695, 1696, -1,1688, 1694, 1695, -1, + 1688, 1696, 1690, -1,1690, 1692, 1691, -1,1692, 1690, 1697, -1,1698, 1692, 1699, -1, + 1692, 1698, 1693, -1,1692, 1697, 1699, -1,1697, 1690, 1700, -1,1690, 1696, 1700, -1, + 1688, 1690, 1686, -1,1701, 1702, 1701, -1,1701, 1703, 1702, -1,1702, 1704, 1703, -1, + 1704, 1702, 1704, -1,1702, 1703, 1701, -1,1704, 1702, 1703, -1,1705, 1706, 1707, -1, + 1708, 1709, 1707, -1,1710, 1705, 1707, -1,1709, 1711, 1707, -1,1712, 1709, 1708, -1, + 1707, 1711, 1710, -1,1707, 1706, 1708, -1,1713, 1714, 1708, -1,1715, 1708, 1714, -1, + 1713, 1708, 1706, -1,1715, 1714, 1716, -1,1717, 1715, 1718, -1,1715, 1717, 1708, -1, + 1718, 1715, 1719, -1,1715, 1716, 1719, -1,1708, 1717, 1712, -1,1720, 1721, 1722, -1, + 1723, 1722, 1724, -1,1725, 1723, 1724, -1,1726, 1723, 1727, -1,1727, 1723, 1725, -1, + 1726, 1727, 1728, -1,1720, 1726, 1729, -1,1726, 1720, 1723, -1,1729, 1726, 1730, -1, + 1721, 1720, 1731, -1,1728, 1732, 1726, -1,1723, 1720, 1722, -1,1733, 1720, 1729, -1, + 1734, 1735, 1736, -1,1731, 1735, 1721, -1,1737, 1734, 1738, -1,1739, 1740, 1737, -1, + 1741, 1742, 1740, -1,1735, 1731, 1736, -1,1736, 1733, 1743, -1,1733, 1736, 1731, -1, + 1743, 1733, 1744, -1,1736, 1743, 1738, -1,1738, 1739, 1737, -1,1739, 1738, 1745, -1, + 1741, 1746, 1742, -1,1747, 1746, 1741, -1,1741, 1739, 1748, -1,1739, 1741, 1740, -1, + 1745, 1738, 1743, -1,1736, 1738, 1734, -1,1731, 1720, 1733, -1,1729, 1749, 1733, -1, + 1730, 1749, 1729, -1,1750, 1749, 1730, -1,1751, 1744, 1749, -1,1733, 1749, 1744, -1, + 1744, 1752, 1753, -1,1751, 1752, 1744, -1,1754, 1753, 1752, -1,1744, 1753, 1743, -1, + 1730, 1732, 1755, -1,1743, 1753, 1745, -1,1756, 1757, 1758, -1,1759, 1750, 1730, -1, + 1751, 1749, 1750, -1,1755, 1759, 1730, -1,1760, 1760, 1760, -1,1754, 1752, 1761, -1, + 1745, 1754, 1748, -1,1754, 1745, 1753, -1,1748, 1754, 1762, -1,1745, 1748, 1739, -1, + 1763, 1747, 1764, -1,1762, 1747, 1748, -1,1764, 1747, 1762, -1,1747, 1763, 1746, -1, + 1761, 1762, 1754, -1,1748, 1747, 1741, -1,1764, 1765, 1757, -1,1765, 1764, 1762, -1, + 1764, 1757, 1766, -1,1767, 1757, 1768, -1,1766, 1757, 1769, -1,1768, 1757, 1756, -1, + 1764, 1766, 1763, -1,1761, 1765, 1762, -1,1730, 1726, 1732, -1,1770, 1757, 1770, -1, + 1769, 1757, 1767, -1,1771, 1772, 1773, -1,1774, 1773, 1772, -1,1771, 1773, 1775, -1, + 1776, 1777, 1778, -1,1774, 1772, 1777, -1,1779, 1776, 1778, -1,1773, 1780, 1775, -1, + 1780, 1773, 1774, -1,1780, 1774, 1781, -1,1781, 1776, 1782, -1,1776, 1781, 1774, -1, + 1779, 1782, 1776, -1,1774, 1777, 1776, -1,1779, 1778, 1783, -1,1779, 1784, 1785, -1, + 1784, 1779, 1783, -1,1785, 1784, 1786, -1,1779, 1785, 1787, -1,1788, 1786, 1789, -1, + 1785, 1786, 1788, -1,1790, 1789, 1791, -1,1792, 1779, 1787, -1,1787, 1785, 1793, -1, + 1788, 1790, 1794, -1,1790, 1788, 1789, -1,1795, 1794, 1790, -1,1790, 1791, 1795, -1, + 1788, 1794, 1793, -1,1788, 1793, 1785, -1,1779, 1792, 1782, -1,1796, 1797, 1798, -1, + 1798, 1797, 1799, -1,1796, 1798, 1800, -1,1798, 1801, 1800, -1,1801, 1798, 1799, -1, + 1801, 1799, 1802, -1,1800, 1801, 1803, -1,1797, 1804, 1799, -1,1804, 1805, 1806, -1, + 1806, 1805, 1807, -1,1806, 1802, 1799, -1,1806, 1808, 1802, -1,1808, 1806, 1807, -1, + 1809, 1808, 1810, -1,1802, 1808, 1809, -1,1805, 1811, 1807, -1,1806, 1799, 1804, -1, + 1812, 1813, 1813, -1,1801, 1802, 1814, -1,1803, 1801, 1815, -1,1801, 1816, 1815, -1, + 1817, 1818, 1816, -1,1816, 1818, 1815, -1,1819, 1819, 1812, -1,1820, 1817, 1814, -1, + 1814, 1817, 1816, -1,1816, 1801, 1814, -1,1820, 1814, 1809, -1,1809, 1821, 1820, -1, + 1822, 1821, 1823, -1,1823, 1821, 1809, -1,1802, 1809, 1814, -1,1810, 1808, 1807, -1, + 1824, 1824, 1824, -1,1807, 1825, 1826, -1,1826, 1825, 1827, -1,1810, 1826, 1828, -1, + 1810, 1807, 1826, -1,1829, 1828, 1826, -1,1810, 1828, 1830, -1,1826, 1827, 1829, -1, + 1807, 1811, 1825, -1,1831, 1829, 1832, -1,1832, 1829, 1827, -1,1831, 1832, 1833, -1, + 1834, 1835, 1831, -1,1831, 1835, 1829, -1,1836, 1831, 1833, -1,1834, 1831, 1836, -1, + 1817, 1837, 1838, -1,1829, 1835, 1828, -1,1817, 1839, 1837, -1,1828, 1835, 1840, -1, + 1823, 1830, 1841, -1,1823, 1810, 1830, -1,1830, 1828, 1840, -1,1830, 1840, 1842, -1, + 1830, 1842, 1841, -1,1842, 1840, 1843, -1,1840, 1844, 1843, -1,1823, 1841, 1822, -1, + 1834, 1845, 1846, -1,1845, 1834, 1836, -1,1817, 1838, 1847, -1,1834, 1846, 1844, -1, + 1848, 1844, 1846, -1,1843, 1844, 1848, -1,1834, 1844, 1840, -1,1834, 1840, 1835, -1, + 1810, 1823, 1809, -1,1817, 1847, 1818, -1,1812, 1819, 1819, -1,1849, 1849, 1849, -1, + 950, 950, 950, -1,1850, 1851, 1852, -1,1851, 1850, 1853, -1,1852, 1851, 1854, -1, + 1855, 1856, 1854, -1,1857, 1858, 1855, -1,1857, 1855, 1854, -1,1856, 1852, 1854, -1, + 1851, 1859, 1854, -1,1859, 1860, 1854, -1,1851, 1861, 1859, -1,1860, 1862, 1854, -1, + 1857, 1863, 1864, -1,1863, 1857, 1862, -1,1857, 1864, 1858, -1,1854, 1862, 1857, -1, + 1851, 1853, 1861, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,1865, + 950, 950, -1,950, 1866, 1865, -1,950, 950, 950, -1,950, 950, 950, -1,1865, 1866, + 1866, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, + 950, -1,950, 950, 950, -1,1867, 950, 950, -1,950, 1868, 950, -1,1868, 950, 1866, -1, + 1869, 1867, 1869, -1,950, 1869, 1870, -1,950, 950, 950, -1,950, 950, 950, -1,950, + 950, 950, -1,1869, 1867, 950, -1,950, 950, 950, -1,950, 950, 1870, -1,950, 950, 950, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,1870, 1869, + 1869, -1,1866, 1866, 1868, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, + 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, + 1871, 1872, -1,1871, 950, 950, -1,1872, 1871, 1872, -1,950, 950, 950, -1,950, 950, + 950, -1,950, 950, 950, -1,950, 950, 1873, -1,950, 950, 950, -1,950, 950, 950, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,1874, 950, + 1875, -1,950, 1875, 950, -1,950, 1876, 950, -1,1876, 1872, 950, -1,1874, 1875, 1874, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 1873, 1874, -1,1874, 1873, + 1874, -1,1876, 1872, 1872, -1,950, 950, 950, -1,1877, 1878, 1879, -1,1880, 1877, + 1881, -1,1882, 1877, 1879, -1,1882, 1881, 1877, -1,1883, 1884, 1885, -1,1878, 1886, + 1879, -1,1885, 1884, 1878, -1,1886, 1878, 1884, -1,1880, 1881, 1887, -1,1888, 1889, + 1890, -1,1891, 1889, 1888, -1,1892, 1893, 1894, -1,1892, 1891, 1893, -1,1895, 1896, + 1897, -1,1888, 1893, 1891, -1,1889, 1896, 1898, -1,1893, 1888, 1894, -1,1891, 1892, + 1885, -1,1883, 1885, 1892, -1,1881, 1882, 1887, -1,1888, 1890, 1899, -1,1879, 1886, + 1882, -1,1886, 1884, 1883, -1,1894, 1888, 1899, -1,1892, 1894, 1883, -1,1890, 1898, + 1899, -1,1898, 1900, 1901, -1,1900, 1898, 1896, -1,1895, 1900, 1896, -1,1900, 1895, + 1901, -1,1901, 1895, 1902, -1,1902, 1903, 1904, -1,1905, 46, 1903, -1,1895, 1903, + 1902, -1,1904, 1903, 46, -1,1895, 1897, 1903, -1,1898, 1901, 1899, -1,1890, 1889, + 1898, -1,1903, 1897, 1905, -1,1906, 1905, 1907, -1,1908, 1907, 1909, -1,1906, 1908, + 1910, -1,1908, 1906, 1907, -1,1911, 1912, 1913, -1,1912, 1911, 1909, -1,1908, 1909, + 1911, -1,1908, 1911, 1913, -1,1909, 1914, 1912, -1,1906, 1904, 46, -1,1915, 1916, + 1914, -1,1914, 1916, 1917, -1,1915, 1918, 1919, -1,1920, 1921, 1918, -1,1922, 1923, + 1920, -1,1922, 1924, 1925, -1,1914, 1917, 1912, -1,1912, 1917, 1926, -1,1904, 1906, + 1910, -1,1916, 1926, 1917, -1,1927, 1916, 1915, -1,1928, 1916, 1927, -1,1910, 1908, + 1913, -1,1928, 1926, 1916, -1,1912, 1926, 1913, -1,1927, 1919, 1928, -1,1918, 1929, + 1919, -1,1929, 1918, 1921, -1,1922, 1930, 1923, -1,1930, 1922, 1925, -1,1920, 1923, + 1931, -1,1920, 1931, 1921, -1,1931, 1929, 1921, -1,1932, 1930, 1925, -1,1931, 1923, + 1930, -1,1925, 1924, 1932, -1,1919, 1929, 1928, -1,1927, 1915, 1919, -1,1906, 46, + 1905, -1,1933, 1924, 1934, -1,1935, 1934, 1936, -1,1937, 1934, 1935, -1,1937, 1933, + 1934, -1,1938, 1939, 1940, -1,1936, 1941, 1935, -1,1940, 1939, 1936, -1,1941, 1936, + 1939, -1,1924, 1933, 1942, -1,1943, 1944, 1945, -1,1946, 1947, 1948, -1,1946, 1943, + 1947, -1,1949, 1950, 1944, -1,1945, 1947, 1943, -1,1944, 1951, 1945, -1,1947, 1945, + 1948, -1,1949, 1952, 1953, -1,1943, 1946, 1940, -1,1938, 1940, 1946, -1,1933, 1937, + 1942, -1,1945, 1951, 1954, -1,1935, 1941, 1937, -1,1941, 1939, 1938, -1,1948, 1945, + 1954, -1,1946, 1948, 1938, -1,1951, 1950, 1954, -1,1950, 1955, 1956, -1,1955, 1950, + 1949, -1,1953, 1955, 1949, -1,1955, 1953, 1956, -1,1956, 1953, 1957, -1,1957, 1958, + 1959, -1,1960, 22, 1958, -1,1953, 1958, 1957, -1,1959, 1958, 22, -1,1953, 1952, 1958, -1, + 1950, 1956, 1954, -1,1951, 1944, 1950, -1,1958, 1952, 1960, -1,1961, 1962, 1963, -1, + 1960, 1961, 1964, -1,1964, 1963, 1965, -1,1963, 1964, 1961, -1,1966, 1967, 1968, -1, + 1967, 1966, 1962, -1,1963, 1962, 1966, -1,1963, 1966, 1968, -1,1962, 1969, 1967, -1, + 1964, 1959, 22, -1,1970, 1971, 1972, -1,1973, 1974, 1970, -1,1969, 1975, 1967, -1, + 1976, 1975, 1969, -1,1976, 1969, 1977, -1,1972, 1978, 1977, -1,1973, 1979, 1980, -1, + 1967, 1975, 1981, -1,1959, 1964, 1965, -1,1976, 1981, 1975, -1,1982, 1976, 1977, -1, + 1983, 1976, 1982, -1,1965, 1963, 1968, -1,1983, 1981, 1976, -1,1967, 1981, 1968, -1, + 1982, 1978, 1983, -1,1972, 1984, 1978, -1,1984, 1972, 1971, -1,1973, 1985, 1974, -1, + 1985, 1973, 1980, -1,1970, 1974, 1986, -1,1970, 1986, 1971, -1,1986, 1984, 1971, -1, + 1987, 1985, 1980, -1,1986, 1974, 1985, -1,1980, 1979, 1987, -1,1978, 1984, 1983, -1, + 1982, 1977, 1978, -1,1964, 22, 1960, -1,1988, 1989, 1990, -1,1991, 1989, 950, -1, + 1989, 1992, 1990, -1,1988, 1990, 1993, -1,1994, 1995, 1996, -1,1993, 1996, 1995, -1, + 1995, 1988, 1993, -1,1994, 1996, 1997, -1,950, 950, 950, -1,950, 950, 950, -1,950, + 950, 950, -1,950, 950, 950, -1,1992, 1989, 1991, -1,950, 950, 950, -1,950, 950, 1991, -1, + 950, 950, 950, -1,1998, 1997, 1999, -1,950, 1999, 1997, -1,1997, 1996, 950, -1,1998, + 1999, 2000, -1,2001, 2000, 2002, -1,2001, 2003, 2004, -1,2003, 2001, 2002, -1,2000, + 1999, 2002, -1,2005, 2004, 2006, -1,2005, 950, 950, -1,2005, 950, 2004, -1,950, 950, + 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,2006, 2004, 2003, -1, + 950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1,2007, 950, + 950, -1,2008, 2009, 2010, -1,2010, 2007, 2008, -1,2008, 2007, 950, -1,2011, 2009, + 2008, -1,2009, 2011, 2012, -1,2011, 2013, 2012, -1,2012, 2013, 2014, -1,950, 2014, + 2015, -1,2016, 2015, 2014, -1,2014, 2013, 2016, -1,950, 2015, 2017, -1,950, 950, + 950, -1,950, 950, 2018, -1,950, 950, 950, -1,950, 950, 950, -1,950, 950, 950, -1, + 950, 950, 950, -1,950, 950, 950, -1,2018, 2019, 2020, -1,2021, 2017, 2022, -1,2023, + 2022, 2017, -1,2017, 2015, 2023, -1,2021, 2022, 2024, -1,2018, 2020, 950, -1,2020, + 2019, 2025, -1,2024, 2020, 2025, -1,2025, 2021, 2024, -1,2026, 2027, 2028, -1,2027, + 2029, 2030, -1,2031, 2027, 2030, -1,2027, 2031, 2028, -1,2029, 2032, 2030, -1,2032, + 2029, 2033, -1,2029, 2034, 2033, -1,2026, 2028, 2035, -1,2034, 2036, 2037, -1,2038, + 2036, 2039, -1,2038, 2037, 2036, -1,2039, 2040, 2041, -1,2036, 2040, 2039, -1,2042, + 2043, 2040, -1,2042, 2044, 2045, -1,2033, 2034, 2046, -1,2046, 2034, 2037, -1,2028, + 2031, 2035, -1,2039, 2041, 2047, -1,2030, 2032, 2031, -1,2032, 2033, 2046, -1,2038, + 2039, 2047, -1,2037, 2038, 2046, -1,2041, 2043, 2047, -1,2043, 2048, 2049, -1,2048, + 2043, 2042, -1,2045, 2048, 2042, -1,2048, 2045, 2049, -1,2049, 2045, 2050, -1,2050, + 2051, 2052, -1,2053, 46, 2051, -1,2045, 2051, 2050, -1,2052, 2051, 46, -1,2045, 2044, + 2051, -1,2043, 2049, 2047, -1,2041, 2040, 2043, -1,2051, 2044, 2053, -1,2054, 2055, + 2056, -1,2053, 2054, 2057, -1,2057, 2056, 2058, -1,2056, 2057, 2054, -1,2059, 2060, + 2061, -1,2060, 2059, 2055, -1,2056, 2055, 2059, -1,2056, 2059, 2061, -1,2055, 2062, + 2060, -1,2057, 2052, 46, -1,2063, 2064, 2062, -1,2062, 2064, 2065, -1,2063, 2066, + 2067, -1,2068, 2069, 2066, -1,2070, 2071, 2068, -1,2070, 2072, 2073, -1,2062, 2065, + 2060, -1,2060, 2065, 2074, -1,2052, 2057, 2058, -1,2064, 2074, 2065, -1,2075, 2063, + 2067, -1,2064, 2063, 2075, -1,2058, 2056, 2061, -1,2075, 2074, 2064, -1,2060, 2074, + 2061, -1,2067, 2076, 2075, -1,2068, 2077, 2069, -1,2077, 2068, 2071, -1,2078, 2070, + 2073, -1,2070, 2078, 2071, -1,2077, 2076, 2069, -1,2079, 2078, 2073, -1,2077, 2071, + 2078, -1,2073, 2072, 2079, -1,2076, 2067, 2066, -1,2066, 2069, 2076, -1,2057, 46, + 2053, -1,2080, 2081, 2082, -1,2072, 2080, 2083, -1,2084, 2080, 2082, -1,2080, 2084, + 2083, -1,2081, 2085, 2082, -1,2085, 2081, 2086, -1,2081, 2087, 2086, -1,2072, 2083, + 2088, -1,2089, 2087, 2090, -1,2091, 2090, 2092, -1,2093, 2090, 2091, -1,2093, 2089, + 2090, -1,2094, 2092, 2095, -1,2091, 2092, 2096, -1,2097, 2095, 2098, -1,2086, 2087, + 2099, -1,2099, 2087, 2089, -1,2083, 2084, 2088, -1,2091, 2096, 2100, -1,2082, 2085, + 2084, -1,2085, 2086, 2099, -1,2093, 2091, 2100, -1,2089, 2093, 2099, -1,2096, 2094, + 2100, -1,2094, 2101, 2102, -1,2101, 2094, 2095, -1,2097, 2101, 2095, -1,2101, 2097, + 2102, -1,2102, 2097, 2103, -1,2103, 2104, 2105, -1,2106, 22, 2104, -1,2097, 2104, + 2103, -1,2105, 2104, 22, -1,2097, 2098, 2104, -1,2094, 2102, 2100, -1,2096, 2092, + 2094, -1,2104, 2098, 2106, -1,2107, 2106, 2108, -1,2109, 2108, 2110, -1,2107, 2109, + 2111, -1,2109, 2107, 2108, -1,2112, 2113, 2114, -1,2113, 2112, 2110, -1,2109, 2110, + 2112, -1,2109, 2112, 2114, -1,2110, 2115, 2113, -1,2107, 2105, 22, -1,2116, 2117, + 2115, -1,2118, 2119, 2120, -1,2115, 2119, 2116, -1,2121, 2122, 2123, -1,2124, 2120, + 2122, -1,2125, 2123, 2126, -1,2115, 2117, 2113, -1,2113, 2117, 2127, -1,2105, 2107, + 2111, -1,2116, 2127, 2117, -1,2128, 2119, 2118, -1,2116, 2119, 2128, -1,2111, 2109, + 2114, -1,2128, 2127, 2116, -1,2113, 2127, 2114, -1,2118, 2129, 2128, -1,2122, 2130, + 2124, -1,2130, 2122, 2121, -1,2131, 2123, 2125, -1,2123, 2131, 2121, -1,2130, 2129, + 2124, -1,2132, 2131, 2125, -1,2130, 2121, 2131, -1,2125, 2126, 2132, -1,2129, 2118, + 2120, -1,2120, 2124, 2129, -1,2107, 22, 2106, -1,2133, 2134, 2135, -1,2134, 2136, + 2135, -1,2133, 2137, 2138, -1,950, 950, 950, -1,2138, 950, 950, -1,2138, 2139, 2133, -1, + 2138, 2140, 2139, -1,2141, 2134, 2142, -1,2143, 2142, 2134, -1,2133, 2143, 2134, -1, + 2144, 2143, 2139, -1,950, 950, 950, -1,2139, 2143, 2133, -1,950, 2139, 950, -1,2140, + 2138, 950, -1,950, 2140, 950, -1,2140, 2145, 2139, -1,2146, 2140, 2147, -1,2146, + 2148, 2149, -1,2150, 2149, 2148, -1,2140, 2146, 2151, -1,2149, 2151, 2146, -1,2145, + 950, 950, -1,950, 950, 950, -1,2139, 2145, 950, -1,2152, 2151, 2149, -1,2153, 2145, + 2151, -1,2140, 2151, 2145, -1,2154, 2152, 2149, -1,950, 950, 950, -1,2155, 2156, + 2157, -1,2158, 2156, 2159, -1,2160, 2159, 2156, -1,2155, 2161, 2156, -1,2160, 2156, + 2161, -1,2156, 2158, 2162, -1,2162, 2157, 2156, -1,2162, 2163, 2164, -1,2162, 2164, + 2165, -1,2165, 2164, 2166, -1,2157, 2162, 2167, -1,2165, 2168, 2169, -1,2168, 2165, + 2166, -1,2165, 2169, 2167, -1,2162, 2165, 2167, -1,2162, 2158, 2163, -1,2170, 2171, + 2172, -1,2171, 2173, 2172, -1,2174, 2172, 2173, -1,2175, 2172, 2174, -1,2175, 2176, + 2172, -1,2175, 2177, 2176, -1,2178, 2170, 2176, -1,2179, 2180, 2176, -1,2176, 2180, + 2178, -1,2181, 2180, 2179, -1,2182, 2176, 2177, -1,2183, 2184, 2179, -1,2181, 2179, + 2184, -1,2182, 2183, 2179, -1,2182, 2179, 2176, -1,2170, 2172, 2176, -1,2185, 2186, + 2187, -1,2188, 2189, 2190, -1,2191, 2191, 2192, -1,2193, 2189, 2194, -1,2185, 2189, + 2188, -1,2195, 2189, 2185, -1,2188, 2186, 2185, -1,2196, 2197, 2194, -1,2189, 2195, + 2194, -1,2194, 2197, 2198, -1,2195, 2196, 2194, -1,2199, 2200, 2189, -1,2201, 2199, + 2189, -1,2202, 2203, 2193, -1,2193, 2198, 2202, -1,2204, 2205, 2198, -1,2206, 2198, + 2205, -1,2191, 2207, 2191, -1,2197, 2204, 2198, -1,2205, 2208, 2209, -1,2210, 2210, + 2210, -1,2211, 2206, 2205, -1,2206, 2212, 2198, -1,2212, 2213, 2198, -1,2194, 2198, + 2193, -1,2193, 2201, 2189, -1,2209, 2214, 2205, -1,2215, 2216, 2215, -1,2215, 2217, + 2215, -1,2218, 2219, 2218, -1,2218, 2220, 2218, -1,2221, 2221, 2221, -1,2222, 2223, + 2224, -1,2225, 2226, 2227, -1,2226, 2225, 2228, -1,2227, 2226, 2229, -1,2229, 2230, + 2227, -1,2231, 2229, 2226, -1,2226, 2232, 2231, -1,2233, 2234, 2223, -1,2232, 2228, + 2234, -1,2233, 2235, 2231, -1,2233, 2232, 2234, -1,2235, 2233, 2222, -1,2233, 2231, + 2232, -1,2223, 2222, 2233, -1,2228, 2232, 2226, -1,2236, 2237, 2238, -1,2236, 2239, + 2240, -1,2238, 2239, 2236, -1,2239, 2241, 2240, -1,2242, 2243, 2244, -1,2245, 2239, + 2238, -1,2245, 2246, 2241, -1,2241, 2247, 2248, -1,2242, 2241, 2249, -1,2250, 2246, + 2245, -1,2241, 2251, 2251, -1,2241, 2239, 2245, -1,2247, 2241, 2252, -1,2253, 2236, + 2240, -1,2254, 2255, 2240, -1,2253, 2240, 2255, -1,2255, 2256, 2257, -1,2258, 2255, + 2257, -1,2259, 2254, 2240, -1,2241, 2248, 2249, -1,2260, 2260, 2260, -1,2244, 2240, + 2242, -1,2261, 2259, 2240, -1,2241, 2242, 2240, -1,2254, 2262, 2255, -1,2263, 2264, + 2264, -1,2264, 2264, 2265, -1,2266, 2258, 2267, -1,2268, 2269, 2267, -1,2267, 2270, + 2268, -1,2271, 2270, 2267, -1,2269, 2266, 2267, -1,2267, 2258, 2272, -1,2272, 2273, + 2271, -1,2274, 2275, 2276, -1,2273, 2274, 2276, -1,2277, 2271, 2278, -1,2277, 2270, + 2271, -1,2278, 2276, 2279, -1,2276, 2278, 2271, -1,2279, 2276, 2275, -1,2271, 2273, + 2276, -1,2271, 2267, 2272, -1,2280, 2281, 2282, -1,2283, 2282, 2284, -1,2285, 2286, + 2287, -1,2280, 2282, 2288, -1,2289, 2290, 2291, -1,2284, 2291, 2290, -1,2290, 2292, + 2284, -1,2293, 2294, 2294, -1,2284, 2282, 2291, -1,2282, 2283, 2288, -1,2295, 2296, + 2297, -1,2298, 2284, 2292, -1,2290, 2297, 2292, -1,2299, 2297, 2293, -1,2297, 2290, + 2293, -1,2297, 2299, 2300, -1,2300, 2299, 2286, -1,2300, 2286, 2285, -1,2301, 2301, + 2292, -1,2298, 2283, 2284, -1,2300, 2295, 2297, -1,884, 884, 884, -1,884, 884, 884, -1, + 884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, + 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, + 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,884, 884, 884, -1,2302, 2303, 2304, -1, + 2305, 2304, 2306, -1,2302, 2304, 2307, -1,2305, 2307, 2304, -1,2304, 2303, 2306, -1, + 2308, 2309, 2310, -1,2306, 2311, 2305, -1,2311, 2306, 2310, -1,2310, 2312, 2311, -1, + 2312, 2310, 2309, -1,2306, 2308, 2310, -1,2308, 2306, 2303, -1,46, 46, 46, -1,46, + 46, 46, -1,0, 0, 0, -1,0, 0, 0, -1,22, 22, 22, -1,22, 22, 22, -1,2313, 2314, 2315, -1, + 2313, 2316, 2314, -1,2317, 2318, 2313, -1,2313, 2318, 2316, -1,2318, 2317, 2319, -1, + 2313, 2315, 2317, -1,2317, 2315, 2320, -1,2321, 2317, 2320, -1,2319, 2317, 2321, -1, + 2321, 2322, 2319, -1,2322, 2321, 2323, -1,2321, 2320, 2323, -1,2324, 2324, 2324, -1, + 2322, 2324, 2324, -1,22, 22, 22, -1,22, 22, 22, -1,950, 950, 950, -1,950, 950, 950, -1, + 46, 46, 46, -1,46, 46, 46, -1,2325, 2325, 2325, -1,2325, 2325, 2325, -1,781, 781, + 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, + 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1, + 781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, 781, -1,781, 781, + 781, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link1.wrl b/examples/rlsg/mitsubishi-rv6sl/link1.wrl new file mode 100644 index 00000000..93dbbb54 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link1.wrl @@ -0,0 +1,1992 @@ +#VRML V2.0 utf8 + +DEF link1 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.749020 0.749020 0.698039 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 1968 + -0.084999 0.093994 -0.100006, -0.065491 0.093994 -0.098083, -0.04673 0.093994 -0.092377, -0.029442 0.093994 -0.08316, + -0.01429 0.094009 -0.070709, -0.001854 0.094009 -0.055542, 0.007389 0.094009 -0.038269, 0.013079 0.094009 -0.019501, + 0.015 0.094009 0, 0.013079 0.094009 0.019516, 0.007389 0.094009 0.038269, -0.001854 0.094009 0.055557, + -0.01429 0.094009 0.070709, -0.029442 0.093994 0.083145, -0.04673 0.093994 0.092392, -0.065491 0.093994 0.098083, + -0.084999 0.093994 0.100006, -0.104507 0.093994 0.098083, -0.123268 0.093994 0.092392, -0.140556 0.093994 0.083145, + -0.155708 0.094009 0.070709, -0.168144 0.094009 0.055557, -0.177387 0.094009 0.038269, -0.183077 0.094009 0.019516, + -0.185 0.094009 0, -0.183077 0.094009 -0.019501, -0.177387 0.094009 -0.038269, -0.168144 0.094009 -0.055542, + -0.155708 0.094009 -0.070709, -0.140556 0.093994 -0.08316, -0.123268 0.093994 -0.092377, -0.104507 0.093994 -0.098083, + -0.027763 0.075043 -0.082001, -0.027763 0.073303 -0.082001, -0.023239 0.075012 -0.078644, -0.01873 0.076416 -0.07489, + -0.009872 0.078369 -0.06601, -0.009872 0.09201 -0.06601, 0.00074 0.09201 -0.051453, 0.008575 0.09201 -0.035278, + 0.013382 0.09201 -0.017914, 0.015 0.09201 0, 0.013382 0.09201 0.017914, 0.008575 0.09201 0.035278, 0.00074 0.09201 0.051453, + -0.009872 0.09201 0.06601, -0.009872 0.078369 0.06601, -0.015648 0.077209 0.072052, -0.021553 0.075562 0.077301, + -0.033394 0.07074 0.085663, -0.045563 0.070862 0.091888, -0.05822 0.070923 0.096344, -0.071358 0.070984 0.09906, + -0.084999 0.071014 0.100006, -0.084999 0.093994 0.100006, -0.084999 0.071014 -0.100006, -0.072495 0.070984 -0.099213, + -0.060379 0.070953 -0.096924, -0.04863 0.070892 -0.09314, -0.03727 0.070801 -0.08786, -0.032539 0.07309 -0.085144, + -0.06797 0.053009 -0.082001, -0.06797 0.054871 -0.082001, -0.067993 0.054718 -0.082001, -0.068062 0.054596 -0.082001, + -0.068527 0.054199 -0.082001, -0.069847 0.053741 -0.082001, -0.072998 0.053223 -0.082001, -0.072998 0.04837 -0.082001, + -0.103691 0.03064 -0.082001, -0.111023 0.025024 -0.082001, -0.116646 0.0177 -0.082001, -0.120186 0.009155 -0.082001, + -0.121391 0 -0.082001, -0.120186 -0.009155 -0.082001, -0.116646 -0.0177 -0.082001, -0.111023 -0.025024 -0.082001, + -0.103691 -0.03064 -0.082001, -0.039192 -0.067902 -0.082001, -0.030365 -0.072266 -0.082001, -0.021049 -0.0755 -0.082005, + -0.011406 -0.077545 -0.082001, -0.001579 -0.078369 -0.082001, 0.00827 -0.077942 -0.082001, 0.01799 -0.076294 -0.082001, + 0.02742 -0.073456 -0.081993, 0.036423 -0.069397 -0.081993, 0.044846 -0.064301 -0.082001, 0.052559 -0.058167 -0.082001, + 0.059448 -0.051086 -0.082001, 0.065392 -0.043243 -0.082001, 0.070297 -0.034698 -0.082001, 0.074097 -0.025574 -0.082001, + 0.076721 -0.016083 -0.082001, 0.078133 -0.006317 -0.082001, 0.078308 0.00354 -0.082001, 0.077248 0.013336 -0.082001, + 0.074966 0.022919 -0.082001, 0.071495 0.032135 -0.082001, 0.066895 0.040863 -0.082001, 0.061234 0.04895 -0.082001, + 0.054604 0.056244 -0.082001, 0.047112 0.062653 -0.082001, 0.038879 0.068054 -0.081993, 0.030029 0.072418 -0.082001, + 0.020699 0.075623 -0.082001, 0.011047 0.077606 -0.082001, 0.001221 0.078369 -0.082001, -0.008629 0.077911 -0.082001, + -0.018341 0.076202 -0.082001, -0.027763 0.073303 -0.082001, -0.032684 0.073029 -0.082001, -0.03746 0.070679 -0.082001, + -0.044998 0.070679 -0.082001, -0.044998 0.064545 -0.082001, -0.06498 0.053009 -0.082001, -0.074997 0.054932 0.08316, + -0.084312 0.054932 0.08374, -0.093628 0.054932 0.083313, -0.102844 0.054901 0.081818, -0.111839 0.05484 0.079346, + -0.120499 0.054749 0.075867, -0.128716 0.054626 0.071442, -0.136391 0.054504 0.066132, -0.143429 0.054321 0.059998, + -0.143429 0.070313 0.059998, -0.136055 0.070404 0.066376, -0.128319 0.070496 0.071686, -0.111839 0.070648 0.079346, + -0.094101 0.070709 0.083252, -0.084732 0.070709 0.08374, -0.074997 0.070709 0.08316, -0.143429 0.054108 -0.059998, + -0.135681 0.054352 -0.066681, -0.127182 0.054535 -0.072357, -0.118057 0.054688 -0.076965, -0.108437 0.05481 -0.080414, + -0.098465 0.054871 -0.082671, -0.088303 0.054932 -0.083679, -0.078079 0.054901 -0.083466, -0.06797 0.054871 -0.082001, + -0.066498 0.053009 -0.081696, -0.065033 0.053009 -0.081329, -0.059807 0.056091 -0.079865, -0.054703 0.059113 -0.078064, + -0.044998 0.064911 -0.073578, -0.044998 0.070526 -0.073578, -0.058342 0.070648 -0.079407, -0.07132 0.070709 -0.082611, + -0.084015 0.070709 -0.08374, -0.096443 0.070709 -0.082977, -0.10862 0.070648 -0.080353, -0.120537 0.070587 -0.075836, + -0.132164 0.070465 -0.069214, -0.143429 0.070313 -0.059998, -0.074997 0.054169 0.083008, -0.074997 0.053528 0.082581, + -0.074997 0.053101 0.08194, -0.074997 0.052917 0.081177, -0.092751 0.052948 0.081421, -0.11013 0.052826 0.07785, + -0.126328 0.052643 0.070587, -0.140579 0.052368 0.059998, -0.141907 0.052582 0.059998, -0.142815 0.053101 0.059998, + -0.143288 0.053711 0.059998, -0.075001 0.052368 0.059998, -0.074997 0.052917 0.081177, -0.074997 0.07074 0.084991, + -0.074997 0.042908 0.084991, -0.075001 0.043976 0.059998, -0.082321 0.038849 0.059998, -0.08427 0.036926 0.059998, + -0.085365 0.034698 0.059998, -0.085735 0.032257 0.059998, -0.085251 0.029572 0.059998, -0.078426 0.010803 0.059998, + -0.078983 0.005432 0.059998, -0.07917 0 0.059998, -0.078491 -0.010345 0.059998, -0.076473 -0.020477 0.059998, + -0.073143 -0.030304 0.059998, -0.068562 -0.039581 0.059998, -0.062809 -0.048187 0.059998, -0.055981 -0.055969 0.059998, + -0.048195 -0.062805 0.059998, -0.039585 -0.068573 0.059998, -0.159832 0.000854 0.059998, -0.159832 0.070313 0.059998, + -0.081955 0.037842 0.089996, -0.082321 0.038849 0.059998, -0.047905 0.06189 0.084991, -0.047401 0.062134 0.087891, + -0.046913 0.062378 0.089996, -0.0839 0.035889 0.089996, -0.084991 0.033691 0.089996, -0.085365 0.03125 0.089996, + -0.084877 0.028534 0.089996, -0.085251 0.029572 0.059998, -0.058586 0.051544 0.089996, -0.067825 0.038605 0.089996, + -0.074249 0.024048 0.089996, -0.077583 0.008484 0.089996, -0.047905 0.06189 0.084991, -0.040939 0.066711 0.084991, + -0.033485 0.07074 0.084991, -0.03344 0.07074 0.085327, -0.033394 0.07074 0.085663, -0.008064 0.078583 0.06601, + -0.006248 0.078735 0.06601, -0.006256 0.07843 0.074677, -0.006775 0.078094 0.08197, -0.008224 0.077606 0.089996, + 0.00769 0.077667 0.089996, 0.023277 0.074493 0.089989, 0.037903 0.068237 0.089996, 0.050949 0.059113 0.089996, + 0.050377 0.060486 0.073761, 0.049904 0.061584 0.056763, 0.049337 0.062927 0.02121, 0.050074 0.062408 0.015839, + 0.050592 0.062012 0.010529, 0.051 0.061737 0, 0.063245 0.049103 0, 0.07244 0.034119 0, 0.07814 0.017487 0, 0.080071 0 0, + 0.079943 0 0.022766, 0.079556 0 0.045502, 0.078003 0 0.091003, 0.0765 0.015228 0.091003, 0.072067 0.029846 0.091003, + 0.064857 0.043335 0.091003, 0.055153 0.055145 0.091003, 0.043335 0.06485 0.091003, 0.029854 0.072052 0.091003, + 0.015221 0.076508 0.090996, 0 0.078003 0.091003, -0.015213 0.076508 0.091003, -0.029846 0.072052 0.091003, + -0.043335 0.06485 0.091003, -0.055153 0.055145 0.091003, -0.064857 0.043335 0.091003, -0.07206 0.029846 0.091003, + -0.0765 0.015228 0.091003, -0.077995 0 0.091003, -0.078644 0 0.0755, -0.07917 0 0.059998, -0.078041 0.009766 0.075287, + -0.077583 0.008484 0.089996, -0.074997 0.07074 0.084991, -0.033485 0.07074 0.084991, -0.164547 0.070282 0.058807, + -0.166492 0.070251 0.057465, -0.168148 0.070221 0.055542, -0.160278 0.070404 0.065826, -0.151596 0.070557 0.074585, + -0.142204 0.070679 0.082031, -0.132141 0.070801 0.088196, -0.121422 0.070892 0.09314, -0.110023 0.070953 0.096832, + -0.097916 0.070984 0.099152, -0.084999 0.071014 0.100006, -0.162373 0.002319 0.059662, -0.164692 0.003632 0.058746, + -0.168148 0.005524 0.055542, -0.168148 0.005524 -0.055542, -0.175522 0.009399 -0.04248, -0.18079 0.012146 -0.028717, + -0.183949 0.013794 -0.014465, -0.185 0.014343 0, -0.183949 0.013794 0.014465, -0.18079 0.012146 0.028717, + -0.175522 0.009399 0.04248, -0.168148 0.005524 0.055542, -0.039597 -0.068573 0.059265, -0.039608 -0.068604 0.058502, + -0.160061 0.000946 0.058502, -0.163841 0.003082 0.057495, -0.165501 0.003998 0.056305, -0.166897 0.004761 0.054718, + -0.174122 0.008606 0.04245, -0.179441 0.011383 0.028961, -0.182698 0.013092 0.014679, -0.183796 0.013672 0, + -0.1827 0.013092 -0.014679, -0.179443 0.011383 -0.028961, -0.174122 0.008606 -0.04245, -0.166897 0.004761 -0.054718, + -0.163841 0.003082 -0.057495, -0.161995 0.002045 -0.058258, -0.160061 0.000946 -0.058502, -0.039608 -0.068604 -0.058502, + -0.039421 -0.068268 -0.070251, -0.039192 -0.067902 -0.082001, -0.103905 -0.031006 -0.071014, -0.104084 -0.031311 -0.059998, + -0.159832 0.000854 -0.059998, -0.164692 0.003632 -0.058746, -0.166645 0.0047 -0.057312, -0.168148 0.070221 -0.055542, + -0.160278 0.070404 -0.065826, -0.151596 0.070557 -0.074585, -0.142204 0.070679 -0.082031, -0.132141 0.070801 -0.088196, + -0.121422 0.070892 -0.09314, -0.110023 0.070953 -0.096832, -0.097916 0.070984 -0.099152, -0.084999 0.071014 -0.100006, + -0.159832 0.070313 -0.059998, -0.162334 0.070313 -0.059692, -0.164547 0.070282 -0.058807, -0.168148 0.070221 -0.055542, + -0.143429 0.070313 -0.059998, -0.044998 0.070679 -0.082001, -0.037369 0.07074 -0.08493, -0.03727 0.070801 -0.08786, + -0.072998 0.052155 -0.059998, -0.140598 0.052155 -0.059998, -0.141922 0.052368 -0.059998, -0.142818 0.052887 -0.059998, + -0.143288 0.053497 -0.059998, -0.143429 0.054108 -0.059998, -0.111576 -0.025574 -0.059998, -0.117325 -0.018097 -0.059998, + -0.120937 -0.009369 -0.059998, -0.122169 0 -0.059998, -0.120937 0.009369 -0.059998, -0.117325 0.018097 -0.059998, + -0.111576 0.025574 -0.059998, -0.104084 0.031311 -0.059998, -0.072998 0.049286 -0.059998, -0.072998 0.052887 -0.080933, + -0.082108 0.052917 -0.081757, -0.091248 0.052917 -0.081573, -0.100304 0.052887 -0.080384, -0.109177 0.052795 -0.078156, + -0.117752 0.052673 -0.074982, -0.125908 0.052551 -0.070862, -0.13356 0.052368 -0.065826, -0.140598 0.052155 -0.059998, + -0.072998 0.052917 -0.081207, -0.072998 0.052979 -0.081482, -0.072998 0.053223 -0.082001, -0.072998 0.048859 -0.071014, + -0.103905 0.031006 -0.071014, -0.103691 0.03064 -0.082001, -0.044998 0.064728 -0.077789, -0.044998 0.064911 -0.073578, + -0.06501 0.053009 -0.081665, 0.051 0.061737 0, 0.050232 0.062286 -0.014435, 0.0478 0.063965 -0.029327, + 0.043396 0.066681 -0.04483, 0.036831 0.070068 -0.060455, 0.035351 0.07074 -0.062645, 0.033249 0.071686 -0.064423, + 0.030678 0.072815 -0.065605, 0.02787 0.073914 -0.06601, 0.018707 0.076721 -0.06601, 0.00927 0.07843 -0.06601, + -0.000305 0.078979 -0.06601, -0.009872 0.078369 -0.06601, -0.039173 -0.068848 -0.058502, -0.038738 -0.069092 -0.058502, + -0.03706 -0.070038 -0.058105, -0.035633 -0.070801 -0.057037, -0.034683 -0.07132 -0.05542, -0.034367 -0.071533 -0.053497, + -0.034727 -0.072144 0, -0.034636 -0.071991 0.026764, -0.034367 -0.071533 0.053497, -0.034683 -0.07132 0.05542, + -0.035633 -0.070801 0.057037, -0.03706 -0.070038 0.058105, -0.038738 -0.069092 0.058502, -0.039173 -0.068848 0.058502, + -0.039608 -0.068604 0.058502, -0.07679 -0.013672 0.091003, -0.073196 -0.026947 0.091003, -0.067337 -0.039368 0.091003, + -0.059395 -0.050568 0.091003, -0.049606 -0.060181 0.091003, -0.038277 -0.067963 0.091003, -0.025764 -0.073608 0.091003, + -0.012451 -0.076996 0.091003, -0.016121 -0.076996 0.07489, -0.017792 -0.076996 0.064575, -0.019459 -0.076996 0.050995, + -0.009804 -0.078796 0.050995, 0 -0.079407 0.050995, 0.009808 -0.078796 0.050995, 0.019463 -0.076996 0.050987, + 0.016113 -0.076996 0.074921, 0.014404 -0.076996 0.083282, 0.012451 -0.076996 0.091003, 0.025764 -0.073608 0.091003, + 0.038277 -0.067963 0.091003, 0.049606 -0.060211 0.091003, 0.059395 -0.050568 0.091003, 0.067345 -0.039368 0.091003, + 0.073204 -0.026947 0.091003, 0.07679 -0.013672 0.091003, 0.078003 0 0.091003, 0.049337 0.062927 0.02121, + 0.047926 0.066254 0.028748, 0.046211 0.070282 0.035767, 0.042027 0.080139 0.048584, 0.040428 0.082489 0.052582, + 0.03886 0.083649 0.056175, 0.036831 0.084381 0.060455, 0.036831 0.09201 0.060455, 0.042969 0.09201 0.046051, + 0.047411 0.09201 0.031036, 0.0501 0.09201 0.015625, 0.051 0.09201 0, 0.050099 0.09201 -0.015625, 0.047411 0.09201 -0.031036, + 0.042969 0.09201 -0.046043, 0.036831 0.09201 -0.060455, 0.036831 0.070068 -0.060455, 0.04261 0.078766 0.089989, + 0.042027 0.080139 0.048584, 0.041122 0.081085 0.089996, 0.039185 0.082611 0.089996, 0.03688 0.083466 0.089996, + 0.034134 0.083588 0.089996, 0.033768 0.084442 0.064087, 0.034611 0.084534 0.063385, 0.035427 0.084534 0.062561, + 0.036831 0.084381 0.060455, 0.02787 0.083527 0.06601, 0.030975 0.083984 0.065514, 0.03241 0.084198 0.064911, + 0.02787 0.09198 0.06601, 0.02787 0.083527 0.06601, 0.030609 0.09201 0.065613, 0.033142 0.09201 0.064484, + 0.035271 0.09198 0.062744, 0.02787 0.09198 -0.06601, 0.030609 0.09201 -0.065613, 0.033142 0.09201 -0.064484, + 0.035271 0.09198 -0.062744, 0.036831 0.09201 -0.060455, 0.02787 0.073914 -0.06601, 0.02787 0.09198 -0.06601, + -0.160061 0.000946 -0.058502, -0.159454 0.001984 -0.058502, -0.038132 -0.068054 -0.058502, -0.038738 -0.069092 -0.058502, + -0.166237 0.00592 -0.054718, -0.164864 0.005127 -0.056305, -0.163219 0.004181 -0.057495, -0.166237 0.00592 0.054718, + -0.173309 0.01001 0.04245, -0.178511 0.013 0.028961, -0.18169 0.014832 0.014679, -0.18276 0.015442 0, + -0.18169 0.014832 -0.014679, -0.178511 0.013 -0.028961, -0.173309 0.01001 -0.04245, -0.159454 0.001984 0.058502, + -0.161385 0.003113 0.058258, -0.163219 0.004181 0.057495, -0.038132 -0.068054 0.058502, -0.033802 -0.070557 0.053497, + -0.034134 -0.070374 0.05542, -0.035072 -0.069824 0.057037, -0.036476 -0.069 0.058105, -0.034367 -0.071533 -0.053497, + -0.033802 -0.070557 -0.053497, -0.033802 -0.070557 0.053497, -0.036476 -0.069 -0.058105, -0.035072 -0.069824 -0.057037, + -0.034134 -0.070374 -0.05542, 0.074501 0 0.091003, 0.073067 0.014526 0.091003, 0.068832 0.028503 0.091003, + 0.061943 0.041382 0.091003, 0.052681 0.052673 0.091003, 0.041389 0.061951 0.091003, 0.028511 0.068817 0.091011, + 0.014534 0.073059 0.091003, 0 0.074493 0.091003, -0.014534 0.073059 0.091003, -0.028511 0.068817 0.091003, + -0.041389 0.061951 0.091003, -0.052681 0.052673 0.091003, -0.061943 0.041382 0.091003, -0.068825 0.028503 0.091003, + -0.073067 0.014526 0.091003, -0.074501 0 0.091003, -0.073067 -0.014526 0.091003, -0.068825 -0.028503 0.091003, + -0.061943 -0.041382 0.091003, -0.052681 -0.052673 0.091003, -0.041389 -0.061951 0.091003, -0.028511 -0.068817 0.091003, + -0.014534 -0.073059 0.091003, 0 -0.074493 0.091003, 0.014534 -0.073059 0.091003, 0.028511 -0.068817 0.091011, + 0.041389 -0.061951 0.091003, 0.052681 -0.052673 0.091003, 0.061943 -0.041382 0.091003, 0.068832 -0.028503 0.091003, + 0.073067 -0.014526 0.091003, 0.074501 0 0.093994, 0.073067 0.014526 0.093994, 0.068832 0.028503 0.093994, + 0.061943 0.041382 0.093994, 0.052681 0.052673 0.093994, 0.041389 0.061951 0.093994, 0.028511 0.068817 0.094002, + 0.014534 0.073059 0.093994, 0 0.074493 0.093994, -0.014534 0.073059 0.093994, -0.028511 0.068817 0.093994, + -0.041389 0.061951 0.093994, -0.052681 0.052673 0.093994, -0.061943 0.041382 0.093994, -0.068825 0.028503 0.093994, + -0.073067 0.014526 0.093995, -0.074501 0 0.093994, -0.074501 0 0.091003, 0.073067 -0.014526 0.093994, + 0.068832 -0.028503 0.093994, 0.061943 -0.041382 0.093994, 0.052681 -0.052673 0.093994, 0.041389 -0.061951 0.093994, + 0.028511 -0.068817 0.094002, 0.014534 -0.073059 0.093994, 0 -0.074493 0.093994, -0.014534 -0.073059 0.093994, + -0.028511 -0.068817 0.093994, -0.041389 -0.061951 0.093994, -0.052681 -0.052673 0.093994, -0.061943 -0.041382 0.093994, + -0.068825 -0.028503 0.093994, -0.073067 -0.014526 0.093995, -0.019459 -0.076996 0.050995, -0.071724 0.082367 -0.099121, + -0.056999 0.082367 -0.096008, -0.041176 0.082367 -0.089874, -0.025002 0.082367 -0.079987, -0.017128 0.082367 -0.073456, + -0.017128 0.082367 0.073456, -0.025002 0.082367 0.079987, -0.041176 0.082367 0.089874, -0.056999 0.082367 0.096008, + -0.071724 0.082367 0.099121, -0.091843 0.062531 0.083466, -0.109772 0.062531 0.079987, -0.118759 0.062531 0.07666, + -0.127495 0.062531 0.072174, -0.135788 0.062531 0.066589, -0.132713 0.061859 -0.068817, -0.120514 0.061859 -0.075836, + -0.107315 0.061859 -0.080719, -0.093689 0.061859 -0.083313, -0.0802 0.061859 -0.083618, -0.06736 0.061859 -0.081879, + -0.055542 0.061859 -0.0784, -0.136276 0.053772 0.06604, -0.136002 0.053101 0.065704, -0.13559 0.052643 0.065186, + -0.128586 0.053894 0.07135, -0.128349 0.053223 0.070984, -0.127998 0.052795 0.070435, -0.120354 0.054016 0.075775, + -0.120163 0.053345 0.075378, -0.119881 0.052887 0.074799, -0.111671 0.054108 0.079254, -0.111534 0.053436 0.078827, + -0.11132 0.052979 0.078217, -0.102669 0.054169 0.081726, -0.10257 0.053497 0.081299, -0.102432 0.05304 0.080658, + -0.093437 0.05423 0.083191, -0.093391 0.053528 0.082764, -0.093323 0.053101 0.082092, -0.084099 0.05423 0.083618, + -0.084106 0.053558 0.083191, -0.084106 0.053101 0.08252, -0.085548 0.031555 0.074951, -0.085175 0.03421 0.075043, + -0.083954 0.036591 0.075104, -0.009827 0.078308 0.068268, 0.051888 0.059448 0.068268, 0.052311 0.059937 0.045502, + 0.052565 0.060242 0.022766, 0.063126 0.047333 0.068268, 0.063644 0.047729 0.045502, 0.063955 0.047974 0.022766, + 0.07093 0.034576 0.068268, 0.07151 0.034851 0.045502, 0.071859 0.035034 0.022766, 0.075752 0.022095 0.068268, + 0.076374 0.022278 0.045502, 0.076746 0.022369 0.022766, 0.078209 0.010468 0.068268, 0.07885 0.010559 0.045502, + 0.079235 0.01062 0.022766, -0.166576 0.035583 0.057373, -0.164547 0.035583 0.058807, -0.162224 0.035583 0.059723, + -0.173233 0.049744 0.047058, -0.178207 0.049744 0.036224, -0.181923 0.049744 0.024628, -0.184222 0.049744 0.012451, + -0.185 0.049744 0, -0.184222 0.049744 -0.012451, -0.181923 0.049744 -0.024628, -0.178207 0.049744 -0.036224, + -0.173233 0.049744 -0.047058, -0.166576 0.035583 -0.057373, -0.164547 0.035583 -0.058807, -0.162224 0.035583 -0.059723, + -0.078094 0.054199 -0.083344, -0.078133 0.053528 -0.082916, -0.078186 0.05307 -0.082245, -0.088295 0.054199 -0.083557, + -0.08828 0.053528 -0.08313, -0.088257 0.05307 -0.082489, -0.09845 0.054169 -0.08252, -0.098373 0.053497 -0.082123, + -0.098267 0.05304 -0.081451, -0.108398 0.054108 -0.080292, -0.108276 0.053436 -0.079865, -0.108086 0.052979 -0.079254, + -0.118004 0.053986 -0.076843, -0.117821 0.053314 -0.076447, -0.117561 0.052856 -0.075836, -0.127113 0.053833 -0.072235, + -0.126884 0.053131 -0.071869, -0.126549 0.052704 -0.07132, -0.13559 0.053619 -0.066559, -0.135323 0.052948 -0.066223, + -0.134918 0.05249 -0.065735, -0.088364 0.039978 -0.071014, -0.110504 -0.026123 -0.071014, -0.116302 -0.019073 -0.071014, + -0.120346 -0.010132 -0.071014, -0.121811 0 -0.071014, -0.120346 0.010132 -0.071014, -0.116302 0.019073 -0.071014, + -0.110504 0.026123 -0.071014, -0.032684 0.073029 -0.08493, 0.052738 0.059753 -0.038757, 0.062752 0.049133 -0.038757, + 0.07066 0.036865 -0.038757, 0.076126 0.02359 -0.038757, 0.079067 0.01001 -0.038757, 0.079437 -0.003235 0.04776, + 0.079999 -0.003265 0.004517, 0.079632 -0.003265 -0.038757, 0.077953 -0.015625 0.04776, 0.078506 -0.015747 0.004517, + 0.078144 -0.015656 -0.038757, 0.074837 -0.026825 0.04776, 0.075369 -0.027008 0.004517, 0.07502 -0.026886 -0.038757, + 0.070526 -0.036682 0.04776, 0.071028 -0.036957 0.004517, 0.070702 -0.036774 -0.038757, 0.065418 -0.045166 0.04776, + 0.065883 -0.045502 0.004517, 0.065578 -0.045288 -0.038757, 0.059296 -0.052948 0.04776, 0.059715 -0.053345 0.004517, + 0.059441 -0.053101 -0.038757, 0.051594 -0.060486 0.04776, 0.051962 -0.060913 0.004517, 0.051723 -0.060638 -0.038757, + 0.042217 -0.067352 0.04776, 0.042517 -0.067841 0.004517, 0.04232 -0.067535 -0.038765, 0.031166 -0.073151 0.04776, + 0.031386 -0.073669 0.004517, 0.031242 -0.073334 -0.038757, 0.018604 -0.077271 0.04776, 0.018737 -0.07782 0.004517, + 0.01865 -0.077484 -0.038757, 0.004894 -0.079346 0.04776, 0.00493 -0.079926 0.004517, 0.004906 -0.079529 -0.038757, + -0.009418 -0.078949 0.04776, -0.009488 -0.079498 0.004517, -0.009441 -0.079132 -0.038757, -0.023659 -0.075897 0.04776, + -0.023829 -0.076447 0.004517, -0.023716 -0.07608 -0.038757, 0.042843 0.076874 -0.046387, 0.047314 0.076874 -0.031464, + 0.050069 0.076874 -0.0159, 0.051 0.076874 0, 0.05007 0.076874 0.0159, 0.047314 0.076874 0.031464, 0.036377 0.084198 0.069519, + 0.038895 0.083282 0.069458, 0.04097 0.081604 0.069366, 0.030563 0.087769 0.065651, 0.033142 0.087769 0.064484, + 0.035305 0.087769 0.062691, 0.035305 0.081024 -0.062683, 0.033142 0.081024 -0.064484, 0.030563 0.081024 -0.065643, + -0.16169 0.002533 -0.058258, -0.163551 0.003601 -0.057495, -0.165215 0.004547 -0.056305, -0.173519 0.008911 0.043091, + -0.17878 0.011963 0.029785, -0.182129 0.013885 0.015228, -0.183278 0.014557 0, -0.182129 0.013885 -0.015228, + -0.17878 0.011963 -0.029785, -0.173519 0.008911 -0.043091, -0.165215 0.004547 0.056305, -0.163551 0.003601 0.057495, + -0.16169 0.002533 0.058258, -0.036842 -0.069489 0.058136, -0.035374 -0.070343 0.057037, -0.034409 -0.070892 0.055328, + -0.034409 -0.070892 -0.055328, -0.035374 -0.070343 -0.057037, -0.036842 -0.069489 -0.058136, 0.073845 0.009888 0.092499, + 0.071518 0.020844 0.092499, 0.066971 0.032654 0.092499, 0.059601 0.044708 0.092499, 0.048988 0.056122 0.092499, + 0.035057 0.065735 0.092506, 0.026993 0.069427 0.092499, 0.018341 0.072205 0.092506, 0.009277 0.073914 0.092499, + 0 0.074493 0.092499, -0.009277 0.073914 0.092499, -0.018341 0.072205 0.092499, -0.026985 0.069427 0.092499, + -0.035057 0.065735 0.092499, -0.048988 0.056122 0.092499, -0.059601 0.044708 0.092499, -0.066963 0.032654 0.092499, + -0.071518 0.020874 0.092499, -0.073837 0.009888 0.092499, -0.073837 -0.009888 0.092499, -0.071518 -0.020874 0.092499, + -0.066963 -0.032654 0.092499, -0.059601 -0.044708 0.092499, -0.048988 -0.056122 0.092499, -0.035057 -0.065735 0.092499, + -0.026985 -0.069427 0.092499, -0.018341 -0.072205 0.092499, -0.009277 -0.073914 0.092499, 0 -0.074493 0.092499, + 0.009277 -0.073914 0.092499, 0.018341 -0.072205 0.092506, 0.026993 -0.069427 0.092499, 0.035057 -0.065735 0.092506, + 0.048988 -0.056122 0.092499, 0.059601 -0.044708 0.092499, 0.066971 -0.032654 0.092499, 0.071518 -0.020874 0.092499, + 0.073845 -0.009888 0.092499, -0.009872 0.085175 -0.06601, -0.009872 0.081787 -0.06601, -0.004566 0.09201 -0.058746, + -0.001911 0.09201 -0.055115, 0.004658 0.09201 -0.043365, 0.006618 0.09201 -0.039307, 0.010979 0.09201 -0.026581, + 0.01218 0.09201 -0.022247, 0.014191 0.09201 -0.008972, 0.014191 0.09201 0.008972, 0.010979 0.09201 0.026581, + 0.01218 0.09201 0.022247, 0.004658 0.09201 0.043365, 0.006618 0.09201 0.039307, -0.004566 0.09201 0.058746, + -0.001911 0.09201 0.055115, -0.009872 0.085175 0.06601, -0.009872 0.081787 0.06601, -0.06797 0.053925 -0.082001, + -0.06797 0.054382 -0.082001, -0.074997 0.053009 0.081573, -0.074997 0.052979 0.08139, -0.074997 0.052948 0.081268, + -0.074997 0.052948 0.081238, -0.074997 0.052917 0.081207, -0.074997 0.052917 0.081207, -0.08387 0.052917 0.081299, + -0.074997 0.052917 0.081177, -0.133453 0.052521 0.065308, -0.027473 0.073151 0.081482, -0.000267 0.077637 0.089996, + 0.015488 0.07608 0.089996, 0.030594 0.071381 0.089996, 0.026932 0.072937 0.089996, 0.044426 0.06366 0.089996, + 0.041168 0.065948 0.089996, 0.049622 0.062256 0.039001, -0.078239 0.010284 0.067657, -0.075912 0.016266 0.089996, + -0.076744 0.01239 0.089996, -0.076332 0.014313 0.089996, -0.071037 0.031311 0.089996, -0.072639 0.027679 0.089996, + -0.06321 0.045074 0.089996, -0.065521 0.04184 0.089996, -0.05275 0.056976 0.089996, -0.055672 0.05426 0.089996, + -0.099834 -0.033844 -0.058502, -0.129948 -0.016449 -0.058502, -0.131958 -0.015228 -0.059998, -0.168148 0.037872 -0.055542, + -0.155937 0.070496 -0.070221, -0.126778 0.070831 -0.090668, -0.103973 0.070953 -0.097992, -0.103973 0.070953 0.097992, + -0.126778 0.070831 0.090668, -0.155937 0.070496 0.070221, -0.168148 0.037872 0.055542, -0.1068 0.052155 -0.059998, + -0.067978 0.05481 -0.082001, -0.06797 0.05484 -0.082001, -0.06797 0.05484 -0.082001, -0.06797 0.05484 -0.082001, + -0.06797 0.054871 -0.082001, -0.04985 0.062012 -0.075836, -0.034546 -0.071838 -0.026764, -0.059395 -0.052094 0.059998, + 0.004902 -0.079102 0.050995, 0.014633 -0.077911 0.050995, 0.012451 -0.076996 0.091003, 0.079106 0.008728 0, + 0.078623 0.013123 0, 0.07529 0.025787 0, 0.076715 0.021637 0, 0.067843 0.041595 0, 0.070141 0.037872 0, 0.057123 0.05542 0, + 0.054061 0.058563 0, 0.044121 0.075226 0.042175, 0.043076 0.077667 0.04538, -0.084999 0.093994 -0.100006, + -0.065491 0.093994 -0.098083, 0.013079 0.094009 -0.019501, -0.04673 0.093994 -0.092377, -0.029442 0.093994 -0.08316, + -0.01429 0.094009 -0.070709, -0.001854 0.094009 -0.055542, 0.007389 0.094009 -0.038269, 0.015 0.094009 0, + 0.013079 0.094009 0.019516, 0.007389 0.094009 0.038269, -0.001854 0.094009 0.055557, -0.029442 0.093994 0.083145, + -0.01429 0.094009 0.070709, -0.04673 0.093994 0.092392, -0.065491 0.093994 0.098083, -0.027763 0.075043 -0.082001, + -0.06797 0.053009 -0.082001, -0.128716 0.054626 0.071442, -0.136391 0.054504 0.066132, -0.120499 0.054749 0.075867, + -0.143429 0.054321 0.059998, -0.111839 0.05484 0.079346, -0.102844 0.054901 0.081818, -0.093628 0.054932 0.083313, + -0.084312 0.054932 0.08374, -0.074997 0.054932 0.08316, -0.074997 0.054169 0.083008, -0.074997 0.053528 0.082581, + -0.074997 0.070709 0.08316, -0.074997 0.053101 0.08194, -0.126328 0.052643 0.070587, -0.075001 0.052368 0.059998, + -0.11013 0.052826 0.07785, -0.140579 0.052368 0.059998, -0.092751 0.052948 0.081421, -0.075001 0.043976 0.059998, + -0.075001 0.052368 0.059998, -0.142815 0.053101 0.059998, -0.143288 0.053711 0.059998, -0.141907 0.052582 0.059998, + -0.143429 0.070313 0.059998, -0.143429 0.054321 0.059998, -0.140579 0.052368 0.059998, -0.074997 0.042908 0.084991, + -0.075001 0.043976 0.059998, -0.085735 0.032257 0.059998, -0.081955 0.037842 0.089996, -0.085365 0.034698 0.059998, + -0.08427 0.036926 0.059998, -0.082321 0.038849 0.059998, -0.046913 0.062378 0.089996, -0.081955 0.037842 0.089996, + -0.084877 0.028534 0.089996, -0.0839 0.035889 0.089996, -0.084991 0.033691 0.089996, -0.085365 0.03125 0.089996, + -0.058586 0.051544 0.089996, -0.074249 0.024048 0.089996, -0.067825 0.038605 0.089996, -0.078983 0.005432 0.059998, + -0.078426 0.010803 0.059998, -0.046913 0.062378 0.089996, -0.047401 0.062134 0.087891, -0.021553 0.075562 0.077301, + -0.015648 0.077209 0.072052, -0.009872 0.078369 0.06601, -0.040939 0.066711 0.084991, -0.047905 0.06189 0.084991, + -0.074997 0.042908 0.084991, -0.159832 0.070313 0.059998, -0.143429 0.070313 0.059998, -0.136055 0.070404 0.066376, + -0.128319 0.070496 0.071686, -0.111839 0.070648 0.079346, -0.094101 0.070709 0.083252, -0.084732 0.070709 0.08374, + -0.074997 0.070709 0.08316, -0.074997 0.07074 0.084991, -0.033485 0.07074 0.084991, -0.03344 0.07074 0.085327, + -0.045563 0.070862 0.091888, -0.05822 0.070923 0.096344, -0.071358 0.070984 0.09906, -0.033394 0.07074 0.085663, + -0.166492 0.070251 0.057465, -0.168148 0.070221 0.055542, -0.159832 0.000854 0.059998, -0.164547 0.070282 0.058807, + -0.159832 0.070313 0.059998, -0.103691 -0.03064 -0.082001, -0.164692 0.003632 0.058746, -0.039585 -0.068573 0.059998, + -0.159832 0.000854 0.059998, -0.162373 0.002319 0.059662, -0.097916 0.070984 0.099152, -0.084999 0.071014 0.100006, + -0.084999 0.093994 0.100006, -0.104507 0.093994 0.098083, -0.155708 0.094009 0.070709, -0.160278 0.070404 0.065826, + -0.110023 0.070953 0.096832, -0.123268 0.093994 0.092392, -0.121422 0.070892 0.09314, -0.140556 0.093994 0.083145, + -0.132141 0.070801 0.088196, -0.151596 0.070557 0.074585, -0.168144 0.094009 0.055557, -0.142204 0.070679 0.082031, + -0.168148 0.070221 0.055542, -0.177387 0.094009 0.038269, -0.183077 0.094009 0.019516, -0.175522 0.009399 0.04248, + -0.183949 0.013794 0.014465, -0.18079 0.012146 0.028717, -0.168148 0.005524 0.055542, -0.185 0.014343 0, + -0.155708 0.094009 -0.070709, -0.185 0.094009 0, -0.177387 0.094009 -0.038269, -0.168144 0.094009 -0.055542, + -0.183077 0.094009 -0.019501, -0.140556 0.093994 -0.08316, -0.123268 0.093994 -0.092377, -0.104507 0.093994 -0.098083, + -0.084999 0.093994 -0.100006, -0.18079 0.012146 -0.028717, -0.183949 0.013794 -0.014465, -0.175522 0.009399 -0.04248, + -0.168148 0.005524 -0.055542, -0.164692 0.003632 -0.058746, -0.166645 0.0047 -0.057312, -0.159832 0.000854 -0.059998, + -0.120537 0.070587 -0.075836, -0.151596 0.070557 -0.074585, -0.142204 0.070679 -0.082031, -0.10862 0.070648 -0.080353, + -0.132141 0.070801 -0.088196, -0.096443 0.070709 -0.082977, -0.121422 0.070892 -0.09314, -0.110023 0.070953 -0.096832, + -0.132164 0.070465 -0.069214, -0.164547 0.070282 -0.058807, -0.168148 0.070221 -0.055542, -0.160278 0.070404 -0.065826, + -0.162334 0.070313 -0.059692, -0.159832 0.070313 -0.059998, -0.084015 0.070709 -0.08374, -0.097916 0.070984 -0.099152, + -0.084999 0.071014 -0.100006, -0.072495 0.070984 -0.099213, -0.07132 0.070709 -0.082611, -0.060379 0.070953 -0.096924, + -0.04863 0.070892 -0.09314, -0.044998 0.070526 -0.073578, -0.058342 0.070648 -0.079407, -0.03746 0.070679 -0.082001, + -0.159832 0.070313 -0.059998, -0.143429 0.070313 -0.059998, -0.159832 0.000854 -0.059998, -0.104084 -0.031311 -0.059998, + -0.072998 0.052155 -0.059998, -0.088303 0.054932 -0.083679, -0.078079 0.054901 -0.083466, -0.098465 0.054871 -0.082671, + -0.067993 0.054718 -0.082001, -0.068062 0.054596 -0.082001, -0.068527 0.054199 -0.082001, -0.069847 0.053741 -0.082001, + -0.118057 0.054688 -0.076965, -0.108437 0.05481 -0.080414, -0.127182 0.054535 -0.072357, -0.143429 0.054108 -0.059998, + -0.135681 0.054352 -0.066681, -0.143288 0.053497 -0.059998, -0.142818 0.052887 -0.059998, -0.082108 0.052917 -0.081757, + -0.091248 0.052917 -0.081573, -0.072998 0.052887 -0.080933, -0.100304 0.052887 -0.080384, -0.141922 0.052368 -0.059998, + -0.109177 0.052795 -0.078156, -0.117752 0.052673 -0.074982, -0.125908 0.052551 -0.070862, -0.13356 0.052368 -0.065826, + -0.140598 0.052155 -0.059998, -0.072998 0.049286 -0.059998, -0.072998 0.052155 -0.059998, -0.072998 0.052887 -0.080933, + -0.072998 0.04837 -0.082001, -0.072998 0.052917 -0.081207, -0.072998 0.052979 -0.081482, -0.072998 0.053223 -0.082001, + -0.072998 0.048859 -0.071014, -0.072998 0.04837 -0.082001, -0.104084 0.031311 -0.059998, -0.072998 0.049286 -0.059998, + -0.059807 0.056091 -0.079865, -0.06498 0.053009 -0.082001, -0.044998 0.064545 -0.082001, -0.065033 0.053009 -0.081329, + -0.054703 0.059113 -0.078064, -0.104084 -0.031311 -0.059998, -0.103905 -0.031006 -0.071014, -0.111576 -0.025574 -0.059998, + -0.117325 -0.018097 -0.059998, -0.120937 -0.009369 -0.059998, -0.103691 -0.03064 -0.082001, -0.111023 -0.025024 -0.082001, + -0.116646 -0.0177 -0.082001, -0.120186 -0.009155 -0.082001, -0.122169 0 -0.059998, -0.120937 0.009369 -0.059998, + -0.117325 0.018097 -0.059998, -0.120186 0.009155 -0.082001, -0.111576 0.025574 -0.059998, -0.104084 0.031311 -0.059998, + -0.116646 0.0177 -0.082001, -0.121391 0 -0.082001, -0.111023 0.025024 -0.082001, -0.103905 0.031006 -0.071014, + -0.103691 0.03064 -0.082001, -0.044998 0.064545 -0.082001, -0.044998 0.064728 -0.077789, -0.044998 0.070679 -0.082001, + -0.044998 0.070526 -0.073578, -0.044998 0.064911 -0.073578, -0.06797 0.053009 -0.082001, -0.066498 0.053009 -0.081696, + -0.06498 0.053009 -0.082001, -0.06501 0.053009 -0.081665, -0.065033 0.053009 -0.081329, -0.032539 0.07309 -0.085144, + -0.027763 0.075043 -0.082001, -0.037369 0.07074 -0.08493, -0.032684 0.073029 -0.082001, -0.03746 0.070679 -0.082001, + -0.03727 0.070801 -0.08786, 0.07244 0.034119 0, 0.079556 0 0.045502, 0.079943 0 0.022766, 0.07814 0.017487 0, 0.080071 0 0, + 0.001221 0.078369 -0.082001, 0.038879 0.068054 -0.081993, 0.030029 0.072418 -0.082001, -0.01873 0.076416 -0.07489, + -0.018341 0.076202 -0.082001, -0.023239 0.075012 -0.078644, -0.027763 0.073303 -0.082001, -0.008629 0.077911 -0.082001, + 0.020699 0.075623 -0.082001, 0.011047 0.077606 -0.082001, -0.062809 -0.048187 0.059998, 0.047112 0.062653 -0.082001, + 0.054604 0.056244 -0.082001, 0.063245 0.049103 0, 0.066895 0.040863 -0.082001, 0.077248 0.013336 -0.082001, + 0.078308 0.00354 -0.082001, 0.071495 0.032135 -0.082001, 0.078133 -0.006317 -0.082001, 0.076721 -0.016083 -0.082001, + 0.070297 -0.034698 -0.082001, 0.074097 -0.025574 -0.082001, 0.065392 -0.043243 -0.082001, 0.059448 -0.051086 -0.082001, + 0.061234 0.04895 -0.082001, 0.074966 0.022919 -0.082001, 0.052559 -0.058167 -0.082001, -0.039585 -0.068573 0.059998, + -0.048195 -0.062805 0.059998, -0.055981 -0.055969 0.059998, -0.073143 -0.030304 0.059998, -0.068562 -0.039581 0.059998, + -0.077995 0 0.091003, -0.078491 -0.010345 0.059998, -0.076473 -0.020477 0.059998, -0.078644 0 0.0755, -0.07917 0 0.059998, + -0.039597 -0.068573 0.059265, 0.044846 -0.064301 -0.082001, 0.036423 -0.069397 -0.081993, 0.02742 -0.073456 -0.081993, + 0.01799 -0.076294 -0.082001, 0.00827 -0.077942 -0.082001, -0.001579 -0.078369 -0.082001, -0.021049 -0.0755 -0.082005, + -0.030365 -0.072266 -0.082001, -0.011406 -0.077545 -0.082001, -0.039421 -0.068268 -0.070251, -0.039192 -0.067902 -0.082001, + -0.039608 -0.068604 -0.058502, 0.043396 0.066681 -0.04483, 0.0478 0.063965 -0.029327, 0.050232 0.062286 -0.014435, + 0.051 0.061737 0, 0.050592 0.062012 0.010529, 0.050074 0.062408 0.015839, 0.049904 0.061584 0.056763, + 0.049337 0.062927 0.02121, 0.047926 0.066254 0.028748, 0.050949 0.059113 0.089996, 0.050377 0.060486 0.073761, + 0.046211 0.070282 0.035767, 0.04261 0.078766 0.089989, 0.03886 0.083649 0.056175, 0.040428 0.082489 0.052582, + 0.042027 0.080139 0.048584, 0.04261 0.078766 0.089989, 0.041122 0.081085 0.089996, 0.023277 0.074493 0.089989, + 0.050949 0.059113 0.089996, 0.037903 0.068237 0.089996, 0.034134 0.083588 0.089996, 0.039185 0.082611 0.089996, + 0.00769 0.077667 0.089996, -0.008224 0.077606 0.089996, 0.03688 0.083466 0.089996, 0.033768 0.084442 0.064087, + 0.034134 0.083588 0.089996, -0.006248 0.078735 0.06601, -0.006256 0.07843 0.074677, -0.008224 0.077606 0.089996, + -0.006775 0.078094 0.08197, -0.009872 0.09201 0.06601, -0.006248 0.078735 0.06601, -0.008064 0.078583 0.06601, + -0.009872 0.078369 0.06601, 0.02787 0.083527 0.06601, 0.02787 0.09198 0.06601, 0.030975 0.083984 0.065514, + 0.03241 0.084198 0.064911, 0.033768 0.084442 0.064087, 0.034611 0.084534 0.063385, 0.036831 0.09201 0.060455, + 0.035427 0.084534 0.062561, 0.036831 0.084381 0.060455, 0.036831 0.09201 0.060455, 0.02787 0.09198 0.06601, + 0.030609 0.09201 0.065613, -0.009872 0.09201 0.06601, 0.00074 0.09201 0.051453, 0.013382 0.09201 0.017914, + 0.008575 0.09201 0.035278, 0.035271 0.09198 0.062744, 0.033142 0.09201 0.064484, 0.047411 0.09201 0.031036, + 0.042969 0.09201 0.046051, 0.0501 0.09201 0.015625, 0.015 0.09201 0, 0.051 0.09201 0, 0.008575 0.09201 -0.035278, + 0.013382 0.09201 -0.017914, 0.047411 0.09201 -0.031036, -0.009872 0.09201 -0.06601, 0.00074 0.09201 -0.051453, + 0.042969 0.09201 -0.046043, 0.050099 0.09201 -0.015625, -0.009872 0.09201 -0.06601, -0.000305 0.078979 -0.06601, + -0.009872 0.078369 -0.06601, 0.00927 0.07843 -0.06601, 0.018707 0.076721 -0.06601, 0.035351 0.07074 -0.062645, + 0.036831 0.070068 -0.060455, 0.033249 0.071686 -0.064423, 0.036831 0.09201 -0.060455, 0.035271 0.09198 -0.062744, + 0.030678 0.072815 -0.065605, 0.02787 0.073914 -0.06601, 0.030609 0.09201 -0.065613, 0.033142 0.09201 -0.064484, + 0.02787 0.09198 -0.06601, -0.039608 -0.068604 -0.058502, -0.039173 -0.068848 -0.058502, -0.161995 0.002045 -0.058258, + -0.159454 0.001984 -0.058502, -0.160061 0.000946 -0.058502, -0.163841 0.003082 -0.057495, -0.166897 0.004761 -0.054718, + -0.166897 0.004761 0.054718, -0.174122 0.008606 0.04245, -0.179441 0.011383 0.028961, -0.183796 0.013672 0, + -0.182698 0.013092 0.014679, -0.166237 0.00592 -0.054718, -0.179443 0.011383 -0.028961, -0.1827 0.013092 -0.014679, + -0.174122 0.008606 -0.04245, -0.166237 0.00592 0.054718, -0.166897 0.004761 0.054718, -0.163841 0.003082 0.057495, + -0.165501 0.003998 0.056305, -0.160061 0.000946 0.058502, -0.039173 -0.068848 0.058502, -0.039608 -0.068604 0.058502, + -0.038738 -0.069092 0.058502, -0.159454 0.001984 0.058502, -0.03706 -0.070038 0.058105, -0.038738 -0.069092 0.058502, + -0.038132 -0.068054 0.058502, -0.035633 -0.070801 0.057037, -0.034367 -0.071533 0.053497, -0.034683 -0.07132 0.05542, + -0.034727 -0.072144 0, -0.034636 -0.071991 0.026764, -0.034367 -0.071533 0.053497, -0.034683 -0.07132 -0.05542, + -0.034367 -0.071533 -0.053497, -0.033802 -0.070557 -0.053497, -0.035633 -0.070801 -0.057037, -0.03706 -0.070038 -0.058105, + -0.038738 -0.069092 -0.058502, -0.038132 -0.068054 -0.058502, -0.159454 0.001984 0.058502, -0.161385 0.003113 0.058258, + -0.163219 0.004181 0.057495, -0.166237 0.00592 0.054718, -0.173309 0.01001 0.04245, -0.178511 0.013 0.028961, + -0.033802 -0.070557 0.053497, -0.18169 0.014832 0.014679, -0.038132 -0.068054 0.058502, -0.035072 -0.069824 0.057037, + -0.036476 -0.069 0.058105, -0.034134 -0.070374 0.05542, -0.18276 0.015442 0, -0.18169 0.014832 -0.014679, + -0.033802 -0.070557 -0.053497, -0.178511 0.013 -0.028961, -0.159454 0.001984 -0.058502, -0.173309 0.01001 -0.04245, + -0.166237 0.00592 -0.054718, -0.164864 0.005127 -0.056305, -0.034134 -0.070374 -0.05542, -0.035072 -0.069824 -0.057037, + -0.036476 -0.069 -0.058105, -0.163219 0.004181 -0.057495, 0.072067 0.029846 0.091003, 0.064857 0.043335 0.091003, + 0.078003 0 0.091003, 0.0765 0.015228 0.091003, 0.055153 0.055145 0.091003, 0.029854 0.072052 0.091003, + 0.015221 0.076508 0.090996, 0.043335 0.06485 0.091003, 0.07679 -0.013672 0.091003, 0.073204 -0.026947 0.091003, + 0.067345 -0.039368 0.091003, 0.059395 -0.050568 0.091003, 0.049606 -0.060211 0.091003, 0.038277 -0.067963 0.091003, + 0.025764 -0.073608 0.091003, 0 0.078003 0.091003, -0.015213 0.076508 0.091003, -0.029846 0.072052 0.091003, + -0.043335 0.06485 0.091003, -0.055153 0.055145 0.091003, -0.064857 0.043335 0.091003, -0.07206 0.029846 0.091003, + -0.0765 0.015228 0.091003, -0.077995 0 0.091003, -0.038277 -0.067963 0.091003, -0.025764 -0.073608 0.091003, + -0.049606 -0.060181 0.091003, -0.012451 -0.076996 0.091003, -0.073196 -0.026947 0.091003, -0.07679 -0.013672 0.091003, + -0.059395 -0.050568 0.091003, -0.067337 -0.039368 0.091003, 0.074501 0 0.091003, 0.073067 0.014526 0.091003, + 0.068832 0.028503 0.091003, 0.061943 0.041382 0.091003, 0.052681 0.052673 0.091003, 0.028511 0.068817 0.091011, + 0.041389 0.061951 0.091003, 0.014534 0.073059 0.091003, 0 0.074493 0.091003, -0.014534 0.073059 0.091003, + -0.028511 0.068817 0.091003, -0.041389 0.061951 0.091003, -0.052681 0.052673 0.091003, -0.068825 0.028503 0.091003, + -0.061943 0.041382 0.091003, -0.073067 0.014526 0.091003, -0.068825 0.028503 0.093994, -0.052681 0.052673 0.093994, + -0.061943 0.041382 0.093994, -0.073067 0.014526 0.093995, 0.073067 0.014526 0.093994, -0.014534 0.073059 0.093994, + -0.028511 0.068817 0.093994, -0.041389 0.061951 0.093994, -0.074501 0 0.093994, 0.014534 0.073059 0.093994, + 0 0.074493 0.093994, 0.041389 0.061951 0.093994, 0.028511 0.068817 0.094002, 0.052681 0.052673 0.093994, + 0.068832 0.028503 0.093994, 0.061943 0.041382 0.093994, 0.074501 0 0.093994, -0.074501 0 0.091003, + -0.073067 -0.014526 0.091003, -0.068825 -0.028503 0.091003, -0.073067 -0.014526 0.093995, -0.068825 -0.028503 0.093994, + -0.061943 -0.041382 0.091003, -0.074501 0 0.093994, -0.052681 -0.052673 0.091003, -0.052681 -0.052673 0.093994, + -0.028511 -0.068817 0.091003, -0.041389 -0.061951 0.091003, -0.014534 -0.073059 0.091003, 0 -0.074493 0.091003, + -0.061943 -0.041382 0.093994, -0.041389 -0.061951 0.093994, -0.028511 -0.068817 0.093994, 0 -0.074493 0.093994, + -0.014534 -0.073059 0.093994, 0.014534 -0.073059 0.091003, 0.028511 -0.068817 0.091011, 0.014534 -0.073059 0.093994, + 0.028511 -0.068817 0.094002, 0.041389 -0.061951 0.091003, 0.041389 -0.061951 0.093994, 0.052681 -0.052673 0.091003, + 0.068832 -0.028503 0.091003, 0.061943 -0.041382 0.091003, 0.073067 -0.014526 0.091003, 0.074501 0 0.091003, + 0.052681 -0.052673 0.093994, 0.061943 -0.041382 0.093994, 0.068832 -0.028503 0.093994, 0.073067 -0.014526 0.093994, + 0.016113 -0.076996 0.074921, 0.014404 -0.076996 0.083282, -0.016121 -0.076996 0.07489, 0.012451 -0.076996 0.091003, + -0.012451 -0.076996 0.091003, -0.017792 -0.076996 0.064575, 0.019463 -0.076996 0.050987, 0.009808 -0.078796 0.050995, + -0.019459 -0.076996 0.050995, -0.009804 -0.078796 0.050995, 0 -0.079407 0.050995, -0.084877 0.028534 0.089996, + -0.085251 0.029572 0.059998, -0.078041 0.009766 0.075287, -0.077583 0.008484 0.089996, -0.078426 0.010803 0.059998, + -0.039001 0.067535 -0.082001, -0.029846 0.072052 -0.082001, -0.020187 0.075348 -0.082001, -0.010178 0.077332 -0.082001, + 0 0.078003 -0.082001, 0.010185 0.077332 -0.082001, 0.020187 0.075348 -0.082001, 0.029854 0.072052 -0.082001, + 0.039001 0.067566 -0.082001, 0.047485 0.06189 -0.082001, 0.055153 0.055145 -0.082001, 0.061882 0.047485 -0.082001, + 0.067551 0.039001 -0.082001, 0.072067 0.029846 -0.082001, 0.07534 0.020172 -0.082001, 0.077332 0.010193 -0.082001, + 0.078003 0 -0.082001, 0.077332 -0.010193 -0.082001, 0.07534 -0.020203 -0.082001, 0.072067 -0.029846 -0.082001, + 0.067551 -0.039001 -0.082001, 0.061882 -0.047485 -0.082001, 0.055153 -0.055145 -0.082001, 0.047485 -0.06189 -0.082001, + 0.039001 -0.067535 -0.082001, 0.029854 -0.072052 -0.082001, 0.020187 -0.075348 -0.082001, 0.010185 -0.077332 -0.082001, + 0 -0.078003 -0.082001, -0.010178 -0.077332 -0.082001, -0.020187 -0.075348 -0.082001, -0.029846 -0.072052 -0.082001, + -0.039001 -0.067535 -0.082001, -0.1035 -0.030304 -0.082001, -0.110748 -0.02475 -0.082001, -0.11631 -0.017487 -0.082001, + -0.119804 -0.009064 -0.082001, -0.121002 0 -0.082001, -0.119804 0.009064 -0.082001, -0.11631 0.017487 -0.082001, + -0.110748 0.02475 -0.082001, -0.1035 0.030304 -0.082001, -0.038559 0.066772 -0.133087, -0.02951 0.071228 -0.133087, + -0.019958 0.074493 -0.133087, -0.010071 0.076447 -0.133087, 0 0.077118 -0.133087, 0.010056 0.076447 -0.133087, + 0.019943 0.074493 -0.133087, 0.029495 0.071228 -0.133087, 0.038544 0.066772 -0.133087, 0.046936 0.061188 -0.133087, + 0.05452 0.054535 -0.133087, 0.061172 0.046936 -0.133087, 0.066772 0.038544 -0.133087, 0.071228 0.02951 -0.133087, + 0.074478 0.019958 -0.133087, 0.076447 0.010071 -0.133087, 0.077103 0 -0.133087, 0.076447 -0.010071 -0.133087, + 0.074478 -0.019958 -0.133087, 0.071228 -0.02951 -0.133087, 0.066772 -0.038544 -0.133087, 0.061172 -0.046936 -0.133087, + 0.05452 -0.054535 -0.133087, 0.046936 -0.061188 -0.133087, 0.038544 -0.066772 -0.133087, 0.029495 -0.071228 -0.133087, + 0.019943 -0.074463 -0.133087, 0.010056 -0.076447 -0.133087, 0 -0.077118 -0.133087, -0.010071 -0.076447 -0.133087, + -0.019958 -0.074493 -0.133087, -0.02951 -0.071228 -0.133087, -0.038559 -0.066772 -0.133087, -0.039001 -0.067535 -0.082001, + -0.032028 0.05545 -0.14798, -0.02858 0.049469 -0.155121, -0.025009 0.043304 -0.161987, -0.012955 0.048309 -0.161987, + 0 0.049988 -0.161987, 0.012939 0.048309 -0.161987, 0.024994 0.043304 -0.161987, 0.035355 0.03537 -0.161987, + 0.043289 0.024994 -0.161987, 0.048294 0.012939 -0.161987, 0.049988 0 -0.161987, 0.048294 -0.012939 -0.161987, + 0.043289 -0.024994 -0.161987, 0.035355 -0.035339 -0.161987, 0.024994 -0.043304 -0.161987, 0.012939 -0.048279 -0.161987, + 0 -0.049988 -0.161987, -0.012955 -0.048279 -0.161987, -0.025009 -0.043304 -0.161987, -0.02858 -0.049469 -0.155121, + -0.032028 -0.05545 -0.14798, -0.102432 0.029907 -0.133087, -0.086792 0.023834 -0.14798, -0.078537 0.02063 -0.155121, + -0.070007 0.017334 -0.161987, -0.025009 0.043304 -0.161987, -0.103058 0.029541 -0.133087, -0.110123 0.024109 -0.132904, + -0.115555 0.017059 -0.132813, -0.118958 0.00882 -0.132751, -0.120117 0 -0.132751, -0.118958 -0.00882 -0.132751, + -0.115555 -0.017059 -0.132813, -0.110123 -0.024109 -0.132904, -0.103058 -0.029541 -0.133087, -0.102753 -0.029724 -0.133087, + -0.102432 -0.029907 -0.133087, -0.086792 -0.023834 -0.14798, -0.078537 -0.02063 -0.155121, -0.070007 -0.017334 -0.161987, + -0.074142 -0.01413 -0.161987, -0.077332 -0.01001 -0.161987, -0.07933 -0.005188 -0.161987, -0.080002 0 -0.161987, + -0.07933 0.005188 -0.161987, -0.077332 0.01001 -0.161987, -0.074142 0.01413 -0.161987, -0.070007 0.017334 -0.161987, + -0.102753 0.029724 -0.133087, -0.1035 0.030304 -0.082001, -0.038559 -0.066772 -0.133087, -0.102432 -0.029907 -0.133087, + -0.044174 -0.016083 -0.161987, -0.046463 -0.007141 -0.161987, -0.046967 0.002045 -0.161987, -0.045654 0.011169 -0.161987, + -0.042603 0.019867 -0.161987, -0.037903 0.027802 -0.161987, -0.031754 0.034637 -0.161987, -0.024384 0.040192 -0.161987, + -0.016083 0.044159 -0.161987, -0.007156 0.046448 -0.161987, 0.002045 0.046967 -0.161987, 0.011169 0.045654 -0.161987, + 0.019852 0.042603 -0.161987, 0.027786 0.037903 -0.161987, 0.034653 0.031769 -0.161995, 0.040176 0.024384 -0.16198, + 0.044159 0.016083 -0.161987, 0.046448 0.007141 -0.161987, 0.046951 -0.002045 -0.161987, 0.045639 -0.011169 -0.161987, + 0.042587 -0.019867 -0.161987, 0.037903 -0.027802 -0.161987, 0.031754 -0.034637 -0.161987, 0.024368 -0.040192 -0.161987, + 0.016068 -0.044159 -0.161987, 0.007141 -0.046448 -0.161987, -0.00206 -0.046967 -0.161987, -0.011185 -0.045654 -0.161987, + -0.019867 -0.042603 -0.161987, -0.027802 -0.037903 -0.161987, -0.034653 -0.031738 -0.161987, -0.040192 -0.024384 -0.161987, + -0.033157 -0.012054 -0.161041, -0.02211 -0.008057 -0.160339, 0 0 -0.15979, 0.022095 0.008026 -0.160339, + 0.033142 0.012054 -0.161041, -0.031052 0.071075 -0.107544, -0.022446 0.074249 -0.107544, -0.013046 0.076447 -0.107544, + -0.002983 0.077484 -0.107544, 0.007515 0.077179 -0.107544, 0.018204 0.075378 -0.107544, 0.028725 0.072052 -0.107544, + 0.03878 0.067169 -0.107544, 0.048019 0.060913 -0.107544, 0.05619 0.053467 -0.107544, 0.063087 0.045105 -0.107544, + 0.068604 0.036163 -0.107544, 0.072723 0.026917 -0.107544, 0.075516 0.01767 -0.107544, 0.077065 0.008636 -0.107544, + 0.077545 0 -0.107544, 0.077065 -0.008636 -0.107544, 0.075516 -0.01767 -0.107544, 0.072723 -0.026917 -0.107544, + 0.068604 -0.036163 -0.107544, 0.063087 -0.045105 -0.107544, 0.05619 -0.053467 -0.107544, 0.048019 -0.060913 -0.107544, + 0.03878 -0.067139 -0.107544, 0.028725 -0.072021 -0.107544, 0.018204 -0.075378 -0.107544, 0.007515 -0.077179 -0.107544, + -0.002983 -0.077484 -0.107544, -0.013046 -0.076447 -0.107544, -0.022446 -0.074219 -0.107544, -0.031052 -0.071075 -0.107544, + -0.02832 0.064789 -0.140656, -0.02565 0.058685 -0.14798, -0.022888 0.052338 -0.155121, -0.020477 0.067657 -0.140656, + -0.018539 0.061279 -0.14798, -0.016541 0.054688 -0.155121, -0.011902 0.069702 -0.140656, -0.010773 0.06311 -0.14798, + -0.009613 0.056305 -0.155121, -0.002731 0.070648 -0.140656, -0.002472 0.063995 -0.14798, -0.002197 0.057098 -0.155121, + 0.006851 0.070374 -0.140656, 0.00621 0.063721 -0.14798, 0.005539 0.056854 -0.155121, 0.016586 0.068726 -0.140656, + 0.015015 0.062256 -0.14798, 0.013397 0.055542 -0.155121, 0.026184 0.065674 -0.140656, 0.023712 0.059479 -0.14798, + 0.021164 0.05307 -0.155121, 0.035339 0.061218 -0.140656, 0.032013 0.05545 -0.14798, 0.028564 0.049469 -0.155113, + 0.043762 0.055511 -0.140656, 0.039642 0.050293 -0.14798, 0.03537 0.044861 -0.155121, 0.051208 0.048737 -0.140656, + 0.046387 0.044128 -0.14798, 0.041382 0.039368 -0.155113, 0.057495 0.041107 -0.140656, 0.052078 0.037231 -0.14798, + 0.046463 0.033234 -0.155121, 0.062531 0.032959 -0.140656, 0.056641 0.029846 -0.14798, 0.050537 0.026642 -0.155121, + 0.066284 0.024536 -0.140656, 0.060043 0.022217 -0.14798, 0.053574 0.019836 -0.155121, 0.068832 0.016113 -0.140656, + 0.062347 0.014587 -0.14798, 0.055618 0.013031 -0.155121, 0.070251 0.007874 -0.140656, 0.063629 0.007141 -0.14798, + 0.056763 0.006348 -0.155121, 0.070694 0 -0.140656, 0.064026 0 -0.14798, 0.057129 0 -0.155121, 0.070251 -0.007874 -0.140656, + 0.063629 -0.007141 -0.14798, 0.056763 -0.006378 -0.155121, 0.068832 -0.016113 -0.140656, 0.062347 -0.014587 -0.14798, + 0.055618 -0.013031 -0.155121, 0.066284 -0.024536 -0.140656, 0.060043 -0.022247 -0.14798, 0.053574 -0.019836 -0.155121, + 0.062531 -0.032959 -0.140656, 0.056641 -0.029846 -0.14798, 0.050537 -0.026642 -0.155121, 0.057495 -0.041107 -0.140656, + 0.052078 -0.037231 -0.14798, 0.046463 -0.033234 -0.155121, 0.051208 -0.048737 -0.140656, 0.046387 -0.044128 -0.14798, + 0.041382 -0.039368 -0.155113, 0.043762 -0.055511 -0.140656, 0.039642 -0.050293 -0.14798, 0.03537 -0.044861 -0.155121, + 0.035339 -0.061218 -0.140656, 0.032013 -0.05545 -0.14798, 0.028564 -0.049469 -0.155113, 0.026184 -0.065674 -0.140656, + 0.023712 -0.059479 -0.14798, 0.021164 -0.05307 -0.155121, 0.016586 -0.068726 -0.140656, 0.015015 -0.062256 -0.14798, + 0.013397 -0.055542 -0.155121, 0.006851 -0.070374 -0.140656, 0.00621 -0.063721 -0.14798, 0.005539 -0.056854 -0.155121, + -0.002731 -0.070648 -0.140656, -0.002472 -0.063995 -0.14798, -0.002197 -0.057098 -0.155121, -0.011902 -0.069672 -0.140656, + -0.010773 -0.06311 -0.14798, -0.009613 -0.056305 -0.155121, -0.020477 -0.067657 -0.140656, -0.018539 -0.061279 -0.14798, + -0.016541 -0.054688 -0.155121, -0.02832 -0.064789 -0.140656, -0.02565 -0.058685 -0.14798, -0.022888 -0.052338 -0.155121, + -0.060516 0.031036 -0.155121, -0.063965 0.037018 -0.14798, -0.067291 0.042786 -0.140656, -0.101471 -0.022064 -0.140411, + -0.092651 -0.019531 -0.147858, -0.083542 -0.016876 -0.15506, -0.1064 -0.015594 -0.140411, -0.097 -0.013794 -0.147858, + -0.087311 -0.011932 -0.15506, -0.109497 -0.008087 -0.140442, -0.099747 -0.007141 -0.147888, -0.089676 -0.006165 -0.15506, + -0.11055 0 -0.140442, -0.100677 0 -0.147888, -0.090485 0 -0.15506, -0.109497 0.008087 -0.140442, -0.099747 0.007141 -0.147888, + -0.089676 0.006165 -0.15506, -0.1064 0.015594 -0.140411, -0.097 0.013794 -0.147858, -0.087311 0.011932 -0.15506, + -0.101471 0.022064 -0.140411, -0.092651 0.019531 -0.147858, -0.083542 0.016876 -0.15506, -0.109642 -0.025208 -0.107544, + -0.115234 -0.018402 -0.107544, -0.119141 -0.009766 -0.107544, -0.120552 0 -0.107544, -0.119141 0.009766 -0.107544, + -0.115234 0.018402 -0.107544, -0.109642 0.025208 -0.107544, -0.060516 -0.031036 -0.155121, -0.063965 -0.037018 -0.14798, + -0.067291 -0.042786 -0.140656, 0.028442 0.020874 -0.161034, 0.018967 0.013916 -0.160339, 0.009476 0.006958 -0.159912, + 0.024506 0.02536 -0.161041, 0.016342 0.016937 -0.160339, 0.008163 0.008453 -0.159912, 0.019272 0.029541 -0.161034, + 0.012848 0.019714 -0.160339, 0.006424 0.009857 -0.159912, 0.012695 0.032898 -0.161041, 0.008469 0.021942 -0.160339, + 0.004227 0.010986 -0.159912, 0.004944 0.034912 -0.161041, 0.003296 0.023285 -0.160339, 0.001648 0.011658 -0.159912, + -0.00354 0.035095 -0.161041, -0.002365 0.023407 -0.160339, -0.00119 0.011719 -0.159912, -0.01207 0.033142 -0.161041, + -0.008057 0.022095 -0.160339, -0.004028 0.011047 -0.159912, -0.019867 0.029175 -0.161041, -0.013245 0.01944 -0.160339, + -0.006622 0.009735 -0.159912, -0.026245 0.02356 -0.161041, -0.017517 0.015717 -0.160339, -0.008759 0.007874 -0.159912, + -0.030899 0.017029 -0.161041, -0.020599 0.011353 -0.160339, -0.010315 0.005676 -0.159912, -0.033768 0.010223 -0.161041, + -0.022522 0.006836 -0.160339, -0.011261 0.003418 -0.159912, -0.035095 0.003693 -0.161041, -0.023407 0.002441 -0.160339, + -0.011703 0.001221 -0.159912, -0.035202 -0.002289 -0.161041, -0.023483 -0.001526 -0.160339, -0.011749 -0.000763 -0.159912, + -0.028442 -0.020874 -0.161041, -0.018982 -0.013916 -0.160339, -0.009491 -0.006958 -0.159912, -0.024521 -0.02536 -0.161041, + -0.016357 -0.016907 -0.160339, -0.008179 -0.008453 -0.159912, -0.019287 -0.029541 -0.161041, -0.012863 -0.019714 -0.160339, + -0.006439 -0.009857 -0.159912, -0.012711 -0.032898 -0.161041, -0.008484 -0.021942 -0.160339, -0.004242 -0.010986 -0.159912, + -0.004959 -0.034912 -0.161041, -0.003311 -0.023285 -0.160339, -0.001663 -0.011658 -0.159912, 0.003525 -0.035095 -0.161041, + 0.00235 -0.023407 -0.160339, 0.001175 -0.011688 -0.159912, 0.012054 -0.033142 -0.161041, 0.008041 -0.022095 -0.160339, + 0.004013 -0.011047 -0.159912, 0.019852 -0.029144 -0.161041, 0.013229 -0.01944 -0.160339, 0.006607 -0.009735 -0.159912, + 0.02623 -0.02356 -0.161034, 0.017502 -0.015717 -0.160347, 0.008743 -0.007874 -0.159912, 0.030884 -0.017029 -0.161041, + 0.020599 -0.011353 -0.160339, 0.0103 -0.005676 -0.159912, 0.033752 -0.010254 -0.161041, 0.022507 -0.006836 -0.160339, + 0.011246 -0.003418 -0.159912, 0.03508 -0.003662 -0.161041, 0.023392 -0.002441 -0.160347, 0.011688 -0.001221 -0.159912, + 0.035187 0.002289 -0.161041, 0.023468 0.001526 -0.160339, 0.011734 0.000763 -0.159912, -0.039001 0.067535 -0.082001, + -0.029846 0.072052 -0.082001, -0.020187 0.075348 -0.082001, -0.010178 0.077332 -0.082001, 0 0.078003 -0.082001, + 0.010185 0.077332 -0.082001, 0.020187 0.075348 -0.082001, 0.029854 0.072052 -0.082001, 0.039001 0.067566 -0.082001, + 0.047485 0.06189 -0.082001, 0.055153 0.055145 -0.082001, 0.067551 0.039001 -0.082001, 0.061882 0.047485 -0.082001, + 0.072067 0.029846 -0.082001, 0.07534 0.020172 -0.082001, 0.077332 0.010193 -0.082001, 0.078003 0 -0.082001, + 0.077332 -0.010193 -0.082001, 0.07534 -0.020203 -0.082001, 0.072067 -0.029846 -0.082001, 0.067551 -0.039001 -0.082001, + 0.061882 -0.047485 -0.082001, 0.055153 -0.055145 -0.082001, 0.047485 -0.06189 -0.082001, 0.039001 -0.067535 -0.082001, + 0.029854 -0.072052 -0.082001, 0.020187 -0.075348 -0.082001, 0 -0.078003 -0.082001, 0.010185 -0.077332 -0.082001, + -0.010178 -0.077332 -0.082001, -0.020187 -0.075348 -0.082001, -0.029846 -0.072052 -0.082001, -0.038559 0.066772 -0.133087, + -0.02951 0.071228 -0.133087, -0.019958 0.074493 -0.133087, -0.010071 0.076447 -0.133087, 0 0.077118 -0.133087, + 0.010056 0.076447 -0.133087, 0.019943 0.074493 -0.133087, 0.046936 0.061188 -0.133087, 0.05452 0.054535 -0.133087, + 0.029495 0.071228 -0.133087, 0.038544 0.066772 -0.133087, 0.061172 0.046936 -0.133087, 0.066772 0.038544 -0.133087, + 0.071228 0.02951 -0.133087, 0.074478 0.019958 -0.133087, 0.076447 0.010071 -0.133087, 0.077103 0 -0.133087, + 0.076447 -0.010071 -0.133087, 0.074478 -0.019958 -0.133087, 0.071228 -0.02951 -0.133087, 0.066772 -0.038544 -0.133087, + 0.061172 -0.046936 -0.133087, 0.05452 -0.054535 -0.133087, 0.046936 -0.061188 -0.133087, 0.019943 -0.074463 -0.133087, + 0.010056 -0.076447 -0.133087, 0 -0.077118 -0.133087, -0.010071 -0.076447 -0.133087, -0.019958 -0.074493 -0.133087, + -0.02951 -0.071228 -0.133087, -0.038559 -0.066772 -0.133087, 0.038544 -0.066772 -0.133087, 0.029495 -0.071228 -0.133087, + -0.02858 0.049469 -0.155121, -0.032028 0.05545 -0.14798, -0.038559 0.066772 -0.133087, -0.086792 0.023834 -0.14798, + -0.102432 0.029907 -0.133087, -0.078537 0.02063 -0.155121, -0.1035 -0.030304 -0.082001, -0.110748 -0.02475 -0.082001, + -0.103058 -0.029541 -0.133087, -0.11631 -0.017487 -0.082001, -0.119804 -0.009064 -0.082001, -0.110123 -0.024109 -0.132904, + -0.115555 -0.017059 -0.132813, -0.118958 -0.00882 -0.132751, -0.121002 0 -0.082001, -0.119804 0.009064 -0.082001, + -0.11631 0.017487 -0.082001, -0.118958 0.00882 -0.132751, -0.110748 0.02475 -0.082001, -0.120117 0 -0.132751, + -0.115555 0.017059 -0.132813, -0.110123 0.024109 -0.132904, -0.103058 0.029541 -0.133087, -0.102432 0.029907 -0.133087, + -0.102753 0.029724 -0.133087, -0.1035 0.030304 -0.082001, -0.039001 0.067535 -0.082001, -0.038559 0.066772 -0.133087, + -0.039001 -0.067535 -0.082001, -0.1035 -0.030304 -0.082001, -0.103058 -0.029541 -0.133087, -0.102753 -0.029724 -0.133087, + -0.025009 -0.043304 -0.161987, -0.02858 -0.049469 -0.155121, -0.070007 -0.017334 -0.161987, -0.078537 -0.02063 -0.155121, + -0.032028 -0.05545 -0.14798, -0.038559 -0.066772 -0.133087, -0.086792 -0.023834 -0.14798, -0.102432 -0.029907 -0.133087, + -0.077332 0.01001 -0.161987, -0.074142 0.01413 -0.161987, -0.07933 0.005188 -0.161987, -0.07933 -0.005188 -0.161987, + -0.080002 0 -0.161987, -0.077332 -0.01001 -0.161987, -0.070007 0.017334 -0.161987, -0.025009 0.043304 -0.161987, + -0.074142 -0.01413 -0.161987, -0.070007 -0.017334 -0.161987, -0.025009 -0.043304 -0.161987, -0.012955 -0.048279 -0.161987, + 0 -0.049988 -0.161987, 0.012939 -0.048279 -0.161987, -0.012955 0.048309 -0.161987, 0 0.049988 -0.161987, + 0.012939 0.048309 -0.161987, 0.024994 0.043304 -0.161987, 0.035355 0.03537 -0.161987, 0.043289 0.024994 -0.161987, + 0.035355 -0.035339 -0.161987, 0.043289 -0.024994 -0.161987, 0.024994 -0.043304 -0.161987, 0.049988 0 -0.161987, + 0.048294 0.012939 -0.161987, 0.048294 -0.012939 -0.161987, 0.040176 0.024384 -0.16198, 0.044159 0.016083 -0.161987, + 0.034653 0.031769 -0.161995, 0.027786 0.037903 -0.161987, 0.019852 0.042603 -0.161987, 0.011169 0.045654 -0.161987, + -0.007156 0.046448 -0.161987, 0.002045 0.046967 -0.161987, -0.016083 0.044159 -0.161987, -0.024384 0.040192 -0.161987, + -0.031754 0.034637 -0.161987, -0.042603 0.019867 -0.161987, -0.037903 0.027802 -0.161987, -0.046967 0.002045 -0.161987, + -0.045654 0.011169 -0.161987, -0.044174 -0.016083 -0.161987, -0.046463 -0.007141 -0.161987, -0.040192 -0.024384 -0.161987, + -0.044174 -0.016083 -0.161987, -0.033157 -0.012054 -0.161041, -0.034653 -0.031738 -0.161987, -0.027802 -0.037903 -0.161987, + -0.019867 -0.042603 -0.161987, -0.011185 -0.045654 -0.161987, 0.007141 -0.046448 -0.161987, -0.00206 -0.046967 -0.161987, + -0.02211 -0.008057 -0.160339, 0 0 -0.15979, 0.016068 -0.044159 -0.161987, 0.031754 -0.034637 -0.161987, + 0.024368 -0.040192 -0.161987, 0.042587 -0.019867 -0.161987, 0.037903 -0.027802 -0.161987, 0.046951 -0.002045 -0.161987, + 0.045639 -0.011169 -0.161987, 0.033142 0.012054 -0.161041, 0.044159 0.016083 -0.161987, 0.046448 0.007141 -0.161987, + 0.022095 0.008026 -0.160339] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 1622 + -0.000255824 1 0.000656961, -0.0011181 0.999997 0.00236449, -0.000225192 1 0.000969097, -1.21266e-011 1 0.000618475, + -0.00185203 0.999992 0.00346252, 0 1 0, 0.000230241 1 0.000591264, -0.000228133 1 -0.000588435, 0.000225192 1 0.000969097, + 0.0011181 0.999997 0.00236448, 0.00185203 0.999992 0.00346251, 0.00025348 1 -0.000653816, -0.00110756 0.999997 -0.00235034, + -0.00182859 0.999992 -0.00342983, -0.000226366 1 -0.000971294, -1.21266e-011 1 -0.000618475, 0.000226366 1 -0.000971294, + 0.00110755 0.999997 -0.00235033, 0.00182859 0.999992 -0.00342982, 0.119108 0.00522649 -0.992867, 0.082301 0.0181209 -0.996443, + 0.204165 0.0185887 -0.97876, 0.960695 0.0423778 -0.274352, 0.979098 0.00125196 -0.203386, 0.961532 -0.0662097 -0.266593, + 0.292915 0.00923963 -0.956094, 0.375 0.0194212 -0.926821, 0.456066 0.00823298 -0.889908, 0.547381 0.0153748 -0.836742, + 0.229719 -0.00571891 -0.97324, 0.582036 -0.000956489 -0.813163, 0.621943 0.0136393 -0.782943, 0.510847 0.00761681 -0.859638, + 0.366114 -0.00726432 -0.930542, 0.699373 0.052369 -0.712836, 0.0649104 0.00188919 -0.997889, 0.832816 0.00598034 -0.553518, + 0.770424 0.0219739 -0.637153, 0.924202 -0.00982915 -0.381776, 0.893068 0.0485679 -0.447292, 0.935129 0.0261171 -0.353345, + 0.893494 -0.119892 -0.432775, 0.72101 -0.00363638 -0.692915, 0.690476 0.00117852 -0.723354, 0.999827 0.0186105 -1.84224e-005, + 0.994948 0.0388191 -0.0925797, 0.662827 0.001387 -0.748772, 0.457303 -0.000418776 -0.889311, 0.609981 0.00278755 -0.792411, + 0.595902 0 -0.803057, 0.124702 -0.000427281 -0.992194, 0.713236 -0.0108098 -0.700841, 0.716185 0 -0.69791, + 0.98374 0.00662612 -0.179476, 1 0 0, 0.994964 0.0384829 0.092556, 0.983749 0.00528633 0.179469, + 0.979093 -2.48227e-005 0.203411, 0.961403 -0.068201 0.266557, 0.96072 0.0412599 0.274437, 0.924209 -0.0103141 0.381748, + 0.935129 0.0261171 0.353345, 0.832832 0.00288097 0.553519, 0.856325 0.0575554 0.51322, 0.893182 0.0472138 0.447209, + 0.856104 0.0612358 -0.513163, 0.799829 -0.147109 -0.581921, 0.542094 0.0177509 0.840131, 0.612797 0.0092275 0.790186, + 0.699232 0.0522178 0.712986, 0.799308 -0.151377 0.581542, 0.379158 0.0183138 0.925151, 0.199629 0.0140715 0.97977, + 0.299992 0.00817481 0.953907, 0.457886 0.00726194 0.888982, 0.798482 -0.147964 -0.583552, 0.770345 0.0200415 0.637312, + 0.893494 -0.119892 0.432775, 0.0995935 0.00828407 0.994994, 0.082301 0.0181209 0.996443, 0.706734 0.000548783 0.707479, + 0.675714 0.00741394 0.737127, 0.629998 -0.00561649 0.776577, 0.72284 0 0.691016, 0.720815 0.000780048 0.693127, + 0.524716 -0.00960066 0.851223, 0.258881 -0.00499894 0.965896, 0.145516 -0.00439102 0.989346, 0.385092 -0.00700015 0.922852, + 0.0678479 -0.00156081 0.997694, 0.797957 -0.152244 0.583169, 0 0 -1, 1.35375e-005 0.000132487 -1, + 1.07115e-005 -0.000299567 -1, 3.54654e-005 -0.000189174 -1, 1.52205e-005 -0.000122246 -1, 0.000152146 0.00125587 -0.999999, + 0.000131118 0.000810622 -1, 0.000138985 0.000556157 -1, 0.000105025 -0.000586896 -1, -1.44896e-005 -0.000946194 -1, + 1.5708e-005 0.000764725 -1, 7.30198e-005 0.000230876 -1, 2.3115e-005 -0.000543155 -1, 3.62063e-005 -0.000844961 -1, + -0.0099793 0.00412458 0.999942, -0.157219 0.0138033 0.987467, -0.0871023 0.00131031 0.996199, -0.196608 0.00740045 0.980454, + 0.0608097 0.000791636 0.998149, 0.00963093 -0.00219501 0.999951, -0.103152 0.00420386 0.994657, 0.0621454 0 0.998067, + -0.279543 0.00953163 0.960086, -0.329295 0.0226344 0.943956, -0.400928 0.011336 0.916039, -0.502111 0.0157967 0.864659, + -0.328647 -0.00175261 0.944451, -0.603356 0.000896037 0.797471, -0.611003 0.000695719 0.791628, -0.50173 0.00258889 0.86502, + -0.653666 -0.000861301 0.756783, -0.435023 -0.00268974 0.900415, -0.534513 -0.000975248 0.84516, -0.61398 0.00118561 0.78932, + -0.655144 0.00322516 0.755497, -0.563341 0.00921272 -0.826173, -0.543943 -0.00159856 -0.839121, + -0.428567 0.00492191 -0.903496, -0.636828 0.00967299 -0.770945, -0.611547 0.00238063 -0.791204, + -0.425943 -0.00112244 -0.904749, -0.304755 -0.00132729 -0.95243, -0.153334 0.0024564 -0.988171, + -0.263153 0.00692206 -0.964729, -0.378973 0.00933097 -0.925361, -0.0967439 0.00386381 -0.995302, + -0.502086 0.00375997 -0.86481, -0.653147 0 -0.757231, -0.0335019 -0.00144626 -0.999438, -0.168994 0.00214166 -0.985615, + 0.0555594 0.00300806 -0.998451, -0.279689 0.00297652 -0.960086, 0.00156686 0.00659817 -0.999977, + 0.154509 0.00986779 -0.987942, 0.200093 0.00580181 -0.97976, 0.0996327 0.00284269 -0.99502, 0.308121 0.0126133 -0.951264, + 0.408173 0.0112967 -0.912835, 0.379625 0.00443222 -0.92513, 0.414143 0.00726791 -0.910183, 0.375925 0.00147401 -0.926649, + 0.298439 -0.000306512 -0.954429, 0.202874 0.00891542 -0.979164, 0.243063 0.0134992 -0.969917, 0.202889 0 -0.979202, + 0.222958 0.0166048 -0.974687, 0.00361091 -0.978069 0.208251, 0.00733144 -0.707088 0.707088, -0.525502 -0.193647 0.828462, + -0.615407 -0.177836 0.767886, -0.566367 -0.358744 0.741978, -0.430355 -0.19274 0.881842, -0.477827 -0.377148 0.793373, + -0.64742 -0.149645 0.747298, -0.628621 -0.267218 0.730363, -0.522152 -0.587285 0.618428, -0.437318 -0.68129 0.587024, + -0.386758 -0.377999 0.841151, -0.360436 -0.702843 0.613268, -0.290869 -0.37702 0.879347, -0.293097 -0.698882 0.652425, + -0.319363 -0.862486 0.392589, 0.00349393 -0.999994 0, 0.00390047 -0.992264 0.124084, -0.329428 -0.187989 0.925277, + -0.225755 -0.17362 0.958588, -0.118338 -0.184381 0.975705, -0.192811 -0.373907 0.907203, -0.0918859 -0.367282 0.92556, + -0.210771 -0.715539 0.666018, -0.14569 -0.663395 0.733949, -0.00951166 -0.173564 0.984777, 0.00979559 -0.361166 0.93245, + 0.0579243 -0.435139 0.898498, 0.0628645 -0.173919 0.982751, -0.067642 -0.698572 0.712335, 0.0134054 -0.723116 0.690597, + -0.214109 -0.926495 0.309457, -0.109688 -0.981408 0.157502, -0.186348 -0.923515 0.335252, -0.154049 -0.918239 0.364838, + -0.0769197 -0.988213 0.132357, -0.0864074 -0.981402 0.17142, -0.121483 -0.914065 0.386945, -0.0469922 -0.98445 0.169261, + -0.0817755 -0.911344 0.403442, -0.0326851 -0.909134 0.415218, 0.0289427 -0.887756 0.459404, 0.0449742 -0.706451 0.706331, + 0.00330147 -0.947516 0.319691, -0.014054 -0.984709 0.173637, 0 -1 0, 0.00878578 -0.98267 0.185157, + 0.0047459 -0.978918 0.204201, 0 0 1, -1 0 0, -1 1.03351e-005 2.71222e-005, -1 0 0.000188912, -1 3.10053e-005 0.000175822, + -1 2.06702e-005 0.000117215, -5.47036e-005 -0.99967 0.0256967, 8.67034e-006 -0.999668 0.0257688, + -0.000389891 -0.999537 0.0304345, 0 -0.999663 0.0259617, -0.000530133 -0.999457 0.0329357, -0.00119566 -0.999201 0.0399566, + -0.57374 0.81831 0.0345181, -0.573547 0.818593 0.0308034, -0.573202 0.818705 0.0340696, -0.573604 0.818385 0.0349915, + -0.573335 0.81857 0.0350709, -0.572626 0.819079 0.0347807, -0.572598 0.819167 0.0331204, -0.998482 -0.0540692 0.0104852, + -0.999177 0.0381728 0.0137118, -0.953453 0.300736 0.0220333, -0.983026 -0.183333 0.0070297, -0.982987 -0.183613 0.00482595, + -0.999208 0.0374008 0.0135595, -0.953201 0.301523 0.0221948, -0.786275 0.617106 0.0308422, -0.840438 0.541114 0.0293127, + -0.70082 0.712517 0.0342182, -0.95404 0.29889 0.0217429, -0.839613 0.542431 0.02861, -0.697751 0.715645 0.0315438, + -0.973592 0.0729561 0.216323, -0.906386 0.180464 0.381966, -0.994526 0.0984214 0.0350906, -0.998114 0.0475085 0.0388856, + -0.77767 0.520162 0.353072, -0.664612 0.664923 0.340834, -0.726078 0.596601 0.341873, 0.541575 0.774043 -0.327955, + 0.543231 0.774196 -0.324839, 0.542078 0.774244 -0.326646, -0.88636 0.269219 0.376678, -0.858026 0.355707 0.370493, + -0.822551 0.439234 0.361224, 0.680264 0.732879 0.0114083, 0.629265 0.776966 0.0186807, 0.675661 0.736877 0.0222412, + -0.995184 0.0914124 0.0354033, -0.996552 0.0750329 0.0354026, -0.99418 0.103101 0.0312604, -0.99427 0.102014 0.031958, + -0.629711 0.776059 0.0345891, -0.547419 0.83053 0.102725, -0.573227 0.818672 0.0344557, -0.474542 0.877884 0.0642594, + -0.498923 0.864595 0.0595995, -0.447294 0.892045 0.064688, -0.569981 0.821147 0.0289786, -0.377234 0.92477 0.0499465, + -0.327817 0.943613 0.0461516, -0.279412 0.958093 0.0631377, -0.207979 0.972654 0.103385, -8.72176e-005 0.924248 0.381794, + -0.0855332 0.996046 0.0239908, -0.137697 0.989656 0.0402469, -0.174617 0.983814 0.0402345, -0.129184 0.990917 0.0373422, + -0.474538 0.877938 0.0635513, -0.00360357 0.94015 -0.340743, 0.461827 0.828518 -0.316662, -0.998834 0.0343859 0.0338918, + -0.142095 0.989412 0.0295599, -0.101826 0.994204 0.0345003, -0.0969841 0.994575 0.0376004, 0.180424 0.905058 0.38512, + 0.352736 0.851205 0.388622, 0.268921 0.883707 0.383072, 0.187221 0.920173 -0.343846, 0.0922869 0.934467 -0.343881, + 0.0904308 0.918904 0.383975, -0.0833574 0.995906 0.0349704, 0.514069 0.768436 0.381102, 0.697038 0.70909 0.106436, + 0.631185 0.775185 0.0263331, 0.664295 0.74651 0.0378861, 0.43369 0.811798 0.39102, 0.837894 0.544005 0.0446346, + 0.925942 0.374822 0.0462506, 0.900319 0.434026 0.0323651, 0.978911 0.198813 0.0469837, 0.961599 0.272422 0.0333817, + 0.802717 0.595529 0.0314616, 0.991309 0.126782 0.0351181, 0.996113 0.0762299 0.0441247, 0.63957 0.768274 0.0265453, + 0.694617 0.718721 0.0307674, 0.788222 0.614991 0.0221712, 0.958373 0.28462 0.0226593, 0.8964 0.442663 0.0227281, + 0.997689 0.0625786 0.0264647, 0.99031 0.136993 0.0227684, 0.641103 0.767397 0.00941156, 0.634877 0.772451 0.0158384, + 0.647855 0.761742 0.00572548, 0.684478 0.729033 0.000821141, 0.888604 0.458505 0.0124417, 0.808776 0.588044 0.00918649, + 0.989487 0.144302 0.00958671, 0.997694 0.066578 0.0132212, 0.281162 0.901118 -0.330052, 0.373497 0.874385 -0.309758, + 0.372164 0.874335 -0.311501, 0.952605 0.304022 0.0106868, 0.90075 0.434338 -0.000520882, 0.771501 0.636225 0.00220497, + 0.976694 0.214606 -0.00362825, 0.37399 0.874773 -0.308063, 0.996096 0.0881573 -0.004546, -0.921562 0.197629 -0.334166, + -0.89684 0.29133 -0.332874, -0.921481 0.197544 -0.334439, -0.921643 0.197713 -0.333892, -0.921738 0.197852 -0.333548, + -0.864982 0.381988 -0.325411, -0.824094 0.468718 -0.318077, -0.865599 0.381488 -0.324353, -0.864684 0.382398 -0.325719, + -0.773877 0.552415 -0.309761, -0.717348 0.630469 -0.296514, -0.773394 0.552698 -0.310462, -0.774118 0.552256 -0.309441, + -0.653184 0.704254 -0.278166, -0.653649 0.703601 -0.278726, -0.653977 0.702616 -0.280437, -0.00802674 -0.999673 0.0242586, + 0.00468653 -0.999883 0.0145295, -0.00236823 -0.999821 0.0187429, -0.022843 -0.999117 0.03526, 0.00129037 -0.999876 0.0157113, + -0.000166332 -0.999885 0.0151319, -0.000376644 -0.999859 0.0168038, 0.000250659 -0.999836 0.0180914, + -0.000432779 -0.999845 0.0175917, -9.21256e-005 -0.999841 0.0178074, 0.000336184 -0.999838 0.0179947, + 0.000123935 -0.999838 0.0179726, -0.000371553 -0.999848 0.0174175, -0.000179916 -0.999838 0.0180073, + 4.80965e-005 -0.999849 0.0173993, 0.00100863 -0.999856 0.0169292, 0.000164085 -0.999881 0.0154017, + -0.000652928 -0.999851 0.0172359, -0.00317256 -0.999974 0.00653399, -0.00298495 -0.999928 0.0116294, + 0.000378219 -0.999834 0.0182315, 4.49788e-005 -0.999833 0.0182755, -0.000220502 -0.999865 0.0164429, + -0.000991393 -0.999845 0.0175968, -0.00936914 -0.999955 0.00128268, -0.721685 -0.00442272 0.692207, + -0.548917 -0.00265849 0.835873, -0.674718 -0.00169748 0.738074, -0.638718 -0.000223023 0.769441, + -0.473842 2.02303e-005 0.88061, -0.758242 5.21538e-005 0.651973, -0.246494 0.00159095 0.969143, + -0.290597 -0.000469236 0.956845, -0.123004 -0.000613782 0.992406, -0.397544 0.00309836 0.917578, + -0.179982 0.00460736 0.983659, -0.499763 -0.865345 -0.0376276, -0.500655 -0.864928 -0.0352656, -0.499864 -0.865245 -0.0385593, + -0.500834 -0.864729 -0.037553, -0.500601 -0.864933 -0.0359102, -0.499671 -0.865533 -0.0343745, -0.499609 -0.865634 -0.0327074, + -0.499682 -0.865357 -0.0384105, -0.49966 -0.865663 -0.0311106, -0.500582 -0.864787 -0.0395121, -0.499756 -0.865478 -0.0345359, + -0.500125 -0.864632 -0.0478108, -0.500134 -0.865634 -0.0233241, -0.502001 -0.864223 -0.0333744, + -0.501059 -0.864869 -0.0306967, -0.503713 -0.863399 -0.0285499, -0.500977 -0.865044 -0.0268637, -0.49654 -0.867792 -0.0196292, + -0.492529 -0.870145 -0.0162461, -0.493865 -0.869437 -0.0132879, -0.505491 -0.862097 0.035621, -0.50144 -0.864318 0.0388863, + -0.50273 -0.863698 0.0359021, -0.506443 -0.861635 0.0331682, -0.501459 -0.864794 0.0259006, -0.499775 -0.865786 0.0252762, + -0.499996 -0.865989 0.00818491, -0.500282 -0.86552 0.024362, -0.500458 -0.865291 0.0285153, -0.499676 -0.86559 0.0328215, + -0.501085 -0.865033 0.0251552, -0.491761 -0.870707 -0.00629876, -0.493349 -0.869763 -0.0109354, + -0.489355 -0.872075 -0.00416192, -0.488382 -0.87263 2.27331e-006, -0.486813 -0.873506 0, -0.488951 -0.872301 0.00410582, + -0.496393 -0.867878 0.0195373, -0.49253 -0.870145 0.01621, -0.493476 -0.86966 0.0131085, -0.491165 -0.871045 0.00618575, + -0.492753 -0.870103 0.010721, -0.117534 0.00330287 0.993063, -0.0659705 0 0.997822, -0.082041 0.00906723 0.996588, + -0.191645 0.00480845 0.981452, -0.708623 0.00489599 0.70557, -0.760577 0.00350593 0.649238, -0.710131 -0.00769547 0.704028, + -0.262634 0.00516452 0.964882, -0.382628 0.00729547 0.923874, -0.188174 -0.00823964 0.982101, -0.4188 -0.00412369 0.908069, + -0.364235 0.00104927 0.931307, -0.564307 0.0100539 0.825504, -0.471408 0.0043125 0.881905, -0.655754 0.00509373 0.754958, + -0.829276 0.00723271 0.558793, -0.572877 0.00133067 0.81964, -0.837661 -0.000143668 0.54619, -0.928093 0.00515327 0.372312, + -0.878647 0.000897815 0.477471, -0.981398 0.00484311 0.191926, -0.968684 0.00156834 0.24829, -0.932667 0.000574788 0.360739, + -0.906585 -0.00297182 0.422013, -0.993798 0.000885963 0.111192, -0.987409 -0.00218827 0.158173, -0.95613 -0.00280853 0.292929, + -0.864744 -0.00308784 0.502203, -0.999998 -0.0017649 0, -0.857733 0 0.514095, -0.655902 0.00487788 -0.75483, + -0.710131 -0.00769547 -0.704028, -0.708813 0.00489473 -0.70538, -0.999987 0.0050679 -1.87329e-005, + -0.837785 9.25795e-005 -0.546001, -0.857733 0 -0.514095, -0.878668 0.000955537 -0.477432, -0.92808 0.00519129 -0.372344, + -0.829386 0.00746437 -0.558626, -0.760683 0.00367966 -0.649114, -0.981407 0.00489527 -0.191878, + -0.993797 0.000899985 -0.111205, -0.968694 0.00159087 -0.248254, -0.564151 0.00975452 -0.825614, + -0.572873 0.000802963 -0.819644, -0.47101 0.00432568 -0.882117, -0.382515 0.00769106 -0.923917, -0.26287 0.00543045 -0.964816, + -0.191824 0.00485343 -0.981417, -0.117534 0.00330287 -0.993063, -0.082041 0.00906723 -0.996588, + -0.418805 -0.00353496 -0.908069, -0.188174 -0.00823964 -0.982101, -0.0659705 0 -0.997822, -0.364239 0.00165347 -0.931304, + -0.932667 0.000574788 -0.360739, -0.95613 -0.00280853 -0.292929, -0.987409 -0.00218827 -0.158173, + -0.906585 -0.00297182 -0.422013, -0.815921 -0.00144363 -0.578161, -0.453431 -0.00233215 -0.891288, + -0.6604 0.00165715 -0.750912, -0.454948 0.000124323 -0.890518, -0.716643 0.00434282 -0.697427, + -0.68168 7.80913e-005 -0.731651, -0.546033 0.00292142 -0.837759, -0.246441 -0.00197933 -0.969156, + -0.288618 5.71218e-005 -0.957444, -0.117806 0.000250776 -0.993037, -0.184959 -0.00495759 -0.982734, + 0.000114628 -0.999872 -0.0160187, 0.000212251 -0.999853 -0.0171221, 5.45304e-005 -0.999862 -0.0165813, + 0.000110156 -0.999834 -0.018246, 0.000212109 -0.999807 -0.0196241, -0.000177939 -0.999833 -0.0182854, + -9.06637e-005 -0.999842 -0.0177809, -0.000673124 -0.999855 -0.0170451, 0.000175965 -0.999852 -0.0172066, + 0.00597686 -0.999888 -0.0137448, 0.00262849 -0.999872 -0.015781, 0.00172482 -0.99988 -0.0153654, + 0.00371676 -0.999901 -0.0135883, 0.000106767 -0.999873 -0.0159212, -0.000945875 -0.999879 -0.0155402, + 3.86514e-005 -0.999848 -0.0174143, 0.000173321 -0.999838 -0.0179967, -6.81002e-005 -0.999824 -0.0187436, + -0.000257211 -0.999839 -0.0179616, 4.66964e-005 -0.999857 -0.0169064, 0.000786462 -0.99986 -0.0166903, + 0.00019045 -0.999831 -0.0184021, 0.000518038 -0.999797 -0.0201344, -0.000273985 -0.999819 -0.0190093, + 1.37982e-006 -0.999783 -0.0208174, -0.00120773 -0.999834 -0.0181621, -0.000989181 -0.999854 -0.0170381, 0 -0.999783 -0.020821, + -0.000507764 -0.999423 -0.0339569, -0.000159323 -0.999419 -0.0340744, -9.54115e-005 -0.999381 -0.0351915, + -8.77973e-006 -0.999336 -0.0364324, 0 -0.999333 -0.0365235, -0.000121029 -0.999247 -0.0387876, + -0.000598985 -0.999557 -0.0297732, -0.00059923 -0.999557 -0.0297662, -0.000560104 -0.999393 -0.0348336, + -0.000750167 -0.999303 -0.0373119, -0.0386642 -0.178152 -0.983243, 0.121925 -0.0812459 -0.989208, + 0.0825506 -0.307861 -0.947843, -0.128764 -0.36475 -0.922159, -0.174913 -0.200319 -0.963991, 0.143194 -0.0307641 -0.989216, + 0.142629 -0.0518149 -0.988419, 0.13894 -0.137914 -0.98065, 0.133933 -0.267927 -0.954084, -0.0261277 -0.396153 -0.917813, + 0.0518943 -0.659184 -0.750189, 0.113147 -0.513874 -0.850371, 0.0676521 -0.798048 -0.598785, -0.0305222 -0.687685 -0.725367, + -0.404002 -0.189372 -0.894942, -0.292494 -0.181604 -0.938865, -0.344654 -0.372483 -0.861667, -0.508291 -0.198268 -0.838051, + -0.447244 -0.367768 -0.815303, -0.643227 -0.148432 -0.75115, -0.606927 -0.185136 -0.772894, -0.623567 -0.26776 -0.734486, + -0.544931 -0.383947 -0.74541, -0.238204 -0.371352 -0.897417, -0.117125 -0.710287 -0.6941, -0.21301 -0.665557 -0.715305, + -0.519622 -0.580763 -0.626664, -0.405522 -0.722541 -0.559898, -0.354514 -0.694549 -0.626036, -0.278633 -0.692149 -0.665803, + 0.143092 -0.0381674 -0.988973, 0.031128 -0.945404 -0.324411, 0.0228079 -0.912813 -0.407741, -0.0195072 -0.914519 -0.404073, + 0.00541948 -0.982427 -0.186568, -0.0524062 -0.934028 -0.353334, -0.0149951 -0.980532 -0.195784, -0.111887 -0.902001 -0.416985, + 0.0114386 -0.983846 -0.178651, 0.00657071 -0.994038 -0.108834, -0.0352264 -0.978577 -0.202846, -0.153122 -0.912425 -0.379519, + -0.179213 -0.926462 -0.330984, -0.210144 -0.927657 -0.308694, -0.321727 -0.855538 -0.405643, -0.0606949 -0.973415 -0.220859, + -0.0852969 -0.972043 -0.218763, -0.0937764 -0.976329 -0.194904, -0.0995923 -0.97922 -0.17666, -0.127099 -0.974907 -0.182764, + 0.143422 0 -0.989662, -0.499935 0.865328 -0.0356736, -0.500074 0.865233 -0.0360233, -0.499931 0.865217 -0.0383219, + -0.499719 0.865338 -0.0383487, -0.499663 0.865499 -0.0353227, -0.500008 0.865405 -0.0326486, -0.500208 0.865262 -0.0333761, + -0.499334 0.86555 -0.0385881, -0.498666 0.865797 -0.0415677, -0.49914 0.865627 -0.0393547, -0.499564 0.865454 -0.0377477, + -0.500545 0.865032 -0.0342746, -0.499572 0.865463 -0.0374333, -0.49961 0.86543 -0.0376842, -0.499619 0.865426 -0.0376563, + -0.499589 0.865446 -0.0376104, -0.60122 -0.798669 -0.02575, -0.662138 -0.748546 -0.0353831, -0.594455 -0.803361 -0.0351209, + -0.729006 -0.683945 -0.0277447, -0.881585 -0.471042 -0.0304563, -0.830656 -0.555644 -0.0356344, + -0.974913 -0.220121 -0.0330497, -0.948468 -0.31487 -0.0355818, -0.999372 0 -0.0354214, -0.600873 -0.798106 -0.0444804, + -0.728822 -0.683336 -0.0432496, -0.881337 -0.470722 -0.0408131, -0.974727 -0.220188 -0.0377534, -0.999472 0 -0.0324811, + -0.974913 0.220121 -0.0330497, -0.881585 0.471042 -0.0304563, -0.948468 0.31487 -0.0355818, -0.974727 0.220188 -0.0377534, + -0.830656 0.555644 -0.0356344, -0.729006 0.683945 -0.0277447, -0.662138 0.748546 -0.0353831, -0.60122 0.798669 -0.02575, + -0.881337 0.470722 -0.0408131, -0.99927 0 -0.0381995, -0.728822 0.683336 -0.0432496, -0.594455 0.803361 -0.0351209, + -0.600873 0.798106 -0.0444804, 0.409722 -0.912166 0.00904568, 0.419395 -0.90774 0.0107452, 0.380075 -0.924952 -0.00255777, + 0.439194 -0.898356 0.00809152, 0.419962 -0.90754 -0.00165742, 0.441487 -0.897254 -0.00496972, 0.437362 -0.899277 -0.00394325, + 0.712412 0.701739 -0.00565181, 0.682808 0.730422 -0.0160114, 0.684974 0.728501 -0.00988759, 0.876498 0.481167 -0.0151425, + 0.786416 0.617457 -0.0171988, 0.848112 0.529785 -0.00590882, 0.719753 0.694129 -0.0118942, 0.614377 0.788656 -0.0237128, + 0.911767 0.410675 -0.00521597, 0.851837 0.523802 -0.00220258, 0.996765 -0.0769741 0.02314, 0.998034 -0.0506654 0.0368867, + 0.98702 -0.156379 0.0365686, 0.975727 -0.217658 0.0241402, 0.980981 -0.194092 0.00223812, 0.939742 -0.339897 0.0368098, + 0.937159 -0.348228 0.0216904, 0.942234 -0.334948 0.00223696, 0.999494 -0.0189244 0.0255625, 0.885872 -0.463306 0.0240531, + 0.860509 -0.508054 0.0374988, 0.815496 -0.578262 0.0240688, 0.769297 -0.637813 0.0371097, 0.823017 -0.568011 0.00234635, + 0.729653 -0.683383 0.0243969, 0.646576 -0.762479 0.0237998, 0.654283 -0.75624 0.0039106, 0.640846 -0.766792 0.0366915, + 0.752555 -0.658513 0.00460215, 0.888463 -0.458943 0.00226424, 0.99943 -0.0315984 0.011885, 0.992882 0.118345 -0.0133754, + 0.976306 0.216352 -0.00432186, 0.99397 0.109623 0.00258192, 0.952123 0.305343 -0.0151181, 0.945986 0.324202 0.00202728, + 0.945794 0.32476 0.00199153, 0.997045 -0.0768104 0.00102932, 0.999651 0.0261353 -0.0037852, 0.999229 -0.0342264 -0.0192207, + 0.982237 -0.186563 -0.0201231, 0.889933 -0.455697 -0.0189705, 0.740108 -0.672261 -0.0175049, 0.824653 -0.565315 -0.0191179, + 0.943007 -0.332232 -0.0189586, 0.993976 0.109567 0.00262395, 0.534187 -0.845078 0.0220943, -0.0176216 0.999187 -0.0362567, + 0.104374 0.993906 -0.0354586, 0.0294284 0.998793 -0.0393368, 0.488331 0.871952 -0.0351013, 0.552922 0.832636 -0.0315488, + 0.481988 0.875319 -0.0387758, 0.433104 0.900361 -0.0420708, 0.450689 0.891711 -0.041612, 0.392831 0.918834 -0.0377975, + 0.388421 0.92057 -0.0409916, -0.220861 0.974426 -0.041407, -0.13825 0.98966 -0.0382048, -0.227218 0.972364 -0.0536597, + -0.278491 0.95812 -0.0666925, -0.292888 0.951911 -0.089899, -0.0945373 0.994746 -0.0392807, 0.27321 0.961176 -0.0386827, + 0.152402 0.987563 -0.0386478, 0.224282 0.973927 -0.0341088, 0.328915 0.943636 -0.036958, -0.755859 -0.653548 0.0394111, + -0.800674 -0.597882 0.0381796, -0.75128 -0.659186 0.0324438, 0.602951 0.797166 -0.0312273, 0.706653 0.706968 -0.0289341, + 0.720653 0.693272 -0.00574609, 0.790195 0.612781 -0.00957713, 0.848936 0.527676 -0.0294235, 0.982517 0.183836 -0.029387, + 0.998565 0.0441546 -0.0303081, 0.915953 0.400203 -0.0294546, 0.995165 -0.0934585 -0.0302181, 0.978276 -0.205102 -0.0301662, + 0.90328 -0.427972 -0.0304284, 0.951339 -0.306705 -0.0297536, 0.841265 -0.539749 -0.0307277, 0.767481 -0.640319 -0.0310387, + 0.780827 0.624024 -0.0300502, 0.231626 -0.972795 0.00449993, 0.178649 -0.983701 0.0203959, 0.12411 -0.991882 0.0276769, + 0.955787 0.292506 -0.0301773, 0.249569 -0.966679 0.056987, 0.301243 -0.952491 0.0448676, 0.246148 -0.96723 0.0622623, + 0.679993 -0.732569 -0.0308451, 0.633514 -0.77351 -0.0185335, -0.0123188 -0.99948 0.0298159, 0.0620109 -0.997096 0.0442092, + 0.0620008 -0.995261 0.0749139, 0.395992 -0.917899 0.0255374, 0.481155 -0.875846 0.0371911, 0.263301 -0.963663 0.0450046, + 0.278047 -0.960282 0.0234183, -0.246239 -0.967585 0.0560849, -0.327298 -0.943996 0.0418067, -0.256263 -0.965333 0.049612, + -0.276241 -0.960337 0.0380085, -0.319323 -0.947321 0.0248211, 0.205364 -0.978479 0.0200966, 0.389864 -0.920855 0.00574591, + 0.0608926 -0.998144 0.00104089, -0.373151 -0.927292 0.0298149, -0.121573 -0.992327 0.0225239, -0.122917 -0.991893 0.0322445, + -0.223873 -0.974441 0.0185692, -0.132531 -0.991176 0.00225648, -0.306842 -0.951759 0.00148699, -0.365199 -0.930836 0.0131608, + -0.40708 -0.912435 0.0418068, -0.480985 -0.875777 0.0408419, 0.529136 -0.848536 -0.00118732, -0.513328 -0.85774 0.0278707, + -0.594761 -0.802948 0.0391669, -0.704055 -0.70914 0.0377718, -0.643355 -0.764434 0.0416399, -0.863894 -0.501971 0.0413828, + -0.916936 -0.397145 0.0387838, -0.865226 -0.499969 0.0376197, -0.940611 -0.336899 0.0418274, -0.482191 -0.87543 0.0333702, + -0.98244 -0.181806 0.0419261, -0.995647 -0.0824655 0.0434429, -0.993564 -0.106551 0.0384409, -0.965034 -0.259379 0.0378451, + -0.996737 -0.0713413 0.0377711, -0.997281 -0.0654573 0.0338391, -0.503812 -0.863434 0.0255978, -0.488769 -0.871379 0.0424525, + -0.51114 -0.859116 0.0256011, -0.466044 -0.883923 0.0385119, -0.434895 -0.899533 0.0413065, 0.392551 -0.919577 -0.0167626, + 0.526705 -0.849805 -0.020317, 0.577728 -0.81565 -0.0307638, 0.464469 -0.88505 -0.0308953, 0.218695 -0.9756 -0.0193978, + 0.0566317 -0.998197 -0.0198804, -0.295997 -0.955021 -0.0178942, -0.113837 -0.993314 -0.0192158, + -0.366078 -0.930579 -0.00326901, -0.370976 -0.928569 -0.0116801, 0.337799 -0.940744 -0.0298675, 0.228022 -0.973186 -0.0302605, + 0.119347 -0.99242 -0.0293067, -0.0226562 -0.999305 -0.0296045, -0.248481 -0.968217 -0.0284957, -0.382345 -0.923693 -0.0245746, + -0.394274 -0.918348 -0.034429, -0.14573 -0.988879 -0.0296686, -0.418825 -0.907363 -0.0357444, -0.445394 -0.894454 -0.0397072, + -0.465266 -0.884336 -0.0384307, -0.47455 -0.879501 -0.0357824, -0.453487 -0.89042 -0.0387505, -0.48895 -0.871698 -0.0327111, + -0.488949 -0.871699 -0.0327112, -0.486915 -0.872829 -0.0329089, 0.919792 0.000623229 -0.392405, + 0.946962 0.000559279 -0.321345, 0.936712 -0.000306946 -0.3501, 0.968961 0.00101955 -0.247212, 0.948277 -0.00354321 -0.317424, + 0.97764 0.000556895 -0.210286, 0.920365 -0.00472891 -0.391033, 0.999996 0.00217962 -0.001828, 0.991066 0.0011943 -0.13337, + 0.995373 8.43635e-005 -0.0960897, 1 0 -3.18425e-005, 0.978994 -0.00209823 -0.203879, 0.938479 0.00614846 0.345282, + 0.948764 -0.00770015 0.315891, 0.955882 0.00589601 0.293692, 0.99583 2.24569e-005 -0.0912249, 0.999974 0 -0.00721158, + 0.997891 0.00461009 0.0647562, 0.939399 -0.00139389 0.342821, 0.995375 8.43652e-005 0.0960686, 0.991353 0.0050455 0.131125, + 0.973344 0.000510947 0.229351, 0.924425 0.0146912 0.381081, 0.911902 0.0112869 0.410253, 0.903604 0 0.428368, + 0.914361 0.0156708 0.404597, 0.987625 0.00773368 0.156646, 0.993184 -0.000216827 0.116559, 0.980291 0.0074656 0.197416, + 0.972385 0.00724768 0.233271, 0.964142 0.0117403 0.265127, 0.920416 0.390942 -5.16727e-006, 0.920677 0.390325 6.13977e-005, + 0.920459 0.390839 0.000162365, 0.920559 0.390604 0.00059995, 0.92041 0.390954 0.000134318, 0.920452 0.390856 6.25541e-005, + 0.920409 0.390956 8.1637e-005, 0.920505 0.390732 -4.33593e-006, 0.165387 0.985642 0.0340112, 0.247371 0.968493 0.0287965, + 0.495845 0.868099 0.0232751, 0.00889568 0.999343 0.0351219, 0.00836807 0.999254 0.0377134, 0.0959454 0.994773 0.0349374, + -0.080427 0.996181 0.0339718, 0.293603 0.955472 0.0295014, 0.489153 0.871931 0.02158, 0.704838 0.709245 0.013231, + 0.764432 0.64462 0.0103948, 0.844526 0.535474 0.00652912, 0.509093 0.860419 0.0224314, 0.700978 0.713034 0.0145864, + 0.838279 0.545226 0.00420113, 0.000258618 -0.000466711 1, 0.000130462 -0.00106146 0.999999, 0.000115891 -0.000874305 1, + 0.000354395 0.000506734 1, 9.56302e-005 0.000622415 1, 8.42138e-006 -0.00031807 1, 0.000117657 -0.000525473 1, + -0.156276 0.987102 0.034744, -0.145008 0.988846 0.034012, -0.141906 0.989289 0.0341977, -0.136959 0.990004 0.033686, + -0.139377 0.989634 0.0346123, -0.139005 0.989684 0.0347001, -0.138875 0.989684 0.0352113, -0.139752 0.98957 0.0349374, + -0.139353 0.989629 0.0348634, 0.146259 -0.00913563 0.989204, 0.276976 0.00434393 0.960867, 0.137753 0.00365604 0.99046, + 0.275241 -0.00483723 0.961363, 0.440194 0.00962926 0.897851, 0.541415 0.00954118 0.840701, 0.580193 0.0119896 0.814391, + 0.323689 0.00369952 0.946156, 0.524595 0 0.851352, 0.705424 -0.0016654 0.708784, 0.662883 0.0183333 0.748499, + 0.751584 0.00519823 0.659617, 0.826161 -0.000207687 0.563433, 0.775055 0.00383563 0.631883, 0.829172 0.00455832 0.558975, + 0.00801557 0.999941 0.00729965, -0.00260264 0.999993 -0.00266567, -0.00663489 0.999946 -0.00800354, 0.000794765 1 0.000579381, + 0.000836161 1 0.00050223, -0.0002832 1 0.000334776, 0.000978222 0.999999 0.000361878, 0.0558194 0.997132 0.0511088, + 0.0279297 0.999283 0.0255728, -0.00260264 0.999993 0.00266567, 0.000978222 0.999999 -0.000361878, -0.0002832 1 -0.000334776, + 0.000794765 1 -0.000579381, 0.000836161 1 -0.00050223, 0.00801557 0.999941 -0.00729965, 0.0279297 0.999283 -0.0255728, + -0.00663489 0.999946 0.00800354, 0.0558194 0.997132 -0.0511088, 0.744317 0.000861776 -0.667826, + 0.741356 0.000194434 -0.671111, 0.82691 0.000819756 -0.562334, 0.572216 0.000411578 -0.820103, + 0.825691 -0.000285479 -0.564123, 0.705944 -0.00096313 -0.708267, 0.512606 0.000167002 -0.858624, + 0.250388 0.000363437 -0.968145, 0.325906 -0.00075028 -0.945402, 0.138395 -0.0012981 -0.990376, 0.322891 0.000966804 -0.946436, + 0.524595 0 -0.851352, 0.139227 0.00105083 -0.99026, 0.376317 -0.218662 0.900318, 0.225646 -0.134452 0.964887, + 0.153976 -0.179298 0.971671, 0.0456392 -0.244585 0.968553, 0.093694 -0.056651 0.993988, 0.255301 -0.292255 0.921634, + 0.49495 -0.124374 0.859974, 0.509011 -0.302973 0.805677, 0.575906 -0.24252 0.780715, 0.713061 -0.266462 0.648493, + 0.6118 -0.359202 0.704752, 0.747899 -0.434858 -0.501543, 0.75972 -0.459473 -0.460119, 0.709305 -0.433588 -0.555777, + 0.803675 -0.473273 -0.360721, 0.741513 -0.375186 -0.556233, 0.815776 -0.491607 -0.304685, 0.84744 -0.49252 -0.198166, + 0.856308 -0.497061 -0.140237, 0.777894 -0.426782 -0.461235, 0.835246 -0.457347 -0.305284, 0.863032 -0.50515 -5.82803e-005, + 0.863662 -0.504071 -1.54159e-005, 0.855678 -0.498004 -0.140739, 0.856308 -0.497061 0.140237, 0.863038 -0.50514 0, + 0.846987 -0.4933 0.198163, 0.75972 -0.459473 0.460119, 0.815776 -0.491607 0.304685, 0.803346 -0.473819 0.360735, + 0.709305 -0.433588 0.555777, 0.747899 -0.434858 0.501543, 0.834336 -0.458978 0.305322, 0.855095 -0.499015 0.140699, + 0.777575 -0.427335 0.461261, 0.501039 -0.346254 -0.793138, 0.480524 -0.486057 -0.729962, 0.367646 -0.352468 -0.860583, + 0.622384 -0.339225 -0.705383, 0.362381 -0.202583 -0.909747, 0.411824 -0.105985 -0.905079, 0.552438 -0.287789 -0.782298, + 0.230216 -0.125645 -0.964994, 0.236606 -0.0350571 -0.970973, 0.162194 0.0676214 -0.984439, 0.0954598 -0.0529924 -0.994022, + -0.298823 0.168863 -0.93925, -0.38316 0.214282 -0.898483, -0.166263 0.10942 -0.979992, -0.612313 0.349773 -0.709035, + -0.178959 0.0890276 -0.97982, -0.38012 0.218737 -0.8987, -0.60768 0.353604 -0.711119, -0.613535 0.346961 -0.709361, + -0.8144 0.470624 -0.339508, -0.847014 0.495356 -0.192847, -0.787751 0.43219 -0.438931, -0.76871 0.464908 -0.439256, + -0.850675 0.489174 -0.192511, -0.860872 0.508822 1.82379e-005, -0.861572 0.507635 9.11896e-006, + -0.862869 0.505427 6.07935e-006, -0.865447 0.501 0, -0.864392 0.502818 0, -0.612313 0.349773 0.709035, + -0.787751 0.43219 0.438931, -0.8144 0.470624 0.339508, -0.847014 0.495356 0.192847, -0.76871 0.464908 0.439256, + -0.850675 0.489174 0.192511, -0.613535 0.346961 0.709361, -0.38316 0.214282 0.898483, -0.298823 0.168863 0.93925, + -0.166263 0.10942 0.979992, -0.38012 0.218737 0.8987, -0.60768 0.353604 0.711119, -0.178959 0.0890276 0.97982, + -0.502893 -0.864341 0.00349294, -0.505377 -0.86287 0.00697059, -0.505641 -0.862704 0.00832288, -0.504202 -0.863568 0.00554941, + -0.503048 -0.864256 0.00206875, -0.501224 -0.865317 0.000846254, -0.500821 -0.865551 -0.000688207, + -0.500094 -0.865971 0.000348301, -0.498688 -0.866755 0.00680769, -0.494951 -0.868777 0.0158269, -0.491124 -0.870697 0.026141, + -0.501758 -0.865008 0.000255379, -0.500076 -0.865982 0, -0.500094 -0.865971 -0.000348301, -0.500821 -0.865551 0.000688207, + -0.501224 -0.865317 -0.000846254, -0.502791 -0.864399 -0.00403347, -0.503048 -0.864256 -0.00206875, + -0.503006 -0.864279 -0.00266554, -0.505331 -0.862868 -0.00994453, -0.501758 -0.865008 -0.000255379, + -0.498688 -0.866755 -0.00680769, -0.494951 -0.868777 -0.0158269, -0.491124 -0.870697 -0.026141, -0.50712 -0.861727 -0.0159811, + 0.000457196 0.00214557 0.999998, 0.000262787 0.00133194 0.999999, 0.000162168 0.00213455 0.999998, 0.000164153 0.000497865 1, + 0.000565812 0.00137506 0.999999, 0.000152532 -0.000102389 1, 0.000513055 0.000572454 1, 0.000286071 -0.000148079 1, + 0.000624863 -0.000899062 0.999999, 0.000598388 -0.00144061 0.999999, 0.000312317 -0.00129253 0.999999, + -2.6475e-005 -0.000541552 1, 0.000230062 0 1, 0.991147 0.0816014 -0.104733, 0.974176 0.197223 -0.109926, + 0.994238 0.107198 3.39073e-005, 0.920814 0.374265 -0.109671, 0.957814 0.287389 3.67966e-005, 0.974168 0.197221 0.109998, + 0.920807 0.374262 0.109742, 0.886294 0.463124 3.37459e-005, 0.832948 0.543949 -0.101571, 0.99114 0.0816006 0.104802, + 0.709963 0.696792 -0.102146, 0.780333 0.625364 3.20013e-005, 0.709958 0.696787 0.102212, 0.369228 0.922413 -0.113249, + 0.45757 0.889174 0.000293883, 0.555193 0.824172 -0.111806, 0.640674 0.767813 3.40756e-005, 0.260741 0.965409 -2.22451e-005, + 0.190977 0.975698 -0.107433, 0.115457 0.993312 -6.69199e-005, 1.88024e-009 0.99391 -0.110195, 0.832942 0.543946 0.101638, + 0.555233 0.824105 0.112102, 0.361679 0.932303 -0.000120028, 0.369264 0.92234 0.113724, 0 0.993902 0.110266, + 0.19094 0.97567 0.107749, -0.115457 0.993313 1.35464e-005, -0.190959 0.975688 -0.107556, -0.260831 0.965385 1.92028e-005, + -0.369259 0.92249 -0.112519, -0.190958 0.97568 0.107626, -0.361623 0.932324 3.7492e-006, -0.369255 0.922482 0.112592, + -0.457436 0.889242 2.28804e-005, -0.555215 0.824142 -0.111918, -0.555211 0.824135 0.11199, -0.640674 0.767813 3.40756e-005, + -0.709963 0.696792 -0.102146, -0.920436 0.374784 -0.11106, -0.886447 0.46283 3.34829e-005, -0.833142 0.543735 -0.101128, + -0.780333 0.625364 3.20013e-005, -0.957679 0.287839 1.70615e-005, -0.974244 0.196569 -0.110497, + -0.994262 0.106971 1.08151e-005, -0.991376 0.0820352 -0.102197, -0.709958 0.696787 0.102212, -0.833136 0.543731 0.101194, + -0.92043 0.374785 0.111111, -0.974241 0.196569 0.110525, -0.991374 0.082028 0.102219, 6.80004e-005 4.89742e-006 1, + -0.000230432 0 1, -0.000153594 -3.94293e-005 1, 2.55785e-007 -3.53459e-006 1, -0.000114584 -7.22454e-005 1, + -0.000309409 -0.000165335 1, -0.000696219 0 1, -0.000537552 -0.0012996 0.999999, -0.000716736 -0.0017328 0.999998, + -0.0021502 -0.00519838 0.999984, -0.000537552 0.0012996 0.999999, -0.0021502 0.00519838 0.999984, + -0.991376 -0.0820352 -0.102197, -0.974244 -0.196569 -0.110497, -0.994262 -0.106971 1.08151e-005, -0.920436 -0.374784 -0.11106, + -0.957679 -0.287839 1.70615e-005, -0.974241 -0.196569 0.110525, -0.92043 -0.374785 0.111111, -0.886447 -0.46283 3.34829e-005, + -0.833142 -0.543735 -0.101128, -0.991374 -0.082028 0.102219, -0.709963 -0.696792 -0.102146, -0.780333 -0.625364 3.20013e-005, + -0.709958 -0.696787 0.102212, -0.369259 -0.92249 -0.112519, -0.457436 -0.889242 2.28864e-005, -0.555215 -0.824142 -0.111918, + -0.640674 -0.767813 3.40756e-005, -0.260831 -0.965385 1.92041e-005, -0.190959 -0.975688 -0.107556, + -0.115457 -0.993312 1.35452e-005, -1.88024e-009 -0.99391 -0.110195, -0.833136 -0.543731 0.101194, -0.555211 -0.824135 0.11199, + -0.361623 -0.932324 3.7492e-006, -0.369255 -0.922482 0.112592, 0 -0.993902 0.110266, -0.190958 -0.97568 0.107626, + 0.115457 -0.993312 -6.69186e-005, 0.190977 -0.975698 -0.107433, 0.260741 -0.965409 -2.22413e-005, + 0.369228 -0.922413 -0.113249, 0.19094 -0.97567 0.107749, 0.361679 -0.932303 -0.000120028, 0.369264 -0.92234 0.113724, + 0.45757 -0.889174 0.000293883, 0.555193 -0.824172 -0.111806, 0.555233 -0.824105 0.112102, 0.640674 -0.767813 3.40756e-005, + 0.709963 -0.696792 -0.102146, 0.920546 -0.374521 -0.111039, 0.886294 -0.463124 3.37459e-005, 0.832948 -0.543949 -0.101571, + 0.780333 -0.625364 3.20013e-005, 0.957805 -0.28742 3.75924e-005, 0.974087 -0.196893 -0.111295, + 0.994238 -0.107198 3.39073e-005, 0.991147 -0.0816014 -0.104733, 0.709958 -0.696787 0.102212, 0.832942 -0.543946 0.101638, + 0.920538 -0.374518 0.111111, 0.97408 -0.196892 0.111367, 0.99114 -0.0816006 0.104802, 6.84974e-005 0.00111373 0.999999, + 0.000205492 0.00334118 0.999994, 0.000102746 0.00167059 0.999999, -0.939695 -0.342013 -0.000329725, + -0.939719 -0.341947 0.000181163, -0.939728 -0.341922 -5.76308e-005, -0.939747 -0.341871 -0.000535219, + -0.939795 -0.341739 0.000486556, -0.447445 0.89418 -0.0153207, -0.371026 0.9285 -0.0150612, -0.406278 0.913584 -0.0173737, + -0.248728 0.968451 -0.0153795, -0.299354 0.953984 -0.0173681, -0.121076 0.992516 -0.0159218, 0.00967741 0.999819 -0.0164033, + -0.0465977 0.998762 -0.0173869, 0.142352 0.989675 -0.0167151, 0.0872506 0.996034 -0.0174358, -0.175011 0.984413 -0.0173995, + -0.370916 0.928458 -0.0197034, -0.248692 0.968389 -0.0193351, 0.00972797 0.999784 -0.0183461, 0.220965 0.975125 -0.0174523, + 0.142398 0.989642 -0.0181882, -0.121111 0.992459 -0.0188843, 0.273322 0.961775 -0.0168583, -0.447068 0.894292 -0.0192616, + 0.400601 0.916092 -0.0171395, 0.354455 0.934909 -0.0175319, 0.499499 0.866133 -0.0177319, 0.499229 0.866288 -0.0177834, + 0.593412 0.804707 -0.0175599, 0.632598 0.774286 -0.0173543, 0.69614 0.71772 -0.01635, 0.860978 0.508389 -0.0160149, + 0.819293 0.573105 -0.0176237, 0.785873 0.618178 -0.0161201, 0.733547 0.679417 -0.0173581, 0.920472 0.390483 -0.0159575, + 0.888373 0.458781 -0.0176872, 0.940423 0.339552 -0.0175579, 0.963062 0.268831 -0.0155433, 0.975756 0.218165 -0.0174318, + 0.989496 0.143692 -0.0158419, 0.995157 0.0967264 -0.017531, 0.999869 -1.8661e-009 -0.0161963, 0.273342 0.961747 -0.0180545, + 0.592374 0.805471 -0.0176241, 0.401323 0.915755 -0.0182457, 0.498834 0.866509 -0.0180767, 0.696208 0.717609 -0.0182453, + 0.786319 0.617533 -0.0188432, 0.861037 0.508176 -0.0192768, 0.962883 0.269222 -0.0193832, 0.989494 0.143309 -0.0190948, + 0.920196 0.390979 -0.0193421, 0.999821 0 -0.0189158, 0.999845 0 -0.0176146, 0.995157 -0.0967264 -0.017531, + 0.989523 -0.143495 -0.0159015, 0.963024 -0.268953 -0.0157586, 0.975776 -0.218068 -0.0175202, 0.940367 -0.339705 -0.0176354, + 0.920344 -0.390782 -0.0159952, 0.888373 -0.458781 -0.0176872, 0.860978 -0.508389 -0.0160149, 0.819293 -0.573105 -0.0176237, + 0.785873 -0.618178 -0.0161201, 0.989494 -0.143309 -0.0190948, 0.962883 -0.269222 -0.0193832, 0.861037 -0.508176 -0.0192768, + 0.733547 -0.679417 -0.0173581, 0.786319 -0.617533 -0.0188432, 0.920196 -0.390979 -0.0193421, 0.69614 -0.71772 -0.01635, + 0.592134 -0.805648 -0.0175803, 0.632023 -0.774755 -0.0173545, 0.499022 -0.866413 -0.0174676, 0.499315 -0.866238 -0.0177496, + 0.401405 -0.915726 -0.0178761, 0.354824 -0.934765 -0.0177358, 0.274179 -0.961523 -0.0173086, 0.00967741 -0.999819 -0.0164033, + 0.0872506 -0.996034 -0.0174358, 0.142352 -0.989675 -0.0167151, 0.222307 -0.974814 -0.017796, -0.121076 -0.992516 -0.0159218, + -0.0465977 -0.998762 -0.0173869, -0.176003 -0.984236 -0.0174009, -0.249702 -0.96819 -0.0160346, -0.299337 -0.953989 -0.017366, + -0.370072 -0.928874 -0.0154915, -0.405156 -0.914082 -0.0173743, -0.447445 -0.89418 -0.0153207, 0.696208 -0.717609 -0.0182453, + 0.400448 -0.916158 -0.0171849, 0.591777 -0.805916 -0.0172675, 0.498843 -0.866524 -0.0170592, 0.274232 -0.961489 -0.0183243, + 0.14336 -0.989498 -0.0185017, 0.00972797 -0.999784 -0.0183461, -0.249673 -0.96815 -0.0186805, -0.369966 -0.928845 -0.019273, + -0.121111 -0.992459 -0.0188843, -0.447068 -0.894292 -0.0192616, -0.349672 0.674871 -0.64983, -0.283391 0.711078 -0.643474, + -0.300928 0.686686 -0.661744, -0.222498 0.719382 -0.658016, -0.203775 0.701969 -0.682434, -0.191395 0.740614 -0.644095, + -0.340089 0.65412 -0.675623, -0.136809 0.737606 -0.661227, -0.040128 0.749206 -0.66112, -0.092851 0.759902 -0.643372, + 0.00724067 0.764915 -0.644091, 0.0699233 0.745321 -0.663029, 0.108981 0.756951 -0.64432, 0.179973 0.728391 -0.661103, + 0.209152 0.734763 -0.645275, -0.289263 0.665614 -0.687957, -0.211855 0.676482 -0.70533, -0.107103 0.721245 -0.68435, + -0.320538 0.634591 -0.703242, -0.0175484 0.731194 -0.681944, 0.0712199 0.722176 -0.688033, 0.171216 0.708924 -0.684187, + -0.0264086 0.709228 -0.704484, -0.12079 0.692306 -0.711423, 0.280892 0.696117 -0.660698, 0.476459 0.57966 -0.661045, + 0.451818 0.614047 -0.647153, 0.531441 0.547863 -0.646078, 0.306585 0.699341 -0.6457, 0.380669 0.661251 -0.646404, + 0.38265 0.647796 -0.65874, 0.55277 0.50684 -0.661482, 0.600996 0.471686 -0.645225, 0.668748 0.340158 -0.661112, + 0.658457 0.388722 -0.64446, 0.704003 0.299066 -0.644157, 0.736745 0.206027 -0.644019, 0.707252 0.251114 -0.66086, + 0.617116 0.426351 -0.661357, 0.733463 0.160873 -0.660418, 0.756976 0.10979 -0.644154, 0.270704 0.677277 -0.684116, + 0.437603 0.583799 -0.683873, 0.52206 0.507169 -0.685735, 0.356362 0.63869 -0.681968, 0.644916 0.341376 -0.683773, + 0.709777 0.167789 -0.684152, 0.7481 0.0717396 -0.659697, 0.764907 0 -0.644141, 0.751427 9.32305e-010 -0.659817, + 0.72465 0.0827032 -0.684136, 0.68383 0.254568 -0.683793, 0.593074 0.425092 -0.683784, 0.732887 -6.21462e-010 -0.680351, + -0.276871 0.641382 -0.715522, -0.285609 0.621492 -0.729504, -0.186279 0.656323 -0.731123, 0.0728106 0.696151 -0.714193, + 0.254986 0.656098 -0.710294, 0.156303 0.69134 -0.705421, 0.35544 0.615479 -0.703454, -0.0127443 0.681121 -0.73206, + 0.168008 0.660789 -0.731527, 0.341206 0.590728 -0.731177, 0.441415 0.548158 -0.710405, 0.564564 0.41961 -0.710771, + 0.511477 0.487458 -0.707655, 0.621493 0.339913 -0.705837, 0.68769 0.170932 -0.705595, 0.696361 0.08816 -0.712256, + 0.654524 0.255748 -0.711471, 0.71043 6.27795e-005 -0.703767, 0.488513 0.476593 -0.730899, 0.596173 0.329504 -0.732124, + 0.661048 0.166182 -0.73171, 0.681636 5.31738e-005 -0.731692, 0.722539 -0.0883129 -0.685666, 0.7481 -0.0717396 -0.659697, + 0.756975 -0.10979 -0.644154, 0.736745 -0.206027 -0.644019, 0.733463 -0.160873 -0.660418, 0.704003 -0.299066 -0.644157, + 0.658457 -0.388722 -0.64446, 0.663379 -0.347439 -0.662733, 0.540938 -0.519527 -0.661421, 0.600996 -0.471686 -0.645225, + 0.531441 -0.547863 -0.646078, 0.607323 -0.440053 -0.661447, 0.707459 -0.251049 -0.660664, 0.462407 -0.590972 -0.661008, + 0.451818 -0.614047 -0.647153, 0.706572 -0.181814 -0.683886, 0.691551 -0.153895 -0.705743, 0.682516 -0.26412 -0.681479, + 0.641769 -0.339862 -0.687478, 0.528713 -0.50202 -0.684426, 0.592989 -0.424988 -0.683922, 0.451439 -0.572896 -0.6841, + 0.659417 -0.248957 -0.709358, 0.369504 -0.655217 -0.658906, 0.693723 -0.0814954 -0.715616, 0.163116 -0.732745 -0.660665, + 0.209427 -0.735681 -0.644138, 0.109794 -0.757208 -0.64388, -0.0409389 -0.749198 -0.661079, 0.00724067 -0.764915 -0.644091, + -0.0935303 -0.758972 -0.644371, 0.0612839 -0.747552 -0.661371, -0.226928 -0.715667 -0.660548, -0.190461 -0.740221 -0.644824, + -0.283391 -0.711078 -0.643474, -0.349672 -0.674871 -0.64983, -0.310313 -0.684766 -0.659395, -0.136798 -0.737648 -0.661182, + -0.340089 -0.65412 -0.675623, 0.380669 -0.661251 -0.646404, 0.305937 -0.699665 -0.645655, 0.374777 -0.62833 -0.681721, + 0.264226 -0.702968 -0.660318, 0.287303 -0.670514 -0.684009, 0.0720798 -0.725648 -0.684281, -0.122146 -0.719396 -0.683776, + -0.209333 -0.698855 -0.683945, -0.0273949 -0.728786 -0.684193, 0.178147 -0.705841 -0.685604, -0.289958 -0.668915 -0.684453, + 0.660985 -0.166304 -0.731739, 0.623519 -0.330139 -0.708683, 0.57404 -0.406442 -0.710833, 0.441386 -0.5478 -0.710699, + 0.35544 -0.615479 -0.703454, 0.520166 -0.481501 -0.705397, 0.595975 -0.329656 -0.732217, 0.488031 -0.476007 -0.731603, + 0.340974 -0.590402 -0.731548, 0.254646 -0.655846 -0.710649, 0.165635 -0.685705 -0.708783, -0.0164101 -0.70773 -0.706293, + 0.0805881 -0.698226 -0.711327, -0.195461 -0.681032 -0.705685, -0.320538 -0.634591 -0.703242, -0.271591 -0.647214 -0.712287, + -0.106101 -0.694224 -0.711896, 0.167784 -0.659806 -0.732464, -0.0127304 -0.6807 -0.732451, -0.186022 -0.655292 -0.732112, + -0.284847 -0.62152 -0.729777, -0.347009 0.601103 -0.719902, -0.355445 0.615512 -0.703423, -0.352002 0.609763 -0.710129, + -0.346893 0.601032 -0.720018, -0.355258 0.615518 -0.703512, -0.362996 0.628742 -0.687689, -0.369774 0.636663 -0.676704, + -0.374522 0.648472 -0.662735, -0.380464 0.653617 -0.654241, -0.367028 0.639079 -0.675921, -0.376536 0.657105 -0.653019, + -0.422818 -0.599474 -0.6796, -0.515336 -0.465681 -0.719423, -0.477581 -0.508951 -0.71616, -0.408541 -0.590356 -0.696113, + -0.37855 -0.647224 -0.661665, -0.372842 -0.654005 -0.65823, -0.555054 -0.336043 -0.760914, -0.481055 -0.459592 -0.746567, + -0.601045 -0.178728 -0.778975, -0.581481 -0.300985 -0.755836, -0.618477 -0.135655 -0.774005, -0.616238 -0.0112049 -0.78748, + -0.626551 0 -0.779381, -0.53231 -0.327446 -0.780657, -0.576818 -0.167522 -0.799511, -0.618477 0.135655 -0.774005, + -0.45546 -0.459394 -0.762571, -0.443134 -0.447241 -0.776922, -0.517218 -0.300097 -0.801516, -0.407645 -0.529733 -0.74378, + -0.403823 -0.521165 -0.751874, -0.552261 -0.136788 -0.822373, -0.588848 0.000482919 -0.808244, -0.513761 -0.269886 -0.814378, + -0.5409 -0.145536 -0.8284, -0.551266 -0.024123 -0.833981, -0.563291 0.0243902 -0.825898, -0.597695 0.173363 -0.782755, + -0.581481 0.300985 -0.755836, -0.551309 0.351673 -0.756561, -0.515336 0.465681 -0.719423, -0.576192 0.140328 -0.805178, + -0.547737 0.286786 -0.785963, -0.477581 0.508951 -0.71616, -0.408541 0.590356 -0.696113, -0.422818 0.599474 -0.6796, + -0.37855 0.647224 -0.661665, -0.372842 0.654005 -0.65823, -0.48487 0.447 -0.751726, -0.548566 0.173831 -0.817837, + -0.544204 0.121102 -0.830166, -0.513761 0.269886 -0.814378, -0.509276 0.325188 -0.7968, -0.445396 0.474574 -0.759211, + -0.443134 0.447241 -0.776922, -0.407645 0.529733 -0.74378, -0.403823 0.521165 -0.751874, -0.601736 -0.798561 -0.0146265, + -0.729836 -0.683449 -0.0153833, -0.676094 -0.736608 -0.0175039, -0.831173 -0.555746 -0.0172658, + -0.602515 -0.797858 -0.0199599, -0.882043 -0.470886 -0.0163487, -0.948948 -0.31496 -0.0172558, -0.975196 -0.220637 -0.0176823, + -0.999849 0 -0.0173828, -0.729641 -0.683554 -0.0194567, -0.88186 -0.471167 -0.0180312, -0.975386 -0.219845 -0.0170179, + -0.999845 0 -0.0176146, -0.975196 0.220637 -0.0176823, -0.948948 0.31496 -0.0172558, -0.882043 0.470886 -0.0163487, + -0.975386 0.219845 -0.0170179, -0.831173 0.555746 -0.0172658, -0.729836 0.683449 -0.0153833, -0.676094 0.736608 -0.0175039, + -0.601736 0.798561 -0.0146265, -0.999851 0 -0.0172546, -0.88186 0.471167 -0.0180312, -0.729641 0.683554 -0.0194567, + -0.570771 0.820888 -0.0190886, -0.501436 0.865023 -0.0172318, -0.502251 0.86455 -0.0172187, -0.499827 0.865954 -0.0172187, + -0.499803 0.865967 -0.017258, -0.499827 -0.865954 -0.0172187, -0.501436 -0.865023 -0.0172318, -0.499803 -0.865967 -0.017258, + -0.502251 -0.86455 -0.0172187, -0.504648 -0.863152 -0.0172579, -0.346893 -0.601032 -0.720018, -0.355258 -0.615518 -0.703512, + -0.352002 -0.609763 -0.710129, -0.347009 -0.601103 -0.719902, -0.355445 -0.615512 -0.703423, -0.362996 -0.628742 -0.687689, + -0.367028 -0.639079 -0.675921, -0.374522 -0.648472 -0.662735, -0.376536 -0.657105 -0.653019, -0.369774 -0.636663 -0.676704, + -0.380464 -0.653617 -0.654241, 0.000232268 0.000694053 -1, 0.00100273 0.00128319 -0.999999, 0.000464301 0.000203894 -1, + -0.000377862 -0.000421503 -1, -0.00191142 -0.0017267 -0.999997, -0.000735846 -7.18423e-005 -1, -0.069256 -0.0404127 -0.99678, + -0.0730725 -0.0342208 -0.996739, -0.0621995 -0.0315452 -0.997565, -0.0560558 -0.0412668 -0.997574, + -0.060066 -0.055117 -0.996672, -0.0352686 -0.0357025 -0.99874, -0.0475526 -0.0516097 -0.997535, + -0.0365497 -0.0594178 -0.997564, -0.0493739 -0.06448 -0.996697, -0.0347815 -0.0730578 -0.996721, + -0.0273864 -0.0391912 -0.998856, -0.0231323 -0.0657828 -0.997566, -0.0195322 -0.0781591 -0.99675, + 0.00655105 -0.0712709 -0.997435, 0.014133 -0.0790934 -0.996767, -0.00291769 -0.0804133 -0.996757, + -0.00847988 -0.0690471 -0.997577, -0.00704339 -0.0474912 -0.998847, 0.0274548 -0.0755886 -0.996761, + 0.0232612 -0.0671607 -0.997471, 0.00529286 -0.0515999 -0.998654, -0.0171554 -0.0429558 -0.99893, + -0.039676 -0.0265997 -0.998859, -0.0406913 -0.00439486 -0.999162, -0.0191179 -0.0199498 -0.999618, + -0.0260232 -0.00396422 -0.999653, 0.000102621 -0.000291735 -1, -0.0134906 -0.0221501 -0.999664, + -0.00441013 -0.0255803 -0.999663, 0.0168941 -0.0448783 -0.99885, 0.00287541 -0.0275039 -0.999618, + -0.00832728 -0.0218089 -0.999727, 0.0400498 -0.0697002 -0.996764, 0.0387341 -0.0560994 -0.997674, + 0.0541117 -0.0598013 -0.996743, 0.0611751 -0.0333175 -0.997571, 0.073571 -0.0332024 -0.996737, 0.0652028 -0.0474378 -0.996744, + 0.0525024 -0.0457415 -0.997573, 0.0246592 -0.0364981 -0.999029, 0.0353253 -0.0324654 -0.998848, 0.043308 -0.025671 -0.998732, + 0.066848 -0.0201365 -0.99756, 0.0695234 -0.00718264 -0.997554, 0.0808196 -0.00286612 -0.996725, + 0.0787607 -0.0181989 -0.996727, 0.0682571 0.0152174 -0.997552, 0.0782603 0.0200333 -0.996732, 0.0789577 0.0135363 -0.996786, + 0.0714235 0.00608709 -0.997428, 0.0476283 -0.0056057 -0.998849, 0.0516576 0.00489598 -0.998653, 0.043972 -0.0144811 -0.998928, + 0.00974699 -0.0240577 -0.999663, 0.0130307 -0.0193664 -0.999728, 0.0186477 -0.0180328 -0.999664, + 0.0241704 -0.0134399 -0.999617, 0.02229 -0.00683813 -0.999728, 0.0256825 -0.00350305 -0.999664, 0.0252666 0.0107912 -0.999623, + 0.0340353 0.0227141 -0.999162, 0.0691767 0.0404219 -0.996785, 0.0728132 0.0349286 -0.996734, 0.0620914 0.0321845 -0.997551, + 0.0563361 0.0410235 -0.997569, 0.0600986 0.05422 -0.996719, 0.0355527 0.0355991 -0.998734, 0.0474109 0.0514062 -0.997552, + 0.0365523 0.0594885 -0.99756, 0.0486968 0.0644562 -0.996732, 0.0349378 0.0726963 -0.996742, 0.027402 0.0393895 -0.998848, + 0.02341 0.0656304 -0.997569, 0.019532 0.0781591 -0.99675, -0.00655175 0.0712707 -0.997435, -0.0141335 0.0790927 -0.996767, + 0.00291725 0.0804131 -0.996757, 0.0084789 0.069047 -0.997577, 0.00697616 0.0474843 -0.998848, -0.0238181 0.0654141 -0.997574, + -0.00529053 0.0515682 -0.998655, 0.0173213 0.0429822 -0.998926, 0.0397325 0.0269327 -0.998847, 0.0407148 0.00439962 -0.999161, + 0.0191327 0.0199618 -0.999618, 0.0260364 0.00392243 -0.999653, -0.000101335 0.000265808 -1, 0.0134868 0.0221492 -0.999664, + 0.00832637 0.0218067 -0.999728, 0.00430738 0.0255942 -0.999663, -0.00288116 0.027513 -0.999617, + -0.00789506 0.0219596 -0.999728, -0.0150515 0.0414184 -0.999029, -0.0274558 0.0755858 -0.996761, + -0.0405117 0.056472 -0.997582, -0.0539727 0.0601733 -0.996728, -0.0400381 0.0695799 -0.996773, -0.061387 0.033093 -0.997565, + -0.0735955 0.0332124 -0.996735, -0.0655833 0.0473281 -0.996724, -0.0520542 0.0457729 -0.997595, + -0.0269276 0.0397802 -0.998846, -0.0428466 0.0258488 -0.998747, -0.0351142 0.0325946 -0.998852, -0.066827 0.0198266 -0.997568, + -0.0692754 0.0074559 -0.99757, -0.0808138 0.00286733 -0.996725, -0.0787876 0.0181621 -0.996726, + -0.068244 -0.0152294 -0.997552, -0.0782603 -0.0200333 -0.996732, -0.078959 -0.0135334 -0.996786, + -0.0714251 -0.00608275 -0.997427, -0.0477359 0.00567834 -0.998844, -0.0515229 -0.00423979 -0.998663, + -0.0441759 0.013977 -0.998926, -0.0137564 0.0219976 -0.999663, -0.0241336 0.0137195 -0.999615, -0.019041 0.0180072 -0.999657, + -0.0222961 0.00683996 -0.999728, -0.0259948 0.00317728 -0.999657, -0.0254305 -0.0104337 -0.999622, + -0.0340156 -0.0228126 -0.999161] + } + coordIndex [ + 20, 18, 17, -1,17, 16, 20, -1,19, 18, 20, -1,20, 23, 22, -1,22, 21, 20, -1,16, 12, + 20, -1,12, 28, 20, -1,12, 15, 14, -1,14, 13, 12, -1,15, 12, 16, -1,10, 12, 11, -1, + 9, 12, 10, -1,9, 8, 12, -1,8, 4, 12, -1,24, 23, 20, -1,25, 24, 28, -1,28, 26, 25, -1, + 26, 28, 27, -1,30, 29, 28, -1,28, 31, 30, -1,12, 4, 28, -1,31, 28, 0, -1,6, 5, 4, -1, + 4, 7, 6, -1,7, 4, 8, -1,1, 4, 2, -1,2, 4, 3, -1,0, 4, 1, -1,4, 0, 28, -1,28, 24, + 20, -1,541, 844, 845, -1,770, 846, 771, -1,542, 845, 847, -1,543, 847, 848, -1,57, + 845, 542, -1,845, 57, 541, -1,32, 848, 544, -1,848, 60, 543, -1,58, 542, 847, -1, + 58, 847, 543, -1,848, 849, 544, -1,844, 541, 55, -1,849, 850, 37, -1,851, 768, 850, -1, + 39, 769, 851, -1,851, 846, 770, -1,764, 545, 849, -1,852, 772, 846, -1,849, 545, + 544, -1,851, 770, 39, -1,544, 545, 35, -1,59, 543, 60, -1,34, 33, 32, -1,544, 34, + 32, -1,57, 56, 541, -1,57, 542, 58, -1,58, 543, 59, -1,60, 848, 32, -1,849, 37, 764, -1, + 56, 55, 541, -1,35, 545, 36, -1,34, 544, 35, -1,765, 36, 545, -1,40, 771, 846, -1, + 41, 852, 773, -1,42, 853, 775, -1,42, 773, 853, -1,853, 774, 775, -1,854, 43, 774, -1, + 855, 44, 776, -1,850, 38, 767, -1,856, 547, 857, -1,779, 44, 855, -1,858, 859, 549, -1, + 858, 548, 856, -1,37, 850, 766, -1,855, 857, 45, -1,767, 766, 850, -1,854, 777, 43, -1, + 850, 768, 38, -1,550, 859, 54, -1,47, 546, 48, -1,781, 780, 47, -1,48, 546, 547, -1, + 546, 47, 780, -1,856, 49, 547, -1,49, 856, 548, -1,859, 51, 549, -1,859, 550, 52, -1, + 858, 549, 50, -1,858, 50, 548, -1,50, 49, 548, -1,51, 859, 52, -1,53, 52, 550, -1, + 50, 549, 51, -1,764, 765, 545, -1,550, 54, 53, -1,547, 49, 48, -1,546, 857, 547, -1, + 768, 851, 769, -1,846, 772, 40, -1,41, 772, 852, -1,853, 773, 852, -1,854, 774, 853, -1, + 855, 776, 854, -1,854, 776, 777, -1,855, 45, 778, -1,778, 779, 855, -1,45, 857, 780, -1, + 546, 780, 857, -1,47, 46, 781, -1,783, 782, 65, -1,65, 782, 61, -1,68, 67, 66, -1, + 65, 61, 66, -1,64, 783, 65, -1,68, 66, 61, -1,114, 110, 103, -1,860, 110, 111, -1, + 114, 113, 112, -1,111, 110, 112, -1,112, 110, 114, -1,114, 97, 115, -1,69, 72, 71, -1, + 73, 72, 69, -1,783, 64, 63, -1,77, 75, 74, -1,62, 783, 63, -1,77, 76, 75, -1,77, + 74, 73, -1,70, 69, 71, -1,68, 61, 115, -1,68, 115, 78, -1,69, 68, 77, -1,77, 68, + 78, -1,85, 80, 79, -1,115, 94, 78, -1,79, 78, 86, -1,69, 77, 73, -1,109, 105, 110, -1, + 108, 107, 106, -1,106, 105, 109, -1,103, 110, 104, -1,114, 103, 102, -1,105, 104, + 110, -1,102, 101, 114, -1,99, 114, 100, -1,98, 114, 99, -1,115, 97, 96, -1,96, 95, + 115, -1,97, 114, 98, -1,101, 100, 114, -1,94, 115, 95, -1,79, 86, 85, -1,85, 84, + 80, -1,82, 81, 83, -1,84, 83, 81, -1,80, 84, 81, -1,78, 87, 86, -1,92, 91, 78, -1, + 90, 78, 91, -1,78, 88, 87, -1,78, 89, 88, -1,89, 78, 90, -1,78, 93, 92, -1,94, 93, + 78, -1,108, 106, 109, -1,130, 129, 551, -1,551, 129, 119, -1,131, 130, 117, -1,130, + 551, 117, -1,118, 117, 551, -1,119, 118, 551, -1,117, 116, 131, -1,129, 552, 119, -1, + 552, 128, 553, -1,128, 552, 129, -1,553, 128, 127, -1,552, 553, 120, -1,555, 127, + 126, -1,127, 554, 553, -1,555, 126, 125, -1,553, 121, 120, -1,121, 553, 554, -1,121, + 554, 122, -1,122, 555, 123, -1,555, 122, 554, -1,124, 123, 555, -1,555, 125, 124, -1, + 554, 127, 555, -1,552, 120, 119, -1,556, 153, 557, -1,154, 556, 133, -1,556, 154, + 153, -1,153, 152, 557, -1,151, 150, 558, -1,557, 558, 135, -1,558, 557, 151, -1,150, + 559, 558, -1,151, 557, 152, -1,556, 557, 134, -1,134, 557, 135, -1,132, 154, 133, -1, + 133, 556, 134, -1,559, 138, 137, -1,560, 138, 559, -1,136, 558, 137, -1,136, 135, + 558, -1,559, 137, 558, -1,559, 150, 149, -1,149, 148, 560, -1,560, 561, 139, -1,561, + 560, 148, -1,148, 147, 561, -1,560, 139, 138, -1,147, 146, 562, -1,562, 145, 144, -1, + 145, 562, 146, -1,561, 147, 143, -1,143, 147, 562, -1,140, 139, 561, -1,561, 142, + 140, -1,861, 140, 141, -1,141, 140, 142, -1,561, 143, 142, -1,562, 144, 143, -1,560, + 559, 149, -1,790, 788, 787, -1,862, 863, 563, -1,864, 862, 566, -1,865, 165, 863, -1, + 165, 164, 563, -1,563, 164, 564, -1,563, 566, 862, -1,569, 566, 567, -1,564, 566, + 563, -1,572, 569, 570, -1,569, 864, 566, -1,164, 163, 564, -1,863, 165, 563, -1,790, + 787, 786, -1,864, 569, 866, -1,867, 866, 572, -1,868, 867, 575, -1,578, 868, 575, -1, + 575, 572, 573, -1,578, 575, 576, -1,578, 869, 868, -1,581, 155, 870, -1,581, 869, + 578, -1,579, 581, 578, -1,581, 870, 869, -1,155, 581, 582, -1,575, 867, 572, -1,866, + 569, 572, -1,564, 567, 566, -1,564, 565, 567, -1,565, 564, 163, -1,565, 163, 162, -1, + 567, 565, 568, -1,573, 570, 571, -1,568, 570, 567, -1,571, 570, 568, -1,570, 573, + 572, -1,792, 568, 565, -1,567, 570, 569, -1,161, 568, 792, -1,574, 571, 160, -1,571, + 568, 161, -1,160, 571, 161, -1,571, 574, 573, -1,573, 574, 577, -1,576, 577, 579, -1, + 576, 573, 577, -1,582, 579, 580, -1,576, 579, 578, -1,582, 157, 156, -1,583, 157, + 582, -1,582, 156, 155, -1,580, 579, 577, -1,579, 582, 581, -1,577, 159, 580, -1,159, + 577, 160, -1,580, 159, 583, -1,790, 791, 789, -1,583, 790, 784, -1,580, 583, 582, -1, + 574, 160, 577, -1,790, 785, 784, -1,573, 576, 575, -1,790, 786, 785, -1,157, 583, + 784, -1,790, 789, 788, -1,583, 159, 790, -1,792, 565, 162, -1,871, 872, 169, -1,168, + 873, 870, -1,168, 870, 169, -1,871, 169, 870, -1,166, 170, 167, -1,874, 167, 169, -1, + 169, 167, 170, -1,874, 169, 872, -1,875, 876, 877, -1,876, 875, 878, -1,877, 158, + 879, -1,158, 877, 876, -1,177, 176, 175, -1,178, 177, 187, -1,179, 178, 187, -1,171, + 880, 881, -1,185, 184, 187, -1,186, 185, 187, -1,181, 180, 187, -1,183, 182, 187, -1, + 181, 187, 182, -1,184, 183, 187, -1,179, 187, 180, -1,187, 882, 883, -1,884, 882, + 187, -1,885, 188, 886, -1,886, 188, 883, -1,187, 883, 188, -1,881, 172, 171, -1,173, + 887, 174, -1,887, 173, 172, -1,887, 175, 174, -1,175, 887, 187, -1,887, 884, 187, -1, + 887, 172, 881, -1,175, 187, 177, -1,192, 191, 888, -1,193, 192, 888, -1,889, 190, + 888, -1,888, 189, 193, -1,189, 888, 190, -1,584, 196, 585, -1,197, 196, 584, -1,198, + 584, 890, -1,584, 198, 197, -1,585, 890, 584, -1,585, 196, 195, -1,586, 585, 194, -1, + 194, 585, 195, -1,586, 194, 891, -1,892, 585, 893, -1,586, 894, 893, -1,894, 586, + 891, -1,585, 586, 893, -1,585, 892, 890, -1,199, 895, 896, -1,201, 200, 896, -1,202, + 201, 897, -1,199, 896, 200, -1,896, 898, 897, -1,897, 899, 900, -1,899, 897, 898, -1, + 896, 897, 201, -1,245, 244, 249, -1,245, 249, 246, -1,242, 241, 901, -1,798, 799, + 234, -1,902, 244, 243, -1,242, 903, 243, -1,590, 800, 589, -1,248, 904, 249, -1,904, + 246, 249, -1,905, 904, 801, -1,906, 240, 907, -1,240, 906, 241, -1,206, 204, 207, -1, + 240, 203, 907, -1,204, 240, 207, -1,207, 239, 793, -1,908, 793, 238, -1,238, 237, + 212, -1,239, 207, 240, -1,211, 238, 212, -1,203, 240, 204, -1,238, 211, 909, -1,908, + 238, 909, -1,211, 587, 909, -1,206, 205, 204, -1,237, 794, 212, -1,215, 234, 799, -1, + 248, 801, 904, -1,246, 904, 247, -1,910, 909, 587, -1,208, 910, 587, -1,208, 587, + 210, -1,210, 587, 211, -1,238, 793, 239, -1,236, 235, 214, -1,795, 213, 236, -1,236, + 213, 237, -1,210, 209, 208, -1,234, 233, 216, -1,216, 233, 217, -1,234, 215, 235, -1, + 232, 231, 594, -1,231, 230, 597, -1,233, 232, 591, -1,600, 230, 229, -1,589, 218, + 588, -1,588, 218, 217, -1,233, 588, 217, -1,592, 588, 591, -1,588, 233, 591, -1,598, + 594, 597, -1,594, 231, 597, -1,232, 594, 591, -1,595, 591, 594, -1,230, 600, 597, -1, + 229, 228, 600, -1,234, 216, 798, -1,600, 601, 597, -1,220, 219, 590, -1,221, 590, + 222, -1,220, 590, 221, -1,589, 592, 590, -1,592, 589, 588, -1,595, 596, 592, -1,592, + 593, 590, -1,592, 591, 595, -1,590, 219, 800, -1,602, 598, 601, -1,601, 598, 597, -1, + 228, 227, 601, -1,214, 235, 797, -1,601, 600, 228, -1,599, 595, 598, -1,595, 594, + 598, -1,227, 602, 601, -1,593, 596, 224, -1,596, 593, 592, -1,236, 214, 795, -1,224, + 223, 593, -1,596, 599, 224, -1,593, 223, 590, -1,599, 602, 225, -1,602, 599, 598, -1, + 235, 215, 796, -1,226, 225, 602, -1,602, 227, 226, -1,599, 225, 224, -1,596, 595, + 599, -1,590, 223, 222, -1,218, 589, 800, -1,796, 797, 235, -1,213, 794, 237, -1,244, + 902, 802, -1,249, 244, 803, -1,803, 244, 804, -1,802, 804, 244, -1,243, 903, 805, -1, + 902, 243, 806, -1,806, 243, 805, -1,242, 901, 807, -1,903, 242, 808, -1,807, 808, + 242, -1,906, 809, 241, -1,901, 241, 810, -1,809, 810, 241, -1,911, 251, 250, -1,912, + 250, 913, -1,250, 912, 911, -1,253, 252, 255, -1,254, 253, 255, -1,255, 914, 915, -1, + 914, 255, 252, -1,255, 915, 916, -1,257, 256, 917, -1,916, 256, 255, -1,917, 256, + 916, -1,918, 258, 257, -1,919, 259, 258, -1,258, 918, 919, -1,918, 257, 917, -1,920, + 921, 922, -1,260, 919, 920, -1,922, 923, 924, -1,922, 924, 925, -1,261, 920, 922, -1, + 922, 262, 261, -1,261, 260, 920, -1,922, 926, 927, -1,927, 262, 922, -1,922, 925, + 926, -1,924, 928, 925, -1,919, 260, 259, -1,265, 264, 603, -1,929, 603, 604, -1,265, + 603, 930, -1,929, 930, 603, -1,603, 264, 604, -1,605, 263, 931, -1,932, 604, 605, -1, + 604, 932, 929, -1,605, 933, 932, -1,933, 605, 931, -1,604, 263, 605, -1,263, 604, + 264, -1,294, 295, 934, -1,296, 295, 811, -1,293, 811, 295, -1,293, 295, 294, -1,293, + 292, 811, -1,812, 813, 296, -1,298, 291, 290, -1,291, 298, 297, -1,298, 290, 289, -1, + 296, 811, 812, -1,299, 289, 266, -1,289, 299, 298, -1,266, 288, 267, -1,288, 266, + 289, -1,267, 287, 286, -1,287, 267, 288, -1,291, 813, 812, -1,813, 291, 297, -1,279, + 278, 935, -1,274, 280, 279, -1,275, 936, 937, -1,937, 277, 276, -1,277, 938, 935, -1, + 938, 277, 937, -1,277, 935, 278, -1,937, 276, 275, -1,274, 279, 935, -1,286, 285, + 268, -1,268, 285, 269, -1,286, 268, 267, -1,269, 284, 270, -1,284, 269, 285, -1,270, + 284, 271, -1,280, 273, 281, -1,281, 273, 282, -1,271, 283, 272, -1,283, 271, 284, -1, + 272, 282, 273, -1,282, 272, 283, -1,274, 273, 280, -1,939, 940, 941, -1,939, 941, + 942, -1,943, 944, 820, -1,945, 942, 946, -1,818, 939, 942, -1,819, 947, 946, -1,945, + 946, 947, -1,946, 948, 949, -1,950, 948, 943, -1,944, 943, 951, -1,952, 948, 950, -1, + 951, 953, 944, -1,820, 950, 943, -1,954, 606, 951, -1,606, 953, 951, -1,954, 955, + 608, -1,948, 952, 949, -1,606, 607, 956, -1,607, 606, 954, -1,608, 609, 957, -1,609, + 608, 955, -1,607, 954, 608, -1,607, 608, 958, -1,958, 956, 607, -1,957, 958, 608, -1, + 606, 956, 959, -1,609, 960, 957, -1,953, 606, 821, -1,302, 815, 961, -1,955, 962, + 609, -1,300, 814, 614, -1,614, 963, 964, -1,961, 301, 964, -1,962, 965, 611, -1,612, + 965, 963, -1,815, 301, 961, -1,302, 966, 303, -1,302, 961, 966, -1,964, 301, 300, -1, + 304, 966, 967, -1,306, 967, 968, -1,942, 945, 818, -1,307, 968, 969, -1,967, 816, + 304, -1,968, 817, 306, -1,308, 307, 969, -1,305, 967, 306, -1,966, 304, 303, -1,946, + 949, 819, -1,610, 611, 960, -1,610, 962, 611, -1,612, 613, 970, -1,612, 963, 613, -1, + 965, 612, 611, -1,611, 612, 971, -1,960, 611, 971, -1,613, 972, 970, -1,970, 971, + 612, -1,972, 614, 973, -1,972, 613, 614, -1,963, 614, 613, -1,610, 960, 609, -1,814, + 973, 614, -1,964, 300, 614, -1,307, 817, 968, -1,962, 610, 609, -1,305, 816, 967, -1, + 606, 959, 821, -1,974, 615, 616, -1,973, 312, 615, -1,974, 975, 615, -1,973, 615, + 975, -1,615, 312, 311, -1,617, 310, 309, -1,311, 616, 615, -1,311, 310, 616, -1,976, + 974, 617, -1,976, 617, 309, -1,310, 617, 616, -1,617, 974, 616, -1,977, 978, 979, -1, + 980, 979, 981, -1,982, 981, 983, -1,977, 979, 980, -1,983, 984, 982, -1,982, 980, + 981, -1,978, 977, 985, -1,986, 987, 988, -1,989, 986, 988, -1,988, 985, 313, -1,985, + 988, 978, -1,313, 990, 988, -1,988, 990, 989, -1,991, 992, 993, -1,994, 991, 993, -1, + 995, 996, 997, -1,997, 316, 314, -1,994, 996, 991, -1,315, 314, 316, -1,982, 984, + 991, -1,991, 996, 995, -1,995, 997, 314, -1,998, 999, 314, -1,314, 999, 995, -1,315, + 1000, 314, -1,991, 984, 992, -1,1001, 1002, 322, -1,322, 321, 1001, -1,1001, 321, + 1003, -1,1003, 320, 319, -1,320, 1003, 321, -1,1003, 327, 326, -1,318, 327, 1003, -1, + 318, 1003, 319, -1,1003, 326, 325, -1,329, 328, 318, -1,822, 331, 330, -1,329, 822, + 330, -1,318, 822, 329, -1,323, 1004, 1003, -1,324, 323, 1003, -1,325, 324, 1003, -1, + 328, 327, 318, -1,331, 822, 317, -1,338, 337, 1005, -1,1005, 339, 338, -1,340, 339, + 1005, -1,336, 1005, 337, -1,334, 333, 332, -1,332, 1005, 336, -1,332, 335, 334, -1, + 332, 336, 335, -1,1006, 1007, 618, -1,624, 1008, 1006, -1,823, 1009, 1007, -1,1007, + 1010, 618, -1,618, 1010, 1011, -1,621, 1006, 618, -1,621, 618, 619, -1,1012, 619, + 618, -1,619, 1012, 343, -1,618, 1011, 1012, -1,624, 1006, 621, -1,1007, 1009, 1010, -1, + 622, 624, 621, -1,1013, 1014, 630, -1,1015, 1013, 633, -1,1016, 1017, 1018, -1,1015, + 636, 1017, -1,630, 1014, 627, -1,627, 624, 625, -1,630, 627, 628, -1,633, 1013, 630, -1, + 1017, 636, 1018, -1,1015, 633, 636, -1,636, 1019, 1018, -1,637, 1019, 636, -1,634, + 636, 633, -1,630, 631, 633, -1,1014, 1008, 627, -1,1008, 624, 627, -1,823, 1007, + 824, -1,621, 619, 622, -1,343, 342, 620, -1,623, 620, 1020, -1,620, 622, 619, -1, + 622, 625, 624, -1,625, 622, 623, -1,623, 626, 625, -1,1021, 626, 623, -1,622, 620, + 623, -1,629, 625, 626, -1,341, 620, 342, -1,620, 619, 343, -1,1020, 1021, 623, -1, + 1020, 341, 1022, -1,1023, 626, 1021, -1,620, 341, 1020, -1,629, 626, 1023, -1,628, + 629, 631, -1,629, 628, 625, -1,631, 629, 632, -1,628, 631, 630, -1,634, 637, 636, -1, + 635, 637, 634, -1,632, 635, 634, -1,637, 638, 1024, -1,634, 631, 632, -1,637, 1024, + 1019, -1,629, 1025, 632, -1,631, 634, 633, -1,1026, 635, 632, -1,1026, 1027, 635, -1, + 635, 638, 637, -1,638, 635, 1028, -1,1028, 1029, 638, -1,635, 1027, 1028, -1,638, + 1029, 1024, -1,825, 1007, 826, -1,1026, 632, 1025, -1,629, 1023, 1025, -1,826, 1007, + 827, -1,625, 628, 627, -1,824, 1007, 825, -1,1030, 1031, 344, -1,1032, 1033, 344, -1, + 344, 1031, 1032, -1,1032, 1034, 1033, -1,1035, 1036, 1033, -1,1034, 1035, 1033, -1, + 639, 1037, 1038, -1,1038, 346, 639, -1,639, 345, 1039, -1,639, 1040, 1037, -1,639, + 1039, 1040, -1,345, 639, 346, -1,1041, 1042, 349, -1,1041, 1043, 1042, -1,349, 1044, + 1041, -1,1045, 828, 347, -1,348, 347, 828, -1,347, 1043, 1045, -1,1045, 1043, 1041, -1, + 1046, 640, 1047, -1,1048, 1049, 641, -1,1049, 1050, 642, -1,1046, 1048, 640, -1,643, + 642, 1050, -1,640, 1051, 1047, -1,1051, 640, 1052, -1,641, 642, 1053, -1,642, 641, + 1049, -1,641, 1053, 1052, -1,1053, 642, 1054, -1,1054, 642, 643, -1,641, 1052, 640, -1, + 640, 1048, 641, -1,643, 1050, 1055, -1,1056, 1057, 644, -1,643, 644, 1058, -1,644, + 643, 1056, -1,1057, 645, 644, -1,1056, 643, 1055, -1,645, 1059, 646, -1,646, 1059, + 1060, -1,1059, 645, 1057, -1,644, 645, 1061, -1,1062, 643, 1058, -1,1063, 1061, 645, -1, + 1058, 644, 1061, -1,646, 1064, 1065, -1,1064, 646, 1060, -1,1063, 646, 1065, -1,1063, + 645, 646, -1,643, 1062, 1054, -1,1066, 1067, 1068, -1,1069, 1068, 1067, -1,1069, + 1067, 1070, -1,1071, 1072, 1073, -1,1074, 1073, 1072, -1,1075, 1074, 1072, -1,647, + 1076, 1077, -1,1078, 1076, 647, -1,1079, 647, 1077, -1,647, 1079, 1078, -1,1078, + 1079, 1080, -1,1081, 1076, 1078, -1,841, 648, 351, -1,650, 649, 838, -1,841, 351, + 350, -1,351, 648, 352, -1,1082, 650, 839, -1,653, 403, 402, -1,653, 656, 657, -1, + 656, 653, 402, -1,401, 659, 656, -1,656, 659, 660, -1,656, 402, 401, -1,1083, 403, + 653, -1,662, 401, 400, -1,665, 400, 399, -1,662, 665, 666, -1,665, 662, 400, -1,668, + 671, 672, -1,398, 671, 668, -1,665, 399, 668, -1,665, 668, 669, -1,668, 399, 398, -1, + 401, 662, 659, -1,659, 662, 663, -1,1083, 653, 1084, -1,652, 1085, 835, -1,651, 836, + 837, -1,1084, 654, 1086, -1,1082, 836, 651, -1,1086, 654, 655, -1,1084, 653, 654, -1, + 654, 653, 657, -1,658, 654, 657, -1,664, 660, 663, -1,660, 659, 663, -1,666, 669, + 670, -1,666, 665, 669, -1,662, 666, 663, -1,663, 666, 667, -1,656, 660, 657, -1,661, + 657, 660, -1,668, 672, 669, -1,652, 835, 834, -1,671, 674, 672, -1,670, 669, 672, -1, + 361, 360, 1087, -1,354, 353, 1088, -1,356, 355, 1088, -1,357, 356, 1089, -1,354, + 1088, 355, -1,1090, 362, 1091, -1,1092, 1090, 1091, -1,1091, 1093, 1092, -1,1094, + 1091, 362, -1,361, 1094, 362, -1,1095, 1096, 359, -1,1096, 1087, 360, -1,1095, 359, + 358, -1,1089, 1095, 358, -1,357, 1089, 358, -1,356, 1088, 1089, -1,1094, 361, 1087, -1, + 359, 1096, 360, -1,381, 1097, 830, -1,353, 1098, 1088, -1,1099, 648, 649, -1,648, + 840, 649, -1,649, 1100, 838, -1,1101, 649, 650, -1,1102, 651, 652, -1,652, 651, 1085, -1, + 1103, 652, 655, -1,650, 651, 1104, -1,650, 1082, 651, -1,1102, 652, 1103, -1,655, + 658, 1105, -1,658, 655, 654, -1,661, 658, 657, -1,1105, 658, 1106, -1,664, 1107, + 661, -1,658, 661, 1108, -1,1109, 664, 667, -1,670, 667, 666, -1,664, 663, 667, -1, + 1110, 667, 670, -1,661, 660, 664, -1,655, 1105, 1103, -1,652, 1086, 655, -1,1098, + 648, 1099, -1,1099, 649, 1111, -1,681, 832, 391, -1,1101, 650, 1104, -1,1104, 651, + 1112, -1,649, 1101, 1111, -1,394, 396, 833, -1,1102, 1112, 651, -1,1106, 658, 1108, -1, + 1108, 661, 1107, -1,1109, 667, 1110, -1,664, 1109, 1107, -1,670, 1113, 1110, -1,1086, + 652, 834, -1,1113, 670, 673, -1,1098, 353, 352, -1,648, 1098, 352, -1,390, 683, 831, -1, + 670, 672, 673, -1,396, 677, 397, -1,398, 397, 674, -1,393, 396, 394, -1,393, 392, + 396, -1,385, 384, 386, -1,387, 386, 384, -1,384, 689, 387, -1,674, 397, 677, -1,677, + 396, 392, -1,832, 680, 392, -1,681, 392, 680, -1,392, 678, 677, -1,681, 680, 832, -1, + 684, 391, 683, -1,674, 677, 678, -1,391, 831, 683, -1,384, 371, 689, -1,686, 389, + 388, -1,389, 686, 390, -1,686, 388, 687, -1,388, 387, 689, -1,690, 388, 689, -1,689, + 371, 370, -1,683, 390, 684, -1,371, 384, 372, -1,687, 390, 686, -1,384, 383, 372, -1, + 675, 672, 674, -1,1114, 383, 1115, -1,381, 1116, 382, -1,383, 382, 1115, -1,380, + 1097, 381, -1,380, 1117, 1118, -1,380, 379, 1117, -1,383, 1114, 375, -1,378, 1119, + 1120, -1,379, 378, 1121, -1,1121, 378, 1120, -1,1122, 1123, 1120, -1,1119, 1122, + 1120, -1,379, 1121, 1117, -1,375, 1114, 376, -1,377, 376, 1124, -1,374, 373, 383, -1, + 374, 383, 375, -1,382, 1116, 1115, -1,830, 1116, 381, -1,1097, 380, 1118, -1,1124, + 376, 1114, -1,383, 373, 372, -1,675, 678, 679, -1,675, 674, 678, -1,678, 392, 681, -1, + 678, 681, 679, -1,673, 676, 1125, -1,676, 673, 675, -1,679, 676, 675, -1,676, 679, + 1126, -1,681, 682, 679, -1,673, 672, 675, -1,390, 687, 684, -1,684, 681, 391, -1, + 388, 690, 687, -1,682, 684, 685, -1,690, 691, 687, -1,684, 687, 688, -1,369, 690, + 370, -1,690, 369, 829, -1,684, 682, 681, -1,690, 689, 370, -1,679, 682, 1127, -1, + 679, 1127, 1126, -1,1126, 1125, 676, -1,682, 1128, 1127, -1,1128, 682, 1129, -1,685, + 1130, 1129, -1,1129, 682, 685, -1,1131, 688, 691, -1,691, 688, 687, -1,368, 691, + 829, -1,1132, 691, 368, -1,1133, 1130, 688, -1,1132, 1131, 691, -1,1133, 688, 1131, -1, + 368, 367, 1132, -1,688, 1130, 685, -1,685, 684, 688, -1,839, 650, 838, -1,690, 829, + 691, -1,673, 1125, 1113, -1,366, 365, 1134, -1,366, 1135, 1132, -1,363, 1136, 1134, -1, + 364, 363, 1134, -1,365, 364, 1134, -1,1134, 1135, 366, -1,366, 1132, 367, -1,649, + 840, 1100, -1,648, 841, 840, -1,674, 671, 398, -1,1085, 651, 837, -1,419, 418, 692, -1, + 692, 693, 1137, -1,693, 692, 418, -1,418, 417, 693, -1,419, 692, 420, -1,695, 694, + 416, -1,416, 694, 417, -1,416, 415, 695, -1,417, 694, 693, -1,693, 694, 1138, -1, + 420, 692, 1137, -1,412, 843, 842, -1,694, 1139, 1138, -1,1138, 1137, 693, -1,1140, + 1139, 695, -1,695, 1141, 1140, -1,407, 843, 412, -1,695, 1139, 694, -1,415, 414, + 695, -1,696, 414, 413, -1,412, 842, 413, -1,407, 412, 408, -1,411, 410, 409, -1,408, + 412, 409, -1,409, 412, 411, -1,696, 404, 1142, -1,404, 696, 405, -1,1142, 1141, 696, -1, + 1141, 695, 696, -1,697, 413, 842, -1,697, 842, 406, -1,406, 405, 697, -1,697, 405, + 696, -1,696, 413, 697, -1,696, 695, 414, -1,1143, 1144, 1145, -1,1146, 1147, 421, -1, + 1143, 421, 1147, -1,1148, 421, 1143, -1,422, 421, 1148, -1,1148, 1143, 1145, -1,698, + 425, 699, -1,425, 698, 426, -1,428, 426, 698, -1,429, 428, 698, -1,427, 426, 428, -1, + 698, 430, 429, -1,699, 424, 423, -1,699, 430, 698, -1,699, 423, 700, -1,700, 423, + 1149, -1,430, 699, 1150, -1,1151, 700, 1152, -1,1151, 1150, 699, -1,1152, 700, 1149, -1, + 700, 1151, 699, -1,699, 425, 424, -1,1153, 1154, 1155, -1,1156, 1153, 1157, -1,1155, + 1157, 1153, -1,1158, 1154, 1159, -1,1158, 1155, 1154, -1,1160, 1155, 1158, -1,1161, + 1160, 1158, -1,1158, 1159, 1162, -1,1163, 433, 1164, -1,1164, 432, 431, -1,432, 1164, + 433, -1,431, 1165, 1166, -1,1167, 1164, 1168, -1,1166, 1168, 431, -1,1168, 1164, + 431, -1,435, 1169, 1170, -1,1169, 435, 434, -1,1171, 1169, 1172, -1,1169, 1171, 1170, -1, + 1173, 701, 1174, -1,701, 1173, 1175, -1,1176, 702, 701, -1,702, 1176, 1177, -1,1176, + 701, 1175, -1,701, 702, 436, -1,436, 1174, 701, -1,437, 436, 702, -1,702, 438, 437, -1, + 1178, 703, 702, -1,1179, 438, 703, -1,438, 702, 703, -1,1180, 703, 1178, -1,703, + 1180, 1181, -1,703, 1181, 1179, -1,702, 1177, 1178, -1,1182, 1183, 1184, -1,1185, + 1183, 1186, -1,1183, 1187, 1188, -1,1183, 1188, 1186, -1,1187, 1183, 1182, -1,1189, + 1182, 1190, -1,1182, 1184, 1190, -1,1191, 1187, 1192, -1,1191, 1193, 1194, -1,1182, + 1192, 1187, -1,1194, 1193, 1195, -1,1187, 1191, 1194, -1,439, 1196, 1197, -1,1197, + 1194, 1198, -1,439, 1199, 1200, -1,1196, 439, 1200, -1,439, 1197, 443, -1,1198, 1201, + 1197, -1,1194, 1202, 1198, -1,443, 441, 440, -1,441, 443, 442, -1,1197, 1201, 443, -1, + 440, 439, 443, -1,1195, 1202, 1194, -1,1203, 1204, 1205, -1,1204, 1203, 1206, -1, + 1206, 445, 1207, -1,445, 1206, 1203, -1,444, 1207, 445, -1,1208, 704, 1209, -1,704, + 1208, 1210, -1,1211, 704, 1212, -1,705, 1212, 704, -1,704, 1211, 1209, -1,704, 1210, + 705, -1,706, 705, 1213, -1,1213, 705, 1210, -1,706, 1213, 1214, -1,705, 1215, 1216, -1, + 1215, 705, 706, -1,1215, 706, 1217, -1,1217, 706, 1214, -1,705, 1216, 1212, -1,446, + 1218, 447, -1,448, 447, 1218, -1,1219, 449, 1218, -1,448, 1218, 449, -1,708, 1220, + 707, -1,1221, 707, 1222, -1,1220, 1222, 707, -1,707, 1221, 452, -1,1223, 1220, 708, -1, + 707, 452, 708, -1,708, 452, 451, -1,709, 708, 451, -1,1223, 708, 709, -1,709, 1224, + 1223, -1,1224, 709, 450, -1,709, 451, 450, -1,710, 454, 453, -1,711, 454, 710, -1, + 1225, 710, 453, -1,455, 711, 712, -1,454, 711, 455, -1,456, 455, 712, -1,1226, 711, + 710, -1,1226, 1227, 711, -1,710, 1225, 1226, -1,1228, 713, 1229, -1,1229, 713, 712, -1, + 1227, 1229, 712, -1,711, 1227, 712, -1,713, 456, 712, -1,713, 458, 457, -1,458, 713, + 714, -1,456, 713, 457, -1,460, 459, 715, -1,459, 458, 714, -1,1230, 460, 716, -1, + 1231, 714, 1232, -1,713, 1232, 714, -1,715, 714, 1231, -1,1233, 716, 715, -1,460, + 715, 716, -1,716, 1233, 1224, -1,1224, 1230, 716, -1,1231, 1233, 715, -1,715, 459, + 714, -1,1228, 1232, 713, -1,717, 1234, 463, -1,717, 1235, 1234, -1,718, 1236, 717, -1, + 1237, 717, 1236, -1,717, 1237, 1235, -1,718, 717, 463, -1,718, 462, 719, -1,1236, + 718, 719, -1,463, 462, 718, -1,1236, 719, 1238, -1,1238, 719, 461, -1,719, 462, 461, -1, + 1239, 1240, 1241, -1,464, 1241, 1240, -1,1238, 1242, 1240, -1,464, 1240, 1242, -1, + 720, 1243, 1244, -1,721, 1243, 720, -1,1245, 720, 1244, -1,1245, 468, 720, -1,721, + 720, 468, -1,467, 721, 468, -1,721, 1246, 1243, -1,722, 1247, 1248, -1,721, 722, + 1248, -1,466, 721, 467, -1,466, 465, 722, -1,1247, 722, 465, -1,721, 466, 722, -1, + 1248, 1246, 721, -1,1249, 1250, 469, -1,470, 469, 1251, -1,1250, 1251, 469, -1,471, + 470, 1251, -1,724, 1252, 723, -1,723, 1252, 1253, -1,474, 723, 1254, -1,1253, 1254, + 723, -1,723, 474, 724, -1,1255, 1252, 724, -1,1256, 724, 725, -1,1255, 724, 1256, -1, + 1257, 1256, 725, -1,472, 724, 473, -1,472, 1258, 725, -1,1257, 725, 1258, -1,472, + 725, 724, -1,474, 473, 724, -1,1259, 1260, 1261, -1,1262, 1259, 1261, -1,1259, 1263, + 1264, -1,1262, 1263, 1259, -1,1265, 1264, 1266, -1,1267, 1268, 1269, -1,1265, 1267, + 1259, -1,1267, 1270, 1268, -1,1270, 1267, 1265, -1,1259, 1264, 1265, -1,1266, 1271, + 1265, -1,1272, 1273, 1271, -1,1274, 1273, 1272, -1,1275, 1276, 1277, -1,1274, 1276, + 1275, -1,1275, 1277, 1278, -1,1279, 1258, 1280, -1,1258, 1279, 1273, -1,1275, 1258, + 1273, -1,1281, 1280, 1258, -1,1274, 1275, 1273, -1,1278, 1282, 1275, -1,1271, 1273, + 1265, -1,1283, 1284, 478, -1,1284, 479, 478, -1,1283, 478, 477, -1,1285, 1286, 476, -1, + 477, 476, 1286, -1,1286, 1283, 477, -1,476, 475, 1285, -1,1287, 479, 1284, -1,1288, + 1289, 482, -1,1289, 483, 482, -1,1288, 482, 481, -1,1287, 480, 479, -1,480, 1287, + 1290, -1,481, 480, 1290, -1,1290, 1288, 481, -1,1291, 475, 506, -1,475, 1291, 1285, -1, + 1292, 506, 505, -1,506, 1292, 1291, -1,505, 1293, 1292, -1,1293, 505, 504, -1,504, + 1294, 1293, -1,1294, 504, 503, -1,503, 1295, 1294, -1,1295, 503, 502, -1,502, 1296, + 1295, -1,1296, 502, 501, -1,501, 1297, 1296, -1,1297, 501, 500, -1,500, 395, 1297, -1, + 499, 395, 500, -1,1298, 483, 1289, -1,484, 483, 1299, -1,1299, 1300, 484, -1,483, + 1298, 1299, -1,484, 1300, 485, -1,486, 485, 1301, -1,486, 1302, 487, -1,1302, 486, + 1301, -1,485, 1300, 1301, -1,487, 1303, 488, -1,1303, 1304, 488, -1,488, 1304, 489, -1, + 490, 489, 1305, -1,1306, 490, 1305, -1,490, 1306, 491, -1,489, 1304, 1305, -1,487, + 1302, 1303, -1,497, 1307, 1308, -1,1307, 497, 496, -1,496, 1309, 1307, -1,1309, 496, + 495, -1,499, 1310, 395, -1,1310, 499, 498, -1,498, 1308, 1310, -1,1308, 498, 497, -1, + 492, 1311, 493, -1,1311, 492, 1312, -1,1312, 492, 491, -1,495, 1313, 1309, -1,1313, + 495, 494, -1,494, 493, 1314, -1,1314, 493, 1311, -1,494, 1314, 1313, -1,1306, 1312, + 491, -1,1315, 1316, 726, -1,1316, 1317, 727, -1,508, 1316, 727, -1,1316, 508, 726, -1, + 1317, 509, 727, -1,509, 1317, 728, -1,1317, 1318, 728, -1,1315, 726, 507, -1,1318, + 1319, 729, -1,729, 1319, 511, -1,1320, 731, 1321, -1,1319, 1321, 730, -1,733, 1320, + 1322, -1,734, 1322, 1323, -1,728, 1318, 510, -1,510, 1318, 729, -1,507, 726, 508, -1, + 511, 1319, 730, -1,728, 510, 509, -1,727, 509, 508, -1,729, 511, 510, -1,730, 512, + 511, -1,731, 732, 513, -1,732, 731, 1320, -1,733, 732, 1320, -1,732, 733, 513, -1, + 512, 731, 513, -1,515, 514, 734, -1,514, 513, 733, -1,734, 514, 733, -1,733, 1322, + 734, -1,512, 730, 1321, -1,1321, 731, 512, -1,734, 1323, 735, -1,735, 1323, 736, -1, + 736, 1323, 1324, -1,737, 1324, 1325, -1,736, 737, 516, -1,737, 736, 1324, -1,738, + 737, 1325, -1,737, 738, 517, -1,1325, 739, 738, -1,735, 736, 515, -1,739, 1326, 518, -1, + 740, 1326, 1327, -1,1328, 742, 1329, -1,1327, 1329, 741, -1,743, 1328, 1330, -1,744, + 1330, 524, -1,1326, 739, 1325, -1,738, 739, 517, -1,517, 739, 518, -1,517, 516, 737, -1, + 519, 1327, 741, -1,740, 1327, 519, -1,736, 516, 515, -1,519, 518, 740, -1,741, 520, + 519, -1,740, 518, 1326, -1,1328, 521, 742, -1,521, 1328, 743, -1,522, 1330, 744, -1, + 1330, 522, 743, -1,520, 742, 521, -1,521, 743, 522, -1,744, 523, 522, -1,744, 524, + 523, -1,520, 741, 1329, -1,1329, 742, 520, -1,735, 515, 734, -1,1331, 1332, 1333, -1, + 1334, 539, 1331, -1,1332, 1331, 533, -1,1332, 533, 1335, -1,1332, 1336, 1337, -1, + 1332, 1337, 1338, -1,1332, 1335, 1336, -1,533, 539, 537, -1,539, 538, 537, -1,539, + 1334, 1339, -1,534, 536, 535, -1,536, 534, 533, -1,533, 537, 536, -1,539, 533, 1331, -1, + 1340, 1341, 1336, -1,1342, 1343, 1340, -1,1335, 1342, 1340, -1,1344, 1342, 1335, -1, + 1335, 1345, 1346, -1,525, 1335, 533, -1,1346, 1344, 1335, -1,1347, 1335, 525, -1, + 531, 530, 529, -1,525, 531, 529, -1,531, 533, 532, -1,527, 526, 525, -1,527, 529, + 528, -1,525, 529, 527, -1,533, 531, 525, -1,1335, 1340, 1336, -1,1348, 1349, 745, -1, + 1349, 1350, 746, -1,1351, 1349, 746, -1,1349, 1351, 745, -1,1350, 1352, 746, -1,1352, + 1350, 747, -1,1350, 1353, 747, -1,1348, 745, 1354, -1,1353, 1355, 748, -1,748, 1355, + 1356, -1,1357, 750, 1358, -1,1355, 1358, 749, -1,752, 1357, 1359, -1,753, 1359, 1360, -1, + 747, 1353, 1361, -1,1361, 1353, 748, -1,745, 1351, 1354, -1,1356, 1355, 749, -1,746, + 1352, 1351, -1,1352, 747, 1361, -1,1361, 748, 1356, -1,749, 1362, 1356, -1,750, 751, + 1363, -1,751, 750, 1357, -1,752, 751, 1357, -1,751, 752, 1363, -1,1362, 750, 1363, -1, + 1364, 1365, 753, -1,1365, 1363, 752, -1,753, 1365, 752, -1,752, 1359, 753, -1,1362, + 749, 1358, -1,1358, 750, 1362, -1,753, 1360, 754, -1,754, 1360, 755, -1,755, 1360, + 1366, -1,756, 1366, 1367, -1,755, 756, 1368, -1,756, 755, 1366, -1,757, 756, 1367, -1, + 756, 757, 1369, -1,1367, 758, 757, -1,754, 755, 1364, -1,758, 1370, 1371, -1,759, + 1370, 1372, -1,1373, 761, 1374, -1,1372, 1374, 760, -1,762, 1373, 1375, -1,763, 1375, + 1376, -1,1370, 758, 1367, -1,757, 758, 1369, -1,1369, 758, 1371, -1,1369, 1368, 756, -1, + 1377, 1372, 760, -1,759, 1372, 1377, -1,1364, 755, 1368, -1,1377, 1371, 759, -1,760, + 1378, 1377, -1,759, 1371, 1370, -1,1373, 1379, 761, -1,1379, 1373, 762, -1,1380, + 1375, 763, -1,1375, 1380, 762, -1,1378, 761, 1379, -1,1380, 1379, 762, -1,1347, 1380, + 763, -1,763, 1376, 1347, -1,1378, 760, 1374, -1,1374, 761, 1378, -1,754, 1364, 753, -1, + 1381, 1382, 1383, -1,1382, 1384, 1385, -1,1386, 1387, 1381, -1,1386, 1381, 1383, -1, + 1383, 1382, 1385, -1,540, 1387, 1386, -1,1388, 1387, 1389, -1,1388, 1390, 1391, -1, + 1390, 1388, 1389, -1,1392, 1393, 1394, -1,1394, 1395, 1392, -1,1396, 1394, 1393, -1, + 1438, 1435, 1434, -1,1438, 1434, 1433, -1,1438, 1433, 1432, -1,1435, 1438, 1436, -1, + 1397, 1399, 1398, -1,1431, 1438, 1432, -1,1397, 1438, 1430, -1,1436, 1438, 1437, -1, + 1397, 1429, 1408, -1,1429, 1397, 1430, -1,1418, 1427, 1426, -1,1417, 1428, 1427, -1, + 1438, 1431, 1430, -1,1421, 1420, 1424, -1,1424, 1420, 1425, -1,1422, 1421, 1423, -1, + 1424, 1423, 1421, -1,1426, 1425, 1419, -1,1428, 1416, 1429, -1,1399, 1397, 1400, -1, + 1397, 1402, 1401, -1,1403, 1397, 1404, -1,1403, 1402, 1397, -1,1397, 1405, 1404, -1, + 1406, 1397, 1407, -1,1409, 1408, 1429, -1,1397, 1408, 1407, -1,1405, 1397, 1406, -1, + 1429, 1410, 1409, -1,1417, 1427, 1418, -1,1420, 1419, 1425, -1,1419, 1418, 1426, -1, + 1417, 1416, 1428, -1,1429, 1413, 1412, -1,1413, 1429, 1414, -1,1429, 1416, 1415, -1, + 1429, 1415, 1414, -1,1429, 1412, 1411, -1,1429, 1411, 1410, -1,1401, 1400, 1397, -1, + 1798, 1799, 1562, -1,1799, 1800, 1563, -1,1801, 1802, 1565, -1,1802, 1803, 1566, -1, + 1800, 1801, 1564, -1,1562, 1563, 1440, -1,1563, 1562, 1799, -1,1564, 1563, 1800, -1, + 1563, 1564, 1441, -1,1565, 1566, 1443, -1,1566, 1565, 1802, -1,1567, 1566, 1803, -1, + 1566, 1567, 1444, -1,1564, 1801, 1565, -1,1564, 1565, 1442, -1,1803, 1804, 1567, -1, + 1798, 1562, 1439, -1,1804, 1805, 1568, -1,1568, 1805, 1569, -1,1569, 1806, 1807, -1, + 1570, 1807, 1808, -1,1569, 1805, 1806, -1,1809, 1572, 1810, -1,1808, 1810, 1571, -1, + 1811, 1573, 1809, -1,1574, 1811, 1812, -1,1575, 1812, 1813, -1,1576, 1813, 1814, -1, + 1804, 1568, 1567, -1,1567, 1568, 1445, -1,1439, 1562, 1440, -1,1440, 1563, 1441, -1, + 1442, 1565, 1443, -1,1442, 1441, 1564, -1,1570, 1569, 1807, -1,1448, 1569, 1570, -1, + 1568, 1569, 1446, -1,1443, 1566, 1444, -1,1444, 1567, 1445, -1,1447, 1446, 1569, -1, + 1448, 1447, 1569, -1,1568, 1446, 1445, -1,1570, 1449, 1448, -1,1571, 1572, 1450, -1, + 1572, 1571, 1810, -1,1573, 1572, 1809, -1,1572, 1573, 1451, -1,1574, 1575, 1453, -1, + 1575, 1574, 1812, -1,1576, 1575, 1813, -1,1575, 1576, 1454, -1,1573, 1811, 1574, -1, + 1573, 1574, 1452, -1,1450, 1449, 1571, -1,1451, 1450, 1572, -1,1453, 1452, 1574, -1, + 1454, 1453, 1575, -1,1451, 1573, 1452, -1,1454, 1576, 1455, -1,1571, 1449, 1570, -1, + 1570, 1808, 1571, -1,1576, 1814, 1577, -1,1577, 1814, 1578, -1,1578, 1814, 1815, -1, + 1816, 1579, 1815, -1,1580, 1816, 1817, -1,1581, 1817, 1818, -1,1582, 1818, 1819, -1, + 1578, 1579, 1456, -1,1579, 1578, 1815, -1,1580, 1579, 1816, -1,1579, 1580, 1457, -1, + 1581, 1582, 1459, -1,1582, 1581, 1818, -1,1583, 1582, 1819, -1,1582, 1583, 1460, -1, + 1580, 1817, 1581, -1,1580, 1581, 1458, -1,1819, 1820, 1583, -1,1577, 1578, 1455, -1, + 1820, 1821, 1584, -1,1584, 1821, 1585, -1,1585, 1822, 1823, -1,1586, 1823, 1824, -1, + 1585, 1821, 1822, -1,1825, 1588, 1826, -1,1824, 1826, 1587, -1,1827, 1589, 1825, -1, + 1590, 1827, 1828, -1,1591, 1828, 1829, -1,1592, 1829, 1472, -1,1820, 1584, 1583, -1, + 1583, 1584, 1461, -1,1455, 1578, 1456, -1,1456, 1579, 1457, -1,1458, 1581, 1459, -1, + 1458, 1457, 1580, -1,1586, 1585, 1823, -1,1464, 1585, 1586, -1,1584, 1585, 1462, -1, + 1459, 1582, 1460, -1,1460, 1583, 1461, -1,1463, 1462, 1585, -1,1464, 1463, 1585, -1, + 1584, 1462, 1461, -1,1586, 1465, 1464, -1,1587, 1588, 1466, -1,1588, 1587, 1826, -1, + 1589, 1588, 1825, -1,1588, 1589, 1467, -1,1590, 1591, 1469, -1,1591, 1590, 1828, -1, + 1592, 1591, 1829, -1,1591, 1592, 1470, -1,1589, 1827, 1590, -1,1589, 1590, 1468, -1, + 1466, 1465, 1587, -1,1467, 1466, 1588, -1,1469, 1468, 1590, -1,1471, 1470, 1592, -1, + 1469, 1591, 1470, -1,1467, 1589, 1468, -1,1592, 1472, 1471, -1,1587, 1465, 1586, -1, + 1586, 1824, 1587, -1,1577, 1455, 1576, -1,1830, 1831, 1593, -1,1593, 1596, 1597, -1, + 1596, 1593, 1831, -1,1831, 1832, 1596, -1,1830, 1593, 1473, -1,1596, 1832, 1599, -1, + 1602, 1833, 1834, -1,1605, 1834, 1835, -1,1599, 1832, 1833, -1,1608, 1835, 1836, -1, + 1593, 1594, 1473, -1,1596, 1599, 1597, -1,1594, 1597, 1598, -1,1594, 1593, 1597, -1, + 1599, 1600, 1597, -1,1473, 1594, 1474, -1,1602, 1605, 1603, -1,1605, 1602, 1834, -1, + 1602, 1603, 1600, -1,1606, 1603, 1605, -1,1608, 1609, 1605, -1,1600, 1603, 1604, -1, + 1605, 1835, 1608, -1,1602, 1600, 1599, -1,1599, 1833, 1602, -1,1597, 1600, 1601, -1, + 1836, 1611, 1608, -1,1617, 1837, 1838, -1,1839, 1840, 1614, -1,1840, 1837, 1614, -1, + 1620, 1838, 1841, -1,1626, 1842, 1843, -1,1844, 1629, 1843, -1,1623, 1841, 1842, -1, + 1632, 1844, 1845, -1,1612, 1608, 1611, -1,1614, 1611, 1839, -1,1618, 1614, 1617, -1, + 1620, 1617, 1838, -1,1623, 1620, 1841, -1,1621, 1617, 1620, -1,1614, 1837, 1617, -1, + 1615, 1611, 1614, -1,1627, 1623, 1626, -1,1629, 1626, 1843, -1,1633, 1629, 1632, -1, + 1635, 1632, 1845, -1,1846, 1638, 1635, -1,1636, 1632, 1635, -1,1629, 1844, 1632, -1, + 1630, 1626, 1629, -1,1623, 1842, 1626, -1,1624, 1620, 1623, -1,1635, 1845, 1846, -1, + 1839, 1611, 1836, -1,1639, 1635, 1638, -1,1474, 1595, 1475, -1,1595, 1594, 1598, -1, + 1598, 1601, 1476, -1,1601, 1598, 1597, -1,1595, 1474, 1594, -1,1595, 1598, 1476, -1, + 1604, 1606, 1607, -1,1609, 1606, 1605, -1,1612, 1613, 1609, -1,1606, 1609, 1610, -1, + 1615, 1612, 1611, -1,1616, 1612, 1615, -1,1609, 1608, 1612, -1,1604, 1601, 1600, -1, + 1603, 1606, 1604, -1,1601, 1604, 1477, -1,1595, 1476, 1475, -1,1604, 1607, 1477, -1, + 1476, 1601, 1477, -1,1607, 1478, 1477, -1,1610, 1613, 1478, -1,1613, 1610, 1609, -1, + 1613, 1479, 1478, -1,1479, 1613, 1616, -1,1479, 1616, 1619, -1,1613, 1612, 1616, -1, + 1610, 1478, 1607, -1,1607, 1606, 1610, -1,1615, 1618, 1616, -1,1618, 1621, 1619, -1, + 1621, 1618, 1617, -1,1624, 1625, 1621, -1,1621, 1622, 1619, -1,1621, 1620, 1624, -1, + 1618, 1619, 1616, -1,1628, 1624, 1627, -1,1630, 1627, 1626, -1,1634, 1630, 1633, -1, + 1636, 1633, 1632, -1,1639, 1636, 1635, -1,1637, 1633, 1636, -1,1630, 1629, 1633, -1, + 1631, 1627, 1630, -1,1624, 1623, 1627, -1,1640, 1636, 1639, -1,1622, 1625, 1480, -1, + 1625, 1622, 1621, -1,1625, 1481, 1480, -1,1481, 1625, 1628, -1,1481, 1628, 1631, -1, + 1625, 1624, 1628, -1,1622, 1480, 1619, -1,1631, 1634, 1482, -1,1634, 1631, 1630, -1, + 1483, 1482, 1637, -1,1637, 1482, 1634, -1,1640, 1637, 1636, -1,1483, 1637, 1640, -1, + 1634, 1633, 1637, -1,1631, 1482, 1481, -1,1628, 1627, 1631, -1,1639, 1642, 1640, -1, + 1619, 1480, 1479, -1,1615, 1614, 1618, -1,1638, 1641, 1639, -1,1846, 1847, 1641, -1, + 1848, 1644, 1847, -1,1847, 1644, 1641, -1,1641, 1642, 1639, -1,1849, 1850, 1650, -1, + 1656, 1851, 1852, -1,1851, 1653, 1850, -1,1848, 1849, 1647, -1,1659, 1852, 1853, -1, + 1644, 1647, 1645, -1,1647, 1644, 1848, -1,1642, 1645, 1646, -1,1645, 1642, 1644, -1, + 1647, 1648, 1645, -1,1644, 1642, 1641, -1,1648, 1650, 1651, -1,1653, 1650, 1850, -1, + 1656, 1657, 1653, -1,1650, 1653, 1654, -1,1659, 1656, 1852, -1,1659, 1660, 1656, -1, + 1653, 1851, 1656, -1,1650, 1648, 1647, -1,1647, 1849, 1650, -1,1645, 1648, 1649, -1, + 1853, 1662, 1659, -1,1643, 1640, 1642, -1,1668, 1854, 1855, -1,1674, 1856, 1857, -1, + 1671, 1855, 1856, -1,1680, 1858, 1859, -1,1859, 1860, 1683, -1,1857, 1858, 1677, -1, + 1683, 1860, 1493, -1,1861, 1862, 1662, -1,1663, 1659, 1662, -1,1665, 1662, 1862, -1, + 1665, 1862, 1854, -1,1666, 1662, 1665, -1,1668, 1665, 1854, -1,1861, 1662, 1853, -1, + 1672, 1668, 1671, -1,1668, 1855, 1671, -1,1678, 1674, 1677, -1,1674, 1857, 1677, -1, + 1677, 1858, 1680, -1,1681, 1677, 1680, -1,1856, 1674, 1671, -1,1675, 1671, 1674, -1, + 1859, 1683, 1680, -1,1669, 1665, 1668, -1,1684, 1680, 1683, -1,1642, 1646, 1643, -1, + 1648, 1651, 1649, -1,1646, 1649, 1484, -1,1646, 1645, 1649, -1,1649, 1651, 1652, -1, + 1643, 1646, 1484, -1,1655, 1651, 1654, -1,1657, 1654, 1653, -1,1661, 1657, 1660, -1, + 1663, 1660, 1659, -1,1666, 1663, 1662, -1,1664, 1660, 1663, -1,1657, 1656, 1660, -1, + 1658, 1654, 1657, -1,1651, 1650, 1654, -1,1664, 1663, 1666, -1,1652, 1655, 1485, -1, + 1655, 1652, 1651, -1,1483, 1643, 1484, -1,1484, 1649, 1485, -1,1655, 1486, 1485, -1, + 1649, 1652, 1485, -1,1658, 1661, 1486, -1,1661, 1658, 1657, -1,1661, 1487, 1486, -1, + 1487, 1661, 1664, -1,1667, 1487, 1664, -1,1661, 1660, 1664, -1,1658, 1486, 1655, -1, + 1655, 1654, 1658, -1,1664, 1666, 1667, -1,1483, 1640, 1643, -1,1667, 1669, 1670, -1, + 1672, 1669, 1668, -1,1675, 1676, 1672, -1,1669, 1672, 1673, -1,1672, 1671, 1675, -1, + 1669, 1667, 1666, -1,1682, 1678, 1681, -1,1681, 1678, 1677, -1,1684, 1493, 1492, -1, + 1493, 1684, 1683, -1,1681, 1684, 1685, -1,1681, 1680, 1684, -1,1679, 1675, 1678, -1, + 1675, 1674, 1678, -1,1684, 1492, 1685, -1,1670, 1673, 1488, -1,1673, 1670, 1669, -1, + 1673, 1489, 1488, -1,1489, 1673, 1676, -1,1489, 1676, 1679, -1,1673, 1672, 1676, -1, + 1670, 1488, 1667, -1,1679, 1682, 1490, -1,1682, 1679, 1678, -1,1490, 1685, 1491, -1, + 1685, 1490, 1682, -1,1491, 1685, 1492, -1,1682, 1681, 1685, -1,1679, 1490, 1489, -1, + 1676, 1675, 1679, -1,1667, 1488, 1487, -1,1666, 1665, 1669, -1,1638, 1846, 1641, -1, + 1497, 1496, 1686, -1,1498, 1686, 1863, -1,1686, 1498, 1497, -1,1687, 1863, 1686, -1, + 1686, 1496, 1687, -1,1687, 1495, 1688, -1,1688, 1495, 1494, -1,1687, 1864, 1863, -1, + 1864, 1688, 1865, -1,1688, 1864, 1687, -1,1865, 1688, 1494, -1,1687, 1496, 1495, -1, + 1507, 1506, 1689, -1,1510, 1508, 1507, -1,1507, 1689, 1510, -1,1508, 1510, 1509, -1, + 1692, 1690, 1689, -1,1510, 1689, 1690, -1,1689, 1506, 1692, -1,1695, 1505, 1504, -1, + 1698, 1504, 1503, -1,1690, 1692, 1693, -1,1695, 1692, 1505, -1,1698, 1695, 1504, -1, + 1696, 1692, 1695, -1,1503, 1502, 1698, -1,1505, 1692, 1506, -1,1696, 1695, 1698, -1, + 1690, 1691, 1510, -1,1691, 1690, 1693, -1,1513, 1691, 1694, -1,1510, 1691, 1511, -1, + 1511, 1513, 1512, -1,1513, 1511, 1691, -1,1691, 1693, 1694, -1,1694, 1696, 1697, -1, + 1696, 1694, 1693, -1,1697, 1696, 1699, -1,1694, 1697, 1514, -1,1515, 1514, 1697, -1, + 1516, 1515, 1697, -1,1697, 1700, 1516, -1,1694, 1514, 1513, -1,1693, 1692, 1696, -1, + 1699, 1696, 1698, -1,1701, 1502, 1501, -1,1704, 1501, 1500, -1,1702, 1699, 1701, -1, + 1699, 1698, 1701, -1,1704, 1701, 1501, -1,1704, 1705, 1701, -1,1500, 1707, 1704, -1, + 1701, 1698, 1502, -1,1866, 1499, 1521, -1,1707, 1499, 1866, -1,1521, 1867, 1866, -1, + 1499, 1707, 1500, -1,1708, 1704, 1707, -1,1703, 1700, 1702, -1,1702, 1700, 1699, -1, + 1705, 1702, 1701, -1,1703, 1702, 1705, -1,1517, 1703, 1518, -1,1703, 1517, 1700, -1, + 1706, 1518, 1703, -1,1703, 1705, 1706, -1,1700, 1517, 1516, -1,1709, 1706, 1708, -1, + 1708, 1706, 1705, -1,1866, 1708, 1707, -1,1709, 1708, 1866, -1,1519, 1709, 1868, -1, + 1709, 1519, 1706, -1,1868, 1520, 1519, -1,1709, 1866, 1868, -1,1706, 1519, 1518, -1, + 1705, 1704, 1708, -1,1699, 1700, 1697, -1,1869, 1870, 1710, -1,1711, 1710, 1870, -1, + 1869, 1710, 1871, -1,1711, 1870, 1872, -1,1712, 1872, 1873, -1,1713, 1712, 1873, -1, + 1710, 1874, 1871, -1,1874, 1710, 1711, -1,1874, 1711, 1875, -1,1875, 1712, 1876, -1, + 1712, 1875, 1711, -1,1713, 1876, 1712, -1,1711, 1872, 1712, -1,1713, 1873, 1877, -1, + 1713, 1878, 1714, -1,1878, 1713, 1877, -1,1714, 1878, 1879, -1,1713, 1714, 1880, -1, + 1714, 1879, 1715, -1,1715, 1879, 1881, -1,1716, 1881, 1522, -1,1882, 1713, 1880, -1, + 1880, 1714, 1883, -1,1715, 1716, 1884, -1,1716, 1715, 1881, -1,1885, 1884, 1716, -1, + 1716, 1522, 1885, -1,1715, 1884, 1883, -1,1715, 1883, 1714, -1,1713, 1882, 1876, -1, + 1885, 1886, 1887, -1,1886, 1885, 1888, -1,1886, 1889, 1890, -1,1889, 1886, 1888, -1, + 1891, 1524, 1523, -1,1524, 1891, 1892, -1,1524, 1893, 1894, -1,1893, 1524, 1892, -1, + 1895, 1896, 1717, -1,1897, 1717, 1898, -1,1717, 1897, 1895, -1,1718, 1898, 1717, -1, + 1717, 1896, 1718, -1,1718, 1899, 1719, -1,1719, 1899, 1900, -1,1718, 1901, 1898, -1, + 1901, 1719, 1902, -1,1719, 1901, 1718, -1,1902, 1719, 1900, -1,1718, 1896, 1899, -1, + 1527, 1903, 1904, -1,1905, 1903, 1527, -1,1906, 1907, 1527, -1,1907, 1905, 1527, -1, + 1908, 1906, 1527, -1,1527, 1904, 1909, -1,1531, 1910, 1532, -1,1531, 1530, 1909, -1, + 1528, 1527, 1909, -1,1530, 1529, 1909, -1,1528, 1909, 1529, -1,1531, 1909, 1910, -1, + 1908, 1527, 1911, -1,1911, 1526, 1912, -1,1526, 1911, 1527, -1,1912, 1526, 1525, -1, + 1525, 1556, 1912, -1,1912, 1555, 1913, -1,1556, 1555, 1912, -1,1913, 1555, 1554, -1, + 1913, 1553, 1914, -1,1553, 1913, 1554, -1,1914, 1552, 1551, -1,1552, 1914, 1553, -1, + 1551, 1915, 1914, -1,1915, 1551, 1550, -1,1550, 1916, 1915, -1,1550, 1549, 1916, -1, + 1532, 1910, 1533, -1,1534, 1533, 1917, -1,1917, 1533, 1910, -1,1534, 1917, 1918, -1, + 1534, 1918, 1535, -1,1536, 1919, 1537, -1,1919, 1536, 1535, -1,1918, 1919, 1535, -1, + 1537, 1920, 1538, -1,1920, 1537, 1919, -1,1538, 1920, 1921, -1,1539, 1921, 1922, -1, + 1921, 1539, 1538, -1,1540, 1922, 1541, -1,1922, 1540, 1539, -1,1923, 1547, 1546, -1, + 1924, 1546, 1545, -1,1923, 1546, 1924, -1,1549, 1925, 1916, -1,1925, 1549, 1548, -1, + 1547, 1925, 1548, -1,1925, 1547, 1923, -1,1542, 1926, 1543, -1,1926, 1542, 1927, -1, + 1541, 1927, 1542, -1,1927, 1541, 1922, -1,1545, 1544, 1928, -1,1928, 1543, 1926, -1, + 1543, 1928, 1544, -1,1545, 1928, 1924, -1,1929, 1930, 1561, -1,1720, 1931, 1929, -1, + 1724, 1723, 1720, -1,1723, 1931, 1720, -1,1723, 1726, 1932, -1,1933, 1932, 1726, -1, + 1723, 1932, 1931, -1,1727, 1726, 1723, -1,1720, 1929, 1561, -1,1729, 1934, 1933, -1, + 1735, 1935, 1936, -1,1732, 1936, 1934, -1,1733, 1732, 1729, -1,1732, 1934, 1729, -1, + 1937, 1935, 1738, -1,1936, 1732, 1735, -1,1735, 1738, 1935, -1,1736, 1735, 1732, -1, + 1726, 1729, 1933, -1,1730, 1729, 1726, -1,1721, 1561, 1560, -1,1725, 1724, 1721, -1, + 1720, 1561, 1721, -1,1720, 1721, 1724, -1,1722, 1721, 1560, -1,1725, 1722, 1559, -1, + 1560, 1559, 1722, -1,1728, 1727, 1725, -1,1721, 1722, 1725, -1,1725, 1727, 1724, -1, + 1728, 1725, 1559, -1,1723, 1724, 1727, -1,1734, 1733, 1730, -1,1733, 1729, 1730, -1, + 1739, 1736, 1737, -1,1732, 1733, 1736, -1,1730, 1726, 1727, -1,1737, 1736, 1733, -1, + 1730, 1728, 1731, -1,1734, 1731, 1559, -1,1733, 1734, 1737, -1,1734, 1730, 1731, -1, + 1731, 1728, 1559, -1,1739, 1738, 1736, -1,1727, 1728, 1730, -1,1736, 1738, 1735, -1, + 1737, 1734, 1559, -1,1738, 1938, 1937, -1,1741, 1939, 1938, -1,1747, 1940, 1941, -1, + 1744, 1941, 1939, -1,1741, 1739, 1742, -1,1741, 1738, 1739, -1,1744, 1741, 1745, -1, + 1941, 1744, 1747, -1,1744, 1939, 1741, -1,1744, 1748, 1747, -1,1747, 1750, 1940, -1, + 1938, 1738, 1741, -1,1753, 1942, 1943, -1,1557, 1944, 1945, -1,1756, 1945, 1942, -1, + 1754, 1753, 1750, -1,1943, 1750, 1753, -1,1757, 1756, 1753, -1,1945, 1756, 1557, -1, + 1756, 1942, 1753, -1,1751, 1750, 1747, -1,1940, 1750, 1943, -1,1557, 1756, 1757, -1, + 1742, 1740, 1743, -1,1739, 1740, 1742, -1,1745, 1742, 1746, -1,1744, 1745, 1748, -1, + 1745, 1741, 1742, -1,1748, 1745, 1749, -1,1746, 1743, 1559, -1,1740, 1559, 1743, -1, + 1559, 1749, 1746, -1,1745, 1746, 1749, -1,1746, 1742, 1743, -1,1752, 1749, 1559, -1, + 1749, 1751, 1748, -1,1737, 1559, 1740, -1,1755, 1754, 1751, -1,1750, 1751, 1754, -1, + 1758, 1558, 1757, -1,1557, 1757, 1558, -1,1757, 1753, 1754, -1,1758, 1757, 1754, -1, + 1559, 1755, 1752, -1,1751, 1752, 1755, -1,1755, 1559, 1758, -1,1558, 1758, 1559, -1, + 1758, 1754, 1755, -1,1749, 1752, 1751, -1,1751, 1747, 1748, -1,1737, 1740, 1739, -1, + 1946, 1947, 1948, -1,1759, 1949, 1946, -1,1763, 1762, 1759, -1,1762, 1949, 1759, -1, + 1762, 1765, 1950, -1,1951, 1950, 1765, -1,1762, 1950, 1949, -1,1766, 1765, 1762, -1, + 1759, 1946, 1948, -1,1768, 1952, 1951, -1,1774, 1953, 1954, -1,1771, 1954, 1952, -1, + 1772, 1771, 1768, -1,1771, 1952, 1768, -1,1777, 1774, 1775, -1,1954, 1771, 1774, -1, + 1774, 1777, 1953, -1,1775, 1774, 1771, -1,1765, 1768, 1951, -1,1769, 1768, 1765, -1, + 1760, 1948, 1955, -1,1764, 1763, 1760, -1,1759, 1948, 1760, -1,1759, 1760, 1763, -1, + 1761, 1760, 1955, -1,1764, 1761, 1956, -1,1955, 1956, 1761, -1,1767, 1766, 1764, -1, + 1760, 1761, 1764, -1,1764, 1766, 1763, -1,1767, 1764, 1956, -1,1762, 1763, 1766, -1, + 1769, 1767, 1770, -1,1766, 1767, 1769, -1,1772, 1769, 1773, -1,1772, 1768, 1769, -1, + 1766, 1769, 1765, -1,1775, 1772, 1776, -1,1956, 1773, 1770, -1,1769, 1770, 1773, -1, + 1773, 1956, 1776, -1,1776, 1956, 1779, -1,1776, 1772, 1773, -1,1767, 1956, 1770, -1, + 1775, 1776, 1778, -1,1772, 1775, 1771, -1,1953, 1777, 1957, -1,1780, 1958, 1959, -1, + 1786, 1960, 1961, -1,1783, 1961, 1958, -1,1780, 1777, 1781, -1,1959, 1777, 1780, -1, + 1786, 1783, 1787, -1,1961, 1783, 1786, -1,1783, 1958, 1780, -1,1783, 1780, 1784, -1, + 1786, 1789, 1960, -1,1957, 1777, 1959, -1,1792, 1962, 1963, -1,1964, 1965, 1966, -1, + 1795, 1966, 1962, -1,1792, 1789, 1793, -1,1963, 1789, 1792, -1,1796, 1795, 1792, -1, + 1966, 1795, 1964, -1,1795, 1962, 1792, -1,1790, 1789, 1786, -1,1960, 1789, 1963, -1, + 1796, 1964, 1795, -1,1782, 1781, 1778, -1,1777, 1778, 1781, -1,1788, 1787, 1784, -1, + 1783, 1784, 1787, -1,1784, 1780, 1781, -1,1785, 1784, 1781, -1,1782, 1956, 1785, -1, + 1778, 1779, 1782, -1,1788, 1956, 1791, -1,1784, 1785, 1788, -1,1785, 1781, 1782, -1, + 1785, 1956, 1788, -1,1788, 1790, 1787, -1,1776, 1779, 1778, -1,1794, 1793, 1790, -1, + 1789, 1790, 1793, -1,1797, 1967, 1796, -1,1964, 1796, 1967, -1,1796, 1792, 1793, -1, + 1797, 1796, 1793, -1,1956, 1794, 1791, -1,1790, 1791, 1794, -1,1794, 1956, 1797, -1, + 1967, 1797, 1956, -1,1797, 1793, 1794, -1,1788, 1791, 1790, -1,1790, 1786, 1787, -1, + 1779, 1956, 1782, -1,1775, 1778, 1777, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 1, 2, -1,2, 3, 0, -1,4, 1, 0, -1,0, 5, 5, -1,5, 5, 0, -1,3, 6, 0, -1,6, 7, 0, -1, + 6, 8, 9, -1,9, 10, 6, -1,8, 6, 3, -1,5, 6, 5, -1,5, 6, 5, -1,5, 5, 6, -1,5, 11, 6, -1, + 5, 5, 0, -1,5, 5, 7, -1,7, 5, 5, -1,5, 7, 5, -1,12, 13, 7, -1,7, 14, 12, -1,6, 11, + 7, -1,14, 7, 15, -1,5, 5, 11, -1,11, 5, 5, -1,5, 11, 5, -1,16, 11, 17, -1,17, 11, + 18, -1,15, 11, 16, -1,11, 15, 7, -1,7, 5, 0, -1,19, 20, 21, -1,22, 23, 24, -1,25, + 21, 26, -1,27, 26, 28, -1,29, 21, 25, -1,21, 29, 19, -1,30, 28, 31, -1,28, 32, 27, -1, + 33, 25, 26, -1,33, 26, 27, -1,28, 34, 31, -1,20, 19, 35, -1,34, 36, 37, -1,38, 39, + 36, -1,40, 41, 38, -1,38, 23, 22, -1,42, 43, 34, -1,44, 45, 23, -1,34, 43, 31, -1, + 38, 22, 40, -1,31, 43, 46, -1,47, 27, 32, -1,48, 49, 30, -1,31, 48, 30, -1,29, 50, + 19, -1,29, 25, 33, -1,33, 27, 47, -1,32, 28, 30, -1,34, 37, 42, -1,50, 35, 19, -1, + 46, 43, 51, -1,48, 31, 46, -1,52, 51, 43, -1,53, 24, 23, -1,54, 44, 55, -1,56, 57, + 58, -1,56, 55, 57, -1,57, 59, 58, -1,60, 61, 59, -1,62, 63, 64, -1,36, 65, 66, -1, + 67, 68, 69, -1,70, 63, 62, -1,71, 72, 73, -1,71, 74, 67, -1,37, 36, 75, -1,62, 69, + 76, -1,66, 75, 36, -1,60, 77, 61, -1,36, 39, 65, -1,78, 72, 79, -1,80, 81, 82, -1, + 83, 84, 80, -1,82, 81, 68, -1,81, 80, 84, -1,67, 85, 68, -1,85, 67, 74, -1,72, 86, + 73, -1,72, 78, 87, -1,71, 73, 88, -1,71, 88, 74, -1,88, 85, 74, -1,86, 72, 87, -1, + 89, 87, 78, -1,88, 73, 86, -1,42, 52, 43, -1,78, 79, 89, -1,68, 85, 82, -1,81, 69, + 68, -1,39, 38, 41, -1,23, 45, 53, -1,54, 45, 44, -1,57, 55, 44, -1,60, 59, 57, -1, + 62, 64, 60, -1,60, 64, 77, -1,62, 76, 90, -1,90, 70, 62, -1,76, 69, 84, -1,81, 84, + 69, -1,80, 83, 83, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,92, 93, 94, -1,91, 93, 91, -1,92, 91, 91, -1,91, 93, + 91, -1,91, 93, 92, -1,92, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, + 91, -1,91, 91, 95, -1,91, 91, 91, -1,91, 91, 95, -1,96, 97, 98, -1,91, 91, 95, -1, + 98, 95, 99, -1,91, 91, 91, -1,91, 91, 93, -1,91, 91, 91, -1,91, 91, 91, -1,94, 93, + 100, -1,92, 94, 101, -1,91, 100, 93, -1,101, 91, 92, -1,91, 92, 91, -1,91, 92, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 92, 91, -1,91, 91, 92, -1,91, 91, 91, -1,98, 99, + 96, -1,96, 102, 97, -1,91, 103, 91, -1,102, 91, 103, -1,97, 102, 103, -1,95, 104, + 99, -1,91, 91, 95, -1,91, 95, 91, -1,95, 91, 104, -1,95, 91, 91, -1,91, 95, 91, -1, + 95, 91, 91, -1,91, 91, 95, -1,91, 91, 91, -1,105, 106, 107, -1,107, 106, 108, -1, + 109, 105, 110, -1,105, 107, 110, -1,111, 110, 107, -1,108, 111, 107, -1,110, 112, + 109, -1,106, 113, 108, -1,113, 114, 115, -1,114, 113, 106, -1,115, 114, 116, -1,113, + 115, 117, -1,118, 116, 119, -1,116, 120, 115, -1,118, 119, 121, -1,115, 122, 117, -1, + 122, 115, 120, -1,122, 120, 123, -1,123, 118, 124, -1,118, 123, 120, -1,125, 124, + 118, -1,118, 121, 125, -1,120, 116, 118, -1,113, 117, 108, -1,126, 127, 128, -1,129, + 126, 130, -1,126, 129, 127, -1,127, 131, 128, -1,132, 133, 134, -1,128, 134, 135, -1, + 134, 128, 132, -1,133, 136, 134, -1,132, 128, 131, -1,126, 128, 137, -1,137, 128, + 135, -1,138, 129, 130, -1,130, 126, 137, -1,136, 139, 140, -1,141, 139, 136, -1,142, + 134, 140, -1,142, 135, 134, -1,136, 140, 134, -1,136, 133, 143, -1,143, 144, 141, -1, + 141, 145, 146, -1,145, 141, 144, -1,144, 147, 145, -1,141, 146, 139, -1,147, 148, + 149, -1,149, 150, 151, -1,150, 149, 148, -1,145, 147, 152, -1,152, 147, 149, -1,153, + 146, 145, -1,145, 154, 153, -1,155, 153, 156, -1,156, 153, 154, -1,145, 152, 154, -1, + 149, 151, 152, -1,141, 136, 143, -1,157, 158, 158, -1,159, 160, 161, -1,162, 159, + 163, -1,164, 165, 160, -1,165, 166, 161, -1,161, 166, 167, -1,161, 163, 159, -1,168, + 163, 169, -1,167, 163, 161, -1,170, 168, 171, -1,168, 162, 163, -1,166, 172, 167, -1, + 160, 165, 161, -1,157, 173, 174, -1,162, 168, 175, -1,176, 175, 170, -1,177, 176, + 178, -1,179, 177, 178, -1,178, 170, 180, -1,179, 178, 181, -1,179, 182, 177, -1,183, + 184, 185, -1,183, 182, 179, -1,186, 183, 179, -1,183, 185, 182, -1,184, 183, 187, -1, + 178, 176, 170, -1,175, 168, 170, -1,167, 169, 163, -1,167, 188, 169, -1,188, 167, + 172, -1,188, 172, 189, -1,169, 188, 190, -1,180, 171, 191, -1,190, 171, 169, -1,191, + 171, 190, -1,171, 180, 170, -1,192, 190, 188, -1,169, 171, 168, -1,193, 190, 192, -1, + 194, 191, 195, -1,191, 190, 193, -1,195, 191, 193, -1,191, 194, 180, -1,180, 194, + 196, -1,181, 196, 186, -1,181, 180, 196, -1,187, 186, 197, -1,181, 186, 179, -1,187, + 198, 199, -1,200, 198, 187, -1,187, 199, 184, -1,197, 186, 196, -1,186, 187, 183, -1, + 196, 201, 197, -1,201, 196, 195, -1,197, 201, 200, -1,157, 202, 202, -1,200, 157, + 203, -1,197, 200, 187, -1,194, 195, 196, -1,157, 204, 203, -1,180, 181, 178, -1,157, + 174, 204, -1,198, 200, 203, -1,205, 205, 205, -1,200, 201, 157, -1,192, 188, 189, -1, + 206, 206, 207, -1,206, 206, 206, -1,206, 206, 207, -1,206, 207, 206, -1,208, 209, + 210, -1,206, 210, 207, -1,207, 210, 209, -1,206, 207, 206, -1,211, 212, 213, -1,212, + 211, 214, -1,213, 215, 216, -1,215, 213, 212, -1,205, 205, 205, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,217, 218, 219, -1,220, + 217, 219, -1,221, 222, 219, -1,219, 223, 220, -1,223, 219, 222, -1,224, 225, 226, -1, + 227, 225, 224, -1,228, 224, 229, -1,224, 228, 227, -1,226, 229, 224, -1,226, 225, + 230, -1,231, 226, 232, -1,232, 226, 230, -1,231, 232, 233, -1,234, 226, 235, -1,231, + 236, 235, -1,236, 231, 233, -1,226, 231, 235, -1,226, 234, 229, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,237, 238, 239, -1,237, 239, 240, -1,241, + 242, 243, -1,244, 245, 246, -1,247, 238, 248, -1,241, 249, 248, -1,250, 251, 252, -1, + 253, 254, 239, -1,254, 240, 239, -1,255, 254, 256, -1,257, 258, 259, -1,258, 257, + 242, -1,260, 261, 262, -1,258, 263, 259, -1,261, 258, 262, -1,262, 264, 265, -1,266, + 265, 267, -1,267, 268, 269, -1,264, 262, 258, -1,270, 267, 269, -1,263, 258, 261, -1, + 267, 270, 271, -1,266, 267, 271, -1,270, 272, 271, -1,260, 273, 261, -1,274, 274, + 269, -1,275, 246, 245, -1,253, 256, 254, -1,240, 254, 276, -1,277, 271, 272, -1,278, + 277, 272, -1,278, 272, 279, -1,279, 272, 270, -1,267, 265, 264, -1,280, 281, 282, -1, + 283, 284, 283, -1,280, 285, 268, -1,279, 286, 278, -1,287, 288, 289, -1,289, 288, + 290, -1,287, 291, 281, -1,292, 293, 294, -1,293, 295, 296, -1,288, 292, 297, -1,298, + 295, 299, -1,252, 300, 301, -1,301, 300, 290, -1,288, 301, 290, -1,302, 301, 297, -1, + 301, 288, 297, -1,303, 294, 296, -1,294, 293, 296, -1,292, 294, 297, -1,304, 297, + 294, -1,295, 298, 296, -1,299, 305, 298, -1,246, 289, 244, -1,298, 306, 296, -1,307, + 308, 250, -1,309, 250, 310, -1,307, 250, 309, -1,252, 302, 250, -1,302, 252, 301, -1, + 304, 311, 302, -1,302, 312, 250, -1,302, 297, 304, -1,250, 308, 251, -1,313, 303, + 306, -1,306, 303, 296, -1,305, 314, 306, -1,315, 316, 317, -1,306, 298, 305, -1,318, + 304, 303, -1,304, 294, 303, -1,314, 313, 306, -1,312, 311, 319, -1,311, 312, 302, -1, + 283, 315, 283, -1,319, 320, 312, -1,311, 318, 319, -1,312, 320, 250, -1,318, 313, + 321, -1,313, 318, 303, -1,316, 275, 322, -1,323, 321, 313, -1,313, 314, 323, -1,318, + 321, 319, -1,311, 304, 318, -1,250, 320, 310, -1,300, 252, 251, -1,322, 317, 316, -1, + 284, 274, 274, -1,324, 325, 326, -1,239, 324, 327, -1,327, 324, 328, -1,326, 328, + 324, -1,329, 330, 331, -1,325, 329, 332, -1,332, 329, 331, -1,333, 334, 335, -1,330, + 333, 336, -1,335, 336, 333, -1,257, 337, 338, -1,334, 338, 339, -1,337, 339, 338, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,340, 341, 342, -1,343, 340, + 342, -1,342, 344, 345, -1,344, 342, 341, -1,342, 345, 346, -1,347, 348, 349, -1,346, + 348, 342, -1,349, 348, 346, -1,350, 351, 347, -1,352, 353, 351, -1,351, 350, 352, -1, + 350, 347, 349, -1,354, 355, 356, -1,357, 352, 354, -1,356, 202, 358, -1,356, 358, + 359, -1,360, 354, 356, -1,356, 361, 360, -1,360, 357, 354, -1,356, 362, 363, -1,363, + 361, 356, -1,356, 359, 362, -1,358, 364, 359, -1,352, 357, 353, -1,365, 366, 367, -1, + 368, 367, 369, -1,365, 367, 370, -1,368, 370, 367, -1,367, 366, 369, -1,371, 372, + 373, -1,374, 369, 371, -1,369, 374, 368, -1,371, 375, 374, -1,375, 371, 373, -1,369, + 372, 371, -1,372, 369, 366, -1,376, 377, 378, -1,379, 377, 380, -1,381, 380, 377, -1, + 381, 377, 376, -1,381, 382, 380, -1,383, 384, 379, -1,385, 386, 387, -1,386, 385, + 388, -1,385, 387, 389, -1,379, 380, 383, -1,390, 389, 391, -1,389, 390, 385, -1,391, + 392, 393, -1,392, 391, 389, -1,393, 394, 395, -1,394, 393, 392, -1,386, 384, 383, -1, + 384, 386, 388, -1,396, 397, 398, -1,399, 400, 396, -1,401, 402, 403, -1,403, 404, + 405, -1,404, 406, 398, -1,406, 404, 403, -1,404, 398, 397, -1,403, 405, 401, -1,399, + 396, 398, -1,395, 407, 408, -1,408, 407, 409, -1,395, 408, 393, -1,409, 410, 411, -1, + 410, 409, 407, -1,411, 410, 412, -1,400, 413, 414, -1,414, 413, 415, -1,412, 416, + 417, -1,416, 412, 410, -1,417, 415, 413, -1,415, 417, 416, -1,399, 413, 400, -1,418, + 419, 420, -1,418, 420, 421, -1,422, 423, 424, -1,425, 421, 426, -1,427, 418, 421, -1, + 428, 429, 426, -1,425, 426, 429, -1,426, 430, 431, -1,432, 430, 422, -1,423, 422, + 433, -1,434, 430, 432, -1,433, 435, 423, -1,424, 432, 422, -1,436, 437, 433, -1,437, + 435, 433, -1,436, 438, 439, -1,430, 434, 431, -1,437, 440, 441, -1,440, 437, 436, -1, + 439, 442, 443, -1,442, 439, 438, -1,440, 436, 439, -1,440, 439, 444, -1,444, 441, + 440, -1,443, 444, 439, -1,437, 441, 445, -1,442, 446, 443, -1,435, 437, 447, -1,448, + 449, 450, -1,438, 451, 442, -1,452, 453, 454, -1,454, 455, 456, -1,450, 457, 456, -1, + 451, 458, 459, -1,460, 458, 455, -1,449, 457, 450, -1,448, 461, 462, -1,448, 450, + 461, -1,456, 457, 452, -1,463, 461, 464, -1,465, 464, 466, -1,421, 425, 427, -1,467, + 466, 468, -1,464, 469, 463, -1,466, 470, 465, -1,471, 467, 468, -1,472, 464, 465, -1, + 461, 463, 462, -1,426, 431, 428, -1,206, 459, 446, -1,206, 451, 459, -1,460, 473, + 474, -1,460, 455, 473, -1,458, 460, 459, -1,459, 460, 475, -1,446, 459, 475, -1,473, + 476, 474, -1,474, 475, 460, -1,476, 454, 477, -1,476, 473, 454, -1,455, 454, 473, -1, + 206, 446, 442, -1,453, 477, 454, -1,456, 452, 454, -1,467, 470, 466, -1,451, 206, + 442, -1,472, 469, 464, -1,437, 445, 447, -1,478, 479, 480, -1,477, 481, 479, -1,478, + 482, 479, -1,477, 479, 482, -1,479, 481, 483, -1,484, 485, 486, -1,483, 480, 479, -1, + 483, 485, 480, -1,487, 478, 484, -1,487, 484, 486, -1,485, 484, 480, -1,484, 478, + 480, -1,488, 489, 490, -1,491, 490, 492, -1,493, 492, 494, -1,488, 490, 491, -1,494, + 495, 493, -1,493, 491, 492, -1,489, 488, 496, -1,497, 498, 499, -1,500, 497, 499, -1, + 499, 496, 501, -1,496, 499, 489, -1,501, 502, 499, -1,499, 502, 500, -1,503, 504, + 505, -1,506, 503, 505, -1,507, 508, 509, -1,509, 510, 511, -1,506, 508, 503, -1,512, + 511, 510, -1,493, 495, 503, -1,503, 508, 507, -1,507, 509, 511, -1,513, 514, 511, -1, + 511, 514, 507, -1,512, 515, 511, -1,503, 495, 504, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, + 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,516, 517, + 518, -1,518, 519, 516, -1,520, 519, 518, -1,521, 518, 517, -1,522, 523, 524, -1,524, + 518, 521, -1,524, 525, 522, -1,524, 521, 525, -1,526, 527, 528, -1,529, 530, 526, -1, + 531, 532, 527, -1,527, 533, 528, -1,528, 533, 534, -1,535, 526, 528, -1,535, 528, + 536, -1,537, 536, 528, -1,536, 537, 538, -1,528, 534, 537, -1,529, 526, 535, -1,527, + 532, 533, -1,539, 529, 535, -1,540, 541, 542, -1,543, 540, 544, -1,545, 546, 547, -1, + 543, 548, 546, -1,542, 541, 549, -1,549, 529, 550, -1,542, 549, 551, -1,544, 540, + 542, -1,546, 548, 547, -1,543, 544, 548, -1,548, 552, 547, -1,553, 552, 548, -1,554, + 548, 544, -1,542, 555, 544, -1,541, 530, 549, -1,530, 529, 549, -1,531, 527, 556, -1, + 535, 536, 539, -1,538, 557, 558, -1,559, 558, 560, -1,558, 539, 536, -1,539, 550, + 529, -1,550, 539, 559, -1,559, 561, 550, -1,562, 561, 559, -1,539, 558, 559, -1,563, + 550, 561, -1,564, 558, 557, -1,558, 536, 538, -1,560, 562, 559, -1,560, 564, 565, -1, + 566, 561, 562, -1,558, 564, 560, -1,563, 561, 566, -1,551, 563, 555, -1,563, 551, + 550, -1,555, 563, 567, -1,551, 555, 542, -1,554, 553, 548, -1,568, 553, 554, -1,567, + 568, 554, -1,553, 569, 570, -1,554, 555, 567, -1,553, 570, 552, -1,563, 571, 567, -1, + 555, 554, 544, -1,572, 568, 567, -1,572, 573, 568, -1,568, 569, 553, -1,569, 568, + 574, -1,574, 575, 569, -1,568, 573, 574, -1,569, 575, 570, -1,205, 205, 205, -1,572, + 567, 571, -1,563, 566, 571, -1,576, 527, 576, -1,550, 551, 549, -1,205, 205, 205, -1, + 206, 206, 206, -1,206, 206, 206, -1,206, 206, 206, -1,206, 206, 206, -1,206, 206, + 206, -1,206, 206, 206, -1,577, 578, 579, -1,579, 580, 577, -1,577, 581, 582, -1,577, + 583, 578, -1,577, 582, 583, -1,581, 577, 580, -1,584, 585, 586, -1,584, 587, 585, -1, + 586, 588, 584, -1,589, 590, 591, -1,592, 591, 590, -1,591, 587, 589, -1,589, 587, + 584, -1,593, 594, 595, -1,596, 597, 598, -1,597, 599, 600, -1,593, 596, 594, -1,601, + 600, 599, -1,594, 602, 595, -1,602, 594, 603, -1,598, 600, 604, -1,600, 598, 597, -1, + 598, 604, 603, -1,604, 600, 605, -1,605, 600, 601, -1,598, 603, 594, -1,594, 596, + 598, -1,601, 599, 606, -1,607, 608, 609, -1,601, 609, 610, -1,609, 601, 607, -1,608, + 611, 609, -1,607, 601, 606, -1,611, 612, 613, -1,613, 612, 614, -1,612, 611, 608, -1, + 609, 611, 615, -1,616, 601, 610, -1,617, 615, 611, -1,610, 609, 615, -1,613, 618, + 619, -1,618, 613, 614, -1,617, 613, 619, -1,617, 611, 613, -1,601, 616, 605, -1,206, + 206, 206, -1,206, 206, 206, -1,206, 206, 206, -1,5, 5, 5, -1,5, 5, 5, -1,5, 5, 5, -1, + 620, 621, 622, -1,623, 621, 620, -1,624, 620, 622, -1,620, 624, 623, -1,623, 624, + 625, -1,626, 621, 623, -1,627, 628, 629, -1,630, 631, 632, -1,627, 629, 633, -1,629, + 628, 634, -1,635, 630, 636, -1,637, 638, 639, -1,637, 640, 641, -1,640, 637, 639, -1, + 642, 643, 640, -1,640, 643, 644, -1,640, 639, 642, -1,645, 638, 637, -1,646, 642, + 647, -1,648, 647, 649, -1,646, 648, 650, -1,648, 646, 647, -1,651, 652, 653, -1,654, + 652, 651, -1,648, 649, 651, -1,648, 651, 655, -1,651, 649, 654, -1,642, 646, 643, -1, + 643, 646, 656, -1,645, 637, 657, -1,658, 659, 660, -1,661, 662, 663, -1,657, 664, + 665, -1,635, 662, 661, -1,665, 664, 666, -1,657, 637, 664, -1,664, 637, 641, -1,667, + 664, 641, -1,668, 644, 656, -1,644, 643, 656, -1,650, 655, 669, -1,650, 648, 655, -1, + 646, 650, 656, -1,656, 650, 670, -1,640, 644, 641, -1,671, 641, 644, -1,651, 653, + 655, -1,658, 660, 672, -1,652, 673, 653, -1,669, 655, 653, -1,674, 675, 676, -1,677, + 678, 679, -1,680, 681, 679, -1,682, 680, 683, -1,677, 679, 681, -1,684, 685, 686, -1, + 687, 684, 686, -1,686, 688, 687, -1,689, 686, 685, -1,674, 689, 685, -1,690, 691, + 692, -1,691, 676, 675, -1,690, 692, 693, -1,683, 690, 693, -1,682, 683, 693, -1,680, + 679, 683, -1,689, 674, 676, -1,692, 691, 675, -1,694, 695, 696, -1,678, 697, 679, -1, + 698, 628, 631, -1,628, 699, 631, -1,631, 700, 632, -1,701, 631, 630, -1,702, 661, + 658, -1,658, 661, 659, -1,703, 658, 666, -1,630, 661, 704, -1,630, 635, 661, -1,702, + 658, 703, -1,666, 667, 705, -1,667, 666, 664, -1,671, 667, 641, -1,705, 667, 706, -1, + 668, 707, 671, -1,667, 671, 708, -1,709, 668, 670, -1,669, 670, 650, -1,668, 656, + 670, -1,710, 670, 669, -1,671, 644, 668, -1,666, 705, 703, -1,658, 665, 666, -1,697, + 628, 698, -1,698, 631, 711, -1,712, 713, 714, -1,701, 630, 704, -1,704, 661, 715, -1, + 631, 701, 711, -1,716, 717, 718, -1,702, 715, 661, -1,706, 667, 708, -1,708, 671, + 707, -1,709, 670, 710, -1,668, 709, 707, -1,669, 719, 710, -1,665, 658, 672, -1,719, + 669, 720, -1,697, 678, 634, -1,628, 697, 634, -1,721, 722, 723, -1,669, 653, 720, -1, + 717, 724, 725, -1,654, 725, 673, -1,726, 717, 716, -1,726, 727, 717, -1,728, 729, + 730, -1,731, 730, 729, -1,729, 732, 731, -1,673, 725, 724, -1,724, 717, 727, -1,713, + 733, 727, -1,712, 727, 733, -1,727, 734, 724, -1,712, 733, 713, -1,735, 714, 722, -1, + 673, 724, 734, -1,714, 723, 722, -1,729, 736, 732, -1,737, 738, 739, -1,738, 737, + 721, -1,737, 739, 740, -1,739, 731, 732, -1,741, 739, 732, -1,732, 736, 742, -1,722, + 721, 735, -1,736, 729, 743, -1,740, 721, 737, -1,729, 744, 743, -1,745, 653, 673, -1, + 746, 744, 747, -1,694, 748, 749, -1,744, 749, 747, -1,750, 695, 694, -1,750, 751, + 752, -1,750, 753, 751, -1,744, 746, 754, -1,755, 756, 757, -1,753, 755, 758, -1,758, + 755, 757, -1,759, 760, 757, -1,756, 759, 757, -1,753, 758, 751, -1,754, 746, 761, -1, + 762, 761, 763, -1,764, 765, 744, -1,764, 744, 754, -1,749, 748, 747, -1,696, 748, + 694, -1,695, 750, 752, -1,763, 761, 746, -1,744, 765, 743, -1,745, 734, 766, -1,745, + 673, 734, -1,734, 727, 712, -1,734, 712, 766, -1,720, 767, 768, -1,767, 720, 745, -1, + 766, 767, 745, -1,767, 766, 769, -1,712, 770, 766, -1,720, 653, 745, -1,721, 740, + 735, -1,735, 712, 714, -1,739, 741, 740, -1,770, 735, 771, -1,741, 772, 740, -1,735, + 740, 773, -1,774, 741, 742, -1,741, 774, 775, -1,735, 770, 712, -1,741, 732, 742, -1, + 766, 770, 776, -1,766, 776, 769, -1,769, 768, 767, -1,770, 777, 776, -1,777, 770, + 778, -1,771, 779, 778, -1,778, 770, 771, -1,780, 773, 772, -1,772, 773, 740, -1,781, + 772, 775, -1,782, 772, 781, -1,783, 779, 773, -1,782, 780, 772, -1,783, 773, 780, -1, + 781, 784, 782, -1,773, 779, 771, -1,771, 735, 773, -1,636, 630, 632, -1,741, 775, + 772, -1,720, 768, 719, -1,785, 786, 787, -1,785, 788, 782, -1,789, 790, 787, -1,791, + 789, 787, -1,786, 791, 787, -1,787, 788, 785, -1,785, 782, 784, -1,631, 699, 700, -1, + 628, 627, 699, -1,673, 652, 654, -1,659, 661, 663, -1,792, 793, 794, -1,794, 795, + 796, -1,795, 794, 793, -1,793, 797, 795, -1,792, 794, 798, -1,799, 800, 801, -1,801, + 800, 797, -1,801, 802, 799, -1,797, 800, 795, -1,795, 800, 803, -1,798, 794, 796, -1, + 804, 805, 806, -1,800, 807, 803, -1,803, 796, 795, -1,808, 807, 799, -1,799, 809, + 808, -1,810, 805, 804, -1,799, 807, 800, -1,802, 811, 799, -1,812, 811, 813, -1,804, + 806, 813, -1,810, 804, 814, -1,815, 816, 817, -1,814, 804, 817, -1,817, 804, 815, -1, + 812, 818, 819, -1,818, 812, 820, -1,819, 809, 812, -1,809, 799, 812, -1,821, 813, + 806, -1,821, 806, 822, -1,822, 820, 821, -1,821, 820, 812, -1,812, 813, 821, -1,812, + 799, 811, -1,823, 824, 825, -1,826, 827, 828, -1,823, 828, 827, -1,829, 828, 823, -1, + 830, 828, 829, -1,829, 823, 825, -1,831, 832, 833, -1,832, 831, 834, -1,835, 834, + 831, -1,836, 835, 831, -1,837, 834, 835, -1,831, 838, 836, -1,833, 839, 840, -1,833, + 838, 831, -1,833, 840, 841, -1,841, 840, 842, -1,838, 833, 843, -1,844, 841, 845, -1, + 844, 843, 833, -1,845, 841, 842, -1,841, 844, 833, -1,833, 832, 839, -1,846, 847, + 848, -1,849, 846, 850, -1,848, 850, 846, -1,851, 847, 205, -1,851, 848, 847, -1,852, + 848, 851, -1,205, 852, 851, -1,851, 205, 205, -1,853, 854, 855, -1,855, 856, 857, -1, + 856, 855, 854, -1,857, 858, 859, -1,860, 855, 861, -1,859, 861, 857, -1,861, 855, + 857, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,862, + 863, 864, -1,863, 862, 865, -1,866, 867, 863, -1,867, 866, 868, -1,866, 863, 865, -1, + 863, 867, 869, -1,869, 864, 863, -1,870, 869, 867, -1,867, 871, 870, -1,872, 873, + 867, -1,874, 871, 873, -1,871, 867, 873, -1,875, 873, 872, -1,873, 875, 876, -1,873, + 876, 874, -1,867, 868, 872, -1,877, 878, 879, -1,880, 878, 881, -1,878, 882, 883, -1, + 878, 883, 881, -1,882, 878, 877, -1,884, 877, 885, -1,877, 879, 885, -1,5, 882, 5, -1, + 5, 5, 5, -1,877, 5, 882, -1,5, 5, 5, -1,882, 5, 5, -1,886, 887, 888, -1,888, 5, 5, -1, + 886, 889, 890, -1,887, 886, 890, -1,886, 888, 891, -1,5, 5, 888, -1,5, 5, 5, -1,891, + 892, 893, -1,892, 891, 894, -1,888, 5, 891, -1,893, 886, 891, -1,5, 5, 5, -1,91, + 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,895, 896, + 897, -1,896, 895, 898, -1,899, 896, 900, -1,901, 900, 896, -1,896, 899, 897, -1,896, + 898, 901, -1,902, 901, 903, -1,903, 901, 898, -1,902, 903, 904, -1,901, 905, 906, -1, + 905, 901, 902, -1,905, 902, 907, -1,907, 902, 904, -1,901, 906, 900, -1,205, 205, + 205, -1,205, 205, 205, -1,91, 91, 91, -1,205, 205, 205, -1,908, 909, 910, -1,911, + 910, 912, -1,909, 912, 910, -1,910, 911, 913, -1,914, 909, 908, -1,910, 913, 908, -1, + 908, 913, 915, -1,916, 908, 915, -1,914, 908, 916, -1,916, 917, 914, -1,917, 916, + 918, -1,916, 915, 918, -1,919, 920, 921, -1,922, 920, 919, -1,923, 919, 921, -1,924, + 922, 925, -1,920, 922, 924, -1,926, 924, 925, -1,927, 922, 919, -1,927, 928, 922, -1, + 919, 923, 927, -1,929, 930, 931, -1,931, 930, 925, -1,928, 931, 925, -1,922, 928, + 925, -1,930, 926, 925, -1,930, 932, 933, -1,932, 930, 934, -1,926, 930, 933, -1,935, + 936, 937, -1,936, 932, 934, -1,938, 935, 939, -1,940, 934, 941, -1,930, 941, 934, -1, + 937, 934, 940, -1,942, 939, 937, -1,935, 937, 939, -1,939, 942, 917, -1,917, 938, + 939, -1,940, 942, 937, -1,937, 936, 934, -1,929, 941, 930, -1,943, 944, 945, -1,943, + 946, 944, -1,947, 948, 943, -1,949, 943, 948, -1,943, 949, 946, -1,947, 943, 945, -1, + 947, 950, 951, -1,948, 947, 951, -1,945, 950, 947, -1,948, 951, 952, -1,952, 951, + 953, -1,951, 950, 953, -1,205, 205, 205, -1,91, 91, 91, -1,952, 91, 91, -1,91, 91, + 91, -1,954, 955, 956, -1,957, 955, 954, -1,958, 954, 956, -1,958, 959, 954, -1,957, + 954, 959, -1,960, 957, 959, -1,957, 961, 955, -1,962, 963, 964, -1,957, 962, 964, -1, + 965, 957, 960, -1,965, 966, 962, -1,963, 962, 966, -1,957, 965, 962, -1,964, 961, + 957, -1,967, 968, 969, -1,970, 969, 971, -1,968, 971, 969, -1,970, 970, 971, -1,972, + 973, 974, -1,974, 973, 975, -1,976, 974, 977, -1,975, 977, 974, -1,974, 976, 972, -1, + 978, 973, 972, -1,979, 972, 980, -1,978, 972, 979, -1,981, 979, 980, -1,982, 972, + 983, -1,982, 984, 980, -1,981, 980, 984, -1,982, 980, 972, -1,976, 983, 972, -1,985, + 986, 987, -1,988, 985, 987, -1,985, 989, 990, -1,988, 989, 985, -1,991, 990, 992, -1, + 993, 994, 995, -1,991, 993, 985, -1,993, 996, 994, -1,996, 993, 991, -1,985, 990, + 991, -1,992, 997, 991, -1,998, 999, 997, -1,1000, 999, 998, -1,1001, 1002, 1003, -1, + 1000, 1002, 1001, -1,1001, 1003, 1004, -1,1005, 1006, 1007, -1,1006, 1005, 999, -1, + 1001, 1006, 999, -1,1008, 1007, 1006, -1,1000, 1001, 999, -1,1004, 1009, 1001, -1, + 997, 999, 991, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,1010, + 1011, 1012, -1,1011, 1013, 1012, -1,1010, 1012, 1014, -1,205, 1015, 205, -1,1015, + 205, 1016, -1,1014, 1015, 1016, -1,1016, 1010, 1014, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 1017, -1,1017, 1018, 205, -1, + 1018, 1017, 1019, -1,1019, 1020, 1018, -1,1020, 1019, 1021, -1,1021, 205, 1020, -1, + 205, 205, 1021, -1,1022, 1013, 1011, -1,205, 1013, 205, -1,205, 205, 205, -1,1013, + 1022, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,1023, 1024, 1025, -1,1024, 1026, + 1027, -1,1028, 1024, 1027, -1,1024, 1028, 1025, -1,1026, 1029, 1027, -1,1029, 1026, + 1030, -1,1026, 1031, 1030, -1,1023, 1025, 1032, -1,1031, 1033, 1034, -1,1034, 1033, + 1035, -1,1036, 1037, 1038, -1,1033, 1038, 1039, -1,1040, 1036, 1041, -1,1042, 1041, + 1043, -1,1030, 1031, 1044, -1,1044, 1031, 1034, -1,1032, 1025, 1028, -1,1035, 1033, + 1039, -1,1030, 1044, 1029, -1,1027, 1029, 1028, -1,1034, 1035, 1044, -1,1039, 1045, + 1035, -1,1037, 1046, 1047, -1,1046, 1037, 1036, -1,1040, 1046, 1036, -1,1046, 1040, + 1047, -1,1045, 1037, 1047, -1,1048, 1049, 1042, -1,1049, 1047, 1040, -1,1042, 1049, + 1040, -1,1040, 1041, 1042, -1,1045, 1039, 1038, -1,1038, 1037, 1045, -1,1042, 1043, + 5, -1,5, 1043, 1050, -1,1050, 1043, 1051, -1,1052, 1051, 1053, -1,1050, 1052, 1054, -1, + 1052, 1050, 1051, -1,1055, 1052, 1053, -1,1052, 1055, 1056, -1,1053, 1057, 1055, -1, + 5, 1050, 1048, -1,1057, 1058, 1059, -1,1060, 1058, 1061, -1,1062, 1063, 1064, -1, + 1061, 1064, 1065, -1,1066, 1062, 1067, -1,1068, 1067, 1069, -1,1058, 1057, 1053, -1, + 1055, 1057, 1056, -1,1056, 1057, 1059, -1,1056, 1054, 1052, -1,1070, 1061, 1065, -1, + 1060, 1061, 1070, -1,1050, 1054, 1048, -1,1070, 1059, 1060, -1,1065, 1071, 1070, -1, + 1060, 1059, 1058, -1,1062, 1072, 1063, -1,1072, 1062, 1066, -1,1073, 1067, 1068, -1, + 1067, 1073, 1066, -1,1071, 1063, 1072, -1,1072, 1066, 1073, -1,1068, 1074, 1073, -1, + 1068, 1069, 1074, -1,1071, 1065, 1064, -1,1064, 1063, 1071, -1,5, 1048, 1042, -1, + 1075, 205, 205, -1,1076, 1077, 1075, -1,205, 1075, 1078, -1,205, 1078, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,1078, 1077, 1079, -1,1077, 1080, + 1079, -1,1077, 1076, 1081, -1,205, 205, 205, -1,205, 205, 1078, -1,1078, 1079, 205, -1, + 1077, 1078, 1075, -1,1082, 205, 205, -1,1083, 1084, 1082, -1,205, 1083, 1082, -1, + 205, 1083, 205, -1,205, 205, 205, -1,205, 205, 1078, -1,205, 205, 205, -1,205, 205, + 205, -1,1085, 1086, 1085, -1,205, 1085, 1085, -1,1085, 1078, 205, -1,205, 205, 205, -1, + 205, 1085, 205, -1,205, 1085, 205, -1,1078, 1085, 205, -1,205, 1082, 205, -1,1087, + 1088, 1089, -1,1088, 1090, 1091, -1,1092, 1088, 1091, -1,1088, 1092, 1089, -1,1090, + 1093, 1091, -1,1093, 1090, 1094, -1,1090, 1095, 1094, -1,1087, 1089, 1096, -1,1095, + 1097, 1098, -1,1098, 1097, 1099, -1,1100, 1101, 1102, -1,1097, 1102, 1103, -1,1104, + 1100, 1105, -1,1106, 1105, 1107, -1,1094, 1095, 1108, -1,1108, 1095, 1098, -1,1089, + 1092, 1096, -1,1099, 1097, 1103, -1,1091, 1093, 1092, -1,1093, 1094, 1108, -1,1108, + 1098, 1099, -1,1103, 1109, 1099, -1,1101, 1110, 1111, -1,1110, 1101, 1100, -1,1104, + 1110, 1100, -1,1110, 1104, 1111, -1,1109, 1101, 1111, -1,1112, 1113, 1106, -1,1113, + 1111, 1104, -1,1106, 1113, 1104, -1,1104, 1105, 1106, -1,1109, 1103, 1102, -1,1102, + 1101, 1109, -1,1106, 1107, 202, -1,202, 1107, 1114, -1,1114, 1107, 1115, -1,1116, + 1115, 1117, -1,1114, 1116, 1118, -1,1116, 1114, 1115, -1,1119, 1116, 1117, -1,1116, + 1119, 1120, -1,1117, 1121, 1119, -1,202, 1114, 1112, -1,1121, 1122, 1123, -1,1124, + 1122, 1125, -1,1126, 1127, 1128, -1,1125, 1128, 1129, -1,1130, 1126, 1131, -1,1132, + 1131, 1133, -1,1122, 1121, 1117, -1,1119, 1121, 1120, -1,1120, 1121, 1123, -1,1120, + 1118, 1116, -1,1134, 1125, 1129, -1,1124, 1125, 1134, -1,1112, 1114, 1118, -1,1134, + 1123, 1124, -1,1129, 1135, 1134, -1,1124, 1123, 1122, -1,1126, 1136, 1127, -1,1136, + 1126, 1130, -1,1137, 1131, 1132, -1,1131, 1137, 1130, -1,1135, 1127, 1136, -1,1137, + 1136, 1130, -1,1138, 1137, 1132, -1,1132, 1133, 1138, -1,1135, 1129, 1128, -1,1128, + 1127, 1135, -1,202, 1112, 1106, -1,202, 202, 202, -1,202, 202, 202, -1,202, 202, + 202, -1,202, 202, 202, -1,202, 202, 202, -1,202, 202, 202, -1,1139, 1140, 1141, -1, + 1139, 205, 205, -1,205, 1139, 1141, -1,1142, 1143, 1144, -1,1144, 1145, 1142, -1, + 1146, 1144, 1143, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1, + 205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, + 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, + 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,205, 205, 205, -1,1147, 1148, 1149, -1, + 1148, 1150, 1151, -1,1152, 1153, 1154, -1,1153, 1155, 1156, -1,1150, 1152, 1157, -1, + 1149, 1151, 1158, -1,1151, 1149, 1148, -1,1157, 1151, 1150, -1,1151, 1157, 1159, -1, + 1154, 1156, 1160, -1,1156, 1154, 1153, -1,1161, 1156, 1155, -1,1156, 1161, 1162, -1, + 1157, 1152, 1154, -1,1157, 1154, 1163, -1,1155, 1164, 1161, -1,1147, 1149, 1165, -1, + 1164, 1166, 1167, -1,1167, 1166, 1168, -1,1168, 1169, 1170, -1,1171, 1170, 1172, -1, + 1168, 1166, 1169, -1,1173, 1174, 1175, -1,1172, 1175, 1176, -1,1177, 1178, 1173, -1, + 1179, 1177, 1180, -1,1181, 1180, 1182, -1,1183, 1182, 1184, -1,1164, 1167, 1161, -1, + 1161, 1167, 1185, -1,1165, 1149, 1158, -1,1158, 1151, 1159, -1,1163, 1154, 1160, -1, + 1163, 1159, 1157, -1,1171, 1168, 1170, -1,1186, 1168, 1171, -1,1167, 1168, 1187, -1, + 1160, 1156, 1162, -1,1162, 1161, 1185, -1,1188, 1187, 1168, -1,1186, 1188, 1168, -1, + 1167, 1187, 1185, -1,1171, 1189, 1186, -1,1176, 1174, 1190, -1,1174, 1176, 1175, -1, + 1178, 1174, 1173, -1,1174, 1178, 1191, -1,1179, 1181, 1192, -1,1181, 1179, 1180, -1, + 1183, 1181, 1182, -1,1181, 1183, 1193, -1,1178, 1177, 1179, -1,1178, 1179, 1194, -1, + 1190, 1189, 1176, -1,1191, 1190, 1174, -1,1192, 1194, 1179, -1,1193, 1192, 1181, -1, + 1191, 1178, 1194, -1,1193, 1183, 1195, -1,1176, 1189, 1171, -1,1171, 1172, 1176, -1, + 1183, 1184, 1196, -1,1196, 1184, 1197, -1,1197, 1184, 1198, -1,1199, 1200, 1198, -1, + 1201, 1199, 1202, -1,1203, 1202, 1204, -1,1205, 1204, 1206, -1,1197, 1200, 1207, -1, + 1200, 1197, 1198, -1,1201, 1200, 1199, -1,1200, 1201, 1208, -1,1203, 1205, 1209, -1, + 1205, 1203, 1204, -1,1210, 1205, 1206, -1,1205, 1210, 1211, -1,1201, 1202, 1203, -1, + 1201, 1203, 1212, -1,1206, 1213, 1210, -1,1196, 1197, 1195, -1,1213, 1214, 1215, -1, + 1215, 1214, 1216, -1,1216, 1217, 1218, -1,1219, 1218, 1220, -1,1216, 1214, 1217, -1, + 1221, 1222, 1223, -1,1220, 1223, 1224, -1,1225, 1226, 1221, -1,1227, 1225, 1228, -1, + 1229, 1228, 1230, -1,1231, 1230, 1232, -1,1213, 1215, 1210, -1,1210, 1215, 1233, -1, + 1195, 1197, 1207, -1,1207, 1200, 1208, -1,1212, 1203, 1209, -1,1212, 1208, 1201, -1, + 1219, 1216, 1218, -1,1234, 1216, 1219, -1,1215, 1216, 1235, -1,1209, 1205, 1211, -1, + 1211, 1210, 1233, -1,1236, 1235, 1216, -1,1234, 1236, 1216, -1,1215, 1235, 1233, -1, + 1219, 1237, 1234, -1,1224, 1222, 1238, -1,1222, 1224, 1223, -1,1226, 1222, 1221, -1, + 1222, 1226, 1239, -1,1227, 1229, 1240, -1,1229, 1227, 1228, -1,1231, 1229, 1230, -1, + 1229, 1231, 1241, -1,1226, 1225, 1227, -1,1226, 1227, 1242, -1,1238, 1237, 1224, -1, + 1239, 1238, 1222, -1,1240, 1242, 1227, -1,1243, 1241, 1231, -1,1240, 1229, 1241, -1, + 1239, 1226, 1242, -1,1231, 1232, 1243, -1,1224, 1237, 1219, -1,1219, 1220, 1224, -1, + 1196, 1195, 1183, -1,1244, 1245, 1246, -1,1246, 1247, 1248, -1,1247, 1246, 1245, -1, + 1245, 1249, 1247, -1,1244, 1246, 1250, -1,1247, 1249, 1251, -1,1252, 1253, 1254, -1, + 1255, 1254, 1256, -1,1251, 1249, 1253, -1,1257, 1256, 1258, -1,1246, 1259, 1250, -1, + 1247, 1251, 1248, -1,1259, 1248, 1260, -1,1259, 1246, 1248, -1,1251, 1261, 1248, -1, + 1250, 1259, 1262, -1,1252, 1255, 1263, -1,1255, 1252, 1254, -1,1252, 1263, 1261, -1, + 1264, 1263, 1255, -1,1257, 1265, 1255, -1,1261, 1263, 1266, -1,1255, 1256, 1257, -1, + 1252, 1261, 1251, -1,1251, 1253, 1252, -1,1248, 1261, 1267, -1,1258, 1268, 1257, -1, + 1269, 1270, 1271, -1,1272, 1273, 1274, -1,1273, 1270, 1274, -1,1275, 1271, 1276, -1, + 1277, 1278, 1279, -1,1280, 1281, 1279, -1,1282, 1276, 1278, -1,1283, 1280, 1284, -1, + 1285, 1257, 1268, -1,1274, 1268, 1272, -1,1286, 1274, 1269, -1,1275, 1269, 1271, -1, + 1282, 1275, 1276, -1,1287, 1269, 1275, -1,1274, 1270, 1269, -1,1288, 1268, 1274, -1, + 1289, 1282, 1277, -1,1281, 1277, 1279, -1,1290, 1281, 1283, -1,1291, 1283, 1284, -1, + 1292, 1293, 1291, -1,1294, 1283, 1291, -1,1281, 1280, 1283, -1,1295, 1277, 1281, -1, + 1282, 1278, 1277, -1,1296, 1275, 1282, -1,1291, 1284, 1292, -1,1272, 1268, 1258, -1, + 1297, 1291, 1293, -1,1262, 1298, 1299, -1,1298, 1259, 1260, -1,1260, 1267, 1300, -1, + 1267, 1260, 1248, -1,1298, 1262, 1259, -1,1298, 1260, 1300, -1,1266, 1264, 1301, -1, + 1265, 1264, 1255, -1,1285, 1302, 1265, -1,1264, 1265, 1303, -1,1288, 1285, 1268, -1, + 1304, 1285, 1288, -1,1265, 1257, 1285, -1,1266, 1267, 1261, -1,1263, 1264, 1266, -1, + 1267, 1266, 1305, -1,1298, 1300, 1299, -1,1266, 1301, 1305, -1,1300, 1267, 1305, -1, + 1301, 1306, 1305, -1,1303, 1302, 1306, -1,1302, 1303, 1265, -1,1302, 1307, 1306, -1, + 1307, 1302, 1304, -1,1307, 1304, 1308, -1,1302, 1285, 1304, -1,1303, 1306, 1301, -1, + 1301, 1264, 1303, -1,1288, 1286, 1304, -1,1286, 1287, 1308, -1,1287, 1286, 1269, -1, + 1296, 1309, 1287, -1,1287, 1310, 1308, -1,1287, 1275, 1296, -1,1286, 1308, 1304, -1, + 1311, 1296, 1289, -1,1295, 1289, 1277, -1,1312, 1295, 1290, -1,1294, 1290, 1283, -1, + 1297, 1294, 1291, -1,1313, 1290, 1294, -1,1295, 1281, 1290, -1,1314, 1289, 1295, -1, + 1296, 1282, 1289, -1,1315, 1294, 1297, -1,1310, 1309, 1316, -1,1309, 1310, 1287, -1, + 1309, 1317, 1316, -1,1317, 1309, 1311, -1,1317, 1311, 1314, -1,1309, 1296, 1311, -1, + 1310, 1316, 1308, -1,1314, 1312, 1318, -1,1312, 1314, 1295, -1,1319, 1318, 1313, -1, + 1313, 1318, 1312, -1,1315, 1313, 1294, -1,1319, 1313, 1315, -1,1312, 1290, 1313, -1, + 1314, 1318, 1317, -1,1311, 1289, 1314, -1,1297, 1320, 1315, -1,1308, 1316, 1307, -1, + 1288, 1274, 1286, -1,1293, 1321, 1297, -1,1292, 1322, 1321, -1,1323, 1324, 1322, -1, + 1322, 1324, 1321, -1,1321, 1320, 1297, -1,1325, 1326, 1327, -1,1328, 1329, 1330, -1, + 1329, 1331, 1326, -1,1323, 1325, 1332, -1,1333, 1330, 1334, -1,1324, 1332, 1335, -1, + 1332, 1324, 1323, -1,1320, 1335, 1336, -1,1335, 1320, 1324, -1,1332, 1337, 1335, -1, + 1324, 1320, 1321, -1,1337, 1327, 1338, -1,1331, 1327, 1326, -1,1328, 1339, 1331, -1, + 1327, 1331, 1340, -1,1333, 1328, 1330, -1,1333, 1341, 1328, -1,1331, 1329, 1328, -1, + 1327, 1337, 1332, -1,1332, 1325, 1327, -1,1335, 1337, 1342, -1,1334, 1343, 1333, -1, + 1344, 1315, 1320, -1,1345, 1346, 1347, -1,1348, 1349, 1350, -1,1351, 1347, 1349, -1, + 1352, 1353, 1354, -1,1354, 1355, 1356, -1,1350, 1353, 1357, -1,1356, 1355, 1358, -1, + 1359, 1360, 1343, -1,1361, 1333, 1343, -1,1362, 1343, 1360, -1,1362, 1360, 1346, -1, + 1363, 1343, 1362, -1,1345, 1362, 1346, -1,1359, 1343, 1334, -1,1364, 1345, 1351, -1, + 1345, 1347, 1351, -1,1365, 1348, 1357, -1,1348, 1350, 1357, -1,1357, 1353, 1352, -1, + 1366, 1357, 1352, -1,1349, 1348, 1351, -1,1367, 1351, 1348, -1,1354, 1356, 1352, -1, + 1368, 1362, 1345, -1,1369, 1352, 1356, -1,1320, 1336, 1344, -1,1337, 1338, 1342, -1, + 1336, 1342, 1370, -1,1336, 1335, 1342, -1,1342, 1338, 1371, -1,1344, 1336, 1370, -1, + 1372, 1338, 1340, -1,1339, 1340, 1331, -1,1373, 1339, 1341, -1,1361, 1341, 1333, -1, + 1363, 1361, 1343, -1,1374, 1341, 1361, -1,1339, 1328, 1341, -1,1375, 1340, 1339, -1, + 1338, 1327, 1340, -1,1374, 1361, 1363, -1,1371, 1372, 1376, -1,1372, 1371, 1338, -1, + 1319, 1344, 1370, -1,1370, 1342, 1376, -1,1372, 1377, 1376, -1,1342, 1371, 1376, -1, + 1375, 1373, 1377, -1,1373, 1375, 1339, -1,1373, 1378, 1377, -1,1378, 1373, 1374, -1, + 1379, 1378, 1374, -1,1373, 1341, 1374, -1,1375, 1377, 1372, -1,1372, 1340, 1375, -1, + 1374, 1363, 1379, -1,1319, 1315, 1344, -1,1379, 1368, 1380, -1,1364, 1368, 1345, -1, + 1367, 1381, 1364, -1,1368, 1364, 1382, -1,1364, 1351, 1367, -1,1368, 1379, 1363, -1, + 1383, 1365, 1366, -1,1366, 1365, 1357, -1,1369, 1358, 1384, -1,1358, 1369, 1356, -1, + 1366, 1369, 1385, -1,1366, 1352, 1369, -1,1386, 1367, 1365, -1,1367, 1348, 1365, -1, + 1369, 1384, 1385, -1,1380, 1382, 1387, -1,1382, 1380, 1368, -1,1382, 1388, 1387, -1, + 1388, 1382, 1381, -1,1388, 1381, 1386, -1,1382, 1364, 1381, -1,1380, 1387, 1379, -1, + 1386, 1383, 1389, -1,1383, 1386, 1365, -1,1389, 1385, 1390, -1,1385, 1389, 1383, -1, + 1390, 1385, 1384, -1,1383, 1366, 1385, -1,1386, 1389, 1388, -1,1381, 1367, 1386, -1, + 1379, 1387, 1378, -1,1363, 1362, 1368, -1,1293, 1292, 1321, -1,1391, 1392, 1393, -1, + 1394, 1393, 1395, -1,1393, 1394, 1391, -1,1396, 1395, 1393, -1,1393, 1392, 1396, -1, + 1396, 1397, 1398, -1,1398, 1397, 1399, -1,1396, 1400, 1395, -1,1400, 1398, 1401, -1, + 1398, 1400, 1396, -1,1401, 1398, 1399, -1,1396, 1392, 1397, -1,1402, 1403, 1404, -1, + 1405, 1406, 1402, -1,1402, 1404, 1405, -1,1406, 1405, 1407, -1,1408, 1409, 1404, -1, + 1405, 1404, 1409, -1,1404, 1403, 1408, -1,1410, 1411, 1412, -1,1413, 1412, 1414, -1, + 1409, 1408, 1415, -1,1410, 1408, 1411, -1,1413, 1410, 1412, -1,1416, 1408, 1410, -1, + 1414, 1417, 1413, -1,1411, 1408, 1403, -1,1416, 1410, 1413, -1,1409, 1418, 1405, -1, + 1418, 1409, 1415, -1,1419, 1418, 1420, -1,1405, 1418, 1421, -1,1421, 1419, 1422, -1, + 1419, 1421, 1418, -1,1418, 1415, 1420, -1,1420, 1416, 1423, -1,1416, 1420, 1415, -1, + 1423, 1416, 1424, -1,1420, 1423, 1425, -1,1426, 1425, 1423, -1,1427, 1426, 1423, -1, + 1423, 1428, 1427, -1,1420, 1425, 1419, -1,1415, 1408, 1416, -1,1424, 1416, 1413, -1, + 1429, 1417, 1430, -1,1431, 1430, 1432, -1,1433, 1424, 1429, -1,1424, 1413, 1429, -1, + 1431, 1429, 1430, -1,1431, 1434, 1429, -1,1432, 1435, 1431, -1,1429, 1413, 1417, -1, + 1436, 1437, 1438, -1,1435, 1437, 1436, -1,1438, 1439, 1436, -1,1437, 1435, 1432, -1, + 1440, 1431, 1435, -1,1441, 1428, 1433, -1,1433, 1428, 1424, -1,1434, 1433, 1429, -1, + 1441, 1433, 1434, -1,1442, 1441, 1443, -1,1441, 1442, 1428, -1,1444, 1443, 1441, -1, + 1441, 1434, 1444, -1,1428, 1442, 1427, -1,1445, 1444, 1440, -1,1440, 1444, 1434, -1, + 1436, 1440, 1435, -1,1445, 1440, 1436, -1,1446, 1445, 1447, -1,1445, 1446, 1444, -1, + 1447, 1448, 1446, -1,1445, 1436, 1447, -1,1444, 1446, 1443, -1,1434, 1431, 1440, -1, + 1424, 1428, 1423, -1,1449, 1450, 1451, -1,1452, 1451, 1450, -1,1449, 1451, 1453, -1, + 1452, 1450, 1454, -1,1455, 1454, 1456, -1,1457, 1455, 1456, -1,1451, 1458, 1453, -1, + 1458, 1451, 1452, -1,1458, 1452, 1459, -1,1459, 1455, 1460, -1,1455, 1459, 1452, -1, + 1457, 1460, 1455, -1,1452, 1454, 1455, -1,1457, 1456, 1461, -1,1457, 1462, 1463, -1, + 1462, 1457, 1461, -1,1463, 1462, 1464, -1,1457, 1463, 1465, -1,1463, 1464, 1466, -1, + 1466, 1464, 1467, -1,1468, 1467, 1469, -1,1470, 1457, 1465, -1,1465, 1463, 1471, -1, + 1466, 1468, 1472, -1,1468, 1466, 1467, -1,1473, 1472, 1468, -1,1468, 1469, 1473, -1, + 1466, 1472, 1471, -1,1466, 1471, 1463, -1,1457, 1470, 1460, -1,205, 205, 205, -1, + 1474, 1473, 1475, -1,1474, 1476, 1477, -1,1476, 1474, 1475, -1,1478, 1479, 1480, -1, + 1479, 1478, 1481, -1,205, 205, 205, -1,1482, 1479, 1481, -1,1483, 1484, 1485, -1, + 1486, 1485, 1487, -1,1485, 1486, 1483, -1,1488, 1487, 1485, -1,1485, 1484, 1488, -1, + 1488, 1489, 1490, -1,1490, 1489, 1491, -1,1488, 1492, 1487, -1,1492, 1490, 1493, -1, + 1490, 1492, 1488, -1,1493, 1490, 1491, -1,1488, 1484, 1489, -1,91, 91, 91, -1,91, + 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, + 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, + 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, + 91, -1,91, 91, 91, -1,91, 91, 1494, -1,91, 91, 91, -1,1494, 91, 1495, -1,1496, 1495, + 1497, -1,1495, 1496, 1494, -1,1498, 1497, 1499, -1,1497, 1498, 1496, -1,91, 91, 91, -1, + 91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, + 91, -1,91, 91, 91, -1,91, 91, 91, -1,1499, 91, 91, -1,91, 1499, 1497, -1,91, 91, + 91, -1,91, 91, 91, -1,91, 91, 91, -1,91, 91, 91, -1,1500, 1501, 1502, -1,1503, 1504, + 1500, -1,1505, 1506, 1503, -1,1506, 1504, 1503, -1,1506, 1507, 1508, -1,1509, 1508, + 1507, -1,1506, 1508, 1504, -1,1510, 1507, 1506, -1,1503, 1500, 1502, -1,1511, 1512, + 1509, -1,1513, 1514, 1515, -1,1516, 1515, 1512, -1,1517, 1516, 1511, -1,1516, 1512, + 1511, -1,1518, 1514, 1519, -1,1515, 1516, 1513, -1,1513, 1519, 1514, -1,1520, 1513, + 1516, -1,1507, 1511, 1509, -1,1521, 1511, 1507, -1,1522, 1502, 1523, -1,1524, 1505, + 1522, -1,1503, 1502, 1522, -1,1503, 1522, 1505, -1,1525, 1522, 1523, -1,1524, 1525, + 1526, -1,1523, 1526, 1525, -1,1527, 1510, 1524, -1,1522, 1525, 1524, -1,1524, 1510, + 1505, -1,1527, 1524, 1526, -1,1506, 1505, 1510, -1,1528, 1517, 1521, -1,1517, 1511, + 1521, -1,1529, 1520, 1530, -1,1516, 1517, 1520, -1,1521, 1507, 1510, -1,1530, 1520, + 1517, -1,1521, 1527, 1531, -1,1528, 1531, 1526, -1,1517, 1528, 1530, -1,1528, 1521, + 1531, -1,1531, 1527, 1526, -1,1529, 1519, 1520, -1,1510, 1527, 1521, -1,1520, 1519, + 1513, -1,1530, 1528, 1526, -1,1519, 1532, 1518, -1,1533, 1534, 1532, -1,1535, 1536, + 1537, -1,1538, 1537, 1534, -1,1533, 1529, 1539, -1,1533, 1519, 1529, -1,1538, 1533, + 1540, -1,1537, 1538, 1535, -1,1538, 1534, 1533, -1,1538, 1541, 1535, -1,1535, 1542, + 1536, -1,1532, 1519, 1533, -1,1543, 1544, 1545, -1,1546, 1547, 1548, -1,1549, 1548, + 1544, -1,1550, 1543, 1542, -1,1545, 1542, 1543, -1,1551, 1549, 1543, -1,1548, 1549, + 1546, -1,1549, 1544, 1543, -1,1552, 1542, 1535, -1,1536, 1542, 1545, -1,1546, 1549, + 1551, -1,1539, 1553, 1554, -1,1529, 1553, 1539, -1,1540, 1539, 1555, -1,1538, 1540, + 1541, -1,1540, 1533, 1539, -1,1541, 1540, 1556, -1,1555, 1554, 1526, -1,1553, 1526, + 1554, -1,1526, 1556, 1555, -1,1540, 1555, 1556, -1,1555, 1539, 1554, -1,1557, 1556, + 1526, -1,1556, 1552, 1541, -1,1530, 1526, 1553, -1,1558, 1550, 1552, -1,1542, 1552, + 1550, -1,1559, 1560, 1551, -1,1546, 1551, 1560, -1,1551, 1543, 1550, -1,1559, 1551, + 1550, -1,1526, 1558, 1557, -1,1552, 1557, 1558, -1,1558, 1526, 1559, -1,1560, 1559, + 1526, -1,1559, 1550, 1558, -1,1556, 1557, 1552, -1,1552, 1535, 1541, -1,1530, 1553, + 1529, -1,1561, 1562, 1563, -1,1564, 1565, 1561, -1,1566, 1567, 1564, -1,1567, 1565, + 1564, -1,1567, 1568, 1569, -1,1570, 1569, 1568, -1,1567, 1569, 1565, -1,1571, 1568, + 1567, -1,1564, 1561, 1563, -1,1572, 1573, 1570, -1,1574, 1575, 1576, -1,1577, 1576, + 1573, -1,1578, 1577, 1572, -1,1577, 1573, 1572, -1,1579, 1574, 1580, -1,1576, 1577, + 1574, -1,1574, 1579, 1575, -1,1580, 1574, 1577, -1,1568, 1572, 1570, -1,1581, 1572, + 1568, -1,1582, 1563, 1583, -1,1584, 1566, 1582, -1,1564, 1563, 1582, -1,1564, 1582, + 1566, -1,1585, 1582, 1583, -1,1584, 1585, 1586, -1,1583, 1586, 1585, -1,1587, 1571, + 1584, -1,1582, 1585, 1584, -1,1584, 1571, 1566, -1,1587, 1584, 1586, -1,1567, 1566, + 1571, -1,1581, 1587, 1588, -1,1571, 1587, 1581, -1,1578, 1581, 1589, -1,1578, 1572, + 1581, -1,1571, 1581, 1568, -1,1580, 1578, 1590, -1,1586, 1589, 1588, -1,1581, 1588, + 1589, -1,1589, 1586, 1590, -1,1590, 1586, 1591, -1,1590, 1578, 1589, -1,1587, 1586, + 1588, -1,1580, 1590, 1592, -1,1578, 1580, 1577, -1,1575, 1579, 1593, -1,1594, 1595, + 1596, -1,1597, 1598, 1599, -1,1600, 1599, 1595, -1,1594, 1579, 1601, -1,1596, 1579, + 1594, -1,1597, 1600, 1602, -1,1599, 1600, 1597, -1,1600, 1595, 1594, -1,1600, 1594, + 1603, -1,1597, 1604, 1598, -1,1593, 1579, 1596, -1,1605, 1606, 1607, -1,1608, 1609, + 1610, -1,1611, 1610, 1606, -1,1605, 1604, 1612, -1,1607, 1604, 1605, -1,1613, 1611, + 1605, -1,1610, 1611, 1608, -1,1611, 1606, 1605, -1,1614, 1604, 1597, -1,1598, 1604, + 1607, -1,1613, 1608, 1611, -1,1615, 1601, 1592, -1,1579, 1592, 1601, -1,1616, 1602, + 1603, -1,1600, 1603, 1602, -1,1603, 1594, 1601, -1,1617, 1603, 1601, -1,1615, 1586, + 1617, -1,1592, 1591, 1615, -1,1616, 1586, 1618, -1,1603, 1617, 1616, -1,1617, 1601, + 1615, -1,1617, 1586, 1616, -1,1616, 1614, 1602, -1,1590, 1591, 1592, -1,1619, 1612, + 1614, -1,1604, 1614, 1612, -1,1620, 1621, 1613, -1,1608, 1613, 1621, -1,1613, 1605, + 1612, -1,1620, 1613, 1612, -1,1586, 1619, 1618, -1,1614, 1618, 1619, -1,1619, 1586, + 1620, -1,1621, 1620, 1586, -1,1620, 1612, 1619, -1,1616, 1618, 1614, -1,1614, 1597, + 1602, -1,1591, 1586, 1615, -1,1580, 1592, 1579, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link2.wrl b/examples/rlsg/mitsubishi-rv6sl/link2.wrl new file mode 100644 index 00000000..1ecf2604 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link2.wrl @@ -0,0 +1,3135 @@ +#VRML V2.0 utf8 + +DEF link2 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.749020 0.749020 0.698039 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 3006 + -0.064865 -0.045044 0.119141, -0.056938 -0.054688 0.119141, -0.047615 -0.062988 0.119141, -0.037071 -0.069702 0.119141, + -0.025604 -0.074707 0.119141, -0.013504 -0.07782 0.119141, -0.00106 -0.078979 0.119141, 0.011406 -0.078125 0.119141, + 0.023598 -0.075378 0.119141, 0.035187 -0.070679 0.119141, 0.045898 -0.06427 0.119141, 0.055458 -0.056213 0.119141, + 0.063629 -0.046753 0.119141, 0.070206 -0.036133 0.119141, 0.075035 -0.024597 0.119141, 0.077972 -0.012451 0.119141, + 0.078972 0 0.119141, 0.077995 0 0.091492, 0.0765 -0.015198 0.091492, 0.07206 -0.029846 0.091492, 0.06485 -0.043335 0.091492, + 0.055153 -0.055176 0.091492, 0.043335 -0.06488 0.091492, 0.029846 -0.072083 0.091492, 0.015221 -0.076477 0.091492, + 0 -0.078003 0.091492, -0.015213 -0.076477 0.091492, -0.029846 -0.072083 0.091492, -0.043335 -0.06488 0.091492, + -0.055153 -0.055176 0.091492, -0.064857 -0.043335 0.091492, -0.072067 -0.029846 0.091492, -0.076508 -0.015198 0.091492, + -0.078003 0 0.091492, -0.078018 0 0.09198, -0.077209 -0.01123 0.09198, -0.074799 -0.022156 0.09198, + -0.070839 -0.032715 0.09198, -0.065407 -0.042542 0.09198, -0.064865 -0.043396 0.092163, -0.064445 -0.044006 0.092651, + -0.064209 -0.044373 0.093262, -0.064148 -0.044556 0.093994, -0.06456 -0.044739 0.107483, -0.064972 -0.044983 0.120972, + -0.064919 -0.045044 0.120056, -0.064224 -0.044983 0.120544, -0.056335 -0.054565 0.120544, -0.047035 -0.062744 0.120544, + -0.03656 -0.069397 0.120544, -0.025185 -0.07428 0.120544, -0.013176 -0.077332 0.120544, -0.000832 -0.07843 0.120544, + 0.011528 -0.077576 0.120544, 0.023598 -0.074768 0.120544, 0.03508 -0.070129 0.120544, 0.045685 -0.063721 0.120544, + 0.055161 -0.055786 0.120544, 0.063248 -0.046387 0.120544, 0.069756 -0.035828 0.120544, 0.074524 -0.024414 0.120544, + 0.077438 -0.012329 0.120544, 0.078415 0 0.120544, 0.077438 0.012329 0.120544, 0.074524 0.024414 0.120544, + 0.069756 0.035828 0.120544, 0.06324 0.046387 0.120544, 0.055161 0.055725 0.120544, 0.0457 0.063721 0.120544, + 0.03508 0.070129 0.120544, 0.023598 0.074768 0.120544, 0.011528 0.077576 0.120544, -0.000832 0.07843 0.120544, + -0.013176 0.077332 0.120544, -0.025185 0.07428 0.120544, -0.03656 0.069397 0.120544, -0.047035 0.062744 0.120544, + -0.056335 0.054565 0.120544, -0.064209 0.044983 0.120544, -0.064522 0.045044 0.120239, -0.064728 0.045044 0.119873, + -0.064873 0.045044 0.119141, -0.056953 0.054688 0.119141, -0.047615 0.062988 0.119141, -0.037071 0.069702 0.119141, + -0.025612 0.074707 0.119141, -0.013512 0.07782 0.119141, -0.00106 0.078979 0.119141, 0.011406 0.078125 0.119141, + 0.023598 0.075378 0.119141, 0.035179 0.070679 0.119141, 0.045891 0.06427 0.119141, 0.055458 0.056213 0.119141, + 0.063637 0.046753 0.119141, 0.070206 0.036133 0.119141, 0.075027 0.024597 0.119141, 0.077972 0.012451 0.119141, + 0.078972 0 0.119141, -0.064842 -0.045044 0.119507, -0.064728 -0.045044 0.119873, -0.048996 -0.0448 0.132263, + -0.03714 -0.044678 0.139343, -0.026794 -0.044617 0.144043, -0.016876 -0.044556 0.147156, -0.015808 -0.044922 0.147156, + -0.01474 -0.045288 0.147156, -0.015732 -0.045837 0.146606, -0.016617 -0.046753 0.145813, -0.017242 -0.047913 0.144836, + -0.017456 -0.049255 0.14386, -0.017075 -0.051025 0.1427, -0.016113 -0.052368 0.141968, -0.014847 -0.053162 0.141602, + -0.013412 -0.053528 0.141663, -0.011887 -0.053284 0.14209, -0.010422 -0.05249 0.142883, -0.009323 -0.051025 0.144165, + -0.008957 -0.049255 0.145447, -0.009216 -0.047791 0.146484, -0.009521 -0.047119 0.146851, -0.009888 -0.04657 0.147156, + -0.004974 -0.047363 0.147156, 0 -0.047607 0.147156, 0.009888 -0.04657 0.147156, 0.009216 -0.047791 0.146484, + 0.009018 -0.048462 0.145996, 0.008942 -0.049255 0.145447, 0.009323 -0.051025 0.144165, 0.010422 -0.05249 0.142883, + 0.011887 -0.053284 0.14209, 0.013397 -0.053528 0.141663, 0.014847 -0.053162 0.141602, 0.016113 -0.052368 0.141968, + 0.017075 -0.051025 0.1427, 0.017441 -0.049255 0.14386, 0.016617 -0.046753 0.145813, 0.015732 -0.045837 0.146606, + 0.014725 -0.045288 0.147156, 0.015808 -0.044922 0.147156, 0.016876 -0.044556 0.147156, 0.017044 -0.044556 0.147156, + 0.017212 -0.044556 0.147095, 0.028488 -0.036682 0.14801, 0.037201 -0.026123 0.148682, 0.042694 -0.01355 0.149109, + 0.044571 0 0.149292, 0.042694 0.01355 0.149109, 0.037201 0.026123 0.148682, 0.028488 0.036682 0.14801, + 0.017212 0.044556 0.147095, 0.017044 0.044556 0.147156, 0.016891 0.044556 0.147156, 0.015823 0.044922 0.147156, + 0.01474 0.045288 0.147156, 0.015732 0.045837 0.146606, 0.016632 0.046753 0.145813, 0.017242 0.047913 0.144836, + 0.017456 0.049255 0.14386, 0.017075 0.051025 0.1427, 0.016113 0.052368 0.141968, 0.014847 0.053162 0.141602, + 0.013412 0.053528 0.141663, 0.011887 0.053284 0.14209, 0.010422 0.05249 0.142883, 0.009338 0.051025 0.144165, + 0.008957 0.049255 0.145447, 0.009216 0.047791 0.146484, 0.009521 0.047119 0.146851, 0.009888 0.04657 0.147156, + 0.004974 0.047363 0.147156, 0 0.047607 0.147156, -0.009888 0.04657 0.147156, -0.009216 0.047791 0.146484, + -0.009018 0.048462 0.145996, -0.008942 0.049255 0.145447, -0.009323 0.051025 0.144165, -0.010422 0.05249 0.142883, + -0.011871 0.053284 0.14209, -0.013397 0.053528 0.141663, -0.014832 0.053162 0.141602, -0.016113 0.052368 0.141968, + -0.017059 0.051025 0.1427, -0.017441 0.049255 0.14386, -0.016617 0.046753 0.145813, -0.015732 0.045837 0.146606, + -0.014725 0.045288 0.147156, -0.015808 0.044922 0.147156, -0.016876 0.044556 0.147156, -0.026688 0.044617 0.144043, + -0.036987 0.044678 0.139404, -0.048874 0.0448 0.132385, 0.031815 -0.036072 0.146851, 0.03212 -0.037659 0.145874, + 0.033127 -0.039124 0.144592, 0.034729 -0.0401 0.14325, 0.036469 -0.040283 0.142273, 0.037994 -0.039856 0.141724, + 0.039185 -0.03894 0.141602, 0.039993 -0.037659 0.141846, 0.040314 -0.036072 0.142456, 0.039932 -0.034302 0.143555, + 0.038742 -0.032776 0.144958, 0.037064 -0.031921 0.146301, 0.0354 -0.03186 0.147217, 0.033981 -0.032349 0.147705, + 0.032852 -0.033264 0.147766, 0.032104 -0.034546 0.147522, 0.045013 -0.013184 0.147705, 0.045288 -0.014709 0.147217, + 0.046112 -0.016052 0.146362, 0.047531 -0.01709 0.145142, 0.049408 -0.017456 0.143738, 0.051163 -0.017029 0.142578, + 0.052475 -0.015991 0.141907, 0.053253 -0.014648 0.141602, 0.053513 -0.013184 0.141663, 0.053223 -0.011658 0.142151, + 0.052277 -0.010193 0.143066, 0.05069 -0.009216 0.144409, 0.048798 -0.008972 0.145752, 0.04718 -0.009521 0.146851, + 0.04599 -0.010498 0.147522, 0.045258 -0.01178 0.147766, 0.045013 0.013184 0.147705, 0.045258 0.01178 0.147766, + 0.04599 0.010498 0.147522, 0.04718 0.009521 0.146851, 0.048798 0.008972 0.145752, 0.05069 0.009216 0.144409, + 0.052277 0.010193 0.143066, 0.053223 0.011658 0.142151, 0.053513 0.013184 0.141663, 0.053253 0.014648 0.141602, + 0.052475 0.015991 0.141914, 0.051163 0.017029 0.142578, 0.049408 0.017456 0.143738, 0.047531 0.01709 0.145142, + 0.046097 0.016052 0.146362, 0.045288 0.014709 0.147217, 0.031815 0.036072 0.146843, 0.032104 0.034546 0.147522, + 0.032852 0.033264 0.147766, 0.033966 0.032349 0.147705, 0.0354 0.03186 0.147217, 0.037064 0.031921 0.146301, + 0.038742 0.032776 0.144966, 0.039932 0.034302 0.143555, 0.040314 0.036072 0.142456, 0.040009 0.037659 0.141846, + 0.0392 0.03894 0.141602, 0.03801 0.039856 0.141724, 0.036469 0.040283 0.142281, 0.034744 0.0401 0.14325, + 0.033127 0.039124 0.144592, 0.03212 0.037659 0.145874, 0.031815 -0.036072 0.140991, 0.032135 -0.037659 0.140991, + 0.033051 -0.039063 0.140991, 0.034439 -0.039978 0.140991, 0.036057 -0.040283 0.140991, 0.037689 -0.039978 0.140991, + 0.039063 -0.039063 0.140991, 0.039993 -0.037659 0.140991, 0.040314 -0.036072 0.140991, 0.039993 -0.034424 0.140991, + 0.039063 -0.033081 0.140991, 0.037689 -0.032166 0.140991, 0.036057 -0.031799 0.140991, 0.034439 -0.032166 0.140991, + 0.033051 -0.033081 0.140991, 0.032135 -0.034424 0.140991, 0.031815 -0.036072 0.140991, 0.045013 -0.013184 0.140991, + 0.045334 -0.014832 0.140991, 0.046265 -0.016174 0.140991, 0.047638 -0.017151 0.140991, 0.049255 -0.017456 0.140991, + 0.050888 -0.017151 0.140991, 0.052261 -0.016174 0.140991, 0.053192 -0.014832 0.140991, 0.053513 -0.013184 0.140991, + 0.053192 -0.011597 0.140991, 0.052261 -0.010193 0.140991, 0.050888 -0.009277 0.140991, 0.049255 -0.008972 0.140991, + 0.047638 -0.009277 0.140991, 0.046265 -0.010193 0.140991, 0.045334 -0.011597 0.140991, 0.045013 -0.013184 0.140991, + 0.045013 0.013184 0.140991, 0.045334 0.011597 0.140991, 0.046265 0.010193 0.140991, 0.047638 0.009277 0.140991, + 0.049255 0.008972 0.140991, 0.050888 0.009277 0.140991, 0.052261 0.010193 0.140991, 0.053192 0.011597 0.140991, + 0.053513 0.013184 0.140991, 0.053192 0.014832 0.140991, 0.052261 0.016235 0.140991, 0.050888 0.017151 0.140991, + 0.049255 0.017456 0.140991, 0.047623 0.017151 0.140991, 0.046265 0.016235 0.140991, 0.045334 0.014832 0.140991, + 0.045013 0.013184 0.140991, 0.031815 0.036072 0.140984, 0.03215 0.034424 0.140991, 0.033051 0.033081 0.140991, + 0.034439 0.032166 0.140991, 0.036057 0.031799 0.140984, 0.037689 0.032166 0.140991, 0.039063 0.033081 0.140991, + 0.039993 0.034424 0.140991, 0.040314 0.036072 0.140984, 0.039993 0.03772 0.140991, 0.039078 0.039063 0.140991, + 0.037704 0.039978 0.140984, 0.036057 0.040283 0.140984, 0.034439 0.039978 0.140984, 0.033051 0.039063 0.140991, + 0.032135 0.03772 0.140991, 0.031815 0.036072 0.140984, -0.316292 -0.045013 0.121002, -0.329346 -0.0448 0.132721, + -0.339783 -0.044678 0.140137, -0.357224 -0.044525 0.148987, -0.401825 -0.044525 0.148987, -0.400162 -0.044373 0.157257, + -0.398651 -0.04422 0.165009, 0.013641 -0.04425 0.164978, 0.015335 -0.044373 0.156372, 0.017212 -0.044556 0.147095, + -0.315857 -0.044525 0.093964, -0.315475 -0.044739 0.106506, -0.315094 -0.044983 0.119049, -0.315216 -0.044983 0.11972, + -0.315399 -0.044983 0.120056, -0.315643 -0.044983 0.120361, -0.315964 -0.044983 0.120697, -0.316292 -0.045013 0.121002, + -0.098 -0.044556 0.093994, -0.098 -0.044495 0.093506, -0.282005 -0.044525 0.093506, -0.281998 -0.044525 0.093964, + -0.458969 0 0.119049, -0.457977 -0.012451 0.119049, -0.45504 -0.024628 0.119049, -0.450203 -0.036163 0.119049, + -0.443619 -0.046783 0.119049, -0.43544 -0.056244 0.119049, -0.425873 -0.06427 0.119049, -0.415154 -0.070709 0.119049, + -0.403557 -0.075378 0.119049, -0.391365 -0.078125 0.119049, -0.378883 -0.078949 0.119049, -0.366447 -0.077789 0.119049, + -0.35434 -0.074677 0.119049, -0.342873 -0.069702 0.119049, -0.332344 -0.062958 0.119049, -0.323006 -0.054657 0.119049, + -0.315094 -0.044983 0.119049, -0.315796 -0.044403 0.093292, -0.315552 -0.044006 0.092651, -0.31514 -0.043365 0.092194, + -0.314598 -0.042542 0.09201, -0.309166 -0.032684 0.09201, -0.305206 -0.022186 0.09201, -0.302795 -0.0112 0.09201, + -0.301987 0 0.09201, -0.302002 0 0.091492, -0.303505 -0.015228 0.091492, -0.307938 -0.029846 0.091492, + -0.315147 -0.043335 0.091492, -0.324844 -0.055145 0.091492, -0.336662 -0.06485 0.091492, -0.350151 -0.072052 0.091492, + -0.364784 -0.076508 0.091492, -0.379997 -0.078003 0.091492, -0.395218 -0.076508 0.091492, -0.409851 -0.072052 0.091492, + -0.423332 -0.06485 0.091492, -0.435158 -0.055145 0.091492, -0.444855 -0.043335 0.091492, -0.452065 -0.029846 0.091492, + -0.456505 -0.015228 0.091492, -0.458 0 0.091492, -0.315643 0.044983 0.120361, -0.323555 0.054565 0.120361, + -0.332848 0.062775 0.120361, -0.34333 0.069427 0.120361, -0.354729 0.074341 0.120361, -0.36676 0.077393 0.120361, + -0.37912 0.078522 0.120361, -0.391487 0.077667 0.120361, -0.403587 0.07489 0.120361, -0.4151 0.070221 0.120361, + -0.42572 0.063843 0.120361, -0.435204 0.055817 0.120361, -0.443306 0.046448 0.120361, -0.449829 0.035889 0.120361, + -0.45462 0.024445 0.120354, -0.457535 0.01236 0.120361, -0.458519 0 0.120361, -0.457535 -0.01236 0.120361, + -0.45462 -0.024445 0.120361, -0.449837 -0.035889 0.120361, -0.443314 -0.046448 0.120361, -0.435204 -0.055847 0.120361, + -0.42572 -0.063843 0.120361, -0.415085 -0.070251 0.120361, -0.40358 -0.07489 0.120361, -0.391487 -0.077667 0.120361, + -0.37912 -0.078522 0.120361, -0.36676 -0.077393 0.120361, -0.354713 -0.074341 0.120361, -0.34333 -0.069427 0.120361, + -0.332848 -0.062775 0.120361, -0.323547 -0.054565 0.120361, -0.315643 -0.044983 0.120361, -0.457977 0.012451 0.119049, + -0.45504 0.024597 0.119049, -0.450203 0.036133 0.119049, -0.443626 0.046753 0.119049, -0.435448 0.056213 0.119049, + -0.425873 0.06427 0.119049, -0.415154 0.070709 0.119049, -0.403557 0.075378 0.119049, -0.391365 0.078156 0.119049, + -0.378899 0.078949 0.119049, -0.366447 0.077789 0.119049, -0.354347 0.074677 0.119049, -0.342873 0.069672 0.119049, + -0.332344 0.062958 0.119049, -0.323006 0.054626 0.119049, -0.315109 0.044952 0.119049, -0.315109 0.044983 0.119385, + -0.315216 0.044983 0.11972, -0.315964 0.044983 0.120697, -0.316292 0.044983 0.121002, -0.329346 0.0448 0.132721, + -0.339783 0.044678 0.140137, -0.348801 0.044586 0.145294, -0.357224 0.044525 0.148987, -0.369202 0.048828 0.148987, + -0.381897 0.049957 0.148987, -0.394455 0.047852 0.148987, -0.406082 0.042664 0.148987, -0.416016 0.034668 0.148994, + -0.423615 0.024445 0.148987, -0.428375 0.012634 0.148987, -0.429993 0 0.148987, -0.428375 -0.012634 0.148987, + -0.423615 -0.024445 0.148987, -0.416016 -0.034668 0.148987, -0.406082 -0.042664 0.148987, -0.39447 -0.047852 0.148987, + -0.381897 -0.049957 0.148987, -0.369217 -0.048828 0.148987, -0.357224 -0.044525 0.148987, -0.347412 0.062134 0.130005, + -0.348923 0.061768 0.131104, -0.350418 0.060822 0.132721, -0.351532 0.059265 0.134613, -0.35199 0.057495 0.136444, + -0.351822 0.055847 0.137817, -0.351257 0.054535 0.138672, -0.350449 0.053558 0.13916, -0.349503 0.052826 0.139282, + -0.348389 0.052368 0.13916, -0.347137 0.052155 0.138672, -0.345718 0.052338 0.137817, -0.344223 0.053009 0.136444, + -0.342896 0.054291 0.134613, -0.342133 0.05603 0.132721, -0.342041 0.0578 0.131104, -0.342468 0.059296 0.130005, + -0.34491 0.06076 0.130005, -0.382843 0.070099 0.130005, -0.383972 0.069031 0.131104, -0.384781 0.067444 0.132721, + -0.384979 0.065582 0.134613, -0.384476 0.063782 0.136444, -0.383514 0.062439 0.137817, -0.38237 0.061615 0.138672, + -0.38118 0.061157 0.13916, -0.37999 0.061005 0.139282, -0.378799 0.061157 0.13916, -0.377625 0.061615 0.138672, + -0.37648 0.062439 0.137817, -0.375519 0.063782 0.136444, -0.375015 0.065582 0.134613, -0.375214 0.067444 0.132721, + -0.376022 0.069031 0.131104, -0.377151 0.070099 0.130005, -0.37999 0.07016 0.130005, -0.417511 0.059296 0.130005, + -0.417953 0.0578 0.131104, -0.417862 0.05603 0.132721, -0.417099 0.054291 0.134613, -0.415771 0.053009 0.136444, + -0.414276 0.052338 0.137817, -0.412857 0.052155 0.138672, -0.411591 0.052368 0.13916, -0.410492 0.052826 0.139282, + -0.409531 0.053558 0.13916, -0.408737 0.054535 0.138672, -0.408173 0.055847 0.137817, -0.408005 0.057495 0.136444, + -0.408463 0.059265 0.134613, -0.409576 0.060822 0.132721, -0.411057 0.061768 0.131104, -0.412582 0.062134 0.130005, + -0.415085 0.06076 0.130005, -0.442154 0.032593 0.130005, -0.441772 0.031067 0.131104, -0.440811 0.029572 0.132721, + -0.43927 0.028473 0.134621, -0.437485 0.028015 0.136452, -0.435837 0.028168 0.137825, -0.43454 0.028748 0.138672, + -0.433548 0.029541 0.13916, -0.432831 0.030487 0.139282, -0.432358 0.031616 0.13916, -0.432159 0.032867 0.138672, + -0.432312 0.034271 0.137817, -0.432999 0.035767 0.136444, -0.434296 0.037109 0.134613, -0.43602 0.037872 0.132721, + -0.43779 0.037964 0.131104, -0.439301 0.037506 0.130005, -0.440765 0.035095 0.130005, -0.450104 -0.002838 0.130005, + -0.44902 -0.003967 0.131104, -0.447449 -0.004791 0.132721, -0.445572 -0.004974 0.134613, -0.443787 -0.004486 0.136444, + -0.442444 -0.00351 0.137817, -0.441605 -0.00238 0.138672, -0.441147 -0.00119 0.13916, -0.440994 0 0.139282, + -0.441147 0.00119 0.13916, -0.441605 0.00238 0.138672, -0.442444 0.00351 0.137817, -0.443787 0.004486 0.136444, + -0.445572 0.004974 0.134613, -0.447449 0.004791 0.132721, -0.44902 0.003967 0.131104, -0.450104 0.002838 0.130005, + -0.450165 0 0.130005, -0.439301 -0.037506 0.130005, -0.43779 -0.037964 0.131104, -0.43602 -0.037872 0.132721, + -0.434296 -0.037109 0.134613, -0.432999 -0.035767 0.136444, -0.432327 -0.034271 0.137817, -0.432159 -0.032867 0.138672, + -0.432358 -0.031586 0.13916, -0.432831 -0.030487 0.139282, -0.433548 -0.029541 0.13916, -0.43454 -0.028748 0.138672, + -0.435852 -0.028168 0.137817, -0.437485 -0.028015 0.136444, -0.439285 -0.028473 0.134613, -0.440811 -0.029572 0.132721, + -0.441772 -0.031067 0.131104, -0.442139 -0.032593 0.130005, -0.440765 -0.035095 0.130005, -0.412598 -0.062134 0.130005, + -0.411072 -0.061768 0.131104, -0.409576 -0.060791 0.132721, -0.408478 -0.059265 0.134613, -0.408005 -0.057495 0.136444, + -0.408173 -0.055847 0.137817, -0.408737 -0.054535 0.138672, -0.409546 -0.053558 0.13916, -0.410507 -0.052826 0.139282, + -0.411606 -0.052368 0.13916, -0.412857 -0.052155 0.138672, -0.414276 -0.052307 0.137817, -0.415771 -0.053009 0.136444, + -0.417099 -0.054291 0.134613, -0.417862 -0.05603 0.132721, -0.417953 -0.0578 0.131104, -0.417526 -0.059296 0.130005, + -0.415085 -0.06076 0.130005, -0.377151 -0.070099 0.130005, -0.376022 -0.069031 0.131104, -0.375214 -0.067444 0.132721, + -0.375015 -0.065582 0.134613, -0.375519 -0.063782 0.136444, -0.37648 -0.062439 0.137817, -0.377625 -0.061615 0.138672, + -0.378815 -0.061157 0.13916, -0.380005 -0.061005 0.139282, -0.381195 -0.061157 0.13916, -0.38237 -0.061615 0.138672, + -0.383514 -0.062439 0.137817, -0.384491 -0.063782 0.136444, -0.384979 -0.065582 0.134613, -0.384781 -0.067444 0.132721, + -0.383987 -0.069031 0.131104, -0.382843 -0.070099 0.130005, -0.380005 -0.07016 0.130005, -0.342484 -0.059296 0.130005, + -0.342041 -0.0578 0.131104, -0.342133 -0.05603 0.132721, -0.342896 -0.054291 0.134613, -0.344223 -0.053009 0.136444, + -0.345734 -0.052307 0.137817, -0.347137 -0.052155 0.138672, -0.348404 -0.052368 0.13916, -0.349503 -0.052826 0.139282, + -0.350464 -0.053558 0.13916, -0.351257 -0.054535 0.138672, -0.351822 -0.055847 0.137817, -0.35199 -0.057495 0.136444, + -0.351532 -0.059265 0.134613, -0.350418 -0.060791 0.132721, -0.348938 -0.061768 0.131104, -0.347412 -0.062134 0.130005, + -0.34491 -0.06076 0.130005, -0.348938 0.061768 0.130005, -0.350281 0.060944 0.130005, -0.351288 0.059723 0.130005, + -0.351868 0.058258 0.130005, -0.351974 0.056671 0.130005, -0.351578 0.055145 0.130005, -0.350723 0.053833 0.130005, + -0.349503 0.052826 0.130005, -0.348022 0.052277 0.130005, -0.346451 0.052185 0.130005, -0.344925 0.052612 0.130005, + -0.343613 0.053467 0.130005, -0.342636 0.054718 0.130005, -0.342087 0.056213 0.130005, -0.342041 0.05777 0.130005, + -0.383987 0.069031 0.130005, -0.38472 0.067627 0.130005, -0.384995 0.066071 0.130005, -0.384766 0.064514 0.130005, + -0.384064 0.06311 0.130005, -0.382965 0.061981 0.130005, -0.381561 0.061249 0.130005, -0.37999 0.061005 0.130005, + -0.378433 0.061249 0.130005, -0.377029 0.061981 0.130005, -0.375931 0.06311 0.130005, -0.375229 0.064514 0.130005, + -0.375 0.066071 0.130005, -0.375275 0.067627 0.130005, -0.376007 0.069031 0.130005, -0.417953 0.05777 0.130005, + -0.417908 0.056213 0.130005, -0.417358 0.054718 0.130005, -0.416382 0.053467 0.130005, -0.41507 0.052612 0.130005, + -0.413544 0.052185 0.130005, -0.411972 0.052277 0.130005, -0.410492 0.052826 0.130005, -0.409271 0.053833 0.130005, + -0.408417 0.055145 0.130005, -0.40802 0.056671 0.130005, -0.408112 0.058258 0.130005, -0.408707 0.059723 0.130005, + -0.409714 0.060944 0.130005, -0.411057 0.061768 0.130005, -0.442154 0.032593 0.130005, -0.441757 0.031067 0.129997, + -0.440933 0.029724 0.130005, -0.439713 0.028717 0.130005, -0.438248 0.028137 0.130005, -0.436676 0.028015 0.130013, + -0.43515 0.028412 0.130005, -0.433823 0.029266 0.130005, -0.432831 0.030487 0.129997, -0.432266 0.031982 0.129997, + -0.43219 0.033539 0.130005, -0.432602 0.035065 0.130005, -0.433487 0.036377 0.130005, -0.434723 0.037354 0.130005, + -0.436203 0.037903 0.130005, -0.43779 0.037964 0.130005, -0.439301 0.037506 0.130005, -0.450104 -0.002838 0.130005, + -0.44902 -0.003998 0.130005, -0.447632 -0.00473 0.130005, -0.446075 -0.005005 0.130005, -0.444504 -0.004761 0.130005, + -0.4431 -0.004059 0.130005, -0.441971 -0.00296 0.130005, -0.441254 -0.001556 0.130005, -0.440994 0 0.130005, + -0.441254 0.001556 0.130005, -0.441971 0.00296 0.130005, -0.4431 0.004059 0.130005, -0.444504 0.004761 0.130005, + -0.446075 0.005005 0.130005, -0.447632 0.00473 0.130005, -0.44902 0.003998 0.130005, -0.450104 0.002838 0.130005, + -0.439301 -0.037506 0.130005, -0.437775 -0.037964 0.130005, -0.436203 -0.037903 0.130005, -0.434723 -0.037354 0.130005, + -0.433487 -0.036377 0.130005, -0.432602 -0.035065 0.130005, -0.43219 -0.033539 0.130005, -0.432266 -0.031982 0.130005, + -0.432831 -0.030487 0.130005, -0.433823 -0.029266 0.130005, -0.43515 -0.028412 0.130005, -0.436676 -0.028015 0.130005, + -0.438248 -0.028107 0.130005, -0.439728 -0.028717 0.130005, -0.440933 -0.029724 0.130005, -0.441772 -0.031067 0.130005, + -0.442139 -0.032593 0.130005, -0.412598 -0.062134 0.130005, -0.411057 -0.061768 0.130005, -0.409714 -0.060944 0.130005, + -0.408707 -0.059723 0.130005, -0.408127 -0.058258 0.130005, -0.40802 -0.056671 0.130005, -0.408417 -0.055145 0.130005, + -0.409271 -0.053833 0.130005, -0.410507 -0.052826 0.130005, -0.411972 -0.052277 0.130005, -0.413559 -0.052185 0.130005, + -0.41507 -0.052612 0.130005, -0.416382 -0.053467 0.130005, -0.417358 -0.054718 0.130005, -0.417908 -0.056213 0.130005, + -0.417969 -0.05777 0.130005, -0.417526 -0.059296 0.130005, -0.377151 -0.070099 0.130005, -0.376007 -0.069031 0.130005, + -0.375275 -0.067627 0.130005, -0.375 -0.066071 0.130005, -0.375229 -0.064514 0.130005, -0.375931 -0.06308 0.130005, + -0.377045 -0.061981 0.130005, -0.378448 -0.061249 0.130005, -0.380005 -0.061005 0.130005, -0.381561 -0.061249 0.130005, + -0.382965 -0.061981 0.130005, -0.384064 -0.06308 0.130005, -0.384766 -0.064514 0.130005, -0.384995 -0.066071 0.130005, + -0.384735 -0.067627 0.130005, -0.383987 -0.069031 0.130005, -0.382843 -0.070099 0.130005, -0.342041 -0.05777 0.130005, + -0.342087 -0.056213 0.130005, -0.342636 -0.054718 0.130005, -0.343613 -0.053467 0.130005, -0.344925 -0.052612 0.130005, + -0.346451 -0.052185 0.130005, -0.348022 -0.052277 0.130005, -0.349503 -0.052826 0.130005, -0.350723 -0.053833 0.130005, + -0.351578 -0.055145 0.130005, -0.351974 -0.056671 0.130005, -0.351883 -0.058258 0.130005, -0.351288 -0.059723 0.130005, + -0.350281 -0.060944 0.130005, -0.348938 -0.061768 0.130005, -0.315483 0.044739 0.106506, -0.315865 0.044525 0.093964, + -0.282005 0.044525 0.093964, -0.282005 0.044525 0.093506, -0.098 0.044495 0.093506, -0.098 0.044556 0.093994, + -0.064156 0.044556 0.093994, -0.06456 0.044739 0.107483, -0.064957 0.044983 0.120972, -0.456505 0.015228 0.091492, + -0.452065 0.029846 0.091499, -0.444862 0.043335 0.091492, -0.435158 0.055145 0.091492, -0.423332 0.06485 0.091492, + -0.409859 0.072052 0.091492, -0.395226 0.076508 0.091492, -0.379997 0.078003 0.091492, -0.364784 0.076508 0.091492, + -0.350151 0.072052 0.091492, -0.336662 0.06485 0.091492, -0.324852 0.055145 0.091492, -0.315147 0.043335 0.091492, + -0.307938 0.029846 0.091499, -0.303505 0.015228 0.091492, -0.302002 0 0.091492, -0.302795 0.0112 0.09201, + -0.305206 0.022186 0.092003, -0.309174 0.032684 0.09201, -0.314598 0.042511 0.09201, -0.31514 0.043365 0.092194, + -0.315559 0.044006 0.092651, -0.315788 0.044403 0.093292, -0.315865 0.044525 0.093964, -0.097069 -0.042542 0.09198, + -0.065407 -0.042542 0.09198, -0.077209 0.01123 0.09198, -0.074799 0.022156 0.09198, -0.070839 0.032715 0.09198, + -0.065414 0.042542 0.09198, -0.097069 0.042542 0.09198, -0.080002 0.00592 0.09198, -0.080002 -0.00592 0.09198, + -0.314598 -0.042542 0.09201, -0.282936 -0.042542 0.09201, -0.300003 -0.00592 0.09201, -0.300003 0.00592 0.09201, + -0.282928 0.042511 0.09201, -0.314598 0.042511 0.09201, -0.097435 -0.043335 0.092163, -0.09771 -0.043884 0.092529, + -0.097908 -0.044312 0.09314, -0.082001 -0.010193 0.078064, -0.082092 -0.010376 0.078064, -0.082176 -0.010559 0.078125, + -0.09742 -0.043274 0.091675, -0.097656 -0.043762 0.09198, -0.097832 -0.044189 0.092407, -0.097946 -0.044434 0.092896, + -0.098 -0.044495 0.093506, -0.081245 -0.008606 0.091553, -0.081726 -0.009644 0.091003, -0.081909 -0.01001 0.090637, + -0.08197 -0.010132 0.090332, -0.082001 -0.010193 0.090027, -0.297829 -0.01059 0.078156, -0.082176 -0.010559 0.078125, + -0.082001 -0.01001 0.078003, -0.082001 -0.009827 0.078003, -0.298004 -0.009827 0.078003, -0.298004 -0.01001 0.078003, + -0.298004 -0.010223 0.078033, -0.29792 -0.010406 0.078094, -0.282578 -0.043274 0.091705, -0.09742 -0.043274 0.091675, + -0.298004 -0.010223 0.089996, -0.298035 -0.010162 0.090363, -0.298103 -0.01001 0.090607, -0.298286 -0.009613 0.091034, + -0.298759 -0.008575 0.091583, -0.299339 -0.007355 0.091888, -0.300003 -0.00592 0.09201, -0.282562 -0.043335 0.092163, + -0.282288 -0.043915 0.09256, -0.282097 -0.044342 0.09314, -0.281998 -0.044525 0.093964, -0.282051 -0.044403 0.092896, + -0.282173 -0.044159 0.092407, -0.282349 -0.043793 0.09201, -0.282578 -0.043274 0.091705, -0.298004 0.009735 0.078003, + -0.298004 0.009979 0.078003, -0.298004 0.010223 0.078064, -0.298004 0.010223 0.089996, -0.298004 -0.010223 0.089996, + -0.082001 0.009705 0.078003, -0.298004 0.009735 0.078003, -0.082001 0.010193 0.090027, -0.082001 0.010193 0.078064, + -0.082001 0.009949 0.078003, -0.082001 0.009705 0.078003, -0.080666 0.007324 0.091858, -0.081245 0.008606 0.091553, + -0.081726 0.009583 0.091003, -0.081909 0.01001 0.090637, -0.08197 0.010132 0.090332, -0.082001 0.010193 0.090027, + -0.08213 0.010498 0.078125, -0.082069 0.010376 0.078125, -0.082001 0.010193 0.078064, -0.09745 0.043335 0.092163, + -0.09771 0.043884 0.092529, -0.097908 0.044312 0.09314, -0.098 0.044556 0.093994, -0.097954 0.044434 0.092896, + -0.097832 0.044128 0.092407, -0.097664 0.043762 0.09198, -0.097427 0.043274 0.091675, -0.08213 0.010498 0.078125, + -0.297874 0.010498 0.078156, -0.297943 0.010345 0.078094, -0.298004 0.010223 0.078064, -0.282585 0.043274 0.091705, + -0.282005 0.044525 0.093506, -0.282051 0.044403 0.092896, -0.282173 0.044159 0.092407, -0.282341 0.043793 0.09201, + -0.282585 0.043274 0.091705, -0.282097 0.044342 0.09314, -0.282295 0.043915 0.09256, -0.28257 0.043304 0.092163, + -0.282928 0.042511 0.09201, -0.298759 0.008575 0.091583, -0.298286 0.009613 0.091034, -0.298103 0.01001 0.090607, + -0.298035 0.010132 0.090363, -0.298004 0.010223 0.089996, -0.064865 0.043335 0.092163, -0.064445 0.044006 0.092651, + -0.064217 0.044373 0.093262, -0.064919 0.045044 0.120056, -0.064957 0.044983 0.120972, -0.076508 0.015198 0.091492, + -0.072067 0.029846 0.091499, -0.064857 0.043335 0.091492, -0.055153 0.055176 0.091492, -0.043343 0.06488 0.091492, + -0.029854 0.072083 0.091492, -0.015221 0.076477 0.091492, -8e-006 0.078003 0.091492, 0.015221 0.076477 0.091492, + 0.029839 0.072083 0.091492, 0.043327 0.06488 0.091492, 0.055153 0.055176 0.091492, 0.06485 0.043335 0.091492, + 0.07206 0.029846 0.091499, 0.0765 0.015198 0.091492, 0.077995 0 0.091492, 0.016891 0.044556 0.147156, + 0.015335 0.044373 0.156372, 0.013641 0.04425 0.164978, -0.398636 0.04422 0.165009, -0.400146 0.044373 0.157257, + -0.40181 0.044525 0.148987, -0.357224 0.044525 0.148987, -0.014725 0.045288 0.147156, -0.013428 0.045044 0.147156, + -0.0121 0.045166 0.147156, -0.01088 0.045715 0.147156, -0.009888 0.04657 0.147156, 0.01088 0.045715 0.147156, + 0.0121 0.045166 0.147156, 0.013428 0.045044 0.147156, 0.01474 0.045288 0.147156, -0.017441 0.049255 0.140991, + -0.01712 0.047607 0.140991, -0.016205 0.046265 0.140991, -0.014816 0.045349 0.140991, -0.013199 0.044983 0.140991, + -0.011566 0.045349 0.140991, -0.010193 0.046265 0.140991, -0.009262 0.047607 0.140991, -0.008942 0.049255 0.140991, + -0.009262 0.050903 0.140991, -0.010193 0.052246 0.140991, -0.011566 0.053162 0.140991, -0.013199 0.053528 0.140991, + -0.014816 0.053162 0.140991, -0.016205 0.052246 0.140991, -0.01712 0.050903 0.140991, -0.017441 0.049255 0.140991, + 0.008957 0.049255 0.140991, 0.009277 0.047607 0.140991, 0.010193 0.046265 0.140991, 0.011581 0.045349 0.140991, + 0.013199 0.044983 0.140991, 0.014832 0.045349 0.140991, 0.016205 0.046265 0.140991, 0.017136 0.047607 0.140991, + 0.017456 0.049255 0.140991, 0.017136 0.050903 0.140991, 0.016205 0.052246 0.140991, 0.014832 0.053162 0.140991, + 0.013199 0.053528 0.140991, 0.011581 0.053162 0.140991, 0.010193 0.052246 0.140991, 0.009277 0.050903 0.140991, + 0.008957 0.049255 0.140991, 0.019897 -0.041016 0.164978, 0.02562 -0.036987 0.164978, 0.030685 -0.032104 0.164978, + 0.034988 -0.02655 0.164978, 0.038437 -0.020447 0.164978, 0.040955 -0.013855 0.164978, 0.04248 -0.007019 0.164978, + 0.042999 0 0.164978, 0.04248 0.007019 0.164978, 0.040955 0.013855 0.164978, 0.038437 0.020447 0.164986, + 0.034988 0.02655 0.164986, 0.030685 0.032104 0.164978, 0.02562 0.036987 0.164978, 0.019897 0.041016 0.164978, + -0.398651 -0.04422 0.165009, -0.404907 -0.041046 0.165009, -0.410629 -0.036957 0.165009, -0.415695 -0.032104 0.165009, + -0.419998 -0.02655 0.165009, -0.423431 -0.020416 0.165009, -0.425949 -0.013855 0.165009, -0.42749 -0.007019 0.165009, + -0.427994 0 0.165009, -0.42749 0.007019 0.165009, -0.425949 0.013855 0.165009, -0.423431 0.020416 0.165009, + -0.419998 0.02655 0.165009, -0.415695 0.032104 0.165009, -0.410629 0.036957 0.165009, -0.404907 0.041046 0.165009, + -0.398636 0.04422 0.165009, -0.398987 0.042999 0.165009, -0.410431 0.035828 0.165009, -0.419373 0.025665 0.165009, + -0.425049 0.013397 0.165009, -0.427002 0 0.165009, -0.425049 -0.013397 0.165009, -0.419373 -0.025665 0.165009, + -0.410431 -0.035828 0.165009, -0.398972 -0.042999 0.165009, 0.013977 -0.042969 0.164978, 0.025436 -0.035828 0.164978, + 0.034378 -0.025635 0.164978, 0.040054 -0.013367 0.164978, 0.042007 0 0.164978, 0.040054 0.013367 0.164978, + 0.034378 0.025635 0.164978, 0.025436 0.035828 0.164986, 0.013977 0.04303 0.164978, -0.413239 -0.036804 0.148987, + -0.422089 -0.026245 0.148987, -0.427689 -0.013641 0.148987, -0.429596 0 0.148987, -0.427689 0.013641 0.148987, + -0.422089 0.026245 0.148987, -0.413239 0.036804 0.148987, -0.40181 0.044525 0.148987, -0.398987 0.042999 0.163513, + -0.410431 0.035828 0.163513, -0.419373 0.025665 0.163513, -0.425049 0.013397 0.163513, -0.427002 0 0.163513, + -0.425049 -0.013397 0.163513, -0.419373 -0.025665 0.163513, -0.410431 -0.035828 0.163513, -0.398972 -0.042999 0.163513, + 0.013977 0.04303 0.163513, -0.398987 0.042999 0.163513, 0.013977 -0.042969 0.163513, 0.025436 -0.035828 0.163513, + 0.034378 -0.025635 0.163513, 0.040054 -0.013367 0.163513, 0.042007 0 0.163513, 0.040054 0.013367 0.163513, + 0.034378 0.025635 0.163513, 0.025436 0.035828 0.163513, 0.013977 0.04303 0.163513, 0.013977 -0.042969 0.163513, + 0.014725 -0.045288 0.147156, 0.013428 -0.045044 0.147156, 0.0121 -0.045166 0.147156, 0.01088 -0.045715 0.147156, + 0.009888 -0.04657 0.147156, -0.01088 -0.045715 0.147156, -0.0121 -0.045166 0.147156, -0.013428 -0.045044 0.147156, + -0.01474 -0.045288 0.147156, 0.017441 -0.049255 0.14386, 0.017441 -0.049255 0.140991, 0.01712 -0.047607 0.140991, + 0.016205 -0.046265 0.140991, 0.014832 -0.045349 0.140991, 0.013199 -0.044983 0.140991, 0.011566 -0.045349 0.140991, + 0.010193 -0.046265 0.140991, 0.009277 -0.047607 0.140991, 0.008942 -0.049255 0.140991, 0.008942 -0.049255 0.145447, + 0.009277 -0.050903 0.140991, 0.010193 -0.052246 0.140991, 0.011566 -0.053162 0.140991, 0.013199 -0.053528 0.140991, + 0.014832 -0.053162 0.140991, 0.016205 -0.052246 0.140991, 0.01712 -0.050903 0.140991, -0.008957 -0.049255 0.145447, + -0.008957 -0.049255 0.140991, -0.009277 -0.047607 0.140991, -0.010193 -0.046265 0.140991, -0.011581 -0.045349 0.140991, + -0.013199 -0.044983 0.140991, -0.014832 -0.045349 0.140991, -0.016205 -0.046265 0.140991, -0.01712 -0.047607 0.140991, + -0.017456 -0.049255 0.140991, -0.017456 -0.049255 0.14386, -0.01712 -0.050903 0.140991, -0.016205 -0.052246 0.140991, + -0.014832 -0.053162 0.140991, -0.013199 -0.053528 0.140991, -0.011581 -0.053162 0.140991, -0.010193 -0.052246 0.140991, + -0.009277 -0.050903 0.140991, -0.062805 -0.047119 0.106262, -0.051628 -0.059143 0.106262, -0.044708 -0.064575 0.106262, + -0.036949 -0.069275 0.106262, -0.028442 -0.073181 0.106262, -0.019325 -0.076111 0.106262, -0.009766 -0.077942 0.106262, + 0 -0.078491 0.106262, 0.009773 -0.077942 0.106262, 0.019318 -0.076111 0.106262, 0.028442 -0.073181 0.106262, + 0.036949 -0.069275 0.106262, 0.044708 -0.064575 0.106262, 0.051628 -0.059143 0.106262, 0.062813 -0.047119 0.106262, + 0.070572 -0.034424 0.106262, 0.075371 -0.021973 0.106262, 0.07782 -0.010437 0.106262, -0.058746 -0.052734 0.119507, + -0.05867 -0.052673 0.119873, -0.05854 -0.052551 0.120239, -0.051086 -0.060181 0.119507, -0.051018 -0.06012 0.119873, + -0.050911 -0.059998 0.120239, -0.041763 -0.067017 0.119507, -0.041718 -0.066895 0.119873, -0.041618 -0.066772 0.120239, + -0.0308 -0.072693 0.119507, -0.030754 -0.072571 0.119873, -0.030685 -0.072449 0.120239, -0.018326 -0.076782 0.119507, + -0.018303 -0.07666 0.119873, -0.018265 -0.076538 0.120239, -0.00473 -0.078796 0.119507, -0.004707 -0.078674 0.119873, + -0.004715 -0.078552 0.120239, 0.00946 -0.078369 0.119507, 0.00946 -0.078247 0.119873, 0.009438 -0.078125 0.120239, + 0.02359 -0.075317 0.119507, 0.02356 -0.075256 0.119873, 0.023506 -0.075073 0.120239, 0.036926 -0.069763 0.119507, + 0.036873 -0.069702 0.119873, 0.036781 -0.069519 0.120239, 0.04882 -0.062012 0.119507, 0.048759 -0.061951 0.119873, + 0.048645 -0.061829 0.120239, 0.058846 -0.052612 0.119507, 0.058769 -0.052551 0.119873, 0.058624 -0.052429 0.120239, + 0.06675 -0.042175 0.119507, 0.066658 -0.042114 0.119873, 0.066521 -0.041992 0.120239, 0.07251 -0.031189 0.119507, + 0.072418 -0.031189 0.119873, 0.07225 -0.031067 0.120239, 0.076286 -0.020325 0.119507, 0.076187 -0.020264 0.119873, + 0.076012 -0.020203 0.120239, 0.078323 -0.009827 0.119507, 0.078217 -0.009827 0.119873, 0.078049 -0.009766 0.120239, + 0.078934 0 0.119507, 0.078842 0 0.119873, 0.078659 0 0.120239, 0.078323 0.009827 0.119507, 0.078217 0.009827 0.119873, + 0.078049 0.009766 0.120239, 0.076286 0.020264 0.119514, 0.076187 0.020264 0.119873, 0.076012 0.020203 0.120239, + 0.072502 0.031189 0.119507, 0.072411 0.031128 0.119873, 0.07225 0.031067 0.120239, 0.066742 0.042114 0.119499, + 0.06665 0.042114 0.119881, 0.066505 0.041992 0.120239, 0.058846 0.052612 0.119507, 0.058769 0.052551 0.119873, + 0.058624 0.052429 0.120239, 0.04882 0.062012 0.119507, 0.048759 0.061951 0.119873, 0.048637 0.061829 0.120239, + 0.036926 0.069763 0.119507, 0.036858 0.069702 0.119873, 0.036781 0.069519 0.120239, 0.023582 0.075317 0.119507, + 0.023552 0.075256 0.119873, 0.023506 0.075073 0.120239, 0.00946 0.078369 0.119507, 0.009453 0.078247 0.119873, + 0.009438 0.078125 0.120239, -0.00473 0.078796 0.119507, -0.004723 0.078674 0.119873, -0.004715 0.078491 0.120239, + -0.018333 0.076782 0.119507, -0.018303 0.07666 0.119873, -0.018265 0.076538 0.120239, -0.0308 0.072693 0.119507, + -0.030754 0.072571 0.119873, -0.030693 0.072449 0.120239, -0.041763 0.066956 0.119507, -0.041718 0.066895 0.119873, + -0.041618 0.066772 0.120239, -0.051094 0.060181 0.119507, -0.051033 0.06012 0.119873, -0.050911 0.059937 0.120239, + -0.058754 0.052734 0.119507, -0.058678 0.052673 0.119873, -0.05854 0.052551 0.120239, -0.052322 -0.047363 0.128418, + -0.045456 -0.054016 0.128418, -0.040115 -0.047668 0.135864, -0.037109 -0.060059 0.128418, -0.032761 -0.052979 0.135864, + -0.028183 -0.045593 0.142822, -0.027283 -0.065063 0.128418, -0.024094 -0.057434 0.135864, -0.020737 -0.049438 0.142822, + -0.016159 -0.068726 0.128418, -0.014252 -0.060669 0.135864, -0.004013 -0.070435 0.128418, -0.00354 -0.062195 0.135864, + -0.003052 -0.053528 0.142822, 0.008652 -0.070068 0.128418, 0.007629 -0.061829 0.135864, 0.006577 -0.053223 0.142822, + 0.02124 -0.067322 0.128418, 0.018738 -0.059387 0.135864, 0.033112 -0.062317 0.128418, 0.029236 -0.054993 0.135864, + 0.025162 -0.047363 0.142822, 0.043732 -0.05542 0.128418, 0.038589 -0.048889 0.135864, 0.033218 -0.042053 0.142822, + 0.052658 -0.046997 0.128418, 0.046478 -0.041504 0.135864, 0.059708 -0.037659 0.128418, 0.052704 -0.033203 0.135864, + 0.045349 -0.028564 0.142822, 0.064835 -0.027893 0.128418, 0.057236 -0.024597 0.135864, 0.049255 -0.021179 0.142822, + 0.068207 -0.018127 0.128418, 0.060211 -0.015991 0.135864, 0.070038 -0.008789 0.128418, 0.061813 -0.007751 0.135864, + 0.053192 -0.006653 0.142822, 0.070572 0 0.128418, 0.062302 0 0.135864, 0.053619 0 0.142822, 0.070038 0.008789 0.128418, + 0.061813 0.007751 0.135864, 0.053192 0.006653 0.142822, 0.068207 0.018127 0.128426, 0.060211 0.015991 0.135864, + 0.06485 0.027893 0.128418, 0.05722 0.024597 0.135864, 0.049255 0.021179 0.142815, 0.059708 0.037659 0.12841, + 0.052704 0.033203 0.135864, 0.045349 0.028564 0.142822, 0.052658 0.046997 0.128418, 0.046478 0.041504 0.135864, + 0.043732 0.05542 0.128418, 0.038605 0.048889 0.135864, 0.033218 0.042114 0.142822, 0.033127 0.062317 0.128418, + 0.029236 0.054993 0.135864, 0.025162 0.047363 0.142822, 0.02124 0.067322 0.128418, 0.018753 0.059387 0.135864, + 0.008652 0.070068 0.128418, 0.007645 0.061829 0.135864, 0.006577 0.053223 0.142822, -0.004013 0.070435 0.128418, + -0.00354 0.062195 0.135864, -0.003036 0.053528 0.142822, -0.016144 0.068726 0.128418, -0.014252 0.060669 0.135864, + -0.027283 0.065063 0.128418, -0.024078 0.057434 0.135864, -0.020721 0.049438 0.142822, -0.037109 0.060059 0.128418, + -0.032745 0.052979 0.135864, -0.028183 0.045593 0.142822, -0.045456 0.054016 0.128418, -0.040115 0.047668 0.135864, + -0.052322 0.047363 0.128418, 0.032654 -0.038635 0.143921, 0.031982 -0.037231 0.143921, 0.031982 -0.034851 0.144409, + 0.032654 -0.033508 0.144409, 0.034058 -0.032288 0.144409, 0.036057 -0.031799 0.144409, 0.038055 -0.032288 0.144409, + 0.047256 -0.016968 0.144348, 0.045868 -0.015747 0.144348, 0.045181 -0.014404 0.144348, 0.045181 -0.012024 0.144409, + 0.045868 -0.01062 0.144409, 0.047256 -0.00946 0.144409, 0.049255 -0.008972 0.144409, 0.049255 0.008972 0.144409, + 0.047256 0.00946 0.144409, 0.045868 0.010681 0.144409, 0.045181 0.012024 0.144409, 0.045181 0.014404 0.144348, + 0.045868 0.015747 0.144348, 0.047256 0.016968 0.144348, 0.038055 0.032288 0.144409, 0.036057 0.031799 0.144409, + 0.034058 0.032288 0.144409, 0.032669 0.033508 0.144417, 0.031982 0.034851 0.144409, 0.031982 0.037231 0.143921, + 0.032669 0.038635 0.143921, -0.457787 -0.010437 0.105255, -0.455353 -0.021973 0.105255, -0.450546 -0.034393 0.105255, + -0.442787 -0.047089 0.105255, -0.431602 -0.059143 0.105255, -0.42469 -0.064514 0.105255, -0.416931 -0.069244 0.105255, + -0.408432 -0.073151 0.105255, -0.399323 -0.07608 0.105255, -0.389771 -0.077881 0.105255, -0.379997 -0.078491 0.105255, + -0.370232 -0.077881 0.105255, -0.36068 -0.07608 0.105255, -0.35157 -0.073151 0.105255, -0.343071 -0.069244 0.105255, + -0.335312 -0.064514 0.105255, -0.3284 -0.059143 0.105255, -0.317223 -0.047089 0.105255, -0.321205 0.052673 0.119385, + -0.321266 0.052612 0.119751, -0.321373 0.052521 0.120087, -0.32885 0.06015 0.119385, -0.328911 0.060059 0.119751, + -0.329002 0.059967 0.120087, -0.338173 0.066956 0.119385, -0.338219 0.066864 0.119751, -0.338295 0.066742 0.120087, + -0.349144 0.072662 0.119385, -0.349174 0.072571 0.119751, -0.349236 0.072449 0.120087, -0.36161 0.076782 0.119385, + -0.361641 0.076691 0.119751, -0.361671 0.076569 0.120087, -0.375221 0.078796 0.119385, -0.375221 0.078705 0.119751, + -0.375237 0.078552 0.120087, -0.389435 0.078369 0.119385, -0.389404 0.078278 0.119751, -0.389397 0.078156 0.120087, + -0.403564 0.075348 0.119385, -0.403526 0.075256 0.119751, -0.403481 0.075134 0.120087, -0.416893 0.069794 0.119385, + -0.416847 0.069733 0.119751, -0.416786 0.06958 0.120087, -0.42881 0.062042 0.119385, -0.428749 0.061981 0.119751, + -0.428658 0.061859 0.120087, -0.438835 0.052643 0.119385, -0.438782 0.052582 0.119751, -0.438667 0.05249 0.120087, + -0.446754 0.042145 0.119385, -0.446678 0.042114 0.119751, -0.446556 0.042023 0.120087, -0.452515 0.031219 0.119392, + -0.452431 0.031189 0.119751, -0.452301 0.031128 0.120087, -0.456291 0.020294 0.119377, -0.456207 0.020294 0.119751, + -0.456062 0.020233 0.120087, -0.458328 0.009796 0.119385, -0.458244 0.009796 0.119751, -0.458107 0.009796 0.120087, + -0.458939 0 0.119385, -0.458855 0 0.119751, -0.458717 0 0.120087, -0.458328 -0.009827 0.119385, -0.458244 -0.009796 0.119751, + -0.458107 -0.009796 0.120087, -0.456291 -0.020294 0.119385, -0.456207 -0.020294 0.119751, -0.45607 -0.020233 0.120087, + -0.452515 -0.031219 0.119385, -0.452438 -0.031189 0.119751, -0.452301 -0.031128 0.120087, -0.446754 -0.042175 0.119385, + -0.446671 -0.042114 0.119751, -0.446541 -0.042053 0.120087, -0.438835 -0.052643 0.119385, -0.438782 -0.052582 0.119751, + -0.438667 -0.05249 0.120087, -0.428802 -0.062042 0.119385, -0.428749 -0.061981 0.119751, -0.428658 -0.061859 0.120087, + -0.416878 -0.069794 0.119385, -0.416847 -0.069733 0.119751, -0.416771 -0.06958 0.120087, -0.403549 -0.075348 0.119385, + -0.403526 -0.075256 0.119751, -0.403481 -0.075134 0.120087, -0.38942 -0.078369 0.119385, -0.389404 -0.078308 0.119751, + -0.389397 -0.078156 0.120087, -0.375221 -0.078796 0.119385, -0.375221 -0.078735 0.119751, -0.375237 -0.078552 0.120087, + -0.36161 -0.076782 0.119385, -0.361641 -0.076691 0.119751, -0.361664 -0.076538 0.120087, -0.349144 -0.072662 0.119385, + -0.349174 -0.072601 0.119751, -0.349236 -0.072449 0.120087, -0.338165 -0.066956 0.119385, -0.338211 -0.066895 0.119751, + -0.338287 -0.066742 0.120087, -0.32885 -0.06012 0.119385, -0.328911 -0.060059 0.119751, -0.329002 -0.059967 0.120087, + -0.321205 -0.052673 0.119385, -0.321259 -0.052612 0.119751, -0.321373 -0.052521 0.120087, -0.326614 0.048218 0.128052, + -0.333603 0.054993 0.128052, -0.338089 0.049683 0.135406, -0.342102 0.061157 0.128052, -0.349625 0.049011 0.142395, + -0.352112 0.066315 0.128052, -0.354813 0.059906 0.135406, -0.357651 0.053162 0.142395, -0.363464 0.070007 0.128052, + -0.365067 0.063232 0.135406, -0.366745 0.056122 0.142395, -0.375854 0.071808 0.128052, -0.376678 0.057556 0.142395, + -0.388763 0.071411 0.128052, -0.387924 0.064484 0.135406, -0.387024 0.05722 0.142395, -0.401611 0.068604 0.128052, + -0.399521 0.061981 0.135406, -0.397308 0.054993 0.142395, -0.413727 0.063538 0.128052, -0.407028 0.050934 0.142395, + -0.424545 0.056488 0.128052, -0.420242 0.051025 0.135406, -0.415695 0.045288 0.142395, -0.433655 0.047913 0.128052, + -0.428482 0.043274 0.135406, -0.423004 0.038391 0.142395, -0.440842 0.038361 0.128052, -0.428772 0.030762 0.142395, + -0.446106 0.028412 0.128052, -0.439697 0.025665 0.135406, -0.432968 0.022766 0.142395, -0.449524 0.018494 0.128052, + -0.442795 0.016693 0.135406, -0.43573 0.014801 0.142395, -0.451385 0.008942 0.128052, -0.444473 0.008057 0.135406, + -0.43721 0.007172 0.142395, -0.45195 0 0.128052, -0.437653 0 0.142395, -0.451385 -0.008942 0.128052, + -0.444473 -0.008057 0.135406, -0.43721 -0.007172 0.142395, -0.449524 -0.018494 0.128052, -0.442795 -0.016693 0.135406, + -0.43573 -0.014801 0.142395, -0.446091 -0.028412 0.128052, -0.439697 -0.025665 0.135406, -0.432968 -0.022766 0.142395, + -0.440857 -0.038391 0.128052, -0.428772 -0.030762 0.142395, -0.43367 -0.047913 0.128052, -0.428467 -0.043274 0.135406, + -0.423004 -0.038391 0.142395, -0.424545 -0.056488 0.128052, -0.420242 -0.051025 0.135406, -0.41571 -0.045258 0.142395, + -0.413727 -0.063538 0.128052, -0.407028 -0.050934 0.142395, -0.401611 -0.068634 0.128052, -0.399521 -0.061981 0.135406, + -0.397324 -0.054993 0.142395, -0.388763 -0.071411 0.128053, -0.387924 -0.064484 0.135406, -0.387024 -0.05722 0.142395, + -0.375854 -0.071838 0.128052, -0.376678 -0.057556 0.142395, -0.36348 -0.070007 0.128052, -0.365067 -0.063232 0.135406, + -0.36676 -0.056122 0.142395, -0.352127 -0.066315 0.128052, -0.354813 -0.059906 0.135406, -0.357651 -0.053162 0.142395, + -0.342117 -0.061157 0.128052, -0.34964 -0.049011 0.142395, -0.333603 -0.054993 0.128052, -0.338104 -0.049652 0.135406, + -0.326614 -0.048218 0.128052, -0.343613 0.053467 0.134644, -0.345139 0.052521 0.134644, -0.346802 0.052155 0.134644, + -0.348297 0.052338 0.134644, -0.349503 0.052826 0.134644, -0.350525 0.053619 0.134644, -0.351425 0.05484 0.134644, + -0.351944 0.056458 0.134644, -0.351868 0.058258 0.134644, -0.375229 0.064514 0.134644, -0.376068 0.062897 0.134644, + -0.377319 0.061768 0.134644, -0.378708 0.061157 0.134644, -0.37999 0.061005 0.134644, -0.381287 0.061157 0.134644, + -0.38266 0.061768 0.134644, -0.383926 0.062897 0.134644, -0.384766 0.064514 0.134644, -0.408112 0.058258 0.134644, + -0.408051 0.056458 0.134644, -0.408569 0.05484 0.134644, -0.40947 0.053619 0.134644, -0.410492 0.052826 0.134644, + -0.411697 0.052338 0.134644, -0.413193 0.052155 0.134644, -0.414856 0.052521 0.134644, -0.416382 0.053467 0.134644, + -0.433487 0.036377 0.134644, -0.43251 0.034851 0.134644, -0.432159 0.033203 0.134644, -0.432327 0.031708 0.134644, + -0.432831 0.030487 0.134644, -0.433609 0.02948 0.134644, -0.43483 0.028564 0.134636, -0.436447 0.028046 0.134651, + -0.438248 0.028137 0.134644, -0.444504 0.004761 0.134644, -0.442902 0.003937 0.134644, -0.441772 0.002686 0.134644, + -0.441162 0.001282 0.134644, -0.440994 0 0.134644, -0.441162 -0.001282 0.134644, -0.441772 -0.002655 0.134644, + -0.442902 -0.003937 0.134644, -0.444504 -0.004761 0.134644, -0.438248 -0.028107 0.134644, -0.436447 -0.028046 0.134644, + -0.43483 -0.028564 0.134644, -0.433624 -0.02948 0.134644, -0.432831 -0.030487 0.134644, -0.432327 -0.031708 0.134644, + -0.432159 -0.033203 0.134644, -0.43251 -0.034851 0.134644, -0.433487 -0.036377 0.134644, -0.416382 -0.053467 0.134644, + -0.414856 -0.052521 0.134644, -0.413208 -0.052155 0.134644, -0.411697 -0.052338 0.134644, -0.410507 -0.052826 0.134644, + -0.40947 -0.053619 0.134644, -0.408569 -0.05484 0.134644, -0.408051 -0.056458 0.134644, -0.408127 -0.058258 0.134644, + -0.384766 -0.064514 0.134644, -0.383926 -0.062897 0.134644, -0.382675 -0.061768 0.134644, -0.381287 -0.061157 0.134644, + -0.380005 -0.061005 0.134644, -0.378708 -0.061157 0.134644, -0.377335 -0.061768 0.134644, -0.376068 -0.062897 0.134644, + -0.375229 -0.064514 0.134644, -0.351883 -0.058258 0.134644, -0.351944 -0.056458 0.134644, -0.351425 -0.05484 0.134644, + -0.350525 -0.053619 0.134644, -0.349503 -0.052826 0.134644, -0.348297 -0.052338 0.134644, -0.346802 -0.052155 0.134644, + -0.345139 -0.052521 0.134644, -0.343613 -0.053467 0.134644, -0.317223 0.047089 0.105255, -0.328392 0.059113 0.105255, + -0.33532 0.064514 0.105255, -0.343071 0.069244 0.105255, -0.35157 0.073151 0.105255, -0.36068 0.07605 0.105255, + -0.370232 0.077881 0.105255, -0.379997 0.078491 0.105255, -0.389778 0.077881 0.105255, -0.399323 0.07605 0.105255, + -0.40844 0.073151 0.105255, -0.416939 0.069244 0.105255, -0.42469 0.064514 0.105255, -0.431602 0.059113 0.105255, + -0.442787 0.047089 0.105255, -0.450546 0.034393 0.105255, -0.455353 0.021973 0.105255, -0.457787 0.010406 0.105255, + -0.081078 -0.043274 0.092163, -0.081078 -0.043945 0.09259, -0.081078 -0.044373 0.093262, -0.190002 -0.010193 0.078064, + -0.080742 0 0.091858, -0.081421 0 0.091431, -0.081863 0 0.090759, -0.190002 0.010132 0.078064, -0.19001 0.043762 0.09198, + -0.19001 0.044189 0.092407, -0.19001 0.044434 0.092957, -0.298935 0.043243 0.092133, -0.298927 0.043915 0.09256, + -0.298927 0.044373 0.093231, -0.299271 0 0.091858, -0.298592 0 0.0914, -0.298141 0 0.090729, -0.081085 0.043274 0.092163, + -0.081078 0.043945 0.09259, -0.081078 0.044373 0.093262, 0.07782 0.010437 0.106262, 0.075371 0.021973 0.106262, + 0.070572 0.034424 0.10627, 0.062813 0.047119 0.106262, 0.051628 0.059143 0.106262, 0.044701 0.064514 0.106262, + 0.036949 0.069275 0.106262, 0.028435 0.073181 0.106262, 0.019318 0.076111 0.106262, 0.009773 0.077881 0.106262, + -8e-006 0.078491 0.106262, -0.009766 0.077881 0.106262, -0.019325 0.076111 0.106262, -0.02845 0.073181 0.106262, + -0.036949 0.069275 0.106262, -0.044716 0.064514 0.106262, -0.051628 0.059143 0.106262, -0.062805 0.047119 0.106262, + -0.009109 0.048096 0.144104, -0.009796 0.046692 0.144104, -0.0112 0.045532 0.144104, -0.013199 0.044983 0.144104, + -0.015198 0.045532 0.144104, -0.016602 0.046692 0.144104, -0.017273 0.048096 0.144104, -0.009796 0.051819 0.14325, + -0.009109 0.050476 0.14325, 0.017288 0.048096 0.144104, 0.016602 0.046692 0.144104, 0.015198 0.045532 0.144104, + 0.013199 0.044983 0.144104, 0.0112 0.045532 0.144104, 0.009811 0.046692 0.144104, 0.009125 0.048096 0.144104, + 0.009125 0.050476 0.14325, 0.009811 0.051819 0.14325, 0.021286 0.041199 0.156067, 0.026901 0.037048 0.156067, + 0.03186 0.032104 0.156067, 0.036072 0.026489 0.156067, 0.039444 0.020386 0.156067, 0.041901 0.013794 0.156067, + 0.043396 0.006958 0.156067, 0.0439 0 0.156067, 0.043396 -0.006958 0.156067, 0.041901 -0.013794 0.156067, + 0.039444 -0.020386 0.156067, 0.036072 -0.026489 0.156067, 0.03186 -0.032104 0.156067, 0.026901 -0.037048 0.156067, + 0.021286 -0.041199 0.156067, -0.406128 -0.041168 0.157013, -0.411758 -0.037018 0.157013, -0.416733 -0.032104 0.157013, + -0.420959 -0.02652 0.157013, -0.424332 -0.020386 0.157013, -0.426804 -0.013824 0.157013, -0.428299 -0.006989 0.157013, + -0.428802 0 0.157013, -0.428299 0.006989 0.157013, -0.426804 0.013824 0.157013, -0.424332 0.020386 0.157013, + -0.420959 0.02652 0.157021, -0.416733 0.032104 0.157013, -0.411758 0.037018 0.157005, -0.406128 0.041168 0.157013, + -0.408875 0.037079 0.164246, -0.417969 0.027679 0.164246, -0.421707 0.021667 0.164246, -0.424576 0.014923 0.164246, + -0.426376 0.007599 0.164246, -0.427002 0 0.164246, -0.426376 -0.007599 0.164246, -0.424576 -0.014923 0.164246, + -0.421707 -0.021667 0.164246, -0.417984 -0.027679 0.164246, -0.408875 -0.037079 0.164246, 0.023865 -0.037109 0.164246, + 0.032974 -0.02771 0.164246, 0.036697 -0.021667 0.164246, 0.039566 -0.014893 0.164246, 0.041382 -0.007629 0.164246, + 0.042007 0 0.164246, 0.041382 0.007629 0.164246, 0.039566 0.014893 0.164246, 0.036697 0.021667 0.164238, + 0.032974 0.02771 0.164238, 0.023865 0.037109 0.164238, -0.298927 -0.043274 0.092133, -0.298927 -0.043945 0.09256, + -0.298927 -0.044373 0.093231, -0.190002 -0.043762 0.09198, -0.190002 -0.044189 0.092407, -0.190002 -0.044434 0.092957, + 0.009125 -0.048096 0.144104, 0.009796 -0.046692 0.144104, 0.0112 -0.045532 0.144104, 0.013199 -0.044983 0.144104, + 0.015198 -0.045532 0.144104, 0.016602 -0.046692 0.144104, 0.017273 -0.048096 0.144104, 0.009796 -0.051819 0.14325, + 0.009125 -0.050476 0.14325, -0.017288 -0.048096 0.144104, -0.016602 -0.046692 0.144104, -0.015198 -0.045532 0.144104, + -0.013199 -0.044983 0.144104, -0.0112 -0.045532 0.144104, -0.009796 -0.046692 0.144104, -0.009125 -0.048096 0.144104, + -0.009125 -0.050476 0.14325, -0.009796 -0.051819 0.14325, -0.076004 -0.016724 0.09198, -0.076607 -0.013977 0.09198, + -0.076309 -0.01532 0.09198, -0.072823 -0.027466 0.09198, -0.071831 -0.03009 0.09198, -0.064766 -0.044861 0.114258, + -0.064865 -0.044922 0.117615, -0.05661 -0.044922 0.126404, -0.043076 -0.044739 0.135803, -0.031967 -0.044617 0.141663, + -0.031845 0.044617 0.141724, -0.042923 0.044739 0.135864, -0.056541 0.044922 0.126465, 0.040161 -0.036865 0.142151, + 0.038589 -0.039368 0.141663, 0.037231 -0.040039 0.141968, 0.035599 -0.040222 0.142761, 0.033936 -0.039612 0.143921, + 0.034332 -0.039856 0.143555, 0.039337 -0.033508 0.144287, 0.040115 -0.035156 0.143005, 0.040024 -0.034729 0.143311, + 0.052856 -0.01532 0.141724, 0.051819 -0.016479 0.142273, 0.048462 -0.017273 0.14447, 0.051483 -0.009705 0.143738, + 0.051086 -0.00946 0.144043, 0.05275 -0.010925 0.142639, 0.05336 -0.012451 0.141907, 0.05336 0.012451 0.141907, + 0.05275 0.010925 0.142639, 0.051483 0.009705 0.143738, 0.051086 0.00946 0.144043, 0.048477 0.017273 0.14447, + 0.051819 0.016479 0.142273, 0.052856 0.01532 0.141724, 0.040115 0.035156 0.143005, 0.040024 0.034729 0.143311, + 0.039337 0.033508 0.144287, 0.033936 0.039612 0.143921, 0.034332 0.039856 0.143555, 0.035614 0.040222 0.142761, + 0.037231 0.0401 0.141968, 0.038589 0.039368 0.14167, 0.040146 0.036865 0.142151, -0.064888 -0.045044 0.119568, + -0.307182 -0.027435 0.09201, -0.308174 -0.03006 0.09201, -0.304001 -0.016693 0.09201, -0.303398 -0.013947 0.09201, + -0.303696 -0.01532 0.09201, -0.334564 0.044739 0.136414, -0.331955 0.044769 0.134552, -0.344299 0.044617 0.1427, + -0.342041 0.044647 0.141418, -0.348511 -0.044586 0.144562, -0.344147 -0.044617 0.142365, -0.341965 -0.044647 0.141235, + -0.334564 -0.044739 0.136414, -0.331955 -0.044769 0.134552, -0.343689 0.060028 0.130005, -0.343704 -0.060028 0.130005, + -0.342087 0.056915 0.131897, -0.342514 0.055145 0.133667, -0.342697 0.054718 0.134155, -0.350967 0.060028 0.133667, + -0.351242 0.059662 0.134155, -0.34967 0.061279 0.131897, -0.37561 0.068237 0.131897, -0.375107 0.066498 0.133667, + -0.375061 0.06604 0.134155, -0.384872 0.066498 0.133667, -0.384933 0.06604 0.134155, -0.384384 0.068237 0.131897, + -0.410324 0.061279 0.131897, -0.409027 0.060028 0.133667, -0.408737 0.059662 0.134155, -0.41748 0.055145 0.133667, + -0.417282 0.054718 0.134155, -0.417908 0.056915 0.131897, -0.43689 0.037903 0.131889, -0.43515 0.037476 0.133667, + -0.434723 0.037292 0.134155, -0.440048 0.029022 0.133659, -0.439651 0.028748 0.134155, -0.441284 0.030334 0.131897, + -0.448242 0.004395 0.131897, -0.446503 0.004883 0.133667, -0.446045 0.004944 0.134155, -0.446503 -0.004883 0.133667, + -0.446045 -0.004944 0.134155, -0.448242 -0.004395 0.131897, -0.441284 -0.030334 0.131897, -0.440048 -0.029022 0.133667, + -0.439667 -0.028748 0.134155, -0.435165 -0.037476 0.133667, -0.434723 -0.037292 0.134155, -0.436905 -0.037903 0.131897, + -0.417908 -0.056915 0.131897, -0.41748 -0.055145 0.133667, -0.417297 -0.054718 0.134155, -0.409027 -0.060028 0.133667, + -0.408752 -0.059662 0.134155, -0.410324 -0.061279 0.131897, -0.384384 -0.068237 0.131897, -0.384888 -0.066498 0.133667, + -0.384933 -0.06604 0.134155, -0.375122 -0.066498 0.133667, -0.375061 -0.06604 0.134155, -0.37561 -0.068237 0.131897, + -0.34967 -0.061279 0.131897, -0.350967 -0.060028 0.133667, -0.351257 -0.059662 0.134155, -0.342514 -0.055145 0.133667, + -0.342712 -0.054718 0.134155, -0.342087 -0.056915 0.131897, -0.303993 0.016693 0.092003, -0.303398 0.013947 0.09201, + -0.303696 0.01532 0.09201, -0.30719 0.027435 0.092003, -0.308167 0.03006 0.09201, -0.088539 -0.024231 0.09198, + -0.291466 -0.024231 0.09201, -0.088539 0.024231 0.09198, -0.291458 0.024231 0.09201, -0.064766 0.044861 0.114258, + -0.064873 0.044922 0.117615, -0.07283 0.027405 0.09198, -0.071831 0.03009 0.09198, -0.076004 0.016663 0.09198, + -0.076607 0.013916 0.09198, -0.076309 0.01532 0.09198, -0.017258 0.050171 0.14325, -0.017166 0.050598 0.143005, + -0.016586 0.051697 0.142334, -0.011154 0.052917 0.142517, -0.009872 0.051758 0.143555, 0.009705 0.046875 0.147034, + 0.009796 0.046753 0.147095, 0.009842 0.046692 0.147156, 0.009872 0.051758 0.143555, 0.011154 0.052917 0.142517, + 0.016602 0.051697 0.142334, 0.017258 0.050171 0.14325, 0.017166 0.050598 0.143005, 0.022842 -0.040649 0.147522, + -0.422211 0.019531 0.165009, -0.426025 0.006683 0.165009, -0.426025 -0.006683 0.165009, -0.422211 -0.019531 0.165009, + 0.037216 -0.019531 0.164978, 0.041031 -0.006714 0.164978, 0.041031 0.006714 0.164978, 0.037201 0.019531 0.164978, + -0.407516 0.040649 0.148987, -0.379517 0.044525 0.148987, -0.379517 -0.044525 0.148987, 0.017258 -0.050171 0.14325, + 0.017166 -0.050598 0.143005, 0.016586 -0.051697 0.142334, 0.011154 -0.052917 0.142517, 0.009872 -0.051758 0.143555, + -0.009705 -0.046875 0.147034, -0.009796 -0.046753 0.147095, -0.009842 -0.046692 0.147156, -0.009872 -0.051758 0.143555, + -0.011154 -0.052917 0.142517, -0.016586 -0.051697 0.142334, -0.017258 -0.050171 0.14325, -0.017166 -0.050598 0.143005, + -0.064865 -0.045044 0.119141, -0.056938 -0.054688 0.119141, -0.047615 -0.062988 0.119141, -0.037071 -0.069702 0.119141, + -0.025604 -0.074707 0.119141, -0.013504 -0.07782 0.119141, -0.00106 -0.078979 0.119141, 0.023598 -0.075378 0.119141, + 0.011406 -0.078125 0.119141, 0.035187 -0.070679 0.119141, 0.045898 -0.06427 0.119141, 0.077972 -0.012451 0.119141, + 0.075035 -0.024597 0.119141, 0.070206 -0.036133 0.119141, 0.055458 -0.056213 0.119141, 0.063629 -0.046753 0.119141, + -0.064224 -0.044983 0.120544, -0.056335 -0.054565 0.120544, -0.047035 -0.062744 0.120544, -0.03656 -0.069397 0.120544, + -0.025185 -0.07428 0.120544, -0.013176 -0.077332 0.120544, -0.000832 -0.07843 0.120544, 0.011528 -0.077576 0.120544, + 0.023598 -0.074768 0.120544, 0.03508 -0.070129 0.120544, 0.045685 -0.063721 0.120544, 0.055161 -0.055786 0.120544, + 0.063248 -0.046387 0.120544, 0.069756 -0.035828 0.120544, 0.074524 -0.024414 0.120544, 0.077438 -0.012329 0.120544, + 0.078415 0 0.120544, 0.077438 0.012329 0.120544, 0.074524 0.024414 0.120544, 0.069756 0.035828 0.120544, + 0.06324 0.046387 0.120544, 0.055161 0.055725 0.120544, 0.0457 0.063721 0.120544, 0.03508 0.070129 0.120544, + 0.023598 0.074768 0.120544, 0.011528 0.077576 0.120544, -0.000832 0.07843 0.120544, -0.013176 0.077332 0.120544, + -0.025185 0.07428 0.120544, -0.03656 0.069397 0.120544, -0.047035 0.062744 0.120544, -0.064209 0.044983 0.120544, + -0.056335 0.054565 0.120544, 0.037994 -0.039856 0.141724, 0.040314 -0.036072 0.142456, 0.039993 -0.037659 0.141846, + 0.039185 -0.03894 0.141602, 0.036469 -0.040283 0.142273, 0.033127 -0.039124 0.144592, 0.03212 -0.037659 0.145874, + 0.031815 -0.036072 0.146851, 0.034729 -0.0401 0.14325, 0.032104 -0.034546 0.147522, 0.031815 -0.036072 0.146851, + 0.033981 -0.032349 0.147705, 0.032852 -0.033264 0.147766, 0.0354 -0.03186 0.147217, 0.040314 -0.036072 0.140991, + 0.039932 -0.034302 0.143555, 0.038742 -0.032776 0.144958, 0.037064 -0.031921 0.146301, 0.040314 -0.036072 0.142456, + 0.033051 -0.033081 0.140991, 0.032135 -0.034424 0.140991, 0.033051 -0.039063 0.140991, 0.037689 -0.032166 0.140991, + 0.034439 -0.032166 0.140991, 0.039063 -0.033081 0.140991, 0.032135 -0.037659 0.140991, 0.031815 -0.036072 0.140991, + 0.034439 -0.039978 0.140991, 0.039063 -0.039063 0.140991, 0.036057 -0.031799 0.140991, 0.039993 -0.037659 0.140991, + 0.039993 -0.034424 0.140991, 0.040314 -0.036072 0.140991, 0.037689 -0.039978 0.140991, 0.036057 -0.040283 0.140991, + 0.052475 -0.015991 0.141907, 0.051163 -0.017029 0.142578, 0.049408 -0.017456 0.143738, 0.053253 -0.014648 0.141602, + 0.053513 -0.013184 0.141663, 0.047531 -0.01709 0.145142, 0.046112 -0.016052 0.146362, 0.045013 -0.013184 0.147705, + 0.045288 -0.014709 0.147217, 0.045258 -0.01178 0.147766, 0.045013 -0.013184 0.147705, 0.04599 -0.010498 0.147522, + 0.04718 -0.009521 0.146851, 0.048798 -0.008972 0.145752, 0.05069 -0.009216 0.144409, 0.052277 -0.010193 0.143066, + 0.053513 -0.013184 0.140991, 0.053513 -0.013184 0.141663, 0.053223 -0.011658 0.142151, 0.045334 -0.011597 0.140991, + 0.045013 -0.013184 0.140991, 0.045334 -0.014832 0.140991, 0.046265 -0.010193 0.140991, 0.046265 -0.016174 0.140991, + 0.052261 -0.010193 0.140991, 0.047638 -0.017151 0.140991, 0.049255 -0.017456 0.140991, 0.050888 -0.017151 0.140991, + 0.052261 -0.016174 0.140991, 0.050888 -0.009277 0.140991, 0.047638 -0.009277 0.140991, 0.053192 -0.011597 0.140991, + 0.053192 -0.014832 0.140991, 0.053513 -0.013184 0.140991, 0.049255 -0.008972 0.140991, 0.053513 0.013184 0.141663, + 0.052277 0.010193 0.143066, 0.048798 0.008972 0.145752, 0.05069 0.009216 0.144409, 0.053223 0.011658 0.142151, + 0.04718 0.009521 0.146851, 0.04599 0.010498 0.147522, 0.045258 0.01178 0.147766, 0.045013 0.013184 0.147705, + 0.045288 0.014709 0.147217, 0.046097 0.016052 0.146362, 0.047531 0.01709 0.145142, 0.052475 0.015991 0.141914, + 0.051163 0.017029 0.142578, 0.049408 0.017456 0.143738, 0.053253 0.014648 0.141602, 0.053513 0.013184 0.140991, + 0.053513 0.013184 0.141663, 0.046265 0.016235 0.140991, 0.045334 0.014832 0.140991, 0.046265 0.010193 0.140991, + 0.050888 0.017151 0.140991, 0.047623 0.017151 0.140991, 0.052261 0.016235 0.140991, 0.045334 0.011597 0.140991, + 0.045013 0.013184 0.140991, 0.047638 0.009277 0.140991, 0.052261 0.010193 0.140991, 0.049255 0.017456 0.140991, + 0.053192 0.011597 0.140991, 0.053192 0.014832 0.140991, 0.053513 0.013184 0.140991, 0.050888 0.009277 0.140991, + 0.049255 0.008972 0.140991, 0.039932 0.034302 0.143555, 0.037064 0.031921 0.146301, 0.038742 0.032776 0.144966, + 0.0354 0.03186 0.147217, 0.040314 0.036072 0.142456, 0.032852 0.033264 0.147766, 0.033966 0.032349 0.147705, + 0.032104 0.034546 0.147522, 0.031815 0.036072 0.146843, 0.03212 0.037659 0.145874, 0.033127 0.039124 0.144592, + 0.034744 0.0401 0.14325, 0.040314 0.036072 0.140984, 0.040314 0.036072 0.142456, 0.036469 0.040283 0.142281, + 0.03801 0.039856 0.141724, 0.0392 0.03894 0.141602, 0.040009 0.037659 0.141846, 0.033051 0.039063 0.140991, + 0.032135 0.03772 0.140991, 0.033051 0.033081 0.140991, 0.037704 0.039978 0.140984, 0.034439 0.039978 0.140984, + 0.039078 0.039063 0.140991, 0.03215 0.034424 0.140991, 0.031815 0.036072 0.140984, 0.034439 0.032166 0.140991, + 0.039063 0.033081 0.140991, 0.036057 0.040283 0.140984, 0.039993 0.034424 0.140991, 0.039993 0.03772 0.140991, + 0.040314 0.036072 0.140984, 0.037689 0.032166 0.140991, 0.036057 0.031799 0.140984, -0.064972 -0.044983 0.120972, + -0.064865 -0.045044 0.119141, -0.064842 -0.045044 0.119507, -0.064919 -0.045044 0.120056, -0.064224 -0.044983 0.120544, + -0.064728 -0.045044 0.119873, -0.03714 -0.044678 0.139343, -0.026794 -0.044617 0.144043, -0.048996 -0.0448 0.132263, + -0.016876 -0.044556 0.147156, 0.016876 -0.044556 0.147156, 0.017044 -0.044556 0.147156, -0.064972 -0.044983 0.120972, + -0.06456 -0.044739 0.107483, -0.064148 -0.044556 0.093994, -0.315857 -0.044525 0.093964, -0.315475 -0.044739 0.106506, + -0.458969 0 0.119049, -0.457977 -0.012451 0.119049, -0.45504 -0.024628 0.119049, -0.450203 -0.036163 0.119049, + -0.443619 -0.046783 0.119049, -0.43544 -0.056244 0.119049, -0.425873 -0.06427 0.119049, -0.415154 -0.070709 0.119049, + -0.403557 -0.075378 0.119049, -0.378883 -0.078949 0.119049, -0.391365 -0.078125 0.119049, -0.366447 -0.077789 0.119049, + -0.35434 -0.074677 0.119049, -0.342873 -0.069702 0.119049, -0.332344 -0.062958 0.119049, -0.323006 -0.054657 0.119049, + -0.315216 -0.044983 0.11972, -0.315094 -0.044983 0.119049, -0.315399 -0.044983 0.120056, -0.315643 0.044983 0.120361, + -0.323555 0.054565 0.120361, -0.332848 0.062775 0.120361, -0.34333 0.069427 0.120361, -0.354729 0.074341 0.120361, + -0.36676 0.077393 0.120361, -0.37912 0.078522 0.120361, -0.391487 0.077667 0.120361, -0.403587 0.07489 0.120361, + -0.4151 0.070221 0.120361, -0.42572 0.063843 0.120361, -0.435204 0.055817 0.120361, -0.443306 0.046448 0.120361, + -0.449829 0.035889 0.120361, -0.45462 0.024445 0.120354, -0.457535 0.01236 0.120361, -0.458519 0 0.120361, + -0.457535 -0.01236 0.120361, -0.45462 -0.024445 0.120361, -0.449837 -0.035889 0.120361, -0.443314 -0.046448 0.120361, + -0.435204 -0.055847 0.120361, -0.42572 -0.063843 0.120361, -0.415085 -0.070251 0.120361, -0.40358 -0.07489 0.120361, + -0.391487 -0.077667 0.120361, -0.37912 -0.078522 0.120361, -0.36676 -0.077393 0.120361, -0.354713 -0.074341 0.120361, + -0.34333 -0.069427 0.120361, -0.332848 -0.062775 0.120361, -0.315964 -0.044983 0.120697, -0.323547 -0.054565 0.120361, + -0.315643 -0.044983 0.120361, -0.329346 -0.0448 0.132721, -0.316292 -0.045013 0.121002, -0.339783 -0.044678 0.140137, + -0.344223 0.053009 0.136444, -0.342896 0.054291 0.134613, -0.347137 0.052155 0.138672, -0.348389 0.052368 0.13916, + -0.345718 0.052338 0.137817, -0.342133 0.05603 0.132721, -0.342041 0.0578 0.131104, -0.342468 0.059296 0.130005, + -0.349503 0.052826 0.139282, -0.351257 0.054535 0.138672, -0.350449 0.053558 0.13916, -0.351822 0.055847 0.137817, + -0.35199 0.057495 0.136444, -0.351532 0.059265 0.134613, -0.348923 0.061768 0.131104, -0.350418 0.060822 0.132721, + -0.347412 0.062134 0.130005, -0.351974 0.056671 0.130005, -0.34491 0.06076 0.130005, -0.351868 0.058258 0.130005, + -0.351288 0.059723 0.130005, -0.350281 0.060944 0.130005, -0.351578 0.055145 0.130005, -0.350723 0.053833 0.130005, + -0.349503 0.052826 0.130005, -0.348022 0.052277 0.130005, -0.348938 0.061768 0.130005, -0.346451 0.052185 0.130005, + -0.342041 0.05777 0.130005, -0.342468 0.059296 0.130005, -0.342087 0.056213 0.130005, -0.344925 0.052612 0.130005, + -0.343613 0.053467 0.130005, -0.342636 0.054718 0.130005, -0.375519 0.063782 0.136444, -0.375015 0.065582 0.134613, + -0.377625 0.061615 0.138672, -0.378799 0.061157 0.13916, -0.37648 0.062439 0.137817, -0.375214 0.067444 0.132721, + -0.376022 0.069031 0.131104, -0.377151 0.070099 0.130005, -0.37999 0.061005 0.139282, -0.38237 0.061615 0.138672, + -0.38118 0.061157 0.13916, -0.383514 0.062439 0.137817, -0.384476 0.063782 0.136444, -0.384979 0.065582 0.134613, + -0.383972 0.069031 0.131104, -0.384781 0.067444 0.132721, -0.382843 0.070099 0.130005, -0.37999 0.07016 0.130005, + -0.383987 0.069031 0.130005, -0.38472 0.067627 0.130005, -0.384995 0.066071 0.130005, -0.384766 0.064514 0.130005, + -0.382965 0.061981 0.130005, -0.375931 0.06311 0.130005, -0.384064 0.06311 0.130005, -0.377029 0.061981 0.130005, + -0.381561 0.061249 0.130005, -0.375275 0.067627 0.130005, -0.376007 0.069031 0.130005, -0.375 0.066071 0.130005, + -0.375229 0.064514 0.130005, -0.378433 0.061249 0.130005, -0.37999 0.061005 0.130005, -0.377151 0.070099 0.130005, + -0.408005 0.057495 0.136444, -0.408463 0.059265 0.134613, -0.408737 0.054535 0.138672, -0.409531 0.053558 0.13916, + -0.408173 0.055847 0.137817, -0.409576 0.060822 0.132721, -0.411057 0.061768 0.131104, -0.412582 0.062134 0.130005, + -0.410492 0.052826 0.139282, -0.412857 0.052155 0.138672, -0.411591 0.052368 0.13916, -0.414276 0.052338 0.137817, + -0.415771 0.053009 0.136444, -0.417099 0.054291 0.134613, -0.417953 0.0578 0.131104, -0.417862 0.05603 0.132721, + -0.417511 0.059296 0.130005, -0.415085 0.06076 0.130005, -0.417953 0.05777 0.130005, -0.417908 0.056213 0.130005, + -0.413544 0.052185 0.130005, -0.411972 0.052277 0.130005, -0.417358 0.054718 0.130005, -0.416382 0.053467 0.130005, + -0.41507 0.052612 0.130005, -0.411057 0.061768 0.130005, -0.412582 0.062134 0.130005, -0.409714 0.060944 0.130005, + -0.408707 0.059723 0.130005, -0.408112 0.058258 0.130005, -0.40802 0.056671 0.130005, -0.410492 0.052826 0.130005, + -0.409271 0.053833 0.130005, -0.408417 0.055145 0.130005, -0.432999 0.035767 0.136444, -0.434296 0.037109 0.134613, + -0.432159 0.032867 0.138672, -0.432358 0.031616 0.13916, -0.432312 0.034271 0.137817, -0.43602 0.037872 0.132721, + -0.43779 0.037964 0.131104, -0.432831 0.030487 0.139282, -0.43454 0.028748 0.138672, -0.433548 0.029541 0.13916, + -0.435837 0.028168 0.137825, -0.437485 0.028015 0.136452, -0.43927 0.028473 0.134621, -0.441772 0.031067 0.131104, + -0.440811 0.029572 0.132721, -0.440765 0.035095 0.130005, -0.442154 0.032593 0.130005, -0.441757 0.031067 0.129997, + -0.43779 0.037964 0.130005, -0.439301 0.037506 0.130005, -0.436676 0.028015 0.130013, -0.43515 0.028412 0.130005, + -0.440933 0.029724 0.130005, -0.439713 0.028717 0.130005, -0.438248 0.028137 0.130005, -0.436203 0.037903 0.130005, + -0.433487 0.036377 0.130005, -0.434723 0.037354 0.130005, -0.432602 0.035065 0.130005, -0.43219 0.033539 0.130005, + -0.433823 0.029266 0.130005, -0.432831 0.030487 0.129997, -0.432266 0.031982 0.129997, -0.443787 0.004486 0.136444, + -0.445572 0.004974 0.134613, -0.441605 0.00238 0.138672, -0.441147 0.00119 0.13916, -0.442444 0.00351 0.137817, + -0.447449 0.004791 0.132721, -0.44902 0.003967 0.131104, -0.440994 0 0.139282, -0.441605 -0.00238 0.138672, + -0.441147 -0.00119 0.13916, -0.442444 -0.00351 0.137817, -0.443787 -0.004486 0.136444, -0.445572 -0.004974 0.134613, + -0.44902 -0.003967 0.131104, -0.447449 -0.004791 0.132721, -0.44902 0.003998 0.130005, -0.450104 0.002838 0.130005, + -0.450165 0 0.130005, -0.447632 0.00473 0.130005, -0.446075 0.005005 0.130005, -0.44902 -0.003998 0.130005, + -0.450104 -0.002838 0.130005, -0.447632 -0.00473 0.130005, -0.446075 -0.005005 0.130005, -0.444504 -0.004761 0.130005, + -0.444504 0.004761 0.130005, -0.4431 -0.004059 0.130005, -0.4431 0.004059 0.130005, -0.441971 -0.00296 0.130005, + -0.441971 0.00296 0.130005, -0.441254 -0.001556 0.130005, -0.441254 0.001556 0.130005, -0.440994 0 0.130005, + -0.437485 -0.028015 0.136444, -0.439285 -0.028473 0.134613, -0.43454 -0.028748 0.138672, -0.433548 -0.029541 0.13916, + -0.435852 -0.028168 0.137817, -0.440811 -0.029572 0.132721, -0.441772 -0.031067 0.131104, -0.432831 -0.030487 0.139282, + -0.432159 -0.032867 0.138672, -0.432358 -0.031586 0.13916, -0.432327 -0.034271 0.137817, -0.432999 -0.035767 0.136444, + -0.434296 -0.037109 0.134613, -0.43779 -0.037964 0.131104, -0.43602 -0.037872 0.132721, -0.439728 -0.028717 0.130005, + -0.440933 -0.029724 0.130005, -0.440765 -0.035095 0.130005, -0.438248 -0.028107 0.130005, -0.436676 -0.028015 0.130005, + -0.441772 -0.031067 0.130005, -0.442139 -0.032593 0.130005, -0.439301 -0.037506 0.130005, -0.437775 -0.037964 0.130005, + -0.436203 -0.037903 0.130005, -0.43515 -0.028412 0.130005, -0.432831 -0.030487 0.130005, -0.433823 -0.029266 0.130005, + -0.432266 -0.031982 0.130005, -0.43219 -0.033539 0.130005, -0.434723 -0.037354 0.130005, -0.433487 -0.036377 0.130005, + -0.432602 -0.035065 0.130005, -0.415771 -0.053009 0.136444, -0.417099 -0.054291 0.134613, -0.412857 -0.052155 0.138672, + -0.411606 -0.052368 0.13916, -0.414276 -0.052307 0.137817, -0.417862 -0.05603 0.132721, -0.417953 -0.0578 0.131104, + -0.410507 -0.052826 0.139282, -0.408737 -0.054535 0.138672, -0.409546 -0.053558 0.13916, -0.408173 -0.055847 0.137817, + -0.408005 -0.057495 0.136444, -0.408478 -0.059265 0.134613, -0.411072 -0.061768 0.131104, -0.409576 -0.060791 0.132721, + -0.416382 -0.053467 0.130005, -0.417358 -0.054718 0.130005, -0.415085 -0.06076 0.130005, -0.41507 -0.052612 0.130005, + -0.413559 -0.052185 0.130005, -0.417908 -0.056213 0.130005, -0.417969 -0.05777 0.130005, -0.417526 -0.059296 0.130005, + -0.412598 -0.062134 0.130005, -0.411057 -0.061768 0.130005, -0.411972 -0.052277 0.130005, -0.410507 -0.052826 0.130005, + -0.409271 -0.053833 0.130005, -0.408417 -0.055145 0.130005, -0.40802 -0.056671 0.130005, -0.409714 -0.060944 0.130005, + -0.408707 -0.059723 0.130005, -0.408127 -0.058258 0.130005, -0.384491 -0.063782 0.136444, -0.384979 -0.065582 0.134613, + -0.38237 -0.061615 0.138672, -0.381195 -0.061157 0.13916, -0.383514 -0.062439 0.137817, -0.384781 -0.067444 0.132721, + -0.383987 -0.069031 0.131104, -0.380005 -0.061005 0.139282, -0.377625 -0.061615 0.138672, -0.378815 -0.061157 0.13916, + -0.37648 -0.062439 0.137817, -0.375519 -0.063782 0.136444, -0.375015 -0.065582 0.134613, -0.376022 -0.069031 0.131104, + -0.375214 -0.067444 0.132721, -0.382965 -0.061981 0.130005, -0.384064 -0.06308 0.130005, -0.377045 -0.061981 0.130005, + -0.378448 -0.061249 0.130005, -0.381561 -0.061249 0.130005, -0.380005 -0.07016 0.130005, -0.384766 -0.064514 0.130005, + -0.384995 -0.066071 0.130005, -0.382843 -0.070099 0.130005, -0.383987 -0.069031 0.130005, -0.384735 -0.067627 0.130005, + -0.380005 -0.061005 0.130005, -0.375931 -0.06308 0.130005, -0.375229 -0.064514 0.130005, -0.376007 -0.069031 0.130005, + -0.377151 -0.070099 0.130005, -0.375275 -0.067627 0.130005, -0.375 -0.066071 0.130005, -0.35199 -0.057495 0.136444, + -0.351532 -0.059265 0.134613, -0.351257 -0.054535 0.138672, -0.350464 -0.053558 0.13916, -0.351822 -0.055847 0.137817, + -0.350418 -0.060791 0.132721, -0.348938 -0.061768 0.131104, -0.347412 -0.062134 0.130005, -0.349503 -0.052826 0.139282, + -0.347137 -0.052155 0.138672, -0.348404 -0.052368 0.13916, -0.345734 -0.052307 0.137817, -0.344223 -0.053009 0.136444, + -0.342896 -0.054291 0.134613, -0.342041 -0.0578 0.131104, -0.342133 -0.05603 0.132721, -0.342484 -0.059296 0.130005, + -0.34491 -0.06076 0.130005, -0.351578 -0.055145 0.130005, -0.351974 -0.056671 0.130005, -0.350723 -0.053833 0.130005, + -0.349503 -0.052826 0.130005, -0.351883 -0.058258 0.130005, -0.351288 -0.059723 0.130005, -0.350281 -0.060944 0.130005, + -0.348938 -0.061768 0.130005, -0.348022 -0.052277 0.130005, -0.344925 -0.052612 0.130005, -0.346451 -0.052185 0.130005, + -0.343613 -0.053467 0.130005, -0.342636 -0.054718 0.130005, -0.347412 -0.062134 0.130005, -0.342041 -0.05777 0.130005, + -0.342087 -0.056213 0.130005, -0.315109 0.044952 0.119049, -0.315109 0.044983 0.119385, -0.315216 0.044983 0.11972, + -0.315643 0.044983 0.120361, -0.315964 0.044983 0.120697, -0.316292 0.044983 0.121002, -0.301987 0 0.09201, + -0.315109 0.044952 0.119049, -0.315483 0.044739 0.106506, -0.323006 0.054626 0.119049, -0.332344 0.062958 0.119049, + -0.342873 0.069672 0.119049, -0.354347 0.074677 0.119049, -0.366447 0.077789 0.119049, -0.378899 0.078949 0.119049, + -0.403557 0.075378 0.119049, -0.391365 0.078156 0.119049, -0.425873 0.06427 0.119049, -0.458 0 0.091492, + -0.415154 0.070709 0.119049, -0.435448 0.056213 0.119049, -0.450203 0.036133 0.119049, -0.457977 0.012451 0.119049, + -0.45504 0.024597 0.119049, -0.443626 0.046753 0.119049, -0.458969 0 0.119049, -0.456505 -0.015228 0.091492, + -0.444855 -0.043335 0.091492, -0.452065 -0.029846 0.091492, -0.458 0 0.091492, -0.456505 0.015228 0.091492, + -0.435158 -0.055145 0.091492, -0.423332 -0.06485 0.091492, -0.395218 -0.076508 0.091492, -0.409851 -0.072052 0.091492, + -0.435158 0.055145 0.091492, -0.324844 -0.055145 0.091492, -0.444862 0.043335 0.091492, -0.452065 0.029846 0.091499, + -0.395226 0.076508 0.091492, -0.423332 0.06485 0.091492, -0.409859 0.072052 0.091492, -0.324852 0.055145 0.091492, + -0.379997 0.078003 0.091492, -0.364784 0.076508 0.091492, -0.364784 -0.076508 0.091492, -0.336662 -0.06485 0.091492, + -0.350151 -0.072052 0.091492, -0.303505 -0.015228 0.091492, -0.315147 -0.043335 0.091492, -0.307938 -0.029846 0.091492, + -0.303505 0.015228 0.091492, -0.336662 0.06485 0.091492, -0.350151 0.072052 0.091492, -0.315147 0.043335 0.091492, + -0.307938 0.029846 0.091499, -0.302002 0 0.091492, -0.379997 -0.078003 0.091492, -0.078018 0 0.09198, + -0.077209 -0.01123 0.09198, -0.074799 -0.022156 0.09198, -0.070839 -0.032715 0.09198, -0.309174 0.032684 0.09201, + -0.305206 0.022186 0.092003, -0.309166 -0.032684 0.09201, -0.305206 -0.022186 0.09201, -0.302795 0.0112 0.09201, + -0.301987 0 0.09201, -0.302795 -0.0112 0.09201, -0.065407 -0.042542 0.09198, -0.064865 -0.043396 0.092163, + -0.097069 -0.042542 0.09198, -0.064445 -0.044006 0.092651, -0.064209 -0.044373 0.093262, -0.064148 -0.044556 0.093994, + -0.098 -0.044556 0.093994, -0.080002 -0.00592 0.09198, -0.097069 -0.042542 0.09198, -0.09771 -0.043884 0.092529, + -0.097908 -0.044312 0.09314, -0.097435 -0.043335 0.092163, -0.082001 -0.010193 0.078064, -0.082092 -0.010376 0.078064, + -0.297829 -0.01059 0.078156, -0.082176 -0.010559 0.078125, -0.282005 -0.044525 0.093506, -0.282936 -0.042542 0.09201, + -0.29792 -0.010406 0.078094, -0.297829 -0.01059 0.078156, -0.298004 -0.010223 0.078033, -0.298004 -0.009827 0.078003, + -0.298004 -0.01001 0.078003, -0.082001 -0.009827 0.078003, -0.298004 -0.009827 0.078003, -0.082001 -0.010193 0.090027, + -0.082001 -0.010193 0.078064, -0.082001 -0.009827 0.078003, -0.082001 -0.01001 0.078003, -0.080002 0.00592 0.09198, + -0.081245 -0.008606 0.091553, -0.081726 -0.009644 0.091003, -0.080002 -0.00592 0.09198, -0.08197 -0.010132 0.090332, + -0.082001 -0.010193 0.090027, -0.081909 -0.01001 0.090637, -0.081909 0.01001 0.090637, -0.081726 0.009583 0.091003, + -0.098 0.044495 0.093506, -0.097069 0.042542 0.09198, -0.08197 0.010132 0.090332, -0.081245 0.008606 0.091553, + -0.080666 0.007324 0.091858, -0.080002 0.00592 0.09198, -0.082001 0.010193 0.090027, -0.298004 0.009735 0.078003, + -0.298004 0.009979 0.078003, -0.082001 0.009949 0.078003, -0.082001 0.009705 0.078003, -0.082001 0.010193 0.078064, + -0.082069 0.010376 0.078125, -0.297874 0.010498 0.078156, -0.097427 0.043274 0.091675, -0.08213 0.010498 0.078125, + -0.097832 0.044128 0.092407, -0.097427 0.043274 0.091675, -0.097664 0.043762 0.09198, -0.097954 0.044434 0.092896, + -0.098 0.044495 0.093506, -0.300003 0.00592 0.09201, -0.297874 0.010498 0.078156, -0.297943 0.010345 0.078094, + -0.298004 0.010223 0.078064, -0.282585 0.043274 0.091705, -0.282051 0.044403 0.092896, -0.282005 0.044525 0.093506, + -0.282005 0.044525 0.093964, -0.282173 0.044159 0.092407, -0.282341 0.043793 0.09201, -0.314598 0.042511 0.09201, + -0.31514 0.043365 0.092194, -0.282928 0.042511 0.09201, -0.28257 0.043304 0.092163, -0.282295 0.043915 0.09256, + -0.282097 0.044342 0.09314, -0.315559 0.044006 0.092651, -0.315788 0.044403 0.093292, -0.315865 0.044525 0.093964, + -0.282005 0.044525 0.093964, -0.298759 -0.008575 0.091583, -0.299339 -0.007355 0.091888, -0.300003 -0.00592 0.09201, + -0.298286 -0.009613 0.091034, -0.298759 0.008575 0.091583, -0.298286 0.009613 0.091034, -0.300003 0.00592 0.09201, + -0.298035 -0.010162 0.090363, -0.298103 -0.01001 0.090607, -0.298035 0.010132 0.090363, -0.298004 -0.010223 0.089996, + -0.298004 0.010223 0.089996, -0.298103 0.01001 0.090607, -0.097069 0.042542 0.09198, -0.09745 0.043335 0.092163, + -0.09771 0.043884 0.092529, -0.065414 0.042542 0.09198, -0.097908 0.044312 0.09314, -0.098 0.044556 0.093994, + -0.064156 0.044556 0.093994, 0.077972 0.012451 0.119141, 0.070206 0.036133 0.119141, 0.075027 0.024597 0.119141, + 0.078972 0 0.119141, 0.045891 0.06427 0.119141, 0.055458 0.056213 0.119141, 0.063637 0.046753 0.119141, + 0.035179 0.070679 0.119141, 0.023598 0.075378 0.119141, -0.00106 0.078979 0.119141, 0.011406 0.078125 0.119141, + -0.013512 0.07782 0.119141, -0.077209 0.01123 0.09198, -0.074799 0.022156 0.09198, -0.064217 0.044373 0.093262, + -0.064865 0.043335 0.092163, -0.064445 0.044006 0.092651, -0.070839 0.032715 0.09198, -0.078003 0 0.091492, + -0.065414 0.042542 0.09198, -0.078018 0 0.09198, -0.025612 0.074707 0.119141, -0.037071 0.069702 0.119141, + -0.047615 0.062988 0.119141, -0.056953 0.054688 0.119141, -0.06456 0.044739 0.107483, -0.064873 0.045044 0.119141, + -0.016876 0.044556 0.147156, -0.026688 0.044617 0.144043, -0.064209 0.044983 0.120544, -0.064522 0.045044 0.120239, + -0.064957 0.044983 0.120972, -0.048874 0.0448 0.132385, -0.036987 0.044678 0.139404, -0.329346 0.0448 0.132721, + 0.017044 0.044556 0.147156, 0.017212 0.044556 0.147095, -0.339783 0.044678 0.140137, -0.064728 0.045044 0.119873, + -0.064919 0.045044 0.120056, -0.316292 0.044983 0.121002, -0.348801 0.044586 0.145294, 0.009888 0.04657 0.147156, + -0.015808 0.044922 0.147156, -0.016876 0.044556 0.147156, 0.016891 0.044556 0.147156, 0 0.047607 0.147156, + 0.004974 0.047363 0.147156, 0.015823 0.044922 0.147156, -0.009216 0.047791 0.146484, -0.009018 0.048462 0.145996, + -0.008942 0.049255 0.145447, -0.01088 0.045715 0.147156, -0.009888 0.04657 0.147156, -0.0121 0.045166 0.147156, + -0.013428 0.045044 0.147156, -0.014725 0.045288 0.147156, -0.016617 0.046753 0.145813, -0.015732 0.045837 0.146606, + -0.017441 0.049255 0.14386, -0.016113 0.052368 0.141968, -0.017059 0.051025 0.1427, -0.013397 0.053528 0.141663, + -0.014832 0.053162 0.141602, -0.010422 0.05249 0.142883, -0.009323 0.051025 0.144165, -0.008942 0.049255 0.140991, + -0.008942 0.049255 0.145447, -0.011871 0.053284 0.14209, -0.016205 0.052246 0.140991, -0.01712 0.050903 0.140991, + -0.016205 0.046265 0.140991, -0.011566 0.053162 0.140991, -0.014816 0.053162 0.140991, -0.010193 0.052246 0.140991, + -0.01712 0.047607 0.140991, -0.017441 0.049255 0.140991, -0.014816 0.045349 0.140991, -0.010193 0.046265 0.140991, + -0.013199 0.053528 0.140991, -0.009262 0.047607 0.140991, -0.009262 0.050903 0.140991, -0.008942 0.049255 0.140991, + -0.011566 0.045349 0.140991, -0.013199 0.044983 0.140991, 0.015732 0.045837 0.146606, 0.016632 0.046753 0.145813, + 0.017242 0.047913 0.144836, 0.017456 0.049255 0.14386, 0.01474 0.045288 0.147156, 0.013428 0.045044 0.147156, + 0.009521 0.047119 0.146851, 0.009888 0.04657 0.147156, 0.0121 0.045166 0.147156, 0.01088 0.045715 0.147156, + 0.009216 0.047791 0.146484, 0.008957 0.049255 0.145447, 0.009338 0.051025 0.144165, 0.010422 0.05249 0.142883, + 0.011887 0.053284 0.14209, 0.017075 0.051025 0.1427, 0.017456 0.049255 0.140991, 0.014847 0.053162 0.141602, + 0.013412 0.053528 0.141663, 0.017456 0.049255 0.14386, 0.016113 0.052368 0.141968, 0.010193 0.052246 0.140991, + 0.009277 0.050903 0.140991, 0.010193 0.046265 0.140991, 0.014832 0.053162 0.140991, 0.011581 0.053162 0.140991, + 0.016205 0.052246 0.140991, 0.009277 0.047607 0.140991, 0.008957 0.049255 0.140991, 0.011581 0.045349 0.140991, + 0.016205 0.046265 0.140991, 0.013199 0.053528 0.140991, 0.017136 0.047607 0.140991, 0.017136 0.050903 0.140991, + 0.017456 0.049255 0.140991, 0.014832 0.045349 0.140991, 0.013199 0.044983 0.140991, 0.013641 0.04425 0.164978, + 0.015335 0.044373 0.156372, 0.017212 0.044556 0.147095, 0.028488 0.036682 0.14801, 0.037201 0.026123 0.148682, + 0.042694 0.01355 0.149109, 0.044571 0 0.149292, 0.042694 -0.01355 0.149109, 0.013641 -0.04425 0.164978, + 0.015335 -0.044373 0.156372, 0.037201 -0.026123 0.148682, 0.028488 -0.036682 0.14801, 0.017212 -0.044556 0.147095, + 0.013641 -0.04425 0.164978, 0.019897 -0.041016 0.164978, 0.02562 -0.036987 0.164978, 0.030685 -0.032104 0.164978, + 0.034988 -0.02655 0.164978, 0.038437 -0.020447 0.164978, 0.040955 -0.013855 0.164978, 0.04248 -0.007019 0.164978, + 0.042999 0 0.164978, 0.030685 0.032104 0.164978, 0.02562 0.036987 0.164978, 0.019897 0.041016 0.164978, + 0.013641 0.04425 0.164978, 0.04248 0.007019 0.164978, 0.040955 0.013855 0.164978, 0.034988 0.02655 0.164986, + 0.038437 0.020447 0.164986, -0.398651 -0.04422 0.165009, -0.400162 -0.044373 0.157257, -0.404907 -0.041046 0.165009, + -0.401825 -0.044525 0.148987, -0.410629 -0.036957 0.165009, -0.415695 -0.032104 0.165009, -0.419998 -0.02655 0.165009, + -0.423431 -0.020416 0.165009, -0.425949 -0.013855 0.165009, -0.42749 -0.007019 0.165009, -0.427994 0 0.165009, + -0.425949 0.013855 0.165009, -0.42749 0.007019 0.165009, -0.423431 0.020416 0.165009, -0.415695 0.032104 0.165009, + -0.410629 0.036957 0.165009, -0.404907 0.041046 0.165009, -0.398636 0.04422 0.165009, -0.419998 0.02655 0.165009, + -0.400146 0.044373 0.157257, -0.428375 -0.012634 0.148987, -0.423615 -0.024445 0.148987, -0.427689 -0.013641 0.148987, + -0.422089 -0.026245 0.148987, -0.429596 0 0.148987, -0.416016 -0.034668 0.148987, -0.413239 -0.036804 0.148987, + -0.406082 -0.042664 0.148987, -0.429993 0 0.148987, -0.428375 0.012634 0.148987, -0.427689 0.013641 0.148987, + -0.357224 -0.044525 0.148987, -0.369217 -0.048828 0.148987, -0.423615 0.024445 0.148987, -0.422089 0.026245 0.148987, + -0.416016 0.034668 0.148994, -0.413239 0.036804 0.148987, -0.369202 0.048828 0.148987, -0.381897 0.049957 0.148987, + -0.39447 -0.047852 0.148987, -0.401825 -0.044525 0.148987, -0.381897 -0.049957 0.148987, -0.40181 0.044525 0.148987, + -0.406082 0.042664 0.148987, -0.394455 0.047852 0.148987, -0.357224 0.044525 0.148987, -0.410431 0.035828 0.165009, + -0.398987 0.042999 0.165009, -0.419373 0.025665 0.165009, -0.425049 0.013397 0.165009, -0.427002 0 0.165009, + -0.425049 -0.013397 0.165009, -0.419373 -0.025665 0.165009, -0.410431 -0.035828 0.165009, -0.398972 -0.042999 0.165009, + 0.013977 0.04303 0.164978, -0.398987 0.042999 0.165009, 0.025436 -0.035828 0.164978, 0.013977 -0.042969 0.164978, + 0.034378 -0.025635 0.164978, 0.040054 -0.013367 0.164978, 0.042007 0 0.164978, 0.040054 0.013367 0.164978, + 0.034378 0.025635 0.164978, 0.025436 0.035828 0.164986, 0.013977 0.04303 0.164978, 0.013977 -0.042969 0.164978, + -0.398972 -0.042999 0.163513, -0.398972 -0.042999 0.165009, -0.419373 0.025665 0.163513, 0.040054 0.013367 0.163513, + 0.034378 0.025635 0.163513, 0.025436 0.035828 0.163513, 0.042007 0 0.163513, -0.427002 0 0.163513, + -0.419373 -0.025665 0.163513, 0.034378 -0.025635 0.163513, 0.040054 -0.013367 0.163513, 0.025436 -0.035828 0.163513, + -0.410431 -0.035828 0.163513, 0.013977 -0.042969 0.163513, 0.013977 0.04303 0.163513, -0.410431 0.035828 0.163513, + -0.425049 0.013397 0.163513, -0.398972 -0.042999 0.163513, -0.425049 -0.013397 0.163513, -0.398987 0.042999 0.163513, + -0.076508 -0.015198 0.091492, -0.064857 -0.043335 0.091492, -0.072067 -0.029846 0.091492, -0.078003 0 0.091492, + -0.076508 0.015198 0.091492, -0.055153 -0.055176 0.091492, -0.043335 -0.06488 0.091492, -0.015213 -0.076477 0.091492, + -0.029846 -0.072083 0.091492, -0.055153 0.055176 0.091492, 0.055153 -0.055176 0.091492, -0.064857 0.043335 0.091492, + -0.072067 0.029846 0.091499, -0.015221 0.076477 0.091492, -0.043343 0.06488 0.091492, -0.029854 0.072083 0.091492, + 0.055153 0.055176 0.091492, -8e-006 0.078003 0.091492, 0.015221 0.076477 0.091492, 0.015221 -0.076477 0.091492, + 0.043335 -0.06488 0.091492, 0.029846 -0.072083 0.091492, 0.0765 -0.015198 0.091492, 0.06485 -0.043335 0.091492, + 0.07206 -0.029846 0.091492, 0.0765 0.015198 0.091492, 0.043327 0.06488 0.091492, 0.029839 0.072083 0.091492, + 0.06485 0.043335 0.091492, 0.07206 0.029846 0.091499, 0.077995 0 0.091492, 0 -0.078003 0.091492, -0.282936 -0.042542 0.09201, + -0.282562 -0.043335 0.092163, -0.282288 -0.043915 0.09256, -0.314598 -0.042542 0.09201, -0.31514 -0.043365 0.092194, + -0.315552 -0.044006 0.092651, -0.282097 -0.044342 0.09314, -0.315796 -0.044403 0.093292, -0.281998 -0.044525 0.093964, + -0.315857 -0.044525 0.093964, -0.09742 -0.043274 0.091675, -0.097656 -0.043762 0.09198, -0.282173 -0.044159 0.092407, + -0.282578 -0.043274 0.091705, -0.282349 -0.043793 0.09201, -0.097832 -0.044189 0.092407, -0.097946 -0.044434 0.092896, + -0.098 -0.044495 0.093506, -0.282051 -0.044403 0.092896, -0.282005 -0.044525 0.093506, -0.009888 -0.04657 0.147156, + 0.015808 -0.044922 0.147156, 0.016876 -0.044556 0.147156, 0 -0.047607 0.147156, -0.004974 -0.047363 0.147156, + -0.016876 -0.044556 0.147156, -0.015808 -0.044922 0.147156, 0.009216 -0.047791 0.146484, 0.009018 -0.048462 0.145996, + 0.01088 -0.045715 0.147156, 0.009888 -0.04657 0.147156, 0.0121 -0.045166 0.147156, 0.013428 -0.045044 0.147156, + 0.014725 -0.045288 0.147156, 0.016617 -0.046753 0.145813, 0.015732 -0.045837 0.146606, 0.016113 -0.052368 0.141968, + 0.017441 -0.049255 0.14386, 0.017441 -0.049255 0.140991, 0.017075 -0.051025 0.1427, 0.013397 -0.053528 0.141663, + 0.014847 -0.053162 0.141602, 0.010422 -0.05249 0.142883, 0.009323 -0.051025 0.144165, 0.008942 -0.049255 0.140991, + 0.008942 -0.049255 0.145447, 0.011887 -0.053284 0.14209, 0.009277 -0.047607 0.140991, 0.008942 -0.049255 0.140991, + 0.009277 -0.050903 0.140991, 0.010193 -0.046265 0.140991, 0.010193 -0.052246 0.140991, 0.016205 -0.046265 0.140991, + 0.011566 -0.053162 0.140991, 0.013199 -0.053528 0.140991, 0.014832 -0.053162 0.140991, 0.016205 -0.052246 0.140991, + 0.014832 -0.045349 0.140991, 0.011566 -0.045349 0.140991, 0.01712 -0.047607 0.140991, 0.01712 -0.050903 0.140991, + 0.017441 -0.049255 0.140991, 0.013199 -0.044983 0.140991, -0.015732 -0.045837 0.146606, -0.016617 -0.046753 0.145813, + -0.017242 -0.047913 0.144836, -0.01474 -0.045288 0.147156, -0.013428 -0.045044 0.147156, -0.009521 -0.047119 0.146851, + -0.0121 -0.045166 0.147156, -0.01088 -0.045715 0.147156, -0.009888 -0.04657 0.147156, -0.009216 -0.047791 0.146484, + -0.009323 -0.051025 0.144165, -0.008957 -0.049255 0.145447, -0.008957 -0.049255 0.140991, -0.010422 -0.05249 0.142883, + -0.011887 -0.053284 0.14209, -0.017075 -0.051025 0.1427, -0.017456 -0.049255 0.140991, -0.014847 -0.053162 0.141602, + -0.013412 -0.053528 0.141663, -0.017456 -0.049255 0.14386, -0.016113 -0.052368 0.141968, -0.016205 -0.046265 0.140991, + -0.01712 -0.047607 0.140991, -0.016205 -0.052246 0.140991, -0.011581 -0.045349 0.140991, -0.014832 -0.045349 0.140991, + -0.010193 -0.046265 0.140991, -0.01712 -0.050903 0.140991, -0.017456 -0.049255 0.140991, -0.014832 -0.053162 0.140991, + -0.010193 -0.052246 0.140991, -0.013199 -0.044983 0.140991, -0.009277 -0.050903 0.140991, -0.009277 -0.047607 0.140991, + -0.008957 -0.049255 0.140991, -0.011581 -0.053162 0.140991, -0.013199 -0.053528 0.140991] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 2685 + -0.987894 -0.12776 -0.0879907, -0.996947 -0.0718191 -0.0306547, -0.952645 -0.0801022 -0.293344, -0.800211 -0.156132 -0.579038, + -0.752588 -0.228171 -0.617696, -0.767375 -0.322545 -0.554166, -0.924808 -0.203484 0.321441, -0.924364 -0.203838 0.322492, + -0.820715 -0.541567 -0.182024, -0.850141 -0.510691 -0.128281, -0.890207 -0.431679 -0.145549, -0.905683 -0.3397 0.253658, + -0.920796 -0.272804 0.278769, -0.904407 -0.340072 0.257681, -0.738835 -0.670909 -0.0632794, -0.779473 -0.621392 -0.0793394, + -0.644156 -0.763979 -0.0373908, -0.561582 -0.826099 -0.0467507, -0.784226 -0.617705 -0.058561, -0.796179 -0.603964 -0.036417, + -0.817629 -0.57242 -0.0617902, -0.770428 -0.631446 -0.0878435, -0.371335 -0.927345 -0.0462874, -0.468649 -0.882612 -0.036931, + -0.812618 -0.581807 -0.0339479, -0.859083 -0.510203 -0.0408655, -0.803559 -0.594034 -0.0376493, -0.892293 -0.44948 -0.0422047, + -0.95548 -0.292879 -0.0357758, -0.721925 -0.691461 -0.0265473, -0.56222 -0.82633 -0.0329633, -0.607635 -0.793816 -0.0252195, + -0.369676 -0.928541 -0.03393, -0.469059 -0.882775 -0.0263227, -0.31896 -0.947375 -0.0272859, -0.254299 -0.966347 -0.0387908, + -0.176989 -0.983862 -0.0262684, -0.192212 -0.980138 -0.0488336, -0.925251 -0.20313 0.32039, -0.113604 -0.992797 -0.0380477, + -2.30704e-005 -0.99887 -0.047532, -1.51589e-005 -0.999372 -0.0354436, -0.812381 -0.582084 -0.0348593, + 0.109624 -0.993316 -0.0361485, 0.192334 -0.980119 -0.048716, -0.00611856 -0.999559 -0.0290536, 0.249465 -0.967634 -0.0381056, + 0.364672 -0.930471 -0.0351798, 0.300997 -0.953235 -0.0272782, 0.371319 -0.927354 -0.046231, 0.159137 -0.986911 -0.026115, + 0.561582 -0.826099 -0.0467507, 0.476193 -0.878643 -0.0350366, 0.638472 -0.768723 -0.0376654, 0.71197 -0.700765 -0.0450194, + -0.901794 -0.340857 0.265676, 0.568475 -0.821979 -0.0344654, 0.57463 -0.817974 -0.0268136, 0.900208 -0.433861 -0.0372932, + 0.843541 -0.535259 -0.0440083, 0.928835 -0.36761 -0.0461391, -0.923421 -0.202748 0.325863, 0.962584 -0.268284 -0.0381533, + 0.97995 -0.193883 -0.0458986, 0.796761 -0.603227 -0.035895, 0.994133 -0.10112 -0.0383876, 0.995543 -0.0821742 -0.0462716, + 0.436243 -0.899412 -0.0273907, 0.710027 -0.703584 -0.0288105, 0.872794 -0.487055 -0.0317505, 0.984052 -0.175625 -0.0282549, + 0.942683 -0.332454 -0.0287092, 0.805507 -0.591597 -0.0342241, 0.996865 -0.0733108 -0.0297568, -0.766208 -0.618051 -0.175894, + -0.747902 -0.650529 0.132116, -0.775499 -0.614753 0.143805, -0.645957 -0.618055 -0.448048, -0.727793 -0.576015 0.372187, + -0.440524 -0.69182 -0.572122, -0.509761 -0.671406 -0.537919, -0.389954 -0.734325 -0.55561, -0.575746 -0.646709 -0.500285, + -0.337577 -0.773425 -0.536522, -0.279445 -0.815998 -0.506022, -0.650629 -0.669238 0.358891, -0.622545 -0.713636 0.321187, + -0.219602 -0.853575 -0.472424, -0.152892 -0.886856 -0.436016, -0.498464 -0.775313 0.387846, -0.590479 -0.733621 0.336355, + -0.512147 -0.698471 0.499845, -0.683742 -0.64516 0.340976, -0.585359 -0.67361 0.451225, -0.63742 -0.568562 0.520032, + -0.470981 -0.806816 0.356686, -0.352459 -0.837503 0.417565, -0.200726 -0.847465 0.491439, -0.217348 -0.919919 0.326357, + -0.242432 -0.739567 0.627907, -0.0521785 -0.899324 0.434158, -0.110282 -0.74449 0.658462, -0.349786 -0.872 0.342441, + -0.392816 -0.894616 0.212975, -0.226003 -0.9547 0.193572, -0.0554116 -0.946186 0.318844, -0.390666 -0.754557 0.527279, + -0.494483 -0.774339 0.394824, -0.00989329 -0.938815 -0.34428, -0.0851303 -0.914033 -0.396607, 0.294794 -0.941495 0.163353, + 0.301477 -0.919292 0.253008, 0.165618 -0.9805 0.105788, 0.124641 -0.953746 0.273557, 0.423393 -0.899185 0.110474, + 0.472189 -0.845524 0.24925, 0.545264 -0.766989 -0.338253, 0.891256 -0.139893 -0.431384, 0.841187 -0.203406 -0.50103, + 0.819626 -0.268562 -0.506051, 0.753175 -0.38654 -0.532273, 0.794183 -0.332447 -0.508676, 0.982997 -0.115262 0.142942, + 0.991414 0 -0.130763, 0.592568 -0.703109 -0.393065, 0.627078 -0.63768 -0.447367, 0.0962412 -0.943571 0.316876, + 0.425791 -0.832723 0.353941, 0.424278 -0.651059 0.629373, 0.577037 -0.707257 0.408432, 0.52212 -0.556891 0.645959, + 0.686093 -0.59422 0.419737, 0.575316 -0.760536 0.300993, 0.254424 -0.91188 0.322092, 0.708276 -0.438638 -0.55312, + 0.684193 -0.50416 -0.526975, 0.726477 -0.380895 0.571971, 0.857592 -0.354711 0.372446, 0.782163 -0.477072 0.400778, + 0.771639 -0.520511 0.36557, 0.63668 -0.482161 0.601797, 0.900669 -0.24297 0.360224, 0.906442 -0.228885 0.354929, + 0.808737 -0.281093 0.516654, 0.903739 -0.175358 0.390519, 0.938147 -0.120095 0.324743, 0.980723 -0.0122559 0.195019, + 0.84704 -0.37789 0.373794, 0.656308 -0.566881 -0.497901, 0.678885 -0.645965 0.349062, 0.977287 0.117935 0.176075, + 0.0234712 -0.779993 0.625349, -0.664373 -0.68061 0.308834, -0.460827 -0.887481 0.00402137, -0.312095 -0.947963 -0.0629525, + -0.576448 -0.790807 0.205748, 0.106038 -0.92155 0.373499, -0.0580218 -0.989357 0.13344, 0.275165 -0.833907 0.478417, + 0.0301528 -0.999419 0.0158987, -0.145939 -0.981862 -0.121033, -0.313227 -0.417637 0.852918, -0.399267 -0.382946 0.833029, + -0.566085 -0.452921 0.688774, -0.0485534 -0.54585 0.836475, -0.00350422 -0.57456 0.818455, -0.0900296 -0.531823 0.842057, + -0.170497 -0.502677 0.847494, -0.13133 -0.516759 0.845998, 0.14247 -0.780318 0.608939, -0.245339 -0.465391 0.850423, + -0.209367 -0.487724 0.84752, 0.229704 -0.721978 0.652674, 0.525936 -0.663596 0.532007, 0.427589 -0.791699 0.436326, + 0.631728 -0.53703 0.559033, 0.614768 -0.785125 -0.0750865, 0.542462 -0.836901 0.0730156, 0.341645 -0.740342 0.578941, + 0.791204 -0.48543 0.37196, 0.840512 -0.361846 0.403245, 0.856961 -0.239683 0.456256, 0.852815 -0.106661 0.511204, + 0.73257 -0.656699 -0.179132, 0.79007 -0.597794 -0.135765, 0.668728 -0.709919 -0.220948, 0.446135 -0.328098 0.832655, + 0.398004 -0.402651 0.824297, 0.348872 -0.494142 0.796311, 0.940944 -0.325831 0.0919652, 0.717348 -0.124464 0.685507, + 0.521941 -0.170509 0.835766, 0.481244 -0.246395 0.841245, 0.695458 0 0.718566, 0.885593 -0.464399 -0.00766684, + 0.932796 0.00856891 0.360304, 0.896883 0.141608 -0.418985, 0.828238 0.271023 -0.490477, 0.854068 0.207083 -0.477163, + 0.902756 0.256517 0.345299, 0.903045 0.242631 0.354457, 0.901691 0.175719 0.395065, 0.84036 0.37977 0.386741, + 0.804067 0.278834 0.525098, 0.857869 0.370427 0.356152, 0.772086 0.397294 -0.496024, 0.798324 0.333626 -0.501371, + 0.68796 0.617236 0.381748, 0.764676 0.484044 0.425409, 0.609284 0.457775 0.647468, 0.701708 0.515168 -0.492147, + 0.742166 0.459066 -0.488312, 0.626585 0.637414 -0.448435, 0.657882 0.568797 -0.49362, 0.543377 0.764663 -0.346456, + 0.590445 0.701104 -0.399785, 0.704749 0.372008 0.604102, 0.789809 0.51311 0.336036, 0.918476 0.129747 0.373589, + 0.847866 0.0956765 0.521507, 0.850867 0.354543 0.387718, 0.794774 0.486734 0.362525, 0.866133 0.219842 0.448869, + 0.550773 0.730905 0.403021, 0.581154 0.738922 0.340961, 0.52212 0.556891 0.645959, 0.458671 0.850464 0.257548, + 0.426447 0.654388 0.624435, 0.431153 0.840776 0.327418, 0.679387 0.630886 0.374721, 0.5874 0.720354 0.368851, + 0.441847 0.79094 0.423302, 0.301249 0.918504 0.256125, 0.626158 0.532734 0.569316, 0.423403 0.899472 0.10807, + 0.294571 0.940457 0.169614, -0.00987516 0.938902 -0.344043, 0.110427 0.953433 0.280663, 0.165605 0.980307 0.107578, + -0.0850945 0.914236 -0.396147, -0.152906 0.887082 -0.435552, -0.338517 0.775038 -0.533594, -0.279936 0.816895 -0.504299, + -0.404928 0.757943 -0.511424, -0.469236 0.736912 -0.486598, -0.522916 0.693065 -0.496206, -0.64702 0.618972 -0.44524, + -0.574035 0.645824 -0.503385, -0.219664 0.853817 -0.471958, 0.265514 0.909108 0.320976, -0.0685391 0.886927 0.456796, + -0.0426241 0.933266 0.356649, 0.128634 0.929256 0.346319, -0.11015 0.74398 0.65906, -0.220065 0.858594 0.46302, + -0.201881 0.924019 0.324704, 0.0234712 0.779993 0.625349, -0.379199 0.724622 0.57544, -0.505768 0.786981 0.353356, + -0.367466 0.828299 0.422953, -0.242047 0.737979 0.629921, -0.499074 0.687359 0.527696, -0.620627 0.713563 0.325038, + -0.47927 0.81954 0.314092, -0.696401 0.630424 0.342916, -0.742123 0.656353 0.135847, -0.647692 0.666218 0.36966, + -0.754591 0.596654 0.273122, -0.774182 0.621685 -0.118951, -0.59224 0.718163 0.365367, -0.341017 0.877536 0.337101, + 0.266367 0.848919 0.456492, 0.842325 9.3782e-010 0.53897, 0.940944 0.325831 0.0919652, 0.884741 0.465248 -0.0278808, + 0.717348 0.124464 0.685507, 0.543825 0.838439 0.0357003, 0.341685 0.740653 0.578519, 0.091679 0.929031 0.358464, + 0.739394 0.66365 -0.113426, 0.682789 0.725427 -0.0869125, 0.790287 0.596748 -0.139064, 0.484525 0.248593 0.838712, + 0.521941 0.170509 0.835766, 0.44011 0.323295 0.837725, 0.349752 0.493664 0.796222, 0.389449 0.394519 0.832277, + 0.229704 0.721978 0.652674, 0.14247 0.780318 0.608939, -0.00588713 0.601102 0.799151, -0.219763 0.924237 0.312234, + -0.0596789 0.951941 0.300412, -0.392932 0.894791 0.212023, -0.139986 0.971227 -0.192672, 0.0256388 0.991429 -0.128106, + -0.493722 0.771463 0.401352, -0.571694 0.67347 0.468619, -0.617651 0.569721 0.542148, -0.670199 0.533127 0.516341, + -0.461076 0.887309 0.00961558, -0.312 0.948285 -0.0584143, -0.170011 0.501545 0.848262, -0.0924992 0.559142 0.823895, + -0.244851 0.464255 0.851185, -0.325522 0.431634 0.841266, -0.208397 0.485462 0.849057, -0.669027 0.691038 0.273622, + -0.514592 0.415691 0.749931, -0.410463 0.395612 0.821591, -0.588573 0.800236 0.114913, -0.543253 -0.447268 0.710513, + -0.504998 -0.487853 0.712023, -0.559812 -0.420916 0.713751, -0.498269 -0.478361 0.723118, -0.443711 -0.520129 0.729785, + -0.424739 -0.572837 0.701038, -0.353232 -0.589508 0.726435, -0.344934 -0.543232 0.765454, -0.458592 -0.491746 0.740189, + -0.32906 -0.63058 0.702914, -0.226346 -0.673646 0.70354, -0.257205 -0.636621 0.727021, -0.112691 -0.700867 0.704334, + 0.002039 -0.70893 0.705276, -0.0321257 -0.685353 0.727502, -0.148586 -0.670187 0.727167, -0.149561 -0.626419 0.765004, + 0.0764677 -0.685772 0.723789, 0.199919 -0.659979 0.724196, 0.0853413 -0.642869 0.761207, 0.120305 -0.698916 0.705013, + -0.0471717 -0.641069 0.766032, -0.255805 -0.590965 0.765065, -0.497959 -0.458275 0.73622, -0.359716 -0.510782 0.780837, + -0.406405 -0.504256 0.761946, -0.345951 -0.510817 0.787009, -0.299022 -0.533387 0.791255, -0.193589 -0.600993 0.775455, + -0.223553 -0.578744 0.78427, -0.171686 -0.606809 0.776084, -0.240693 -0.55305 0.797623, -0.0830426 -0.624405 0.776674, + -0.0990225 -0.622667 0.776196, 0.054161 -0.600305 0.797935, 0.146729 -0.625057 0.766665, 0.203866 -0.612464 0.763758, + 0.172578 -0.607102 0.775657, 0.112306 -0.63028 0.768202, -0.153251 -0.612019 0.775852, 0.195862 -0.60077 0.775057, + 0.099792 -0.614228 0.782793, 0.214059 -0.676927 0.704236, 0.303455 -0.640492 0.705468, 0.404645 -0.584063 0.703657, + 0.325364 -0.601618 0.729517, 0.434526 -0.531263 0.727287, 0.495251 -0.509324 0.703787, 0.301036 -0.565758 0.767656, + 0.519158 -0.448829 0.727343, 0.396691 -0.50659 0.765508, 0.475779 -0.433997 0.765037, 0.572017 -0.422665 0.702959, + 0.632734 -0.327095 0.701895, 0.585526 -0.358775 0.726938, 0.675744 -0.225084 0.701931, 0.702283 -0.120342 0.701652, + 0.66734 -0.168172 0.725517, 0.634931 -0.263657 0.726187, 0.539916 -0.350854 0.765109, 0.688466 -0.0809921 0.720732, + 0.641676 -0.087229 0.761999, 0.684928 -0.00843554 0.728562, 0.620219 -0.177961 0.763975, 0.712182 0 0.701995, + 0.591194 -0.256131 0.764779, 0.356611 -0.495325 0.792137, 0.447887 -0.452178 0.771319, 0.47036 -0.416825 0.77783, + 0.430119 -0.471142 0.77008, 0.400507 -0.481777 0.779413, 0.389727 -0.479012 0.78655, 0.260099 -0.561419 0.785593, + 0.493043 -0.38644 0.77947, 0.497765 -0.370412 0.784235, 0.268698 -0.577056 0.771238, 0.531067 -0.260429 0.806315, + 0.61792 -0.114592 0.777845, 0.58946 -0.233492 0.773317, 0.600875 -0.217386 0.769215, 0.615237 -0.136118 0.776502, + 0.609876 -0.158135 0.77656, 0.61224 -0.0998543 0.784341, 0.573066 -0.223375 0.788479, 0.600276 -0.0615565 0.79742, + 0.64412 0.00580175 0.764903, -0.396748 -0.500533 0.769453, -0.237665 -0.528192 0.815186, -0.246949 -0.53664 0.806867, + -0.22172 -0.558533 0.799301, 0.0282035 -0.570709 0.820668, -0.0264336 -0.603111 0.797219, 0.0834335 -0.593394 0.800576, + -0.0750834 -0.601115 0.795627, 0.0566976 -0.574137 0.816794, -0.0676219 -0.560542 0.82536, -0.0729419 -0.579583 0.811642, + -0.224561 -0.523596 0.821839, -0.193452 -0.517208 0.83371, -0.189333 -0.520952 0.832323, -0.0848751 -0.516853 0.851857, + -0.0769778 -0.546439 0.833954, -0.177446 -0.517796 0.836899, -0.0849967 -0.526699 0.845792, 0.0493292 -0.580127 0.813031, + 0.0497459 -0.550915 0.833078, 0.0528199 -0.503647 0.862293, 0.175015 -0.517873 0.837364, 0.19224 -0.517257 0.83396, + 0.188525 -0.520984 0.832487, 0.189176 -0.531775 0.825486, 0.0909194 -0.52718 0.844876, 0.26631 -0.527294 0.806871, + 0.329968 -0.43134 0.839682, 0.286786 -0.526057 0.800636, 0.35876 -0.471945 0.805332, 0.479307 -0.34725 0.806028, + 0.506116 -0.327012 0.798066, 0.424229 -0.310731 0.850574, 0.45781 -0.346963 0.818552, 0.358655 -0.452148 0.816657, + 0.540742 -0.230945 0.808865, 0.589638 -0.0778264 0.803909, 0.57325 -0.0529196 0.81767, 0.49683 -0.253478 0.830005, + 0.551859 -1.86753e-009 0.833937, 0.145266 -0.536427 0.831351, 0.366303 -0.433775 0.823202, 0.348385 -0.395636 0.849765, + 0.296713 -0.31176 0.902644, 0.348087 -0.31839 0.881739, 0.425656 -0.347027 0.835697, 0.520185 -0.19364 0.831812, + 0.509364 -0.185365 0.84035, 0.521178 -0.0997281 0.847601, 0.553309 -0.0613584 0.830713, 0.533019 -0.138835 0.834635, + 0.529249 -0.149516 0.835189, 0.603722 0 0.797195, 0.681394 0.0819843 0.727311, 0.70246 0.120179 0.701503, + 0.663237 0.183182 0.725645, 0.676245 0.225115 0.701439, 0.627892 0.279261 0.726474, 0.632656 0.32769 0.701687, + 0.634246 0.0880112 0.768105, 0.622839 0.168345 0.764023, 0.591411 0.249292 0.766868, 0.576103 0.374222 0.726679, + 0.50656 0.463833 0.726812, 0.571905 0.423398 0.702608, 0.496436 0.509892 0.702539, 0.405587 0.583496 0.703585, + 0.419951 0.543176 0.72705, 0.303307 0.64076 0.705289, 0.330421 0.606325 0.72332, 0.547065 0.344844 0.762759, + 0.207319 0.654973 0.726657, 0.298006 0.578475 0.759315, 0.402573 0.500349 0.766542, 0.484818 0.424253 0.764827, + 0.61792 0.114592 0.777845, 0.589313 0.236 0.772667, 0.572855 0.22464 0.788273, 0.615237 0.136118 0.776502, + 0.601171 0.218369 0.768705, 0.61027 0.156332 0.776615, 0.514849 0.321046 0.794896, 0.600276 0.0615565 0.79742, + 0.44832 0.452536 0.770857, 0.472385 0.414991 0.777583, 0.430445 0.471167 0.769882, 0.393861 0.474701 0.787104, + 0.400283 0.48186 0.779477, 0.494829 0.384314 0.779389, 0.287786 0.528872 0.79842, 0.498121 0.370801 0.783825, + 0.196805 0.611885 0.766071, 0.257984 0.568171 0.781425, 0.264948 0.577881 0.771917, 0.214059 0.676927 0.704236, + 0.61224 0.0998543 0.784341, 0.0673861 0.683457 0.726874, 0.120305 0.698916 0.705013, 0.002039 0.70893 0.705276, + -0.0516059 0.684376 0.727301, -0.112713 0.700786 0.704411, -0.167718 0.665524 0.727289, -0.226234 0.673594 0.703626, + 0.0853946 0.637243 0.765917, -0.136623 0.629431 0.764951, -0.273157 0.629528 0.727379, -0.244632 0.595566 0.765152, + -0.0405928 0.643687 0.764211, -0.32906 0.63058 0.702914, -0.424739 0.572837 0.701038, -0.367301 0.580491 0.726719, + -0.544377 0.447341 0.709605, -0.56003 0.42254 0.71262, -0.504903 0.487706 0.712191, -0.45528 0.514085 0.726936, + -0.405468 0.508422 0.759672, -0.456991 0.493897 0.739746, -0.494213 0.485676 0.721022, -0.491315 0.472011 0.731994, + -0.326762 0.554397 0.765422, 0.111886 0.63045 0.768124, -0.0834408 0.624273 0.776737, 0.0998492 0.614351 0.78269, + 0.173344 0.60649 0.775965, 0.195598 0.600614 0.775245, 0.146918 0.624941 0.766723, -0.0254714 0.599878 0.799686, + -0.153215 0.611829 0.776009, -0.0996087 0.622389 0.776344, -0.193575 0.600571 0.775786, -0.224107 0.578348 0.784404, + -0.398851 0.495952 0.77133, -0.359594 0.505549 0.784291, -0.170651 0.606654 0.776434, -0.292257 0.533108 0.793966, + 0.57325 0.0529196 0.81767, 0.527173 0.256654 0.810072, 0.589638 0.0778264 0.803909, 0.536849 0.234813 0.810343, + 0.494172 0.257124 0.83047, 0.553309 0.0613584 0.830713, 0.330671 0.430178 0.840002, 0.362058 0.466429 0.807068, + 0.361883 0.485434 0.79586, 0.478956 0.347641 0.806069, 0.359528 0.450298 0.817295, 0.42428 0.31094 0.850472, + 0.518516 0.197569 0.83193, 0.509403 0.186089 0.840166, 0.456318 0.347224 0.819274, 0.521178 0.0997281 0.847601, + 0.533019 0.138835 0.834635, 0.529249 0.149516 0.835189, 0.423779 0.346714 0.83678, 0.368015 0.43365 0.822504, + 0.258246 0.539273 0.801557, 0.184417 0.535701 0.824023, 0.26837 0.520507 0.810586, 0.161704 0.529565 0.832714, + 0.0909194 0.52718 0.844876, 0.349352 0.319731 0.880753, 0.29891 0.312951 0.901507, 0.349281 0.397428 0.84856, + 0.0589309 0.600165 0.797702, 0.083346 0.593714 0.800348, 0.0681072 0.55813 0.826954, 0.0680904 0.580498 0.81141, + -0.0726723 0.606943 0.791416, -0.052857 0.574733 0.816632, -0.0205182 0.572679 0.819523, -0.24365 0.554328 0.795836, + -0.333011 0.512346 0.791584, -0.249362 0.544268 0.800994, -0.241265 0.529082 0.81355, 0.189394 0.51963 0.833135, + 0.186625 0.522559 0.831927, 0.0848751 0.516853 0.851857, 0.0769778 0.546439 0.833954, 0.175716 0.519949 0.835929, + 0.0849967 0.526699 0.845792, -0.0490409 0.580373 0.812873, -0.0497459 0.550915 0.833078, -0.231088 0.523351 0.820184, + -0.188525 0.520984 0.832487, -0.19224 0.517257 0.83396, -0.175015 0.517873 0.837364, -0.0528199 0.503647 0.862293, + -0.412289 0.911009 0.00893363, -0.235812 0.971797 0.00193607, -0.447297 0.893604 0.0373895, -0.981891 0.189446 0, + -0.981026 0.193851 0.00312535, -0.980151 0.198239 0.0020836, -0.926566 0.376133 0, -0.92522 0.37911 0.0156372, + -0.589054 0.807749 0.0235912, -0.668758 0.743479 -0.00132517, -0.766986 0.641656 0.0031461, -0.107972 0.993548 0.0346998, + -0.0537291 0.998448 0.0146784, 0.809158 0.58737 -0.01613, 0.681074 0.731484 -0.032705, 0.66774 0.74437 0.00607192, + 0.526914 0.849875 -0.00860551, 0.390229 0.920718 -0.00032314, 0.911062 0.411215 -0.0294762, 0.976372 0.216096 0.000151145, + 0.984838 0.173039 -0.0123151, 0.921169 0.388852 0.0155611, 0.13408 0.990926 0.00940166, 0.51198 0.858776 -0.019496, + 0.341108 0.939998 0.00697585, 0.985348 0.170191 0.0111593, 0.925018 -0.379816 -0.00909111, 0.987651 -0.156309 -0.0106123, + 0.959227 -0.282631 -0.00165152, 0.986556 -0.163116 0.0100668, 0.483681 -0.875231 -0.00489872, 0.726572 -0.68709 0.000666323, + 0.480118 -0.877178 0.00674981, 0.80992 -0.58654 0.000339401, 0.170534 -0.985346 -0.00345094, -0.800588 -0.599204 -0.00368416, + -0.69597 -0.718046 0.0059467, -0.932272 -0.361697 -0.00660805, -0.979566 -0.200972 -0.00771773, + -0.979424 -0.201753 -0.00501534, 0.913688 -0.40629 0.0100822, 0.686363 -0.72714 0.0131669, 0.341027 -0.94002 0.00789284, + 0.0430946 -0.999067 0.00294326, -0.979442 -0.201282 -0.0133736, -0.910005 -0.414593 -0.00192206, + -0.503803 -0.863691 -0.0148782, -0.637183 -0.769861 -0.0362311, -0.275936 -0.960749 -0.0286429, -0.325071 -0.945574 0.0148063, + -0.977205 -0.212298 0, 0.0009259 -1 0, 0 0 1, -0.727685 0.68564 0.0192948, -0.60421 0.796782 0.00826716, + -0.743403 0.667629 0.0402998, -0.45199 0.89197 0.00975291, -0.42167 0.90673 0.00595027, -0.0870586 0.996151 -0.0102013, + -0.848988 0.528274 0.0120983, -0.956297 0.292289 -0.00797515, -0.904128 0.427204 -0.00703408, -0.982907 0.182991 0.0201963, + -0.984593 0.174861 0, 0.402446 0.915443 0.0012727, 0.2136 0.976905 0.00552883, 0.50045 0.865761 0.00267152, + 0.0623086 0.998052 -0.0031717, 0.697583 0.716288 -0.0176004, 0.343746 0.939053 -0.00425421, 0.804957 0.593326 0.00284833, + 0.957801 0.287432 0.000171953, 0.987136 0.159647 -0.00861818, 0.918418 0.395531 -0.00804129, 0.694547 0.719381 0.00971018, + 0.911308 0.411621 0.00931628, 0.986432 0.163855 0.0101826, 0.927458 -0.373901 -0.00447274, 0.987519 -0.157418 -0.00506746, + 0.95966 -0.281162 0.00113397, 0.985251 -0.170849 0.00955622, 0.764096 -0.645085 -0.004665, 0.787709 -0.616047 -0.000780237, + 0.538505 -0.842618 -0.00267722, 0.14508 -0.989339 -0.0126517, 0.500238 -0.865862 -0.00665954, -0.534569 -0.844974 -0.0159844, + -0.267324 -0.963461 -0.0167357, -0.458381 -0.888713 -0.00873842, 0.915611 -0.40192 0.0108598, -0.536792 -0.843684 -0.0071426, + -0.702538 -0.711646 0.000742822, -0.696894 -0.717154 0.00537367, 0.686123 -0.727441 0.00806972, 0.295772 -0.955207 0.00987727, + -0.0103016 -0.999934 -0.0050337, -0.0561098 -0.998422 0.00233667, -0.979528 -0.201292 -0.00253499, -0.978902 -0.204329 0, + -0.981258 -0.192657 0.00400567, -0.927622 -0.373516 0.00203187, -0.931212 -0.364432 0.00572034, + -0.837892 -0.545836 0.000806841, -0.979528 0.201292 -0.00253499, -0.981258 0.192657 0.00400567, -0.978902 0.204329 0, + -0.702538 0.711646 0.000742822, -0.536792 0.843684 -0.0071426, -0.696894 0.717154 0.00537367, -0.837892 0.545836 0.000806841, + -0.458381 0.888713 -0.00873842, -0.534569 0.844974 -0.0159844, -0.0103016 0.999934 -0.0050337, 0.14508 0.989339 -0.0126517, + -0.267324 0.963461 -0.0167357, -0.0561098 0.998422 0.00233667, -0.927622 0.373516 0.00203187, -0.931212 0.364432 0.00572034, + 0.789738 0.613445 1.59059e-006, 0.547447 0.836836 0.00263909, 0.508964 0.860748 -0.00831721, 0.295772 0.955207 0.00987727, + 0.76667 0.641995 0.00769303, 0.925416 0.378951 -0.000770373, 0.999975 -0.00111286 -0.0069303, 0.957648 0.287942 0.000932479, + 0.692352 0.721558 0.00166005, 0.913212 0.407428 0.0067428, 0.985251 0.170849 0.00955622, 0.919801 -0.392331 -0.00657616, + 0.957801 -0.287432 0.000171953, 0.986432 -0.163855 0.0101826, 0.808073 -0.589082 0.00100993, 0.699201 -0.714788 -0.0140167, + 0.399394 -0.916776 0.00253479, 0.495393 -0.868669 0.000407744, 0.914129 -0.40536 0.00710852, 0.21246 -0.977156 0.00510813, + 0.334613 -0.942329 -0.00703674, 0.693492 -0.720463 0.00103972, 0.0626741 -0.998027 -0.00362365, + -0.730986 -0.682295 -0.0115663, -0.753235 -0.657751 0.000762822, -0.601441 -0.798758 -0.0159411, + -0.41476 -0.90993 -0.000949844, -0.45199 -0.89197 0.00975291, -0.0861567 -0.996229 -0.0102553, + -0.853897 -0.520425 -0.00415132, -0.90701 -0.420918 -0.0126787, -0.956297 -0.292289 -0.00797515, + -0.982907 -0.182991 0.0201963, -0.984593 -0.174861 0, -0.910005 0.414593 -0.00192206, -0.979442 0.201282 -0.0133736, + -0.932276 0.361689 -0.00660492, -0.503666 0.863772 -0.0147871, -0.275764 0.960802 -0.0285385, -0.637052 0.769975 -0.0361042, + -0.696012 0.718005 0.00594063, -0.325071 0.945574 0.0148063, 0.0430946 0.999067 0.00294326, 0.169631 0.985503 -0.00298426, + -0.800612 0.599172 -0.0036781, -0.979569 0.200959 -0.0077126, -0.979428 0.201732 -0.00500765, -0.977205 0.212298 0, + 0.0009259 1 0, 0.481937 0.876174 0.00748427, 0.729206 0.684283 0.00386709, 0.485403 0.874287 -0.00263226, + 0.341027 0.94002 0.00789284, 0.809906 0.586557 0.00130379, 0.923815 0.382766 -0.00746603, 0.999897 -0.00845975 -0.0116313, + 0.957718 0.287709 -0.000274925, 0.689496 0.724195 0.0116982, 0.912309 0.409349 0.0112467, 0.985807 0.167477 0.0116376, + 0.911136 -0.411049 -0.0294781, 0.977627 -0.210342 -0.0015212, 0.985961 -0.166695 0.00971838, 0.806298 -0.591255 -0.0173254, + 0.687034 -0.726027 -0.0294803, 0.526914 -0.849875 -0.008582, 0.667124 -0.744937 0.00386131, 0.91931 -0.3934 0.0102438, + 0.504822 -0.862993 -0.0199409, 0.387021 -0.92207 -0.00104547, 0.332983 -0.942914 0.00594714, 0.134262 -0.99091 0.00846107, + -0.0364382 -0.999055 0.0237075, -0.232738 -0.972255 0.0235441, -0.428403 -0.903113 0.0292866, -0.979942 -0.199202 -0.00570949, + -0.978287 -0.207253 0, -0.982034 -0.188695 -0.00164277, -0.0742026 -0.996965 0.0235711, -0.479328 -0.875986 0.0537911, + -0.589826 -0.807274 0.0203715, -0.662766 -0.748788 -0.00766425, -0.928148 -0.372161 0.00616498, + -0.760897 -0.648837 -0.0067553, -0.933148 -0.359399 -0.0081779, 0 0.00382698 0.999993, -0.00712703 -3.24387e-005 0.999975, + 0 0.00510264 0.999987, 0 0.00153079 0.999999, -0.0106906 -4.86584e-005 0.999943, -0.02138 -9.73112e-005 0.999771, + 0 -0.00636016 0.99998, 0.00727127 0 0.999974, 0.010907 0 0.999941, 0.0218127 0 0.999762, 0 -0.00954029 0.999955, + 0 -0.0190797 0.999818, 0.000121534 -0.999832 0.018308, 0.0111444 -0.999545 0.0280348, 5.48331e-005 -0.999855 0.017042, 0 -1 0, + 0.0299542 -0.998731 0.0404887, 0.0316585 -0.998553 0.0434691, 0.0168487 -0.999703 0.0175855, 0.000125883 -0.999819 0.0190303, + 0 -0.999831 0.0183769, 4.48326e-005 -0.999833 0.0182594, 9.02167e-005 -0.999814 0.0192661, 3.50785e-005 -0.999879 0.0155315, + 1.89369e-005 -0.999879 0.0155525, 9.19832e-006 -0.999863 0.0165651, 2.64319e-005 -0.999863 0.0165819, + 0.00172635 -0.999899 0.0141022, 9.85092e-006 -0.999805 0.019733, 0.00157379 -0.999818 0.0190212, 0 -0.999803 0.019853, + 0.00386464 -0.999781 0.0205692, 0.00772923 -0.999744 0.0212851, -9.12895e-006 -0.999857 -0.0169279, 0 -0.999855 -0.0170601, + -3.74211e-005 -0.999212 -0.0396973, 0.000107124 -0.995209 -0.097772, 5.36265e-005 -0.998802 -0.0489447, + 4.10496e-005 -0.999813 -0.0193213, -6.48741e-005 -0.999107 -0.0422465, 0.000163038 -1 -2.49309e-006, + 8.05989e-006 -0.998068 -0.0621368, 6.70229e-005 -0.999869 -0.0161991, 7.1588e-005 -0.999922 -0.0125115, + 0 -0.999908 -0.0135654, -0.995525 -0.0820779 -0.0468359, -0.97997 -0.193561 -0.0468271, -0.994167 -0.100576 -0.0389533, + -0.928284 -0.368887 -0.0470164, -0.843107 -0.535885 -0.0446959, -0.89994 -0.43434 -0.0381722, -0.962428 -0.268742 -0.0388721, + -0.984166 -0.174918 -0.0286464, -0.872427 -0.487669 -0.0324025, -0.796148 -0.603986 -0.03673, -0.942249 -0.333633 -0.0292505, + -0.712387 -0.700212 -0.0469995, -0.996875 -0.0729937 -0.0301915, -0.561075 -0.826325 -0.0488092, + -0.637158 -0.769751 -0.0388895, -0.477408 -0.87792 -0.0365796, -0.372377 -0.926814 -0.0484789, -0.364512 -0.930502 -0.0360094, + -0.567604 -0.822556 -0.0350265, -0.57408 -0.81833 -0.0277319, -0.109893 -0.993309 -0.0355005, -0.19186 -0.980269 -0.0475697, + 2.72454e-005 -0.998843 -0.0480845, -0.249167 -0.967711 -0.0380949, -0.710287 -0.703281 -0.0298005, 0.90137 -0.340239 0.267897, + 0.917671 -0.272395 0.289276, 0.901691 -0.340099 0.266996, 0.89275 -0.432847 -0.125066, 0.900741 -0.340459 0.269729, + 0.928788 -0.203884 0.30949, 0.928577 -0.204989 0.309393, -0.805205 -0.591936 -0.0354369, 0.988347 -0.128016 -0.0823507, + 0.928998 -0.202779 0.309587, -0.436146 -0.899427 -0.0284374, -0.300336 -0.953449 -0.0270789, + 2.35291e-005 -0.999411 -0.0343106, 0.00677851 -0.999595 -0.0276557, -0.157275 -0.987176 -0.0273401, + 0.929703 -0.204151 0.306551, 0.114403 -0.992745 -0.03701, 0.176012 -0.984034 -0.0263894, 0.191877 -0.980266 -0.047549, + 0.253999 -0.966442 -0.0384072, 0.372314 -0.926842 -0.0484405, 0.642843 -0.765013 -0.0388234, 0.561099 -0.826322 -0.0485791, + 0.73842 -0.671574 -0.061018, 0.469762 -0.881939 -0.0388154, 0.768772 -0.635421 -0.0723165, 0.79075 -0.60742 -0.0758569, + 0.830833 -0.555599 -0.0320351, 0.828927 -0.535975 -0.160036, 0.849284 -0.516455 -0.109506, 0.782669 -0.620858 -0.0443263, + 0.783737 -0.329897 -0.526236, 0.763474 -0.231529 -0.602911, 0.812181 -0.158618 -0.561429, 0.956322 -0.0807035 -0.280954, + 0.996991 -0.0719258 -0.0289095, 0.369467 -0.92858 -0.0351362, 0.318237 -0.947622 -0.027153, 0.561948 -0.826464 -0.0342163, + 0.469853 -0.882277 -0.0287105, 0.606814 -0.794386 -0.0269607, 0.722684 -0.690612 -0.0279707, 0.784946 -0.618464 -0.0369187, + 0.81078 -0.584284 -0.0353286, 0.792792 -0.608782 -0.0294167, 0.75497 0.606884 -0.248418, 0.751678 0.651538 0.102364, + 0.780187 0.618465 0.0938569, 0.627348 0.596074 -0.501129, 0.740166 0.584766 0.331968, 0.439384 0.689049 -0.576327, + 0.495091 0.653391 -0.572683, 0.384683 0.722441 -0.574542, 0.548625 0.614865 -0.566525, 0.328402 0.752863 -0.570395, + 0.267613 0.777947 -0.568491, 0.647487 0.662036 0.37745, 0.618049 0.707213 0.343316, 0.205666 0.799664 -0.564127, + 0.143728 0.836539 -0.528719, 0.497841 0.773596 0.39205, 0.593179 0.73656 0.324989, 0.501455 0.686903 0.52603, + 0.691735 0.650892 0.312797, 0.632164 0.728181 0.264804, 0.659957 0.588229 0.467379, 0.478211 0.815338 0.326403, + 0.35981 0.85074 0.383116, 0.205005 0.862954 0.461827, 0.221483 0.932977 0.283723, 0.240898 0.728891 0.640848, + 0.053552 0.92215 0.383109, 0.111113 0.750925 0.650973, 0.354531 0.877787 0.322177, 0.351937 0.780375 0.516871, + 0.203648 0.849966 0.485887, 0.0551025 0.940454 0.335424, 0.374995 0.721009 0.582688, 0.51124 0.79749 0.32038, + 0.00987359 0.925625 -0.378313, 0.0808624 0.868019 -0.489902, -0.297851 0.951359 0.0787446, -0.299933 0.91564 0.267664, + -0.163306 0.979877 0.114766, -0.121977 0.951729 0.281662, -0.424151 0.902127 0.0791418, -0.473011 0.84637 0.244782, + -0.529714 0.746762 -0.40218, -0.878046 0.137207 -0.458486, -0.82471 0.199421 -0.529231, -0.796213 0.260484 -0.546071, + -0.732723 0.377226 -0.566407, -0.763874 0.32029 -0.560277, -0.985824 0.115455 0.121746, -0.988217 9.95891e-005 -0.153061, + -0.563143 0.669242 -0.484753, -0.596706 0.607348 -0.524472, -0.0976679 0.953611 0.284757, -0.428557 0.839875 0.333088, + -0.427443 0.6571 0.620896, -0.579012 0.710627 0.399693, -0.519466 0.554063 0.650515, -0.694135 0.600129 0.397518, + -0.575146 0.761633 0.298534, -0.255187 0.917063 0.306392, -0.698458 0.432558 -0.570131, -0.663838 0.488069 -0.566663, + -0.715634 0.377712 0.587538, -0.857139 0.354665 0.373532, -0.786673 0.479802 0.388504, -0.787908 0.530325 0.312979, + -0.615287 0.464133 0.637184, -0.916443 0.246986 0.314851, -0.915047 0.23004 0.331318, -0.785821 0.270838 0.555997, + -0.88409 0.171879 0.43456, -0.954255 0.1219 0.273017, -0.98534 0.0122625 0.17016, -0.8609 0.384943 0.332671, + -0.626369 0.541485 -0.560763, -0.68785 0.654736 0.313342, -0.981359 -0.118011 0.151686, -0.0236325 0.78668 0.616909, + 0.681619 0.698372 0.218339, 0.381085 0.899171 -0.215093, 0.454364 0.871071 -0.186515, 0.222874 0.939249 -0.261032, + 0.305148 0.920998 -0.242171, 0.589064 0.807997 -0.0120627, -0.109418 0.941955 0.317409, 0.0547508 0.82282 0.565658, + -0.286836 0.87453 0.391053, 0.0562273 0.959011 -0.277734, -0.0268724 0.960896 -0.275601, 0.138938 0.950496 -0.277946, + 0.318479 0.424363 0.847636, 0.400094 0.383853 0.832215, 0.34884 0.394857 0.849941, 0.589376 0.471847 0.655741, + 0.00496923 0.601519 0.798843, 0.0902783 0.541554 0.835805, 0.168953 0.495302 0.852133, -0.149858 0.82762 0.540914, + 0.24913 0.470853 0.846305, -0.244168 0.769205 0.590512, -0.535932 0.676036 0.50572, -0.444988 0.825917 0.346189, + -0.643605 0.547766 0.534532, -0.601376 0.767753 -0.221139, -0.531997 0.818013 -0.218708, -0.354279 0.771359 0.528669, + -0.810858 0.496842 0.309287, -0.905877 0.392298 0.159655, -0.88365 0.247455 0.397401, -0.878987 0.109882 0.464012, + -0.723287 0.650335 -0.232206, -0.775078 0.584178 -0.24081, -0.666337 0.711854 -0.221946, -0.424372 0.311331 0.850283, + -0.38724 0.394468 0.833331, -0.356466 0.502563 0.787631, -0.94441 0.326014 -0.042488, -0.952194 0.186571 0.241906, + -0.506838 0.165092 0.846085, -0.46681 0.240031 0.85116, -0.482582 0.20151 0.852355, -0.56426 0.0880628 0.820887, + -0.712206 0 0.701971, -0.877797 0.462867 -0.123397, -0.949388 -0.00867315 0.313985, -0.881318 -0.138013 -0.45192, + -0.805398 -0.263128 -0.531129, -0.83542 -0.201496 -0.511344, -0.906943 -0.256912 0.333842, -0.916735 -0.245542 0.315129, + -0.889582 -0.173125 0.422695, -0.841275 -0.380229 0.384294, -0.776214 -0.268281 0.57054, -0.871993 -0.37741 0.311751, + -0.734829 -0.37802 -0.56314, -0.771275 -0.323421 -0.54821, -0.687131 -0.617689 0.382507, -0.75157 -0.476639 0.456024, + -0.612768 -0.463557 0.640024, -0.668497 -0.492724 -0.557076, -0.695053 -0.430906 -0.575518, -0.606131 -0.617579 -0.5012, + -0.638688 -0.552144 -0.535924, -0.534523 -0.754271 -0.381262, -0.569605 -0.67897 -0.463196, -0.705404 -0.370923 0.604005, + -0.797131 -0.518821 0.308879, -0.936959 -0.131835 0.323616, -0.875649 -0.0986672 0.472762, -0.868333 -0.3614 0.339688, + -0.720004 -0.394025 0.57126, -0.891969 -0.225853 0.391638, -0.551612 -0.733953 0.396278, -0.584894 -0.744133 0.322745, + -0.504792 -0.538841 0.674415, -0.460168 -0.852058 0.249485, -0.423967 -0.652139 0.628464, -0.434121 -0.848703 0.302062, + -0.691534 -0.642619 0.329881, -0.546433 -0.655227 0.521621, -0.457534 -0.820978 0.341552, -0.299851 -0.918068 0.259309, + -0.648218 -0.551304 0.525241, -0.423837 -0.900631 0.0960504, -0.296343 -0.950644 0.0919598, 0.00944804 -0.912499 -0.40897, + -0.110926 -0.968631 0.222371, -0.16503 -0.983383 0.0756568, 0.0810735 -0.869167 -0.487828, 0.143879 -0.837529 -0.52711, + 0.333195 -0.767988 -0.546969, 0.270066 -0.785949 -0.556192, 0.390945 -0.734536 -0.554634, 0.446931 -0.697768 -0.559797, + 0.510133 -0.671616 -0.537305, 0.646715 -0.617003 -0.448405, 0.57069 -0.641982 -0.512027, 0.20575 -0.800456 -0.562971, + -0.268958 -0.921793 0.279213, 0.0716175 -0.921647 0.381362, 0.0434345 -0.942806 0.3305, -0.132196 -0.942851 0.305869, + 0.111113 -0.750925 0.650973, 0.22743 -0.884107 0.408205, 0.203579 -0.931218 0.302306, -0.0236699 -0.787094 0.616379, + 0.361858 -0.696257 0.619907, 0.504459 -0.780654 0.368918, 0.375172 -0.846483 0.377773, 0.240124 -0.726548 0.643793, + 0.494451 -0.673757 0.549153, 0.619528 -0.709038 0.336823, 0.479024 -0.815509 0.324779, 0.705684 -0.637214 0.309786, + 0.743505 -0.655628 0.13173, 0.626699 -0.643362 0.439697, 0.759865 -0.599662 0.251019, 0.774253 -0.620677 -0.123664, + 0.605033 -0.729448 0.319124, 0.344085 -0.882383 0.320946, -0.276046 -0.880511 0.385355, -0.873845 0 0.486205, + -0.944766 -0.326832 -0.0244619, -0.830356 -0.557219 -0.00408914, -0.87493 -0.461289 -0.147344, -0.950728 -0.185554 0.248367, + -0.59445 -0.760631 -0.260902, -0.530667 -0.816999 -0.225621, -0.363748 -0.789917 0.493678, -0.0929255 -0.93315 0.347269, + -0.71568 -0.642821 -0.273099, -0.653186 -0.697805 -0.293967, -0.772904 -0.583104 -0.250221, -0.563932 -0.0877405 0.821147, + -0.430734 -0.316095 0.845312, -0.471807 -0.242493 0.8477, -0.510085 -0.166358 0.843883, -0.366091 -0.517572 0.773367, + -0.393894 -0.401215 0.826967, -0.242385 -0.76639 0.594891, -0.14974 -0.826969 0.541942, 0.00496923 -0.601519 0.798843, + 0.197576 -0.823823 0.531299, 0.0537054 -0.794705 0.604615, 0.340008 -0.755434 0.560102, 0.0559054 -0.950044 -0.307067, + 0.219055 -0.922418 -0.318057, 0.138238 -0.93163 -0.336088, -0.0268724 -0.960896 -0.275601, 0.507115 -0.789925 0.344749, + 0.627903 -0.743338 0.230623, 0.654086 -0.599209 0.46165, 0.703871 -0.555919 0.442175, 0.378403 -0.894012 -0.239903, + 0.454697 -0.872348 -0.179607, 0.298352 -0.906803 -0.297818, 0.172802 -0.509316 0.843052, 0.0933692 -0.554009 0.827258, + 0.248824 -0.470554 0.846561, 0.31795 -0.423482 0.848275, 0.684459 -0.701282 0.199297, 0.569678 -0.457847 0.682527, + 0.402557 -0.386023 0.83002, 0.349826 -0.396314 0.848857, 0.589431 -0.807804 -0.00492254, 0.607087 0.502527 0.615559, + 0.620828 0.512626 0.593116, 0.537915 0.538028 0.648979, 0.500683 0.541492 0.675354, 0.466069 0.591415 0.658033, + 0.593681 0.47454 0.649888, 0.523571 0.526529 0.669807, 0.536719 0.499708 0.679871, 0.501756 0.53116 0.682723, + 0.456909 0.578009 0.676121, 0.462953 0.542137 0.701258, 0.278202 0.684389 0.673955, 0.34835 0.676297 0.649056, + 0.232502 0.710846 0.663808, 0.0643189 0.745578 0.663308, 0.11684 0.73756 0.665096, 0.00317904 0.759057 0.651017, + 0.167047 0.722571 0.670811, -0.106308 0.753486 0.648812, -0.0411251 0.757663 0.651348, 0.316923 0.679148 0.662056, + 0.368508 0.653008 0.661651, 0.401962 0.633813 0.660838, 0.124121 0.726686 0.675663, 0.16281 0.699965 0.695372, + 0.0189921 0.74869 0.662648, -0.103928 0.732527 0.672758, 0.242555 0.668833 0.70273, 0.280441 0.661212 0.69581, + -0.225915 0.706828 0.67034, 0.445841 0.60119 0.663171, 0.500986 0.543923 0.673172, 0.335867 0.677421 0.654442, + 0.406463 0.622205 0.669066, 0.379607 0.633198 0.674507, 0.497154 0.507156 0.70401, 0.451545 0.536564 0.712886, + 0.278522 0.670438 0.687705, 0.126242 0.704728 0.698155, 2.42604e-005 0.755538 0.655104, -0.0630173 0.736628 0.673356, + -0.109183 0.698489 0.707243, -0.0749697 0.708136 0.702084, -0.0800963 0.721346 0.687928, 0.0684433 0.736032 0.673478, + -0.228361 0.724255 0.65062, -0.323476 0.686019 0.651722, -0.465275 0.573519 0.674237, -0.434798 0.620435 0.652695, + -0.51407 0.543127 0.663886, -0.389154 0.652226 0.650507, -0.34508 0.666695 0.660634, -0.553814 0.494235 0.670091, + -0.588501 0.46922 0.658407, -0.338884 0.658441 0.672022, -0.292006 0.691142 0.661102, -0.268011 0.691246 0.671081, + -0.469509 0.530975 0.705427, -0.444408 0.589764 0.6743, -0.433087 0.572701 0.696024, -0.551802 0.462974 0.693664, + -0.652561 0.375747 0.658011, -0.634089 0.40638 0.657865, -0.677112 0.347698 0.648557, -0.682784 0.281642 0.674154, + -0.70691 0.245108 0.663476, -0.715133 0.196171 0.670896, -0.732072 0.153641 0.663676, -0.730735 0.108989 0.673905, + -0.763846 -9.33909e-010 0.645398, -0.677963 0.315315 0.664036, -0.679104 0.332882 0.654222, -0.701633 0.141877 0.698271, + -0.691225 0.182936 0.699102, -0.751844 0.0758722 0.654961, -0.665726 0.249169 0.703366, -0.660114 0.283392 0.695657, + -0.755124 0.060823 0.652754, -0.749367 0 0.662155, -0.738141 0 0.674647, -0.600648 0.443202 0.665427, + -0.624322 0.403143 0.669102, -0.5411 0.50713 0.670842, -0.450598 0.59847 0.662416, -0.415234 0.63402 0.65238, + -0.25216 0.664805 0.703171, -0.479076 0.523671 0.704454, -0.1964 0.684659 0.701904, -0.721973 0.0874484 0.686372, + -0.668378 0.28426 0.687363, -0.703908 0.0933265 0.704134, 0.423301 0.53022 0.734631, 0.409567 0.549573 0.728165, + 0.488817 0.491566 0.720708, 0.283071 0.637967 0.716149, 0.250391 0.621869 0.742013, 0.395769 0.5543 0.732201, + 0.290064 0.607623 0.739362, 0.292851 0.588562 0.753547, 0.277106 0.60446 0.746887, 0.153302 0.662817 0.73292, + 0.347567 0.574656 0.740924, 0.373779 0.570347 0.731432, -0.093548 0.664564 0.741353, -0.0747711 0.691226 0.71876, + -0.238564 0.644609 0.726337, -0.205909 0.648479 0.732855, -0.0590108 0.670302 0.739739, -0.0277214 0.654019 0.75597, + -0.068873 0.659509 0.748535, 0.0605292 0.668608 0.741148, 0.104076 0.674851 0.730578, 0.0728185 0.680568 0.729057, + 0.0464695 0.681084 0.73073, 0.318998 0.585128 0.745564, 0.352922 0.578622 0.735284, 0.406166 0.551281 0.728779, + 0.309299 0.584274 0.750305, 0.135808 0.637142 0.758687, 0.00441902 0.668009 0.74414, -0.000151148 0.659981 0.751282, + -0.0229076 0.660185 0.750754, -0.18925 0.614573 0.765823, -0.290314 0.601046 0.744621, -0.415646 0.55985 0.716803, + -0.534322 0.43213 0.726474, -0.496394 0.466869 0.731865, -0.422294 0.525079 0.73889, -0.385856 0.551014 0.739932, + -0.457245 0.480473 0.74838, -0.353502 0.550542 0.756267, -0.380735 0.54225 0.749003, -0.541626 0.410583 0.733528, + -0.551748 0.375627 0.744633, -0.61803 0.258838 0.742322, -0.607035 0.286829 0.741106, -0.636585 0.282688 0.717528, + -0.670788 0.0933464 0.735751, -0.689787 0.100449 0.717011, -0.649724 0.184699 0.73739, -0.667896 0.0594789 0.741874, + -0.579797 0.302653 0.756463, -0.601728 0.272229 0.750876, -0.65427 0.0710035 0.75292, -0.651847 1.496e-009 0.75835, + -0.567361 0.379576 0.730769, -0.306061 0.610225 0.730721, -0.263519 0.624043 0.735615, -0.325359 0.595349 0.734644, + -0.346655 0.569528 0.745297, -0.351953 0.559841 0.750138, -0.584425 0.319368 0.745957, -0.583538 0.309998 0.750589, + -0.579629 0.351314 0.735261, -0.619721 0.164233 0.767446, -0.662745 0.0624259 0.746238, -0.667202 0 0.744877, + -0.755124 -0.060823 0.652754, -0.732051 -0.153562 0.663717, -0.730735 -0.108989 0.673905, -0.715194 -0.195697 0.67097, + -0.706605 -0.245453 0.663673, -0.683224 -0.281381 0.673817, -0.676845 -0.347207 0.649098, -0.751844 -0.0758722 0.654961, + -0.667263 -0.25336 0.700406, -0.686608 -0.188301 0.70222, -0.677081 -0.316925 0.664168, -0.701633 -0.141877 0.698271, + -0.677073 -0.335355 0.655064, -0.651886 -0.371837 0.660895, -0.587822 -0.469847 0.658566, -0.599028 -0.441005 0.668341, + -0.632718 -0.403635 0.660869, -0.464739 -0.573858 0.674318, -0.513429 -0.543125 0.664384, -0.435007 -0.620182 0.652796, + -0.553412 -0.49381 0.670736, -0.389068 -0.652436 0.650348, -0.416196 -0.633477 0.652294, -0.55163 -0.462905 0.693847, + -0.622505 -0.395646 0.675242, -0.444408 -0.589764 0.6743, -0.320209 -0.687027 0.652273, -0.345609 -0.666777 0.660275, + -0.469204 -0.530868 0.70571, -0.478138 -0.524166 0.704723, -0.284793 -0.694488 0.660741, -0.452181 -0.596952 0.662707, + -0.721973 -0.0874484 0.686372, -0.669423 -0.283935 0.68648, -0.703908 -0.0933265 0.704134, -0.66012 -0.282738 0.695917, + -0.670788 -0.0933464 0.735751, -0.433087 -0.572701 0.696024, -0.338973 -0.660016 0.67043, -0.541407 -0.506594 0.671, + -0.217841 -0.70768 0.672112, -0.254757 -0.664725 0.702311, -0.264085 -0.694062 0.669729, -0.22813 -0.7259 0.648865, + -0.105986 -0.753983 0.648287, 0.0587406 -0.744171 0.665402, 0.00051086 -0.759095 0.650979, 0.117753 -0.737375 0.665141, + 0.37014 -0.651878 0.661855, 0.401087 -0.633957 0.661232, 0.381231 -0.631726 0.67497, -0.0410466 -0.757745 0.651259, + -0.0950533 -0.735848 0.670442, 0.166522 -0.722706 0.670795, 0.232443 -0.710742 0.66394, -0.110284 -0.703463 0.702123, + 0.16998 -0.694221 0.699403, 0.126275 -0.704693 0.698185, 0.121494 -0.725183 0.677753, 0.279871 -0.68369 0.673973, + 0.247463 -0.670458 0.699462, 0.0122473 -0.747193 0.664494, 0.348006 -0.676331 0.649206, 0.465753 -0.591639 0.658056, + 0.616473 -0.508931 0.600791, 0.540642 -0.539978 0.645081, 0.620993 -0.512244 0.593274, 0.53625 -0.500147 0.679918, + 0.457143 -0.577708 0.67622, 0.523226 -0.526658 0.669975, 0.501683 -0.531114 0.682812, 0.498249 -0.542889 0.676032, + 0.469184 -0.527748 0.708059, 0.442575 -0.602954 0.663757, 0.599635 -0.47966 0.640596, 0.313734 -0.679294 0.663424, + -0.0630716 -0.736628 0.673351, -6.12798e-005 -0.755542 0.6551, 0.0583761 -0.733175 0.67753, -0.0801896 -0.721247 0.688021, + 0.285286 -0.660661 0.694362, -0.0750554 -0.708266 0.701945, 0.334099 -0.678344 0.654391, 0.402258 -0.623864 0.670061, + 0.500986 -0.543923 0.673172, 0.282915 -0.668703 0.687601, 0.432104 -0.545035 0.718486, -0.194352 -0.677471 0.709409, + -0.667896 -0.0594788 0.741874, -0.689787 -0.100449 0.717011, -0.636805 -0.281493 0.717803, -0.623723 -0.253742 0.739313, + -0.601144 -0.273623 0.750838, -0.579585 -0.303034 0.756473, -0.607979 -0.286215 0.740569, -0.551197 -0.376375 0.744663, + -0.537873 -0.41352 0.734638, -0.530317 -0.436148 0.727007, -0.412666 -0.560132 0.718303, -0.456616 -0.481092 0.748366, + -0.420518 -0.525431 0.739653, -0.495684 -0.467806 0.731748, -0.387368 -0.548638 0.740906, -0.304282 -0.611089 0.730741, + -0.263519 -0.624043 0.735615, -0.289735 -0.601189 0.744732, -0.389177 -0.536223 0.749003, -0.355936 -0.54898 0.756261, + -0.571971 -0.372365 0.730886, -0.681703 0 0.731629, -0.662745 -0.0624259 0.746238, -0.648635 -0.174408 0.740847, + -0.583538 -0.309998 0.750589, -0.65427 -0.0710035 0.75292, -0.583984 -0.32206 0.745144, -0.619721 -0.164233 0.767446, + 0.462379 -0.476029 0.748066, 0.374861 -0.548297 0.747563, 0.433964 -0.511541 0.74162, -0.581358 -0.35128 0.733911, + -0.34594 -0.569405 0.745723, -0.323326 -0.595948 0.735055, -0.353981 -0.558322 0.750316, -0.189336 -0.614552 0.765818, + -0.239084 -0.644106 0.726613, -0.216023 -0.643364 0.73445, -0.0747521 -0.69124 0.718749, -0.100953 -0.666353 0.73877, + -0.0588174 -0.670237 0.739813, 0.0605098 -0.668586 0.741169, 0.0728185 -0.680568 0.729057, 0.104197 -0.674826 0.730584, + 0.0462319 -0.681061 0.730766, -0.0692159 -0.659486 0.748524, -0.0277775 -0.654016 0.755971, 0.245052 -0.62727 0.739244, + 0.381963 -0.553104 0.740392, 0.283071 -0.637967 0.716149, 0.537224 -0.427342 0.727165, 0.3816 -0.563676 0.732564, + 0.290064 -0.607623 0.739362, 0.477963 -0.520259 0.70773, 0.141071 -0.663395 0.734851, -0.0232507 -0.660175 0.750752, + -0.000153252 -0.659981 0.751282, 0.00427957 -0.667979 0.744167, 0.135771 -0.637141 0.758694, 0.366679 -0.571824 0.733869, + 0.27866 -0.60363 0.74698, 0.309163 -0.58464 0.750076, 0.302568 -0.578387 0.757575, 0.31958 -0.585065 0.745364, + 0.352738 -0.578707 0.735305, -0.706769 0.70681 -0.029951, -0.564896 0.824853 -0.022606, -0.80831 0.588318 -0.0227243, + -0.678721 0.734378 0.00515725, 0.051622 0.998666 -0.00142649, 0.00302359 0.999995 -0.000233341, 0.253043 0.967453 0.00182217, + 0.308947 0.951079 -0.000561146, -0.248161 0.968676 -0.0091096, -0.359709 0.933054 -0.00438037, -0.159508 0.987185 0.00470307, + 0.499398 0.866373 0.000309394, -0.429957 0.902843 0.00346078, -0.974026 0.226434 -0.0012348, -0.999176 0.0396063 -0.00888731, + -0.978113 0.207996 -0.00566652, -0.997963 -0.0637752 -0.00168103, -0.993834 -0.110836 0.00302551, + -0.962983 -0.269463 0.00735558, -0.926072 0.377329 -0.00354329, -0.897424 0.441129 -0.00588297, 0.177285 0.984149 0.00447033, + -0.918287 0.395685 -0.0134989, 0.498922 0.866636 0.00421923, 0.500615 0.86567 0, 0.838927 0.544244 -0.000622207, + 0.669234 0.74305 -0.00135385, 0.712981 0.701182 0.00146705, 0.961134 0.275994 -0.00699816, 0.863714 0.503983 -0.000319668, + 0.766382 0.642377 0.00325536, 0.933782 0.357816 0.00426987, 0.996439 -0.0824979 -0.0173943, 0.987602 0.156947 -0.00310425, + 0.996838 0.0793524 0.00409608, 0.963968 -0.264968 -0.0236044, 0.914042 -0.40517 -0.0190849, 0.973395 -0.229055 0.00596036, + 0.792695 -0.60936 -0.0177407, 0.828273 -0.560245 -0.00944165, 0.393298 -0.919396 -0.00536463, 0.525411 -0.850754 -0.0127322, + 0.437955 -0.898946 -0.00962762, 0.672403 -0.74015 -0.00723956, 0.797832 -0.602858 -0.00513038, 0.688523 -0.725212 0.00215502, + 0.233229 -0.972417 -0.00318127, -0.966866 0.253919 -0.0263784, -0.905021 0.424935 -0.0191611, -0.994145 0.106052 -0.0206939, + -0.956459 0.291812 0.00574243, -0.456202 0.889857 -0.00585753, -0.498352 0.866974 -0.00132437, -0.26273 0.964869 -0.00014633, + -0.204925 0.978772 -0.00327248, -0.692868 0.721014 -0.00849967, -0.779731 0.626112 -0.00171178, -0.63271 0.774355 0.00729507, + -0.000432386 1 -0.000861344, -0.826953 0.562229 0.00691779, -0.959655 -0.281168 0.0025999, -0.88648 -0.462654 -0.0102439, + -0.953406 -0.301676 -0.00287396, -0.82749 -0.561393 -0.00990375, -0.793272 -0.608772 -0.0108418, + -0.682374 -0.730944 -0.00932617, -0.991631 -0.129075 -0.00270915, -0.997829 -0.0654996 -0.00684913, + -0.343292 0.939212 0.00555753, -0.993161 -0.115721 -0.015464, -0.000678203 0.999986 0.00528614, 5.50336e-005 1 0, + 0.455944 0.889994 -0.00502916, 0.203178 0.979134 -0.00380711, 0.262785 0.964854 -0.000214823, 0.690459 0.723326 -0.00812899, + 0.497644 0.867381 -0.00113462, 0.344225 0.938874 0.00503519, 0.630348 0.776285 0.00661795, 0.904954 0.425073 -0.0192435, + 0.779404 0.626519 -0.0017457, 0.82667 0.562645 0.00683415, 0.967017 0.253326 -0.0265114, 0.994196 0.105534 -0.0209091, + 0.956524 0.291597 0.00568825, 0.991113 -0.132079 -0.0157981, 0.997241 -0.0737748 -0.00816106, 0.793272 -0.608772 -0.0108418, + 0.886228 -0.463135 -0.010352, 0.827385 -0.561546 -0.00999071, 0.95462 -0.297802 -0.00373467, 0.990982 -0.133943 -0.00386817, + 0.962003 -0.273019 0.00321224, 0.682374 -0.730944 -0.00932617, -0.963155 -0.267467 -0.0281859, + -0.996633 -0.0794052 -0.0204489, -0.913278 -0.406748 -0.0218823, -0.973735 -0.227621 0.00539585, + -0.840339 0.542062 0.000185187, -0.863846 0.503756 -0.000299757, -0.713705 0.700443 0.00218098, + -0.669226 0.743059 0.000138187, -0.961264 0.275542 -0.00698188, -0.987566 0.157171 -0.00319855, -0.933883 0.357554 0.00428712, + -0.499072 0.86656 0.000848454, -0.996578 0.0825845 0.00353513, -0.688709 -0.725034 0.00242932, -0.529808 -0.848057 -0.0101083, + -0.672498 -0.740066 -0.00697953, -0.442606 -0.896696 -0.00597041, -0.400383 -0.916348 0, -0.233372 -0.972387 0, + -0.793395 -0.608694 -0.00399091, -0.828104 -0.560516 -0.0080816, -0.766296 0.64248 0.00321906, -0.794959 -0.606486 -0.0146636, + -0.498943 0.866625 0.00419477, -0.499398 0.866373 0, -0.051043 0.998696 -0.0012699, -0.310049 0.950721 -9.07326e-006, + -0.252883 0.967495 0.00210415, 0.248183 0.96867 -0.00917336, -0.00295842 0.999996 -0.000238973, -0.17732 0.984143 0.00447248, + 0.159504 0.987186 0.00468713, 0.564849 0.824881 -0.022745, 0.359796 0.93302 -0.00443815, 0.430078 0.902785 0.00342545, + 0.706581 0.706992 -0.0300951, 0.813402 0.581217 -0.023742, 0.678664 0.734431 0.00516615, 0.919958 0.391655 -0.0168531, + 0.898369 0.439177 -0.00756136, 0.993254 -0.115913 0.00316409, 0.999199 0.0390268 -0.00879987, 0.997728 -0.0673594 -0.00150985, + 0.978064 0.20823 -0.0056119, 0.922527 0.385905 -0.00460141, 0.973911 0.226928 -0.00121028, 0.960488 -0.278219 0.00759459, + -0.708979 -0.704839 -0.0234427, -0.820955 -0.570719 -0.0176665, -0.591251 -0.806304 -0.0172181, + -0.730744 -0.682621 0.00644811, -0.998674 0.0514706 -0.0012779, -0.999987 0.00501665 0.000105708, + -0.967894 0.251352 0.00155264, -0.950791 0.309832 -0.000730769, -0.970617 -0.240545 -0.00641449, + -0.933025 -0.359802 -0.00242902, -0.987824 -0.155452 0.00623336, -0.865837 0.500326 0.000648865, + -0.901703 -0.432334 0.00440109, -0.233859 -0.972259 0.00466191, -0.0441531 -0.998994 -0.00787935, + -0.214654 -0.976683 -0.00361417, 0.0621856 -0.998053 -0.00473195, 0.113074 -0.993587 0, 0.290078 -0.957003 0, + -0.387354 -0.92193 -0.00145882, -0.436371 -0.899751 -0.0053385, -0.984937 0.172865 0.00413867, -0.381848 -0.924122 -0.0138062, + -0.866201 0.499682 0.00386031, -0.866499 0.499178 0, -0.545389 0.838178 -0.0028222, -0.742259 0.670114 0.000100546, + -0.702717 0.711469 0.000746181, -0.275643 0.961225 -0.00822519, -0.507174 0.861842 -0.00201258, -0.645028 0.764155 0.00244872, + -0.356101 0.934433 0.00518017, 0.0884822 0.99592 -0.0177214, -0.151592 0.988437 -0.00356864, -0.0715372 0.997431 0.00366176, + 0.261944 0.964814 -0.0227966, 0.401347 0.915759 -0.0174753, 0.230565 0.973039 0.0059261, 0.588772 0.808163 -0.0148314, + 0.549571 0.835429 -0.00550382, 0.910569 0.413171 0.012355, 0.844625 0.535351 -0.00283018, 0.892557 0.45091 0.00468433, + 0.741096 0.671398 -0.00131633, 0.595429 0.803408 -7.22363e-005, 0.72699 0.686624 0.00577597, 0.967719 0.251688 0.0131304, + -3.55274e-005 -0.000191963 1, 0.0064314 -0.00357042 0.999973, -0.00140414 -0.00164077 0.999998, -0.000467063 0.000860466 1, + 0.00215155 0.00180771 0.999996, -0.00461984 0.000144501 0.999989, -0.0026186 -0.000947253 0.999996, + -0.000462186 -0.00254708 0.999997, 0.00163561 0.00194791 0.999997, 0.00204912 0.00179164 0.999996, + -4.86689e-005 -0.00270335 0.999996, -0.249867 -0.967975 -0.0242921, -0.423401 -0.905762 -0.0180976, + -0.116851 -0.992957 -0.0195638, -0.29088 -0.956744 0.00546864, -0.889341 -0.457235 -0.00307357, + -0.866625 -0.49896 -0.00045621, -0.963995 -0.265917 0.00144939, -0.97826 -0.207379 -0.00121041, + -0.719484 -0.694444 -0.00949698, -0.628279 -0.777983 -0.00266611, -0.775753 -0.631003 0.00652043, -1 0 0.000216593, + -0.561896 -0.827173 0.00761839, 0.273056 -0.961993 0.0032061, 0.474443 -0.880178 -0.0137811, 0.298783 -0.954316 -0.00315228, + 0.572292 -0.819878 -0.0168124, 0.622409 -0.782381 -0.0220689, 0.730501 -0.68264 -0.0192555, 0.134178 -0.99095 -0.00369842, + 0.0622062 -0.998028 -0.00836912, -0.939554 -0.34236 0.00531839, 0.113211 -0.993451 -0.0154205, -0.999988 0 0.00496803, -1 0 0, + -0.88853 0.458819 -0.000626631, -0.97826 0.207379 -0.00121041, -0.963263 0.268553 0.00177029, -0.724235 0.689496 -0.00884633, + -0.867701 0.497087 -0.000159376, -0.93861 0.344955 0.00412562, -0.779627 0.626223 0.00518421, -0.423401 0.905762 -0.0180976, + -0.628279 0.777983 -0.00266612, -0.561896 0.827173 0.00761839, -0.249867 0.967975 -0.0242921, -0.116851 0.992957 -0.0195638, + -0.29088 0.956744 0.00546864, 0.113211 0.993451 -0.0154205, 0.0622062 0.998028 -0.00836912, 0.622409 0.782381 -0.0220689, + 0.474444 0.880178 -0.0137811, 0.572292 0.819878 -0.0168124, 0.298783 0.954316 -0.00315228, 0.134178 0.99095 -0.00369842, + 0.273056 0.961993 0.0032061, 0.730501 0.68264 -0.0192555, 0.263804 -0.964065 -0.0313906, 0.0811617 -0.996426 -0.023415, + 0.414373 -0.909785 -0.0242059, 0.22523 -0.974293 0.00496481, -0.546022 -0.837768 -0.00208549, -0.507709 -0.861526 -0.00237503, + -0.702032 -0.712145 0.000907222, -0.740357 -0.672212 0.00161688, -0.274204 -0.961633 -0.00864428, + -0.152297 -0.988327 -0.00380617, -0.355654 -0.934605 0.00492312, -0.863475 -0.504389 0.00148414, + -0.0778344 -0.996962 0.00286039, 0.726925 -0.686692 0.00578269, 0.844953 -0.534786 -0.00757783, + 0.740723 -0.671806 -0.00255546, 0.895569 -0.444899 -0.00455152, 0.916444 -0.400164 0, 0.972279 -0.233822 0, + 0.602213 -0.798335 -0.000691566, 0.557456 -0.830182 -0.00631059, -0.646575 -0.76285 0.00107263, 0.595983 -0.802862 -0.0147583, + -0.865046 -0.501682 0.00323178, -0.864071 -0.50337 0, -0.998907 -0.0467227 -0.00126977, -0.950119 -0.311888 0.000436359, + -0.96803 -0.250826 0.00213801, -0.970153 0.242352 -0.00834392, -1 -0.000556435 -0.000246202, -0.984934 -0.172882 0.00414115, + -0.987754 0.15593 0.00533382, -0.821576 0.569805 -0.0183159, -0.934364 0.3563 -0.00392176, -0.901703 0.432334 0.00440109, + -0.708979 0.704839 -0.0234427, -0.591251 0.806304 -0.0172181, -0.730744 0.682621 0.00644811, -0.376277 0.926404 -0.0138402, + -0.433644 0.901066 -0.00571543, 0.111559 0.993757 0.0015247, -0.0442513 0.998986 -0.00832459, 0.0610603 0.998127 -0.00384626, + -0.216425 0.976291 -0.00395904, -0.385905 0.922537 -0.00179587, -0.23724 0.971439 0.00489905, 0.287457 0.957785 0.00392875, + 0.706581 -0.706992 -0.0300951, 0.566751 -0.823611 -0.0214036, 0.808672 -0.587818 -0.0228069, 0.678664 -0.734431 0.00516615, + -0.058619 -0.99828 -0.000841214, -0.0111171 -0.999938 0.000425305, -0.254729 -0.967011 0.0019048, + -0.311989 -0.950086 -0.000568056, 0.245489 -0.969384 -0.00542258, 0.368033 -0.929811 -0.00148874, + 0.16018 -0.987067 0.00639127, -0.4983 -0.867004 0.000337184, 0.430847 -0.902419 0.00338197, 0.973911 -0.226928 -0.00121028, + 0.99916 -0.0382107 -0.0147915, 0.977521 -0.210735 -0.00657394, 0.997585 0.0683635 -0.0122722, 0.992406 0.122501 -0.0110807, + 0.960335 0.278775 -0.0063487, 0.925873 -0.377819 -0.00354816, 0.897632 -0.440706 -0.00587401, -0.177828 -0.984051 0.00450255, + 0.918677 -0.394778 -0.0135046, -0.497791 -0.867286 0.00433656, -0.499393 -0.866375 0, -0.838842 -0.544374 -0.00062226, + -0.665435 -0.746454 -0.00129901, -0.710388 -0.703808 0.00152402, -0.961264 -0.275542 -0.00698188, + -0.863846 -0.503756 -0.000299757, -0.765024 -0.643994 0.00334585, -0.933883 -0.357554 0.00428712, + -0.996193 0.085167 -0.0186076, -0.987566 -0.157171 -0.00319855, -0.99683 -0.0794584 0.00394115, -0.961515 0.273566 -0.0255131, + -0.913949 0.405278 -0.0211512, -0.972592 0.232461 0.00517977, -0.800851 0.598608 -0.0174833, -0.832057 0.554599 -0.0100176, + -0.392009 0.919946 -0.00534705, -0.531587 0.846865 -0.0152978, -0.437125 0.89935 -0.00952354, -0.671712 0.740728 -0.0111621, + -0.792533 0.609781 -0.00766482, -0.68712 0.726519 -0.00601003, -0.231078 0.97293 -0.00315193, 0.968553 -0.247672 -0.0237458, + 0.905061 -0.42492 -0.0175663, 0.994229 -0.10561 -0.0188381, 0.958418 -0.285308 0.00595304, 0.456307 -0.889803 -0.00581942, + 0.498505 -0.866886 -0.00127156, 0.262791 -0.964853 -0.000134423, 0.204877 -0.978782 -0.00330724, + 0.691247 -0.722574 -0.00800723, 0.773274 -0.634066 -0.00293886, 0.630011 -0.77656 0.00628945, 0.000450719 -1 -0.000865652, + 0.822587 -0.568617 0.00502714, 0.957987 0.286793 -0.00309349, 0.888157 0.459445 -0.00938378, 0.952538 0.304339 -0.00706319, + 0.830672 0.556747 -0.00409702, 0.801081 0.598556 0, 0.682404 0.730976 0, 0.991853 0.127288 -0.00512285, + 0.998002 0.062754 -0.00730581, 0.343408 -0.93917 0.00559084, 0.993252 0.114909 -0.0157018, 0.000363085 -0.999985 0.00539026, + -0.455815 -0.89006 -0.005014, -0.203177 -0.979135 -0.00380604, -0.263005 -0.964794 5.73422e-005, + -0.690329 -0.723457 -0.00748427, -0.498349 -0.866977 -0.000253332, -0.344735 -0.93868 0.00607273, + -0.626293 -0.779558 0.00679694, -0.905263 -0.42438 -0.0200065, -0.774816 -0.632179 -0.00313573, -0.823644 -0.567091 0.0043458, + -0.966866 -0.253919 -0.0263784, -0.994145 -0.106052 -0.0206939, -0.957067 -0.289813 0.00548236, -0.99115 0.131832 -0.0155548, + -0.997253 0.0736454 -0.00791541, -0.793272 0.608772 -0.0108418, -0.88648 0.462654 -0.0102439, -0.82749 0.561393 -0.00990375, + -0.954658 0.297681 -0.00360613, -0.990943 0.134233 -0.00372712, -0.961993 0.273055 0.00319905, -0.682374 0.730944 -0.00932617, + 0.963156 0.267462 -0.0281769, 0.996638 0.0793509 -0.020388, 0.913091 0.407166 -0.0219285, 0.973769 0.227474 0.00541724, + 0.840424 -0.541929 0.000185561, 0.863714 -0.503983 -0.000319668, 0.713949 -0.700194 0.00221311, + 0.669383 -0.742917 0.000134206, 0.961134 -0.275994 -0.00699816, 0.987602 -0.156947 -0.00310425, 0.933782 -0.357816 0.00426987, + 0.498992 -0.866606 0.000860967, 0.996587 -0.0824727 0.00369081, 0.686927 0.726699 -0.00628619, 0.536193 0.843995 -0.0129991, + 0.671614 0.740813 -0.0114231, 0.442746 0.896627 -0.00606392, 0.4006 0.916253 0, 0.23323 0.972422 0, + 0.787837 0.615844 -0.00700992, 0.827809 0.56095 -0.00823169, 0.766382 -0.642377 0.00325536, 0.79432 0.607318 -0.0148595, + 0.498922 -0.866636 0.00421923, 0.4994 -0.866372 0, 0.0580745 -0.998312 -0.000662675, 0.309917 -0.950764 2.70379e-005, + 0.25276 -0.967527 0.00211687, -0.243875 -0.969789 -0.00581572, 0.0115355 -0.999933 0.000447126, 0.177285 -0.984149 0.00447033, + -0.158237 -0.987381 0.00632381, -0.566322 -0.823901 -0.0215992, -0.365546 -0.930791 -0.00193425, + -0.429957 -0.902843 0.00346078, -0.706769 -0.70681 -0.029951, -0.813028 -0.581744 -0.0236564, -0.678721 -0.734378 0.00515725, + -0.919557 -0.392596 -0.0168392, -0.898154 -0.439616 -0.00756633, -0.993285 0.115654 0.00315703, + -0.999176 -0.0396063 -0.00888731, -0.997754 0.0669646 -0.00159633, -0.978113 -0.207996 -0.00566652, + -0.922737 -0.385402 -0.0045945, -0.974026 -0.226434 -0.0012348, -0.960322 0.27879 0.00761018, + -2.3812e-005 0.999429 -0.0337944, 0.000161779 0.992278 -0.124031, -3.34884e-006 0.998068 -0.0621356, + 0.000221492 0.999103 -0.0423371, 9.97141e-005 0.999832 -0.0183357, 3.36459e-005 0.999879 -0.0155824, + -1.15332e-005 0.999867 -0.0163103, -0.000111353 0.999934 -0.0115211, 0 0.999908 -0.0135654, 0.000291716 0.998942 -0.0459819, + 0 0.999855 -0.0170601, 0 1 0, 0.988347 0.128016 -0.0823507, 0.996991 0.0719258 -0.0289095, 0.956322 0.0807035 -0.280954, + 0.809531 0.157939 -0.565434, 0.757782 0.230095 -0.610592, 0.782853 0.330052 -0.527454, 0.929873 0.203496 0.306473, + 0.928998 0.202779 0.309587, 0.830994 0.535132 -0.151929, 0.854884 0.51012 -0.094612, 0.892896 0.435018 -0.116174, + 0.899703 0.3371 0.277306, 0.915555 0.272688 0.295635, 0.900413 0.340097 0.271276, 0.738127 0.671985 -0.0600433, + 0.789109 0.609008 -0.080109, 0.643607 0.764377 -0.0386854, 0.561601 0.826004 -0.0481949, 0.768206 0.636142 -0.0719867, + 0.782683 0.62122 -0.0386358, 0.833431 0.551703 -0.0318945, 0.254035 0.966429 -0.0384748, 0.371626 0.92714 -0.0480137, + 0.192886 0.980121 -0.0464418, 0.469938 0.881881 -0.0379977, 0.79355 0.607886 -0.0274404, 0.811869 0.582826 -0.0343886, + 0.785388 0.617949 -0.0361185, 0.722894 0.69042 -0.0272719, 0.929971 0.202278 0.306983, 0.562293 0.826245 -0.0338634, + 0.607182 0.794093 -0.0273161, 0.368731 0.928885 -0.0347903, 0.469959 0.882258 -0.0275408, 0.930738 0.20421 0.303356, + 0.317955 0.947698 -0.0277922, 0.177009 0.98383 -0.0273355, 0.115386 0.992634 -0.036926, 4.57574e-005 0.999411 -0.0343115, + 5.10741e-005 0.998843 -0.0480877, -0.110518 0.993221 -0.0360345, -0.192898 0.980122 -0.0463878, -0.24953 0.967596 -0.0386309, + -0.371688 0.927113 -0.0480521, 0.00735862 0.999577 -0.0281323, -0.363305 0.930966 -0.0362148, -0.300064 0.953499 -0.0283216, + -0.158318 0.986939 -0.0297706, -0.477579 0.877829 -0.0365261, -0.568899 0.821655 -0.0351649, -0.56179 0.825857 -0.0484977, + -0.637818 0.769215 -0.0386958, -0.796178 0.603985 -0.0361041, -0.711774 0.700885 -0.0462378, -0.843122 0.535903 -0.0441969, + -0.575026 0.817658 -0.0279305, -0.962333 0.269114 -0.0386337, -0.928318 0.368832 -0.0467859, -0.980038 0.193221 -0.0468145, + -0.900018 0.434226 -0.0376222, -0.994196 0.100274 -0.0389802, -0.995522 0.082177 -0.0467261, -0.436149 0.899433 -0.0281851, + 0.90289 0.340913 0.261854, -0.709982 0.703603 -0.0294785, -0.872497 0.487595 -0.0316191, -0.984203 0.174714 -0.0286255, + -0.942205 0.333802 -0.0287308, -0.805373 0.59176 -0.034571, -0.996865 0.0730921 -0.0302804, 0 0 -1, + -0.00108391 0.000448998 -0.999999, -0.00216783 0.000897997 -0.999997, -0.00433564 0.00179599 -0.999989, + 0.000863659 0.00035773 -1, 0.00215915 0.000894327 -0.999997, 0.00431829 0.00178865 -0.999989, -0.000109293 0.000291901 -1, + 0.000109421 0.000109539 -1, -0.000576821 -0.000253338 -1, -0.000377969 -0.000335954 -1, -0.00102936 -0.000544315 -0.999999, + -0.000792028 -0.226536 -0.974003, -0.00171638 -0.466325 -0.884612, -0.000564117 -0.355292 -0.934755, + -0.000237786 -0.693177 -0.720768, 0.000419958 -0.233883 -0.972265, 0.00130344 -0.445118 -0.895471, + 5.92997e-005 -0.698976 -0.715145, -0.000523494 -0.88422 -0.467071, -0.000185276 -0.785292 -0.619125, + -0.000299788 -0.91821 -0.396094, 0 -0.923788 -0.382905, 0 -0.970142 -0.242538, -0.000746197 -0.965947 -0.258739, + 0.905702 -0.423766 -0.0111888, 0.906121 -0.422966 -0.00660975, 0.905442 -0.424004 -0.0198672, 0.906191 -0.422679 0.0126278, + 0.906162 -0.422473 0.0196884, 0.905968 -0.423235 -0.00964199, 0.90493 -0.425552 -0.00261212, 0.897646 -0.437733 -0.0512024, + 0.902345 -0.430236 -0.0258914, 0.890706 -0.442926 -0.102268, 0.902772 -0.4296 -0.0211194, 0.905765 -0.422892 -0.0274214, + 0.92209 -0.383623 0.0508297, 0.89944 -0.437012 0.00526613, 0.925952 -0.375846 0.0367779, 0.882967 -0.469263 -0.0126854, + 0.828652 -0.555443 -0.0694282, 0.913678 -0.406156 0.0151437, 0.903711 -0.428059 -0.00846051, 0.895263 -0.443 -0.0474956, + -0.000283395 -0.0824877 -0.996592, -0.000286125 -0.160196 -0.987085, 4.04722e-005 -0.178406 -0.983957, 0 -0.160196 -0.987085, + 0.000283393 -0.0824877 -0.996592, 0.00044501 -0.0699133 -0.997553, 0.000342974 -0.22872 -0.973492, + -0.000271442 -0.160062 -0.987107, -0.000324908 -0.256792 -0.966467, 0.000363335 -0.317621 -0.948218, + 0.00012718 -0.258409 -0.966036, -0.000113751 -0.382817 -0.923824, -7.78158e-005 -0.382628 -0.923902, + -0.000149686 -0.383005 -0.923746, -0.906423 -0.422306 0.00735916, -0.90629 -0.422651 -0.00219956, + -0.906443 -0.422199 0.0104819, -0.884248 -0.466885 -0.0111743, -0.904189 -0.426908 0.0138264, -0.884389 -0.466115 -0.0243527, + -0.883593 -0.46755 -0.0256803, -0.897385 -0.441046 -0.0133799, -0.903983 -0.427513 0.00686976, -0.907578 -0.41983 -0.00672138, + -0.905494 -0.424249 -0.00963796, -0.903843 -0.426158 -0.0381692, -0.90595 -0.422644 -0.0250234, + -0.906189 -0.422867 0.00208622, -0.906372 -0.422416 -0.00737717, -0.906238 -0.422756 0.00305969, -0.905704 -0.42226 0.037366, + -0.0987174 0.273593 0.956766, -0.904872 -0.425679 -0.00212173, -0.904987 -0.42544 -0.000173749, -0.989184 -0.146679 0, 1 0 0, + 0.586492 -0.00320961 -0.809949, 0.320926 -0.00333034 -0.947099, 0.36418 0.00172867 -0.931327, 0.16982 -0.000918198 -0.985475, + 0.716324 2.5212e-007 -0.697768, 0.830345 -0.00173779 -0.557247, 0.537259 0.0073699 -0.843385, 0.830295 0.00173745 -0.557322, + 0.227927 0.00842541 -0.973642, 0.924767 1.49005e-006 -0.380533, 0.987042 0.000532694 -0.160463, 0.945779 0.000387394 -0.32481, + 0.983639 -0.000710153 -0.18015, 0.994874 0 -0.101123, 0.945812 -0.000388728 -0.324713, 0.906711 0.421581 0.0120456, + 0.906353 0.422403 -0.0100108, 0.906679 0.421818 -0.00161886, 0.876259 0.481407 -0.0204438, 0.828652 0.555443 -0.0694282, + 0.891855 0.452283 -0.00593682, 0.9128 0.408397 0.00271134, 0.907171 0.42054 -0.0136671, 0.899453 0.43604 -0.0292167, + 0.897005 0.441634 -0.0184555, 0.898133 0.439384 -0.0173119, 0.902956 0.428596 -0.0312332, 0.902175 0.430954 -0.0189268, + 0.905968 0.423235 -0.00964199, 0.90618 0.422845 0.00635837, 0.906469 0.422176 -0.00901257, 0.904126 0.421524 -0.0698071, + -0.845654 -0.422811 0.325729, 0.911356 0.411614 -0.00216748, 0.911375 0.411577 0.000316174, 0.92101 0.389539 0, + 0.000293391 0.0734354 -0.9973, 0.000387517 0.122194 -0.992506, 0.000102615 0.178206 -0.983993, 0.000202734 0.240611 -0.970622, + -0.000353578 0.122194 -0.992506, -0.000272995 0.0734354 -0.9973, -0.000157899 0.279562 -0.960128, + 0.000171957 0.291156 -0.956676, 0.000343033 0.307826 -0.951443, 0.000213052 0.102982 -0.994683, + 0.000195488 0.160285 -0.987071, -0.000141274 0.382043 -0.924145, -0.000149748 0.382087 -0.924126, + -0.0001328 0.381998 -0.924163, -0.000124627 0.508782 -0.860896, -4.21022e-005 0.627761 -0.778406, + 2.18613e-006 0.642657 -0.766154, 0.000344495 0.774795 -0.632212, 3.37345e-005 0.841101 -0.540878, + -6.96551e-005 0.52047 -0.85388, 0 0.652128 -0.758109, -0.000166637 0.787132 -0.616784, -0.000177707 0.935929 -0.352188, + -1.94031e-005 0.986009 -0.16669, -8.32551e-005 0.967805 -0.251702, 7.65535e-005 0.935973 -0.352073, + 4.77885e-005 0.992973 -0.118342, -0.906263 0.422568 0.0111122, -0.906162 0.422901 0.00500252, -0.905201 0.424645 -0.016976, + -0.906327 0.422564 0.00335833, -0.906135 0.422856 -0.0106121, -0.894721 0.441912 -0.0647117, -0.837258 0.482106 -0.258017, + -0.878837 0.459007 -0.130219, -0.905802 0.423603 0.00913603, -0.905978 0.423287 -0.00566346, -0.907375 0.420175 0.0111453, + -0.908743 0.416837 0.0208269, -0.89266 0.449883 -0.0276472, -0.878931 0.476128 -0.027975, -0.879283 0.475478 -0.0279627, + -0.878322 0.477727 -0.0180853, -0.89345 0.449162 0, -0.901274 0.433032 -0.0137375, -0.906611 0.421869 -0.0091267, + -0.905864 0.423562 -0.00210293, -0.00105257 0.187575 -0.98225, -0.000856671 0.449206 -0.893428, -0.0001222 0.333016 -0.942921, + -0.000140772 0.676893 -0.736082, 0.000547806 0.177351 -0.984147, 0.000217986 0.430291 -0.90269, 0 0.686157 -0.727453, + -0.000305955 0.884756 -0.466054, -8.19666e-005 0.764033 -0.645177, 0.000211483 0.923956 -0.382499, + 0.000362653 0.933388 -0.358868, 0.000552599 0.98163 -0.190792, 0.000312686 0.977709 -0.209966, + -0.600897 -0.00179834 -0.799325, -0.32851 -0.00081532 -0.9445, -0.384217 -0.00241255 -0.92324, -0.194412 -0.0011467 -0.980919, + -0.724703 0 -0.689061, -0.841836 -0.00102932 -0.539733, -0.552844 -0.0022724 -0.833281, -0.841836 0.00102932 -0.539733, + -0.252163 -0.00633449 -0.967664, -0.919973 -8.48639e-008 -0.391983, -0.983753 -9.72933e-005 -0.179527, + -0.943155 0.000470283 -0.332352, -0.977466 0.000129461 -0.211094, -0.996453 0 -0.0841537, -0.943148 -0.000470577 -0.332373, + -5.30333e-006 0.358162 -0.93366, 0.000419781 0.233891 -0.972263, 0.00130301 0.445111 -0.895475, + 9.09558e-005 0.688353 -0.725376, 5.93595e-005 0.698968 -0.715153, -0.000423861 0.233978 -0.972242, + -0.000695964 0.457126 -0.889402, -0.000105739 0.775843 -0.630926, -0.000523494 0.88422 -0.467071, + -0.000299788 0.91821 -0.396094, 0 0.923788 -0.382905, -0.000746197 0.965947 -0.258739, 0 0.970142 -0.242538, + 0.995543 0.0821742 -0.0462716, 0.979949 0.193889 -0.0459018, 0.994133 0.10112 -0.0383876, 0.928813 0.367683 -0.0459915, + 0.843552 0.535242 -0.0440098, 0.900335 0.433602 -0.03724, 0.962496 0.268631 -0.0379299, 0.984028 0.175779 -0.0281359, + 0.872935 0.486794 -0.0318795, 0.796762 0.603214 -0.0360956, 0.942662 0.332535 -0.028426, 0.711912 0.700823 -0.0450492, + 0.996865 0.0733108 -0.0297568, 0.561598 0.826177 -0.0451632, 0.636531 0.770336 -0.0375619, 0.477892 0.87771 -0.0352773, + 0.371334 0.927344 -0.0463021, 0.364685 0.930466 -0.0351764, -0.918762 0.200429 0.340153, -0.92341 0.202846 0.325834, + -0.919422 0.202918 0.336879, 0.568539 0.821922 -0.034741, 0.574552 0.817966 -0.0286526, 0.109616 0.993303 -0.0365299, + 0.190346 0.980601 -0.0467971, -6.27751e-005 0.998966 -0.0454739, 0.247566 0.968106 -0.0384902, -0.920066 0.205404 0.333599, + 0.709877 0.703733 -0.0288867, 0.805511 0.591562 -0.0347258, 0.436211 0.899431 -0.0272529, 0.301144 0.953187 -0.0273383, + -6.71704e-005 0.999372 -0.0354456, -0.00613008 0.999487 -0.0314282, 0.157093 0.987158 -0.0289919, + -0.113631 0.99278 -0.0384111, -0.174934 0.984156 -0.0289073, -0.252232 0.96688 -0.0390088, -0.190201 0.980629 -0.0467919, + -0.371361 0.927339 -0.0461819, -0.988661 0.129094 -0.0767068, -0.642449 0.765426 -0.0371878, -0.561772 0.826069 -0.044967, + -0.73875 0.670867 -0.0646922, -0.909975 0.269708 0.314964, -0.470647 0.881576 -0.0362568, -0.7702 0.63104 -0.092633, + -0.784004 0.618011 -0.0583077, -0.828684 0.534875 -0.164902, -0.832875 0.553371 -0.00993236, -0.796775 0.60081 -0.0646295, + -0.796496 0.603527 -0.0367354, -0.76528 0.321691 -0.55755, -0.88968 0.431071 -0.150491, -0.900091 0.33756 0.275482, + -0.901354 0.337993 0.270781, -0.799267 0.155987 -0.58038, -0.952645 0.0801022 -0.293344, -0.899683 0.336112 0.278566, + -0.750568 0.227855 -0.620266, -0.843949 0.524988 -0.110169, -0.996947 0.0718191 -0.0306547, -0.369762 0.928507 -0.0339274, + -0.318959 0.947374 -0.0273375, -0.562344 0.826255 -0.0327548, -0.470345 0.882063 -0.0272128, -0.606088 0.79493 -0.0272594, + -0.721802 0.691574 -0.0269705, -0.812567 0.581893 -0.0337066, -0.817863 0.574269 -0.0362653, -0.929349 0.367456 -0.0358784, + -0.881465 0.470686 -0.0383962, -0.813879 0.579928 -0.0358354, -0.981276 0.190556 -0.0280157, 4.31286e-005 0.999835 0.0181446, + 9.85177e-006 0.999805 0.0197332, -3.44033e-006 0.99986 0.016714, 0.0383023 0.997022 0.0669399, 0.0138009 0.997891 0.0634341, + 0.00929657 0.998891 0.046147, 0.00170633 0.999899 0.0140752, 3.07967e-005 0.999878 0.015642, 2.04427e-005 0.999866 0.0163674, + 0.00386464 0.999781 0.0205692, 0 0.999803 0.019853, 0.00157379 0.999818 0.0190212, 0.00772923 0.999744 0.0212851, + 2.64306e-005 0.999863 0.0165819, 1.4824e-005 0.999875 0.0157907, -0.01002 0.999713 0.0217384, 1.86418e-006 0.999878 0.0156159, + -2.97601e-005 0.999854 0.0171153, 0.000125931 0.999819 0.0190303, 9.02637e-005 0.999814 0.0192661, 0 0.999831 0.0183769, + -0.951643 0.307192 0.00300003, -0.916246 0.400616 0.000356431, -0.982928 0.183982 0.00184902, -0.987943 0.154466 0.0104763, + -0.995439 0.0954023 0, -0.788657 0.614828 0.00246956, -0.571629 0.820486 0.00655674, -0.777875 0.628416 0.00167174, + -0.25793 0.966164 -0.000300812, -0.469017 0.883186 0.00215398, -0.913864 0.405963 0.00676882, -0.350834 0.936432 -0.00310728, + 0.0122685 0.999924 -0.00111885, -0.679699 0.733465 0.00622161, 0.00105526 0.999999 0, 0.0471712 0.998752 -0.0164231, + 0.479867 0.87731 0.0073477, 0.312854 0.949761 0.00871258, 0.785087 0.619385 -0.000589521, 0.901687 0.416454 -0.116307, + 0.619893 0.784659 0.0065381, 0.680343 0.732856 0.00745421, 0.963668 0.259025 -0.0651905, 0.349849 0.936804 -0.00192644, + 0.916125 0.400818 0.0077464, 0.985853 0.167362 0.00910619, 0.994494 0.00697529 -0.104564, 0.742928 -0.66914 0.0175955, + 0.642545 -0.765964 0.0208502, 0.821095 -0.57078 0.00369587, 0.930758 -0.365625 -0.0026587, 0.971846 -0.235234 -0.0134269, + 0.979549 -0.201163 -0.00415234, 0.98109 -0.193551 -0.000995212, 0.907899 -0.419182 -0.00248196, 0.392269 -0.919189 0.0348937, + 0.108935 -0.994002 0.00961791, 0.392936 -0.919508 0.0102899, -0.0490209 -0.998518 0.0236224, -0.745717 -0.656383 -0.114313, + -0.61881 -0.726227 -0.299447, -0.63231 -0.769961 -0.0856971, -0.911094 -0.411861 0.0167075, -0.874132 -0.476117 -0.095947, + -0.986492 -0.163101 0.0152292, -0.979681 -0.19744 -0.0352604, -0.971597 -0.236383 -0.0110784, -0.41079 -0.91163 0.0134931, + -0.507547 -0.861524 0.0131337, -0.272195 -0.96222 -0.00649704, -0.666747 -0.744857 0.0252221, -0.77451 0.632555 0.00298352, + -0.618189 0.785978 0.00898869, -0.810248 0.586049 -0.00669555, -0.941066 0.338098 -0.00920855, -0.982863 0.184334 -0.0010724, + -0.925304 0.37911 0.0093809, -0.989973 0.140573 -0.0139028, -0.481504 0.876414 0.00721328, -0.313978 0.949382 0.00956929, + -0.0114896 0.999933 -0.000983553, -0.0461331 0.998799 -0.0165019, -0.679698 0.733465 0.00622166, 0.802445 0.596669 -0.0082361, + 0.813102 0.582117 0.00224134, 0.857215 0.514853 0.0104659, -0.985903 0.167074 0.00899626, 0.877508 0.479479 -0.0089131, + 0.802897 0.596062 -0.00813021, -0.350834 0.936432 -0.00310735, 0.819649 0.572863 0.00222022, 0.000988823 1 0, + 0.25793 0.966164 -0.000300812, 0.573072 0.819467 0.00784773, 0.469815 0.882762 0.00245911, 0.938253 0.345757 0.0115043, + 0.999507 -0.0224132 -0.0219973, 0.960663 0.277715 -0.000420723, 0.681621 0.731686 0.00532144, 0.349909 0.936781 -0.00199982, + 0.914968 0.403486 0.00572314, 0.985904 0.167073 0.00899645, 0.878332 -0.469844 -0.0881963, 0.97168 -0.236041 -0.0110236, + 0.986429 -0.163498 0.0150119, 0.912059 -0.409758 0.0156766, 0.644508 -0.714643 -0.271836, 0.755944 -0.646356 -0.103785, + 0.641529 -0.763223 -0.0770114, 0.503884 -0.86364 0.0150495, 0.669338 -0.742544 0.0248142, 0.407488 -0.913085 0.0151557, + 0.270154 -0.962791 -0.00713677, -0.816721 -0.576998 0.00638455, -0.738917 -0.673498 0.0200344, + -0.932328 -0.361578 -0.00512469, 0.0501437 -0.998459 0.0237741, -0.914814 -0.403858 -0.00382267, + -0.97959 -0.200956 -0.00437539, -0.978162 -0.207638 -0.00923015, -0.3942 -0.918339 0.0354972, -0.395304 -0.918499 0.00970473, + -0.108477 -0.99405 0.00989685, -0.977426 -0.211279 0, -0.641535 -0.766804 0.0210708, -0.975054 -0.221157 -0.0189682, + 0.46481 0.88003 0.0974642, 0.527121 0.844893 0.0911012, 0.472142 0.874744 0.109109, 0.541935 0.834969 0.0955722, + 0.63408 0.767024 0.0980664, 0.521714 0.849279 0.0808701, 0.657491 0.747418 0.0952447, 0.759913 0.642883 0.0960925, + 0.843595 0.528253 0.0964157, 0.826055 0.554592 0.100305, 0.950019 0.295776 0.0999027, 0.911919 0.398463 0.0981383, + 0.959959 0.262055 0.0990237, 0.900376 0.425767 0.0896976, 0.744733 0.661225 0.0903061, 0.987582 0.120924 0.1003, + 0.984007 0.154216 0.0891521, 0.994956 1.24503e-009 0.100308, 0.662569 0.745787 0.0693044, 0.843452 0.532725 0.0692281, + 0.958756 0.276513 0.0657761, 0.997898 0 0.0647973, 0.994927 0 0.100598, 0.984007 -0.154216 0.0891521, + 0.95995 -0.26209 0.0990225, 0.950011 -0.295796 0.0999202, 0.987582 -0.120924 0.1003, 0.958756 -0.276513 0.0657761, + 0.911899 -0.398494 0.0981952, 0.759933 -0.642855 0.0961227, 0.657491 -0.747418 0.0952447, 0.744733 -0.661225 0.0903061, + 0.541935 -0.834969 0.0955722, 0.623745 -0.7764 0.0902519, 0.46481 -0.88003 0.0974642, 0.51874 -0.851362 0.0780417, + 0.843606 -0.528219 0.0965039, 0.826064 -0.554572 0.100341, 0.900372 -0.425766 0.0897422, 0.501896 -0.860427 0.0881215, + 0.843452 -0.532725 0.0692281, 0.6847 -0.72503 0.0742779, 0.549385 -0.832412 0.0725613, 0.558716 -0.819233 0.129204, + 5.01005e-005 4.67905e-009 1, 2.50303e-005 6.58046e-006 1, 2.50304e-005 -7.1951e-006 1, 5.01015e-005 -2.90276e-007 1, + 0.000243583 0.000605323 1, 3.75754e-005 3.50929e-009 1, 3.76053e-005 -9.86367e-006 1, 0.00338261 0.00402059 0.999986, + 0.000422737 0.00113876 0.999999, 0.00507209 0.00609873 0.999969, -0.00410628 -0.00220333 0.999989, + 0.00173195 0.00287738 0.999994, 3.76066e-005 1.03572e-005 1, -0.00144817 -0.000957792 0.999999, + -0.00708287 -0.00402305 0.999967, -0.00542176 -0.00303842 0.999981, -0.00305531 -0.00170107 0.999994, + -0.462478 -0.881415 0.096031, -0.524634 -0.846543 0.0901346, -0.473852 -0.873647 0.110475, -0.541624 -0.835663 0.0911628, + -0.633268 -0.767615 0.0986855, -0.517661 -0.851948 0.0788071, -0.657371 -0.747673 0.0940673, -0.758409 -0.644796 0.095154, + -0.844621 -0.526438 0.0973572, -0.825645 -0.555365 0.0994038, -0.949435 -0.297416 0.100585, -0.911663 -0.398729 0.0994291, + -0.959548 -0.263293 0.0997254, -0.899985 -0.426322 0.0909718, -0.741788 -0.664532 0.090266, -0.987673 -0.120814 0.0995241, + -0.983847 -0.154563 0.0903122, -0.995008 0 0.0997944, -0.658081 -0.749494 0.0720264, -0.841616 -0.53543 0.0706998, + -0.95783 -0.278722 0.0698225, -0.997598 0 0.0692726, -0.994933 0 0.100538, -0.983847 0.154563 0.0903122, + -0.959548 0.263293 0.0997254, -0.949435 0.297416 0.100585, -0.987673 0.120814 0.0995241, -0.95783 0.278722 0.0698225, + -0.911663 0.398729 0.0994291, -0.758382 0.644824 0.0951814, -0.657345 0.747704 0.0939998, -0.741738 0.664591 0.0902434, + -0.541392 0.83582 0.0911001, -0.621104 0.7786 0.0895104, -0.461562 0.881915 0.0958483, -0.517431 0.85251 0.0741102, + -0.844636 0.526401 0.0974246, -0.825646 0.555362 0.0994039, -0.900002 0.426286 0.0909743, -0.502128 0.860372 0.0873283, + -0.841621 0.535428 0.0706511, -0.678189 0.730705 0.078294, -0.545836 0.834884 0.0709365, -0.557339 0.82048 0.127221, + 0.00218618 -0.00185339 0.999996, 0.00455203 -0.00383632 0.999982, 0.0184046 -0.0207543 0.999615, 0.0162187 -0.0189015 0.99969, + 0.0138527 -0.0169187 0.999761, 0.551843 -0.833943 0.00279656, 0.655772 -0.736116 0.167621, 0.515935 -0.842705 0.153814, + 0.656442 -0.736877 -0.161547, 0.516401 -0.843432 -0.148161, 0.893625 -0.448805 0.00294841, 0.90918 -0.288251 0.300504, + 0.814415 -0.526574 0.24382, 0.816196 -0.527475 -0.235784, 0.790282 -0.612743 0.00116357, 0.94892 -0.315517 0.000799593, + 0.91203 -0.289063 -0.290937, 0.9878 -0.155714 0.00183078, 0.960783 0 -0.277302, 0.958207 -1.9547e-009 0.286075, + 0.9878 0.155714 0.00183078, 0.90918 0.288251 0.300504, 0.94892 0.315517 0.000799597, 0.813184 0.524724 0.251788, + 0.893881 0.448295 0.00301643, 0.515345 0.842936 0.154528, 0.654961 0.735994 0.171286, 0.551465 0.834193 0.00280742, + 0.790726 0.612169 0.00131142, 0.91203 0.289063 -0.290937, 0.815065 0.525712 -0.243507, 0.655664 0.736779 -0.165108, + 0.515814 0.84367 -0.148852, 7.50716e-005 -1 0, -0.551469 0.834195 -0.000101796, -0.654369 0.733176 0.185078, + -0.511791 0.842643 0.167401, -0.654341 0.733144 -0.185302, -0.511772 0.842613 -0.167607, -0.894475 0.447119 -0.00010096, + -0.910746 0.289818 0.294188, -0.810769 0.520916 0.267021, -0.810698 0.520876 -0.267316, -0.79181 0.610768 -5.33706e-005, + -0.948469 0.316871 -1.73581e-005, -0.910653 0.289793 -0.294502, -0.987597 0.157013 -5.88105e-005, -0.957042 0 -0.289948, + -0.957132 0 0.289651, -0.987597 -0.157013 -5.88105e-005, -0.910475 -0.28959 0.295251, -0.948468 -0.316872 -0.000243298, + -0.810182 -0.520586 0.269437, -0.894474 -0.447119 0.000656096, -0.515597 -0.840907 0.164424, -0.655019 -0.732735 0.184524, + -0.553916 -0.83257 0.00218918, -0.791836 -0.610732 0.000949752, -0.910919 -0.290018 -0.293455, -0.811363 -0.521179 -0.264694, + -0.655531 -0.733329 -0.180301, -0.515911 -0.841569 -0.15999, -7.26476e-005 1 0, -0.00107782 0.000446304 -0.999999, + -0.00215564 0.000892608 -0.999997, -0.00431126 0.00178521 -0.999989, 0.000862001 0.000356908 -1, + 0.00215501 0.00089227 -0.999997, 0.00431 0.00178454 -0.999989, -0.000402159 -0.334687 -0.942329, + 0.000547871 -0.17734 -0.98415, 0.000562583 -0.437636 -0.899152, -0.000245497 -0.685869 -0.727725, + 0.00125229 -0.694567 -0.719427, -0.00122888 -0.191242 -0.981542, -0.00167702 -0.451438 -0.892301, + -0.000873789 -0.770641 -0.637268, 0.000244701 -0.889542 -0.456853, 2.2441e-005 -0.927867 -0.372911, + 0.000362414 -0.933382 -0.358884, 0.000312672 -0.977708 -0.209969, 0.000552287 -0.981628 -0.190804, + -6.96551e-005 -0.52047 -0.85388, 0 -0.622555 -0.782576, -6.51956e-005 -0.634217 -0.773155, -0.000166623 -0.787132 -0.616784, + -0.000140023 -0.849615 -0.527404, -0.000124618 -0.508781 -0.860896, -4.20956e-005 -0.62776 -0.778407, 0 -0.778306 -0.627886, + -0.000113344 -0.946618 -0.322358, 4.77882e-005 -0.992973 -0.118341, -8.3251e-005 -0.967805 -0.251702, + -0.000177691 -0.935929 -0.352188, -1.93944e-005 -0.98601 -0.166689, 0.950488 -0.310703 0.00603023, + 0.916814 -0.399291 0.00435255, 0.981141 -0.193214 0.00545831, 0.986235 -0.164978 0.0111221, 0.995439 -0.0954023 0, + 0.790941 -0.611882 0.00355315, 0.571629 -0.820486 0.00655674, 0.777875 -0.628416 0.00167174, 0.25793 -0.966164 -0.000300812, + 0.469017 -0.883186 0.00215398, 0.914978 -0.403442 0.00705435, 0.350834 -0.936432 -0.00310728, + -0.0120023 -0.999927 -0.00129346, 0.681526 -0.731764 0.00669944, 6.10834e-008 -1 0, -0.0471712 -0.998752 -0.0164231, + -0.48066 -0.876881 0.00675681, -0.312854 -0.949761 0.00871258, -0.785087 -0.619385 -0.000589521, + -0.901687 -0.416454 -0.116307, -0.619893 -0.784659 0.0065381, -0.681648 -0.731649 0.00673154, -0.963668 -0.259025 -0.0651905, + -0.350834 -0.936432 -0.00310735, -0.916125 -0.400818 0.0077464, -0.985853 -0.167362 0.00910619, -0.981749 -0.109583 -0.155439, + -0.744098 0.667846 0.0173219, -0.645241 0.763709 0.0203175, -0.818788 0.574059 0.00655113, -0.93281 0.360368 0.000317845, + -0.976358 0.21591 -0.0103974, -0.979549 0.201163 -0.00415234, -0.980622 0.195911 0, -0.98109 0.193551 -0.000995212, + -0.91361 0.40656 0.00496667, -0.393633 0.918629 0.0342537, -0.106952 0.994222 0.00911644, -0.394168 0.918988 0.00967683, + 0.0501934 0.998493 0.0221946, 0.747341 0.654731 -0.113174, 0.61881 0.726227 -0.299447, 0.63231 0.769961 -0.0856971, + 0.91342 0.406596 0.018536, 0.878434 0.46909 -0.0911528, 0.984689 0.173748 0.0141426, 0.979404 0.199755 -0.0294356, + 0.972013 0.234797 -0.00780584, 0.407604 0.913088 0.0113274, 0.50458 0.863281 0.0120549, 0.269337 0.963006 -0.0087884, + 0.668127 0.743602 0.025724, 0.77644 -0.63019 0.00154695, 0.621367 -0.783488 0.00700518, 0.812513 -0.582783 -0.0136706, + 0.939877 -0.341383 -0.00947526, 0.981881 -0.189498 0.000560698, 0.924228 -0.381641 0.0123732, 0.989973 -0.140573 -0.0139028, + 0.481504 -0.876414 0.00721328, 0.313978 -0.949382 0.00956929, 0.0114896 -0.999933 -0.000983553, + 0.0461331 -0.998799 -0.0165019, 0.681648 -0.731649 0.00673154, 0.985096 -0.171671 0.0107515, 0.350834 -0.936432 -0.00310735, + -0.878225 -0.478065 -0.0132367, -0.813974 -0.580901 0.000530903, -0.804286 -0.594119 -0.0121171, -0.000988823 -1 0, + -0.803593 -0.595054 -0.0122076, -0.858434 -0.512886 0.0062129, -0.25793 -0.966164 -0.000300812, + -0.571629 -0.820486 0.00655674, -0.46827 -0.883581 0.00270863, -0.819642 -0.572873 -0.00180757, + -0.939527 -0.342339 0.00959508, -0.988186 -0.153025 -0.00844445, -0.961615 -0.274403 -0.000366943, + -0.680302 -0.732895 0.00737723, -0.349909 -0.936781 -0.00199982, -0.916136 -0.400796 0.00754309, + -0.985904 -0.167073 0.00899645, -0.879006 0.467834 -0.0920863, -0.981071 0.19112 -0.0311961, -0.973536 0.228386 -0.00825158, + -0.986429 0.163498 0.0150119, -0.914288 0.404619 0.0189847, -0.61881 0.726227 -0.299447, -0.747341 0.654731 -0.113174, + -0.63231 0.769961 -0.0856971, -0.503884 0.86364 0.0150495, -0.667176 0.744421 0.0267039, -0.407488 0.913085 0.0151557, + -0.270154 0.962791 -0.00713677, 0.818788 0.574059 0.00655113, 0.744098 0.667846 0.0173219, 0.932175 0.362008 -0.000270676, + -0.0501437 0.998459 0.0237741, 0.91361 0.40656 0.00496667, 0.978648 0.205529 -0.00243844, 0.977872 0.209139 -0.00511434, + 0.3942 0.918339 0.0354972, 0.395304 0.918499 0.00970473, 0.108477 0.99405 0.00989685, 0.977426 0.211279 0, + 0.645241 0.763709 0.0203175, 0.976358 0.21591 -0.0103974] + } + coordIndex [ + 35, 34, 33, -1,35, 33, 32, -1,36, 32, 31, -1,32, 1737, 35, -1,30, 38, 37, -1,1739, + 36, 31, -1,37, 31, 30, -1,30, 29, 40, -1,1099, 29, 28, -1,42, 29, 1098, -1,40, 39, + 30, -1,42, 41, 29, -1,40, 29, 41, -1,28, 27, 1101, -1,30, 39, 38, -1,43, 42, 1098, -1, + 1742, 0, 45, -1,1742, 45, 44, -1,0, 1742, 1098, -1,1, 0, 1098, -1,1099, 1100, 2, -1, + 1100, 1099, 28, -1,1101, 1102, 3, -1,1102, 1101, 27, -1,1100, 28, 1101, -1,1100, + 1101, 3, -1,1, 1099, 2, -1,1102, 4, 3, -1,3, 2, 1100, -1,4, 1103, 5, -1,4, 1102, + 1103, -1,1102, 27, 1103, -1,1, 1098, 29, -1,29, 1099, 1, -1,27, 26, 1103, -1,32, + 36, 1736, -1,1104, 5, 1103, -1,1104, 26, 25, -1,1104, 25, 1105, -1,1098, 1741, 43, -1, + 1106, 25, 24, -1,1105, 1106, 6, -1,1106, 1105, 25, -1,1107, 1108, 8, -1,23, 1108, + 1107, -1,1106, 24, 1107, -1,1106, 1107, 7, -1,1107, 24, 23, -1,1104, 1105, 6, -1, + 23, 22, 1109, -1,1111, 22, 21, -1,31, 37, 1740, -1,1110, 22, 1111, -1,1109, 1110, + 10, -1,1109, 22, 1110, -1,1113, 20, 19, -1,32, 1736, 1738, -1,1114, 19, 18, -1,1112, + 21, 20, -1,1115, 18, 17, -1,1739, 31, 1740, -1,23, 1109, 1108, -1,1108, 1109, 9, -1, + 5, 1104, 6, -1,1107, 8, 7, -1,7, 6, 1106, -1,1111, 10, 1110, -1,8, 1108, 9, -1,11, + 10, 1111, -1,1109, 10, 9, -1,21, 11, 1111, -1,20, 13, 1112, -1,13, 20, 1113, -1,18, + 15, 1114, -1,15, 18, 1115, -1,19, 1114, 14, -1,19, 14, 1113, -1,13, 12, 1112, -1, + 15, 14, 1114, -1,16, 15, 1115, -1,13, 1113, 14, -1,1115, 17, 16, -1,1112, 12, 11, -1, + 21, 1112, 11, -1,1104, 1103, 26, -1,1098, 1742, 1741, -1,1738, 1737, 32, -1,1906, + 1116, 98, -1,1907, 1116, 1906, -1,98, 1116, 99, -1,1122, 1908, 1909, -1,1908, 1119, + 1907, -1,1125, 1909, 1910, -1,1907, 1119, 1116, -1,1128, 1910, 1911, -1,1119, 1122, + 1120, -1,1122, 1119, 1908, -1,1117, 99, 1116, -1,1117, 1119, 1120, -1,1117, 1120, + 1121, -1,99, 1117, 1118, -1,1122, 1123, 1120, -1,1117, 1116, 1119, -1,1125, 1128, + 1129, -1,1128, 1125, 1910, -1,1131, 1128, 1911, -1,1128, 1131, 1129, -1,1123, 1126, + 1127, -1,1126, 1123, 1125, -1,1129, 1126, 1125, -1,1126, 1129, 1130, -1,1129, 1131, + 1132, -1,1125, 1123, 1122, -1,1122, 1909, 1125, -1,1120, 1123, 1124, -1,1911, 1912, + 1131, -1,1913, 1137, 1914, -1,1134, 1912, 1914, -1,1913, 1915, 1137, -1,1140, 1915, + 1916, -1,1917, 1155, 1918, -1,1919, 1918, 1152, -1,1158, 1917, 97, -1,1143, 1916, + 1920, -1,1135, 1131, 1134, -1,1134, 1914, 1137, -1,1141, 1137, 1140, -1,1140, 1916, + 1143, -1,1143, 1920, 1146, -1,1144, 1140, 1143, -1,1915, 1140, 1137, -1,1138, 1134, + 1137, -1,1919, 1149, 1921, -1,1919, 1152, 1149, -1,1150, 1146, 1149, -1,1921, 1149, + 1146, -1,1156, 1152, 1155, -1,1152, 1918, 1155, -1,1155, 1917, 1158, -1,1159, 1155, + 1158, -1,97, 1161, 1158, -1,1153, 1149, 1152, -1,1920, 1921, 1146, -1,1147, 1143, + 1146, -1,97, 1164, 1161, -1,1912, 1134, 1131, -1,1159, 1158, 1161, -1,1118, 1121, + 47, -1,1118, 1117, 1121, -1,1124, 1127, 49, -1,1124, 1123, 1127, -1,1127, 1126, 1130, -1, + 1127, 1130, 50, -1,1120, 1124, 1121, -1,1121, 1124, 48, -1,1132, 1135, 1136, -1,1135, + 1132, 1131, -1,1132, 1136, 1133, -1,1136, 1135, 1138, -1,1136, 1138, 1139, -1,1133, + 1136, 52, -1,1135, 1134, 1138, -1,1132, 1133, 1130, -1,1129, 1132, 1130, -1,1130, + 1133, 51, -1,48, 47, 1121, -1,46, 1118, 47, -1,1133, 52, 51, -1,51, 50, 1130, -1, + 1136, 53, 52, -1,50, 49, 1127, -1,1139, 54, 53, -1,49, 48, 1124, -1,1136, 1139, 53, -1, + 1138, 1141, 1139, -1,1118, 46, 99, -1,1141, 1144, 1145, -1,1144, 1141, 1140, -1,1141, + 1145, 1142, -1,1145, 1144, 1147, -1,1145, 1147, 1148, -1,1142, 1145, 56, -1,1144, + 1143, 1147, -1,55, 1139, 1142, -1,1150, 1153, 1151, -1,1153, 1150, 1149, -1,1156, + 1153, 1152, -1,1151, 1153, 1154, -1,1150, 1151, 1148, -1,1156, 1157, 1153, -1,1160, + 1156, 1159, -1,1148, 1151, 58, -1,1156, 1155, 1159, -1,1150, 1148, 1147, -1,1147, + 1146, 1150, -1,1145, 1148, 57, -1,58, 57, 1148, -1,1142, 56, 55, -1,56, 1145, 57, -1, + 1139, 55, 54, -1,1154, 1157, 60, -1,1157, 1154, 1153, -1,1160, 1157, 1156, -1,1157, + 1160, 61, -1,60, 59, 1154, -1,61, 60, 1157, -1,61, 1160, 62, -1,59, 58, 1151, -1, + 1154, 59, 1151, -1,1160, 1159, 1162, -1,1142, 1139, 1141, -1,1138, 1137, 1141, -1, + 1162, 1159, 1161, -1,96, 95, 1167, -1,1164, 1167, 1168, -1,1167, 1164, 96, -1,1170, + 1167, 95, -1,1167, 1170, 1171, -1,95, 94, 1170, -1,1164, 1162, 1161, -1,1176, 1173, + 93, -1,93, 1173, 94, -1,92, 1176, 93, -1,92, 91, 1179, -1,94, 1173, 1170, -1,1170, + 1173, 1174, -1,1162, 1165, 1166, -1,1162, 1164, 1165, -1,1168, 1171, 1172, -1,1168, + 1167, 1171, -1,1171, 1170, 1174, -1,1171, 1174, 1175, -1,1164, 1168, 1165, -1,1165, + 1168, 1169, -1,1176, 1179, 1180, -1,1179, 1176, 92, -1,1182, 1179, 91, -1,1179, 1182, + 1183, -1,1177, 1180, 1181, -1,1180, 1177, 1176, -1,1183, 1180, 1179, -1,1180, 1183, + 1184, -1,1182, 1185, 1183, -1,1176, 1177, 1174, -1,1173, 1176, 1174, -1,1174, 1177, + 1178, -1,91, 90, 1182, -1,1164, 97, 96, -1,89, 1185, 90, -1,87, 1188, 88, -1,1185, + 89, 88, -1,1191, 87, 86, -1,1197, 85, 84, -1,1200, 84, 83, -1,82, 1203, 83, -1,1194, + 86, 85, -1,1185, 1188, 1186, -1,1185, 88, 1188, -1,1191, 1192, 1188, -1,1188, 1189, + 1186, -1,1191, 86, 1194, -1,1194, 1195, 1191, -1,87, 1191, 1188, -1,1186, 1183, 1185, -1, + 84, 1200, 1197, -1,1197, 1194, 85, -1,83, 1203, 1200, -1,1201, 1197, 1200, -1,1207, + 1203, 1206, -1,1203, 82, 1206, -1,80, 1206, 81, -1,1200, 1203, 1204, -1,1198, 1194, + 1197, -1,82, 81, 1206, -1,1207, 1206, 80, -1,1185, 1182, 90, -1,1183, 1186, 1187, -1, + 1163, 1166, 62, -1,1163, 1162, 1166, -1,1169, 1172, 64, -1,1169, 1168, 1172, -1,1172, + 1171, 1175, -1,1172, 1175, 65, -1,1165, 1169, 1166, -1,1166, 1169, 63, -1,1177, 1181, + 1178, -1,1178, 1175, 1174, -1,1181, 1184, 68, -1,1181, 1180, 1184, -1,1184, 1183, + 1187, -1,1184, 1187, 69, -1,1189, 1190, 1187, -1,1178, 1181, 67, -1,1189, 1187, 1186, -1, + 1175, 1178, 66, -1,62, 1166, 63, -1,65, 64, 1172, -1,65, 1175, 66, -1,63, 1169, 64, -1, + 1181, 68, 67, -1,67, 66, 1178, -1,1184, 69, 68, -1,70, 69, 1187, -1,1187, 71, 70, -1, + 1190, 72, 71, -1,71, 1187, 1190, -1,1189, 1192, 1190, -1,1163, 62, 1160, -1,1192, + 1195, 1196, -1,1195, 1192, 1191, -1,1192, 1196, 1193, -1,1196, 1195, 1198, -1,1196, + 1198, 1199, -1,1193, 1196, 73, -1,1195, 1194, 1198, -1,1193, 72, 1190, -1,1201, 1204, + 1202, -1,1204, 1201, 1200, -1,1207, 1204, 1203, -1,1202, 1204, 1205, -1,1201, 1202, + 1199, -1,1207, 1208, 1204, -1,1208, 1207, 79, -1,1199, 1202, 75, -1,1207, 80, 79, -1, + 1201, 1199, 1198, -1,1198, 1197, 1201, -1,1196, 1199, 74, -1,74, 73, 1196, -1,75, + 1202, 76, -1,74, 1199, 75, -1,73, 72, 1193, -1,77, 1205, 1208, -1,1208, 1205, 1204, -1, + 78, 1208, 79, -1,77, 1208, 78, -1,1205, 77, 76, -1,1202, 1205, 76, -1,1193, 1190, + 1192, -1,1189, 1188, 1192, -1,1162, 1163, 1160, -1,1922, 1923, 1743, -1,1743, 1923, + 1209, -1,1210, 1923, 1924, -1,1210, 1212, 1213, -1,1923, 1210, 1744, -1,1924, 1212, + 1210, -1,1744, 1209, 1923, -1,1924, 1925, 1212, -1,1925, 1926, 1215, -1,1927, 1928, + 1220, -1,1926, 1927, 1218, -1,1215, 1218, 1219, -1,1215, 1926, 1218, -1,1928, 1223, + 1220, -1,1220, 1218, 1927, -1,1223, 1226, 1224, -1,1220, 1223, 1224, -1,1223, 1928, + 1929, -1,1218, 1220, 1221, -1,1925, 1215, 1212, -1,1212, 1215, 1216, -1,1744, 100, + 1209, -1,1213, 1745, 1211, -1,1744, 1210, 1211, -1,1213, 1211, 1210, -1,1213, 1214, + 1745, -1,1216, 102, 1213, -1,111, 110, 1216, -1,1219, 112, 111, -1,111, 1216, 1219, -1, + 110, 1217, 1216, -1,1216, 1213, 1212, -1,115, 114, 1219, -1,1216, 1215, 1219, -1, + 1225, 1221, 1224, -1,130, 1227, 131, -1,1218, 1221, 1219, -1,1224, 1227, 129, -1, + 113, 1219, 114, -1,1219, 1221, 115, -1,1227, 130, 129, -1,131, 1227, 132, -1,1219, + 113, 112, -1,1220, 1224, 1221, -1,128, 1224, 129, -1,1226, 1223, 1929, -1,1930, 1931, + 1226, -1,1931, 1932, 1228, -1,1231, 1932, 1933, -1,1226, 1227, 1224, -1,1227, 1226, + 1228, -1,1227, 1228, 1229, -1,1231, 1228, 1932, -1,1234, 1231, 1933, -1,1232, 1228, + 1231, -1,1226, 1931, 1228, -1,1234, 1235, 1231, -1,1933, 1934, 1234, -1,1930, 1226, + 1929, -1,1934, 1935, 1236, -1,1936, 1937, 1242, -1,1935, 1936, 1239, -1,1237, 1234, + 1236, -1,1236, 1935, 1239, -1,1937, 1244, 1242, -1,1242, 1239, 1936, -1,1245, 1244, + 1247, -1,1243, 1239, 1242, -1,1244, 1937, 1938, -1,1240, 1236, 1239, -1,1934, 1236, + 1234, -1,1245, 1242, 1244, -1,1232, 1233, 1229, -1,1232, 1229, 1228, -1,197, 1235, + 198, -1,1232, 1235, 196, -1,1232, 1231, 1235, -1,197, 196, 1235, -1,1232, 195, 194, -1, + 1229, 134, 1227, -1,199, 198, 1235, -1,1232, 196, 195, -1,199, 1235, 200, -1,1227, + 134, 133, -1,1241, 1237, 1240, -1,1240, 1237, 1236, -1,1243, 1245, 216, -1,1245, + 1243, 1242, -1,1240, 1239, 1243, -1,1240, 1243, 212, -1,213, 212, 1243, -1,215, 214, + 1243, -1,216, 215, 1243, -1,213, 1243, 214, -1,1245, 217, 216, -1,200, 1235, 1237, -1, + 1235, 1234, 1237, -1,1240, 212, 211, -1,1246, 1245, 1248, -1,1227, 133, 132, -1,1213, + 102, 1214, -1,102, 1216, 1217, -1,1211, 1745, 101, -1,103, 102, 1217, -1,108, 1217, + 109, -1,110, 109, 1217, -1,1217, 108, 103, -1,1225, 122, 1222, -1,1225, 1222, 1221, -1, + 128, 1225, 1224, -1,127, 1225, 128, -1,1221, 116, 115, -1,1225, 127, 126, -1,121, + 117, 116, -1,121, 116, 1222, -1,1222, 116, 1221, -1,107, 106, 104, -1,119, 118, 121, -1, + 103, 107, 104, -1,105, 104, 106, -1,120, 119, 121, -1,117, 121, 118, -1,107, 103, + 108, -1,125, 122, 1225, -1,125, 124, 122, -1,122, 124, 123, -1,137, 136, 138, -1, + 138, 136, 135, -1,135, 139, 138, -1,121, 1222, 122, -1,125, 1225, 126, -1,134, 141, + 135, -1,1233, 142, 1230, -1,1233, 1230, 1229, -1,194, 1233, 1232, -1,193, 1233, 194, -1, + 1233, 193, 142, -1,201, 200, 1238, -1,143, 202, 201, -1,192, 142, 193, -1,143, 1238, + 1241, -1,1241, 1238, 1237, -1,217, 1245, 1246, -1,1240, 211, 1241, -1,211, 210, 1241, -1, + 218, 217, 1246, -1,219, 218, 1246, -1,210, 209, 1241, -1,1246, 145, 219, -1,143, + 201, 1238, -1,1237, 1238, 200, -1,135, 140, 139, -1,192, 191, 142, -1,141, 140, 135, -1, + 142, 141, 1230, -1,142, 206, 205, -1,206, 142, 191, -1,204, 203, 143, -1,205, 204, + 143, -1,142, 205, 143, -1,209, 208, 144, -1,221, 220, 145, -1,1241, 144, 143, -1, + 221, 144, 222, -1,144, 221, 145, -1,222, 144, 207, -1,208, 207, 144, -1,220, 219, + 145, -1,143, 203, 202, -1,1241, 209, 144, -1,145, 1246, 1249, -1,134, 1230, 141, -1, + 1229, 1230, 134, -1,1211, 101, 1744, -1,1247, 1244, 1938, -1,100, 1743, 1209, -1, + 1247, 1938, 1250, -1,1250, 1938, 1939, -1,1253, 1939, 1940, -1,1255, 1940, 1941, -1, + 1251, 1248, 1250, -1,1250, 1248, 1247, -1,1254, 1250, 1253, -1,1255, 1253, 1940, -1, + 1250, 1939, 1253, -1,1255, 1256, 1253, -1,1941, 1258, 1255, -1,1247, 1248, 1245, -1, + 1261, 1942, 1943, -1,1943, 1944, 1263, -1,1945, 1266, 1944, -1,1259, 1255, 1258, -1, + 1258, 1942, 1261, -1,1944, 1266, 1263, -1,1263, 1261, 1943, -1,1269, 1267, 1266, -1, + 1264, 1261, 1263, -1,1269, 1266, 1945, -1,1262, 1258, 1261, -1,1942, 1258, 1941, -1, + 1267, 1263, 1266, -1,1251, 1254, 230, -1,1254, 1251, 1250, -1,234, 1256, 235, -1, + 1259, 1256, 1255, -1,1254, 1253, 1256, -1,1254, 1256, 234, -1,231, 230, 1254, -1, + 233, 232, 1254, -1,234, 233, 1254, -1,231, 1254, 232, -1,1260, 1256, 1259, -1,1248, + 1251, 1252, -1,1262, 249, 248, -1,250, 249, 1262, -1,250, 1262, 1264, -1,1267, 1264, + 1263, -1,1262, 1261, 1264, -1,252, 251, 1264, -1,248, 247, 1262, -1,1264, 251, 250, -1, + 1267, 1268, 1264, -1,247, 246, 1262, -1,1270, 157, 1267, -1,1259, 1262, 246, -1,1259, + 1258, 1262, -1,157, 1270, 158, -1,1269, 1945, 1946, -1,229, 1251, 230, -1,1271, 1947, + 1948, -1,1274, 1948, 1949, -1,1277, 1949, 1950, -1,1269, 1271, 1272, -1,1271, 1269, + 1947, -1,1274, 1277, 1278, -1,1277, 1274, 1949, -1,1279, 1277, 1950, -1,1277, 1279, + 1280, -1,1271, 1948, 1274, -1,1271, 1274, 1275, -1,1950, 1951, 1279, -1,1947, 1269, + 1946, -1,1951, 1952, 1282, -1,1953, 1748, 1954, -1,1952, 1954, 1285, -1,1282, 1285, + 1286, -1,1282, 1952, 1285, -1,1747, 1954, 1287, -1,1747, 1286, 1285, -1,1287, 1954, + 1748, -1,1287, 190, 1747, -1,1951, 1282, 1279, -1,1279, 1282, 1283, -1,1270, 1272, + 162, -1,1270, 1269, 1272, -1,176, 1275, 1278, -1,1275, 1274, 1278, -1,1271, 1275, + 1272, -1,162, 1272, 163, -1,160, 159, 1270, -1,1270, 162, 161, -1,161, 160, 1270, -1, + 1272, 1275, 1276, -1,1278, 178, 177, -1,1270, 159, 158, -1,180, 1280, 181, -1,1280, + 1279, 1283, -1,1286, 1283, 1282, -1,1278, 1277, 1280, -1,1286, 189, 1746, -1,1278, + 179, 178, -1,180, 179, 1278, -1,188, 1280, 1283, -1,1286, 1746, 1283, -1,1747, 189, + 1286, -1,1287, 1748, 190, -1,1278, 1280, 180, -1,1747, 1285, 1954, -1,1269, 1270, + 1267, -1,1278, 177, 176, -1,1252, 227, 145, -1,1249, 1248, 1252, -1,1256, 1257, 235, -1, + 1251, 229, 1252, -1,228, 227, 1252, -1,236, 235, 1257, -1,228, 1252, 229, -1,236, + 1257, 237, -1,227, 226, 145, -1,1259, 246, 1260, -1,148, 253, 1265, -1,1265, 1264, + 1268, -1,1265, 252, 1264, -1,246, 245, 1260, -1,253, 252, 1265, -1,148, 254, 253, -1, + 147, 1260, 245, -1,1265, 1268, 148, -1,147, 1257, 1260, -1,1256, 1260, 1257, -1,238, + 237, 146, -1,147, 245, 244, -1,1257, 147, 146, -1,225, 224, 146, -1,238, 146, 223, -1, + 237, 1257, 146, -1,223, 146, 224, -1,146, 145, 225, -1,244, 243, 147, -1,225, 145, + 226, -1,239, 254, 148, -1,156, 150, 149, -1,150, 155, 151, -1,243, 242, 147, -1,241, + 240, 148, -1,148, 240, 239, -1,241, 148, 147, -1,242, 241, 147, -1,149, 148, 1268, -1, + 156, 149, 1268, -1,1252, 145, 1249, -1,163, 1273, 164, -1,1273, 1272, 1276, -1,1273, + 163, 1272, -1,169, 165, 1273, -1,157, 156, 1268, -1,1273, 165, 164, -1,175, 174, + 1276, -1,1273, 1276, 170, -1,1275, 175, 1276, -1,157, 1268, 1267, -1,1280, 188, 1281, -1, + 1281, 181, 1280, -1,188, 1283, 1284, -1,182, 181, 1281, -1,1281, 187, 182, -1,1283, + 1746, 1284, -1,188, 1284, 1746, -1,175, 1275, 176, -1,1281, 188, 187, -1,155, 154, + 152, -1,167, 166, 169, -1,170, 169, 1273, -1,152, 154, 153, -1,169, 166, 165, -1, + 169, 168, 167, -1,152, 151, 155, -1,173, 170, 1276, -1,173, 172, 170, -1,183, 186, + 184, -1,186, 183, 187, -1,184, 186, 185, -1,183, 182, 187, -1,172, 171, 170, -1,173, + 1276, 174, -1,155, 150, 156, -1,1248, 1249, 1246, -1,102, 1745, 1214, -1,260, 1751, + 1955, -1,1956, 263, 1749, -1,1957, 1749, 262, -1,1955, 1750, 260, -1,263, 262, 1749, -1, + 261, 1750, 1958, -1,1959, 1751, 259, -1,260, 1750, 261, -1,262, 261, 1958, -1,1958, + 1957, 262, -1,1751, 260, 259, -1,1288, 1960, 257, -1,1753, 258, 257, -1,1288, 1961, + 1960, -1,1289, 1962, 1961, -1,1961, 1288, 256, -1,259, 258, 1752, -1,1752, 1959, + 259, -1,258, 1753, 1754, -1,1963, 1752, 258, -1,255, 1289, 256, -1,1288, 257, 256, -1, + 1962, 1289, 255, -1,1754, 1963, 258, -1,1961, 256, 1289, -1,1753, 257, 1960, -1,1964, + 1965, 1290, -1,1965, 271, 1290, -1,1966, 1967, 1292, -1,1290, 1291, 1964, -1,1967, + 1964, 1291, -1,1968, 1966, 1292, -1,1755, 265, 264, -1,1756, 264, 1969, -1,270, 1290, + 271, -1,269, 1292, 1291, -1,1967, 1291, 1292, -1,1292, 269, 268, -1,1293, 1292, 268, -1, + 270, 269, 1291, -1,1291, 1290, 270, -1,264, 1757, 1970, -1,1293, 1968, 1292, -1,1294, + 1971, 1972, -1,1972, 266, 1294, -1,1293, 266, 1972, -1,265, 1971, 1294, -1,1968, + 1293, 1972, -1,1970, 1755, 264, -1,1973, 1756, 1969, -1,266, 1293, 267, -1,265, 1755, + 1971, -1,266, 265, 1294, -1,1757, 264, 1756, -1,268, 267, 1293, -1,1974, 1975, 1976, -1, + 1977, 1978, 1974, -1,1974, 1976, 1979, -1,1980, 1975, 1981, -1,1976, 1975, 1980, -1, + 1982, 1983, 1976, -1,1978, 1977, 1984, -1,1976, 1983, 1979, -1,1985, 1986, 1979, -1, + 1986, 1985, 1987, -1,1988, 1982, 1989, -1,1988, 1983, 1982, -1,1983, 1985, 1979, -1, + 1977, 1974, 1979, -1,278, 1759, 1990, -1,1991, 277, 1992, -1,1758, 1993, 279, -1, + 280, 1993, 1994, -1,1990, 1758, 278, -1,280, 279, 1993, -1,1995, 1760, 1295, -1,279, + 278, 1758, -1,1759, 278, 277, -1,1991, 1759, 277, -1,277, 276, 1992, -1,1295, 1996, + 1995, -1,275, 1295, 1760, -1,1760, 276, 275, -1,1296, 1996, 1295, -1,1297, 1997, + 1998, -1,1996, 1296, 1998, -1,1760, 1992, 276, -1,274, 1296, 1295, -1,274, 1295, + 275, -1,274, 273, 1296, -1,272, 1297, 273, -1,1296, 273, 1297, -1,1997, 1297, 272, -1, + 1297, 1998, 1296, -1,1999, 2000, 1298, -1,2000, 288, 1298, -1,2001, 1999, 1299, -1, + 1299, 2002, 2001, -1,1999, 1298, 1299, -1,2003, 2002, 1300, -1,1762, 2004, 283, -1, + 287, 1298, 288, -1,1761, 282, 2005, -1,286, 1300, 1299, -1,2002, 1299, 1300, -1,1300, + 286, 285, -1,285, 2003, 1300, -1,287, 286, 1299, -1,1299, 1298, 287, -1,285, 1301, + 2003, -1,2004, 1301, 284, -1,2003, 1301, 2004, -1,283, 282, 1761, -1,2006, 2007, + 1764, -1,1764, 281, 2006, -1,2008, 1763, 281, -1,283, 2004, 284, -1,282, 1763, 2005, -1, + 1761, 1762, 283, -1,1764, 2008, 281, -1,285, 284, 1301, -1,1763, 282, 281, -1,2009, + 2010, 2011, -1,2012, 2009, 2013, -1,2013, 2014, 2012, -1,2013, 2009, 2011, -1,2015, + 2016, 2017, -1,2018, 2013, 2015, -1,2019, 2020, 2012, -1,2012, 2014, 2019, -1,2013, + 2018, 2014, -1,2021, 2014, 2022, -1,2017, 2018, 2015, -1,2014, 2018, 2022, -1,2021, + 2022, 2023, -1,2020, 2019, 2024, -1,297, 1765, 2025, -1,295, 1767, 2026, -1,295, + 2026, 1766, -1,1767, 294, 1768, -1,1302, 2027, 2028, -1,294, 293, 2028, -1,296, 1766, + 2029, -1,1765, 297, 296, -1,1766, 296, 295, -1,1767, 295, 294, -1,2029, 1765, 296, -1, + 293, 1302, 2028, -1,1304, 2030, 1303, -1,292, 1303, 2027, -1,2030, 2027, 1303, -1, + 2031, 2030, 1304, -1,2032, 2031, 1304, -1,2033, 2032, 1305, -1,1302, 293, 292, -1, + 291, 1304, 1303, -1,1768, 294, 2028, -1,291, 1303, 292, -1,291, 290, 1304, -1,289, + 1305, 290, -1,1304, 290, 1305, -1,2033, 1305, 289, -1,1305, 2032, 1304, -1,2027, + 1302, 292, -1,2034, 2033, 1306, -1,2033, 305, 1306, -1,1307, 2035, 2034, -1,2036, + 2035, 1308, -1,1307, 1308, 2035, -1,1306, 1307, 2034, -1,304, 1307, 1306, -1,304, + 1306, 305, -1,2036, 1308, 1769, -1,302, 1769, 1308, -1,1308, 303, 302, -1,1769, 302, + 301, -1,1307, 304, 303, -1,303, 1308, 1307, -1,299, 2037, 1770, -1,1770, 300, 299, -1, + 300, 2038, 2039, -1,1771, 299, 298, -1,300, 2039, 301, -1,299, 1771, 2037, -1,2038, + 300, 1770, -1,2040, 2041, 2042, -1,298, 2041, 2040, -1,298, 2040, 1771, -1,2039, + 1769, 301, -1,2043, 2044, 2045, -1,2046, 2047, 2043, -1,2043, 2045, 2048, -1,2049, + 2044, 2050, -1,2045, 2044, 2049, -1,2051, 2052, 2045, -1,2047, 2046, 2053, -1,2045, + 2052, 2048, -1,2054, 2055, 2048, -1,2055, 2054, 2056, -1,2057, 2051, 2058, -1,2057, + 2052, 2051, -1,2052, 2054, 2048, -1,2046, 2043, 2048, -1,2059, 1773, 313, -1,1309, + 2060, 2061, -1,2061, 312, 1309, -1,1309, 311, 2060, -1,1310, 2062, 2060, -1,1774, + 312, 2061, -1,311, 1310, 2060, -1,1772, 314, 313, -1,2063, 314, 1772, -1,1774, 313, + 312, -1,313, 1774, 2059, -1,312, 311, 1309, -1,311, 310, 1310, -1,1772, 313, 1773, -1, + 1311, 2064, 2065, -1,1310, 309, 1311, -1,2065, 2062, 1311, -1,1312, 2064, 1311, -1, + 2066, 2064, 1312, -1,2067, 2066, 1313, -1,1310, 310, 309, -1,308, 1312, 1311, -1, + 308, 1311, 309, -1,308, 307, 1312, -1,306, 1313, 307, -1,1312, 307, 1313, -1,2067, + 1313, 306, -1,1313, 2066, 1312, -1,1311, 2062, 1310, -1,2068, 2067, 1314, -1,2067, + 322, 1314, -1,1315, 2069, 2068, -1,1775, 2069, 320, -1,1315, 320, 2069, -1,321, 2068, + 1314, -1,1315, 2068, 321, -1,1776, 319, 2070, -1,321, 1314, 322, -1,319, 1777, 2070, -1, + 1775, 319, 1776, -1,320, 319, 1775, -1,319, 318, 1777, -1,1315, 321, 320, -1,1778, + 318, 317, -1,2071, 2072, 1780, -1,2073, 318, 1778, -1,317, 2074, 1778, -1,1779, 2074, + 317, -1,1779, 317, 316, -1,316, 315, 2075, -1,315, 2076, 2075, -1,2071, 1780, 315, -1, + 315, 1780, 2076, -1,1779, 316, 2075, -1,2073, 1777, 318, -1,2077, 2078, 2079, -1, + 2080, 2081, 2077, -1,2077, 2079, 2082, -1,2083, 2078, 2084, -1,2079, 2078, 2083, -1, + 2085, 2086, 2079, -1,2081, 2080, 2087, -1,2079, 2086, 2082, -1,2088, 2089, 2082, -1, + 2089, 2088, 2090, -1,2091, 2085, 2092, -1,2091, 2086, 2085, -1,2086, 2088, 2082, -1, + 2080, 2077, 2082, -1,323, 2093, 324, -1,1781, 2094, 2095, -1,2093, 2096, 2097, -1, + 2096, 1781, 2098, -1,328, 327, 326, -1,329, 328, 326, -1,2099, 325, 324, -1,2100, + 326, 325, -1,330, 329, 326, -1,2093, 2101, 324, -1,2098, 2097, 2096, -1,2102, 326, + 2100, -1,2101, 2099, 324, -1,2097, 2101, 2093, -1,331, 330, 326, -1,331, 2102, 2103, -1, + 326, 2102, 331, -1,2104, 332, 331, -1,2103, 2104, 331, -1,2100, 325, 2099, -1,2098, + 1781, 2095, -1,334, 333, 344, -1,340, 339, 2105, -1,338, 337, 2105, -1,339, 338, + 2105, -1,336, 2105, 337, -1,334, 344, 341, -1,344, 343, 342, -1,342, 341, 344, -1, + 341, 2106, 334, -1,335, 2105, 336, -1,2105, 335, 2106, -1,335, 334, 2106, -1,341, + 2107, 2106, -1,386, 385, 1316, -1,384, 383, 1318, -1,385, 384, 1317, -1,346, 385, + 1317, -1,385, 346, 1316, -1,348, 383, 1319, -1,383, 348, 1318, -1,347, 1317, 384, -1, + 347, 384, 1318, -1,383, 382, 1319, -1,386, 1316, 345, -1,382, 381, 1320, -1,1322, + 380, 1323, -1,381, 380, 1322, -1,1320, 1321, 351, -1,1320, 381, 1321, -1,1325, 379, + 378, -1,1322, 1321, 381, -1,380, 379, 1324, -1,1321, 1322, 351, -1,1319, 382, 350, -1, + 350, 382, 1320, -1,372, 367, 1782, -1,345, 1316, 346, -1,366, 372, 1783, -1,347, + 1318, 348, -1,1317, 347, 346, -1,367, 371, 1784, -1,349, 1319, 350, -1,371, 368, + 1785, -1,351, 1322, 352, -1,1320, 351, 350, -1,1319, 349, 348, -1,1782, 1783, 372, -1, + 1323, 1324, 353, -1,1324, 1323, 380, -1,1325, 1326, 355, -1,1326, 1325, 378, -1,1324, + 379, 1325, -1,1324, 1325, 354, -1,1784, 371, 1786, -1,353, 1324, 354, -1,355, 1327, + 356, -1,355, 354, 1325, -1,1327, 355, 1326, -1,1785, 1786, 371, -1,1326, 378, 1327, -1, + 1323, 353, 352, -1,1322, 1323, 352, -1,378, 377, 1327, -1,1328, 377, 376, -1,1332, + 375, 374, -1,1330, 376, 375, -1,362, 374, 363, -1,364, 373, 365, -1,373, 364, 363, -1, + 374, 373, 363, -1,374, 362, 2108, -1,365, 373, 366, -1,366, 373, 372, -1,367, 372, + 371, -1,368, 371, 370, -1,369, 368, 370, -1,1328, 1329, 357, -1,1328, 376, 1329, -1, + 1330, 1331, 358, -1,1330, 375, 1331, -1,376, 1330, 1329, -1,1329, 1330, 358, -1,357, + 356, 1328, -1,359, 358, 1331, -1,357, 1329, 358, -1,1331, 1332, 359, -1,356, 1327, + 1328, -1,374, 360, 1332, -1,374, 1333, 360, -1,1333, 2108, 2109, -1,1331, 375, 1332, -1, + 1333, 361, 360, -1,361, 1333, 2109, -1,1332, 360, 359, -1,2108, 1333, 374, -1,1328, + 1327, 377, -1,435, 1334, 436, -1,434, 1334, 435, -1,436, 1334, 437, -1,1340, 433, + 432, -1,433, 1337, 434, -1,1343, 432, 431, -1,434, 1337, 1334, -1,1346, 431, 430, -1, + 1337, 1340, 1338, -1,1340, 1337, 433, -1,1335, 437, 1334, -1,1335, 1337, 1338, -1, + 1335, 1338, 1339, -1,437, 1335, 1336, -1,1340, 1341, 1338, -1,1335, 1334, 1337, -1, + 1343, 1346, 1347, -1,1346, 1343, 431, -1,1349, 1346, 430, -1,1346, 1349, 1347, -1, + 1341, 1344, 1345, -1,1344, 1341, 1343, -1,1347, 1344, 1343, -1,1344, 1347, 1348, -1, + 1347, 1349, 1350, -1,1343, 1341, 1340, -1,1340, 432, 1343, -1,1338, 1341, 1342, -1, + 430, 429, 1349, -1,427, 1355, 428, -1,1352, 429, 428, -1,427, 426, 1355, -1,1358, + 426, 425, -1,420, 1373, 421, -1,422, 421, 1370, -1,1376, 420, 2110, -1,1361, 425, + 424, -1,1353, 1349, 1352, -1,1352, 428, 1355, -1,1359, 1355, 1358, -1,1358, 425, + 1361, -1,1361, 424, 1364, -1,1362, 1358, 1361, -1,426, 1358, 1355, -1,1356, 1352, + 1355, -1,422, 1367, 423, -1,422, 1370, 1367, -1,1368, 1364, 1367, -1,423, 1367, 1364, -1, + 1374, 1370, 1373, -1,1370, 421, 1373, -1,1373, 420, 1376, -1,1377, 1373, 1376, -1, + 2110, 1379, 1376, -1,1371, 1367, 1370, -1,424, 423, 1364, -1,1365, 1361, 1364, -1, + 2110, 1382, 1379, -1,429, 1352, 1349, -1,1377, 1376, 1379, -1,1336, 1339, 388, -1, + 1336, 1335, 1339, -1,1342, 1345, 390, -1,1342, 1341, 1345, -1,1345, 1344, 1348, -1, + 1345, 1348, 391, -1,1338, 1342, 1339, -1,1339, 1342, 389, -1,1350, 1353, 1354, -1, + 1353, 1350, 1349, -1,1350, 1354, 1351, -1,1354, 1353, 1356, -1,1354, 1356, 1357, -1, + 1351, 1354, 393, -1,1353, 1352, 1356, -1,1350, 1351, 1348, -1,1347, 1350, 1348, -1, + 1348, 1351, 392, -1,389, 388, 1339, -1,387, 1336, 388, -1,1351, 393, 392, -1,392, + 391, 1348, -1,1354, 394, 393, -1,391, 390, 1345, -1,1357, 395, 394, -1,390, 389, + 1342, -1,1354, 1357, 394, -1,1356, 1359, 1357, -1,1336, 387, 437, -1,1359, 1362, + 1363, -1,1362, 1359, 1358, -1,1359, 1363, 1360, -1,1363, 1362, 1365, -1,1363, 1365, + 1366, -1,1360, 1363, 397, -1,1362, 1361, 1365, -1,396, 1357, 1360, -1,1368, 1371, + 1369, -1,1371, 1368, 1367, -1,1374, 1371, 1370, -1,1369, 1371, 1372, -1,1368, 1369, + 1366, -1,1374, 1375, 1371, -1,1378, 1374, 1377, -1,1366, 1369, 399, -1,1374, 1373, + 1377, -1,1368, 1366, 1365, -1,1365, 1364, 1368, -1,1363, 1366, 398, -1,399, 398, + 1366, -1,1360, 397, 396, -1,397, 1363, 398, -1,1357, 396, 395, -1,1372, 1375, 401, -1, + 1375, 1372, 1371, -1,1378, 1375, 1374, -1,1375, 1378, 402, -1,401, 400, 1372, -1, + 402, 401, 1375, -1,402, 1378, 403, -1,400, 399, 1369, -1,1372, 400, 1369, -1,1378, + 1377, 1380, -1,1360, 1357, 1359, -1,1356, 1355, 1359, -1,1380, 1377, 1379, -1,2111, + 2112, 1385, -1,1382, 1385, 1386, -1,1385, 1382, 2111, -1,1388, 1385, 2112, -1,1385, + 1388, 1389, -1,2112, 2113, 1388, -1,1382, 1380, 1379, -1,1394, 1391, 2114, -1,2114, + 1391, 2113, -1,2115, 1394, 2114, -1,2115, 2116, 1397, -1,2113, 1391, 1388, -1,1388, + 1391, 1392, -1,1380, 1383, 1384, -1,1380, 1382, 1383, -1,1386, 1389, 1390, -1,1386, + 1385, 1389, -1,1389, 1388, 1392, -1,1389, 1392, 1393, -1,1382, 1386, 1383, -1,1383, + 1386, 1387, -1,1394, 1397, 1398, -1,1397, 1394, 2115, -1,1400, 1397, 2116, -1,1397, + 1400, 1401, -1,1395, 1398, 1399, -1,1398, 1395, 1394, -1,1401, 1398, 1397, -1,1398, + 1401, 1402, -1,1400, 1403, 1401, -1,1394, 1395, 1392, -1,1391, 1394, 1392, -1,1392, + 1395, 1396, -1,2116, 2117, 1400, -1,1382, 2110, 2111, -1,2118, 1403, 2117, -1,2119, + 1406, 2120, -1,1403, 2118, 2120, -1,1409, 2119, 2121, -1,1415, 2122, 2123, -1,1418, + 2123, 2124, -1,2125, 1421, 2124, -1,1412, 2121, 2122, -1,1403, 1406, 1404, -1,1403, + 2120, 1406, -1,1409, 1410, 1406, -1,1406, 1407, 1404, -1,1409, 2121, 1412, -1,1412, + 1413, 1409, -1,2119, 1409, 1406, -1,1404, 1401, 1403, -1,2123, 1418, 1415, -1,1415, + 1412, 2122, -1,2124, 1421, 1418, -1,1419, 1415, 1418, -1,1425, 1421, 1424, -1,1421, + 2125, 1424, -1,2126, 1424, 2127, -1,1418, 1421, 1422, -1,1416, 1412, 1415, -1,2125, + 2127, 1424, -1,1425, 1424, 2126, -1,1403, 1400, 2117, -1,1401, 1404, 1405, -1,1381, + 1384, 403, -1,1381, 1380, 1384, -1,1387, 1390, 405, -1,1387, 1386, 1390, -1,1390, + 1389, 1393, -1,1390, 1393, 406, -1,1383, 1387, 1384, -1,1384, 1387, 404, -1,1395, + 1399, 1396, -1,1396, 1393, 1392, -1,1399, 1402, 409, -1,1399, 1398, 1402, -1,1402, + 1401, 1405, -1,1402, 1405, 410, -1,1407, 1408, 1405, -1,1396, 1399, 408, -1,1407, + 1405, 1404, -1,1393, 1396, 407, -1,403, 1384, 404, -1,1393, 407, 406, -1,1390, 406, + 405, -1,404, 1387, 405, -1,1399, 409, 408, -1,408, 407, 1396, -1,1402, 410, 409, -1, + 411, 410, 1405, -1,1405, 412, 411, -1,1408, 413, 412, -1,412, 1405, 1408, -1,1407, + 1410, 1408, -1,1381, 403, 1378, -1,1410, 1413, 1414, -1,1413, 1410, 1409, -1,1410, + 1414, 1411, -1,1414, 1413, 1416, -1,1414, 1416, 1417, -1,1411, 1414, 414, -1,1413, + 1412, 1416, -1,1411, 413, 1408, -1,1419, 1422, 1420, -1,1422, 1419, 1418, -1,1425, + 1422, 1421, -1,1420, 1422, 1423, -1,1419, 1420, 1417, -1,1425, 1426, 1422, -1,1426, + 1425, 2128, -1,1417, 1420, 416, -1,1425, 2126, 2128, -1,1419, 1417, 1416, -1,1416, + 1415, 1419, -1,1414, 1417, 415, -1,415, 414, 1414, -1,416, 1420, 417, -1,415, 1417, + 416, -1,414, 413, 1411, -1,418, 1423, 1426, -1,1426, 1423, 1422, -1,419, 1426, 2128, -1, + 418, 1426, 419, -1,1423, 418, 417, -1,1420, 1423, 417, -1,1411, 1408, 1410, -1,1407, + 1406, 1410, -1,1380, 1381, 1378, -1,438, 2129, 2130, -1,1428, 2130, 2131, -1,2130, + 439, 438, -1,1427, 439, 2130, -1,439, 1427, 440, -1,1787, 1788, 2130, -1,1428, 2131, + 473, -1,1432, 2132, 2133, -1,1438, 2134, 2135, -1,2134, 1435, 2133, -1,2135, 2136, + 478, -1,461, 2132, 1432, -1,2132, 477, 1430, -1,492, 2134, 1438, -1,1435, 2134, 1436, -1, + 2135, 494, 1438, -1,1440, 478, 2136, -1,1433, 1432, 2133, -1,463, 1432, 1433, -1, + 2136, 1443, 1440, -1,2132, 1430, 2131, -1,475, 2131, 1430, -1,474, 2131, 475, -1, + 477, 2132, 460, -1,460, 2132, 461, -1,476, 1430, 1796, -1,1427, 1788, 440, -1,1428, + 441, 1787, -1,474, 473, 2131, -1,473, 1429, 1428, -1,1432, 462, 461, -1,475, 1430, + 476, -1,492, 491, 2134, -1,495, 494, 2135, -1,479, 478, 1440, -1,2135, 478, 495, -1, + 2133, 1435, 1436, -1,1441, 481, 480, -1,1432, 463, 462, -1,2134, 491, 1436, -1,479, + 1440, 480, -1,493, 492, 1438, -1,493, 1438, 494, -1,1441, 480, 1440, -1,2137, 2138, + 1443, -1,1448, 2139, 2140, -1,2138, 513, 1446, -1,1451, 2140, 2141, -1,512, 511, + 1446, -1,510, 1443, 2138, -1,1446, 513, 512, -1,2138, 2139, 513, -1,2140, 1449, 1448, -1, + 498, 2139, 1448, -1,511, 2138, 1446, -1,1448, 1449, 499, -1,1451, 2141, 527, -1,2137, + 1443, 2136, -1,531, 1454, 2142, -1,2142, 1454, 2141, -1,1456, 2142, 2143, -1,1459, + 2143, 2144, -1,1462, 2144, 2145, -1,1456, 515, 2142, -1,2142, 514, 531, -1,2144, + 1462, 1463, -1,2144, 1460, 1459, -1,2145, 547, 1462, -1,1457, 517, 1456, -1,1457, + 1456, 2143, -1,548, 1465, 549, -1,529, 2141, 1454, -1,531, 530, 1454, -1,528, 527, + 2141, -1,497, 2139, 498, -1,513, 2139, 496, -1,510, 509, 1443, -1,1448, 499, 498, -1, + 2140, 1451, 1452, -1,1444, 1443, 509, -1,496, 2139, 497, -1,511, 510, 2138, -1,2141, + 529, 528, -1,546, 1462, 547, -1,547, 2145, 548, -1,514, 2142, 515, -1,515, 1456, + 516, -1,1456, 517, 516, -1,1459, 1460, 2143, -1,545, 1462, 546, -1,1454, 530, 529, -1, + 527, 1452, 1451, -1,1444, 1440, 1443, -1,1462, 545, 1463, -1,473, 442, 1789, -1,473, + 472, 442, -1,464, 463, 1433, -1,1436, 1433, 2133, -1,464, 1433, 1434, -1,442, 472, + 471, -1,1434, 465, 464, -1,443, 466, 465, -1,1437, 1433, 1436, -1,1431, 471, 470, -1, + 1441, 1442, 482, -1,1444, 1441, 1440, -1,509, 508, 1445, -1,482, 1442, 483, -1,481, + 1441, 482, -1,1441, 1444, 1445, -1,491, 1437, 1436, -1,445, 484, 483, -1,1439, 490, + 489, -1,509, 1445, 1444, -1,1437, 491, 490, -1,488, 1439, 489, -1,468, 1431, 469, -1, + 1429, 1790, 441, -1,1431, 470, 469, -1,443, 468, 467, -1,468, 443, 1431, -1,467, + 466, 443, -1,443, 1434, 444, -1,1431, 443, 442, -1,1431, 442, 471, -1,1434, 443, + 465, -1,490, 444, 1437, -1,490, 1439, 444, -1,487, 1439, 488, -1,445, 487, 486, -1, + 1439, 487, 445, -1,1433, 1437, 1434, -1,445, 486, 485, -1,444, 1439, 445, -1,1442, + 1445, 446, -1,445, 483, 1442, -1,1447, 446, 1445, -1,1442, 446, 445, -1,484, 445, + 485, -1,1441, 1445, 1442, -1,1437, 444, 1434, -1,2130, 1788, 1427, -1,1445, 508, + 1447, -1,441, 1428, 1429, -1,500, 499, 1449, -1,526, 1453, 527, -1,1449, 1450, 500, -1, + 1449, 2140, 1452, -1,527, 1453, 1452, -1,501, 500, 1450, -1,1452, 448, 1449, -1,501, + 447, 502, -1,526, 525, 1455, -1,1458, 519, 518, -1,1463, 1464, 1460, -1,1463, 1460, + 2144, -1,1464, 545, 544, -1,1457, 1458, 518, -1,1457, 2143, 1460, -1,545, 1464, 1463, -1, + 1461, 1457, 1460, -1,544, 543, 1464, -1,449, 520, 519, -1,543, 542, 451, -1,517, + 1457, 518, -1,524, 1455, 525, -1,506, 1447, 507, -1,1447, 506, 505, -1,1447, 504, + 447, -1,505, 504, 1447, -1,1453, 448, 1452, -1,447, 504, 503, -1,447, 1450, 448, -1, + 447, 503, 502, -1,448, 1453, 1455, -1,448, 1450, 1449, -1,1455, 1453, 526, -1,448, + 1455, 449, -1,501, 1450, 447, -1,1447, 447, 446, -1,1455, 522, 449, -1,519, 1458, + 449, -1,1457, 1461, 1458, -1,522, 521, 449, -1,1455, 524, 523, -1,449, 521, 520, -1, + 1458, 450, 449, -1,450, 1458, 1461, -1,450, 1464, 451, -1,1464, 450, 1461, -1,1464, + 543, 451, -1,1460, 1464, 1461, -1,1789, 1790, 1429, -1,451, 541, 1466, -1,522, 1455, + 523, -1,542, 541, 451, -1,507, 1447, 508, -1,473, 1789, 1429, -1,1465, 548, 2145, -1, + 1428, 1787, 2130, -1,1465, 2145, 532, -1,2145, 2146, 1467, -1,1470, 2146, 2147, -1, + 1473, 2147, 2148, -1,532, 2145, 533, -1,2145, 1467, 533, -1,2147, 1473, 1474, -1, + 2147, 1471, 1470, -1,2148, 565, 1473, -1,2146, 1471, 1468, -1,1468, 1467, 2146, -1, + 565, 2148, 566, -1,2148, 567, 566, -1,2149, 551, 1476, -1,1476, 567, 2148, -1,1481, + 2150, 2151, -1,2149, 2150, 1478, -1,585, 584, 2151, -1,2149, 1478, 553, -1,1476, + 550, 567, -1,1481, 2151, 582, -1,2152, 585, 2151, -1,585, 2152, 1484, -1,1481, 1482, + 2150, -1,1479, 1478, 2150, -1,2152, 569, 1484, -1,1476, 2148, 2149, -1,584, 583, + 2151, -1,534, 533, 1467, -1,1473, 565, 564, -1,550, 1476, 551, -1,1468, 535, 1467, -1, + 1471, 2146, 1470, -1,535, 534, 1467, -1,1473, 563, 1474, -1,563, 1473, 564, -1,1469, + 535, 1468, -1,1481, 582, 581, -1,568, 585, 1484, -1,569, 568, 1484, -1,551, 2149, + 552, -1,2149, 553, 552, -1,553, 1478, 1479, -1,1486, 571, 570, -1,581, 1482, 1481, -1, + 569, 2152, 570, -1,582, 2151, 583, -1,570, 2152, 1486, -1,532, 549, 1465, -1,2153, + 2154, 1486, -1,1492, 2155, 2156, -1,621, 1500, 1797, -1,2154, 602, 1489, -1,1494, + 2156, 2157, -1,1490, 1486, 1489, -1,1489, 1486, 2154, -1,1495, 589, 2156, -1,2156, + 588, 1492, -1,2157, 1495, 1494, -1,1497, 1498, 2157, -1,2155, 602, 2154, -1,586, + 2155, 1492, -1,2157, 2158, 1497, -1,2153, 1486, 2152, -1,1500, 2158, 2159, -1,1430, + 477, 1796, -1,2160, 2161, 2162, -1,2163, 1795, 1504, -1,2161, 1795, 1794, -1,2159, + 2161, 1502, -1,607, 2159, 1502, -1,605, 1500, 2159, -1,1502, 2161, 1794, -1,2161, + 2160, 2164, -1,1504, 2161, 2164, -1,1795, 2161, 1504, -1,1497, 2158, 619, -1,621, + 2158, 1500, -1,602, 601, 1489, -1,603, 2155, 586, -1,588, 587, 1492, -1,2155, 603, + 602, -1,1489, 600, 1490, -1,2156, 589, 588, -1,1494, 1495, 2156, -1,1497, 617, 1498, -1, + 1490, 600, 599, -1,586, 1492, 587, -1,601, 600, 1489, -1,620, 2158, 621, -1,1500, + 605, 604, -1,604, 1797, 1500, -1,2159, 606, 605, -1,2158, 620, 619, -1,1497, 618, + 617, -1,607, 606, 2159, -1,1503, 607, 1502, -1,1504, 2164, 2163, -1,1497, 619, 618, -1, + 571, 1486, 1487, -1,1469, 537, 536, -1,1469, 1468, 1471, -1,563, 562, 1474, -1,1475, + 1471, 1474, -1,1471, 2147, 1474, -1,1474, 562, 1475, -1,537, 1469, 451, -1,560, 453, + 561, -1,535, 1469, 536, -1,562, 561, 1475, -1,1477, 555, 554, -1,581, 580, 1482, -1, + 454, 1479, 1482, -1,1479, 2150, 1482, -1,1482, 580, 1483, -1,554, 553, 1480, -1,580, + 579, 1483, -1,574, 573, 1485, -1,579, 578, 455, -1,555, 1477, 556, -1,1479, 1480, + 553, -1,540, 1466, 541, -1,1466, 540, 539, -1,1471, 1472, 1469, -1,559, 453, 560, -1, + 451, 539, 538, -1,453, 559, 558, -1,452, 451, 1469, -1,452, 1469, 1472, -1,1475, + 453, 452, -1,1472, 1471, 1475, -1,1475, 561, 453, -1,1475, 452, 1472, -1,451, 538, + 537, -1,1791, 1501, 609, -1,558, 1477, 453, -1,1466, 539, 451, -1,557, 1477, 558, -1, + 1477, 557, 556, -1,576, 575, 1485, -1,554, 1480, 1477, -1,455, 577, 576, -1,1480, + 454, 1477, -1,1480, 1479, 454, -1,455, 1483, 579, -1,455, 576, 1485, -1,455, 1485, + 456, -1,1483, 455, 454, -1,1483, 454, 1482, -1,575, 574, 1485, -1,1477, 454, 453, -1, + 578, 577, 455, -1,573, 572, 1485, -1,1488, 572, 571, -1,599, 598, 1490, -1,1491, + 1487, 1490, -1,1487, 1486, 1490, -1,1490, 598, 1491, -1,597, 1491, 598, -1,1493, + 591, 590, -1,1493, 592, 591, -1,596, 457, 597, -1,1499, 1495, 1498, -1,1498, 1495, + 2157, -1,1503, 1792, 607, -1,617, 616, 1498, -1,1498, 616, 1499, -1,609, 608, 1791, -1, + 1501, 610, 609, -1,616, 615, 1499, -1,1502, 2165, 1503, -1,1496, 590, 589, -1,1495, + 1496, 589, -1,1488, 1491, 456, -1,1488, 1487, 1491, -1,457, 595, 594, -1,597, 457, + 1491, -1,595, 457, 596, -1,457, 594, 593, -1,456, 1491, 457, -1,590, 458, 1493, -1, + 1493, 593, 592, -1,458, 1496, 1499, -1,1493, 458, 457, -1,593, 1493, 457, -1,1793, + 1792, 1503, -1,458, 590, 1496, -1,456, 1485, 1488, -1,614, 613, 459, -1,1501, 612, + 611, -1,1791, 608, 607, -1,613, 612, 459, -1,1499, 459, 458, -1,615, 459, 1499, -1, + 1501, 1791, 459, -1,1501, 611, 610, -1,612, 1501, 459, -1,1499, 1496, 1495, -1,615, + 614, 459, -1,1503, 2165, 1793, -1,1488, 1485, 572, -1,1487, 1488, 571, -1,607, 1792, + 1791, -1,1502, 1794, 2165, -1,1505, 2166, 2167, -1,633, 2166, 1505, -1,2168, 1507, + 1508, -1,2168, 1508, 2169, -1,2170, 1506, 631, -1,2166, 1506, 2170, -1,2168, 2170, + 1507, -1,1507, 2170, 631, -1,1509, 2169, 1508, -1,1506, 2166, 632, -1,2171, 1798, + 635, -1,636, 2172, 2173, -1,635, 1798, 636, -1,1798, 2172, 636, -1,1799, 2171, 635, -1, + 1799, 635, 634, -1,633, 1505, 2167, -1,1507, 630, 1508, -1,633, 632, 2166, -1,634, + 633, 2167, -1,1800, 634, 2167, -1,631, 1506, 632, -1,630, 1507, 631, -1,629, 1508, + 630, -1,1800, 1799, 634, -1,2174, 2169, 1509, -1,2175, 2176, 1510, -1,2177, 2175, + 1511, -1,629, 1510, 1509, -1,2176, 1509, 1510, -1,2175, 1510, 1511, -1,628, 1511, + 1510, -1,627, 2177, 1511, -1,2174, 1509, 2176, -1,2178, 1512, 626, -1,2177, 1512, + 2178, -1,2178, 1513, 2179, -1,1513, 2178, 625, -1,1512, 2177, 627, -1,629, 628, 1510, -1, + 2179, 1513, 625, -1,628, 627, 1511, -1,1802, 2179, 624, -1,626, 1512, 627, -1,625, + 2178, 626, -1,2180, 1803, 622, -1,625, 624, 2179, -1,623, 1801, 624, -1,2181, 623, + 1803, -1,622, 1803, 623, -1,2180, 622, 2182, -1,1802, 624, 1801, -1,1508, 629, 1509, -1, + 2181, 1801, 623, -1,2183, 2184, 2185, -1,2184, 2186, 2185, -1,2184, 2187, 2186, -1, + 2184, 2183, 2188, -1,2188, 2189, 2184, -1,2190, 2184, 2189, -1,2191, 2184, 2190, -1, + 2192, 2187, 2184, -1,2193, 2184, 2191, -1,2184, 2194, 2195, -1,2194, 2184, 2196, -1, + 2197, 2184, 2193, -1,2198, 2199, 2184, -1,2184, 2197, 2198, -1,2196, 2184, 2199, -1, + 2182, 2192, 2184, -1,1514, 2200, 2201, -1,648, 2200, 1514, -1,2202, 1516, 1517, -1, + 2202, 1517, 2203, -1,2204, 1515, 646, -1,2200, 1515, 2204, -1,2202, 2204, 1516, -1, + 1516, 2204, 646, -1,1518, 2203, 1517, -1,1515, 2200, 647, -1,2205, 1804, 650, -1, + 651, 2206, 2207, -1,650, 1804, 651, -1,1804, 2206, 651, -1,1805, 2205, 650, -1,1805, + 650, 649, -1,648, 1514, 2201, -1,1516, 645, 1517, -1,648, 647, 2200, -1,649, 648, + 2201, -1,1806, 649, 2201, -1,646, 1515, 647, -1,645, 1516, 646, -1,644, 1517, 645, -1, + 1806, 1805, 649, -1,2208, 2203, 1518, -1,2209, 2210, 1519, -1,2211, 2209, 1520, -1, + 644, 1519, 1518, -1,2210, 1518, 1519, -1,2209, 1519, 1520, -1,643, 1520, 1519, -1, + 642, 2211, 1520, -1,2208, 1518, 2210, -1,2212, 1521, 641, -1,2211, 1521, 2212, -1, + 2212, 1522, 2213, -1,1522, 2212, 640, -1,1521, 2211, 642, -1,644, 643, 1519, -1,2213, + 1522, 640, -1,643, 642, 1520, -1,1808, 2213, 639, -1,641, 1521, 642, -1,640, 2212, + 641, -1,2214, 1809, 637, -1,640, 639, 2213, -1,638, 1807, 639, -1,2215, 638, 1809, -1, + 637, 1809, 638, -1,2214, 637, 2216, -1,1808, 639, 1807, -1,1517, 644, 1518, -1,2215, + 1807, 638, -1,2217, 2218, 2219, -1,2218, 2217, 2216, -1,2220, 2217, 2219, -1,2221, + 2217, 2220, -1,2222, 2223, 2224, -1,2217, 2221, 2224, -1,2225, 2222, 2226, -1,2217, + 2224, 2223, -1,2217, 2227, 2228, -1,2227, 2217, 2229, -1,2217, 2230, 2229, -1,2231, + 2226, 2232, -1,2226, 2231, 2225, -1,2225, 2223, 2222, -1,2217, 2223, 2230, -1,2228, + 2233, 2217, -1,1523, 2234, 2235, -1,663, 2234, 1523, -1,2236, 1525, 1526, -1,2236, + 1526, 2237, -1,2238, 1524, 661, -1,2234, 1524, 2238, -1,2236, 2238, 1525, -1,1525, + 2238, 661, -1,1527, 2237, 1526, -1,1524, 2234, 662, -1,2239, 1810, 665, -1,666, 2240, + 2241, -1,665, 1810, 666, -1,1810, 2240, 666, -1,1811, 2239, 665, -1,1811, 665, 664, -1, + 663, 1523, 2235, -1,1525, 660, 1526, -1,663, 662, 2234, -1,664, 663, 2235, -1,1812, + 664, 2235, -1,661, 1524, 662, -1,660, 1525, 661, -1,659, 1526, 660, -1,1812, 1811, + 664, -1,2242, 2237, 1527, -1,2243, 2244, 1528, -1,2245, 2243, 1529, -1,659, 1528, + 1527, -1,2244, 1527, 1528, -1,2243, 1528, 1529, -1,658, 1529, 1528, -1,657, 2245, + 1529, -1,2242, 1527, 2244, -1,2246, 1530, 656, -1,2245, 1530, 2246, -1,2246, 1531, + 2247, -1,1531, 2246, 655, -1,1530, 2245, 657, -1,659, 658, 1528, -1,2247, 1531, 655, -1, + 658, 657, 1529, -1,1814, 2247, 654, -1,656, 1530, 657, -1,655, 2246, 656, -1,2248, + 1815, 652, -1,655, 654, 2247, -1,653, 1813, 654, -1,2249, 653, 1815, -1,652, 1815, + 653, -1,2248, 652, 2250, -1,1814, 654, 1813, -1,1526, 659, 1527, -1,2249, 1813, 653, -1, + 2251, 2250, 2252, -1,2253, 2251, 2252, -1,2251, 2254, 2255, -1,2256, 2251, 2253, -1, + 2251, 2256, 2257, -1,2257, 2258, 2251, -1,2258, 2254, 2251, -1,2259, 2260, 2251, -1, + 2261, 2251, 2262, -1,2263, 2262, 2251, -1,2264, 2263, 2251, -1,2255, 2265, 2251, -1, + 2251, 2266, 2267, -1,2266, 2251, 2265, -1,2267, 2264, 2251, -1,2261, 2259, 2251, -1, + 1532, 2268, 2269, -1,679, 2268, 1532, -1,2270, 1534, 1535, -1,2270, 1535, 2271, -1, + 2272, 1533, 677, -1,2268, 1533, 2272, -1,2270, 2272, 1534, -1,1534, 2272, 677, -1, + 1536, 2271, 1535, -1,1533, 2268, 678, -1,2273, 1816, 681, -1,682, 2274, 683, -1,681, + 1816, 682, -1,1816, 2274, 682, -1,1817, 2273, 681, -1,1817, 681, 680, -1,679, 1532, + 2269, -1,1534, 676, 1535, -1,679, 678, 2268, -1,680, 679, 2269, -1,1818, 680, 2269, -1, + 677, 1533, 678, -1,676, 1534, 677, -1,675, 1535, 676, -1,1818, 1817, 680, -1,2275, + 2271, 1536, -1,2276, 2277, 1537, -1,2278, 2276, 1538, -1,675, 1537, 1536, -1,2277, + 1536, 1537, -1,2276, 1537, 1538, -1,674, 1538, 1537, -1,673, 2278, 1538, -1,2275, + 1536, 2277, -1,2279, 1539, 672, -1,2278, 1539, 2279, -1,2279, 1540, 2280, -1,1540, + 2279, 671, -1,1539, 2278, 673, -1,675, 674, 1537, -1,2280, 1540, 671, -1,674, 673, + 1538, -1,1820, 2280, 670, -1,672, 1539, 673, -1,671, 2279, 672, -1,2281, 1821, 668, -1, + 671, 670, 2280, -1,669, 1819, 670, -1,2282, 669, 1821, -1,668, 1821, 669, -1,2281, + 668, 667, -1,1820, 670, 1819, -1,1535, 675, 1536, -1,2282, 1819, 669, -1,2283, 2284, + 2285, -1,2283, 2286, 2287, -1,2283, 2288, 2289, -1,2290, 2283, 2285, -1,2291, 2292, + 2283, -1,2283, 2290, 2291, -1,2288, 2283, 2292, -1,2293, 2286, 2283, -1,2283, 2294, + 2295, -1,2294, 2283, 2296, -1,2283, 2297, 2296, -1,2298, 2283, 2289, -1,2283, 2298, + 2299, -1,2283, 2299, 2300, -1,2283, 2300, 2297, -1,2295, 2293, 2283, -1,1541, 2301, + 2302, -1,696, 2301, 1541, -1,2303, 1543, 1544, -1,2303, 1544, 2304, -1,2305, 1542, + 694, -1,2301, 1542, 2305, -1,2303, 2305, 1543, -1,1543, 2305, 694, -1,1545, 2304, + 1544, -1,1542, 2301, 695, -1,2306, 1822, 698, -1,699, 2307, 700, -1,698, 1822, 699, -1, + 1822, 2307, 699, -1,1823, 2306, 698, -1,1823, 698, 697, -1,696, 1541, 2302, -1,1543, + 693, 1544, -1,696, 695, 2301, -1,697, 696, 2302, -1,1824, 697, 2302, -1,694, 1542, + 695, -1,693, 1543, 694, -1,692, 1544, 693, -1,1824, 1823, 697, -1,2308, 2304, 1545, -1, + 2309, 2310, 1546, -1,2311, 2309, 1547, -1,692, 1546, 1545, -1,2310, 1545, 1546, -1, + 2309, 1546, 1547, -1,691, 1547, 1546, -1,690, 2311, 1547, -1,2308, 1545, 2310, -1, + 2312, 1548, 689, -1,2311, 1548, 2312, -1,2312, 1549, 2313, -1,1549, 2312, 688, -1, + 1548, 2311, 690, -1,692, 691, 1546, -1,2313, 1549, 688, -1,691, 690, 1547, -1,1826, + 2313, 687, -1,689, 1548, 690, -1,688, 2312, 689, -1,2314, 1827, 685, -1,688, 687, + 2313, -1,686, 1825, 687, -1,2315, 686, 1827, -1,685, 1827, 686, -1,2314, 685, 684, -1, + 1826, 687, 1825, -1,1544, 692, 1545, -1,2315, 1825, 686, -1,2316, 2317, 2318, -1, + 2319, 2316, 2318, -1,2320, 2319, 2318, -1,2321, 2318, 2322, -1,2321, 2323, 2318, -1, + 2324, 2318, 2323, -1,2325, 2318, 2324, -1,2326, 2320, 2318, -1,2327, 2328, 2318, -1, + 2329, 2330, 2328, -1,2330, 2331, 2332, -1,2325, 2327, 2318, -1,2329, 2331, 2330, -1, + 2328, 2327, 2329, -1,2333, 2332, 2331, -1,2328, 2326, 2318, -1,1550, 2334, 2335, -1, + 713, 2334, 1550, -1,2336, 1552, 1553, -1,2336, 1553, 2337, -1,2338, 1551, 711, -1, + 2334, 1551, 2338, -1,2336, 2338, 1552, -1,1552, 2338, 711, -1,1554, 2337, 1553, -1, + 1551, 2334, 712, -1,2339, 1828, 715, -1,716, 2340, 717, -1,715, 1828, 716, -1,1828, + 2340, 716, -1,1829, 2339, 715, -1,1829, 715, 714, -1,713, 1550, 2335, -1,1552, 710, + 1553, -1,713, 712, 2334, -1,714, 713, 2335, -1,1830, 714, 2335, -1,711, 1551, 712, -1, + 710, 1552, 711, -1,709, 1553, 710, -1,1830, 1829, 714, -1,2341, 2337, 1554, -1,2342, + 2343, 1555, -1,2344, 2342, 1556, -1,709, 1555, 1554, -1,2343, 1554, 1555, -1,2342, + 1555, 1556, -1,708, 1556, 1555, -1,707, 2344, 1556, -1,2341, 1554, 2343, -1,2345, + 1557, 706, -1,2344, 1557, 2345, -1,2345, 1558, 2346, -1,1558, 2345, 705, -1,1557, + 2344, 707, -1,709, 708, 1555, -1,2346, 1558, 705, -1,708, 707, 1556, -1,1832, 2346, + 704, -1,706, 1557, 707, -1,705, 2345, 706, -1,2347, 1833, 702, -1,705, 704, 2346, -1, + 703, 1831, 704, -1,2348, 703, 1833, -1,702, 1833, 703, -1,2347, 702, 701, -1,1832, + 704, 1831, -1,1553, 709, 1554, -1,2348, 1831, 703, -1,2349, 2350, 2351, -1,2351, + 2352, 2349, -1,2352, 2351, 2353, -1,2351, 2354, 2355, -1,2356, 2357, 2351, -1,2350, + 2354, 2351, -1,2357, 2358, 2351, -1,2359, 2353, 2351, -1,2351, 2360, 2361, -1,2360, + 2351, 2362, -1,2362, 2351, 2363, -1,2364, 2351, 2358, -1,2351, 2364, 2365, -1,2365, + 2366, 2351, -1,2351, 2366, 2363, -1,2351, 2361, 2359, -1,1559, 2367, 2368, -1,730, + 2367, 1559, -1,2369, 1561, 1562, -1,2369, 1562, 2370, -1,2371, 1560, 728, -1,2367, + 1560, 2371, -1,2369, 2371, 1561, -1,1561, 2371, 728, -1,1563, 2370, 1562, -1,1560, + 2367, 729, -1,2372, 1834, 732, -1,733, 2373, 734, -1,732, 1834, 733, -1,1834, 2373, + 733, -1,1835, 2372, 732, -1,1835, 732, 731, -1,730, 1559, 2368, -1,1561, 727, 1562, -1, + 730, 729, 2367, -1,731, 730, 2368, -1,1836, 731, 2368, -1,728, 1560, 729, -1,727, + 1561, 728, -1,726, 1562, 727, -1,1836, 1835, 731, -1,2374, 2370, 1563, -1,2375, 2376, + 1564, -1,2377, 2375, 1565, -1,726, 1564, 1563, -1,2376, 1563, 1564, -1,2375, 1564, + 1565, -1,725, 1565, 1564, -1,724, 2377, 1565, -1,2374, 1563, 2376, -1,2378, 1566, + 723, -1,2377, 1566, 2378, -1,2378, 1567, 2379, -1,1567, 2378, 722, -1,1566, 2377, + 724, -1,726, 725, 1564, -1,2379, 1567, 722, -1,725, 724, 1565, -1,1838, 2379, 721, -1, + 723, 1566, 724, -1,722, 2378, 723, -1,2380, 1839, 719, -1,722, 721, 2379, -1,720, + 1837, 721, -1,2381, 720, 1839, -1,719, 1839, 720, -1,2380, 719, 718, -1,1838, 721, + 1837, -1,1562, 726, 1563, -1,2381, 1837, 720, -1,2382, 2383, 2384, -1,2385, 2382, + 2384, -1,2386, 2385, 2384, -1,2384, 2387, 2388, -1,2389, 2384, 2388, -1,2384, 2383, + 2387, -1,2390, 2391, 2384, -1,2392, 2386, 2384, -1,2393, 2384, 2394, -1,2395, 2394, + 2384, -1,2384, 2396, 2395, -1,2391, 2397, 2384, -1,2384, 2398, 2399, -1,2398, 2384, + 2397, -1,2399, 2396, 2384, -1,2392, 2384, 2393, -1,1568, 2400, 2401, -1,747, 2400, + 1568, -1,2402, 1570, 1571, -1,2402, 1571, 2403, -1,2404, 1569, 745, -1,2400, 1569, + 2404, -1,2402, 2404, 1570, -1,1570, 2404, 745, -1,1572, 2403, 1571, -1,1569, 2400, + 746, -1,2405, 1840, 749, -1,750, 2406, 751, -1,749, 1840, 750, -1,1840, 2406, 750, -1, + 1841, 2405, 749, -1,1841, 749, 748, -1,747, 1568, 2401, -1,1570, 744, 1571, -1,747, + 746, 2400, -1,748, 747, 2401, -1,1842, 748, 2401, -1,745, 1569, 746, -1,744, 1570, + 745, -1,743, 1571, 744, -1,1842, 1841, 748, -1,2407, 2403, 1572, -1,2408, 2409, 1573, -1, + 2410, 2408, 1574, -1,743, 1573, 1572, -1,2409, 1572, 1573, -1,2408, 1573, 1574, -1, + 742, 1574, 1573, -1,741, 2410, 1574, -1,2407, 1572, 2409, -1,2411, 1575, 740, -1, + 2410, 1575, 2411, -1,2411, 1576, 2412, -1,1576, 2411, 739, -1,1575, 2410, 741, -1, + 743, 742, 1573, -1,2412, 1576, 739, -1,742, 741, 1574, -1,1844, 2412, 738, -1,740, + 1575, 741, -1,739, 2411, 740, -1,2413, 1845, 736, -1,739, 738, 2412, -1,737, 1843, + 738, -1,2414, 737, 1845, -1,736, 1845, 737, -1,2413, 736, 735, -1,1844, 738, 1843, -1, + 1571, 743, 1572, -1,2414, 1843, 737, -1,2415, 2416, 2417, -1,2418, 2419, 2415, -1, + 2420, 2416, 2421, -1,2420, 2421, 2422, -1,2423, 2420, 2424, -1,2422, 2425, 2420, -1, + 2424, 2420, 2425, -1,2419, 2418, 2426, -1,2416, 2427, 2417, -1,2420, 2427, 2416, -1, + 2428, 2427, 2420, -1,2429, 2420, 2430, -1,2429, 2431, 2420, -1,2432, 2420, 2431, -1, + 2432, 2428, 2420, -1,2418, 2415, 2417, -1,1577, 2433, 2434, -1,763, 2433, 1577, -1, + 2435, 1579, 1580, -1,2435, 1580, 2436, -1,2437, 1578, 761, -1,2433, 1578, 2437, -1, + 2435, 2437, 1579, -1,1579, 2437, 761, -1,1581, 2436, 1580, -1,1578, 2433, 762, -1, + 2438, 1846, 765, -1,766, 2439, 2440, -1,765, 1846, 766, -1,1846, 2439, 766, -1,1847, + 2438, 765, -1,1847, 765, 764, -1,763, 1577, 2434, -1,1579, 760, 1580, -1,763, 762, + 2433, -1,764, 763, 2434, -1,1848, 764, 2434, -1,761, 1578, 762, -1,760, 1579, 761, -1, + 759, 1580, 760, -1,1848, 1847, 764, -1,2441, 2436, 1581, -1,2442, 2443, 1582, -1, + 2444, 2442, 1583, -1,759, 1582, 1581, -1,2443, 1581, 1582, -1,2442, 1582, 1583, -1, + 758, 1583, 1582, -1,757, 2444, 1583, -1,2441, 1581, 2443, -1,2445, 1584, 756, -1, + 2444, 1584, 2445, -1,2445, 1585, 2446, -1,1585, 2445, 755, -1,1584, 2444, 757, -1, + 759, 758, 1582, -1,2446, 1585, 755, -1,758, 757, 1583, -1,1850, 2446, 754, -1,756, + 1584, 757, -1,755, 2445, 756, -1,2447, 1851, 752, -1,755, 754, 2446, -1,753, 1849, + 754, -1,2448, 753, 1851, -1,752, 1851, 753, -1,2447, 752, 2449, -1,1850, 754, 1849, -1, + 1580, 759, 1581, -1,2448, 1849, 753, -1,2450, 2451, 2452, -1,2450, 2453, 2451, -1, + 2450, 2454, 2453, -1,2450, 2452, 2455, -1,2455, 2456, 2450, -1,2457, 2450, 2456, -1, + 2458, 2450, 2457, -1,2450, 2459, 2454, -1,2460, 2461, 2450, -1,2450, 2462, 2460, -1, + 2462, 2450, 2463, -1,2464, 2450, 2458, -1,2449, 2465, 2450, -1,2466, 2450, 2465, -1, + 2450, 2466, 2463, -1,2461, 2459, 2450, -1,772, 771, 770, -1,2467, 775, 774, -1,774, + 772, 767, -1,769, 772, 770, -1,774, 773, 772, -1,769, 767, 772, -1,2467, 2468, 775, -1, + 768, 767, 769, -1,2467, 774, 767, -1,2469, 2470, 775, -1,2471, 2472, 775, -1,2470, + 2471, 775, -1,2468, 2469, 775, -1,792, 2473, 791, -1,792, 791, 790, -1,793, 790, + 789, -1,790, 1853, 792, -1,788, 795, 794, -1,1855, 793, 789, -1,794, 789, 788, -1, + 788, 787, 797, -1,1587, 787, 786, -1,798, 787, 799, -1,796, 788, 797, -1,1591, 785, + 784, -1,798, 797, 787, -1,786, 785, 1589, -1,788, 796, 795, -1,2474, 2475, 1586, -1, + 1586, 2476, 2474, -1,2476, 1586, 787, -1,2475, 799, 1586, -1,1854, 1853, 790, -1, + 799, 787, 1586, -1,1587, 1588, 2477, -1,787, 1587, 2476, -1,1589, 1590, 2478, -1, + 1588, 786, 1589, -1,786, 1588, 1587, -1,1588, 1589, 2478, -1,790, 1852, 1854, -1, + 2477, 1588, 2478, -1,2479, 1591, 2480, -1,2479, 2478, 1590, -1,1591, 2479, 1590, -1, + 785, 1590, 1589, -1,1587, 2477, 2476, -1,785, 1591, 1590, -1,784, 1592, 1591, -1, + 790, 793, 1852, -1,1593, 1592, 783, -1,783, 1592, 784, -1,1594, 783, 782, -1,1595, + 782, 781, -1,1593, 1594, 2481, -1,1594, 1593, 783, -1,1595, 1596, 2482, -1,1596, + 1595, 781, -1,1594, 782, 1595, -1,1594, 1595, 2483, -1,781, 1597, 1596, -1,1592, + 1593, 2481, -1,1598, 780, 1599, -1,1600, 779, 778, -1,1599, 780, 779, -1,1597, 1598, + 2484, -1,1597, 780, 1598, -1,1602, 777, 776, -1,1601, 778, 777, -1,1603, 776, 2485, -1, + 780, 1597, 781, -1,1596, 1597, 2486, -1,2480, 1592, 2481, -1,1595, 2482, 2483, -1, + 2483, 2481, 1594, -1,1599, 2484, 1598, -1,789, 794, 1856, -1,2482, 1596, 2486, -1, + 2487, 2484, 1599, -1,1597, 2484, 2486, -1,779, 2487, 1599, -1,778, 2488, 1600, -1, + 2488, 778, 1601, -1,776, 2489, 1602, -1,2489, 776, 1603, -1,777, 1602, 2490, -1,777, + 2490, 1601, -1,2488, 2491, 1600, -1,2489, 2490, 1602, -1,2492, 2489, 1603, -1,2488, + 1601, 2490, -1,1603, 2485, 2492, -1,1600, 2491, 2487, -1,779, 1600, 2487, -1,1592, + 2480, 1591, -1,1855, 789, 1856, -1,2493, 2494, 2495, -1,2496, 2497, 2493, -1,2498, + 2494, 2493, -1,2499, 2500, 2501, -1,2500, 2499, 2498, -1,2502, 2498, 2493, -1,2502, + 2503, 2498, -1,2504, 2497, 2505, -1,2497, 2504, 2502, -1,2497, 2502, 2493, -1,2506, + 2507, 2508, -1,2502, 2507, 2506, -1,2506, 2509, 2502, -1,2506, 2510, 2511, -1,2500, + 2498, 2512, -1,2498, 2503, 2512, -1,2512, 2513, 2514, -1,2513, 2512, 2503, -1,2515, + 2516, 2503, -1,2516, 2515, 2517, -1,2509, 2503, 2502, -1,2515, 2503, 2518, -1,2511, + 2519, 2509, -1,2519, 2511, 2520, -1,2511, 2509, 2506, -1,2509, 2521, 2518, -1,2518, + 2521, 2522, -1,2518, 2503, 2509, -1,2515, 2518, 2523, -1,2524, 2500, 2512, -1,807, + 803, 802, -1,803, 807, 806, -1,807, 802, 2525, -1,808, 807, 2525, -1,808, 2525, 2526, -1, + 800, 808, 2527, -1,804, 803, 806, -1,805, 804, 806, -1,2526, 2527, 808, -1,2528, + 801, 800, -1,2527, 2528, 800, -1,2529, 814, 813, -1,2530, 2529, 813, -1,2531, 2532, + 810, -1,809, 2531, 810, -1,2530, 812, 2533, -1,812, 2530, 813, -1,2533, 812, 2534, -1, + 2535, 2534, 811, -1,810, 2532, 811, -1,811, 2534, 812, -1,811, 2532, 2535, -1,2536, + 2537, 1604, -1,1604, 2537, 1605, -1,2536, 1604, 2538, -1,2538, 1604, 815, -1,816, + 1605, 817, -1,1605, 816, 815, -1,1604, 1605, 815, -1,2537, 2539, 1605, -1,1606, 2540, + 2541, -1,1606, 1605, 2539, -1,1605, 1606, 817, -1,1606, 2542, 817, -1,1606, 2539, + 2540, -1,2541, 2542, 1606, -1,827, 1857, 828, -1,1857, 826, 2543, -1,829, 1857, 830, -1, + 818, 820, 819, -1,820, 818, 830, -1,821, 1857, 2544, -1,1857, 820, 830, -1,1857, + 829, 828, -1,2545, 2546, 824, -1,2546, 825, 824, -1,825, 2546, 2542, -1,2545, 824, + 823, -1,820, 1857, 821, -1,821, 2544, 2547, -1,2547, 823, 822, -1,2547, 822, 821, -1, + 2545, 823, 2547, -1,1857, 827, 826, -1,834, 833, 1607, -1,833, 2548, 1607, -1,835, + 1607, 836, -1,1607, 835, 834, -1,836, 1607, 837, -1,2548, 2549, 1607, -1,832, 1607, + 2549, -1,1607, 838, 837, -1,831, 838, 1607, -1,831, 1607, 832, -1,840, 2550, 2551, -1, + 2550, 840, 839, -1,843, 1858, 844, -1,2552, 851, 850, -1,852, 850, 849, -1,850, 852, + 2552, -1,852, 849, 853, -1,854, 853, 848, -1,848, 2553, 855, -1,848, 853, 849, -1, + 2553, 1858, 855, -1,848, 855, 854, -1,842, 1858, 843, -1,845, 1858, 846, -1,846, + 1858, 847, -1,1858, 845, 844, -1,2554, 2555, 2556, -1,1858, 841, 2555, -1,841, 2556, + 2555, -1,855, 1858, 2555, -1,841, 1858, 842, -1,2556, 860, 2557, -1,2557, 2558, 2556, -1, + 860, 856, 2557, -1,859, 858, 856, -1,857, 856, 858, -1,859, 856, 860, -1,2559, 2560, + 862, -1,862, 861, 2559, -1,864, 863, 866, -1,866, 865, 864, -1,863, 2561, 866, -1, + 2561, 2562, 2563, -1,2564, 2563, 2562, -1,2561, 2563, 866, -1,868, 867, 1608, -1, + 1608, 867, 2565, -1,868, 1609, 869, -1,2566, 1609, 1608, -1,868, 1608, 1609, -1,1609, + 2566, 2567, -1,2568, 2566, 1608, -1,2565, 2568, 1608, -1,1610, 869, 1609, -1,871, + 870, 1610, -1,1609, 2567, 1610, -1,871, 1610, 2569, -1,872, 871, 2570, -1,2567, 2571, + 1610, -1,2571, 2569, 1610, -1,2570, 871, 2569, -1,870, 869, 1610, -1,2572, 1859, + 2573, -1,2574, 879, 878, -1,880, 878, 877, -1,878, 880, 2574, -1,880, 877, 881, -1, + 882, 881, 876, -1,876, 2575, 883, -1,876, 881, 877, -1,2575, 1859, 883, -1,876, 883, + 882, -1,2576, 1859, 2572, -1,2577, 1859, 2578, -1,2578, 1859, 2579, -1,1859, 2577, + 2573, -1,874, 873, 875, -1,1859, 2580, 873, -1,2580, 875, 873, -1,883, 1859, 873, -1, + 2580, 1859, 2576, -1,2581, 2582, 1611, -1,2582, 887, 1611, -1,2583, 2584, 1611, -1, + 1611, 2585, 2583, -1,2584, 2581, 1611, -1,885, 1611, 886, -1,884, 1611, 885, -1,2585, + 1611, 2586, -1,1611, 884, 2586, -1,1611, 887, 886, -1,2587, 888, 2588, -1,2588, 2589, + 2587, -1,893, 892, 1612, -1,2590, 1612, 1613, -1,1612, 2591, 893, -1,2590, 2592, + 1612, -1,2592, 2591, 1612, -1,1612, 892, 891, -1,891, 890, 1613, -1,890, 889, 1614, -1, + 1613, 1614, 2593, -1,1614, 1613, 890, -1,2593, 1614, 2594, -1,1613, 2593, 2590, -1, + 2594, 1614, 889, -1,891, 1613, 1612, -1,899, 1860, 900, -1,1860, 898, 2595, -1,2596, + 2597, 2598, -1,902, 1860, 2596, -1,2596, 2598, 902, -1,1860, 902, 901, -1,2599, 1860, + 897, -1,1860, 901, 900, -1,895, 894, 2600, -1,894, 2601, 2600, -1,2601, 894, 2602, -1, + 895, 2600, 2603, -1,2596, 1860, 2599, -1,2599, 897, 896, -1,896, 2603, 2604, -1,896, + 2604, 2599, -1,895, 2603, 896, -1,1860, 899, 898, -1,2605, 2606, 1615, -1,1615, 2606, + 1616, -1,2605, 1615, 2607, -1,2607, 1615, 2608, -1,2609, 1616, 2610, -1,1616, 2609, + 2608, -1,1615, 1616, 2608, -1,2606, 2611, 1616, -1,1617, 2612, 2613, -1,1617, 1616, + 2611, -1,1616, 1617, 2610, -1,1617, 2614, 2610, -1,1617, 2611, 2612, -1,2613, 2614, + 1617, -1,2615, 2616, 1618, -1,1618, 2616, 2617, -1,2615, 1619, 2618, -1,2619, 1619, + 1618, -1,2615, 1618, 1619, -1,1619, 2619, 2620, -1,2621, 2619, 1618, -1,2617, 2621, + 1618, -1,1620, 2618, 1619, -1,2622, 2623, 1620, -1,1619, 2620, 1620, -1,2622, 1620, + 2624, -1,2625, 2622, 2626, -1,2620, 2627, 1620, -1,2627, 2624, 1620, -1,2626, 2622, + 2624, -1,2623, 2618, 1620, -1,1621, 2628, 2629, -1,1622, 2629, 2630, -1,2631, 1621, + 903, -1,1621, 2631, 2628, -1,903, 1622, 904, -1,1622, 903, 1621, -1,1621, 2629, 1622, -1, + 2630, 2632, 1622, -1,1622, 1623, 904, -1,1623, 1622, 2632, -1,904, 1623, 905, -1, + 2633, 1623, 2632, -1,2634, 1623, 2633, -1,905, 1623, 2634, -1,923, 922, 1624, -1, + 921, 920, 1626, -1,922, 921, 1625, -1,2635, 922, 1625, -1,922, 2635, 1624, -1,2636, + 920, 1627, -1,920, 2636, 1626, -1,2637, 1625, 921, -1,2637, 921, 1626, -1,920, 919, + 1627, -1,923, 1624, 2638, -1,919, 918, 1628, -1,1630, 917, 1631, -1,1866, 1867, 908, -1, + 918, 917, 1630, -1,1628, 1629, 2639, -1,1628, 918, 1629, -1,1633, 916, 915, -1,1630, + 1629, 918, -1,917, 916, 1632, -1,1629, 1630, 2639, -1,1865, 908, 1867, -1,1627, 919, + 2640, -1,2640, 919, 1628, -1,2638, 1624, 2635, -1,2637, 1626, 2636, -1,1625, 2637, + 2635, -1,2641, 1627, 2640, -1,2639, 1630, 2642, -1,1628, 2639, 2640, -1,1627, 2641, + 2636, -1,1631, 1632, 2643, -1,1632, 1631, 917, -1,1633, 1634, 2644, -1,1634, 1633, + 915, -1,1632, 916, 1633, -1,1632, 1633, 2645, -1,2643, 1632, 2645, -1,2644, 1635, + 2646, -1,2644, 2645, 1633, -1,2646, 1635, 1636, -1,1635, 2644, 1634, -1,1634, 915, + 1635, -1,1631, 2643, 2642, -1,1630, 1631, 2642, -1,915, 914, 1635, -1,1636, 914, + 913, -1,908, 2647, 1866, -1,1640, 912, 911, -1,2648, 908, 1865, -1,1638, 913, 912, -1, + 2649, 2634, 911, -1,910, 2650, 2651, -1,2649, 911, 2651, -1,2651, 911, 910, -1,911, + 2634, 1641, -1,910, 909, 2652, -1,2652, 909, 1864, -1,908, 2653, 2647, -1,909, 2648, + 1863, -1,909, 908, 2648, -1,2652, 2654, 910, -1,2655, 2647, 2653, -1,910, 2654, 2650, -1, + 1863, 1864, 909, -1,1636, 1637, 2656, -1,1637, 1636, 913, -1,1638, 1639, 2657, -1, + 1639, 1638, 912, -1,1637, 913, 1638, -1,1637, 1638, 2657, -1,2656, 1637, 2657, -1, + 2658, 1640, 2659, -1,2658, 2657, 1639, -1,1640, 2658, 1639, -1,1639, 912, 1640, -1, + 1636, 2656, 2646, -1,2634, 2660, 1641, -1,2659, 1641, 2661, -1,906, 2661, 1862, -1, + 1641, 1861, 1862, -1,1862, 907, 906, -1,2660, 1861, 1641, -1,2661, 1641, 1862, -1, + 2659, 1640, 911, -1,911, 1641, 2659, -1,914, 1636, 1635, -1,930, 2662, 2663, -1,2664, + 2665, 2666, -1,2667, 2664, 2666, -1,2668, 2667, 2669, -1,2670, 924, 925, -1,2671, + 2670, 925, -1,926, 925, 930, -1,2662, 925, 924, -1,2662, 930, 925, -1,2663, 2668, + 2672, -1,2673, 2661, 2674, -1,2674, 2666, 2665, -1,2666, 2675, 2669, -1,2669, 2672, + 2668, -1,2674, 2665, 2673, -1,930, 2663, 2676, -1,2676, 2663, 2672, -1,928, 927, + 930, -1,929, 928, 930, -1,927, 926, 930, -1,2669, 2667, 2666, -1,2677, 935, 934, -1, + 937, 934, 933, -1,932, 2678, 2679, -1,2680, 932, 2679, -1,931, 2678, 932, -1,933, + 932, 937, -1,2681, 935, 2682, -1,934, 936, 2677, -1,934, 937, 936, -1,932, 2680, + 938, -1,938, 2680, 2683, -1,938, 2683, 939, -1,937, 932, 938, -1,2677, 2682, 935, -1, + 1642, 2684, 2685, -1,1642, 2685, 948, -1,2686, 948, 2685, -1,1642, 1643, 2684, -1, + 1643, 2687, 2688, -1,2689, 2687, 1644, -1,1643, 1644, 2687, -1,2684, 1643, 2688, -1, + 947, 1643, 1642, -1,947, 1642, 948, -1,945, 1645, 1644, -1,2689, 1644, 1645, -1,1644, + 946, 945, -1,945, 944, 1645, -1,1643, 947, 946, -1,946, 1644, 1643, -1,1645, 2690, + 2689, -1,1645, 1646, 2691, -1,1647, 2692, 2693, -1,942, 1647, 1646, -1,2693, 1646, + 1647, -1,1647, 1648, 2692, -1,2691, 1646, 2693, -1,1646, 1645, 943, -1,944, 943, + 1645, -1,941, 1647, 942, -1,943, 942, 1646, -1,940, 2694, 1648, -1,2692, 1648, 2694, -1, + 941, 940, 1648, -1,1648, 1647, 941, -1,2691, 2690, 1645, -1,954, 2695, 1870, -1,955, + 1869, 1868, -1,1868, 2694, 956, -1,1869, 955, 2696, -1,956, 955, 1868, -1,953, 2697, + 2698, -1,1870, 955, 954, -1,953, 2695, 954, -1,953, 952, 2697, -1,1870, 2696, 955, -1, + 2695, 953, 2698, -1,1649, 1872, 2699, -1,949, 2700, 1649, -1,2701, 2702, 1650, -1, + 2700, 1650, 2702, -1,1650, 2700, 949, -1,951, 1871, 2703, -1,2699, 1871, 950, -1, + 2703, 952, 951, -1,1871, 951, 950, -1,2703, 2697, 952, -1,1872, 1649, 2700, -1,1649, + 2699, 950, -1,2701, 1650, 949, -1,950, 949, 1649, -1,2704, 2705, 2706, -1,2707, 2708, + 2704, -1,2704, 2706, 2709, -1,2710, 2705, 2711, -1,2706, 2705, 2710, -1,2712, 2713, + 2706, -1,2708, 2707, 2714, -1,2706, 2713, 2709, -1,2715, 2716, 2709, -1,2716, 2715, + 2717, -1,2718, 2712, 2719, -1,2718, 2713, 2712, -1,2713, 2715, 2709, -1,2707, 2704, + 2709, -1,1652, 2720, 2721, -1,2722, 1651, 964, -1,2723, 1651, 2722, -1,2721, 2722, + 1652, -1,1652, 2722, 964, -1,1652, 1653, 2720, -1,2724, 1653, 1654, -1,2725, 2724, + 1654, -1,2720, 1653, 2724, -1,963, 1653, 1652, -1,1873, 1656, 2726, -1,2723, 965, + 1651, -1,1652, 964, 963, -1,1875, 1656, 1874, -1,965, 964, 1651, -1,962, 1653, 963, -1, + 2727, 1656, 1875, -1,962, 961, 1654, -1,962, 1654, 1653, -1,1874, 1656, 1873, -1, + 1654, 2728, 2725, -1,2729, 2728, 1655, -1,2727, 2729, 1656, -1,2726, 1656, 2730, -1, + 2731, 2730, 1657, -1,959, 1656, 1655, -1,2729, 1655, 1656, -1,960, 1654, 961, -1, + 1655, 960, 959, -1,959, 958, 1656, -1,960, 1655, 1654, -1,957, 1657, 958, -1,1656, + 958, 1657, -1,2731, 1657, 957, -1,1657, 2730, 1656, -1,2728, 1654, 1655, -1,2732, + 2731, 1658, -1,2731, 973, 1658, -1,972, 2732, 1658, -1,1876, 2732, 1659, -1,1659, + 2733, 1876, -1,1659, 2732, 972, -1,972, 1658, 973, -1,1877, 971, 970, -1,970, 2734, + 1877, -1,1878, 967, 966, -1,1877, 2733, 971, -1,969, 2734, 970, -1,1659, 972, 971, -1, + 971, 2733, 1659, -1,966, 2735, 1878, -1,966, 2736, 1879, -1,968, 2737, 2738, -1,1879, + 2736, 2739, -1,2738, 969, 968, -1,2737, 968, 2740, -1,2734, 969, 2738, -1,967, 2740, + 968, -1,1880, 966, 1879, -1,2740, 967, 1878, -1,1880, 2735, 966, -1,2741, 2742, 2743, -1, + 2744, 2745, 2741, -1,2741, 2743, 2746, -1,2747, 2742, 2748, -1,2743, 2742, 2747, -1, + 2749, 2750, 2743, -1,2745, 2744, 2751, -1,2743, 2750, 2746, -1,2752, 2753, 2746, -1, + 2753, 2752, 2754, -1,2755, 2749, 2756, -1,2755, 2750, 2749, -1,2750, 2752, 2746, -1, + 2744, 2741, 2746, -1,2757, 1660, 2758, -1,1660, 2757, 988, -1,1661, 1660, 988, -1, + 2758, 1660, 2759, -1,1661, 988, 987, -1,986, 985, 1663, -1,1665, 984, 983, -1,985, + 984, 1664, -1,987, 986, 1662, -1,983, 982, 1666, -1,1667, 1666, 982, -1,1661, 1662, + 2760, -1,1662, 1661, 987, -1,2760, 2759, 1660, -1,2761, 2760, 1662, -1,2761, 1662, + 1663, -1,1662, 986, 1663, -1,2760, 1660, 1661, -1,1664, 1665, 2762, -1,1665, 1664, + 984, -1,1666, 1665, 983, -1,1665, 1666, 2762, -1,2762, 2761, 1664, -1,2763, 2762, + 1666, -1,2763, 1666, 1667, -1,1664, 2761, 1663, -1,1663, 985, 1664, -1,1667, 982, + 981, -1,1668, 979, 1669, -1,1667, 980, 1668, -1,980, 1667, 981, -1,1668, 980, 979, -1, + 1668, 2764, 2763, -1,1669, 979, 978, -1,976, 975, 1672, -1,974, 1673, 975, -1,2765, + 1674, 974, -1,977, 976, 1671, -1,978, 977, 1670, -1,1674, 2765, 2766, -1,1669, 1670, + 2764, -1,1670, 1669, 978, -1,1671, 1670, 977, -1,1670, 1671, 2767, -1,1670, 2767, + 2764, -1,2767, 1671, 1672, -1,2767, 1672, 2768, -1,1671, 976, 1672, -1,1669, 2764, + 1668, -1,1673, 1674, 1881, -1,1673, 2768, 1672, -1,1674, 1673, 974, -1,1881, 2766, + 2769, -1,1672, 975, 1673, -1,1881, 1674, 2766, -1,1668, 2763, 1667, -1,1673, 1881, + 2768, -1,995, 994, 1885, -1,1011, 996, 995, -1,1884, 997, 996, -1,1012, 994, 993, -1, + 990, 989, 1014, -1,990, 1014, 1013, -1,1012, 992, 1013, -1,992, 1012, 993, -1,991, + 1013, 992, -1,1013, 991, 990, -1,1883, 997, 1010, -1,1008, 1000, 1882, -1,998, 1009, + 999, -1,1882, 999, 1009, -1,1001, 1000, 1008, -1,997, 1883, 998, -1,1883, 1009, 998, -1, + 999, 1882, 1000, -1,1008, 1007, 1002, -1,1002, 1007, 1003, -1,1008, 1002, 1001, -1, + 995, 1885, 1011, -1,1003, 1007, 1004, -1,1006, 1005, 1004, -1,1023, 1005, 1006, -1, + 1007, 1006, 1004, -1,994, 1012, 1885, -1,1011, 1884, 996, -1,997, 1884, 1010, -1, + 1014, 989, 1015, -1,2770, 2771, 1015, -1,1015, 2771, 1016, -1,1016, 2772, 2773, -1, + 2772, 1016, 2771, -1,1017, 1016, 2773, -1,1017, 2774, 2775, -1,2774, 1017, 2773, -1, + 1018, 2776, 2777, -1,1018, 1886, 2776, -1,2777, 1887, 1018, -1,1886, 1017, 2775, -1, + 1019, 1887, 2778, -1,1022, 2779, 2780, -1,1021, 2779, 1022, -1,1022, 2780, 2781, -1, + 2782, 1023, 2781, -1,2782, 1005, 1023, -1,2781, 1023, 1022, -1,2776, 1886, 2775, -1, + 2778, 1887, 2777, -1,1888, 2778, 2783, -1,1020, 2783, 2784, -1,1021, 2785, 2779, -1, + 2785, 1021, 2786, -1,2784, 1889, 1020, -1,2784, 2786, 1889, -1,1020, 1888, 2783, -1, + 1021, 1889, 2786, -1,2778, 1888, 1019, -1,989, 2770, 1015, -1,2787, 1675, 2788, -1, + 1675, 2787, 2789, -1,1676, 1675, 2789, -1,2788, 1675, 2790, -1,1676, 2789, 2791, -1, + 2792, 2793, 1678, -1,1680, 2794, 2795, -1,2793, 2794, 1679, -1,2791, 2792, 1677, -1, + 2795, 2796, 1681, -1,1682, 1681, 2796, -1,1676, 1677, 1024, -1,1677, 1676, 2791, -1, + 1024, 2790, 1675, -1,1025, 1024, 1677, -1,1025, 1677, 1678, -1,1677, 2792, 1678, -1, + 1024, 1675, 1676, -1,1679, 1680, 1026, -1,1680, 1679, 2794, -1,1681, 1680, 2795, -1, + 1680, 1681, 1026, -1,1026, 1025, 1679, -1,1027, 1026, 1681, -1,1027, 1681, 1682, -1, + 1679, 1025, 1678, -1,1678, 2793, 1679, -1,1682, 2796, 2797, -1,1683, 2798, 1684, -1, + 1682, 2799, 1683, -1,2799, 1682, 2797, -1,1683, 2799, 2798, -1,1683, 1028, 1027, -1, + 1684, 2798, 2800, -1,2801, 2802, 1687, -1,2803, 1688, 2802, -1,2804, 1689, 2803, -1, + 2805, 2801, 1686, -1,2800, 2805, 1685, -1,1689, 2804, 2806, -1,1684, 1685, 1028, -1, + 1685, 1684, 2800, -1,1686, 1685, 2805, -1,1685, 1686, 1029, -1,1685, 1029, 1028, -1, + 1029, 1686, 1687, -1,1029, 1687, 1030, -1,1686, 2801, 1687, -1,1684, 1028, 1683, -1, + 1688, 1689, 1890, -1,1689, 1688, 2803, -1,2806, 1031, 1890, -1,1030, 1688, 1890, -1, + 1688, 1030, 1687, -1,1687, 2802, 1688, -1,1683, 1027, 1682, -1,1890, 1689, 2806, -1, + 2807, 2808, 2809, -1,2809, 2808, 2810, -1,2807, 2809, 2811, -1,2810, 2812, 2813, -1, + 2812, 2810, 2808, -1,2813, 2812, 2814, -1,2815, 2811, 2816, -1,2811, 2815, 2807, -1, + 2816, 2811, 2817, -1,2818, 1892, 2819, -1,2817, 2820, 2816, -1,2820, 2817, 2821, -1, + 2821, 2822, 2820, -1,2821, 2823, 2822, -1,2824, 2825, 1891, -1,2814, 2826, 2827, -1, + 2826, 1892, 2827, -1,1892, 2826, 2828, -1,2823, 2829, 2830, -1,2830, 2829, 2831, -1, + 2823, 2830, 2822, -1,1891, 2825, 2831, -1,2829, 1891, 2831, -1,2832, 2824, 1891, -1, + 2827, 2813, 2814, -1,2828, 2819, 1892, -1,1690, 1033, 1032, -1,1033, 1690, 2833, -1, + 2834, 1690, 1032, -1,1692, 1035, 1034, -1,2835, 1692, 1691, -1,1034, 1691, 1692, -1, + 1692, 1693, 1035, -1,1033, 1691, 1034, -1,1691, 1033, 2833, -1,2833, 2835, 1691, -1, + 1690, 2834, 2833, -1,2836, 1694, 1693, -1,1035, 1693, 1694, -1,1695, 1694, 2837, -1, + 2836, 2837, 1694, -1,1036, 1694, 1695, -1,1692, 2835, 2836, -1,1693, 1692, 2836, -1, + 1036, 1035, 1694, -1,1696, 1037, 1036, -1,1697, 1037, 1696, -1,1695, 2837, 1696, -1, + 1038, 1037, 1698, -1,1040, 1039, 1700, -1,1699, 1039, 1038, -1,1697, 1698, 1037, -1, + 2838, 1697, 1696, -1,2839, 1698, 2838, -1,1696, 2837, 2838, -1,2839, 1699, 1698, -1, + 1698, 1697, 2838, -1,1699, 2840, 1039, -1,1700, 1039, 2840, -1,1700, 2840, 2841, -1, + 2841, 1040, 1700, -1,2839, 2840, 1699, -1,1699, 1038, 1698, -1,1036, 1695, 1696, -1, + 1042, 1041, 2842, -1,2842, 2843, 1042, -1,1701, 1044, 1043, -1,1044, 1701, 2844, -1, + 2845, 1701, 1043, -1,1703, 1046, 1045, -1,2846, 1703, 1702, -1,1045, 1702, 1703, -1, + 1703, 1704, 1046, -1,1044, 1702, 1045, -1,1702, 1044, 2844, -1,2844, 2846, 1702, -1, + 1701, 2845, 2844, -1,2847, 1705, 1704, -1,1046, 1704, 1705, -1,1706, 1705, 2848, -1, + 2847, 2848, 1705, -1,1047, 1705, 1706, -1,1703, 2846, 2847, -1,1704, 1703, 2847, -1, + 1047, 1046, 1705, -1,1707, 1048, 1047, -1,1708, 1048, 1707, -1,1706, 2848, 1707, -1, + 1049, 1048, 1709, -1,1051, 1050, 1711, -1,1710, 1050, 1049, -1,1708, 1709, 1048, -1, + 2849, 1708, 1707, -1,2850, 1709, 2849, -1,1707, 2848, 2849, -1,2850, 1710, 1709, -1, + 1709, 1708, 2849, -1,1710, 2851, 1050, -1,1711, 1050, 2851, -1,1711, 2851, 2852, -1, + 2852, 1051, 1711, -1,2850, 2851, 1710, -1,1710, 1049, 1709, -1,1047, 1706, 1707, -1, + 2853, 2854, 2855, -1,2854, 2853, 1052, -1,2856, 2857, 2858, -1,2858, 2859, 2856, -1, + 2860, 2857, 2861, -1,2862, 2863, 2864, -1,2865, 2866, 2867, -1,2863, 2862, 2865, -1, + 2861, 2864, 2860, -1,2859, 2868, 2869, -1,2869, 2856, 2859, -1,2870, 2857, 2856, -1, + 2870, 2861, 2857, -1,2871, 2867, 2866, -1,2862, 2866, 2865, -1,2864, 2872, 2862, -1, + 2861, 2872, 2864, -1,2869, 2868, 2873, -1,2874, 2875, 2876, -1,2877, 2878, 2874, -1, + 2879, 2875, 2874, -1,2880, 2881, 2882, -1,2881, 2880, 2879, -1,2883, 2879, 2874, -1, + 2883, 2884, 2879, -1,2885, 2878, 2886, -1,2878, 2885, 2883, -1,2878, 2883, 2874, -1, + 2887, 2888, 2889, -1,2883, 2888, 2887, -1,2887, 2890, 2883, -1,2887, 2891, 2892, -1, + 2881, 2879, 2893, -1,2879, 2884, 2893, -1,2893, 2894, 2895, -1,2894, 2893, 2884, -1, + 2896, 2897, 2884, -1,2897, 2896, 2898, -1,2890, 2884, 2883, -1,2896, 2884, 2899, -1, + 2892, 2900, 2890, -1,2900, 2892, 2901, -1,2892, 2890, 2887, -1,2890, 2902, 2899, -1, + 2899, 2902, 2903, -1,2899, 2884, 2890, -1,2896, 2899, 2904, -1,2905, 2881, 2893, -1, + 1712, 2906, 2907, -1,1713, 2907, 2908, -1,2909, 1712, 2910, -1,1712, 2909, 2906, -1, + 2910, 1713, 2911, -1,1713, 2910, 1712, -1,1712, 2907, 1713, -1,2908, 2912, 1713, -1, + 1713, 1714, 2911, -1,1714, 1713, 2912, -1,2911, 1714, 2913, -1,2914, 1714, 2912, -1, + 2915, 1714, 2914, -1,2913, 1714, 2915, -1,2916, 2917, 1715, -1,2918, 1715, 1716, -1, + 1715, 2919, 2916, -1,2918, 2920, 1715, -1,2920, 2919, 1715, -1,1715, 2917, 2921, -1, + 2921, 2922, 1716, -1,2922, 2923, 1717, -1,1716, 1717, 2924, -1,1717, 1716, 2922, -1, + 2924, 1717, 2925, -1,1716, 2924, 2918, -1,2925, 1717, 2923, -1,2921, 1716, 1715, -1, + 2926, 1057, 1056, -1,1059, 1056, 1055, -1,1054, 2927, 2928, -1,1060, 1054, 2928, -1, + 1053, 2927, 1054, -1,1055, 1054, 1059, -1,2929, 1057, 2930, -1,1056, 1058, 2926, -1, + 1056, 1059, 1058, -1,2928, 2931, 1060, -1,1060, 2931, 2932, -1,1060, 2932, 1061, -1, + 1059, 1054, 1060, -1,2926, 2930, 1057, -1,1718, 2933, 2934, -1,1718, 2934, 1071, -1, + 1072, 1071, 2934, -1,1718, 1719, 2933, -1,1719, 2935, 2936, -1,2937, 2935, 1720, -1, + 1719, 1720, 2935, -1,2933, 1719, 2936, -1,1070, 1719, 1718, -1,1070, 1718, 1071, -1, + 1068, 1721, 1720, -1,2937, 1720, 1721, -1,1720, 1069, 1068, -1,1068, 1067, 1721, -1, + 1719, 1070, 1069, -1,1069, 1720, 1719, -1,1721, 2938, 2937, -1,1721, 1722, 2939, -1, + 1723, 2940, 2941, -1,1065, 1723, 1722, -1,2941, 1722, 1723, -1,1723, 1724, 2940, -1, + 2939, 1722, 2941, -1,1722, 1721, 1066, -1,1067, 1066, 1721, -1,1064, 1723, 1065, -1, + 1066, 1065, 1722, -1,1063, 1062, 1724, -1,2940, 1724, 1062, -1,1064, 1063, 1724, -1, + 1724, 1723, 1064, -1,2939, 2938, 1721, -1,1078, 2942, 1895, -1,1079, 1894, 1893, -1, + 1893, 2943, 2944, -1,1894, 1079, 2945, -1,2944, 1079, 1893, -1,1077, 2946, 2947, -1, + 1895, 1079, 1078, -1,1077, 2942, 1078, -1,1077, 1076, 2946, -1,1895, 2945, 1079, -1, + 2942, 1077, 2947, -1,1725, 1897, 2948, -1,1073, 2949, 1725, -1,2950, 2951, 1726, -1, + 2949, 1726, 2951, -1,1726, 2949, 1073, -1,1075, 1896, 2952, -1,2948, 1896, 1074, -1, + 2952, 1076, 1075, -1,1896, 1075, 1074, -1,2952, 2946, 1076, -1,1897, 1725, 2949, -1, + 1725, 2948, 1074, -1,2950, 1726, 1073, -1,1074, 1073, 1725, -1,2953, 2954, 2955, -1, + 2956, 2953, 2957, -1,2957, 2958, 2956, -1,2957, 2953, 2955, -1,2959, 2960, 2961, -1, + 2962, 2957, 2959, -1,2963, 2964, 2956, -1,2956, 2958, 2963, -1,2957, 2962, 2958, -1, + 2965, 2958, 2966, -1,2961, 2962, 2959, -1,2958, 2962, 2966, -1,2965, 2966, 2967, -1, + 2964, 2963, 2968, -1,1728, 2969, 2970, -1,2971, 1727, 1088, -1,1090, 1727, 2971, -1, + 2970, 2971, 1728, -1,1728, 2971, 1088, -1,1728, 1729, 2969, -1,2972, 1729, 1730, -1, + 2973, 2972, 1730, -1,2969, 1729, 2972, -1,1087, 1729, 1728, -1,1090, 1089, 1727, -1, + 1728, 1088, 1087, -1,1089, 1088, 1727, -1,1086, 1729, 1087, -1,1900, 1732, 1899, -1, + 1086, 1085, 1730, -1,1899, 1732, 1898, -1,1086, 1730, 1729, -1,1898, 1732, 2974, -1, + 1730, 2975, 2973, -1,2976, 2975, 1731, -1,2977, 2976, 1732, -1,2974, 1732, 2978, -1, + 1080, 2978, 1733, -1,1083, 1732, 1731, -1,2976, 1731, 1732, -1,1084, 1730, 1085, -1, + 1731, 1084, 1083, -1,1083, 1082, 1732, -1,1084, 1731, 1730, -1,1081, 1733, 1082, -1, + 1732, 1082, 1733, -1,1080, 1733, 1081, -1,1733, 2978, 1732, -1,2975, 1730, 1731, -1, + 2977, 1732, 1900, -1,2979, 2980, 1734, -1,2980, 2981, 1734, -1,1097, 2979, 1734, -1, + 1901, 2979, 1735, -1,1735, 2982, 1901, -1,1735, 2979, 1097, -1,1097, 1734, 2981, -1, + 1902, 1096, 1095, -1,1095, 2983, 1902, -1,1903, 1092, 1091, -1,1902, 2982, 1096, -1, + 1094, 2983, 1095, -1,1735, 1097, 1096, -1,1096, 2982, 1735, -1,1091, 2984, 1903, -1, + 1091, 2985, 1904, -1,1093, 2986, 2987, -1,1904, 2985, 2988, -1,2987, 1094, 1093, -1, + 2986, 1093, 2989, -1,2983, 1094, 2987, -1,1092, 2989, 1093, -1,1905, 1091, 1904, -1, + 2989, 1092, 1903, -1,1905, 2984, 1091, -1,2990, 2991, 2992, -1,2993, 2994, 2990, -1, + 2990, 2992, 2995, -1,2996, 2991, 2997, -1,2992, 2991, 2996, -1,2998, 2999, 2992, -1, + 2994, 2993, 3000, -1,2992, 2999, 2995, -1,3001, 3002, 2995, -1,3002, 3001, 3003, -1, + 3004, 2998, 3005, -1,3004, 2999, 2998, -1,2999, 3001, 2995, -1,2993, 2990, 2995, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 1, 2, -1,0, 2, 3, -1,4, 3, 5, -1,6, 7, 0, -1,8, 9, 10, -1,11, 12, 13, -1,10, 5, + 8, -1,8, 14, 15, -1,16, 14, 17, -1,18, 14, 19, -1,15, 20, 8, -1,18, 21, 14, -1,15, + 14, 21, -1,17, 22, 23, -1,8, 20, 9, -1,24, 18, 19, -1,25, 26, 27, -1,25, 27, 28, -1, + 26, 25, 19, -1,29, 26, 19, -1,16, 30, 31, -1,30, 16, 17, -1,23, 32, 33, -1,32, 23, + 22, -1,30, 17, 23, -1,30, 23, 33, -1,29, 16, 31, -1,32, 34, 33, -1,33, 31, 30, -1, + 34, 35, 36, -1,34, 32, 35, -1,32, 22, 35, -1,29, 19, 14, -1,14, 16, 29, -1,22, 37, + 35, -1,6, 12, 38, -1,39, 36, 35, -1,39, 37, 40, -1,39, 40, 41, -1,19, 42, 24, -1, + 43, 40, 44, -1,41, 43, 45, -1,43, 41, 40, -1,46, 47, 48, -1,49, 47, 46, -1,43, 44, + 46, -1,43, 46, 50, -1,46, 44, 49, -1,39, 41, 45, -1,49, 51, 52, -1,53, 51, 54, -1, + 13, 10, 55, -1,56, 51, 53, -1,52, 56, 57, -1,52, 51, 56, -1,58, 59, 60, -1,6, 38, + 61, -1,62, 60, 63, -1,64, 54, 59, -1,65, 63, 66, -1,11, 13, 55, -1,49, 52, 47, -1, + 47, 52, 67, -1,36, 39, 45, -1,46, 48, 50, -1,50, 45, 43, -1,53, 57, 56, -1,48, 47, + 67, -1,68, 57, 53, -1,52, 57, 67, -1,54, 68, 53, -1,59, 69, 64, -1,69, 59, 58, -1, + 63, 70, 62, -1,70, 63, 65, -1,60, 62, 71, -1,60, 71, 58, -1,69, 72, 64, -1,70, 71, + 62, -1,73, 70, 65, -1,69, 58, 71, -1,65, 66, 73, -1,64, 72, 68, -1,54, 64, 68, -1, + 39, 35, 37, -1,19, 25, 42, -1,61, 7, 6, -1,74, 75, 76, -1,77, 75, 74, -1,76, 75, + 78, -1,79, 80, 81, -1,80, 82, 77, -1,83, 81, 84, -1,85, 86, 75, -1,87, 84, 88, -1, + 86, 89, 90, -1,89, 86, 91, -1,92, 78, 75, -1,92, 86, 90, -1,92, 90, 93, -1,78, 92, + 94, -1,89, 95, 90, -1,92, 75, 86, -1,96, 97, 98, -1,97, 96, 99, -1,100, 97, 101, -1, + 97, 100, 98, -1,95, 102, 103, -1,102, 95, 96, -1,98, 102, 96, -1,102, 98, 104, -1, + 98, 100, 105, -1,96, 95, 89, -1,89, 106, 96, -1,90, 95, 107, -1,88, 108, 109, -1, + 110, 111, 112, -1,113, 108, 112, -1,110, 114, 111, -1,115, 114, 116, -1,117, 118, + 119, -1,120, 119, 121, -1,122, 117, 123, -1,124, 116, 125, -1,126, 100, 113, -1,113, + 112, 111, -1,127, 111, 115, -1,115, 128, 129, -1,129, 130, 131, -1,132, 115, 129, -1, + 114, 115, 111, -1,133, 113, 111, -1,120, 134, 135, -1,136, 137, 138, -1,139, 131, + 138, -1,140, 138, 131, -1,141, 137, 142, -1,137, 143, 142, -1,142, 144, 122, -1,145, + 142, 122, -1,123, 146, 122, -1,147, 138, 137, -1,125, 135, 148, -1,149, 129, 131, -1, + 123, 150, 146, -1,151, 113, 100, -1,145, 122, 146, -1,94, 93, 152, -1,94, 92, 93, -1, + 107, 103, 153, -1,107, 95, 103, -1,103, 102, 104, -1,103, 104, 154, -1,90, 107, 93, -1, + 93, 107, 155, -1,105, 126, 156, -1,126, 105, 100, -1,105, 156, 157, -1,156, 126, + 133, -1,156, 133, 158, -1,157, 156, 159, -1,126, 113, 133, -1,105, 157, 104, -1,98, + 105, 104, -1,104, 157, 160, -1,161, 162, 93, -1,163, 94, 162, -1,164, 165, 166, -1, + 166, 167, 168, -1,156, 169, 165, -1,167, 170, 171, -1,158, 172, 169, -1,170, 161, + 107, -1,156, 158, 169, -1,133, 127, 158, -1,94, 163, 78, -1,127, 132, 173, -1,132, + 127, 115, -1,127, 173, 174, -1,173, 132, 149, -1,173, 149, 175, -1,174, 176, 177, -1, + 132, 129, 149, -1,178, 158, 174, -1,139, 147, 179, -1,147, 139, 138, -1,141, 147, + 137, -1,179, 147, 180, -1,139, 179, 175, -1,141, 181, 147, -1,182, 141, 145, -1,183, + 179, 184, -1,141, 142, 145, -1,139, 175, 149, -1,149, 131, 139, -1,176, 183, 185, -1, + 186, 187, 175, -1,174, 188, 178, -1,188, 173, 187, -1,158, 178, 172, -1,180, 181, + 189, -1,181, 180, 147, -1,182, 181, 141, -1,181, 182, 190, -1,191, 192, 180, -1,190, + 191, 181, -1,190, 182, 193, -1,192, 186, 179, -1,180, 194, 179, -1,182, 145, 195, -1, + 174, 158, 127, -1,133, 111, 127, -1,195, 145, 146, -1,196, 197, 198, -1,150, 199, + 200, -1,199, 150, 201, -1,202, 199, 203, -1,199, 202, 204, -1,197, 205, 206, -1,150, + 195, 146, -1,207, 208, 209, -1,210, 211, 205, -1,212, 213, 210, -1,212, 214, 215, -1, + 216, 208, 202, -1,202, 208, 217, -1,195, 218, 219, -1,195, 150, 218, -1,200, 204, + 220, -1,200, 199, 204, -1,204, 202, 217, -1,204, 217, 221, -1,150, 200, 218, -1,218, + 200, 222, -1,207, 223, 224, -1,223, 207, 225, -1,226, 223, 227, -1,223, 226, 228, -1, + 229, 224, 230, -1,224, 229, 207, -1,228, 224, 223, -1,224, 228, 231, -1,226, 232, + 228, -1,207, 229, 217, -1,208, 207, 217, -1,217, 229, 233, -1,214, 234, 226, -1,150, + 123, 196, -1,235, 232, 234, -1,236, 237, 238, -1,232, 235, 238, -1,239, 236, 240, -1, + 241, 242, 243, -1,244, 243, 245, -1,246, 247, 245, -1,248, 240, 242, -1,232, 237, + 249, -1,232, 238, 237, -1,250, 251, 237, -1,237, 252, 249, -1,250, 253, 254, -1,254, + 255, 250, -1,256, 250, 237, -1,249, 228, 232, -1,257, 258, 259, -1,259, 254, 260, -1, + 261, 262, 258, -1,263, 259, 258, -1,264, 262, 265, -1,262, 266, 265, -1,267, 265, + 268, -1,258, 262, 269, -1,270, 254, 259, -1,246, 268, 265, -1,264, 265, 267, -1,232, + 226, 234, -1,228, 249, 271, -1,272, 219, 193, -1,272, 195, 219, -1,222, 220, 273, -1, + 222, 200, 220, -1,220, 204, 221, -1,220, 221, 274, -1,218, 222, 219, -1,219, 222, + 275, -1,229, 230, 233, -1,233, 221, 217, -1,230, 231, 276, -1,230, 224, 231, -1,231, + 228, 271, -1,231, 271, 277, -1,252, 278, 271, -1,279, 230, 280, -1,252, 271, 249, -1, + 221, 279, 281, -1,193, 219, 275, -1,282, 283, 220, -1,282, 221, 284, -1,275, 222, + 283, -1,230, 285, 286, -1,286, 284, 233, -1,231, 277, 285, -1,287, 277, 271, -1,271, + 288, 287, -1,278, 289, 288, -1,288, 271, 278, -1,252, 251, 278, -1,272, 193, 182, -1, + 251, 255, 290, -1,255, 251, 250, -1,251, 290, 291, -1,290, 255, 270, -1,290, 270, + 292, -1,291, 290, 293, -1,255, 254, 270, -1,291, 294, 278, -1,263, 269, 295, -1,269, + 263, 258, -1,264, 269, 262, -1,295, 269, 296, -1,263, 295, 292, -1,264, 297, 269, -1, + 297, 264, 298, -1,292, 295, 299, -1,264, 267, 298, -1,263, 292, 270, -1,270, 259, + 263, -1,290, 292, 300, -1,301, 302, 290, -1,303, 295, 304, -1,301, 305, 303, -1,302, + 289, 291, -1,306, 296, 297, -1,297, 296, 269, -1,307, 297, 298, -1,308, 297, 307, -1, + 296, 308, 304, -1,295, 296, 309, -1,291, 278, 251, -1,252, 237, 251, -1,195, 272, + 182, -1,310, 311, 312, -1,312, 311, 313, -1,314, 311, 315, -1,314, 316, 317, -1,311, + 314, 318, -1,315, 316, 314, -1,318, 313, 311, -1,315, 319, 316, -1,319, 320, 321, -1, + 322, 323, 324, -1,320, 322, 325, -1,321, 325, 326, -1,321, 320, 325, -1,323, 327, + 324, -1,324, 325, 322, -1,327, 328, 329, -1,324, 327, 329, -1,327, 323, 330, -1,325, + 324, 331, -1,319, 321, 316, -1,316, 321, 332, -1,318, 333, 313, -1,317, 334, 335, -1, + 318, 314, 335, -1,317, 335, 314, -1,317, 336, 334, -1,332, 337, 317, -1,338, 339, + 332, -1,326, 340, 338, -1,338, 332, 326, -1,339, 341, 332, -1,332, 317, 316, -1,342, + 343, 326, -1,332, 321, 326, -1,344, 331, 329, -1,345, 346, 347, -1,325, 331, 326, -1, + 329, 346, 348, -1,349, 326, 343, -1,326, 331, 342, -1,346, 345, 348, -1,347, 346, + 350, -1,326, 349, 340, -1,324, 329, 331, -1,351, 329, 348, -1,328, 327, 330, -1,352, + 353, 328, -1,353, 354, 355, -1,356, 354, 357, -1,328, 346, 329, -1,346, 328, 355, -1, + 346, 355, 358, -1,356, 355, 354, -1,359, 356, 357, -1,360, 355, 356, -1,328, 353, + 355, -1,359, 361, 356, -1,357, 362, 359, -1,352, 328, 330, -1,362, 363, 364, -1,365, + 366, 367, -1,363, 365, 368, -1,369, 359, 364, -1,364, 363, 368, -1,366, 370, 367, -1, + 367, 368, 365, -1,371, 370, 372, -1,373, 368, 367, -1,370, 366, 374, -1,375, 364, + 368, -1,362, 364, 359, -1,371, 367, 370, -1,360, 376, 358, -1,360, 358, 355, -1,377, + 361, 378, -1,360, 361, 379, -1,360, 356, 361, -1,377, 379, 361, -1,360, 380, 381, -1, + 358, 382, 346, -1,383, 378, 361, -1,360, 379, 380, -1,383, 361, 384, -1,346, 382, + 385, -1,386, 369, 375, -1,375, 369, 364, -1,373, 371, 387, -1,371, 373, 367, -1,375, + 368, 373, -1,375, 373, 388, -1,389, 388, 373, -1,390, 391, 373, -1,387, 390, 373, -1, + 389, 373, 391, -1,371, 392, 387, -1,384, 361, 369, -1,361, 359, 369, -1,375, 388, + 393, -1,394, 371, 395, -1,346, 385, 350, -1,317, 337, 336, -1,337, 332, 341, -1,335, + 334, 396, -1,397, 337, 341, -1,398, 341, 399, -1,339, 399, 341, -1,341, 398, 397, -1, + 344, 400, 401, -1,344, 401, 331, -1,351, 344, 329, -1,402, 344, 351, -1,331, 403, + 342, -1,344, 402, 404, -1,405, 406, 403, -1,405, 403, 401, -1,401, 403, 331, -1,407, + 408, 409, -1,410, 411, 405, -1,397, 407, 409, -1,412, 409, 408, -1,413, 410, 405, -1, + 406, 405, 411, -1,407, 397, 398, -1,414, 400, 344, -1,414, 415, 400, -1,400, 415, + 416, -1,417, 418, 419, -1,419, 418, 420, -1,420, 421, 419, -1,405, 401, 400, -1,414, + 344, 404, -1,382, 422, 420, -1,376, 423, 424, -1,376, 424, 358, -1,381, 376, 360, -1, + 425, 376, 381, -1,376, 425, 423, -1,426, 384, 427, -1,428, 429, 426, -1,430, 423, + 425, -1,428, 427, 386, -1,386, 427, 369, -1,392, 371, 394, -1,375, 393, 386, -1,393, + 431, 386, -1,432, 392, 394, -1,433, 432, 394, -1,431, 434, 386, -1,394, 435, 433, -1, + 428, 426, 427, -1,369, 427, 384, -1,420, 436, 421, -1,430, 437, 423, -1,422, 436, + 420, -1,423, 422, 424, -1,423, 438, 439, -1,438, 423, 437, -1,440, 441, 428, -1,439, + 440, 428, -1,423, 439, 428, -1,434, 442, 443, -1,444, 445, 435, -1,386, 443, 428, -1, + 444, 443, 446, -1,443, 444, 435, -1,446, 443, 447, -1,442, 447, 443, -1,445, 433, + 435, -1,428, 441, 429, -1,386, 434, 443, -1,435, 394, 448, -1,382, 424, 422, -1,358, + 424, 382, -1,335, 396, 318, -1,372, 370, 374, -1,333, 312, 313, -1,372, 374, 449, -1, + 449, 374, 450, -1,451, 450, 452, -1,453, 452, 454, -1,455, 395, 449, -1,449, 395, + 372, -1,456, 449, 451, -1,453, 451, 452, -1,449, 450, 451, -1,453, 457, 451, -1,454, + 458, 453, -1,372, 395, 371, -1,459, 460, 461, -1,461, 462, 463, -1,464, 465, 462, -1, + 466, 453, 458, -1,458, 460, 459, -1,462, 465, 463, -1,463, 459, 461, -1,467, 468, + 465, -1,469, 459, 463, -1,467, 465, 464, -1,470, 458, 459, -1,460, 458, 454, -1,468, + 463, 465, -1,455, 456, 471, -1,456, 455, 449, -1,472, 457, 473, -1,466, 457, 453, -1, + 456, 451, 457, -1,456, 457, 472, -1,474, 471, 456, -1,475, 476, 456, -1,472, 475, + 456, -1,474, 456, 476, -1,477, 457, 466, -1,395, 455, 478, -1,470, 479, 480, -1,481, + 479, 470, -1,481, 470, 469, -1,468, 469, 463, -1,470, 459, 469, -1,482, 483, 469, -1, + 480, 484, 470, -1,469, 483, 481, -1,468, 485, 469, -1,484, 486, 470, -1,487, 488, + 468, -1,466, 470, 486, -1,466, 458, 470, -1,488, 487, 489, -1,467, 464, 490, -1,491, + 455, 471, -1,492, 493, 494, -1,495, 494, 496, -1,497, 496, 498, -1,467, 492, 499, -1, + 492, 467, 493, -1,495, 497, 500, -1,497, 495, 496, -1,501, 497, 498, -1,497, 501, + 502, -1,492, 494, 495, -1,492, 495, 503, -1,498, 504, 501, -1,493, 467, 490, -1,504, + 505, 506, -1,507, 508, 509, -1,505, 509, 510, -1,506, 510, 511, -1,506, 505, 510, -1, + 512, 509, 513, -1,512, 511, 510, -1,513, 509, 508, -1,513, 514, 512, -1,504, 506, + 501, -1,501, 506, 515, -1,487, 499, 516, -1,487, 467, 499, -1,517, 503, 500, -1,503, + 495, 500, -1,492, 503, 499, -1,516, 499, 518, -1,519, 520, 487, -1,487, 516, 521, -1, + 521, 519, 487, -1,499, 503, 522, -1,500, 523, 524, -1,487, 520, 489, -1,525, 502, + 526, -1,502, 501, 515, -1,511, 515, 506, -1,500, 497, 502, -1,511, 527, 528, -1,500, + 529, 523, -1,525, 529, 500, -1,530, 502, 515, -1,511, 528, 515, -1,512, 527, 511, -1, + 513, 508, 514, -1,500, 502, 525, -1,512, 510, 509, -1,467, 487, 468, -1,500, 524, + 517, -1,478, 531, 435, -1,448, 395, 478, -1,457, 532, 473, -1,455, 491, 478, -1,533, + 531, 478, -1,534, 473, 532, -1,533, 478, 491, -1,534, 532, 535, -1,531, 536, 435, -1, + 466, 486, 477, -1,537, 538, 539, -1,539, 469, 485, -1,539, 482, 469, -1,486, 540, + 477, -1,538, 482, 539, -1,537, 541, 538, -1,542, 477, 540, -1,539, 485, 537, -1,542, + 532, 477, -1,457, 477, 532, -1,543, 535, 544, -1,542, 540, 545, -1,532, 542, 544, -1, + 546, 547, 544, -1,543, 544, 548, -1,535, 532, 544, -1,548, 544, 547, -1,544, 435, + 546, -1,545, 549, 542, -1,546, 435, 536, -1,550, 541, 537, -1,551, 552, 553, -1,552, + 554, 555, -1,549, 556, 542, -1,557, 558, 537, -1,537, 558, 550, -1,557, 537, 542, -1, + 556, 557, 542, -1,553, 537, 485, -1,551, 553, 485, -1,478, 435, 448, -1,518, 559, + 560, -1,559, 499, 522, -1,559, 518, 499, -1,561, 562, 559, -1,488, 551, 485, -1,559, + 562, 560, -1,563, 564, 522, -1,559, 522, 565, -1,503, 563, 522, -1,488, 485, 468, -1, + 502, 530, 566, -1,566, 526, 502, -1,530, 515, 567, -1,568, 526, 566, -1,566, 569, + 568, -1,515, 528, 567, -1,530, 567, 528, -1,563, 503, 517, -1,566, 530, 569, -1,554, + 570, 571, -1,572, 573, 561, -1,565, 561, 559, -1,571, 570, 574, -1,561, 573, 562, -1, + 561, 575, 572, -1,571, 555, 554, -1,576, 565, 522, -1,576, 577, 565, -1,578, 579, + 580, -1,579, 578, 569, -1,580, 579, 581, -1,578, 568, 569, -1,577, 582, 565, -1,576, + 522, 564, -1,554, 552, 551, -1,395, 448, 394, -1,337, 334, 336, -1,583, 584, 585, -1, + 586, 587, 588, -1,589, 588, 590, -1,585, 591, 583, -1,587, 590, 588, -1,592, 591, + 593, -1,594, 584, 595, -1,583, 591, 592, -1,590, 592, 593, -1,593, 589, 590, -1,584, + 583, 595, -1,596, 597, 598, -1,599, 600, 598, -1,596, 601, 597, -1,602, 603, 601, -1, + 601, 596, 604, -1,595, 600, 605, -1,605, 594, 595, -1,600, 599, 606, -1,607, 605, + 600, -1,608, 602, 604, -1,596, 598, 604, -1,603, 602, 608, -1,606, 607, 600, -1,601, + 604, 602, -1,599, 598, 597, -1,609, 610, 611, -1,610, 612, 611, -1,613, 614, 615, -1, + 611, 616, 609, -1,614, 609, 616, -1,617, 613, 615, -1,618, 619, 620, -1,621, 620, + 622, -1,623, 611, 612, -1,624, 615, 616, -1,614, 616, 615, -1,615, 624, 625, -1,626, + 615, 625, -1,623, 624, 616, -1,616, 611, 623, -1,620, 627, 628, -1,626, 617, 615, -1, + 629, 630, 631, -1,631, 632, 629, -1,626, 632, 631, -1,619, 630, 629, -1,617, 626, + 631, -1,628, 618, 620, -1,633, 621, 622, -1,632, 626, 634, -1,619, 618, 630, -1,632, + 619, 629, -1,627, 620, 621, -1,625, 634, 626, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,636, 637, 638, -1,639, 640, 641, -1, + 642, 643, 644, -1,645, 643, 646, -1,638, 642, 636, -1,645, 644, 643, -1,647, 648, + 649, -1,644, 636, 642, -1,637, 636, 640, -1,639, 637, 640, -1,640, 650, 641, -1,649, + 651, 647, -1,652, 649, 648, -1,648, 650, 652, -1,653, 651, 649, -1,654, 655, 656, -1, + 651, 653, 656, -1,648, 641, 650, -1,657, 653, 649, -1,657, 649, 652, -1,657, 658, + 653, -1,659, 654, 658, -1,653, 658, 654, -1,655, 654, 659, -1,654, 656, 653, -1,660, + 661, 662, -1,661, 663, 662, -1,664, 660, 665, -1,665, 666, 664, -1,660, 662, 665, -1, + 667, 666, 668, -1,669, 670, 671, -1,672, 662, 663, -1,673, 674, 675, -1,676, 668, + 665, -1,666, 665, 668, -1,668, 676, 677, -1,677, 667, 668, -1,672, 676, 665, -1,665, + 662, 672, -1,677, 678, 667, -1,670, 678, 679, -1,667, 678, 670, -1,671, 674, 673, -1, + 680, 681, 682, -1,682, 683, 680, -1,684, 685, 683, -1,671, 670, 679, -1,674, 685, + 675, -1,673, 669, 671, -1,682, 684, 683, -1,677, 679, 678, -1,685, 674, 683, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,686, + 687, 688, -1,689, 690, 691, -1,689, 691, 692, -1,690, 693, 694, -1,695, 696, 697, -1, + 693, 698, 697, -1,699, 692, 700, -1,687, 686, 699, -1,692, 699, 689, -1,690, 689, + 693, -1,700, 687, 699, -1,698, 695, 697, -1,701, 702, 703, -1,704, 703, 696, -1,702, + 696, 703, -1,705, 702, 701, -1,706, 705, 701, -1,707, 706, 708, -1,695, 698, 704, -1, + 709, 701, 703, -1,694, 693, 697, -1,709, 703, 704, -1,709, 710, 701, -1,711, 708, + 710, -1,701, 710, 708, -1,707, 708, 711, -1,708, 706, 701, -1,696, 695, 704, -1,712, + 707, 713, -1,707, 714, 713, -1,715, 716, 712, -1,717, 716, 718, -1,715, 718, 716, -1, + 713, 715, 712, -1,719, 715, 713, -1,719, 713, 714, -1,717, 718, 720, -1,721, 720, + 718, -1,718, 722, 721, -1,720, 721, 723, -1,715, 719, 722, -1,722, 718, 715, -1,724, + 725, 726, -1,726, 727, 724, -1,727, 728, 729, -1,730, 724, 731, -1,727, 729, 723, -1, + 724, 730, 725, -1,728, 727, 726, -1,732, 733, 734, -1,731, 733, 732, -1,731, 732, + 730, -1,729, 720, 723, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,735, 736, 737, -1,738, 739, 740, -1,740, 741, 738, -1,738, + 742, 739, -1,743, 744, 739, -1,745, 741, 740, -1,742, 743, 739, -1,746, 747, 737, -1, + 748, 747, 746, -1,745, 737, 741, -1,737, 745, 735, -1,741, 742, 738, -1,742, 749, + 743, -1,746, 737, 736, -1,750, 751, 752, -1,743, 753, 750, -1,752, 744, 750, -1,754, + 751, 750, -1,755, 751, 754, -1,756, 755, 757, -1,743, 749, 753, -1,758, 754, 750, -1, + 758, 750, 753, -1,758, 759, 754, -1,760, 757, 759, -1,754, 759, 757, -1,756, 757, + 760, -1,757, 755, 754, -1,750, 744, 743, -1,761, 756, 762, -1,756, 763, 762, -1,764, + 765, 761, -1,766, 765, 767, -1,764, 767, 765, -1,768, 761, 762, -1,764, 761, 768, -1, + 769, 770, 771, -1,768, 762, 763, -1,770, 772, 771, -1,766, 770, 769, -1,767, 770, + 766, -1,770, 773, 772, -1,764, 768, 767, -1,774, 773, 775, -1,776, 777, 778, -1,779, + 773, 774, -1,775, 780, 774, -1,781, 780, 775, -1,781, 775, 782, -1,782, 783, 784, -1, + 783, 785, 784, -1,776, 778, 783, -1,783, 778, 785, -1,781, 782, 784, -1,779, 772, + 773, -1,786, 787, 635, -1,788, 786, 786, -1,786, 635, 789, -1,790, 787, 791, -1,635, + 787, 790, -1,792, 635, 635, -1,786, 788, 635, -1,635, 635, 789, -1,793, 794, 789, -1, + 794, 793, 795, -1,796, 792, 797, -1,796, 635, 792, -1,635, 793, 789, -1,788, 786, + 789, -1,798, 799, 800, -1,801, 801, 801, -1,799, 802, 803, -1,802, 801, 804, -1,805, + 806, 807, -1,808, 805, 807, -1,809, 810, 800, -1,811, 807, 810, -1,812, 808, 807, -1, + 799, 813, 800, -1,804, 803, 802, -1,814, 807, 811, -1,813, 809, 800, -1,803, 813, + 799, -1,815, 812, 807, -1,815, 814, 816, -1,807, 814, 815, -1,817, 818, 815, -1,816, + 817, 815, -1,811, 810, 809, -1,804, 801, 801, -1,819, 820, 821, -1,822, 823, 824, -1, + 801, 801, 824, -1,823, 801, 824, -1,801, 824, 801, -1,819, 821, 825, -1,821, 826, + 827, -1,827, 825, 821, -1,825, 828, 819, -1,829, 824, 801, -1,824, 829, 828, -1,829, + 819, 828, -1,825, 830, 828, -1,831, 832, 833, -1,834, 835, 836, -1,832, 834, 837, -1, + 838, 832, 837, -1,832, 838, 833, -1,839, 835, 840, -1,835, 839, 836, -1,841, 837, + 834, -1,841, 834, 836, -1,835, 842, 840, -1,831, 833, 843, -1,842, 844, 845, -1,846, + 847, 848, -1,844, 847, 846, -1,845, 849, 850, -1,845, 844, 849, -1,851, 852, 853, -1, + 846, 849, 844, -1,847, 852, 854, -1,849, 846, 850, -1,840, 842, 855, -1,855, 842, + 845, -1,856, 857, 858, -1,843, 833, 838, -1,859, 856, 860, -1,841, 836, 839, -1,837, + 841, 838, -1,857, 861, 862, -1,863, 840, 855, -1,861, 864, 865, -1,850, 846, 866, -1, + 845, 850, 855, -1,840, 863, 839, -1,858, 860, 856, -1,848, 854, 867, -1,854, 848, + 847, -1,851, 868, 869, -1,868, 851, 853, -1,854, 852, 851, -1,854, 851, 870, -1,862, + 861, 871, -1,867, 854, 870, -1,869, 872, 873, -1,869, 870, 851, -1,872, 869, 868, -1, + 865, 871, 861, -1,868, 853, 872, -1,848, 867, 866, -1,846, 848, 866, -1,853, 874, + 872, -1,875, 874, 876, -1,877, 878, 879, -1,880, 876, 878, -1,881, 879, 882, -1,883, + 884, 885, -1,884, 883, 882, -1,879, 884, 882, -1,879, 881, 886, -1,885, 884, 859, -1, + 859, 884, 887, -1,888, 887, 889, -1,864, 889, 890, -1,891, 864, 890, -1,875, 892, + 893, -1,875, 876, 892, -1,880, 894, 895, -1,880, 878, 894, -1,876, 880, 892, -1,892, + 880, 895, -1,893, 873, 875, -1,896, 895, 894, -1,893, 892, 895, -1,894, 877, 896, -1, + 873, 872, 875, -1,879, 897, 877, -1,879, 898, 897, -1,898, 886, 899, -1,894, 878, + 877, -1,898, 900, 897, -1,900, 898, 899, -1,877, 897, 896, -1,886, 898, 879, -1,875, + 872, 874, -1,901, 902, 903, -1,904, 902, 901, -1,903, 902, 905, -1,906, 907, 908, -1, + 907, 909, 904, -1,910, 908, 911, -1,912, 913, 902, -1,914, 911, 915, -1,913, 916, + 917, -1,916, 913, 918, -1,919, 905, 902, -1,919, 913, 917, -1,919, 917, 920, -1,905, + 919, 921, -1,916, 922, 917, -1,919, 902, 913, -1,923, 924, 925, -1,924, 923, 926, -1, + 927, 924, 928, -1,924, 927, 925, -1,922, 929, 930, -1,929, 922, 923, -1,925, 929, + 923, -1,929, 925, 931, -1,925, 927, 932, -1,923, 922, 916, -1,916, 933, 923, -1,917, + 922, 934, -1,915, 935, 936, -1,937, 938, 939, -1,940, 935, 939, -1,937, 941, 938, -1, + 942, 941, 943, -1,944, 945, 946, -1,947, 946, 948, -1,949, 944, 950, -1,951, 943, + 952, -1,953, 927, 940, -1,940, 939, 938, -1,954, 938, 942, -1,942, 955, 956, -1,956, + 957, 958, -1,959, 942, 956, -1,941, 942, 938, -1,960, 940, 938, -1,947, 961, 962, -1, + 963, 964, 965, -1,966, 958, 965, -1,967, 965, 958, -1,968, 964, 969, -1,964, 970, + 969, -1,969, 971, 949, -1,972, 969, 949, -1,950, 973, 949, -1,974, 965, 964, -1,952, + 962, 975, -1,976, 956, 958, -1,950, 977, 973, -1,978, 940, 927, -1,972, 949, 973, -1, + 921, 920, 979, -1,921, 919, 920, -1,934, 980, 981, -1,934, 922, 930, -1,930, 929, + 931, -1,980, 982, 983, -1,917, 934, 920, -1,920, 934, 984, -1,932, 953, 985, -1,953, + 932, 927, -1,932, 985, 986, -1,985, 953, 960, -1,985, 960, 987, -1,988, 985, 989, -1, + 953, 940, 960, -1,932, 986, 931, -1,925, 932, 931, -1,982, 988, 990, -1,991, 992, + 993, -1,994, 921, 992, -1,986, 995, 996, -1,996, 997, 931, -1,985, 998, 995, -1,997, + 999, 930, -1,987, 1000, 998, -1,999, 991, 934, -1,985, 987, 998, -1,960, 954, 987, -1, + 921, 994, 905, -1,954, 959, 1001, -1,959, 954, 942, -1,954, 1001, 1002, -1,1001, + 959, 976, -1,1001, 976, 1003, -1,1002, 1004, 1005, -1,959, 956, 976, -1,1006, 987, + 1002, -1,966, 974, 1007, -1,974, 966, 965, -1,968, 974, 964, -1,1007, 974, 1008, -1, + 966, 1007, 1003, -1,968, 1009, 974, -1,1010, 968, 972, -1,1011, 1007, 1012, -1,968, + 969, 972, -1,966, 1003, 976, -1,976, 958, 966, -1,1004, 1011, 1013, -1,1014, 1015, + 1003, -1,1002, 1016, 1006, -1,1016, 1001, 1015, -1,987, 1006, 1000, -1,1008, 1009, + 1017, -1,1009, 1008, 974, -1,1010, 1009, 968, -1,1009, 1010, 1018, -1,1019, 1020, + 1021, -1,1022, 1019, 1009, -1,1022, 1010, 1023, -1,1020, 1014, 1007, -1,1008, 1024, + 1007, -1,1010, 972, 1025, -1,1002, 987, 954, -1,960, 938, 954, -1,1025, 972, 973, -1, + 1026, 1027, 1028, -1,977, 1029, 1030, -1,1029, 977, 1031, -1,1032, 1029, 1033, -1, + 1029, 1032, 1034, -1,1027, 1035, 1036, -1,977, 1025, 973, -1,1037, 1038, 1039, -1, + 1040, 1041, 1035, -1,1042, 1043, 1040, -1,1042, 1044, 1045, -1,1046, 1038, 1032, -1, + 1032, 1038, 1047, -1,1025, 1048, 1049, -1,1025, 977, 1048, -1,1030, 1034, 1050, -1, + 1030, 1029, 1034, -1,1034, 1032, 1047, -1,1034, 1047, 1051, -1,977, 1030, 1048, -1, + 1048, 1030, 1052, -1,1037, 1053, 1054, -1,1053, 1037, 1055, -1,1056, 1053, 1057, -1, + 1053, 1056, 1058, -1,1059, 1054, 1060, -1,1054, 1059, 1037, -1,1058, 1054, 1053, -1, + 1054, 1058, 1061, -1,1056, 1062, 1058, -1,1037, 1059, 1047, -1,1038, 1037, 1047, -1, + 1047, 1059, 1063, -1,1044, 1064, 1056, -1,977, 950, 1026, -1,1065, 1062, 1064, -1, + 1066, 1067, 1068, -1,1062, 1065, 1068, -1,1069, 1066, 1070, -1,1071, 1072, 1073, -1, + 1074, 1073, 1075, -1,1076, 1077, 1075, -1,1078, 1070, 1072, -1,1062, 1067, 1079, -1, + 1062, 1068, 1067, -1,1080, 1081, 1067, -1,1067, 1082, 1079, -1,1080, 1083, 1084, -1, + 1084, 1085, 1080, -1,1086, 1080, 1067, -1,1079, 1058, 1062, -1,1087, 1088, 1089, -1, + 1089, 1084, 1090, -1,1091, 1092, 1088, -1,1093, 1089, 1088, -1,1094, 1092, 1095, -1, + 1092, 1096, 1095, -1,1097, 1095, 1098, -1,1088, 1092, 1099, -1,1100, 1084, 1089, -1, + 1076, 1098, 1095, -1,1094, 1095, 1097, -1,1062, 1056, 1064, -1,1058, 1079, 1101, -1, + 1102, 1049, 1023, -1,1102, 1025, 1049, -1,1052, 1050, 1103, -1,1052, 1030, 1050, -1, + 1050, 1034, 1051, -1,1050, 1104, 1105, -1,1048, 1052, 1049, -1,1049, 1052, 1106, -1, + 1059, 1060, 1063, -1,1063, 1104, 1047, -1,1107, 1061, 1108, -1,1060, 1054, 1061, -1, + 1061, 1058, 1101, -1,1061, 1101, 1109, -1,1082, 1110, 1101, -1,1111, 1107, 1112, -1, + 1082, 1101, 1079, -1,1104, 1111, 1113, -1,1023, 1049, 1114, -1,1051, 1115, 1116, -1, + 1050, 1116, 1117, -1,1114, 1052, 1117, -1,1060, 1118, 1119, -1,1119, 1115, 1063, -1, + 1061, 1109, 1118, -1,1120, 1109, 1101, -1,1101, 1121, 1120, -1,1110, 1122, 1121, -1, + 1121, 1101, 1110, -1,1082, 1081, 1110, -1,1102, 1023, 1010, -1,1081, 1085, 1123, -1, + 1085, 1081, 1080, -1,1081, 1123, 1124, -1,1123, 1085, 1100, -1,1123, 1100, 1125, -1, + 1126, 1127, 1128, -1,1085, 1084, 1100, -1,1126, 1129, 1110, -1,1093, 1099, 1130, -1, + 1099, 1093, 1088, -1,1094, 1099, 1092, -1,1130, 1099, 1131, -1,1093, 1130, 1125, -1, + 1094, 1132, 1099, -1,1132, 1094, 1133, -1,1134, 1130, 1135, -1,1094, 1097, 1133, -1, + 1093, 1125, 1100, -1,1100, 1089, 1093, -1,1127, 1134, 1136, -1,1137, 1138, 1123, -1, + 1139, 1130, 1140, -1,1137, 1125, 1139, -1,1138, 1122, 1124, -1,1141, 1131, 1132, -1, + 1132, 1131, 1099, -1,1142, 1132, 1133, -1,1143, 1132, 1142, -1,1144, 1143, 1140, -1, + 1130, 1131, 1145, -1,1124, 1110, 1081, -1,1082, 1067, 1081, -1,1025, 1102, 1010, -1, + 1146, 1147, 1148, -1,1149, 1148, 1150, -1,1148, 1151, 1146, -1,1152, 1151, 1148, -1, + 1151, 1152, 1153, -1,1154, 1155, 1148, -1,1149, 1150, 1156, -1,1157, 1158, 1159, -1, + 1160, 1161, 1162, -1,1161, 1163, 1159, -1,1162, 1164, 1165, -1,1166, 1158, 1157, -1, + 1158, 1167, 1168, -1,1169, 1161, 1160, -1,1163, 1161, 1170, -1,1162, 1171, 1160, -1, + 1172, 1165, 1164, -1,1173, 1157, 1159, -1,1174, 1157, 1173, -1,1164, 1175, 1172, -1, + 1158, 1168, 1150, -1,1176, 1150, 1168, -1,1177, 1150, 1176, -1,1167, 1158, 1178, -1, + 1178, 1158, 1166, -1,1179, 1168, 1180, -1,1152, 1155, 1153, -1,1149, 1181, 1154, -1, + 1177, 1156, 1150, -1,1156, 1182, 1149, -1,1157, 1183, 1166, -1,1176, 1168, 1179, -1, + 1169, 1184, 1161, -1,1185, 1171, 1162, -1,1186, 1165, 1172, -1,1162, 1165, 1185, -1, + 1159, 1163, 1170, -1,1187, 1188, 1189, -1,1157, 1174, 1183, -1,1161, 1184, 1170, -1, + 1186, 1172, 1189, -1,1190, 1169, 1160, -1,1190, 1160, 1171, -1,1187, 1189, 1172, -1, + 1191, 1192, 1175, -1,1193, 1194, 1195, -1,1192, 1196, 1197, -1,1198, 1195, 1199, -1, + 1200, 1201, 1197, -1,1202, 1175, 1192, -1,1197, 1196, 1200, -1,1192, 1194, 1196, -1, + 1195, 1203, 1193, -1,1204, 1194, 1193, -1,1201, 1192, 1197, -1,1193, 1203, 1205, -1, + 1198, 1199, 1206, -1,1191, 1175, 1164, -1,1207, 1208, 1209, -1,1209, 1208, 1199, -1, + 1210, 1209, 1211, -1,1212, 1211, 1213, -1,1214, 1213, 1215, -1,1210, 1216, 1209, -1, + 1209, 1217, 1207, -1,1213, 1214, 1218, -1,1213, 1219, 1212, -1,1215, 1220, 1214, -1, + 1221, 1222, 1210, -1,1221, 1210, 1211, -1,1223, 1224, 1225, -1,1226, 1199, 1208, -1, + 1207, 1227, 1208, -1,1228, 1206, 1199, -1,1229, 1194, 1204, -1,1196, 1194, 1230, -1, + 1202, 1231, 1175, -1,1193, 1205, 1204, -1,1195, 1198, 1232, -1,1233, 1175, 1231, -1, + 1230, 1194, 1229, -1,1201, 1202, 1192, -1,1199, 1226, 1228, -1,1234, 1214, 1220, -1, + 1220, 1215, 1223, -1,1217, 1209, 1216, -1,1216, 1210, 1235, -1,1210, 1222, 1235, -1, + 1212, 1219, 1211, -1,1236, 1214, 1234, -1,1208, 1227, 1226, -1,1206, 1232, 1198, -1, + 1233, 1172, 1175, -1,1214, 1236, 1218, -1,1156, 1237, 1238, -1,1156, 1239, 1237, -1, + 1240, 1174, 1173, -1,1170, 1173, 1159, -1,1240, 1173, 1241, -1,1237, 1239, 1242, -1, + 1241, 1243, 1240, -1,1244, 1245, 1243, -1,1246, 1173, 1170, -1,1247, 1242, 1248, -1, + 1187, 1249, 1250, -1,1233, 1187, 1172, -1,1231, 1251, 1252, -1,1250, 1249, 1253, -1, + 1188, 1187, 1250, -1,1187, 1233, 1252, -1,1184, 1246, 1170, -1,1254, 1255, 1253, -1, + 1256, 1257, 1258, -1,1231, 1252, 1233, -1,1246, 1184, 1257, -1,1259, 1256, 1258, -1, + 1260, 1247, 1261, -1,1182, 1262, 1181, -1,1247, 1248, 1261, -1,1244, 1260, 1263, -1, + 1260, 1244, 1247, -1,1263, 1245, 1244, -1,1244, 1241, 1264, -1,1247, 1244, 1237, -1, + 1247, 1237, 1242, -1,1241, 1244, 1243, -1,1257, 1264, 1246, -1,1257, 1256, 1264, -1, + 1265, 1256, 1259, -1,1254, 1265, 1266, -1,1256, 1265, 1254, -1,1173, 1246, 1241, -1, + 1254, 1266, 1267, -1,1264, 1256, 1254, -1,1249, 1252, 1268, -1,1254, 1253, 1249, -1, + 1269, 1268, 1252, -1,1249, 1268, 1254, -1,1255, 1254, 1267, -1,1187, 1252, 1249, -1, + 1246, 1264, 1241, -1,1148, 1155, 1152, -1,1252, 1251, 1269, -1,1181, 1149, 1182, -1, + 1270, 1205, 1203, -1,1271, 1272, 1206, -1,1203, 1273, 1270, -1,1203, 1195, 1232, -1, + 1206, 1272, 1232, -1,1274, 1270, 1273, -1,1232, 1275, 1203, -1,1274, 1276, 1277, -1, + 1271, 1278, 1279, -1,1280, 1281, 1282, -1,1218, 1283, 1219, -1,1218, 1219, 1213, -1, + 1283, 1236, 1284, -1,1221, 1280, 1282, -1,1221, 1211, 1219, -1,1236, 1283, 1218, -1, + 1285, 1221, 1219, -1,1284, 1286, 1283, -1,1287, 1288, 1281, -1,1286, 1289, 1290, -1, + 1222, 1221, 1282, -1,1291, 1279, 1278, -1,1292, 1269, 1293, -1,1269, 1292, 1294, -1, + 1269, 1295, 1276, -1,1294, 1295, 1269, -1,1272, 1275, 1232, -1,1276, 1295, 1296, -1, + 1276, 1273, 1275, -1,1276, 1296, 1277, -1,1275, 1272, 1279, -1,1275, 1273, 1203, -1, + 1279, 1272, 1271, -1,1275, 1279, 1287, -1,1274, 1273, 1276, -1,1269, 1276, 1268, -1, + 1279, 1297, 1287, -1,1281, 1280, 1287, -1,1221, 1285, 1280, -1,1297, 1298, 1287, -1, + 1279, 1291, 1299, -1,1287, 1298, 1288, -1,1280, 1300, 1287, -1,1300, 1280, 1285, -1, + 1300, 1283, 1290, -1,1283, 1300, 1285, -1,1283, 1286, 1290, -1,1219, 1283, 1285, -1, + 1238, 1262, 1182, -1,1290, 1301, 1302, -1,1297, 1279, 1299, -1,1289, 1301, 1290, -1, + 1293, 1269, 1251, -1,1156, 1238, 1182, -1,1224, 1223, 1215, -1,1149, 1154, 1148, -1, + 1224, 1215, 1303, -1,1215, 1304, 1305, -1,1306, 1304, 1307, -1,1308, 1307, 1309, -1, + 1303, 1215, 1310, -1,1215, 1305, 1310, -1,1307, 1308, 1311, -1,1307, 1312, 1306, -1, + 1309, 1313, 1308, -1,1304, 1312, 1314, -1,1314, 1305, 1304, -1,1313, 1309, 1315, -1, + 1309, 1316, 1315, -1,1317, 1318, 1319, -1,1319, 1316, 1309, -1,1320, 1321, 1322, -1, + 1317, 1321, 1323, -1,1324, 1325, 1322, -1,1317, 1323, 1326, -1,1319, 1327, 1316, -1, + 1320, 1322, 1328, -1,1329, 1324, 1322, -1,1324, 1329, 1330, -1,1320, 1331, 1321, -1, + 1332, 1323, 1321, -1,1329, 1333, 1330, -1,1319, 1309, 1317, -1,1325, 1334, 1322, -1, + 1335, 1310, 1305, -1,1308, 1313, 1336, -1,1327, 1319, 1318, -1,1314, 1337, 1305, -1, + 1312, 1304, 1306, -1,1337, 1335, 1305, -1,1308, 1338, 1311, -1,1338, 1308, 1336, -1, + 1339, 1337, 1314, -1,1320, 1328, 1340, -1,1341, 1324, 1330, -1,1333, 1341, 1330, -1, + 1318, 1317, 1342, -1,1317, 1326, 1342, -1,1326, 1323, 1332, -1,1343, 1344, 1345, -1, + 1340, 1331, 1320, -1,1333, 1329, 1345, -1,1328, 1322, 1334, -1,1345, 1329, 1343, -1, + 1303, 1225, 1224, -1,1346, 1347, 1343, -1,1348, 1349, 1350, -1,1351, 1352, 1353, -1, + 1347, 1354, 1355, -1,1356, 1350, 1357, -1,1358, 1343, 1355, -1,1355, 1343, 1347, -1, + 1359, 1360, 1350, -1,1350, 1361, 1348, -1,1357, 1359, 1356, -1,1362, 1363, 1357, -1, + 1349, 1354, 1347, -1,1364, 1349, 1348, -1,1357, 1365, 1362, -1,1346, 1343, 1329, -1, + 1352, 1365, 1366, -1,1168, 1167, 1180, -1,1367, 1368, 1369, -1,1370, 1371, 1372, -1, + 1368, 1371, 1373, -1,1366, 1368, 1374, -1,1375, 1366, 1374, -1,1376, 1352, 1366, -1, + 1374, 1368, 1373, -1,1368, 1367, 1377, -1,1372, 1368, 1377, -1,1371, 1368, 1372, -1, + 1362, 1365, 1378, -1,1351, 1365, 1352, -1,1354, 1379, 1355, -1,1380, 1349, 1364, -1, + 1361, 1381, 1348, -1,1349, 1380, 1354, -1,1355, 1382, 1358, -1,1350, 1360, 1361, -1, + 1356, 1359, 1350, -1,1362, 1383, 1363, -1,1358, 1382, 1384, -1,1364, 1348, 1381, -1, + 1379, 1382, 1355, -1,1385, 1365, 1351, -1,1352, 1376, 1386, -1,1386, 1353, 1352, -1, + 1366, 1387, 1376, -1,1365, 1385, 1378, -1,1362, 1388, 1383, -1,1375, 1387, 1366, -1, + 1389, 1375, 1374, -1,1372, 1377, 1370, -1,1362, 1378, 1388, -1,1344, 1343, 1390, -1, + 1339, 1391, 1392, -1,1339, 1314, 1312, -1,1338, 1393, 1311, -1,1394, 1312, 1311, -1, + 1312, 1307, 1311, -1,1311, 1393, 1394, -1,1391, 1339, 1290, -1,1395, 1396, 1397, -1, + 1337, 1339, 1392, -1,1393, 1397, 1394, -1,1398, 1399, 1400, -1,1340, 1401, 1331, -1, + 1402, 1332, 1331, -1,1332, 1321, 1331, -1,1331, 1401, 1403, -1,1400, 1326, 1404, -1, + 1401, 1405, 1403, -1,1406, 1407, 1408, -1,1405, 1409, 1410, -1,1399, 1398, 1411, -1, + 1332, 1404, 1326, -1,1412, 1302, 1301, -1,1302, 1412, 1413, -1,1312, 1414, 1339, -1, + 1415, 1396, 1395, -1,1290, 1413, 1416, -1,1396, 1415, 1417, -1,1418, 1290, 1339, -1, + 1418, 1339, 1414, -1,1394, 1396, 1418, -1,1414, 1312, 1394, -1,1394, 1397, 1396, -1, + 1394, 1418, 1414, -1,1290, 1416, 1391, -1,1419, 1420, 1421, -1,1417, 1398, 1396, -1, + 1302, 1413, 1290, -1,1422, 1398, 1417, -1,1398, 1422, 1411, -1,1423, 1424, 1408, -1, + 1400, 1404, 1398, -1,1410, 1425, 1423, -1,1404, 1402, 1398, -1,1404, 1332, 1402, -1, + 1410, 1403, 1405, -1,1410, 1423, 1408, -1,1410, 1408, 1426, -1,1403, 1410, 1402, -1, + 1403, 1402, 1331, -1,1424, 1406, 1408, -1,1398, 1402, 1396, -1,1409, 1425, 1410, -1, + 1407, 1427, 1408, -1,1428, 1427, 1344, -1,1384, 1429, 1358, -1,1430, 1390, 1358, -1, + 1390, 1343, 1358, -1,1358, 1429, 1430, -1,1431, 1430, 1429, -1,1432, 1433, 1434, -1, + 1432, 1435, 1433, -1,1436, 1437, 1431, -1,1438, 1359, 1363, -1,1363, 1359, 1357, -1, + 1389, 1439, 1375, -1,1383, 1440, 1363, -1,1363, 1440, 1438, -1,1421, 1441, 1419, -1, + 1420, 1442, 1421, -1,1440, 1443, 1438, -1,1374, 1444, 1389, -1,1445, 1434, 1360, -1, + 1359, 1445, 1360, -1,1428, 1430, 1426, -1,1428, 1390, 1430, -1,1437, 1446, 1447, -1, + 1431, 1437, 1430, -1,1446, 1437, 1436, -1,1437, 1447, 1448, -1,1426, 1430, 1437, -1, + 1434, 1449, 1432, -1,1432, 1448, 1435, -1,1449, 1445, 1438, -1,1432, 1449, 1437, -1, + 1448, 1432, 1437, -1,1450, 1439, 1389, -1,1449, 1434, 1445, -1,1426, 1408, 1428, -1, + 1451, 1452, 1453, -1,1420, 1454, 1455, -1,1419, 1441, 1375, -1,1452, 1454, 1453, -1, + 1438, 1453, 1449, -1,1443, 1453, 1438, -1,1420, 1419, 1453, -1,1420, 1455, 1442, -1, + 1454, 1420, 1453, -1,1438, 1445, 1359, -1,1443, 1451, 1453, -1,1389, 1444, 1450, -1, + 1428, 1408, 1427, -1,1390, 1428, 1344, -1,1375, 1439, 1419, -1,1374, 1373, 1444, -1, + 1456, 1457, 1458, -1,1459, 1457, 1456, -1,1460, 1461, 1462, -1,1460, 1462, 1463, -1, + 1464, 1465, 1466, -1,1457, 1465, 1464, -1,1460, 1464, 1461, -1,1461, 1464, 1466, -1, + 1467, 1463, 1462, -1,1465, 1457, 1468, -1,1469, 1470, 1471, -1,1472, 1473, 1474, -1, + 1471, 1470, 1472, -1,1470, 1473, 1472, -1,1475, 1469, 1471, -1,1475, 1471, 1476, -1, + 1459, 1456, 1458, -1,1461, 1477, 1462, -1,1459, 1468, 1457, -1,1476, 1459, 1458, -1, + 1478, 1476, 1458, -1,1466, 1465, 1468, -1,1477, 1461, 1466, -1,1479, 1462, 1477, -1, + 1478, 1475, 1476, -1,1480, 1463, 1467, -1,1481, 1482, 1483, -1,1484, 1481, 1485, -1, + 1479, 1483, 1467, -1,1482, 1467, 1483, -1,1481, 1483, 1485, -1,1486, 1485, 1483, -1, + 1487, 1484, 1485, -1,1480, 1467, 1482, -1,1488, 1489, 1490, -1,1484, 1489, 1488, -1, + 1488, 1491, 1492, -1,1491, 1488, 1493, -1,1489, 1484, 1487, -1,1479, 1486, 1483, -1, + 1492, 1491, 1493, -1,1486, 1487, 1485, -1,1494, 1492, 1495, -1,1490, 1489, 1487, -1, + 1493, 1488, 1490, -1,1496, 1497, 1498, -1,1493, 1495, 1492, -1,1499, 1500, 1495, -1, + 1501, 1499, 1497, -1,1498, 1497, 1499, -1,1496, 1498, 1502, -1,1494, 1495, 1500, -1, + 1462, 1479, 1467, -1,1501, 1500, 1499, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,1503, + 1504, 1505, -1,1506, 1504, 1503, -1,1507, 1508, 1509, -1,1507, 1509, 1510, -1,1511, + 1512, 1513, -1,1504, 1512, 1511, -1,1507, 1511, 1508, -1,1508, 1511, 1513, -1,1514, + 1510, 1509, -1,1512, 1504, 1515, -1,1516, 1517, 1518, -1,1519, 1520, 1521, -1,1518, + 1517, 1519, -1,1517, 1520, 1519, -1,1522, 1516, 1518, -1,1522, 1518, 1523, -1,1506, + 1503, 1505, -1,1508, 1524, 1509, -1,1506, 1515, 1504, -1,1523, 1506, 1505, -1,1525, + 1523, 1505, -1,1513, 1512, 1515, -1,1524, 1508, 1513, -1,1526, 1509, 1524, -1,1525, + 1522, 1523, -1,1527, 1510, 1514, -1,1528, 1529, 1530, -1,1531, 1528, 1532, -1,1526, + 1530, 1514, -1,1529, 1514, 1530, -1,1528, 1530, 1532, -1,1533, 1532, 1530, -1,1534, + 1531, 1532, -1,1527, 1514, 1529, -1,1535, 1536, 1537, -1,1531, 1536, 1535, -1,1535, + 1538, 1539, -1,1538, 1535, 1540, -1,1536, 1531, 1534, -1,1526, 1533, 1530, -1,1539, + 1538, 1540, -1,1533, 1534, 1532, -1,1541, 1539, 1542, -1,1537, 1536, 1534, -1,1540, + 1535, 1537, -1,1543, 1544, 1545, -1,1540, 1542, 1539, -1,1546, 1547, 1542, -1,1548, + 1546, 1544, -1,1545, 1544, 1546, -1,1543, 1545, 1549, -1,1541, 1542, 1547, -1,1509, + 1526, 1514, -1,1548, 1547, 1546, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,1550, 1551, + 1552, -1,1553, 1551, 1550, -1,1554, 1555, 1556, -1,1554, 1556, 1557, -1,1558, 1559, + 1560, -1,1551, 1559, 1558, -1,1554, 1558, 1555, -1,1555, 1558, 1560, -1,1561, 1557, + 1556, -1,1559, 1551, 1562, -1,1563, 1564, 1565, -1,1566, 1567, 1568, -1,1565, 1564, + 1566, -1,1564, 1567, 1566, -1,1569, 1563, 1565, -1,1569, 1565, 1570, -1,1553, 1550, + 1552, -1,1555, 1571, 1556, -1,1553, 1562, 1551, -1,1570, 1553, 1552, -1,1572, 1570, + 1552, -1,1560, 1559, 1562, -1,1571, 1555, 1560, -1,1573, 1556, 1571, -1,1572, 1569, + 1570, -1,1574, 1557, 1561, -1,1575, 1576, 1577, -1,1578, 1575, 1579, -1,1573, 1577, + 1561, -1,1576, 1561, 1577, -1,1575, 1577, 1579, -1,1580, 1579, 1577, -1,1581, 1578, + 1579, -1,1574, 1561, 1576, -1,1582, 1583, 1584, -1,1578, 1583, 1582, -1,1582, 1585, + 1586, -1,1585, 1582, 1587, -1,1583, 1578, 1581, -1,1573, 1580, 1577, -1,1586, 1585, + 1587, -1,1580, 1581, 1579, -1,1588, 1586, 1589, -1,1584, 1583, 1581, -1,1587, 1582, + 1584, -1,1590, 1591, 1592, -1,1587, 1589, 1586, -1,1593, 1594, 1589, -1,1595, 1593, + 1591, -1,1592, 1591, 1593, -1,1590, 1592, 1596, -1,1588, 1589, 1594, -1,1556, 1573, + 1561, -1,1595, 1594, 1593, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,1597, 1598, 1599, -1, + 1600, 1598, 1597, -1,1601, 1602, 1603, -1,1601, 1603, 1604, -1,1605, 1606, 1607, -1, + 1598, 1606, 1605, -1,1601, 1605, 1602, -1,1602, 1605, 1607, -1,1608, 1604, 1603, -1, + 1606, 1598, 1609, -1,1610, 1611, 1612, -1,1613, 1614, 1615, -1,1612, 1611, 1613, -1, + 1611, 1614, 1613, -1,1616, 1610, 1612, -1,1616, 1612, 1617, -1,1600, 1597, 1599, -1, + 1602, 1618, 1603, -1,1600, 1609, 1598, -1,1617, 1600, 1599, -1,1619, 1617, 1599, -1, + 1607, 1606, 1609, -1,1618, 1602, 1607, -1,1620, 1603, 1618, -1,1619, 1616, 1617, -1, + 1621, 1604, 1608, -1,1622, 1623, 1624, -1,1625, 1622, 1626, -1,1620, 1624, 1608, -1, + 1623, 1608, 1624, -1,1622, 1624, 1626, -1,1627, 1626, 1624, -1,1628, 1625, 1626, -1, + 1621, 1608, 1623, -1,1629, 1630, 1631, -1,1625, 1630, 1629, -1,1629, 1632, 1633, -1, + 1632, 1629, 1634, -1,1630, 1625, 1628, -1,1620, 1627, 1624, -1,1633, 1632, 1634, -1, + 1627, 1628, 1626, -1,1635, 1633, 1636, -1,1631, 1630, 1628, -1,1634, 1629, 1631, -1, + 1637, 1638, 1639, -1,1634, 1636, 1633, -1,1640, 1641, 1636, -1,1642, 1640, 1638, -1, + 1639, 1638, 1640, -1,1637, 1639, 1643, -1,1635, 1636, 1641, -1,1603, 1620, 1608, -1, + 1642, 1641, 1640, -1,1644, 1645, 1646, -1,1644, 635, 635, -1,1644, 1647, 1648, -1, + 1649, 1644, 1646, -1,635, 1650, 1644, -1,1644, 1649, 635, -1,1647, 1644, 1650, -1, + 635, 635, 1644, -1,1644, 635, 635, -1,635, 1644, 635, -1,1644, 1651, 635, -1,1652, + 1644, 1648, -1,1644, 1652, 1653, -1,1644, 1653, 1654, -1,1644, 1654, 1651, -1,635, + 635, 1644, -1,1655, 1656, 1657, -1,1658, 1656, 1655, -1,1659, 1660, 1661, -1,1659, + 1661, 1662, -1,1663, 1664, 1665, -1,1656, 1664, 1663, -1,1659, 1663, 1660, -1,1660, + 1663, 1665, -1,1666, 1662, 1661, -1,1664, 1656, 1667, -1,1668, 1669, 1670, -1,1671, + 1672, 1673, -1,1670, 1669, 1671, -1,1669, 1672, 1671, -1,1674, 1668, 1670, -1,1674, + 1670, 1675, -1,1658, 1655, 1657, -1,1660, 1676, 1661, -1,1658, 1667, 1656, -1,1675, + 1658, 1657, -1,1677, 1675, 1657, -1,1665, 1664, 1667, -1,1676, 1660, 1665, -1,1678, + 1661, 1676, -1,1677, 1674, 1675, -1,1679, 1662, 1666, -1,1680, 1681, 1682, -1,1683, + 1680, 1684, -1,1678, 1682, 1666, -1,1681, 1666, 1682, -1,1680, 1682, 1684, -1,1685, + 1684, 1682, -1,1686, 1683, 1684, -1,1679, 1666, 1681, -1,1687, 1688, 1689, -1,1683, + 1688, 1687, -1,1687, 1690, 1691, -1,1690, 1687, 1692, -1,1688, 1683, 1686, -1,1678, + 1685, 1682, -1,1691, 1690, 1692, -1,1685, 1686, 1684, -1,1693, 1691, 1694, -1,1689, + 1688, 1686, -1,1692, 1687, 1689, -1,1695, 1696, 1697, -1,1692, 1694, 1691, -1,1698, + 1699, 1694, -1,1700, 1698, 1696, -1,1697, 1696, 1698, -1,1695, 1697, 1701, -1,1693, + 1694, 1699, -1,1661, 1678, 1666, -1,1700, 1699, 1698, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,1702, 1703, 1704, -1,1705, 1703, 1702, -1,1706, 1707, 1708, -1,1706, 1708, + 1709, -1,1710, 1711, 1712, -1,1703, 1711, 1710, -1,1706, 1710, 1707, -1,1707, 1710, + 1712, -1,1713, 1709, 1708, -1,1711, 1703, 1714, -1,1715, 1716, 1717, -1,1718, 1719, + 1720, -1,1717, 1716, 1718, -1,1716, 1719, 1718, -1,1721, 1715, 1717, -1,1721, 1717, + 1722, -1,1705, 1702, 1704, -1,1707, 1723, 1708, -1,1705, 1714, 1703, -1,1722, 1705, + 1704, -1,1724, 1722, 1704, -1,1712, 1711, 1714, -1,1723, 1707, 1712, -1,1725, 1708, + 1723, -1,1724, 1721, 1722, -1,1726, 1709, 1713, -1,1727, 1728, 1729, -1,1730, 1727, + 1731, -1,1725, 1729, 1713, -1,1728, 1713, 1729, -1,1727, 1729, 1731, -1,1732, 1731, + 1729, -1,1733, 1730, 1731, -1,1726, 1713, 1728, -1,1734, 1735, 1736, -1,1730, 1735, + 1734, -1,1734, 1737, 1738, -1,1737, 1734, 1739, -1,1735, 1730, 1733, -1,1725, 1732, + 1729, -1,1738, 1737, 1739, -1,1732, 1733, 1731, -1,1740, 1738, 1741, -1,1736, 1735, + 1733, -1,1739, 1734, 1736, -1,1742, 1743, 1744, -1,1739, 1741, 1738, -1,1745, 1746, + 1741, -1,1747, 1745, 1743, -1,1744, 1743, 1745, -1,1742, 1744, 1748, -1,1740, 1741, + 1746, -1,1708, 1725, 1713, -1,1747, 1746, 1745, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 1749, 1750, 1751, -1,1752, 1750, 1749, -1,1753, 1754, 1755, -1,1753, 1755, 1756, -1, + 1757, 1758, 1759, -1,1750, 1758, 1757, -1,1753, 1757, 1754, -1,1754, 1757, 1759, -1, + 1760, 1756, 1755, -1,1758, 1750, 1761, -1,1762, 1763, 1764, -1,1765, 1766, 1767, -1, + 1764, 1763, 1765, -1,1763, 1766, 1765, -1,1768, 1762, 1764, -1,1768, 1764, 1769, -1, + 1752, 1749, 1751, -1,1754, 1770, 1755, -1,1752, 1761, 1750, -1,1769, 1752, 1751, -1, + 1771, 1769, 1751, -1,1759, 1758, 1761, -1,1770, 1754, 1759, -1,1772, 1755, 1770, -1, + 1771, 1768, 1769, -1,1773, 1756, 1760, -1,1774, 1775, 1776, -1,1777, 1774, 1778, -1, + 1772, 1776, 1760, -1,1775, 1760, 1776, -1,1774, 1776, 1778, -1,1779, 1778, 1776, -1, + 1780, 1777, 1778, -1,1773, 1760, 1775, -1,1781, 1782, 1783, -1,1777, 1782, 1781, -1, + 1781, 1784, 1785, -1,1784, 1781, 1786, -1,1782, 1777, 1780, -1,1772, 1779, 1776, -1, + 1785, 1784, 1786, -1,1779, 1780, 1778, -1,1787, 1785, 1788, -1,1783, 1782, 1780, -1, + 1786, 1781, 1783, -1,1789, 1790, 1791, -1,1786, 1788, 1785, -1,1792, 1793, 1788, -1, + 1794, 1792, 1790, -1,1791, 1790, 1792, -1,1789, 1791, 1795, -1,1787, 1788, 1793, -1, + 1755, 1772, 1760, -1,1794, 1793, 1792, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,1796, + 1797, 1798, -1,1799, 1797, 1796, -1,1800, 1801, 1802, -1,1800, 1802, 1803, -1,1804, + 1805, 1806, -1,1797, 1805, 1804, -1,1800, 1804, 1801, -1,1801, 1804, 1806, -1,1807, + 1803, 1802, -1,1805, 1797, 1808, -1,1809, 1810, 1811, -1,1812, 1813, 1814, -1,1811, + 1810, 1812, -1,1810, 1813, 1812, -1,1815, 1809, 1811, -1,1815, 1811, 1816, -1,1799, + 1796, 1798, -1,1801, 1817, 1802, -1,1799, 1808, 1797, -1,1816, 1799, 1798, -1,1818, + 1816, 1798, -1,1806, 1805, 1808, -1,1817, 1801, 1806, -1,1819, 1802, 1817, -1,1818, + 1815, 1816, -1,801, 1803, 1807, -1,1820, 1821, 1822, -1,1823, 1820, 1824, -1,1819, + 1822, 1807, -1,1821, 1807, 1822, -1,1820, 1822, 1824, -1,1825, 1824, 1822, -1,1826, + 1823, 1824, -1,801, 1807, 1821, -1,1827, 1828, 1829, -1,1823, 1828, 1827, -1,1827, + 1830, 1831, -1,1830, 1827, 1832, -1,1828, 1823, 1826, -1,1819, 1825, 1822, -1,1831, + 1830, 1832, -1,1825, 1826, 1824, -1,1833, 1831, 1834, -1,1829, 1828, 1826, -1,1832, + 1827, 1829, -1,1835, 1836, 1837, -1,1832, 1834, 1831, -1,1838, 1839, 1834, -1,1840, + 1838, 1836, -1,1837, 1836, 1838, -1,1835, 1837, 1841, -1,1833, 1834, 1839, -1,1802, + 1819, 1807, -1,1840, 1839, 1838, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,1842, 1843, + 1844, -1,1845, 1843, 1842, -1,1846, 1847, 1848, -1,1846, 1848, 1849, -1,1850, 1851, + 1852, -1,1843, 1851, 1850, -1,1846, 1850, 1847, -1,1847, 1850, 1852, -1,1853, 1849, + 1848, -1,1851, 1843, 1854, -1,1855, 1856, 1857, -1,1858, 1859, 1860, -1,1857, 1856, + 1858, -1,1856, 1859, 1858, -1,1861, 1855, 1857, -1,1861, 1857, 1862, -1,1845, 1842, + 1844, -1,1847, 1863, 1848, -1,1845, 1854, 1843, -1,1862, 1845, 1844, -1,1864, 1862, + 1844, -1,1852, 1851, 1854, -1,1863, 1847, 1852, -1,1865, 1848, 1863, -1,1864, 1861, + 1862, -1,1866, 1849, 1853, -1,1867, 1868, 1869, -1,1870, 1867, 1871, -1,1865, 1869, + 1853, -1,1868, 1853, 1869, -1,1867, 1869, 1871, -1,1872, 1871, 1869, -1,1873, 1870, + 1871, -1,1866, 1853, 1868, -1,1874, 1875, 1876, -1,1870, 1875, 1874, -1,1874, 1877, + 1878, -1,1877, 1874, 1879, -1,1875, 1870, 1873, -1,1865, 1872, 1869, -1,1878, 1877, + 1879, -1,1872, 1873, 1871, -1,1880, 1878, 1881, -1,1876, 1875, 1873, -1,1879, 1874, + 1876, -1,1882, 1883, 1884, -1,1879, 1881, 1878, -1,1885, 1886, 1881, -1,1887, 1885, + 1883, -1,1884, 1883, 1885, -1,1882, 1884, 1888, -1,1880, 1881, 1886, -1,1848, 1865, + 1853, -1,1887, 1886, 1885, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,1889, 1890, 1891, -1, + 1892, 1893, 1894, -1,1894, 1889, 1895, -1,1896, 1889, 1891, -1,1894, 1897, 1889, -1, + 1896, 1895, 1889, -1,1892, 1898, 1893, -1,1899, 1895, 1896, -1,1892, 1894, 1895, -1, + 1900, 1900, 1893, -1,1900, 1900, 1893, -1,1900, 1900, 1893, -1,1898, 1900, 1893, -1, + 1901, 1902, 1903, -1,1901, 1903, 1904, -1,1905, 1904, 1906, -1,1907, 1908, 1901, -1, + 1909, 1910, 1911, -1,1912, 1913, 1914, -1,1911, 1906, 1909, -1,1909, 1915, 1916, -1, + 1917, 1915, 1918, -1,1919, 1915, 1920, -1,1921, 1909, 1916, -1,1922, 1923, 1924, -1, + 1919, 1916, 1915, -1,1918, 1923, 1925, -1,1909, 1921, 1910, -1,1926, 1927, 1928, -1, + 1928, 1929, 1926, -1,1929, 1928, 1915, -1,1927, 1920, 1928, -1,1930, 1908, 1907, -1, + 1920, 1915, 1928, -1,1917, 1931, 1932, -1,1915, 1917, 1929, -1,1925, 1933, 1934, -1, + 1931, 1918, 1925, -1,1918, 1931, 1917, -1,1931, 1925, 1934, -1,1907, 1935, 1930, -1, + 1932, 1931, 1934, -1,1936, 1922, 1937, -1,1936, 1934, 1933, -1,1922, 1936, 1933, -1, + 1923, 1933, 1925, -1,1917, 1932, 1929, -1,1923, 1922, 1933, -1,1924, 1938, 1922, -1, + 1907, 1913, 1935, -1,1939, 1938, 1940, -1,1940, 1938, 1924, -1,1941, 1940, 1942, -1, + 1943, 1942, 1944, -1,1939, 1941, 1945, -1,1941, 1939, 1940, -1,1943, 1946, 1947, -1, + 1946, 1943, 1944, -1,1941, 1942, 1943, -1,1941, 1943, 1948, -1,1944, 1949, 1946, -1, + 1938, 1939, 1945, -1,1950, 1951, 1952, -1,1953, 1954, 1955, -1,1952, 1951, 1954, -1, + 1949, 1950, 1956, -1,1949, 1951, 1950, -1,1957, 1958, 1959, -1,1960, 1955, 1958, -1, + 1961, 1959, 1962, -1,1951, 1949, 1944, -1,1946, 1949, 1963, -1,1937, 1938, 1945, -1, + 1943, 1947, 1948, -1,1948, 1945, 1941, -1,1952, 1956, 1950, -1,1914, 1911, 1964, -1, + 1947, 1946, 1963, -1,1965, 1956, 1952, -1,1949, 1956, 1963, -1,1954, 1965, 1952, -1, + 1955, 1966, 1953, -1,1966, 1955, 1960, -1,1959, 1967, 1957, -1,1967, 1959, 1961, -1, + 1958, 1957, 1968, -1,1958, 1968, 1960, -1,1966, 1969, 1953, -1,1967, 1968, 1957, -1, + 1970, 1967, 1961, -1,1966, 1960, 1968, -1,1961, 1962, 1970, -1,1953, 1969, 1965, -1, + 1954, 1953, 1965, -1,1938, 1937, 1922, -1,1912, 1914, 1964, -1,1971, 1971, 1971, -1, + 1971, 1972, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,1973, 1972, 1974, -1,1972, 1973, 1971, -1, + 1972, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1975, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1976, 1975, -1,1975, 1976, 1977, -1,1975, 1971, 1971, -1,1971, 1975, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1978, 1971, 1979, -1,1980, 1978, 1979, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1, + 1980, 1981, 1982, -1,1981, 1980, 1979, -1,1982, 1981, 1971, -1,1971, 1971, 1971, -1, + 1971, 1971, 1971, -1,1971, 1971, 1981, -1,1971, 1971, 1971, -1,1983, 1984, 1985, -1, + 1985, 1984, 1986, -1,1983, 1985, 1987, -1,1987, 1985, 1988, -1,1989, 1986, 1990, -1, + 1986, 1989, 1988, -1,1985, 1986, 1988, -1,1984, 1991, 1986, -1,1992, 1993, 1994, -1, + 1992, 1986, 1991, -1,1986, 1992, 1990, -1,1992, 1995, 1990, -1,1992, 1991, 1993, -1, + 1994, 1995, 1992, -1,1996, 1997, 1998, -1,1997, 1999, 2000, -1,2001, 1997, 2002, -1, + 2003, 2004, 2005, -1,2004, 2003, 2002, -1,2006, 1997, 2007, -1,1997, 2004, 2002, -1, + 1997, 2001, 1998, -1,2008, 2009, 2010, -1,2009, 2011, 2010, -1,2011, 2009, 2012, -1, + 2008, 2010, 2013, -1,2004, 1997, 2006, -1,2006, 2007, 2014, -1,2014, 2013, 2015, -1, + 2014, 2015, 2006, -1,2008, 2013, 2014, -1,1997, 1996, 1999, -1,2016, 2017, 2018, -1, + 2017, 2019, 2018, -1,2020, 2018, 2021, -1,2018, 2020, 2016, -1,2021, 2018, 2022, -1, + 2019, 2023, 2018, -1,2024, 2018, 2023, -1,2018, 2025, 2022, -1,2026, 2025, 2018, -1, + 2026, 2018, 2024, -1,2027, 2027, 2028, -1,2027, 2027, 2029, -1,2030, 2031, 2032, -1, + 2033, 2034, 2035, -1,2036, 2035, 2037, -1,2035, 2036, 2033, -1,2036, 2037, 2038, -1, + 2039, 2038, 2040, -1,2040, 2041, 2042, -1,2040, 2038, 2037, -1,2041, 2031, 2042, -1, + 2040, 2042, 2039, -1,2043, 2031, 2030, -1,2044, 2031, 2045, -1,2045, 2031, 2046, -1, + 2031, 2044, 2032, -1,2047, 2047, 2047, -1,2031, 2048, 2049, -1,2048, 2050, 2049, -1, + 2042, 2031, 2049, -1,2048, 2031, 2043, -1,2050, 1679, 1679, -1,1679, 1679, 2050, -1, + 1679, 1679, 1679, -1,1679, 1679, 1679, -1,1679, 1679, 1679, -1,1679, 1679, 1679, -1, + 1971, 1971, 1971, -1,1971, 1971, 1971, -1,2051, 2051, 2051, -1,2051, 2051, 2051, -1, + 2051, 2051, 2051, -1,2051, 2051, 2051, -1,2051, 2051, 2051, -1,2051, 2051, 2051, -1, + 2052, 2053, 2054, -1,2054, 2053, 2055, -1,2052, 2056, 2057, -1,2058, 2056, 2054, -1, + 2052, 2054, 2056, -1,2056, 2058, 2059, -1,2060, 2058, 2054, -1,2055, 2060, 2054, -1, + 2061, 2057, 2056, -1,2062, 2063, 2061, -1,2056, 2059, 2061, -1,2062, 2061, 2064, -1, + 2065, 2062, 2065, -1,2059, 2066, 2061, -1,2066, 2064, 2061, -1,2065, 2062, 2064, -1, + 2063, 2057, 2061, -1,2067, 2068, 2069, -1,2070, 2071, 2072, -1,2073, 2072, 2074, -1, + 2072, 2073, 2070, -1,2073, 2074, 2075, -1,2076, 2075, 2077, -1,2077, 2078, 2079, -1, + 2077, 2075, 2074, -1,2078, 2068, 2079, -1,2077, 2079, 2076, -1,2080, 2068, 2067, -1, + 2081, 2068, 2082, -1,2082, 2068, 2083, -1,2068, 2081, 2069, -1,2084, 2084, 2084, -1, + 2068, 2085, 2086, -1,2085, 2087, 2086, -1,2079, 2068, 2086, -1,2085, 2068, 2080, -1, + 2088, 2089, 2090, -1,2089, 2091, 2090, -1,2092, 2093, 2090, -1,2090, 2094, 2092, -1, + 2093, 2088, 2090, -1,2095, 2090, 2096, -1,2097, 2090, 2095, -1,2094, 2090, 2098, -1, + 2090, 2097, 2098, -1,2090, 2091, 2096, -1,2099, 2100, 2099, -1,2099, 2101, 2099, -1, + 2102, 2103, 2104, -1,2105, 2104, 2106, -1,2104, 2107, 2102, -1,2105, 2108, 2104, -1, + 2108, 2107, 2104, -1,2104, 2103, 2109, -1,2109, 2110, 2106, -1,2110, 2111, 2112, -1, + 2106, 2112, 2113, -1,2112, 2106, 2110, -1,2113, 2112, 2114, -1,2106, 2113, 2105, -1, + 2114, 2112, 2111, -1,2109, 2106, 2104, -1,2115, 2116, 2117, -1,2116, 2118, 2119, -1, + 2120, 2121, 2122, -1,2123, 2116, 2120, -1,2120, 2122, 2123, -1,2116, 2123, 2124, -1, + 2125, 2116, 2126, -1,2116, 2124, 2117, -1,2127, 2128, 2129, -1,2128, 2130, 2129, -1, + 2130, 2128, 2131, -1,2127, 2129, 2132, -1,2120, 2116, 2125, -1,2125, 2126, 2133, -1, + 2133, 2132, 2134, -1,2133, 2134, 2125, -1,2127, 2132, 2133, -1,2116, 2115, 2118, -1, + 2135, 2136, 2137, -1,2137, 2136, 2138, -1,2135, 2137, 2139, -1,2139, 2137, 2140, -1, + 2141, 2138, 2142, -1,2138, 2141, 2140, -1,2137, 2138, 2140, -1,2136, 2143, 2138, -1, + 2144, 2145, 2146, -1,2144, 2138, 2143, -1,2138, 2144, 2142, -1,2144, 2147, 2142, -1, + 2144, 2143, 2145, -1,2146, 2147, 2144, -1,2148, 2149, 2150, -1,2150, 2149, 2151, -1, + 2148, 2152, 2153, -1,2154, 2152, 2150, -1,2148, 2150, 2152, -1,2152, 2154, 2155, -1, + 2156, 2154, 2150, -1,2151, 2156, 2150, -1,2157, 2153, 2152, -1,2158, 2159, 2157, -1, + 2152, 2155, 2157, -1,2158, 2157, 2160, -1,2161, 2158, 2161, -1,2155, 2162, 2157, -1, + 2162, 2160, 2157, -1,2161, 2158, 2160, -1,2159, 2153, 2157, -1,2163, 2164, 2165, -1, + 2166, 2165, 2167, -1,2168, 2163, 2169, -1,2163, 2168, 2164, -1,2169, 2166, 2170, -1, + 2166, 2169, 2163, -1,2163, 2165, 2166, -1,2167, 2171, 2166, -1,2166, 2172, 2170, -1, + 2172, 2166, 2171, -1,2170, 2172, 2173, -1,2174, 2172, 2171, -1,2175, 2172, 2174, -1, + 2173, 2172, 2175, -1,2176, 2177, 2178, -1,2179, 2180, 2181, -1,2177, 2179, 2182, -1, + 2183, 2177, 2182, -1,2177, 2183, 2178, -1,2184, 2180, 2185, -1,2180, 2184, 2181, -1, + 2186, 2182, 2179, -1,2186, 2179, 2181, -1,2180, 2187, 2185, -1,2176, 2178, 2188, -1, + 2187, 2189, 2190, -1,2191, 2192, 2193, -1,2194, 2195, 2196, -1,2189, 2192, 2191, -1, + 2190, 2197, 2198, -1,2190, 2189, 2197, -1,2199, 2200, 2201, -1,2191, 2197, 2189, -1, + 2192, 2200, 2202, -1,2197, 2191, 2198, -1,2203, 2196, 2195, -1,2185, 2187, 2204, -1, + 2204, 2187, 2190, -1,2188, 2178, 2183, -1,2186, 2181, 2184, -1,2182, 2186, 2183, -1, + 2205, 2185, 2204, -1,2198, 2191, 2206, -1,2190, 2198, 2204, -1,2185, 2205, 2184, -1, + 2193, 2202, 2207, -1,2202, 2193, 2192, -1,2199, 2208, 2209, -1,2208, 2199, 2201, -1, + 2202, 2200, 2199, -1,2202, 2199, 2210, -1,2207, 2202, 2210, -1,2209, 2211, 2212, -1, + 2209, 2210, 2199, -1,2212, 2211, 2213, -1,2211, 2209, 2208, -1,2208, 2201, 2211, -1, + 2193, 2207, 2206, -1,2191, 2193, 2206, -1,2201, 2214, 2211, -1,2213, 2214, 2215, -1, + 2196, 2216, 2194, -1,2217, 2218, 2219, -1,2220, 2196, 2203, -1,2221, 2215, 2218, -1, + 2222, 2223, 2219, -1,2224, 2225, 2226, -1,2222, 2219, 2226, -1,2226, 2219, 2224, -1, + 2219, 2223, 2227, -1,2224, 2228, 2229, -1,2229, 2230, 2231, -1,2232, 2233, 2216, -1, + 2230, 2220, 2234, -1,2228, 2232, 2235, -1,2229, 2236, 2224, -1,2237, 2216, 2233, -1, + 2224, 2236, 2225, -1,2234, 2231, 2230, -1,2213, 2238, 2239, -1,2238, 2213, 2215, -1, + 2221, 2240, 2241, -1,2240, 2221, 2218, -1,2238, 2215, 2221, -1,2238, 2221, 2241, -1, + 2239, 2238, 2241, -1,2242, 2217, 2243, -1,2242, 2241, 2240, -1,2217, 2242, 2240, -1, + 2240, 2218, 2217, -1,2213, 2239, 2212, -1,2223, 2244, 2227, -1,2243, 2227, 2245, -1, + 2246, 2245, 2247, -1,2227, 2248, 2247, -1,2247, 2249, 2246, -1,2244, 2248, 2227, -1, + 2245, 2227, 2247, -1,2243, 2217, 2219, -1,2219, 2227, 2243, -1,2214, 2213, 2211, -1, + 2250, 2251, 2252, -1,2253, 2254, 2255, -1,2256, 2253, 2255, -1,2257, 2256, 2258, -1, + 2259, 2260, 2261, -1,2262, 2259, 2261, -1,2263, 2261, 2250, -1,2251, 2261, 2260, -1, + 2251, 2250, 2261, -1,2252, 2257, 2264, -1,1900, 1900, 2265, -1,2265, 2255, 2254, -1, + 2255, 2266, 2258, -1,2258, 2264, 2257, -1,2265, 2254, 1900, -1,2250, 2252, 2267, -1, + 2267, 2252, 2264, -1,2268, 2269, 2250, -1,2270, 2268, 2250, -1,2269, 2263, 2250, -1, + 2258, 2256, 2255, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,2271, 2272, 2273, -1,2271, 2273, 2274, -1,2275, 2274, 2273, -1, + 2271, 2276, 2272, -1,2276, 2277, 2278, -1,2279, 2277, 2280, -1,2276, 2280, 2277, -1, + 2272, 2276, 2278, -1,2281, 2276, 2271, -1,2281, 2271, 2274, -1,2282, 2283, 2280, -1, + 2279, 2280, 2283, -1,2280, 2284, 2282, -1,2282, 2285, 2283, -1,2276, 2281, 2284, -1, + 2284, 2280, 2276, -1,2283, 2286, 2279, -1,2283, 2287, 2288, -1,2289, 2290, 2291, -1, + 2292, 2289, 2287, -1,2291, 2287, 2289, -1,2289, 2293, 2290, -1,2288, 2287, 2291, -1, + 2287, 2283, 2294, -1,2285, 2294, 2283, -1,2295, 2289, 2292, -1,2294, 2292, 2287, -1, + 2296, 2297, 2293, -1,2290, 2293, 2297, -1,2295, 2296, 2293, -1,2293, 2289, 2295, -1, + 2288, 2286, 2283, -1,2298, 2299, 2300, -1,2301, 2302, 2303, -1,2303, 2297, 2304, -1, + 2302, 2301, 2305, -1,2304, 2301, 2303, -1,2306, 2307, 2308, -1,2300, 2301, 2298, -1, + 2306, 2299, 2298, -1,2306, 2309, 2307, -1,2300, 2305, 2301, -1,2299, 2306, 2308, -1, + 2310, 2311, 2312, -1,2313, 2314, 2310, -1,2315, 2316, 2317, -1,2314, 2317, 2316, -1, + 2317, 2314, 2313, -1,2318, 2319, 2320, -1,2312, 2319, 2321, -1,2320, 2309, 2318, -1, + 2319, 2318, 2321, -1,2320, 2307, 2309, -1,2311, 2310, 2314, -1,2310, 2312, 2321, -1, + 2315, 2317, 2313, -1,2321, 2313, 2310, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,2322, 2323, 2324, -1,2325, 2326, 2327, -1, + 2328, 2326, 2325, -1,2324, 2325, 2322, -1,2322, 2325, 2327, -1,2322, 2329, 2323, -1, + 2330, 2329, 2331, -1,2332, 2330, 2331, -1,2323, 2329, 2330, -1,2333, 2329, 2322, -1, + 2334, 2335, 2336, -1,2328, 2337, 2326, -1,2322, 2327, 2333, -1,2338, 2335, 2339, -1, + 2337, 2327, 2326, -1,2340, 2329, 2333, -1,2341, 2335, 2338, -1,2340, 2342, 2331, -1, + 2340, 2331, 2329, -1,2339, 2335, 2334, -1,2331, 2343, 2332, -1,2344, 2343, 2345, -1, + 2341, 2344, 2335, -1,2336, 2335, 2346, -1,2347, 2346, 2348, -1,2349, 2335, 2345, -1, + 2344, 2345, 2335, -1,2350, 2331, 2342, -1,2345, 2350, 2349, -1,2349, 2351, 2335, -1, + 2350, 2345, 2331, -1,2352, 2348, 2351, -1,2335, 2351, 2348, -1,2347, 2348, 2352, -1, + 2348, 2346, 2335, -1,2343, 2331, 2345, -1,2353, 2347, 2354, -1,2347, 2355, 2354, -1, + 2356, 2353, 2354, -1,2357, 2353, 2358, -1,2358, 2359, 2357, -1,2358, 2353, 2356, -1, + 2356, 2354, 2355, -1,2360, 2361, 2362, -1,2362, 2363, 2360, -1,2364, 2365, 2366, -1, + 2360, 2359, 2361, -1,2367, 2363, 2362, -1,2358, 2356, 2361, -1,2361, 2359, 2358, -1, + 2366, 2368, 2364, -1,2366, 2369, 2370, -1,2371, 2372, 2373, -1,2370, 2369, 2374, -1, + 2373, 2367, 2371, -1,2372, 2371, 2375, -1,2363, 2367, 2373, -1,2365, 2375, 2371, -1, + 2376, 2366, 2370, -1,2375, 2365, 2364, -1,2376, 2368, 2366, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,2377, 2378, 2379, -1, + 2378, 2377, 2380, -1,2381, 2378, 2380, -1,2379, 2378, 2382, -1,2381, 2380, 2383, -1, + 2384, 2385, 2386, -1,2387, 2388, 2389, -1,2385, 2388, 2390, -1,2383, 2384, 2391, -1, + 2389, 2392, 2393, -1,2394, 2393, 2392, -1,2381, 2391, 2395, -1,2391, 2381, 2383, -1, + 2395, 2382, 2378, -1,2396, 2395, 2391, -1,2396, 2391, 2386, -1,2391, 2384, 2386, -1, + 2395, 2378, 2381, -1,2390, 2387, 2397, -1,2387, 2390, 2388, -1,2393, 2387, 2389, -1, + 2387, 2393, 2397, -1,2397, 2396, 2390, -1,2398, 2397, 2393, -1,2398, 2393, 2394, -1, + 2390, 2396, 2386, -1,2386, 2385, 2390, -1,2394, 2392, 2399, -1,2400, 2401, 2402, -1, + 2394, 2403, 2400, -1,2403, 2394, 2399, -1,2400, 2403, 2401, -1,2400, 2404, 2398, -1, + 2402, 2401, 2405, -1,2406, 2407, 2408, -1,2409, 2410, 2407, -1,2411, 2412, 2409, -1, + 2413, 2406, 2414, -1,2405, 2413, 2415, -1,2412, 2411, 2416, -1,2402, 2415, 2404, -1, + 2415, 2402, 2405, -1,2414, 2415, 2413, -1,2415, 2414, 2417, -1,2415, 2417, 2404, -1, + 2417, 2414, 2408, -1,2417, 2408, 2418, -1,2414, 2406, 2408, -1,2402, 2404, 2400, -1, + 2410, 2412, 2419, -1,2410, 2418, 2408, -1,2412, 2410, 2409, -1,2419, 2416, 2420, -1, + 2408, 2407, 2410, -1,2419, 2412, 2416, -1,2400, 2398, 2394, -1,2410, 2419, 2418, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 2421, + 2422, -1,635, 2422, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 2423, 2424, 635, -1,2425, 2424, 2423, -1,635, 2423, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,2422, 2421, 2426, -1,2427, 635, 2426, -1,2426, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,2428, 2429, 2430, -1,2431, 2429, 2428, -1,2428, 2430, 2432, -1, + 2433, 2425, 2432, -1,2433, 2424, 2425, -1,2432, 2425, 2428, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 2434, -1,2431, 2435, 2429, -1,2435, + 2431, 2436, -1,2434, 2437, 635, -1,2434, 2436, 2437, -1,635, 635, 635, -1,2431, 2437, + 2436, -1,635, 635, 635, -1,2421, 2427, 2426, -1,2438, 2439, 2440, -1,2439, 2438, + 2441, -1,2442, 2439, 2441, -1,2440, 2439, 2443, -1,2442, 2441, 2444, -1,2445, 2446, + 2447, -1,2448, 2449, 2450, -1,2446, 2449, 2451, -1,2444, 2445, 2452, -1,2450, 2453, + 2454, -1,2455, 2454, 2453, -1,2442, 2452, 2456, -1,2452, 2442, 2444, -1,2456, 2443, + 2439, -1,2457, 2456, 2452, -1,2457, 2452, 2447, -1,2452, 2445, 2447, -1,2456, 2439, + 2442, -1,2451, 2448, 2458, -1,2448, 2451, 2449, -1,2454, 2448, 2450, -1,2448, 2454, + 2458, -1,2458, 2457, 2451, -1,2459, 2458, 2454, -1,2459, 2454, 2455, -1,2451, 2457, + 2447, -1,2447, 2446, 2451, -1,2455, 2453, 2460, -1,2461, 2462, 2463, -1,2455, 2464, + 2461, -1,2464, 2455, 2460, -1,2461, 2464, 2462, -1,2461, 2465, 2459, -1,2463, 2462, + 2466, -1,2467, 2468, 2469, -1,2470, 2471, 2468, -1,2472, 2473, 2470, -1,2474, 2467, + 2475, -1,2466, 2474, 2476, -1,2473, 2472, 2477, -1,2463, 2476, 2465, -1,2476, 2463, + 2466, -1,2475, 2476, 2474, -1,2476, 2475, 2478, -1,2476, 2478, 2465, -1,2478, 2475, + 2469, -1,2478, 2469, 2479, -1,2475, 2467, 2469, -1,2463, 2465, 2461, -1,2471, 2473, + 2480, -1,2473, 2471, 2470, -1,2477, 2481, 2480, -1,2479, 2471, 2480, -1,2471, 2479, + 2469, -1,2469, 2468, 2471, -1,2461, 2459, 2455, -1,2480, 2473, 2477, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 2482, 635, -1,2482, 635, 2483, -1,2483, 2484, 2482, -1,2483, 2485, 2484, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,2485, 635, + 2486, -1,2486, 635, 635, -1,2485, 2486, 2484, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,2487, 2488, 2489, -1,2488, + 2487, 2490, -1,2491, 2487, 2489, -1,2492, 2493, 2494, -1,2495, 2492, 2496, -1,2494, + 2496, 2492, -1,2492, 2497, 2493, -1,2488, 2496, 2494, -1,2496, 2488, 2490, -1,2490, + 2495, 2496, -1,2487, 2491, 2490, -1,2498, 2499, 2497, -1,2493, 2497, 2499, -1,2051, + 2499, 2500, -1,2498, 2500, 2499, -1,2501, 2499, 2051, -1,2492, 2495, 2498, -1,2497, + 2492, 2498, -1,2501, 2493, 2499, -1,2502, 2503, 2501, -1,2504, 2503, 2502, -1,2051, + 2500, 2502, -1,2505, 2503, 2506, -1,2507, 2508, 2509, -1,2510, 2508, 2505, -1,2504, + 2506, 2503, -1,2511, 2504, 2502, -1,2512, 2506, 2511, -1,2502, 2500, 2511, -1,2512, + 2510, 2506, -1,2506, 2504, 2511, -1,2510, 2513, 2508, -1,2509, 2508, 2513, -1,2509, + 2513, 2514, -1,2514, 2507, 2509, -1,2512, 2513, 2510, -1,2510, 2505, 2506, -1,2501, + 2051, 2502, -1,2515, 2515, 2515, -1,2515, 2515, 2515, -1,2516, 2517, 2518, -1,2517, + 2516, 2519, -1,2520, 2516, 2518, -1,2521, 2522, 2523, -1,2524, 2521, 2525, -1,2523, + 2525, 2521, -1,2521, 2526, 2522, -1,2517, 2525, 2523, -1,2525, 2517, 2519, -1,2519, + 2524, 2525, -1,2516, 2520, 2519, -1,2527, 2528, 2526, -1,2522, 2526, 2528, -1,1679, + 2528, 2529, -1,2527, 2529, 2528, -1,2530, 2528, 1679, -1,2521, 2524, 2527, -1,2526, + 2521, 2527, -1,2530, 2522, 2528, -1,2531, 2532, 2530, -1,2533, 2532, 2531, -1,1679, + 2529, 2531, -1,2534, 2532, 2535, -1,2536, 2537, 2538, -1,2539, 2537, 2534, -1,2533, + 2535, 2532, -1,2540, 2533, 2531, -1,2541, 2535, 2540, -1,2531, 2529, 2540, -1,2541, + 2539, 2535, -1,2535, 2533, 2540, -1,2539, 2542, 2537, -1,2538, 2537, 2542, -1,2538, + 2542, 2543, -1,2543, 2536, 2538, -1,2541, 2542, 2539, -1,2539, 2534, 2535, -1,2530, + 1679, 2531, -1,2544, 2544, 2544, -1,2544, 2544, 2544, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,1971, 1971, 1971, -1,1971, 2545, 1971, -1,1971, 1971, 1971, -1,1971, 1971, + 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,2546, 2545, + 2547, -1,2545, 2546, 1971, -1,2545, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, + 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, + 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, 1971, -1,1971, 1971, + 1971, -1,1971, 1971, 1971, -1,1971, 1971, 2548, -1,1971, 1971, 1971, -1,1971, 1971, + 1971, -1,1971, 1971, 1971, -1,1971, 2549, 2548, -1,2548, 2549, 2550, -1,2548, 1971, + 1971, -1,1971, 2548, 1971, -1,1971, 1971, 1971, -1,2551, 2552, 2553, -1,2554, 2553, + 2555, -1,2556, 2551, 2557, -1,2551, 2556, 2552, -1,2557, 2554, 2558, -1,2554, 2557, + 2551, -1,2551, 2553, 2554, -1,2555, 2559, 2554, -1,2554, 2560, 2558, -1,2560, 2554, + 2559, -1,2558, 2560, 2561, -1,2562, 2560, 2559, -1,2563, 2560, 2562, -1,2561, 2560, + 2563, -1,2564, 2565, 2566, -1,2567, 2566, 2568, -1,2566, 2569, 2564, -1,2567, 2570, + 2566, -1,2570, 2569, 2566, -1,2566, 2565, 2571, -1,2571, 2572, 2568, -1,2572, 2573, + 2574, -1,2568, 2574, 2575, -1,2574, 2568, 2572, -1,2575, 2574, 2576, -1,2568, 2575, + 2567, -1,2576, 2574, 2573, -1,2571, 2568, 2566, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,2577, 2578, 2579, -1,2577, 2579, + 2580, -1,2581, 2580, 2579, -1,2577, 2582, 2578, -1,2582, 2583, 2584, -1,2585, 2583, + 2586, -1,2582, 2586, 2583, -1,2578, 2582, 2584, -1,2587, 2582, 2577, -1,2587, 2577, + 2580, -1,2588, 2589, 2586, -1,2585, 2586, 2589, -1,2586, 2590, 2588, -1,2588, 2591, + 2589, -1,2582, 2587, 2590, -1,2590, 2586, 2582, -1,2589, 2592, 2585, -1,2589, 2593, + 2594, -1,2595, 2596, 2597, -1,2598, 2595, 2593, -1,2597, 2593, 2595, -1,2595, 2599, + 2596, -1,2594, 2593, 2597, -1,2593, 2589, 2600, -1,2591, 2600, 2589, -1,2601, 2595, + 2598, -1,2600, 2598, 2593, -1,2602, 2603, 2599, -1,2596, 2599, 2603, -1,2601, 2602, + 2599, -1,2599, 2595, 2601, -1,2594, 2592, 2589, -1,2604, 2605, 2606, -1,2607, 2608, + 2609, -1,2609, 2610, 2611, -1,2608, 2607, 2612, -1,2611, 2607, 2609, -1,2613, 2614, + 2615, -1,2606, 2607, 2604, -1,2613, 2605, 2604, -1,2613, 2616, 2614, -1,2606, 2612, + 2607, -1,2605, 2613, 2615, -1,2617, 2618, 2619, -1,2620, 2621, 2617, -1,2622, 2623, + 2624, -1,2621, 2624, 2623, -1,2624, 2621, 2620, -1,2625, 2626, 2627, -1,2619, 2626, + 2628, -1,2627, 2616, 2625, -1,2626, 2625, 2628, -1,2627, 2614, 2616, -1,2618, 2617, + 2621, -1,2617, 2619, 2628, -1,2622, 2624, 2620, -1,2628, 2620, 2617, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,2629, 2630, + 2631, -1,2632, 2633, 2634, -1,2635, 2633, 2632, -1,2631, 2632, 2629, -1,2629, 2632, + 2634, -1,2629, 2636, 2630, -1,2637, 2636, 2638, -1,2639, 2637, 2638, -1,2630, 2636, + 2637, -1,2640, 2636, 2629, -1,2635, 2641, 2633, -1,2629, 2634, 2640, -1,2641, 2634, + 2633, -1,2642, 2636, 2640, -1,2643, 2644, 2645, -1,2642, 2646, 2638, -1,2645, 2644, + 2647, -1,2642, 2638, 2636, -1,2647, 2644, 2648, -1,2638, 2649, 2639, -1,2650, 2649, + 2651, -1,2652, 2650, 2644, -1,2648, 2644, 2653, -1,2654, 2653, 2655, -1,2656, 2644, + 2651, -1,2650, 2651, 2644, -1,2657, 2638, 2646, -1,2651, 2657, 2656, -1,2656, 2658, + 2644, -1,2657, 2651, 2638, -1,2659, 2655, 2658, -1,2644, 2658, 2655, -1,2654, 2655, + 2659, -1,2655, 2653, 2644, -1,2649, 2638, 2651, -1,2652, 2644, 2643, -1,2660, 2661, + 2662, -1,2661, 2663, 2662, -1,2664, 2660, 2662, -1,2665, 2660, 2666, -1,2666, 2667, + 2665, -1,2666, 2660, 2664, -1,2664, 2662, 2663, -1,2668, 2669, 2670, -1,2670, 2671, + 2668, -1,2672, 2673, 2674, -1,2668, 2667, 2669, -1,2675, 2671, 2670, -1,2666, 2664, + 2669, -1,2669, 2667, 2666, -1,2674, 2676, 2672, -1,2674, 2677, 2678, -1,2679, 2680, + 2681, -1,2678, 2677, 2682, -1,2681, 2675, 2679, -1,2680, 2679, 2683, -1,2671, 2675, + 2681, -1,2673, 2683, 2679, -1,2684, 2674, 2678, -1,2683, 2673, 2672, -1,2684, 2676, + 2674, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1, + 635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, + 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, 635, 635, -1,635, + 635, 635, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link3.wrl b/examples/rlsg/mitsubishi-rv6sl/link3.wrl new file mode 100644 index 00000000..b45b90e4 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link3.wrl @@ -0,0 +1,1829 @@ +#VRML V2.0 utf8 + +DEF link3 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.749020 0.749020 0.698039 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 1860 + 0.060287 -0.051636 0.082993, 0.060196 -0.052185 0.082993, 0.059967 -0.052673 0.082993, 0.059601 -0.053101 0.082993, + 0.059143 -0.053406 0.082993, 0.044998 -0.059998 0.082993, 0.044998 -0.060974 0.082993, -0.044998 -0.060974 0.082993, + -0.044998 -0.059998 0.082993, -0.059998 -0.052979 0.082993, -0.059998 0.046021 0.082993, -0.044998 0.052979 0.082993, + -0.044998 0.054016 0.082993, 0.044998 0.054016 0.082993, 0.044998 0.052979 0.082993, 0.059357 0.046326 0.082993, + 0.059814 0.046021 0.082993, 0.060181 0.045593 0.082993, 0.06041 0.045105 0.082993, 0.060501 0.044556 0.082993, + 0.060991 0.020508 0.082993, 0.061129 -0.00354 0.082993, 0.060287 -0.051636 0.082993, 0.060287 -0.051636 0.066193, + 0.060196 -0.052185 0.066193, 0.059967 -0.052673 0.066193, 0.059601 -0.053101 0.066193, 0.059143 -0.053406 0.066193, + 0.059143 -0.053406 0.082993, 0.060284 0.051819 -0.084939, 0.060944 0.024109 -0.0848, 0.061122 -0.003601 -0.084762, + 0.060036 -0.059021 -0.084992, 0.060036 -0.059021 0.007652, 0.060043 -0.058716 0.012497, 0.060081 -0.0578 0.017403, + 0.060173 -0.055115 0.02935, 0.060234 -0.053223 0.041496, 0.060287 -0.051636 0.066193, 0.060501 0.044556 0.06601, + 0.060486 0.044922 0.05368, 0.060463 0.046082 0.04142, 0.060318 0.050598 0.01738, 0.060295 0.051514 0.012497, + 0.06028 0.051819 0.007683, 0.060715 -0.036316 0.07132, 0.060715 -0.036316 0.048676, 0.061129 0 0.04892, + 0.060715 0.036316 0.048676, 0.060715 0.036316 0.07132, 0.061129 0 0.071075, 0.060715 -0.036316 0.07132, + 0.063004 -0.034973 0.069992, 0.063004 -0.034973 0.050003, 0.060715 -0.036316 0.048676, 0.063004 0.034973 0.069992, + 0.060715 0.036316 0.048676, 0.063004 0.034973 0.050003, 0.063004 0.034973 0.069992, 0.063004 0.034973 0.050003, + 0.044998 0.072998 -0.088189, -0.040413 0.072998 -0.106346, -0.059189 0.072998 -0.110336, -0.059669 0.070007 -0.110435, + -0.060112 0.067017 -0.110527, -0.060684 0.067017 -0.110649, -0.063187 0.066528 -0.111183, -0.065147 0.065308 -0.111603, + -0.06628 0.063721 -0.111839, -0.066643 0.062012 -0.111919, -0.066643 -0.067993 -0.111916, -0.066284 -0.069702 -0.111839, + -0.065147 -0.071289 -0.111603, -0.063187 -0.07251 -0.111183, -0.060684 -0.072998 -0.110649, -0.044998 -0.072998 -0.107315, + -0.044998 -0.078003 -0.107315, 0.044998 -0.078003 -0.088189, 0.044998 -0.070984 -0.088189, 0.059219 -0.060547 -0.085164, + 0.059555 -0.060242 -0.085095, 0.059803 -0.059875 -0.085042, 0.060036 -0.059021 -0.084992, 0.060055 0.052734 -0.084989, + 0.059807 0.053101 -0.085042, 0.059467 0.053406 -0.085114, 0.044998 0.064026 -0.088189, 0.044998 0.072998 -0.009285, + -0.02108 0.072998 -0.009285, -0.02108 0.072998 -0.074479, -0.022408 0.072998 -0.084153, -0.026291 0.072998 -0.093118, + -0.032448 0.072998 -0.100701, 0.044998 0.064026 0.006401, 0.044998 0.063538 0.012596, 0.044998 0.062073 0.018837, + 0.044998 0.058105 0.033432, 0.044998 0.055298 0.048279, 0.044998 0.053589 0.063309, 0.044998 0.052979 0.078415, + 0.044998 0.052979 0.082993, 0.044998 0.054016 0.078003, 0.044998 0.055176 0.05661, 0.044998 0.058594 0.035461, + 0.044998 0.06427 0.014801, 0.044998 0.072083 -0.005127, 0.044998 0.072754 -0.007156, 0.044998 0.072998 -0.009285, + 0.059464 0.053406 0.007683, 0.052811 0.058289 0.007027, 0.044998 0.064026 0.006401, 0.060051 0.052734 0.007683, + 0.059799 0.053101 0.007683, 0.059464 0.053406 0.007683, 0.059456 0.052124 0.017776, 0.059456 0.053101 0.012695, + 0.059464 0.053406 0.007683, 0.060081 0.051453 0.017616, 0.059807 0.05188 0.0177, 0.052811 0.056702 0.018326, + 0.044998 0.062073 0.018837, 0.059456 0.052124 0.017776, 0.059456 0.047729 0.041634, 0.059418 0.046631 0.053787, + 0.059357 0.046326 0.06601, 0.044998 0.052979 0.078415, 0.06041 0.045105 0.06601, 0.060181 0.045593 0.06601, + 0.059814 0.046021 0.06601, 0.059357 0.046326 0.082993, 0.059357 0.046326 0.06601, -0.044998 0.054016 0.078003, + 0.044998 0.054016 0.078003, -0.044998 0.055054 0.057602, -0.044998 0.05426 0.06778, -0.044998 0.054016 0.078003, + -0.044998 0.052979 0.057693, -0.044998 0.054016 0.057648, -0.021034 0.072083 -0.005127, 0.044998 0.072083 -0.005127, + -0.034454 0.056702 0.045135, -0.02684 0.05957 0.031082, -0.022301 0.063904 0.015915, -0.020935 0.069824 0, + -0.020988 0.070923 -0.002571, -0.021065 0.072754 -0.007156, -0.02108 0.072998 -0.009285, -0.021217 0.075928 0, + -0.021515 0.08197 0, -0.021515 0.08197 -0.074479, -0.021286 0.077515 -0.074479, -0.099998 -0.072998 -0.078927, + -0.106842 -0.072998 -0.078629, -0.113632 -0.072998 -0.077737, -0.127113 -0.071411 -0.074197, -0.133484 -0.069885 -0.071626, + -0.139565 -0.068237 -0.068535, -0.140148 -0.03064 -0.069539, -0.140287 0.006897 -0.069779, -0.139244 0.08197 -0.06797, + -0.147781 0.08197 -0.062263, -0.155502 0.08197 -0.055496, -0.16227 0.08197 -0.047783, -0.167969 0.08197 -0.039246, + -0.172516 0.08197 -0.030037, -0.175812 0.08197 -0.020309, -0.177818 0.08197 -0.010246, -0.17849 0.08197 0, + -0.177818 0.08197 0.010246, -0.175812 0.08197 0.020309, -0.172523 0.08197 0.030045, -0.167976 0.08197 0.039246, + -0.162277 0.08197 0.047775, -0.155502 0.08197 0.055496, -0.147781 0.08197 0.062271, -0.139252 0.08197 0.067963, + -0.130035 0.08197 0.07251, -0.120316 0.08197 0.075806, -0.110245 0.08197 0.07782, -0.100006 0.08197 0.078491, + -0.089752 0.08197 0.07782, -0.079681 0.08197 0.075806, -0.069962 0.08197 0.07251, -0.06076 0.08197 0.067963, + -0.052216 0.08197 0.062271, -0.04451 0.08197 0.055496, -0.037735 0.08197 0.047775, -0.032028 0.08197 0.039246, + -0.027489 0.08197 0.030045, -0.024185 0.08197 0.020309, -0.022186 0.08197 0.010246, -0.021515 0.08197 0, + -0.052109 0.049683 0.063858, -0.055969 0.047913 0.066635, -0.059998 0.046021 0.069199, -0.059998 0.044495 0.069244, + -0.059998 0.04303 0.06929, -0.063583 0.04303 0.071243, -0.067245 0.04303 0.072998, -0.065947 0.011414 0.072998, + -0.066175 -0.020752 0.072998, -0.067886 -0.051819 0.072998, -0.070892 -0.080017 0.072998, -0.080902 -0.080017 0.076233, + -0.091263 -0.080017 0.078094, -0.101761 -0.080017 0.078568, -0.112244 -0.080017 0.077621, -0.112717 -0.085022 0.077286, + -0.113205 -0.090027 0.076935, -0.106628 -0.090027 0.077774, -0.100006 -0.090027 0.078049, -0.100006 -0.090515 0.078018, + -0.115219 -0.091003 0.076492, -0.129852 -0.091003 0.072067, -0.143341 -0.091003 0.06485, -0.155151 -0.091003 0.055145, + -0.164856 -0.091003 0.043335, -0.172066 -0.091003 0.029854, -0.176506 -0.091003 0.015221, -0.178001 -0.091003 0, + -0.176506 -0.091003 -0.015213, -0.172066 -0.091003 -0.029846, -0.164856 -0.091003 -0.043335, -0.155159 -0.091003 -0.055153, + -0.143333 -0.091003 -0.064857, -0.129852 -0.091003 -0.072061, -0.115219 -0.091003 -0.076501, -0.099998 -0.091003 -0.077996, + -0.099998 -0.082031 -0.078485, -0.065002 -0.072998 -0.106697, -0.069527 -0.072998 -0.102989, -0.071068 -0.072998 -0.102257, + -0.072571 -0.072998 -0.101448, -0.113632 -0.072998 -0.077737, -0.084885 -0.072998 -0.077462, -0.07032 -0.072998 -0.073129, + -0.056862 -0.072998 -0.066093, -0.044998 -0.072998 -0.056602, -0.069336 -0.067993 -0.109566, -0.072113 -0.067993 -0.107315, + -0.072121 -0.068115 -0.1073, -0.072121 -0.068237 -0.107292, -0.071892 -0.070068 -0.106918, -0.07132 -0.071594 -0.105965, + -0.070488 -0.072632 -0.104591, -0.069527 -0.072998 -0.102989, -0.068962 0.062012 -0.109882, -0.071339 0.062012 -0.107922, + -0.069187 0.032288 -0.109692, -0.068558 -0.007446 -0.110229, -0.069855 -0.044861 -0.109131, -0.072113 -0.067993 -0.107315, + -0.060783 0.067017 -0.11055, -0.06089 0.067017 -0.110451, -0.065918 0.066162 -0.109581, -0.070053 0.064148 -0.108353, + -0.071186 0.062866 -0.107952, -0.071327 0.062439 -0.10791, -0.071339 0.062012 -0.107922, -0.060501 0.067017 -0.110497, + -0.06089 0.067017 -0.110451, -0.054337 0.072998 -0.110306, -0.04953 0.072998 -0.109619, -0.040413 0.072998 -0.106346, + -0.02272 0.08197 -0.083665, -0.026268 0.08197 -0.092225, -0.031906 0.08197 -0.099572, -0.039261 0.08197 -0.105209, + -0.047813 0.08197 -0.108757, -0.056999 0.08197 -0.109962, -0.066185 0.08197 -0.108757, -0.074745 0.08197 -0.105209, + -0.075485 0.044434 -0.106495, -0.075787 0.006897 -0.107019, -0.075066 -0.068237 -0.105774, -0.073616 -0.068237 -0.106567, + -0.072121 -0.068237 -0.107292, -0.139244 0.08197 -0.06797, -0.074745 0.08197 -0.105209, -0.139565 -0.068237 -0.068535, + -0.075066 -0.068237 -0.105774, -0.073502 -0.072632 -0.103058, -0.074303 -0.071594 -0.104439, -0.074852 -0.070068 -0.105392, + -0.075066 -0.068237 -0.105774, -0.035065 -0.06366 0.045563, -0.028847 -0.065735 0.034874, -0.024445 -0.068604 0.02346, + -0.021896 -0.072388 0.011513, -0.021278 -0.077209 -0.000832, -0.021355 -0.07782 -0.002754, -0.021461 -0.078003 -0.004768, + -0.023659 -0.078003 -0.019066, -0.028435 -0.078003 -0.032715, -0.035629 -0.078003 -0.045258, -0.044998 -0.078003 -0.056274, + -0.044998 -0.0755 -0.056442, -0.044998 -0.072998 -0.056602, -0.084785 -0.091003 -0.076501, -0.070152 -0.091003 -0.072061, + -0.056664 -0.091003 -0.064857, -0.044846 -0.091003 -0.055153, -0.035149 -0.091003 -0.043335, -0.027939 -0.091003 -0.029846, + -0.023499 -0.091003 -0.015213, -0.022003 -0.091003 0, -0.023499 -0.091003 0.015221, -0.027939 -0.091003 0.029854, + -0.035149 -0.091003 0.043335, -0.044846 -0.091003 0.055145, -0.056671 -0.091003 0.06485, -0.07016 -0.091003 0.072067, + -0.084778 -0.091003 0.076492, -0.100006 -0.091003 0.078003, -0.090363 -0.090027 0.077454, -0.080872 -0.090027 0.075668, + -0.071671 -0.090027 0.072739, -0.062912 -0.090027 0.06868, -0.054718 -0.090027 0.063568, -0.047211 -0.090027 0.057495, + -0.040512 -0.090027 0.050537, -0.034729 -0.090027 0.042809, -0.034912 -0.076843 0.044327, -0.035065 -0.06366 0.045563, + -0.036362 -0.062195 0.056122, -0.037674 -0.06134 0.066742, -0.0392 -0.061157 0.070557, -0.040649 -0.061096 0.072037, + -0.042419 -0.061035 0.073105, -0.043716 -0.061035 0.073669, -0.044998 -0.061035 0.074219, -0.044998 -0.061035 0.076111, + -0.044998 -0.060974 0.078003, 0.044998 -0.060974 0.078003, 0.044998 -0.062012 0.05777, 0.044998 -0.065063 0.037758, + 0.044998 -0.07019 0.018158, 0.044998 -0.077209 -0.000832, -0.021278 -0.077209 -0.000832, -0.037674 -0.090027 0.066742, + -0.037674 -0.06134 0.066742, -0.042419 -0.090027 0.073105, -0.042419 -0.061035 0.073105, -0.038193 -0.090027 0.068741, + -0.0392 -0.090027 0.070557, -0.0858 -0.090027 0.091965, -0.0858 -0.080017 0.091965, -0.059998 -0.080017 0.08075, + -0.059998 -0.052979 0.08075, -0.044998 -0.059998 0.074219, -0.044998 -0.061035 0.074219, -0.093704 -0.090027 0.091095, + -0.093704 -0.080017 0.091095, -0.091873 -0.080017 0.092087, -0.089874 -0.080017 0.092575, -0.0858 -0.080017 0.091965, + -0.087799 -0.090027 0.092545, -0.089874 -0.090027 0.092575, -0.113205 -0.090027 0.076935, -0.059998 -0.080017 0.072998, + -0.059998 -0.080017 0.08075, -0.067245 0.04303 0.072998, -0.059998 0.04303 0.072998, -0.059998 -0.080017 0.072998, + -0.059998 0.046021 0.069199, -0.059998 0.046021 0.082993, -0.059998 -0.052979 0.08075, -0.044998 -0.060974 0.078003, + 0.044998 -0.060974 0.078003, 0.044998 -0.078003 -0.004768, 0.044998 -0.07782 -0.002754, 0.044998 -0.077209 -0.000832, + 0.044998 -0.059998 0.078415, 0.044998 -0.060547 0.063309, 0.044998 -0.062256 0.048279, 0.044998 -0.065125 0.033432, + 0.044998 -0.069092 0.018845, 0.044998 -0.070496 0.012604, 0.044998 -0.070984 0.006401, 0.044998 -0.078003 -0.004768, + 0.044998 -0.059998 0.078415, 0.059143 -0.053406 0.066193, 0.059235 -0.054871 0.041718, 0.059242 -0.056702 0.029663, + 0.059212 -0.059326 0.017799, 0.052658 -0.063782 0.018333, 0.044998 -0.069092 0.018845, 0.059822 -0.058655 0.017624, + 0.059555 -0.059021 0.017723, 0.059219 -0.060547 0.007652, 0.059212 -0.060242 0.012695, 0.059212 -0.059326 0.017799, + 0.059799 -0.059875 0.007652, 0.059547 -0.060242 0.007652, 0.052658 -0.065369 0.007011, 0.044998 -0.070984 0.006401, + 0.059586 -0.053101 0.0746, 0.059967 -0.052673 0.0746, 0.060196 -0.052185 0.0746, 0.060946 0.024109 -0.000999, + 0.061121 -0.003601 -0.000999, 0.060816 -0.031311 -0.000999, 0.059795 0.053101 -0.038715, 0.060055 0.052734 -0.038715, + 0.060219 0.052307 -0.038715, 0.059769 0.052795 0.012733, 0.060051 0.052429 0.01268, 0.060226 0.052002 0.012627, + 0.052437 0.058228 0.012184, 0.052231 0.053833 0.031548, 0.052231 0.051514 0.044983, 0.052231 0.05011 0.058533, + 0.05986 0.046326 0.053818, 0.060211 0.045898 0.053787, 0.060425 0.045349 0.053757, 0.059883 0.047424 0.041672, + 0.060211 0.046936 0.041618, 0.060425 0.046448 0.04155, 0.059883 0.049194 0.02961, 0.060204 0.048767 0.029526, + 0.060379 0.048218 0.029427, 0.059799 0.046021 0.074509, 0.060181 0.045593 0.074509, 0.06041 0.045105 0.074509, + 0 0.055115 0.056671, 0 0.058594 0.035461, 0 0.06427 0.014748, 0.011963 0.072754 -0.007156, -0.02121 0.075928 -0.037239, + -0.140602 -0.047791 -0.068787, -0.140963 -0.004517 -0.069396, -0.140728 0.038757 -0.068996, -0.150665 -0.047791 -0.061752, + -0.151112 -0.004517 -0.0623, -0.150818 0.038757 -0.061939, -0.159855 -0.047791 -0.052891, -0.160385 -0.004517 -0.053362, + -0.160038 0.038757 -0.053055, -0.167706 -0.047791 -0.042385, -0.168303 -0.004517 -0.042759, -0.167912 0.038757 -0.042515, + -0.173798 -0.047791 -0.030567, -0.174448 -0.004517 -0.030838, -0.174023 0.038757 -0.030659, -0.177849 -0.047791 -0.017906, + -0.178534 -0.004517 -0.018059, -0.178085 0.038757 -0.01796, -0.179726 -0.047791 -0.004921, -0.180433 -0.004517 -0.004967, + -0.17997 0.038757 -0.004936, -0.179489 -0.047791 0.007843, -0.180197 -0.004517 0.007912, -0.179733 0.038757 0.007866, + -0.177353 -0.047791 0.019928, -0.178038 -0.004517 0.020103, -0.177597 0.038757 0.019989, -0.173622 -0.047791 0.030991, + -0.174269 -0.004517 0.031273, -0.173843 0.038757 0.03109, -0.168655 -0.047791 0.04081, -0.169264 -0.004517 0.041191, + -0.168869 0.038757 0.040947, -0.162842 -0.047791 0.049316, -0.163389 -0.004517 0.049759, -0.163025 0.038757 0.049469, + -0.156479 -0.047791 0.056473, -0.156981 -0.004517 0.056976, -0.156662 0.038757 0.056656, -0.149323 -0.047791 0.062836, + -0.149748 -0.004517 0.063385, -0.14946 0.038757 0.063019, -0.140823 -0.047791 0.068649, -0.141188 -0.004517 0.06926, + -0.140945 0.038757 0.068863, -0.130997 -0.047791 0.073624, -0.131269 -0.004517 0.074265, -0.131088 0.038757 0.073837, + -0.119934 -0.047791 0.077347, -0.1201 -0.004517 0.078033, -0.119995 0.038757 0.077591, -0.107849 -0.047791 0.079483, + -0.107908 -0.004517 0.0802, -0.107864 0.038757 0.079727, -0.095078 -0.047791 0.079727, -0.09503 -0.004517 0.080429, + -0.095062 0.038757 0.079971, -0.082092 -0.047791 0.07785, -0.081938 -0.004517 0.078537, -0.082047 0.038757 0.078079, + -0.069427 -0.047791 0.073792, -0.069166 -0.004517 0.074448, -0.069336 0.038757 0.07402, -0.066208 -0.072632 -0.108086, + -0.067314 -0.071533 -0.109367, -0.068047 -0.069824 -0.110207, -0.067444 0.063843 -0.110733, -0.066711 0.065552 -0.109894, + -0.107899 -0.03064 -0.088159, -0.108037 0.006897 -0.088399, -0.107735 0.044495 -0.087876, -0.107109 -0.070007 -0.0868, + -0.106552 -0.071594 -0.085824, -0.105721 -0.072693 -0.084382, -0.073143 -0.070007 -0.106346, -0.072632 -0.071594 -0.105347, + -0.071884 -0.072693 -0.103859, -0.089554 -0.077332 -0.078027, -0.077957 -0.077332 -0.07557, -0.065506 -0.077332 -0.070765, + -0.052765 -0.077332 -0.062973, -0.021278 -0.077332 0, -0.021896 -0.077332 0.009804, -0.023705 -0.077332 0.019379, + -0.026627 -0.077332 0.028519, -0.03054 -0.077332 0.037056, 0 -0.07019 0.018112, 0 -0.065063 0.037758, 0 -0.062012 0.057831, + -0.038177 -0.0755 0.06871, -0.0392 -0.0755 0.070557, -0.04068 -0.0755 0.072052, -0.087769 -0.085022 0.092529, + -0.089874 -0.085022 0.092575, -0.091919 -0.085022 0.092072, 0.011772 -0.07782 -0.002754, 0.052124 -0.057129 0.058609, + 0.052124 -0.058594 0.045029, 0.052116 -0.060913 0.03157, 0.059654 -0.056335 0.029663, 0.059967 -0.055908 0.029587, + 0.060143 -0.055359 0.02948, 0.059654 -0.054504 0.041771, 0.059998 -0.054077 0.04171, 0.060196 -0.053528 0.041649, + 0.059647 -0.053406 0.053955, 0.059998 -0.052979 0.05394, 0.060211 -0.05249 0.053909, 0.059525 -0.059998 0.012733, + 0.059799 -0.059631 0.01268, 0.059975 -0.059143 0.012627, 0.052315 -0.065308 0.012192, 0.059544 -0.060242 -0.038754, + 0.059803 -0.059875 -0.038754, 0.059967 -0.059448 -0.038754, 0.060915 0.018188 0.048798, 0.060915 0.018188 0.071198, + 0.060915 -0.018188 0.071198, 0.061022 -0.009094 0.071136, -0.120377 -0.072205 -0.075967, -0.139858 -0.049438 -0.069035, + -0.140218 -0.011902 -0.069659, -0.139767 0.044434 -0.068874, -0.021622 0.066833 0.007957, -0.024567 0.061707 0.023491, + -0.030663 0.058167 0.038109, -0.039734 0.055908 0.051376, -0.048553 0.051331 0.060776, -0.096512 -0.080017 0.078339, + -0.10701 -0.080017 0.078094, -0.103317 -0.090027 0.077911, -0.100006 -0.091003 0.078003, -0.107605 -0.091003 0.077255, + -0.103806 -0.091003 0.077621, -0.101898 -0.091003 0.077805, -0.070263 0.04718 -0.108807, -0.061935 0.066772 -0.110916, + -0.06131 0.066895 -0.110786, -0.060997 0.066956 -0.110718, -0.060844 0.066956 -0.110687, -0.06076 0.066956 -0.110664, + -0.060722 0.067017 -0.110657, -0.060707 0.067017 -0.110657, -0.060692 0.067017 -0.110657, -0.060692 0.067017 -0.110649, + -0.060684 0.067017 -0.110649, -0.0634 0.066589 -0.110016, -0.062149 0.066772 -0.110237, -0.064659 0.066345 -0.109802, + -0.068871 0.012451 -0.109962, -0.02256 -0.078003 -0.011917, -0.022011 -0.078003 -0.008347, -0.026047 -0.078003 -0.025887, + -0.027237 -0.078003 -0.029297, -0.032036 -0.078003 -0.038986, -0.030235 -0.078003 -0.035851, -0.033829 -0.078003 -0.042122, + -0.040314 -0.078003 -0.050766, -0.042656 -0.078003 -0.05352, -0.085617 -0.090027 0.076569, -0.083252 -0.090027 0.076126, + -0.067291 -0.090027 0.070709, -0.069489 -0.090027 0.071716, -0.058807 -0.090027 0.066132, -0.056763 -0.090027 0.06485, + -0.043869 -0.090027 0.054016, -0.037628 -0.090027 0.046677, 0.059601 -0.053101 0.082993, 0.060196 -0.052185 0.082993, + 0.059967 -0.052673 0.082993, 0.060501 0.044556 0.082993, 0.060991 0.020508 0.082993, 0.061129 -0.00354 0.082993, + 0.060287 -0.051636 0.082993, 0.060715 0.036316 0.07132, 0.061129 0 0.071075, 0.060715 -0.036316 0.07132, + 0.063004 -0.034973 0.069992, 0.060715 0.036316 0.07132, 0.063004 -0.034973 0.050003, 0.060715 -0.036316 0.048676, + 0.061129 0 0.04892, 0.060715 0.036316 0.048676, 0.063004 -0.034973 0.069992, 0.063004 -0.034973 0.050003, + 0.063004 0.034973 0.050003, 0.063004 0.034973 0.069992, 0.060284 0.051819 -0.084939, 0.060944 0.024109 -0.0848, + 0.061122 -0.003601 -0.084762, -0.040413 0.072998 -0.106346, 0.044998 0.072998 -0.088189, 0.044998 0.064026 -0.088189, + 0.044998 0.054016 0.082993, 0.059467 0.053406 -0.085114, 0.044998 0.064026 -0.088189, 0.059467 0.053406 -0.085114, + 0.059807 0.053101 -0.085042, 0.060055 0.052734 -0.084989, 0.06028 0.051819 0.007683, 0.060284 0.051819 -0.084939, + 0.059799 0.053101 0.007683, 0.060318 0.050598 0.01738, 0.060051 0.052734 0.007683, 0.06028 0.051819 0.007683, + 0.060295 0.051514 0.012497, 0.059456 0.052124 0.017776, 0.059456 0.053101 0.012695, 0.059464 0.053406 0.007683, + 0.052811 0.058289 0.007027, 0.044998 0.063538 0.012596, 0.044998 0.064026 0.006401, 0.044998 0.062073 0.018837, + 0.052811 0.056702 0.018326, 0.044998 0.058105 0.033432, 0.044998 0.055298 0.048279, 0.044998 0.053589 0.063309, + 0.059357 0.046326 0.06601, 0.059418 0.046631 0.053787, 0.059456 0.047729 0.041634, 0.059456 0.052124 0.017776, + 0.059807 0.05188 0.0177, 0.060081 0.051453 0.017616, 0.060486 0.044922 0.05368, 0.060501 0.044556 0.06601, + 0.060463 0.046082 0.04142, 0.060318 0.050598 0.01738, 0.059814 0.046021 0.082993, 0.059814 0.046021 0.06601, + 0.060181 0.045593 0.082993, 0.06041 0.045105 0.082993, 0.060501 0.044556 0.082993, 0.06041 0.045105 0.06601, + 0.060181 0.045593 0.06601, 0.060501 0.044556 0.06601, 0.059357 0.046326 0.082993, 0.044998 0.052979 0.078415, + 0.044998 0.052979 0.082993, 0.059357 0.046326 0.06601, -0.044998 0.054016 0.082993, 0.044998 0.054016 0.082993, + -0.044998 0.052979 0.082993, -0.044998 0.054016 0.082993, -0.044998 0.05426 0.06778, -0.044998 0.054016 0.078003, + 0.044998 0.054016 0.078003, -0.044998 0.055054 0.057602, 0.044998 0.055176 0.05661, 0.044998 0.058594 0.035461, + 0.044998 0.06427 0.014801, 0.044998 0.072998 -0.009285, 0.044998 0.072083 -0.005127, -0.021034 0.072083 -0.005127, + 0.044998 0.072754 -0.007156, -0.021034 0.072083 -0.005127, -0.021065 0.072754 -0.007156, -0.020935 0.069824 0, + -0.020988 0.070923 -0.002571, -0.02108 0.072998 -0.009285, -0.02108 0.072998 -0.074479, -0.034454 0.056702 0.045135, + -0.044998 0.055054 0.057602, -0.044998 0.054016 0.057648, -0.044998 0.052979 0.057693, -0.022301 0.063904 0.015915, + -0.02684 0.05957 0.031082, -0.021217 0.075928 0, -0.020935 0.069824 0, -0.106842 -0.072998 -0.078629, + -0.044998 -0.072998 -0.107315, -0.099998 -0.072998 -0.078927, -0.060684 -0.072998 -0.110649, -0.063187 -0.07251 -0.111183, + -0.065002 -0.072998 -0.106697, -0.066284 -0.069702 -0.111839, -0.065147 -0.071289 -0.111603, -0.066643 -0.067993 -0.111916, + -0.066643 0.062012 -0.111919, -0.069336 -0.067993 -0.109566, -0.065147 0.065308 -0.111603, -0.06628 0.063721 -0.111839, + -0.063187 0.066528 -0.111183, -0.066643 0.062012 -0.111919, -0.068962 0.062012 -0.109882, -0.060783 0.067017 -0.11055, + -0.060112 0.067017 -0.110527, -0.060684 0.067017 -0.110649, -0.070053 0.064148 -0.108353, -0.071186 0.062866 -0.107952, + -0.071327 0.062439 -0.10791, -0.069187 0.032288 -0.109692, -0.071339 0.062012 -0.107922, -0.060501 0.067017 -0.110497, + -0.06089 0.067017 -0.110451, -0.059669 0.070007 -0.110435, -0.059189 0.072998 -0.110336, -0.060112 0.067017 -0.110527, + -0.065918 0.066162 -0.109581, -0.069855 -0.044861 -0.109131, -0.072113 -0.067993 -0.107315, -0.072121 -0.068115 -0.1073, + -0.068558 -0.007446 -0.110229, -0.032448 0.072998 -0.100701, -0.026291 0.072998 -0.093118, -0.022408 0.072998 -0.084153, + -0.021515 0.08197 -0.074479, -0.021286 0.077515 -0.074479, -0.02108 0.072998 -0.074479, -0.04953 0.072998 -0.109619, + -0.059189 0.072998 -0.110336, -0.054337 0.072998 -0.110306, -0.040413 0.072998 -0.106346, -0.162277 0.08197 0.047775, + -0.155502 0.08197 -0.055496, -0.16227 0.08197 -0.047783, -0.155502 0.08197 0.055496, -0.147781 0.08197 -0.062263, + -0.147781 0.08197 0.062271, -0.167969 0.08197 -0.039246, -0.167976 0.08197 0.039246, -0.177818 0.08197 -0.010246, + -0.17849 0.08197 0, -0.177818 0.08197 0.010246, -0.175812 0.08197 0.020309, -0.172516 0.08197 -0.030037, + -0.175812 0.08197 -0.020309, -0.172523 0.08197 0.030045, -0.06076 0.08197 0.067963, -0.021515 0.08197 0, + -0.056999 0.08197 -0.109962, -0.066185 0.08197 -0.108757, -0.021515 0.08197 -0.074479, -0.047813 0.08197 -0.108757, + -0.039261 0.08197 -0.105209, -0.026268 0.08197 -0.092225, -0.02272 0.08197 -0.083665, -0.031906 0.08197 -0.099572, + -0.024185 0.08197 0.020309, -0.022186 0.08197 0.010246, -0.130035 0.08197 0.07251, -0.139252 0.08197 0.067963, + -0.120316 0.08197 0.075806, -0.110245 0.08197 0.07782, -0.100006 0.08197 0.078491, -0.032028 0.08197 0.039246, + -0.037735 0.08197 0.047775, -0.027489 0.08197 0.030045, -0.04451 0.08197 0.055496, -0.079681 0.08197 0.075806, + -0.069962 0.08197 0.07251, -0.052216 0.08197 0.062271, -0.089752 0.08197 0.07782, -0.140148 -0.03064 -0.069539, + -0.140287 0.006897 -0.069779, -0.075787 0.006897 -0.107019, -0.139244 0.08197 -0.06797, -0.074745 0.08197 -0.105209, + -0.075485 0.044434 -0.106495, -0.133484 -0.069885 -0.071626, -0.139565 -0.068237 -0.068535, -0.127113 -0.071411 -0.074197, + -0.072571 -0.072998 -0.101448, -0.113632 -0.072998 -0.077737, -0.074852 -0.070068 -0.105392, -0.075066 -0.068237 -0.105774, + -0.073616 -0.068237 -0.106567, -0.072121 -0.068237 -0.107292, -0.074303 -0.071594 -0.104439, -0.073502 -0.072632 -0.103058, + -0.072571 -0.072998 -0.101448, -0.071892 -0.070068 -0.106918, -0.07132 -0.071594 -0.105965, -0.071068 -0.072998 -0.102257, + -0.070488 -0.072632 -0.104591, -0.069527 -0.072998 -0.102989, -0.099998 -0.072998 -0.078927, -0.084885 -0.072998 -0.077462, + -0.07032 -0.072998 -0.073129, -0.056862 -0.072998 -0.066093, -0.099998 -0.082031 -0.078485, -0.099998 -0.091003 -0.077996, + -0.100006 -0.090027 0.078049, -0.100006 -0.090515 0.078018, -0.024445 -0.068604 0.02346, -0.021896 -0.072388 0.011513, + -0.028847 -0.065735 0.034874, -0.036362 -0.062195 0.056122, -0.034912 -0.076843 0.044327, -0.035065 -0.06366 0.045563, + -0.034729 -0.090027 0.042809, -0.0392 -0.061157 0.070557, -0.037674 -0.06134 0.066742, -0.037674 -0.090027 0.066742, + -0.040649 -0.061096 0.072037, -0.042419 -0.090027 0.073105, -0.042419 -0.061035 0.073105, -0.043716 -0.061035 0.073669, + -0.0858 -0.090027 0.091965, -0.112717 -0.085022 0.077286, -0.093704 -0.090027 0.091095, -0.093704 -0.080017 0.091095, + -0.112244 -0.080017 0.077621, -0.037674 -0.090027 0.066742, -0.054718 -0.090027 0.063568, -0.047211 -0.090027 0.057495, + -0.062912 -0.090027 0.06868, -0.042419 -0.090027 0.073105, -0.0392 -0.090027 0.070557, -0.040512 -0.090027 0.050537, + -0.034729 -0.090027 0.042809, -0.038193 -0.090027 0.068741, -0.071671 -0.090027 0.072739, -0.100006 -0.090027 0.078049, + -0.093704 -0.090027 0.091095, -0.106628 -0.090027 0.077774, -0.113205 -0.090027 0.076935, -0.090363 -0.090027 0.077454, + -0.0858 -0.090027 0.091965, -0.080872 -0.090027 0.075668, -0.087799 -0.090027 0.092545, -0.089874 -0.090027 0.092575, + -0.070892 -0.080017 0.072998, -0.080902 -0.080017 0.076233, -0.091263 -0.080017 0.078094, -0.093704 -0.080017 0.091095, + -0.0858 -0.080017 0.091965, -0.101761 -0.080017 0.078568, -0.112244 -0.080017 0.077621, -0.091873 -0.080017 0.092087, + -0.089874 -0.080017 0.092575, -0.066175 -0.020752 0.072998, -0.065947 0.011414 0.072998, -0.067886 -0.051819 0.072998, + -0.070892 -0.080017 0.072998, -0.063583 0.04303 0.071243, -0.067245 0.04303 0.072998, -0.059998 0.04303 0.072998, + -0.059998 0.04303 0.06929, -0.059998 -0.080017 0.072998, -0.059998 0.04303 0.072998, -0.059998 -0.080017 0.08075, + -0.059998 -0.052979 0.082993, -0.059998 0.044495 0.069244, -0.055969 0.047913 0.066635, -0.059998 0.046021 0.069199, + -0.059998 0.046021 0.082993, -0.044998 0.052979 0.082993, -0.044998 0.052979 0.057693, -0.052109 0.049683 0.063858, + -0.059998 -0.052979 0.08075, -0.044998 -0.059998 0.074219, -0.044998 -0.059998 0.082993, -0.059998 -0.052979 0.082993, + -0.044998 -0.059998 0.074219, -0.044998 -0.061035 0.074219, -0.044998 -0.061035 0.076111, -0.044998 -0.060974 0.082993, + -0.044998 -0.059998 0.082993, -0.044998 -0.0755 -0.056442, -0.044998 -0.078003 -0.107315, -0.044998 -0.078003 -0.056274, + -0.044998 -0.072998 -0.056602, -0.044998 -0.072998 -0.107315, -0.044998 -0.060974 0.082993, -0.044998 -0.060974 0.078003, + 0.044998 -0.060974 0.082993, 0.044998 -0.065063 0.037758, 0.044998 -0.062012 0.05777, 0.044998 -0.059998 0.082993, + 0.044998 -0.060974 0.078003, 0.044998 -0.078003 -0.088189, 0.044998 -0.070984 -0.088189, 0.044998 -0.07019 0.018158, + -0.021461 -0.078003 -0.004768, -0.023659 -0.078003 -0.019066, -0.028435 -0.078003 -0.032715, 0.044998 -0.078003 -0.088189, + -0.035629 -0.078003 -0.045258, -0.044998 -0.078003 -0.107315, -0.044998 -0.078003 -0.056274, -0.021461 -0.078003 -0.004768, + 0.044998 -0.078003 -0.004768, 0.044998 -0.07782 -0.002754, -0.021278 -0.077209 -0.000832, 0.044998 -0.077209 -0.000832, + -0.021355 -0.07782 -0.002754, 0.059143 -0.053406 0.066193, 0.059143 -0.053406 0.082993, 0.044998 -0.059998 0.082993, + 0.044998 -0.059998 0.078415, 0.044998 -0.060547 0.063309, 0.044998 -0.062256 0.048279, 0.044998 -0.065125 0.033432, + 0.059242 -0.056702 0.029663, 0.059212 -0.059326 0.017799, 0.059235 -0.054871 0.041718, 0.059143 -0.053406 0.066193, + 0.059601 -0.053101 0.066193, 0.060081 -0.0578 0.017403, 0.060173 -0.055115 0.02935, 0.060234 -0.053223 0.041496, + 0.060196 -0.052185 0.066193, 0.059967 -0.052673 0.066193, 0.060287 -0.051636 0.066193, 0.059555 -0.059021 0.017723, + 0.060036 -0.059021 0.007652, 0.060043 -0.058716 0.012497, 0.059822 -0.058655 0.017624, 0.060081 -0.0578 0.017403, + 0.044998 -0.070496 0.012604, 0.059219 -0.060547 0.007652, 0.059212 -0.060242 0.012695, 0.059212 -0.059326 0.017799, + 0.052658 -0.063782 0.018333, 0.044998 -0.069092 0.018845, 0.059219 -0.060547 0.007652, 0.052658 -0.065369 0.007011, + 0.059219 -0.060547 -0.085164, 0.044998 -0.070984 -0.088189, 0.044998 -0.070984 0.006401, 0.059555 -0.060242 -0.085095, + 0.059219 -0.060547 -0.085164, 0.059219 -0.060547 0.007652, 0.059547 -0.060242 0.007652, 0.059799 -0.059875 0.007652, + 0.059803 -0.059875 -0.085042, 0.060036 -0.059021 -0.084992, 0.060036 -0.059021 0.007652, -0.115219 -0.091003 -0.076501, + -0.155159 -0.091003 -0.055153, -0.143333 -0.091003 -0.064857, -0.129852 -0.091003 -0.072061, -0.044846 -0.091003 -0.055153, + -0.155151 -0.091003 0.055145, -0.176506 -0.091003 -0.015213, -0.172066 -0.091003 -0.029846, -0.164856 -0.091003 -0.043335, + -0.176506 -0.091003 0.015221, -0.084785 -0.091003 -0.076501, -0.056664 -0.091003 -0.064857, -0.070152 -0.091003 -0.072061, + -0.099998 -0.091003 -0.077996, -0.023499 -0.091003 -0.015213, -0.035149 -0.091003 -0.043335, -0.027939 -0.091003 -0.029846, + -0.044846 -0.091003 0.055145, -0.178001 -0.091003 0, -0.164856 -0.091003 0.043335, -0.172066 -0.091003 0.029854, + -0.115219 -0.091003 0.076492, -0.129852 -0.091003 0.072067, -0.143341 -0.091003 0.06485, -0.084778 -0.091003 0.076492, + -0.100006 -0.091003 0.078003, -0.023499 -0.091003 0.015221, -0.027939 -0.091003 0.029854, -0.035149 -0.091003 0.043335, + -0.022003 -0.091003 0, -0.056671 -0.091003 0.06485, -0.07016 -0.091003 0.072067, 0.012573 -0.071411 -0.139999, + 0.012573 0.066406 -0.139999, -0.043861 0.066833 -0.139999, -0.043861 -0.071838 -0.139999, 0.018799 -0.071472 -0.137825, + 0.018799 0.066467 -0.137825, 0.018364 0.066467 -0.138153, 0.017906 0.066528 -0.138458, 0.015846 0.066589 -0.13945, + 0.013611 0.066467 -0.139946, 0.013092 0.066467 -0.139984, 0.012573 0.066406 -0.139999, 0.013092 -0.071411 -0.139984, + 0.013611 -0.071472 -0.139946, 0.015846 -0.071594 -0.13945, 0.017906 -0.071472 -0.138458, 0.018364 -0.071472 -0.138153, + 0.025711 -0.071594 -0.131981, 0.032257 -0.071777 -0.125725, 0.044167 -0.072144 -0.112091, 0.044167 0.0672 -0.112091, + 0.032257 0.066772 -0.125725, 0.025711 0.066589 -0.131981, 0.017906 -0.071472 -0.138458, 0.017082 -0.074036 -0.135979, + 0.016251 -0.07666 -0.133469, 0.024101 -0.076782 -0.126686, 0.031441 -0.077026 -0.119354, 0.044472 -0.077454 -0.103218, + 0.044319 -0.07489 -0.107628, 0.012764 -0.074036 -0.137482, 0.011894 -0.076599 -0.135002, 0.013084 -0.076599 -0.134903, + 0.014198 -0.076599 -0.134613, 0.016251 -0.07666 -0.133469, -0.044037 -0.077026 -0.135002, 0.011894 -0.076599 -0.135002, + -0.044998 0.067017 -0.107315, -0.044273 0.066284 -0.128212, -0.044106 0.065369 -0.133041, -0.043995 0.063721 -0.136139, + -0.043949 0.062256 -0.137417, -0.043938 0.060974 -0.137737, -0.043938 -0.066956 -0.137741, -0.043945 -0.068237 -0.137421, + -0.043991 -0.069702 -0.136139, -0.044106 -0.07135 -0.133041, -0.044273 -0.072266 -0.128212, -0.044998 -0.072998 -0.107315, + -0.044998 -0.078003 -0.107315, -0.044037 -0.077026 -0.135002, -0.044037 0.072021 -0.135002, -0.044998 0.072998 -0.107315, + -0.060181 0.067017 -0.110542, -0.05172 0.06665 -0.118927, -0.047867 0.066467 -0.123466, -0.044273 0.066284 -0.128212, + -0.066002 0.062073 -0.112, -0.053871 0.061584 -0.123928, -0.048611 0.061279 -0.130619, -0.043938 0.060974 -0.137737, + -0.062309 0.066711 -0.110992, -0.064079 0.065857 -0.111374, -0.065308 0.064697 -0.111633, -0.066002 0.063416 -0.111782, + -0.066002 0.062744 -0.111946, -0.066002 -0.068115 -0.112, -0.059685 -0.067871 -0.117706, -0.053871 -0.067566 -0.123924, + -0.043938 -0.066956 -0.137741, -0.066002 -0.068726 -0.111946, -0.066002 -0.069397 -0.111778, -0.065308 -0.070679 -0.111633, + -0.064079 -0.071838 -0.111374, -0.062309 -0.072693 -0.110992, -0.060181 -0.072998 -0.110542, -0.055832 -0.072815 -0.114616, + -0.05172 -0.072632 -0.118927, -0.066002 0.063416 -0.111782, -0.066002 -0.069397 -0.111778, 0.060001 -0.058716 -0.085, + 0.059864 -0.059448 -0.08503, 0.059551 -0.060059 -0.085095, 0.059109 -0.060608 -0.085191, 0.058552 -0.061035 -0.085309, + 0.044998 -0.070984 -0.088189, 0.044998 -0.078003 -0.088189, -0.044998 -0.078003 -0.107315, -0.060181 -0.072998 -0.110542, + 0.044998 0.072998 -0.088189, 0.044998 0.064026 -0.088189, 0.058552 0.054077 -0.085309, 0.059551 0.05304 -0.085095, + 0.059864 0.052429 -0.08503, 0.060001 0.051758 -0.085, 0.060001 -0.058716 -0.085, 0.044304 -0.070251 -0.108017, + 0.044312 -0.070557 -0.107964, 0.044312 -0.070862 -0.107834, 0.044327 -0.071228 -0.107407, 0.044373 -0.071472 -0.106102, + 0.058552 -0.061035 -0.085309, 0.044308 0.063232 -0.108013, 0.044373 0.064453 -0.106102, 0.04435 0.064392 -0.106827, + 0.044327 0.064209 -0.107407, 0.044312 0.063843 -0.10783, 0.044308 0.063599 -0.107964, 0.044472 0.072449 -0.103218, + 0.044319 0.069885 -0.107628, 0.044167 0.0672 -0.112091, 0.044998 -0.078003 -0.088189, 0.044373 -0.071472 -0.106102, + -0.044037 0.072021 -0.135002, 0.011894 0.071594 -0.135002, 0.014198 0.071594 -0.134613, 0.015259 0.071594 -0.13414, + 0.016251 0.071655 -0.133469, 0.024101 0.071838 -0.126686, 0.031441 0.072021 -0.119354, 0.044472 0.072449 -0.103218, + 0.012764 0.069031 -0.137482, 0.011894 0.071594 -0.135002, 0.017082 0.069031 -0.135979, 0.016251 0.071655 -0.133469, + 0.014235 -0.002502 -0.139862, 0.015871 -0.002502 -0.139442, 0.017416 -0.002502 -0.138752, 0.025705 -0.002502 -0.131985, + 0.032259 -0.002502 -0.125725, 0.038424 -0.002502 -0.119083, 0.024788 -0.074219 -0.12944, 0.032661 -0.074402 -0.121712, + 0.039932 -0.074646 -0.113411, 0.015007 -0.074219 -0.136925, -0.046021 0.065918 -0.128891, -0.047401 0.064819 -0.129837, + -0.048321 0.06311 -0.130432, -0.051476 0.066223 -0.121948, -0.052765 0.065063 -0.123009, -0.053631 0.063416 -0.12368, + -0.057503 0.066467 -0.115494, -0.058693 0.065369 -0.116661, -0.059494 0.06366 -0.117405, -0.048601 -0.002991 -0.130634, + -0.053869 -0.002991 -0.123928, -0.05969 -0.002991 -0.117695, -0.057503 -0.072449 -0.115494, -0.058693 -0.07135 -0.116661, + -0.059494 -0.069641 -0.117401, -0.051476 -0.072205 -0.121948, -0.052765 -0.071106 -0.123009, -0.053627 -0.069397 -0.12368, + -0.046021 -0.071899 -0.128891, -0.047401 -0.070801 -0.129837, -0.048317 -0.069092 -0.130432, 0.051941 -0.065857 -0.09575, + 0.052124 -0.06543 -0.09607, 0.052185 -0.065002 -0.096345, 0.051937 0.058838 -0.095746, 0.05212 0.058411 -0.09607, + 0.052185 0.057983 -0.096341, 0.015007 0.069214 -0.136925, 0.024788 0.069214 -0.12944, 0.032661 0.069397 -0.121712, + 0.039932 0.069641 -0.113411, 0.044243 -0.073547 -0.109863, 0.044167 -0.072144 -0.112091, 0.038216 -0.07196 -0.118904, + 0.044685 0.064209 -0.097146, 0.044685 -0.071228 -0.097146, 0.038216 0.066956 -0.118904, 0.041191 0.067078 -0.115501, + 0.042679 0.067139 -0.113792, 0.044167 0.0672 -0.112091, 0.044243 0.068542 -0.109863, 0.012573 -0.071411 -0.139999, + 0.018799 0.066467 -0.137825, 0.018799 -0.071472 -0.137825, 0.032257 -0.071777 -0.125725, 0.025711 -0.071594 -0.131981, + 0.018364 -0.071472 -0.138153, 0.017082 -0.074036 -0.135979, 0.017906 -0.071472 -0.138458, 0.015846 -0.071594 -0.13945, + 0.013611 -0.071472 -0.139946, 0.012573 -0.071411 -0.139999, 0.012764 -0.074036 -0.137482, 0.013092 -0.071411 -0.139984, + -0.043861 -0.071838 -0.139999, -0.043861 0.066833 -0.139999, -0.044998 0.067017 -0.107315, -0.047867 0.066467 -0.123466, + -0.044273 0.066284 -0.128212, -0.044106 0.065369 -0.133041, -0.043995 0.063721 -0.136139, -0.060181 0.067017 -0.110542, + -0.05172 0.06665 -0.118927, -0.043949 0.062256 -0.137417, -0.048611 0.061279 -0.130619, -0.043938 0.060974 -0.137737, + -0.053871 0.061584 -0.123928, -0.066002 0.062073 -0.112, -0.044273 -0.072266 -0.128212, -0.044106 -0.07135 -0.133041, + -0.043991 -0.069702 -0.136139, -0.059685 -0.067871 -0.117706, -0.066002 -0.068115 -0.112, -0.053871 -0.067566 -0.123924, + -0.043945 -0.068237 -0.137421, -0.043938 -0.066956 -0.137741, -0.066002 -0.068726 -0.111946, -0.066002 0.062744 -0.111946, + -0.066002 0.062073 -0.112, -0.066002 -0.068115 -0.112, -0.064079 0.065857 -0.111374, -0.065308 0.064697 -0.111633, + -0.066002 0.063416 -0.111782, -0.062309 0.066711 -0.110992, -0.044998 0.072998 -0.107315, -0.044998 0.067017 -0.107315, + -0.060181 0.067017 -0.110542, -0.065308 -0.070679 -0.111633, -0.064079 -0.071838 -0.111374, -0.066002 -0.069397 -0.111778, + -0.062309 -0.072693 -0.110992, -0.044998 -0.072998 -0.107315, 0.059551 -0.060059 -0.085095, 0.059109 -0.060608 -0.085191, + 0.059864 -0.059448 -0.08503, 0.044304 -0.070251 -0.108017, 0.060001 0.051758 -0.085, 0.060001 -0.058716 -0.085, + 0.058552 0.054077 -0.085309, 0.059551 0.05304 -0.085095, 0.059864 0.052429 -0.08503, 0.060001 0.051758 -0.085, + 0.044308 0.063232 -0.108013, 0.044373 0.064453 -0.106102, 0.044998 0.064026 -0.088189, 0.058552 0.054077 -0.085309, + 0.044319 -0.07489 -0.107628, 0.044167 -0.072144 -0.112091, 0.044304 -0.070251 -0.108017, 0.044312 -0.070557 -0.107964, + 0.044312 -0.070862 -0.107834, 0.044308 0.063232 -0.108013, 0.044327 -0.071228 -0.107407, 0.044472 -0.077454 -0.103218, + 0.044308 0.063599 -0.107964, 0.044312 0.063843 -0.10783, 0.044327 0.064209 -0.107407, 0.044373 0.064453 -0.106102, + 0.04435 0.064392 -0.106827, 0.044998 0.072998 -0.088189, 0.044998 0.064026 -0.088189, 0.044998 -0.070984 -0.088189, + -0.044998 0.072998 -0.107315, 0.044998 0.072998 -0.088189, -0.044037 0.072021 -0.135002, -0.043861 0.066833 -0.139999, + 0.013611 0.066467 -0.139946, 0.013092 0.066467 -0.139984, 0.012573 0.066406 -0.139999, 0.017906 0.066528 -0.138458, + 0.015846 0.066589 -0.13945, 0.014198 0.071594 -0.134613, 0.012764 0.069031 -0.137482, 0.015259 0.071594 -0.13414, + 0.013611 0.066467 -0.139946, 0.011894 0.071594 -0.135002, 0.017082 0.069031 -0.135979, 0.016251 0.071655 -0.133469, + 0.044319 0.069885 -0.107628, 0.025711 0.066589 -0.131981, 0.032257 0.066772 -0.125725, 0.024101 0.071838 -0.126686, + 0.018364 0.066467 -0.138153, 0.017906 0.066528 -0.138458, 0.018799 0.066467 -0.137825, 0.031441 0.072021 -0.119354, + 0.044472 0.072449 -0.103218, -0.044037 -0.077026 -0.135002, 0.011894 -0.076599 -0.135002, -0.044998 -0.078003 -0.107315, + 0.024101 -0.076782 -0.126686, 0.014198 -0.076599 -0.134613, 0.013084 -0.076599 -0.134903, 0.016251 -0.07666 -0.133469, + 0.031441 -0.077026 -0.119354, 0.044472 -0.077454 -0.103218, 0.044998 -0.078003 -0.088189, 0.058552 -0.061035 -0.085309, + 0.044998 -0.070984 -0.088189, 0.044373 -0.071472 -0.106102, -0.060181 -0.072998 -0.110542, -0.055832 -0.072815 -0.114616, + -0.044998 -0.072998 -0.107315, -0.05172 -0.072632 -0.118927, -0.044273 -0.072266 -0.128212, -0.139 0.08197 -0.067551, + -0.147484 0.08197 -0.061882, -0.155159 0.08197 -0.055153, -0.16188 0.08197 -0.047485, -0.167549 0.08197 -0.039001, + -0.172066 0.08197 -0.029846, -0.175346 0.08197 -0.020187, -0.177338 0.08197 -0.010178, -0.178001 0.08197 0, + -0.177338 0.08197 0.010185, -0.175346 0.08197 0.020187, -0.172066 0.08197 0.029854, -0.167549 0.08197 0.039001, + -0.16188 0.08197 0.047485, -0.155151 0.08197 0.055145, -0.147491 0.08197 0.061874, -0.139008 0.08197 0.067551, + -0.129852 0.08197 0.072067, -0.120193 0.08197 0.075333, -0.110184 0.08197 0.077332, -0.100006 0.08197 0.078003, + -0.089813 0.08197 0.077332, -0.079819 0.08197 0.075333, -0.07016 0.08197 0.072067, -0.061005 0.08197 0.067551, + -0.052521 0.08197 0.061874, -0.044846 0.08197 0.055145, -0.038116 0.08197 0.047485, -0.032455 0.08197 0.039001, + -0.027939 0.08197 0.029854, -0.024666 0.08197 0.020187, -0.022667 0.08197 0.010185, -0.022003 0.08197 0, + -0.022003 0.08197 -0.074479, -0.023193 0.08197 -0.083535, -0.026688 0.08197 -0.091981, -0.032249 0.08197 -0.099229, + -0.039497 0.08197 -0.10479, -0.047943 0.08197 -0.108284, -0.056999 0.08197 -0.109474, -0.066063 0.08197 -0.108284, + -0.074501 0.08197 -0.10479, -0.13855 0.133118 -0.06678, -0.146942 0.133118 -0.06118, -0.154526 0.133118 -0.054527, + -0.161179 0.133118 -0.046944, -0.166779 0.133118 -0.038551, -0.171234 0.133118 -0.029503, -0.174484 0.133118 -0.019951, + -0.176453 0.133118 -0.010063, -0.177109 0.133118 8e-006, -0.176453 0.133118 0.010063, -0.174484 0.133118 0.019951, + -0.171234 0.133118 0.029503, -0.166779 0.133118 0.038551, -0.161179 0.133118 0.046936, -0.154526 0.133118 0.05452, + -0.146942 0.133118 0.061172, -0.13855 0.133118 0.066772, -0.129517 0.133118 0.071228, -0.119965 0.133118 0.074478, + -0.110062 0.133118 0.076447, -0.100006 0.133118 0.077103, -0.089935 0.133118 0.076447, -0.080048 0.133118 0.074478, + -0.070496 0.133118 0.071228, -0.061447 0.133118 0.066772, -0.053055 0.133118 0.061172, -0.045471 0.133118 0.05452, + -0.038834 0.133118 0.046936, -0.033218 0.133118 0.038551, -0.028748 0.133118 0.029503, -0.025513 0.133118 0.019951, + -0.023544 0.133118 0.010063, -0.022888 0.133118 8e-006, -0.022003 0.08197 0, -0.132019 0.14801 -0.055458, + -0.128571 0.15509 -0.049477, -0.125 0.161987 -0.043297, -0.135361 0.161987 -0.035347, -0.143295 0.161987 -0.025002, + -0.1483 0.161987 -0.012947, -0.149994 0.161987 8e-006, -0.1483 0.161987 0.012947, -0.143295 0.161987 0.025002, + -0.135361 0.161987 0.035362, -0.125 0.161987 0.043289, -0.112946 0.161987 0.048294, -0.100006 0.161987 0.049988, + -0.087067 0.161987 0.048294, -0.074997 0.161987 0.043289, -0.064636 0.161987 0.035362, -0.056702 0.161987 0.025002, + -0.051697 0.161987 0.012947, -0.050003 0.161987 8e-006, -0.042862 0.15509 8e-006, -0.035965 0.14801 8e-006, + -0.074677 0.133118 -0.103661, -0.07724 0.14801 -0.087075, -0.078598 0.15509 -0.078332, -0.080002 0.161987 -0.069283, + -0.125 0.161987 -0.043297, -0.074051 0.133057 -0.104012, -0.065826 0.132935 -0.10743, -0.057007 0.132813 -0.108589, + -0.048172 0.132751 -0.10743, -0.039948 0.132751 -0.104027, -0.032883 0.132751 -0.098596, -0.027451 0.132813 -0.091531, + -0.024048 0.132935 -0.083306, -0.022888 0.133057 -0.074471, -0.022888 0.133118 -0.074121, -0.022888 0.133118 -0.073754, + -0.035965 0.14801 -0.06324, -0.042862 0.15509 -0.057701, -0.050003 0.161987 -0.051964, -0.05069 0.161987 -0.057137, + -0.052673 0.161987 -0.061958, -0.055862 0.161987 -0.066109, -0.059998 0.161987 -0.069284, -0.064819 0.161987 -0.071282, + -0.070007 0.161987 -0.071969, -0.07518 0.161987 -0.071282, -0.080002 0.161987 -0.069283, -0.074371 0.133118 -0.103828, + -0.074501 0.08197 -0.10479, -0.022888 0.133118 8e-006, -0.022888 0.133118 -0.073754, -0.063995 0.161987 -0.030205, + -0.070587 0.161987 -0.036659, -0.078293 0.161987 -0.041695, -0.086853 0.161987 -0.045128, -0.095901 0.161987 -0.046822, + -0.105118 0.161987 -0.046715, -0.114136 0.161987 -0.044823, -0.122604 0.161987 -0.041206, -0.130219 0.161987 -0.036003, + -0.136658 0.161987 -0.029411, -0.141693 0.161987 -0.021706, -0.145126 0.161987 -0.013145, -0.14682 0.161987 -0.004097, + -0.146713 0.161987 0.005119, -0.144821 0.161987 0.014137, -0.141205 0.161987 0.022606, -0.136002 0.161987 0.030205, + -0.12941 0.161987 0.036659, -0.121704 0.161987 0.041695, -0.113159 0.161987 0.04512, -0.104095 0.161987 0.046814, + -0.094879 0.161987 0.046707, -0.085861 0.161987 0.044815, -0.077393 0.161987 0.041206, -0.069794 0.161987 0.036003, + -0.063339 0.161987 0.029427, -0.058304 0.161987 0.021706, -0.054871 0.161987 0.013145, -0.053177 0.161987 0.004097, + -0.053284 0.161987 -0.005119, -0.055176 0.161987 -0.014137, -0.058792 0.161987 -0.022606, -0.072983 0.161011 -0.022667, + -0.08197 0.160339 -0.015114, -0.099991 0.15979 8e-006, -0.118027 0.160339 0.015129, -0.127014 0.161011 0.022667, + -0.146027 0.107544 -0.062424, -0.153061 0.107544 -0.056549, -0.159683 0.107544 -0.049522, -0.165627 0.107544 -0.041328, + -0.170616 0.107544 -0.032074, -0.174385 0.107544 -0.021919, -0.17675 0.107544 -0.011131, -0.177567 0.107544 0, + -0.17675 0.107544 0.011139, -0.174385 0.107544 0.021935, -0.170616 0.107544 0.032082, -0.165634 0.107544 0.041328, + -0.159683 0.107544 0.049515, -0.153061 0.107544 0.056549, -0.146027 0.107544 0.062424, -0.138786 0.107544 0.067154, + -0.13105 0.107544 0.07106, -0.122452 0.107544 0.074234, -0.113052 0.107544 0.076447, -0.102982 0.107544 0.077499, + -0.092484 0.107544 0.077179, -0.081802 0.107544 0.075378, -0.071274 0.107544 0.072037, -0.061226 0.107544 0.067154, + -0.051987 0.107544 0.060898, -0.043816 0.107544 0.053452, -0.036911 0.107544 0.045105, -0.031395 0.107544 0.036171, + -0.027275 0.107544 0.026932, -0.02449 0.107544 0.017677, -0.022934 0.107544 0.008636, -0.141953 0.140625 -0.056908, + -0.138 0.14801 -0.051537, -0.133896 0.15509 -0.045982, -0.148376 0.140625 -0.051552, -0.143814 0.14801 -0.0467, + -0.139084 0.15509 -0.041664, -0.154404 0.140625 -0.045143, -0.149277 0.14801 -0.040886, -0.143967 0.15509 -0.036476, + -0.159821 0.140625 -0.037682, -0.154175 0.14801 -0.034126, -0.148346 0.15509 -0.030449, -0.164368 0.140625 -0.029243, + -0.158295 0.14801 -0.026482, -0.152008 0.15509 -0.023628, -0.167801 0.140625 -0.019997, -0.161423 0.14801 -0.018105, + -0.1548 0.15509 -0.016151, -0.169968 0.140625 -0.010155, -0.163361 0.14801 -0.009193, -0.15654 0.15509 -0.008202, + -0.1707 0.140625 8e-006, -0.164032 0.14801 8e-006, -0.157135 0.15509 8e-006, -0.169968 0.140625 0.010155, + -0.163361 0.14801 0.009193, -0.15654 0.15509 0.008202, -0.167801 0.140625 0.019989, -0.161423 0.14801 0.018097, + -0.1548 0.15509 0.016151, -0.164368 0.140625 0.029243, -0.158295 0.14801 0.026482, -0.152008 0.15509 0.023628, + -0.159821 0.140625 0.037682, -0.154175 0.14801 0.034126, -0.148346 0.15509 0.030449, -0.154404 0.140625 0.045135, + -0.149261 0.14801 0.040894, -0.143967 0.15509 0.036476, -0.148376 0.140625 0.051544, -0.143814 0.14801 0.046692, + -0.139084 0.15509 0.041664, -0.141953 0.140625 0.0569, -0.138 0.14801 0.051529, -0.133896 0.15509 0.045975, + -0.135345 0.140625 0.061218, -0.132019 0.14801 0.05545, -0.128571 0.15509 0.049469, -0.128311 0.140625 0.064774, + -0.125641 0.14801 0.05867, -0.122879 0.15509 0.052338, -0.120468 0.140625 0.067657, -0.11853 0.14801 0.061279, + -0.116547 0.15509 0.054672, -0.111893 0.140625 0.069687, -0.110779 0.14801 0.06311, -0.109604 0.15509 0.056305, + -0.102722 0.140625 0.070633, -0.102463 0.14801 0.06398, -0.102203 0.15509 0.057083, -0.09314 0.140625 0.070358, + -0.093796 0.14801 0.063721, -0.094452 0.15509 0.056854, -0.083405 0.140625 0.06871, -0.084976 0.14801 0.062241, + -0.086594 0.15509 0.055527, -0.073807 0.140625 0.065659, -0.076279 0.14801 0.059464, -0.078842 0.15509 0.053055, + -0.064651 0.140625 0.061218, -0.067993 0.14801 0.05545, -0.071442 0.15509 0.049469, -0.056229 0.140625 0.055511, + -0.060349 0.14801 0.050278, -0.064636 0.15509 0.044861, -0.048782 0.140625 0.048721, -0.053604 0.14801 0.044128, + -0.058609 0.15509 0.039375, -0.042496 0.140625 0.041122, -0.047913 0.14801 0.037239, -0.053528 0.15509 0.033226, + -0.03746 0.140625 0.032967, -0.04335 0.14801 0.029854, -0.049469 0.15509 0.026634, -0.033707 0.140625 0.024544, + -0.039948 0.14801 0.02224, -0.046417 0.15509 0.019844, -0.031158 0.140625 0.016106, -0.037659 0.14801 0.014595, + -0.044373 0.15509 0.013023, -0.029739 0.140625 0.007881, -0.036362 0.14801 0.007133, -0.043228 0.15509 0.006371, + -0.096634 0.15509 -0.067909, -0.100082 0.14801 -0.073892, -0.103409 0.140625 -0.079659, -0.030151 0.140381 -0.076837, + -0.036774 0.147827 -0.070474, -0.043625 0.155029 -0.063911, -0.033295 0.140442 -0.084344, -0.039551 0.147888 -0.077111, + -0.046021 0.155029 -0.06965, -0.038254 0.140442 -0.090783, -0.043945 0.147888 -0.082803, -0.04982 0.15509 -0.074578, + -0.044724 0.140442 -0.095742, -0.049667 0.147888 -0.087182, -0.054764 0.15509 -0.078362, -0.052246 0.140442 -0.098855, + -0.05632 0.147888 -0.089944, -0.060516 0.15509 -0.080743, -0.060318 0.140442 -0.099938, -0.063446 0.147888 -0.090905, + -0.066681 0.155029 -0.081582, -0.068375 0.140381 -0.098901, -0.070572 0.147827 -0.08999, -0.072845 0.155029 -0.080789, + -0.023354 0.107544 -0.082353, -0.026428 0.107544 -0.090592, -0.031975 0.107544 -0.098298, -0.039734 0.107544 -0.104401, + -0.048889 0.107544 -0.108063, -0.058334 0.107544 -0.109009, -0.067001 0.107544 -0.107552, -0.042877 0.15509 -0.036873, + -0.035965 0.14801 -0.036873, -0.029312 0.140625 -0.036873, -0.132294 0.161011 0.014198, -0.121536 0.160339 0.009468, + -0.110764 0.159912 0.004738, -0.134216 0.161011 0.008537, -0.122818 0.160339 0.005699, -0.11142 0.159912 0.002846, + -0.135223 0.161011 0.00193, -0.123489 0.160339 0.001289, -0.11174 0.159912 0.000648, -0.134842 0.161011 -0.005455, + -0.123245 0.160339 -0.003639, -0.111618 0.159912 -0.001823, -0.132721 0.161011 -0.013176, -0.121826 0.160339 -0.008781, + -0.110916 0.159912 -0.004387, -0.128632 0.161011 -0.020607, -0.119095 0.160339 -0.013741, -0.109543 0.159912 -0.006874, + -0.122681 0.161011 -0.027016, -0.115128 0.160339 -0.018028, -0.107559 0.159912 -0.00901, -0.115326 0.161011 -0.031776, + -0.110214 0.160339 -0.021187, -0.105103 0.159912 -0.010597, -0.107285 0.161011 -0.034508, -0.104858 0.160339 -0.023018, + -0.102432 0.159912 -0.011513, -0.099319 0.161011 -0.035271, -0.099548 0.160339 -0.023521, -0.099777 0.159912 -0.011757, + -0.09198 0.161011 -0.034355, -0.09465 0.160339 -0.022911, -0.097321 0.159912 -0.011452, -0.085648 0.161011 -0.032219, + -0.090424 0.160339 -0.021492, -0.095215 0.159912 -0.01075, -0.080414 0.161011 -0.029335, -0.086929 0.160339 -0.019569, + -0.09346 0.159912 -0.009789, -0.067703 0.161011 -0.014198, -0.078461 0.160339 -0.009468, -0.089233 0.159912 -0.004738, + -0.065765 0.161011 -0.008537, -0.077179 0.160339 -0.005699, -0.088577 0.159912 -0.002846, -0.064774 0.161011 -0.00193, + -0.076508 0.160339 -0.001289, -0.088257 0.159912 -0.000648, -0.06514 0.161011 0.005455, -0.076752 0.160339 0.003639, + -0.088379 0.159912 0.001823, -0.067276 0.161011 0.013176, -0.078171 0.160339 0.008781, -0.089081 0.159912 0.004387, + -0.071365 0.161011 0.020607, -0.080902 0.160339 0.013741, -0.090454 0.159912 0.006874, -0.077332 0.161011 0.027016, + -0.084869 0.160339 0.018036, -0.092438 0.159912 0.00901, -0.084671 0.161011 0.031769, -0.089783 0.160339 0.021187, + -0.094894 0.159912 0.010597, -0.092712 0.161011 0.034508, -0.095123 0.160339 0.023018, -0.097565 0.159912 0.011513, + -0.100677 0.161011 0.035263, -0.100464 0.160339 0.023521, -0.10022 0.159912 0.011757, -0.108017 0.161011 0.034355, + -0.105347 0.160339 0.022911, -0.102676 0.159912 0.011452, -0.114349 0.161011 0.032219, -0.109573 0.160339 0.021492, + -0.104782 0.159912 0.01075, -0.119583 0.161011 0.029343, -0.113068 0.160339 0.019569, -0.106537 0.159912 0.009789, + -0.139 0.08197 -0.067551, -0.147484 0.08197 -0.061882, -0.155159 0.08197 -0.055153, -0.16188 0.08197 -0.047485, + -0.167549 0.08197 -0.039001, -0.172066 0.08197 -0.029846, -0.175346 0.08197 -0.020187, -0.177338 0.08197 -0.010178, + -0.178001 0.08197 0, -0.177338 0.08197 0.010185, -0.175346 0.08197 0.020187, -0.167549 0.08197 0.039001, + -0.172066 0.08197 0.029854, -0.16188 0.08197 0.047485, -0.155151 0.08197 0.055145, -0.147491 0.08197 0.061874, + -0.139008 0.08197 0.067551, -0.129852 0.08197 0.072067, -0.120193 0.08197 0.075333, -0.110184 0.08197 0.077332, + -0.100006 0.08197 0.078003, -0.089813 0.08197 0.077332, -0.079819 0.08197 0.075333, -0.07016 0.08197 0.072067, + -0.061005 0.08197 0.067551, -0.052521 0.08197 0.061874, -0.044846 0.08197 0.055145, -0.032455 0.08197 0.039001, + -0.038116 0.08197 0.047485, -0.027939 0.08197 0.029854, -0.024666 0.08197 0.020187, -0.022667 0.08197 0.010185, + -0.13855 0.133118 -0.06678, -0.146942 0.133118 -0.06118, -0.154526 0.133118 -0.054527, -0.161179 0.133118 -0.046944, + -0.166779 0.133118 -0.038551, -0.171234 0.133118 -0.029503, -0.174484 0.133118 -0.019951, -0.176453 0.133118 0.010063, + -0.174484 0.133118 0.019951, -0.176453 0.133118 -0.010063, -0.177109 0.133118 8e-006, -0.171234 0.133118 0.029503, + -0.166779 0.133118 0.038551, -0.161179 0.133118 0.046936, -0.154526 0.133118 0.05452, -0.146942 0.133118 0.061172, + -0.13855 0.133118 0.066772, -0.129517 0.133118 0.071228, -0.119965 0.133118 0.074478, -0.110062 0.133118 0.076447, + -0.100006 0.133118 0.077103, -0.089935 0.133118 0.076447, -0.080048 0.133118 0.074478, -0.070496 0.133118 0.071228, + -0.045471 0.133118 0.05452, -0.038834 0.133118 0.046936, -0.033218 0.133118 0.038551, -0.028748 0.133118 0.029503, + -0.025513 0.133118 0.019951, -0.023544 0.133118 0.010063, -0.022888 0.133118 8e-006, -0.061447 0.133118 0.066772, + -0.053055 0.133118 0.061172, -0.128571 0.15509 -0.049477, -0.132019 0.14801 -0.055458, -0.13855 0.133118 -0.06678, + -0.07724 0.14801 -0.087075, -0.074677 0.133118 -0.103661, -0.078598 0.15509 -0.078332, -0.022003 0.08197 -0.074479, + -0.023193 0.08197 -0.083535, -0.022888 0.133057 -0.074471, -0.026688 0.08197 -0.091981, -0.032249 0.08197 -0.099229, + -0.024048 0.132935 -0.083306, -0.027451 0.132813 -0.091531, -0.032883 0.132751 -0.098596, -0.039497 0.08197 -0.10479, + -0.047943 0.08197 -0.108284, -0.056999 0.08197 -0.109474, -0.048172 0.132751 -0.10743, -0.066063 0.08197 -0.108284, + -0.039948 0.132751 -0.104027, -0.057007 0.132813 -0.108589, -0.065826 0.132935 -0.10743, -0.074051 0.133057 -0.104012, + -0.074677 0.133118 -0.103661, -0.074371 0.133118 -0.103828, -0.074501 0.08197 -0.10479, -0.139 0.08197 -0.067551, + -0.13855 0.133118 -0.06678, -0.022003 0.08197 0, -0.022003 0.08197 -0.074479, -0.022888 0.133057 -0.074471, + -0.022888 0.133118 -0.074121, -0.050003 0.161987 8e-006, -0.042862 0.15509 8e-006, -0.050003 0.161987 -0.051964, + -0.042862 0.15509 -0.057701, -0.035965 0.14801 8e-006, -0.022888 0.133118 8e-006, -0.035965 0.14801 -0.06324, + -0.022888 0.133118 -0.073754, -0.070007 0.161987 -0.071969, -0.07518 0.161987 -0.071282, -0.064819 0.161987 -0.071282, + -0.055862 0.161987 -0.066109, -0.059998 0.161987 -0.069284, -0.052673 0.161987 -0.061958, -0.080002 0.161987 -0.069283, + -0.125 0.161987 -0.043297, -0.05069 0.161987 -0.057137, -0.050003 0.161987 -0.051964, -0.050003 0.161987 8e-006, + -0.051697 0.161987 0.012947, -0.056702 0.161987 0.025002, -0.064636 0.161987 0.035362, -0.135361 0.161987 -0.035347, + -0.143295 0.161987 -0.025002, -0.1483 0.161987 -0.012947, -0.149994 0.161987 8e-006, -0.1483 0.161987 0.012947, + -0.143295 0.161987 0.025002, -0.087067 0.161987 0.048294, -0.100006 0.161987 0.049988, -0.074997 0.161987 0.043289, + -0.125 0.161987 0.043289, -0.135361 0.161987 0.035362, -0.112946 0.161987 0.048294, -0.141205 0.161987 0.022606, + -0.136002 0.161987 0.030205, -0.144821 0.161987 0.014137, -0.146713 0.161987 0.005119, -0.14682 0.161987 -0.004097, + -0.145126 0.161987 -0.013145, -0.136658 0.161987 -0.029411, -0.141693 0.161987 -0.021706, -0.130219 0.161987 -0.036003, + -0.122604 0.161987 -0.041206, -0.114136 0.161987 -0.044823, -0.095901 0.161987 -0.046822, -0.105118 0.161987 -0.046715, + -0.078293 0.161987 -0.041695, -0.086853 0.161987 -0.045128, -0.063995 0.161987 -0.030205, -0.070587 0.161987 -0.036659, + -0.058792 0.161987 -0.022606, -0.063995 0.161987 -0.030205, -0.072983 0.161011 -0.022667, -0.055176 0.161987 -0.014137, + -0.053284 0.161987 -0.005119, -0.053177 0.161987 0.004097, -0.054871 0.161987 0.013145, -0.063339 0.161987 0.029427, + -0.058304 0.161987 0.021706, -0.08197 0.160339 -0.015114, -0.099991 0.15979 8e-006, -0.069794 0.161987 0.036003, + -0.085861 0.161987 0.044815, -0.077393 0.161987 0.041206, -0.104095 0.161987 0.046814, -0.094879 0.161987 0.046707, + -0.121704 0.161987 0.041695, -0.113159 0.161987 0.04512, -0.127014 0.161011 0.022667, -0.136002 0.161987 0.030205, + -0.12941 0.161987 0.036659, -0.118027 0.160339 0.015129] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 1466 + 0 0 1, 0.560697 -0.828021 0.000494553, 0.692523 -0.721395 0.000780113, 0.638722 -0.769438 -7.80944e-007, + 0.837511 -0.546421 -2.80786e-007, 0.560697 -0.828021 -0.000495378, 0.692523 -0.721395 -0.000781415, 0.840217 -0.542251 0, + 0.962726 -0.27048 0, 0.940222 -0.340562 0, 0.98654 -0.163521 0, 0.999655 0.0262559 -0.000139807, 0.99973 0.0231669 0.00197432, + 0.999782 0.0208469 -0.00116888, 0.999648 0.0265453 9.42947e-005, 0.999729 0.0232595 -0.000111428, + 0.999897 0.0114568 -0.00869619, 0.999921 0.0122562 -0.00293491, 0.999953 0.00970628 0.000766902, + 0.999874 0.0158637 0.000130139, 0.999674 0.0255102 -0.000383951, 0.999714 0.0239127 9.65959e-006, + 0.999792 0.0203802 -0.0010395, 0.999765 0.0216461 -0.00148865, 0.999915 0.0128291 -0.00230319, + 0.999886 0.015118 -2.38691e-005, 0.99999 -0.00446216 -0.000706302, 1 0.000475367 0.000204519, + 0.999957 -0.00928109 0.000796585, 0.999992 0.00192466 -0.00352205, 0.999775 -0.0211053 0.00232048, + 0.999719 -0.0227153 0.00684342, 0.999607 -0.028051 -0.000108876, 0.999693 -0.0247626 -0.000172837, + 0.999601 -0.028235 -0.000479288, 0.9996 -0.0282647 -0.000895945, 0.999784 -0.0207787 -0.000550036, + 0.999994 -0.00355119 0.00016977, 0.999714 -0.0238592 -0.00141251, 0.999353 -0.0359786 -0.000185694, + 0.998705 -0.0508494 0.00175817, 0.999358 -0.0358193 0.000236441, 0.999927 -0.0114251 -0.00395324, + 0.999924 -0.0117888 -0.00350162, 0.506048 -0.862505 0, 0.500969 -5.76649e-005 0.865465, 0.501774 -0.00011533 0.864999, + 0.501237 0 0.86531, 0.501774 0.00011533 0.864999, 0.500969 5.76649e-005 0.865465, 0.506048 0.862505 0, + 0.500831 4.79132e-005 -0.865545, 0.501501 9.58264e-005 -0.865157, 0.501054 0 -0.865416, 0.501501 -9.58264e-005 -0.865157, + 0.500831 -4.79132e-005 -0.865545, 1 0 0, 0.205852 -0.0020273 -0.978581, 0.206477 -0.00178412 -0.97845, + 0.206658 -0.0013406 -0.978412, 0.206078 -0.00181286 -0.978534, 0.207701 -0.000321441 -0.978192, + 0.207788 1.97682e-005 -0.978174, 0.207937 0 -0.978142, 0.207956 2.12825e-005 -0.978138, 0.207917 -1.34684e-005 -0.978146, + 0.205588 0.000944917 -0.978638, 0.208274 -0.000473238 -0.97807, 0.20845 0.000391138 -0.978033, 0.202503 0.00283866 -0.979277, + 0.202969 0.00170215 -0.979184, 0.207878 0 -0.978155, 0.207885 -2.50963e-005 -0.978153, 0.207827 0.00033774 -0.978166, + 0.207842 -0.000837147 -0.978162, 0.207127 0.000429967 -0.978314, 0.209683 -0.00111292 -0.977769, + 0.208651 -0.000259367 -0.97799, 0.204879 0.000848972 -0.978787, 0.199098 0.00358654 -0.979973, 0.210124 0.00211567 -0.977673, + 0.20732 0.000421112 -0.978273, 0.208379 0.000507756 -0.978048, 0.205963 0.00055632 -0.97856, 0.200528 -0.00201769 -0.979686, + 0.207863 -0.000980801 -0.978157, 0 1 0, 0.591695 0.806162 1.98613e-005, 0.591783 0.806097 1.03008e-005, + 0.591751 0.806121 1.32409e-005, 0.591688 0.806167 1.91212e-005, 0.591864 0.806037 0, 0.676266 0.736658 -1.80504e-005, + 0.775492 0.631358 -1.92386e-005, 0.734545 0.67856 5.58788e-005, 0.673537 0.739154 9.74542e-005, 0.775515 0.631329 0.00012889, + 0.864223 0.503108 4.90541e-005, 0.920331 0.391139 -0.000403676, 0.963643 0.267194 4.07729e-005, 0.919358 0.393422 0.000481799, + 0.982601 0.185728 0.000661635, 0.982606 0.185699 -0.000578759, 0.657712 0.745413 0.108508, 0.586194 0.795597 0.152981, + 0.736237 0.665659 0.121874, 0.767313 0.639911 0.0417773, 0.731472 0.677904 0.0734413, 0.857783 0.510267 0.0619402, + 0.684087 0.727901 0.0467525, 0.919768 0.385313 0.0745678, 0.966751 0.254044 0.0292363, 0.980282 0.193857 0.0382894, + 0.916572 0.399372 0.0199247, 0.981599 0.190917 0.00365422, 0.990545 0.136556 0.0131361, 0.569136 0.807452 0.155261, + 0.577412 0.807071 0.123416, 0.569715 0.805732 0.16193, 0.580092 0.806804 0.112074, 0.571843 0.80118 0.176372, + 0.58713 0.807876 0.0511412, 0.585675 0.80862 0.0558449, 0.583456 0.805861 0.100831, 0.587354 0.80683 0.0635564, + 0.5511 0.807599 0.209937, 0.535809 0.825423 0.177724, 0.56557 0.800455 0.198498, 0.527863 0.831102 0.175015, + 0.500996 0.857698 0.115578, 0.501379 0.855749 0.127722, 0.534362 0.826346 0.177791, 0.505145 0.853367 0.128815, + 0.461246 0.885589 0.0546304, 0.476282 0.876098 0.0748868, 0.447497 0.893645 0.0338437, 0.474189 0.878023 0.0649582, + 0.445634 0.894773 0.0281172, 0.560845 0.827597 0.0231385, 0.702266 0.711631 0.0201016, 0.653136 0.756173 0.0402089, + 0.568371 0.820718 0.0581036, 0.701602 0.708366 0.0772813, 0.852472 0.522018 0.0280797, 0.839751 0.542747 0.0156042, + 0.684843 0.722175 0.0972281, 0.769532 0.6283 0.11428, 0.742572 0.655896 0.135601, 0.729931 0.66776 0.145938, + 0.89038 0.451898 0.0548855, 0.904382 0.418114 0.0852815, 0.891671 0.445727 0.0790632, 0.961353 0.275223 0.00727353, + 0.967475 0.252414 0.0166942, 0.988983 0.147895 0.00633412, 0.986532 0.163526 0.00365379, 0.993538 0.113023 0.0103672, + 0.967625 0.25086 0.0277479, 0.962134 0.269251 0.0424443, 0.965828 0.255155 0.045518, -0.994759 0.0992369 0.024642, + 0.561552 0.827441 -0.000490686, 0.692124 0.721778 -0.00077272, 0.638798 0.769374 -8.18296e-007, + 0.837148 0.546976 -2.9395e-007, 0.561552 0.827441 0.00048982, 0.692124 0.721778 0.000771356, 0.83985 0.542818 0, + 0.962725 0.270483 0, 0.940221 0.340564 0, 0.986539 0.163527 0, 0.4204 0.907339 0, -1 0 0, -0.00128886 0.998544 0.0539334, + 0 0.999715 0.0238609, -0.00180142 0.998938 0.0460484, -0.00227139 0.994136 0.108109, 0.000824967 0.994469 0.10503, + -0.00153055 0.986255 0.165224, -0.000800559 0.992113 0.125344, 0 0.977152 0.212541, -0.00221112 0.977392 0.211421, + -0.00223883 0.969059 0.246818, -0.0019231 0.949831 0.312758, 0.000725633 0.950132 0.311847, -0.00138913 0.924014 0.382355, + 0 0.910611 0.413265, -0.000469327 0.915115 0.403193, -0.000247379 0.954427 0.298443, -0.00075022 0.93038 0.366596, + 0 0.993497 0.113862, 0 0.976602 0.215055, 0 0.976602 0.215055, 0 0.949428 0.313984, 0.998948 0.0458358 0.00128105, + 0.998805 0.0488643 -0.000458014, 0.998881 0.0473017 0.000139422, 0.998934 0.0461498 -0.000865302, + 0.998971 0.0453533 0.000688523, 0.998894 0.0470172 -0.000349337, 0.998855 0.0478349 7.13093e-005, + 0.99899 0.0449414 -4.86085e-005, 0.998826 0.0484469 2.61713e-005, 0.998705 0.0508757 7.47797e-005, + 0.998757 0.0498388 9.3871e-005, -0.0434488 -0.0488277 -0.997862, -0.0471013 -0.0515902 -0.997557, + -0.0804887 -0.057946 -0.99507, -0.0741477 -0.0631745 -0.995244, -0.375728 -0.0590743 -0.924845, + -0.269845 -0.0547987 -0.961343, -0.19465 -0.0562841 -0.979257, -0.322964 -0.0578377 -0.944642, -0.424951 -0.0544733 -0.903576, + -0.194623 -0.050093 -0.979598, -0.562392 -0.0485173 -0.825446, -0.471362 -0.0490623 -0.880574, -0.496066 -0.0320123 -0.867694, + -0.376327 -0.0305632 -0.925983, -0.48738 -0.00543507 -0.873173, -0.50219 -0.0177893 -0.864574, + -0.627813 -0.00493194 -0.778348, -0.625595 -0.0303064 -0.779559, -0.702013 -0.0469788 -0.710612, + -0.860563 -0.0299707 -0.508461, -0.820688 -0.0462061 -0.569505, -0.922887 -0.0456832 -0.382352, + -0.929762 -0.0270987 -0.367162, -0.75311 -0.027692 -0.657312, -0.750042 0.00167515 -0.661388, -0.974542 -0.0299812 -0.222193, + -0.983032 -0.0462383 -0.177509, -0.998876 -0.0469901 0.00618509, -0.981084 -0.0469857 0.187791, -0.993515 -0.0295768 0.109788, + -0.858344 -0.0305256 0.512166, -0.922049 -0.046843 0.384228, -0.828432 -0.0472484 0.558093, -0.963307 -0.030051 0.266713, + -0.778616 -0.030649 0.626751, -0.706313 -0.0477302 0.706289, -0.998054 -0.029625 -0.0548658, -0.619252 -0.0334231 0.784481, + -0.558226 -0.0472935 0.82834, -0.919243 -0.000891667 -0.393689, -0.970515 -0.00549049 -0.240976, + -0.995324 -0.00286035 0.0965459, -0.997237 -0.000873367 -0.0742743, -0.972442 -0.00561044 0.233076, + -0.838994 -0.0055266 -0.544113, -0.931313 -0.00283129 0.364209, -0.916409 -0.0271718 0.399319, + -0.865432 -0.000940842 0.501025, -0.706495 -0.0029124 0.707712, -0.698274 -0.0271434 0.715316, -0.512449 -0.0304814 0.858177, + -0.615699 -0.00723788 0.787948, -0.788099 -0.00286469 0.615542, -0.383979 -0.0469401 0.922148, -0.438733 0.00953072 -0.898567, + -0.324356 0.0463486 -0.944799, -0.395671 0.0395916 -0.917539, -0.639133 0.0216641 -0.768791, -0.544156 0.046744 -0.837681, + -0.845455 0.0212766 -0.533623, -0.750062 0.0254107 -0.660879, -0.923526 0.0273284 -0.38256, -0.975148 0.0212928 -0.220527, + -0.795415 0.0380886 -0.604867, -0.70206 0.0381886 -0.711093, -0.555542 0.0277546 -0.831025, -0.396779 -0.00733793 -0.917885, + -0.923238 0.0377006 -0.382374, -0.873253 0.03738 -0.485831, -0.961015 0.0374171 -0.273953, -0.990135 0.0381249 -0.134827, + -0.997682 0.0254231 -0.063127, -0.996672 0.0232133 0.0781394, -0.97048 0.0218085 0.240194, -0.999253 0.0381594 0.00617678, + -0.988709 0.0379561 0.144958, -0.918567 0.0257317 0.394428, -0.85472 0.0266577 0.518403, -0.715002 0.0215027 0.698792, + -0.788453 0.0242651 0.614616, -0.621623 0.0222352 0.783001, -0.95957 0.0375428 0.278954, -0.923353 0.0374455 0.382122, + -0.874501 0.0378172 0.483548, -0.803434 0.0381603 0.59417, -0.706403 0.0383702 0.706769, -0.594124 0.0380282 0.803474, + 0.78216 0.0381831 0.621907, 0.704059 0.0404545 0.708988, 0.757673 0.0338416 0.651757, -0.509521 -0.00278497 0.860454, + 0.825791 0.0362353 0.562812, 0.882609 0.0351598 0.468792, 0.869284 0.0358758 0.493009, -0.507311 0.0239978 0.861429, + 0.952012 0.0340501 0.304162, 0.961993 0.0385817 0.270333, 0.92096 0.038147 0.387786, -0.25879 -0.031113 0.965432, + -0.198853 -0.0861399 0.976236, -0.136564 -0.222506 0.965319, -0.101039 -0.337071 0.936042, -0.195161 -0.0484022 0.979576, + -0.169209 -0.0419641 0.984686, -0.0837822 -0.125673 0.988528, -0.0684317 -0.115091 0.990995, -0.0581005 -0.22471 0.972692, + 0.122249 -0.0404196 0.991676, 0.0564529 -0.0313329 0.997913, 0.0450596 -0.0449884 0.997971, -0.104034 -0.0305677 0.994104, + -0.0998146 -0.0468378 0.993903, -0.0950608 -0.0277132 0.995086, -0.0898782 -0.0452232 0.994925, -0.0218317 -0.0407704 0.99893, + -0.385934 -0.00270693 0.922523, -0.399207 -0.0270964 0.91646, -0.375803 0.0257753 0.926341, -0.23742 -0.000930032 0.971407, + -0.48318 0.037918 0.8747, 0.0742826 -0.00476328 0.997226, -0.237327 0.0261803 0.971077, -0.0811634 -0.000137063 0.996701, + -0.104467 0.023178 0.994258, 0.21791 -0.0254261 0.975638, 0.0496368 0.0229495 0.998504, 0.263473 -0.0389805 0.963879, + 0.344421 -0.0281786 0.938392, 0.340594 -0.0386293 0.939417, 0.392111 -0.0312197 0.919388, 0.399058 -0.0139802 0.916819, + 0.344972 -0.00509431 0.938599, 0.240812 -2.46639e-005 0.970572, 0.4003 0.00817553 0.916348, 0.341317 0.0225836 0.939677, + 0.20638 0.0230763 0.9782, -0.145107 0.0378312 0.988693, -0.00639094 0.0380748 0.999254, 0.274083 0.0373811 0.960979, + 0.406226 0.0320435 0.91321, 0.135188 0.038051 0.990089, 0.393228 0.0401301 0.918565, 0.460258 0.0357083 0.887067, + 0.478483 0.0267189 0.87769, 0.490518 0.0355171 0.870707, 0.478208 0.0275627 0.877814, 0.497801 0.0424268 0.866253, + -0.279595 0.0376105 0.959381, -0.382343 0.0376684 0.923252, 0.646365 0.0395121 0.762005, 0.683056 0.0399366 0.729273, + 0.608017 0.0424815 0.792786, 0.54929 0.0426975 0.83454, 0.607906 0.0409906 0.79295, 0.645852 0.0334502 0.76273, + 0.646014 0.033094 0.762608, 0.980232 0.0354358 0.194651, 0.91843 0.0448054 0.393038, 0.9924 0.0350814 0.117949, + 0.995089 0.036292 0.0920886, -0.0738897 -0.302291 0.950348, -0.0819596 -0.3461 0.934611, 0.993362 0.0474429 0.104789, + 0.993617 0.0459041 0.103043, 0.995569 0.0381451 0.0859529, 0 -1 0, -0.0944451 -0.98942 -0.110127, + -0.310516 -0.881592 -0.355493, -0.249087 -0.923455 -0.291866, -0.462916 -0.703668 -0.539036, -0.409891 -0.764966 -0.496805, + -0.126136 -0.980836 -0.148493, -0.632218 -0.297701 -0.715314, -0.518294 -0.623078 -0.585786, -0.603275 -0.372586 -0.705152, + -0.657724 -0.0566468 -0.751126, -0.637067 -0.129567 -0.75984, -0.564764 -0.460566 -0.684778, -0.200674 -0.948381 -0.245569, + -0.624564 -0.148647 -0.766697, -0.628775 -0.0541181 -0.775702, -0.628872 -0.052501 -0.775734, -0.123126 -0.98095 -0.150254, + -0.651185 -4.69585e-005 -0.758919, -0.644177 -1.30831e-005 -0.764877, -0.659505 -1.40718e-005 -0.7517, + -0.636186 -0.000116205 -0.771536, -0.636185 -0.00011644 -0.771537, -0.6552 -3.12654e-005 -0.755456, + -0.644019 0.00019695 -0.765009, -0.629698 0.00048046 -0.77684, -0.637206 0.000196422 -0.770694, -0.61046 0.640536 -0.465889, + -0.142929 0.947292 -0.286721, -0.492232 0.662895 -0.564161, -0.634021 0.299914 -0.71279, -0.603876 0.385648 -0.697574, + -0.169293 0.983564 -0.0627809, -0.181497 0.980597 -0.0740876, -0.180463 0.981999 -0.0557764, -0.115214 0.982652 -0.145329, + -0.234031 0.95655 -0.173904, -0.369023 0.865084 -0.339782, -0.650031 0.172712 -0.74002, -0.637844 0.141232 -0.757105, + -0.635687 0.0395287 -0.770934, -0.629089 0.0844021 -0.772737, 0.0569674 0.969246 -0.239408, 0.0651084 0.969132 -0.237792, + -0.620296 0.200762 -0.75824, -0.509884 0.680471 -0.526286, -0.566165 0.57884 -0.586857, -0.745587 0.513258 -0.425049, + -0.176871 0.981512 -0.073144, -0.176365 0.982628 -0.0577749, -0.429351 0.0499319 -0.901756, -0.359668 0.0551799 -0.931447, + -0.407691 0.0549193 -0.911467, -0.229176 0.0578978 -0.971662, -0.450279 0.0445259 -0.891777, -0.412961 0.0154515 -0.910618, + -0.438076 0.0265542 -0.898546, -0.454371 0.0339002 -0.890167, -0.0970719 0.0476244 -0.994137, -0.138079 0.0531338 -0.988995, + -0.101755 0.0486455 -0.993619, -0.0952097 0.0561226 -0.993874, 0.00205953 0.063503 -0.99798, -0.076833 0.0420345 -0.996158, + -0.241761 0.0464382 -0.969224, -0.479559 -0.0190845 -0.877302, -0.425064 -0.000520882 -0.905163, -0.456728 -0.01932 -0.889396, + -0.447866 -0.0468049 -0.892875, -0.437758 -0.054608 -0.897433, -0.434501 -0.0704161 -0.897915, -0.435587 -0.0589156 -0.898216, + -0.410564 -0.00285858 -0.911827, -0.395726 0.00614699 -0.918348, 0.249502 0.0598521 -0.966523, 0.526013 0.0536395 -0.848783, + 0.435818 0.0411576 -0.899093, 0.0925234 0.0615911 -0.993804, 0.240749 0.0470683 -0.969445, 0.658509 0.0418218 -0.75141, + 0.730098 0.0516496 -0.681388, 0.834623 0.0430076 -0.549141, 0.883498 0.049864 -0.465774, 0.979341 0.0479885 -0.196439, + 0.950506 0.0443014 -0.307532, 0.99022 0.0509004 -0.129895, 0.990181 0.0480281 -0.131282, 0.98999 0.043484 -0.134274, + -0.499774 -0.0308742 -0.865605, -0.499959 -0.0152104 -0.865915, -0.497865 -0.0191296 -0.867044, + -0.494704 -0.0250142 -0.868701, -0.499999 0.00434917 -0.866015, -0.503392 0.0121596 -0.863972, + -0.496577 -0.00346989 -0.867986, -0.501844 0.0278017 -0.864511, -0.50485 0.0336917 -0.862549, -0.499578 0.0395379 -0.865366, + -0.499827 0.0238906 -0.865796, -0.48655 -0.22918 -0.843057, -0.440559 -0.472828 -0.763113, -0.457732 -0.400667 -0.793692, + -0.346612 -0.720306 -0.600849, -0.462658 -0.379662 -0.801127, -0.487547 -0.219376 -0.845087, -0.334414 -0.753891 -0.565522, + -0.344912 -0.723871 -0.597533, -0.185138 -0.932588 -0.309844, -0.217959 -0.899492 -0.378693, -0.0895379 -0.983636 -0.156344, + -0.131832 -0.970577 -0.201498, -0.43408 -0.414173 -0.800022, -0.466671 -0.232567 -0.853306, -0.453413 -0.229151 -0.86134, + -0.417869 -0.374894 -0.827551, -0.419601 -0.227388 -0.878766, -0.329467 -0.72376 -0.60632, -0.325733 -0.702253 -0.633039, + -0.218418 -0.899467 -0.378487, -0.164399 -0.92913 -0.331196, -0.0969537 -0.983605 -0.152058, -0.380184 -0.473114 -0.794748, + -0.271977 -0.764336 -0.584653, -0.0686199 -0.984334 -0.16241, -0.118973 -0.951412 -0.284008, -0.0828692 -0.981172 -0.174454, + 0.0811159 -0.0114907 -0.996638, 0.19619 -0.00978166 -0.980517, 0.0990864 -0.0411785 -0.994226, 0.371948 -0.00869059 -0.928213, + 0.540558 -0.0111455 -0.841233, 0.458647 -0.0374385 -0.88783, 0.285223 -0.0364501 -0.957768, 0.197445 -0.0648048 -0.97817, + 0.374464 -0.0649595 -0.924963, 0.0668813 -0.0515321 -0.996429, 0.543993 -0.0638361 -0.836658, 0.630198 -0.0422346 -0.775285, + 0.637528 -0.0100857 -0.770361, 0.649628 -0.0497157 -0.758625, 0.688531 -0.0520177 -0.723339, 0.866952 -0.0416882 -0.496645, + 0.838601 -0.0517181 -0.542285, 0.816763 -0.0548044 -0.574364, 0.977311 -0.0531486 -0.205031, 0.968528 -0.059698 -0.24164, + 0.987852 -0.0328442 -0.151887, 0.717828 -0.0564608 -0.693927, 0.997588 -0.0651866 -0.0238444, 0.988966 -0.063845 -0.13368, + 0.992011 -0.0777841 -0.0993128, 0.0828275 -0.0655313 -0.994407, 0.946895 -0.0579644 -0.316277, 0.92141 -0.0528685 -0.384979, + 0.94329 -0.0370056 -0.329902, 0.870632 -0.0598037 -0.488286, 0.760951 -0.0469036 -0.647112, 0.764325 -0.0566115 -0.642341, + 0.86687 -0.0413784 -0.496815, 0.997797 -0.0563593 -0.0350074, 0.907908 -0.0570077 -0.415275, 0.999973 -0.00475321 -0.00568666, + 0.967438 -0.0533551 0.24742, 0.992826 -0.00260667 0.119539, 0.954989 -0.033469 0.294747, 0.902068 -0.0354439 0.430137, + 0.931083 -0.0491361 0.361482, 0.858339 -0.0344476 0.511925, 0.879101 -0.0494031 0.474069, 0.854924 -0.0431028 0.516959, + 0.999418 -0.00876232 0.032969, 0.991547 -0.0516826 0.119008, 0.91733 -0.0772638 0.390559, 0.979368 -0.0645528 0.191496, + 0.854836 -0.0681453 0.514404, 0.100506 -0.101231 0.989773, 0.188646 -0.0990618 0.977036, 0.183122 0.0801129 0.979821, + 0.800518 -0.0179412 0.59904, 0.808685 -0.142153 0.570808, 0.655207 -0.155765 0.739217, 0.706301 -0.140313 0.693867, + 0.718027 0.0809036 0.691297, 0.550486 -0.137213 0.823491, 0.760468 -0.113296 0.639415, 0.57802 -0.0915317 0.810873, + 0.530581 0.0500135 0.846157, 0.185995 0.0765224 0.979566, 0.0614619 -0.0632649 0.996102, 0.0606931 -0.0469784 0.99705, + 0.384862 -0.139311 0.9124, 0.420219 0.0371605 0.906662, 0.364151 -0.0753813 0.928284, 0.257362 -0.149774 0.954637, + 0.4706 -0.116289 0.87465, 0.0768184 -0.210821 0.974502, 0.418227 0.0335985 0.907721, 0.528843 0.0440756 0.847575, + -0.00198773 -0.954547 0.298052, -0.00161226 -0.963901 0.266255, -0.000594793 -0.942646 0.333793, + -0.00132355 -0.987103 0.160082, 0.000946165 -0.975961 0.217944, -0.00147735 -0.978579 0.205869, -0.00231405 -0.995363 0.09616, + 0 -0.93149 0.363768, -0.00218363 -0.937368 0.348334, -0.000204402 -0.958707 0.284397, 0 -0.979351 0.202168, + 9.11575e-005 -0.993069 0.117537, -0.000114029 -0.994056 0.108871, 0.0125148 -0.999864 0.0107371, + -0.000644465 -0.999968 0.00796051, -0.00064446 -0.999891 0.01478, -0.0136114 -0.999757 0.0173285, + -0.00106009 -0.999101 0.0423802, -0.00296264 -0.998026 0.0627377, -0.00382391 -0.998858 0.0476272, + 0.992491 -0.000147138 0.122315, 0.992501 -2.2122e-005 0.12224, 0.992455 0 0.122608, 0.99252 -0.000117263 0.12208, + 0.992542 8.9623e-005 0.121905, 0.992514 -0.000285424 0.122131, 0.928987 0.00363454 0.370094, 0.850863 0.00625644 0.52535, + 0.800755 -0.000122126 0.598992, 0.95077 0.00927715 0.309758, 0.912171 -0.000154172 0.409809, 0.968384 -0.000264885 0.249464, + 0.745417 -0.00590002 0.666572, 0.619073 -0.0037177 0.785325, 0.651811 -0.000341142 0.758382, 0.517293 -0.000109918 0.855808, + 0.570394 -0.00874679 0.821324, 0.398628 0 0.917113, 0.398666 -0.000114095 0.917096, 0.397923 0.000881709 0.917418, + 0.399202 0 0.916863, 0.397558 0.00154499 0.917576, 0.398765 -7.54686e-005 0.917053, 0.398779 0 0.917047, + 0.397287 0.00154558 0.917693, 0.212143 0.0266232 0.976876, -0.0227829 0.0179438 0.999579, 0.150155 0.0115964 0.988595, + 0.105806 0.00150054 0.994386, -0.110381 0.000395196 0.993889, 0.277011 0.00070044 0.960866, -0.319782 0.000345398 0.947491, + -0.478244 0.000871678 0.878227, -0.361297 -0.0105578 0.932391, -0.197332 -0.0180526 0.98017, -0.421096 -0.0267958 0.90662, + -0.587703 0.00065197 0.809076, -0.58756 0.000541073 0.809181, -0.587606 0.000270536 0.809147, -0.587775 0.000707418 0.809024, + -0.587896 0.00141484 0.808935, -0.421156 0.906988 -1.36338e-005, -0.425061 0.905165 0, -0.422931 0.906162 0.00064002, + -0.419644 0.907689 -1.36337e-005, -0.42053 0.907279 0, -0.419067 0.907955 -0.00066047, -0.423827 -0.905743 0, + 1 1.63688e-015 0, 1 5.45628e-016 0, 0 -0.995898 0.0904881, 0 -0.980224 0.197889, 0 -0.980225 0.197889, 0 -0.953004 0.302958, + 0.422412 -0.906404 0, 0.490028 -0.865268 0.105755, 0.431725 -0.900992 0.0427373, 0.458145 -0.886776 0.061082, + 0.446371 -0.894309 0.0310545, 0.473616 -0.877528 0.0750504, 0.496455 -0.860332 0.115589, 0.509507 -0.84978 0.13519, + 0.532213 -0.829122 0.171192, 0.536398 -0.822098 0.19087, 0.553252 -0.806409 0.208847, 0.556153 -0.80881 0.191104, + 0.54382 -0.822169 0.168221, 0.563188 -0.807129 0.177091, 0.72059 -0.677631 0.146855, 0.897121 -0.432847 0.0884104, + 0.739046 -0.662823 0.120317, 0.664503 -0.733334 0.143727, 0.675465 -0.720351 0.157614, 0.874242 -0.478701 0.0809108, + 0.707937 -0.701341 0.0833384, 0.737284 -0.674185 0.0434418, 0.716853 -0.696599 0.0295224, 0.738598 -0.668894 0.0839814, + 0.875295 -0.480484 0.0547168, 0.70195 -0.711943 0.0200788, 0.864574 -0.50183 0.0260438, 0.9701 -0.239721 0.0379464, + 0.980038 -0.195785 0.0345408, 0.993258 -0.114996 0.0146464, 0.97085 -0.238461 0.0242003, 0.956541 -0.290875 0.0204967, + 0.943396 -0.331523 0.0098018, 0.938791 -0.34394 0.0193823, 0.840117 -0.54218 0.0156654, 0.917114 -0.398017 0.0219966, + 0.628437 -0.770021 0.110158, 0.646122 -0.761998 0.0434214, 0.705444 -0.70462 0.0765501, 0.7728 -0.633807 0.0326838, + 0.729414 -0.672404 0.12581, 0.674801 -0.726394 0.130364, 0.862994 -0.501676 0.0596939, 0.96676 -0.254136 0.0281206, + 0.918847 -0.394268 0.0165338, 0.977365 -0.211453 0.00679873, 0.988126 -0.152967 0.0144401, 0.915152 -0.395876 0.0760148, + 0.976055 -0.214084 0.0385363, 0.581672 -0.807602 0.097142, 0.584915 -0.809341 0.0533076, 0.580709 -0.806607 0.110283, + 0.586715 -0.807299 0.0635113, 0.588671 -0.806885 0.0490325, 0.577125 -0.807659 0.12089, 0.564335 -0.812564 0.145829, + 0.5698 -0.806003 0.160271, 0.572454 -0.801297 0.173837, 0.59221 -0.805784 0, 0.591697 -0.806161 -1.94936e-005, + 0.591943 -0.80598 -2.92404e-005, 0.59144 -0.806349 -2.92404e-005, 0.591204 -0.806522 0, 0.777126 -0.629345 0.00011853, + 0.738188 -0.674595 5.16123e-005, 0.678232 -0.734848 7.97774e-005, 0.682641 -0.730754 -2.20028e-005, + 0.77807 -0.628177 -8.62026e-006, 0.86453 -0.502582 4.90994e-005, 0.915989 -0.401202 0.000396955, + 0.959337 -0.282264 2.36241e-005, 0.91756 -0.397598 -0.000333308, 0.977348 -0.211638 -0.000495965, + 0.976879 -0.213793 0.000514697, 0 0 -1, 0.0289002 0 -0.999582, 0.0693845 -0.000184766 -0.99759, + 0.0592849 0.000138429 -0.998241, 0.145198 0.000108689 -0.989403, 0.169462 -8.42763e-008 -0.985537, + 0.328409 0.000388926 -0.944536, 0.328414 -0.000389047 -0.944534, 0.145231 -0.000108983 -0.989398, + 0.329394 7.07374e-011 -0.944193, 0.476416 2.92774e-008 -0.87922, 0.495254 0.000184518 -0.868748, + 0.573507 -9.73647e-005 -0.8192, 0.602059 0 -0.798452, 0.495281 -0.000184416 -0.868733, 0.563838 0.000130044 -0.825886, + 0.64568 -5.96317e-006 -0.763608, 0.676029 -3.39843e-006 -0.736875, 0.663973 -8.73499e-011 -0.747756, + 0.64568 5.96308e-006 -0.763608, 0.676029 3.39838e-006 -0.736875, 0.705131 5.51981e-011 -0.709077, + 0.74914 -3.36236e-007 -0.662412, 0.726141 0.00133278 -0.687545, 0.76299 0.00197748 -0.646408, 0.726144 -0.00133334 -0.687542, + 0.762994 -0.00197832 -0.646403, 0.474576 -0.696543 -0.538151, 0.459628 -0.695137 -0.552745, 0.446066 -0.695301 -0.563544, + 0.508296 -0.690814 -0.514209, 0.466257 -0.695579 -0.546603, 0.483059 -0.698653 -0.527767, 0.550315 -0.702672 -0.451005, + 0.541993 -0.715171 -0.441332, 0.540734 -0.700295 -0.466041, 0.414138 -0.697964 -0.58424, 0.433985 -0.699443 -0.567835, + 0.518219 -0.689114 -0.506529, 0.514381 -0.710196 -0.48066, 0.524022 -0.732179 -0.435104, 0.548505 -0.671513 -0.498209, + 0.55241 -0.682684 -0.478316, 0.283331 -0.713323 -0.64101, 0.338442 -0.708206 -0.619598, 0.32908 -0.705077 -0.628151, + 0.342322 -0.706765 -0.619111, 0.223291 -0.712268 -0.665444, 0.230036 -0.711842 -0.663599, 0.0648216 -0.626394 -0.776807, + 0.117982 -0.706681 -0.697626, 0.0588483 -0.704414 -0.707345, 0.0976885 -0.703319 -0.704131, 0.00965828 -0.589591 -0.807644, + 0.00295022 -0.693567 -0.720387, 0.0270442 -0.352585 -0.935389, 0.00515727 -0.69285 -0.721063, 0.00519761 -0.695051 -0.718941, + 0.00531581 -0.696296 -0.717735, -0.999383 -9.99661e-005 -0.0351155, -0.99939 -0.000203157 -0.0349087, + -0.999361 -0.000158594 -0.0357569, -0.999411 -0.000152024 -0.0343171, -0.999419 -1.66814e-005 -0.034085, + -0.999456 -0.000224576 -0.0329946, -0.999398 2.70473e-005 -0.0346818, -0.999399 7.41071e-005 -0.0346526, + -0.999399 0 -0.0346732, -0.999382 2.21866e-006 -0.0351566, -0.999458 -1.21259e-005 -0.0329164, + -0.999489 -0.000990547 -0.031941, -0.999387 0.000449996 -0.035007, -0.999358 0.000713612 -0.0358344, + -0.999399 -8.66762e-005 -0.0346545, -0.999363 0.000184436 -0.0356973, -0.999398 -3.23328e-005 -0.034682, + 0.00618987 0.999356 -0.035339, 0.00687658 0.999344 -0.0355646, 0.00765449 0.999322 -0.0360143, 0.00481646 0.99938 -0.0348877, + 0.00545756 0.999372 -0.0350014, -0.134031 0.980051 -0.146752, -0.138681 0.975815 -0.168977, -0.288922 0.921371 -0.26, + -0.377238 0.871202 -0.314162, -0.664543 0.577868 -0.473764, -0.559123 0.710944 -0.426545, -0.246685 0.936445 -0.249433, + -0.740685 0.379573 -0.554355, -0.513794 0.721705 -0.463852, -0.265206 0.913163 -0.309515, -0.122863 0.976883 -0.174941, + -0.129335 0.978545 -0.160382, -0.220211 0.932696 -0.285631, -0.504405 0.670077 -0.544585, -0.394974 0.789578 -0.469641, + -0.553588 0.536735 -0.636754, -0.678479 0.410412 -0.609285, -0.804396 0.249737 -0.539054, -0.806854 0.166608 -0.56677, + -0.641267 0.330222 -0.692626, -0.727902 0.229619 -0.646091, -0.826329 0.129708 -0.548047, -0.630759 0.296316 -0.717175, + -0.654459 0.21388 -0.725216, -0.64788 0.121226 -0.752035, -0.811948 0.00113281 -0.583729, -0.803475 -1.5372e-006 -0.595338, + -0.83599 7.54095e-006 -0.548745, -0.824234 0.00282775 -0.566242, -0.766119 0.00141795 -0.642698, + -0.764788 -1.17722e-005 -0.644282, -0.740451 -0.00189341 -0.672107, -0.706107 -0.000922981 -0.708104, + -0.685715 -0.00281333 -0.727865, -0.670098 3.71081e-005 -0.742273, -0.700997 6.69466e-005 -0.713164, + -0.125258 -0.977601 -0.169133, -0.113912 -0.978817 -0.170119, -0.223303 -0.936026 -0.272015, -0.128569 -0.979683 -0.153917, + -0.220197 -0.932704 -0.285617, -0.395067 -0.789475 -0.469736, -0.470416 -0.718476 -0.512348, -0.269765 -0.923716 -0.271986, + -0.524798 -0.701605 -0.482014, -0.553881 -0.535852 -0.637243, -0.137879 -0.976595 -0.165082, -0.315526 -0.905974 -0.282232, + -0.377332 -0.871096 -0.314344, -0.575812 -0.683796 -0.448178, -0.664573 -0.577668 -0.473965, -0.751899 -0.368707 -0.546537, + -0.696828 -0.36902 -0.615024, -0.634139 -0.375932 -0.675679, -0.630557 -0.297425 -0.716894, -0.686643 -0.160537 -0.709048, + -0.654461 -0.149495 -0.741169, -0.66747 -0.0655575 -0.741746, -0.747444 -0.244875 -0.617546, -0.797317 -0.282563 -0.533332, + -0.797504 -0.247603 -0.550164, -0.207698 0.000121877 0.978193, -0.202338 -0.00428658 0.979306, + -0.207554 -0.000738801 0.978223, -0.209751 0.00066216 0.977755, -0.207878 0 0.978155, -0.2079 -0.000121948 0.97815, + -0.207173 -0.00198359 0.978302, -0.207989 -0.00196558 0.978129, -0.211116 -0.00454122 0.97745, -0.208775 -0.00126512 0.977963, + -0.210446 -0.00266451 0.977602, -0.207271 0.000731106 0.978283, -0.207875 -5.42729e-005 0.978155, + -0.207782 0.000144099 0.978175, -0.205652 0.000735605 0.978625, -0.209176 -0.000402615 0.977878, + -0.207726 -0.000216149 0.978187, -0.19633 0.00374759 0.980531, -0.203729 0.00103892 0.979027, -0.207108 -0.000393298 0.978318, + -0.211158 0.000879898 0.977452, -0.206766 7.09932e-005 0.97839, -0.206644 -0.00125086 0.978415, + -0.197253 -0.00325492 0.980347, 0.677146 -0.72908 -0.0995807, 0.730935 -0.661306 -0.168547, 0.62311 -0.78141 -0.0336578, + 0.79233 -0.548114 -0.267926, 0.829416 -0.438203 -0.346478, 0.848891 -0.326402 -0.415746, 0.808098 -0.508733 -0.296933, + 0.704206 -0.697772 -0.131181, 0.851248 -0.302187 -0.429021, 0.853733 -0.212916 -0.475191, 0.849331 -0.138119 -0.50947, + 0.843845 -0.0911114 -0.528795, 0.848005 -0.124768 -0.515092, 0.826177 -3.93838e-006 -0.563411, 0.826167 0 -0.563425, + 0.826187 -7.87676e-006 -0.563396, 0.696449 0.707744 -0.118563, 0.740868 0.646679 -0.181443, 0.664055 0.743165 -0.0820817, + 0.79616 0.540888 -0.271238, 0.829139 0.439271 -0.345788, 0.850742 0.307332 -0.426362, 0.804652 0.518487 -0.289321, + 0.719583 0.677292 -0.153217, 0.847695 0.337844 -0.408992, 0.853895 0.223981 -0.469782, 0.849146 0.136777 -0.51014, + 0.844669 0.0969502 -0.526436, 0.851075 0.156415 -0.501204, 0.591925 0.805992 -0.00144011, 0.997944 -0.00262428 -0.0640309, + 0.999422 0.000123124 -0.0339809, 0.994367 -0.00580745 -0.105831, 0.992386 -0.00792762 -0.122908, + 0.999883 0.000956962 -0.0152644, 0.999797 -0.00065476 -0.020138, 0.99938 -5.86735e-005 -0.0351964, + 0.999392 -0.000187197 -0.0348684, 0.999391 -0.000105592 -0.0349045, 0.999389 -3.74565e-005 -0.034952, + 0.999389 -0.000180959 -0.0349541, 0.999991 -0.00154477 -0.00384015, 0.999656 -0.000242091 -0.0262217, + 0.999472 -7.14735e-005 -0.0324964, 0.999408 0.000164293 -0.0343951, 0.999296 -5.27304e-005 -0.0375199, + 0.999392 0.000135137 -0.0348536, 0.999391 7.95398e-005 -0.0349048, 0.999429 0.000450872 -0.0337912, + 0.999363 0.000435589 -0.0356873, 0.999389 2.85415e-005 -0.0349517, 0.99939 0 -0.0349237, 0.0073553 0.999358 -0.0350518, + 0.00763475 0.999438 -0.0326323, 0.00203355 0.999558 -0.0296642, 0.00781594 0.999293 -0.0367773, + 0.00772236 0.999367 -0.0347239, 0.0147634 0.996555 -0.0816125, 0.00864234 0.998844 -0.0472807, 0.00762951 0.999358 -0.0349999, + 0.0185831 0.997192 -0.0725429, 0.00294897 0.693567 -0.720386, 0.00519761 0.695051 -0.718941, 0.00531581 0.696296 -0.717735, + 0.00515727 0.69285 -0.721063, -0.0683493 0.351851 0.933557, 0.000700283 0.692075 -0.721825, -0.00383457 0.692242 -0.721655, + 0.332239 0.711787 -0.618851, 0.221087 0.711872 -0.666603, 0.235954 0.713537 -0.65969, 0.172388 0.715431 -0.677083, + 0.11547 0.710191 -0.694475, 0.352722 0.704651 -0.615673, 0.369647 0.700739 -0.610185, 0.334021 0.705149 -0.625456, + 0.115691 0.707702 -0.696975, 0.117094 0.710833 -0.693545, 0.453477 0.695662 -0.557148, 0.460449 0.691376 -0.556764, + 0.475838 0.693883 -0.540468, 0.541082 0.696412 -0.471425, 0.541992 0.715172 -0.441332, 0.534358 0.710598 -0.457725, + 0.466256 0.695579 -0.546603, 0.508267 0.690829 -0.514217, 0.486734 0.693164 -0.531614, 0.544323 0.674308 -0.499019, + 0.546089 0.673406 -0.498308, 0.532368 0.467021 -0.706028, 0.49346 0.589723 -0.639315, 0.481223 0.628414 -0.611163, + 0.533827 0.69906 -0.475756, 0.519711 0.687598 -0.507059, 0.515484 0.709959 -0.479827, 0.524022 0.732179 -0.435104, + 0.496078 0.736192 -0.460357, 0.00762951 -0.999358 -0.0349997, 0.00314324 -0.999555 -0.0296571, + 0.00754502 -0.999337 -0.0356319, 0.000570514 -0.999673 -0.0255785, 0.00644315 -0.999251 -0.0381625, + -3.15766e-005 -0.999213 -0.0396688, 0.00706829 -0.999319 -0.0362186, 0.00772227 -0.999367 -0.0347236, + 0.00781583 -0.999293 -0.0367768, 0.591544 -0.806272 0.00132544, 0.00777617 -0.9993 -0.0365868, 0.00745145 -0.99932 -0.0361054, + 0.00687322 -0.99934 -0.0356733, 0.00642174 -0.999359 -0.0352165, 0.00571675 -0.999378 -0.034809, + -0.551347 0.0157294 -0.834128, -0.619546 0.0157979 -0.784801, -0.588768 0.0173664 -0.808115, -0.714016 0.0158238 -0.699951, + -0.676848 0.0173786 -0.735917, -0.798745 0.0156229 -0.601467, -0.870706 0.0157572 -0.491552, -0.841631 0.0173897 -0.539772, + -0.928411 0.0163384 -0.371196, -0.906333 0.017535 -0.4222, -0.764024 0.0173593 -0.644954, -0.619426 0.018914 -0.784828, + -0.713931 0.0189264 -0.69996, -0.8709 0.0191601 -0.491087, -0.955296 0.017528 -0.295132, -0.9284 0.0187509 -0.371108, + -0.798737 0.0190746 -0.601378, -0.969625 0.0171205 -0.243998, -0.551056 0.0190134 -0.834252, -0.993631 0.0174998 -0.111318, + -0.986774 0.0174593 -0.161159, -0.999848 0.0174535 -5.76942e-006, -0.999856 0.0169678 -2.22871e-005, + -0.99363 0.0174953 0.11133, -0.986781 0.0174706 0.161112, -0.969648 0.0170145 0.243911, -0.870688 0.0155975 0.491588, + -0.906304 0.0175701 0.422262, -0.928368 0.0162573 0.371306, -0.955298 0.0175496 0.295125, -0.79833 0.0155811 0.602019, + -0.841458 0.0174294 0.540042, -0.763811 0.0173588 0.645206, -0.714102 0.015593 0.699868, -0.67708 0.0173431 0.735705, + -0.619986 0.0156383 0.784457, -0.581908 0.0175138 0.813066, -0.499892 0.0160454 0.865939, -0.969557 0.0178154 -0.244217, + -0.993627 0.0174014 0.111366, -0.993629 0.0173877 -0.111349, -0.99984 0.017906 5.16226e-005, -0.969567 0.0179438 0.244167, + -0.928366 0.0189094 0.371186, -0.870861 0.019371 0.491147, -0.714043 0.0190501 0.699842, -0.619403 0.0191519 0.784839, + -0.798465 0.0192184 0.601734, -0.49959 0.0191654 0.86605, -0.499494 0.0176643 0.866137, -0.413622 0.0176534 0.910277, + -0.370211 0.0159315 0.928811, -0.248784 0.0153452 0.968437, -0.299263 0.0174554 0.954011, -0.176393 0.0174004 0.984166, + -0.122018 0.0156035 0.992405, -0.0463587 0.0175458 0.998771, 0.0101367 0.01605 0.99982, 0.0874887 0.0175272 0.996011, + 0.142898 0.0165489 0.989599, -0.370794 0.0191989 0.928517, -0.249099 0.0193893 0.968284, 0.0101391 0.0190391 0.999767, + 0.221856 0.0173774 0.974925, 0.142394 0.0183108 0.989641, -0.121497 0.0193501 0.992403, 0.273376 0.0167991 0.961761, + 0.40061 0.0176646 0.916078, 0.354269 0.0175395 0.934979, 0.49996 0.0174856 0.865872, 0.500257 0.0177618 0.865695, + 0.592998 0.0175394 0.805013, 0.632378 0.0172614 0.774467, 0.695728 0.0167489 0.71811, 0.86098 0.0157379 0.508395, + 0.818856 0.0175333 0.573732, 0.78569 0.0163275 0.618405, 0.733225 0.0174416 0.679762, 0.920355 0.0155859 0.390774, + 0.888199 0.0172947 0.459133, 0.940571 0.0172234 0.33916, 0.963116 0.0154298 0.268645, 0.975781 0.0172426 0.218068, + 0.989485 0.015826 0.143766, 0.994289 0.0173014 0.105309, 0.998026 0.0158105 0.0607716, 0.273713 0.0180485 0.961642, + 0.592713 0.0171111 0.805232, 0.400983 0.0175359 0.915918, 0.499414 0.017254 0.866192, 0.696229 0.0178274 0.717599, + 0.7857 0.0187358 0.618324, 0.860591 0.0190537 0.50894, 0.963111 0.0189763 0.268434, 0.989467 0.0187193 0.143543, + 0.920257 0.0189103 0.390858, 0.997975 0.0187145 0.0607919, -0.410856 0.651902 -0.637355, -0.472084 0.647215 -0.598539, + -0.444617 0.661589 -0.603834, -0.512048 0.658491 -0.55154, -0.50573 0.682184 -0.528075, -0.544495 0.647152 -0.533591, + -0.39914 0.675739 -0.61973, -0.570728 0.660927 -0.487283, -0.628874 0.661234 -0.409007, -0.608934 0.64715 -0.45869, + -0.664178 0.646975 -0.374554, -0.680952 0.662435 -0.312225, -0.707471 0.647616 -0.282981, -0.720764 0.66114 -0.20831, + -0.737823 0.648798 -0.18622, -0.431198 0.689022 -0.58251, -0.47828 0.707001 -0.520958, -0.571858 0.684028 -0.452862, + -0.389215 0.704682 -0.593241, -0.625119 0.681312 -0.380842, -0.660197 0.688895 -0.29927, -0.699862 0.68397 -0.205857, + -0.600246 0.705589 -0.376629, -0.538264 0.712456 -0.450199, -0.742685 0.661251 -0.105668, -0.740177 0.661048 0.123102, + -0.75571 0.64943 0.0845148, -0.737748 0.648877 0.186243, -0.755714 0.649433 -0.0844602, -0.760535 0.649297 3.93184e-005, + -0.751673 0.65949 0.00777698, -0.715714 0.661073 0.225248, -0.707446 0.64768 0.282898, -0.628699 0.661246 0.409257, + -0.66414 0.646952 0.374663, -0.608837 0.647097 0.458894, -0.544476 0.647182 0.533575, -0.570635 0.660961 0.487346, + -0.678149 0.661233 0.320757, -0.505931 0.660426 0.554862, -0.472063 0.647226 0.598544, -0.721893 0.684012 -0.104867, + -0.724205 0.684053 0.087168, -0.700082 0.686013 0.19817, -0.731844 0.681389 -0.0106494, -0.617666 0.684095 0.387946, + -0.500064 0.684118 0.530959, -0.436249 0.659692 0.611959, -0.381012 0.647232 0.660242, -0.375695 0.659616 0.650969, + -0.434172 0.684236 0.585932, -0.562078 0.68412 0.46481, -0.664587 0.684102 0.300547, -0.366983 0.679385 0.63542, + -0.417377 0.715841 -0.559793, -0.396323 0.728644 -0.558574, -0.475755 0.730172 -0.490414, -0.639135 0.71444 -0.284749, + -0.694721 0.711181 -0.107632, -0.675813 0.706665 -0.209526, -0.709249 0.704958 4.8242e-005, -0.585066 0.730397 -0.352445, + -0.657859 0.730058 -0.185033, -0.68301 0.730409 5.26435e-005, -0.694733 0.711158 0.107709, -0.644679 0.711684 0.279096, + -0.676765 0.708745 0.19917, -0.604049 0.707036 0.36773, -0.491234 0.706554 0.509383, -0.424071 0.71272 0.558744, + -0.548229 0.711997 0.438755, -0.354611 0.705265 0.613883, -0.657865 0.730045 0.18506, -0.585192 0.730322 0.352393, + -0.475843 0.729804 0.490876, -0.341696 0.730014 0.591881, -0.284167 0.686185 0.669627, -0.311867 0.659538 0.683922, + -0.282432 0.647205 0.708066, -0.190298 0.647148 0.738232, -0.227778 0.660509 0.715433, -0.0924049 0.647107 0.756779, + 0.00718427 0.647495 0.762035, -0.0308554 0.662464 0.748458, 0.180159 0.661254 0.728207, 0.108502 0.648057 0.753823, + 0.208343 0.648686 0.731984, 0.0777136 0.661363 0.746029, -0.136654 0.661044 0.737798, 0.280254 0.660976 0.696109, + 0.304725 0.649284 0.696831, -0.195798 0.684086 0.70263, -0.211782 0.706654 0.675122, -0.112864 0.681422 0.723136, + -0.0270478 0.68869 0.724551, 0.171542 0.684136 0.708895, 0.0710856 0.684122 0.725895, 0.270149 0.68419 0.677425, + -0.11418 0.710257 0.69462, 0.382321 0.659379 0.647341, -0.276378 0.715788 0.641297, 0.552854 0.661102 0.507245, + 0.52998 0.648895 0.545945, 0.598841 0.647654 0.471098, 0.668715 0.661119 0.340209, 0.656142 0.647278 0.387955, + 0.701427 0.647565 0.297758, 0.616965 0.6611 0.426967, 0.733279 0.660592 0.160994, 0.734321 0.64715 0.204864, + 0.75447 0.647132 0.10952, 0.757276 0.652032 0.0372529, 0.747689 0.659884 0.0742534, 0.707373 0.660949 0.25054, + 0.736419 0.675603 0.0353148, 0.379805 0.649467 0.658742, 0.450795 0.649721 0.612084, 0.356319 0.681428 0.639291, + 0.476655 0.660894 0.579672, 0.437413 0.684107 0.583667, 0.592614 0.684187 0.425083, 0.683979 0.683787 0.254183, + 0.709821 0.684123 0.167718, 0.644254 0.684279 0.341614, 0.521601 0.68605 0.507216, 0.724431 0.684312 0.0831668, + -0.186884 0.72992 0.657489, -0.0262726 0.709493 0.704222, 0.0643258 0.711717 0.699515, 0.254176 0.711209 0.655421, + 0.354264 0.705099 0.614274, 0.156921 0.706608 0.689987, -0.0128596 0.73039 0.682909, 0.168923 0.730076 0.662158, + 0.341492 0.729942 0.592088, 0.440428 0.711146 0.547992, 0.510697 0.708503 0.487043, 0.620274 0.707086 0.339544, + 0.564441 0.711497 0.418543, 0.686874 0.706521 0.170388, 0.708385 0.704674 0.0403166, 0.69577 0.712801 0.0884193, + 0.653581 0.712254 0.255981, 0.489193 0.729725 0.477694, 0.59801 0.730011 0.33086, 0.662705 0.730109 0.16662, + 0.681886 0.728672 0.0637871, -0.347789 0.718753 -0.602028, -0.354754 0.704969 -0.61414, -0.351828 0.710688 -0.609212, + -0.347551 0.71888 -0.602013, -0.354401 0.70523 -0.614045, -0.362501 0.688681 -0.627942, -0.36699 0.676429 -0.638562, + -0.374569 0.662099 -0.649094, -0.375702 0.655767 -0.654842, -0.369432 0.675961 -0.637649, -0.379446 0.654769 -0.653681, + 0.71446 0.692217 -0.101893, 0.66083 0.720286 -0.210929, 0.679059 0.71697 -0.157583, 0.705462 0.704165 -0.0804629, + 0.727281 0.683579 -0.061502, 0.751413 0.659833 0, 0.568864 0.760894 -0.312145, 0.639017 0.746414 -0.185807, + 0.454813 0.77873 -0.432116, 0.55089 0.755117 -0.355414, 0.427212 0.773784 -0.467705, 0.317689 0.787571 -0.52802, + 0.313499 0.779253 -0.542663, 0.549532 0.781544 -0.295302, 0.433176 0.799516 -0.416092, 0.190973 0.774108 -0.603562, + 0.625002 0.762979 -0.165034, 0.610424 0.775625 -0.160586, 0.5199 0.801157 -0.296397, 0.662435 0.743884 -0.0884108, + 0.655038 0.750572 -0.0869921, 0.396685 0.82211 -0.408382, 0.294119 0.807693 -0.511006, 0.492557 0.813842 -0.3083, + 0.395249 0.829859 -0.393842, 0.295509 0.835131 -0.46393, 0.260135 0.825807 -0.500373, 0.149868 0.78268 -0.604113, + 0.0323181 0.755206 -0.654691, -0.0303848 0.756307 -0.653511, -0.147976 0.720432 -0.677555, 0.168428 0.80446 -0.569628, + 0.0235919 0.786268 -0.617435, -0.20336 0.71693 -0.666825, -0.28111 0.704528 -0.651627, -0.271041 0.691658 -0.669438, + -0.303754 0.685662 -0.661514, -0.35693 0.666982 -0.654016, -0.145851 0.751637 -0.64325, 0.121981 0.818007 -0.562125, + 0.166442 0.831325 -0.530279, 0.0214407 0.814001 -0.580467, -0.0305986 0.796281 -0.604153, -0.186843 0.759096 -0.623589, + -0.166594 0.775559 -0.608896, -0.256131 0.743332 -0.617944, -0.253282 0.750043 -0.610969, 0.992374 0.0147441 -0.122381, + 0.957113 0.0153311 -0.289309, 0.976186 0.017356 -0.216241, 0.896958 0.0174067 -0.441774, 0.992277 0.0197112 -0.122468, + 0.848691 0.0162794 -0.528638, 0.746709 0.0175683 -0.664919, 0.678277 0.0179134 -0.734588, 0.499883 0.0174969 -0.865916, + 0.956999 0.0194182 -0.28944, 0.848398 0.0186845 -0.529028, 0.678221 0.0172079 -0.734656, 0.499704 0.0178037 -0.866013, + 0.296752 0.017708 -0.954791, 0.201996 0.0174166 -0.979232, 0.0334749 0.016078 -0.99931, 0.296772 0.0170888 -0.954796, + -0.0658479 0.0174001 -0.997678, -0.227682 0.015365 -0.973614, -0.30092 0.0174351 -0.95349, -0.390012 0.0149431 -0.920688, + 0.500149 0.0170916 -0.865771, 0.0335242 0.0187246 -0.999263, -0.227909 0.0194271 -0.973489, -0.43695 0.047794 -0.898215, + -0.491236 0.0465301 -0.869783, -0.474768 0.133443 -0.869936, -0.493821 0.017491 -0.869388, -0.499946 0.0174218 -0.865881, + -0.499964 0.0174507 -0.865871, 0.99985 0.0173001 0, 0.999916 0.0129807 -0.000368446, 0.99985 0.0173105 -0.000736872, + 0.999962 0.00866081 -0.000736899, 0.695089 0.718923 -0.000141256, 0.708924 0.705285 -0.000191184, + 0.703309 0.710885 8.84421e-005, 0.695193 0.718823 0.000250202, 0.708992 0.705216 0.000338587, 0.725065 0.68868 3.73853e-005, + 0.737073 0.675812 0.00114164, 0.749463 0.662046 -0.000113445, 0.755613 0.655016 0.00171209, 0.736596 0.676332 -0.00133074, + 0.754919 0.655815 -0.00199571, -6.45236e-016 1 0, -1.07539e-015 1 0, -8.06544e-016 1 0, 0.0717585 0.996577 -0.041046, + 0.06874 0.996524 -0.0470659, 0.0588879 0.997552 -0.0377221, 0.0636358 0.997571 -0.0283145, 0.0793791 0.996514 -0.0256486, + 0.0471623 0.998808 -0.0125468, 0.0682142 0.997553 -0.0153023, 0.0697901 0.99756 -0.00199811, 0.0827185 0.99652 -0.0102269, + 0.0830059 0.996529 0.00625544, 0.046546 0.998909 -0.00389405, 0.0685717 0.997568 0.0124669, 0.079969 0.996535 0.0228527, + 0.0588769 0.997399 0.0415878, 0.0634123 0.996559 0.0533679, 0.0734152 0.996542 0.0389214, 0.064063 0.997576 0.0271515, + 0.0434155 0.998909 0.0172135, 0.0533098 0.996556 0.063514, 0.0467057 0.997446 0.0540319, 0.0406754 0.998741 0.0293652, + 0.0447744 0.998977 0.00629374, 0.042057 0.998907 -0.0203958, 0.023533 0.999194 -0.0325299, 0.0268531 0.999618 -0.00654981, + 0.0164214 0.999653 -0.0206155, 0.000198533 1 0.000234203, 0.0259189 0.999664 -0.00052614, 0.0243198 0.999664 0.00896343, + 0.0296673 0.99891 0.0360412, 0.0223981 0.999618 0.0161877, 0.0230234 0.999728 0.00367591, 0.0415534 0.996559 0.0717192, + 0.0290412 0.997699 0.0612721, 0.0255452 0.99654 0.0790878, -0.00168607 0.99757 0.0696559, -0.00822504 0.996527 0.0828642, + 0.00870252 0.996531 0.0827695, 0.013448 0.997575 0.0682885, 0.0188281 0.999066 0.0388939, 0.01019 0.998909 0.0455736, + 0.000548773 0.998809 0.0487892, -0.0159362 0.997562 0.0679418, -0.0284885 0.997555 0.0638084, -0.0390819 0.996519 0.0736407, + -0.0243851 0.996524 0.0796549, -0.0473763 0.997552 0.0514291, -0.0582854 0.996523 0.0595316, -0.0528675 0.996579 0.0635169, + -0.041238 0.997392 0.0592297, -0.0184806 0.998909 0.0428959, -0.0290855 0.998739 0.0409275, -0.00922597 0.998978 0.0442551, + 0.0159385 0.999664 0.0204388, 0.0101901 0.999728 0.0209845, 0.00627388 0.999664 0.0251642, -0.000424208 0.999618 0.0276409, + -0.00514793 0.999728 0.0227443, -0.00977868 0.999664 0.0240082, -0.0219864 0.999622 0.0164886, -0.0361591 0.999193 0.0174718, + -0.0717586 0.996577 0.041046, -0.06874 0.996524 0.047066, -0.0588685 0.997553 0.0377303, -0.0636183 0.997571 0.0283707, + -0.0794165 0.996509 0.0257297, -0.047126 0.99881 0.0125679, -0.0682127 0.997553 0.0153064, -0.0698048 0.997559 0.0019908, + -0.0827731 0.996516 0.0101717, -0.083069 0.996525 -0.00620807, -0.0465345 0.998909 0.0038694, -0.0685762 0.997568 -0.0124618, + -0.0800042 0.996531 -0.0229102, -0.0588422 0.997401 -0.041587, -0.0633172 0.996564 -0.0533897, -0.0734178 0.996543 -0.0388912, + -0.0640564 0.997576 -0.027193, -0.0433975 0.998909 -0.0172265, -0.0447373 0.997573 -0.0533598, -0.0406885 0.99874 -0.0293749, + -0.0447567 0.998978 -0.00627399, -0.042041 0.998907 0.0204079, -0.0234457 0.999193 0.0326159, -0.0268562 0.999618 0.00655051, + -0.0163773 0.999652 0.0206726, -0.000185909 1 -0.000216162, -0.0259239 0.999664 0.000526322, -0.0230309 0.999728 -0.00367718, + -0.0243263 0.999664 -0.00896612, -0.0224045 0.999618 -0.0161849, -0.0149778 0.999728 -0.0178554, + -0.0277782 0.999065 -0.0331325, -0.0532625 0.996556 -0.0635537, -0.0287157 0.997574 -0.0634125, + -0.0255483 0.996538 -0.0791103, -0.0415496 0.996562 -0.0716849, 0.00168778 0.997568 -0.0696821, + 0.00818997 0.996525 -0.0828888, -0.00868088 0.996528 -0.0828012, -0.0134438 0.997573 -0.0683163, + -0.020753 0.998908 -0.0418636, -0.000519869 0.998808 -0.0488072, -0.0102047 0.998909 -0.0455758, + 0.0159095 0.997561 -0.0679596, 0.0284622 0.997555 -0.0638244, 0.0390605 0.996517 -0.0736778, 0.0243764 0.996522 -0.0796807, + 0.0473862 0.997551 -0.0514453, 0.0582853 0.996523 -0.0595316, 0.0528951 0.996577 -0.0635273, 0.0412265 0.997392 -0.0592412, + 0.0184806 0.998909 -0.0428959, 0.029062 0.998739 -0.040947, 0.00922304 0.998977 -0.0442631, -0.012095 0.999664 -0.0229382, + 0.000429748 0.999618 -0.0276445, -0.00628079 0.999664 -0.0251653, 0.00977985 0.999664 -0.024011, + 0.0219967 0.999623 -0.0164635, 0.0361667 0.999193 -0.0174668, 0.00514905 0.999728 -0.0227496] + } + coordIndex [ + 8, 7, 6, -1,21, 8, 5, -1,8, 21, 11, -1,6, 5, 8, -1,3, 2, 4, -1,1, 4, 2, -1,1, 0, + 4, -1,0, 5, 4, -1,0, 21, 5, -1,11, 9, 8, -1,20, 11, 21, -1,13, 12, 14, -1,11, 14, + 12, -1,14, 11, 20, -1,18, 15, 19, -1,14, 20, 19, -1,16, 15, 17, -1,18, 17, 15, -1, + 19, 15, 14, -1,10, 9, 11, -1,27, 26, 396, -1,396, 26, 397, -1,28, 396, 596, -1,397, + 596, 396, -1,396, 28, 27, -1,397, 26, 25, -1,398, 397, 24, -1,24, 397, 25, -1,398, + 24, 23, -1,397, 597, 598, -1,597, 397, 398, -1,597, 398, 22, -1,22, 398, 23, -1,397, + 598, 596, -1,39, 599, 49, -1,40, 39, 48, -1,545, 49, 600, -1,600, 49, 599, -1,48, + 544, 399, -1,49, 48, 39, -1,40, 48, 41, -1,29, 44, 399, -1,42, 44, 43, -1,41, 48, + 42, -1,30, 29, 399, -1,31, 30, 399, -1,48, 399, 42, -1,399, 44, 42, -1,544, 400, + 399, -1,601, 50, 600, -1,45, 601, 602, -1,38, 46, 45, -1,46, 37, 36, -1,37, 46, 38, -1, + 38, 45, 602, -1,46, 401, 47, -1,401, 400, 47, -1,401, 46, 36, -1,32, 31, 401, -1, + 401, 31, 400, -1,401, 36, 35, -1,31, 399, 400, -1,35, 34, 33, -1,32, 401, 33, -1, + 600, 50, 545, -1,33, 401, 35, -1,601, 45, 546, -1,50, 601, 547, -1,601, 546, 547, -1, + 400, 544, 47, -1,52, 51, 53, -1,54, 53, 51, -1,55, 603, 604, -1,604, 605, 606, -1, + 604, 606, 55, -1,57, 56, 58, -1,607, 58, 56, -1,608, 609, 610, -1,610, 611, 59, -1, + 610, 59, 608, -1,612, 613, 614, -1,614, 615, 612, -1,84, 83, 616, -1,85, 84, 616, -1, + 86, 61, 60, -1,617, 86, 616, -1,86, 85, 616, -1,61, 86, 617, -1,618, 82, 78, -1,82, + 81, 80, -1,618, 61, 617, -1,79, 82, 80, -1,78, 77, 75, -1,79, 78, 82, -1,78, 75, + 618, -1,61, 618, 75, -1,61, 64, 63, -1,64, 61, 69, -1,66, 65, 69, -1,69, 67, 66, -1, + 69, 65, 64, -1,69, 68, 67, -1,73, 70, 74, -1,75, 74, 70, -1,77, 76, 75, -1,73, 72, + 70, -1,70, 72, 71, -1,69, 75, 70, -1,75, 69, 61, -1,63, 62, 61, -1,619, 92, 620, -1, + 91, 620, 92, -1,620, 91, 90, -1,89, 87, 620, -1,88, 87, 89, -1,89, 620, 90, -1,620, + 107, 105, -1,620, 105, 621, -1,106, 105, 107, -1,93, 105, 104, -1,104, 95, 94, -1, + 104, 94, 93, -1,93, 621, 105, -1,103, 95, 104, -1,97, 96, 103, -1,95, 103, 96, -1, + 103, 102, 97, -1,98, 97, 102, -1,99, 101, 622, -1,622, 100, 99, -1,98, 101, 99, -1, + 98, 102, 101, -1,623, 624, 109, -1,109, 108, 623, -1,110, 109, 624, -1,113, 112, + 402, -1,625, 402, 626, -1,403, 626, 402, -1,402, 625, 113, -1,402, 112, 403, -1,403, + 627, 626, -1,404, 403, 111, -1,404, 111, 628, -1,627, 404, 629, -1,404, 627, 403, -1, + 629, 404, 628, -1,403, 112, 111, -1,115, 114, 118, -1,630, 405, 406, -1,118, 405, + 115, -1,116, 115, 405, -1,405, 630, 116, -1,405, 118, 406, -1,117, 406, 118, -1,407, + 406, 117, -1,407, 117, 631, -1,632, 407, 633, -1,407, 632, 406, -1,633, 407, 634, -1, + 407, 631, 634, -1,406, 632, 630, -1,635, 636, 119, -1,408, 120, 119, -1,119, 636, + 408, -1,408, 637, 638, -1,637, 408, 636, -1,639, 638, 640, -1,638, 639, 408, -1,408, + 639, 120, -1,641, 409, 642, -1,409, 641, 643, -1,409, 643, 410, -1,122, 409, 410, -1, + 121, 642, 409, -1,122, 121, 409, -1,410, 643, 644, -1,411, 410, 645, -1,645, 410, + 644, -1,411, 645, 125, -1,123, 411, 124, -1,411, 123, 410, -1,411, 125, 124, -1,410, + 123, 122, -1,646, 128, 412, -1,647, 412, 415, -1,413, 412, 128, -1,128, 127, 413, -1, + 646, 412, 647, -1,415, 412, 413, -1,648, 418, 649, -1,418, 650, 649, -1,418, 415, + 416, -1,651, 650, 418, -1,418, 419, 651, -1,418, 648, 415, -1,648, 647, 415, -1,416, + 415, 413, -1,126, 414, 413, -1,414, 126, 652, -1,414, 416, 413, -1,653, 652, 126, -1, + 414, 652, 654, -1,416, 417, 420, -1,417, 416, 414, -1,420, 655, 651, -1,420, 419, + 416, -1,417, 654, 420, -1,416, 419, 418, -1,420, 654, 655, -1,417, 414, 654, -1,420, + 651, 419, -1,413, 127, 126, -1,129, 656, 421, -1,421, 656, 422, -1,130, 421, 657, -1, + 422, 657, 421, -1,421, 130, 129, -1,422, 656, 658, -1,423, 422, 659, -1,659, 422, + 658, -1,423, 659, 660, -1,422, 661, 662, -1,661, 422, 423, -1,661, 423, 663, -1,663, + 423, 660, -1,422, 662, 657, -1,664, 665, 666, -1,665, 664, 667, -1,131, 668, 669, -1, + 669, 132, 131, -1,670, 135, 136, -1,134, 136, 135, -1,671, 135, 670, -1,134, 133, + 137, -1,137, 136, 134, -1,672, 673, 674, -1,424, 675, 672, -1,675, 424, 140, -1,676, + 424, 674, -1,672, 674, 424, -1,677, 425, 676, -1,424, 676, 425, -1,425, 140, 424, -1, + 425, 141, 140, -1,426, 142, 141, -1,139, 138, 144, -1,678, 425, 677, -1,139, 143, + 426, -1,142, 426, 143, -1,144, 143, 139, -1,678, 139, 426, -1,425, 678, 426, -1,141, + 425, 426, -1,679, 146, 427, -1,427, 146, 145, -1,680, 427, 681, -1,681, 427, 145, -1, + 680, 682, 427, -1,427, 682, 679, -1,683, 684, 147, -1,147, 685, 686, -1,686, 683, + 147, -1,147, 687, 428, -1,687, 688, 428, -1,150, 149, 428, -1,688, 150, 428, -1,148, + 428, 149, -1,148, 147, 428, -1,687, 147, 684, -1,151, 228, 152, -1,228, 227, 152, -1, + 225, 548, 226, -1,548, 225, 154, -1,155, 154, 225, -1,153, 152, 226, -1,548, 153, + 226, -1,225, 224, 156, -1,226, 152, 227, -1,156, 429, 549, -1,156, 155, 225, -1,156, + 224, 429, -1,430, 157, 433, -1,432, 157, 429, -1,433, 157, 432, -1,224, 432, 429, -1, + 224, 223, 432, -1,438, 222, 221, -1,441, 438, 221, -1,222, 435, 223, -1,435, 222, + 438, -1,433, 435, 436, -1,435, 433, 432, -1,444, 221, 220, -1,219, 218, 450, -1,459, + 217, 216, -1,217, 453, 218, -1,462, 216, 215, -1,219, 447, 220, -1,468, 215, 214, -1, + 442, 438, 441, -1,444, 441, 221, -1,447, 444, 220, -1,445, 441, 444, -1,450, 451, + 447, -1,444, 447, 448, -1,453, 450, 218, -1,453, 454, 450, -1,447, 219, 450, -1,435, + 438, 439, -1,457, 453, 456, -1,459, 456, 217, -1,462, 459, 216, -1,460, 456, 459, -1, + 466, 462, 465, -1,468, 465, 215, -1,471, 468, 214, -1,469, 465, 468, -1,462, 215, + 465, -1,463, 459, 462, -1,453, 217, 456, -1,469, 468, 471, -1,214, 213, 471, -1,435, + 432, 223, -1,430, 433, 158, -1,551, 158, 431, -1,434, 431, 158, -1,431, 434, 160, -1, + 433, 434, 158, -1,436, 439, 440, -1,439, 436, 435, -1,442, 439, 438, -1,439, 442, + 440, -1,436, 440, 437, -1,443, 440, 442, -1,446, 442, 445, -1,437, 440, 162, -1,442, + 441, 445, -1,436, 437, 434, -1,433, 436, 434, -1,434, 437, 161, -1,551, 160, 159, -1, + 157, 430, 550, -1,162, 161, 437, -1,158, 550, 430, -1,160, 434, 161, -1,429, 157, + 549, -1,164, 163, 443, -1,163, 162, 440, -1,446, 443, 442, -1,165, 443, 446, -1,165, + 164, 443, -1,166, 165, 446, -1,166, 446, 449, -1,443, 163, 440, -1,551, 431, 160, -1, + 446, 445, 448, -1,448, 451, 452, -1,451, 448, 447, -1,454, 451, 450, -1,451, 454, + 455, -1,449, 452, 167, -1,452, 449, 448, -1,455, 452, 451, -1,452, 455, 168, -1,454, + 457, 455, -1,448, 449, 446, -1,457, 460, 458, -1,460, 457, 456, -1,463, 460, 459, -1, + 458, 460, 461, -1,466, 467, 463, -1,460, 463, 464, -1,469, 466, 465, -1,470, 466, + 469, -1,463, 462, 466, -1,457, 458, 455, -1,454, 453, 457, -1,455, 458, 169, -1,455, + 169, 168, -1,168, 167, 452, -1,458, 170, 169, -1,170, 458, 171, -1,461, 172, 171, -1, + 171, 458, 461, -1,464, 467, 173, -1,467, 464, 463, -1,470, 467, 466, -1,467, 470, + 173, -1,173, 172, 464, -1,174, 173, 470, -1,186, 185, 555, -1,470, 469, 472, -1,464, + 172, 461, -1,461, 460, 464, -1,689, 554, 187, -1,470, 473, 174, -1,449, 167, 166, -1, + 445, 444, 448, -1,553, 189, 188, -1,472, 469, 471, -1,477, 213, 212, -1,208, 212, + 561, -1,208, 207, 212, -1,207, 206, 212, -1,563, 210, 559, -1,204, 483, 557, -1,563, + 560, 211, -1,480, 558, 205, -1,475, 472, 474, -1,472, 471, 474, -1,474, 213, 477, -1, + 475, 474, 477, -1,473, 475, 476, -1,475, 473, 472, -1,478, 476, 475, -1,473, 476, + 175, -1,475, 477, 478, -1,472, 473, 470, -1,480, 205, 483, -1,480, 483, 484, -1,480, + 478, 477, -1,476, 478, 479, -1,481, 478, 480, -1,484, 481, 480, -1,482, 478, 481, -1, + 483, 486, 484, -1,480, 477, 206, -1,212, 206, 477, -1,484, 485, 481, -1,474, 471, + 213, -1,486, 204, 203, -1,489, 203, 202, -1,203, 489, 486, -1,489, 202, 201, -1,200, + 489, 201, -1,486, 489, 490, -1,486, 487, 484, -1,486, 490, 487, -1,490, 489, 200, -1, + 490, 200, 199, -1,491, 487, 490, -1,484, 487, 488, -1,490, 199, 491, -1,486, 483, + 204, -1,482, 178, 479, -1,482, 479, 478, -1,485, 482, 481, -1,485, 179, 482, -1,181, + 488, 491, -1,491, 488, 487, -1,491, 199, 198, -1,485, 488, 180, -1,485, 484, 488, -1, + 198, 182, 491, -1,197, 195, 194, -1,195, 197, 196, -1,198, 197, 182, -1,183, 197, + 194, -1,479, 178, 177, -1,176, 476, 177, -1,556, 690, 185, -1,180, 179, 485, -1,178, + 482, 179, -1,476, 176, 175, -1,181, 491, 182, -1,181, 180, 488, -1,184, 193, 192, -1, + 480, 206, 558, -1,182, 197, 183, -1,184, 183, 193, -1,192, 556, 184, -1,193, 183, + 194, -1,205, 557, 483, -1,476, 479, 177, -1,186, 555, 689, -1,690, 556, 691, -1,691, + 556, 692, -1,189, 553, 693, -1,554, 694, 188, -1,190, 693, 552, -1,186, 689, 187, -1, + 554, 188, 187, -1,562, 209, 561, -1,190, 189, 693, -1,563, 211, 210, -1,694, 553, + 188, -1,695, 552, 696, -1,559, 562, 563, -1,191, 552, 695, -1,208, 561, 209, -1,191, + 190, 552, -1,209, 562, 559, -1,185, 184, 556, -1,473, 175, 174, -1,690, 555, 185, -1, + 697, 233, 232, -1,236, 235, 698, -1,237, 236, 698, -1,234, 232, 235, -1,231, 235, + 232, -1,232, 699, 697, -1,235, 231, 230, -1,230, 229, 698, -1,700, 698, 229, -1,698, + 235, 230, -1,232, 234, 699, -1,701, 700, 492, -1,493, 492, 243, -1,702, 492, 700, -1, + 701, 492, 493, -1,703, 704, 494, -1,705, 703, 238, -1,494, 704, 493, -1,242, 494, + 493, -1,238, 703, 494, -1,704, 701, 493, -1,244, 492, 702, -1,241, 238, 494, -1,242, + 493, 243, -1,243, 492, 244, -1,494, 242, 241, -1,239, 238, 240, -1,238, 241, 240, -1, + 244, 702, 245, -1,248, 246, 706, -1,564, 247, 246, -1,249, 248, 706, -1,249, 705, + 707, -1,706, 705, 249, -1,248, 564, 246, -1,251, 250, 707, -1,250, 249, 707, -1,569, + 253, 252, -1,708, 709, 495, -1,565, 576, 566, -1,570, 252, 571, -1,567, 576, 253, -1, + 710, 708, 254, -1,711, 712, 709, -1,712, 258, 257, -1,253, 568, 567, -1,712, 495, + 709, -1,253, 569, 568, -1,257, 256, 712, -1,496, 254, 708, -1,708, 495, 496, -1,496, + 495, 255, -1,254, 496, 255, -1,255, 495, 256, -1,567, 566, 576, -1,495, 712, 256, -1, + 569, 252, 570, -1,575, 576, 565, -1,571, 252, 572, -1,572, 252, 573, -1,573, 252, + 574, -1,565, 710, 575, -1,577, 575, 710, -1,710, 254, 577, -1,713, 260, 259, -1,714, + 715, 259, -1,713, 259, 715, -1,271, 716, 717, -1,716, 271, 270, -1,271, 717, 718, -1, + 719, 272, 720, -1,272, 271, 720, -1,271, 718, 720, -1,721, 722, 723, -1,724, 722, + 270, -1,722, 724, 723, -1,270, 269, 724, -1,721, 723, 725, -1,722, 726, 270, -1,270, + 726, 716, -1,274, 273, 727, -1,275, 727, 728, -1,275, 274, 727, -1,729, 276, 275, -1, + 728, 729, 275, -1,727, 273, 730, -1,578, 730, 273, -1,273, 719, 578, -1,273, 272, + 719, -1,268, 267, 263, -1,269, 268, 261, -1,262, 261, 268, -1,731, 263, 267, -1,262, + 268, 263, -1,267, 266, 731, -1,732, 266, 265, -1,265, 264, 733, -1,734, 735, 264, -1, + 732, 265, 733, -1,736, 733, 264, -1,735, 736, 264, -1,266, 732, 731, -1,724, 269, + 261, -1,737, 738, 739, -1,738, 737, 740, -1,741, 742, 743, -1,742, 744, 745, -1,746, + 277, 745, -1,743, 747, 748, -1,749, 750, 751, -1,752, 753, 754, -1,751, 754, 749, -1, + 747, 753, 755, -1,756, 757, 277, -1,758, 759, 760, -1,761, 760, 762, -1,758, 760, + 761, -1,760, 759, 278, -1,763, 760, 764, -1,760, 763, 765, -1,762, 760, 765, -1,278, + 757, 760, -1,277, 757, 278, -1,757, 766, 767, -1,754, 751, 752, -1,755, 748, 747, -1, + 744, 742, 741, -1,743, 748, 741, -1,744, 746, 745, -1,768, 277, 769, -1,277, 770, + 771, -1,768, 770, 277, -1,769, 277, 746, -1,771, 772, 277, -1,773, 757, 774, -1,757, + 775, 766, -1,757, 773, 775, -1,757, 776, 774, -1,777, 778, 277, -1,756, 277, 778, -1, + 779, 776, 757, -1,756, 779, 757, -1,277, 780, 777, -1,772, 780, 277, -1,755, 753, + 752, -1,279, 781, 497, -1,279, 497, 280, -1,498, 497, 781, -1,498, 781, 782, -1,280, + 497, 783, -1,782, 499, 498, -1,499, 782, 784, -1,499, 784, 785, -1,498, 499, 786, -1, + 786, 783, 498, -1,785, 786, 499, -1,498, 783, 497, -1,284, 283, 500, -1,500, 283, + 501, -1,787, 788, 500, -1,500, 789, 787, -1,501, 789, 500, -1,788, 284, 500, -1,501, + 283, 282, -1,502, 501, 281, -1,281, 501, 282, -1,502, 281, 790, -1,791, 789, 502, -1, + 502, 790, 791, -1,502, 789, 501, -1,792, 793, 794, -1,503, 794, 795, -1,792, 794, + 503, -1,796, 792, 504, -1,504, 797, 796, -1,505, 798, 797, -1,503, 504, 792, -1,503, + 799, 504, -1,799, 503, 795, -1,799, 800, 504, -1,504, 800, 505, -1,505, 801, 798, -1, + 801, 505, 802, -1,802, 803, 801, -1,505, 800, 802, -1,504, 505, 797, -1,804, 805, + 506, -1,806, 807, 508, -1,805, 806, 507, -1,298, 805, 507, -1,298, 506, 805, -1,299, + 806, 508, -1,507, 806, 299, -1,808, 804, 506, -1,508, 807, 300, -1,509, 297, 296, -1, + 297, 509, 807, -1,295, 509, 296, -1,585, 302, 294, -1,300, 807, 509, -1,304, 292, + 579, -1,295, 301, 509, -1,298, 507, 299, -1,305, 580, 291, -1,809, 808, 506, -1,304, + 581, 292, -1,299, 508, 300, -1,300, 509, 301, -1,506, 298, 809, -1,581, 303, 582, -1, + 303, 302, 584, -1,587, 586, 301, -1,304, 303, 581, -1,302, 583, 584, -1,304, 580, + 305, -1,304, 579, 580, -1,305, 291, 290, -1,586, 302, 301, -1,303, 293, 582, -1,290, + 289, 305, -1,512, 288, 287, -1,287, 286, 513, -1,285, 514, 286, -1,285, 322, 514, -1, + 510, 511, 305, -1,511, 510, 288, -1,512, 513, 307, -1,513, 512, 287, -1,514, 513, + 286, -1,513, 514, 307, -1,511, 288, 512, -1,511, 512, 306, -1,514, 322, 321, -1,288, + 510, 289, -1,314, 312, 588, -1,321, 595, 308, -1,319, 309, 594, -1,319, 310, 309, -1, + 511, 306, 305, -1,321, 308, 307, -1,308, 320, 309, -1,307, 306, 512, -1,319, 318, + 310, -1,514, 321, 307, -1,593, 310, 318, -1,312, 589, 588, -1,314, 810, 811, -1,311, + 591, 316, -1,316, 315, 311, -1,310, 317, 311, -1,314, 313, 312, -1,312, 311, 315, -1, + 294, 302, 586, -1,313, 314, 811, -1,583, 302, 585, -1,301, 295, 587, -1,293, 303, + 584, -1,510, 305, 289, -1,312, 315, 589, -1,311, 317, 590, -1,311, 590, 591, -1,317, + 310, 592, -1,592, 310, 593, -1,309, 320, 594, -1,320, 308, 595, -1,515, 812, 813, -1, + 323, 814, 516, -1,516, 814, 812, -1,516, 517, 323, -1,338, 337, 813, -1,337, 515, + 813, -1,336, 515, 337, -1,335, 516, 336, -1,515, 336, 516, -1,516, 335, 334, -1,515, + 516, 812, -1,324, 323, 517, -1,331, 329, 328, -1,329, 331, 330, -1,328, 332, 331, -1, + 327, 332, 328, -1,517, 334, 333, -1,516, 334, 517, -1,324, 517, 325, -1,325, 517, + 326, -1,333, 327, 326, -1,332, 327, 333, -1,517, 333, 326, -1,339, 815, 340, -1,815, + 339, 816, -1,816, 817, 815, -1,818, 816, 339, -1,518, 819, 519, -1,819, 518, 820, -1, + 518, 519, 343, -1,820, 518, 821, -1,343, 821, 518, -1,519, 344, 343, -1,520, 822, + 342, -1,519, 520, 344, -1,519, 819, 822, -1,520, 341, 344, -1,341, 520, 342, -1,822, + 520, 519, -1,346, 345, 347, -1,348, 347, 350, -1,345, 823, 347, -1,823, 824, 825, -1, + 350, 347, 825, -1,350, 349, 348, -1,825, 347, 823, -1,355, 354, 521, -1,356, 521, + 522, -1,355, 521, 826, -1,356, 826, 521, -1,521, 354, 522, -1,353, 352, 523, -1,522, + 357, 356, -1,357, 522, 523, -1,523, 351, 357, -1,351, 523, 352, -1,522, 353, 523, -1, + 353, 522, 354, -1,827, 358, 828, -1,827, 829, 830, -1,829, 827, 828, -1,831, 832, + 833, -1,834, 832, 835, -1,835, 832, 836, -1,831, 837, 838, -1,831, 839, 832, -1,833, + 837, 831, -1,832, 839, 836, -1,835, 840, 834, -1,841, 842, 843, -1,844, 843, 842, -1, + 845, 842, 841, -1,846, 842, 845, -1,835, 846, 840, -1,846, 847, 840, -1,848, 849, + 846, -1,845, 847, 846, -1,846, 849, 842, -1,359, 850, 360, -1,851, 360, 850, -1,851, + 852, 360, -1,852, 853, 854, -1,853, 855, 856, -1,854, 853, 857, -1,854, 360, 852, -1, + 854, 857, 858, -1,852, 855, 853, -1,363, 362, 859, -1,860, 362, 361, -1,859, 362, + 860, -1,861, 862, 363, -1,859, 861, 363, -1,863, 864, 865, -1,865, 866, 863, -1,867, + 366, 868, -1,366, 867, 869, -1,870, 365, 366, -1,868, 365, 364, -1,365, 868, 366, -1, + 871, 866, 868, -1,364, 871, 868, -1,872, 873, 874, -1,875, 872, 874, -1,875, 876, + 877, -1,872, 875, 877, -1,878, 879, 880, -1,880, 881, 878, -1,882, 883, 884, -1,882, + 884, 367, -1,885, 886, 367, -1,882, 367, 886, -1,887, 888, 889, -1,890, 891, 887, -1, + 888, 887, 891, -1,892, 893, 368, -1,368, 894, 892, -1,895, 374, 896, -1,373, 896, + 374, -1,376, 375, 895, -1,374, 895, 375, -1,894, 372, 897, -1,372, 894, 898, -1,896, + 373, 898, -1,373, 372, 898, -1,370, 369, 371, -1,371, 369, 899, -1,371, 899, 900, -1, + 895, 901, 376, -1,377, 376, 901, -1,371, 378, 377, -1,900, 378, 371, -1,901, 371, + 377, -1,379, 902, 903, -1,904, 379, 903, -1,379, 904, 905, -1,906, 907, 905, -1,908, + 907, 906, -1,906, 905, 904, -1,909, 910, 524, -1,524, 910, 911, -1,912, 524, 913, -1, + 913, 524, 911, -1,912, 914, 524, -1,524, 914, 909, -1,380, 915, 916, -1,916, 917, + 380, -1,382, 381, 525, -1,381, 918, 525, -1,919, 526, 525, -1,526, 919, 920, -1,918, + 919, 525, -1,382, 525, 526, -1,527, 382, 526, -1,527, 920, 921, -1,921, 386, 527, -1, + 527, 386, 385, -1,382, 527, 383, -1,385, 384, 383, -1,527, 385, 383, -1,527, 526, + 920, -1,388, 387, 528, -1,388, 922, 923, -1,922, 388, 528, -1,387, 529, 528, -1,922, + 528, 924, -1,534, 925, 924, -1,534, 531, 532, -1,531, 924, 528, -1,534, 926, 925, -1, + 535, 926, 534, -1,532, 531, 529, -1,531, 534, 924, -1,528, 529, 531, -1,387, 530, + 529, -1,529, 530, 532, -1,530, 387, 927, -1,530, 927, 928, -1,533, 532, 530, -1,530, + 928, 533, -1,929, 533, 928, -1,930, 535, 536, -1,533, 535, 532, -1,930, 931, 535, -1, + 535, 533, 536, -1,535, 931, 926, -1,536, 932, 930, -1,533, 929, 536, -1,929, 932, + 536, -1,532, 535, 534, -1,390, 389, 537, -1,537, 389, 393, -1,390, 933, 391, -1,538, + 933, 537, -1,933, 390, 537, -1,537, 393, 538, -1,539, 392, 934, -1,539, 934, 935, -1, + 936, 538, 539, -1,538, 936, 933, -1,539, 538, 392, -1,936, 539, 937, -1,937, 539, + 935, -1,392, 538, 393, -1,938, 394, 540, -1,938, 395, 394, -1,394, 939, 540, -1,940, + 941, 942, -1,540, 942, 943, -1,942, 540, 940, -1,540, 943, 938, -1,940, 540, 939, -1, + 944, 945, 946, -1,947, 946, 945, -1,947, 945, 948, -1,949, 541, 950, -1,951, 541, + 952, -1,542, 952, 541, -1,541, 951, 950, -1,541, 949, 542, -1,542, 953, 952, -1,543, + 542, 954, -1,543, 954, 955, -1,953, 543, 956, -1,543, 953, 542, -1,956, 543, 955, -1, + 542, 949, 954, -1,957, 958, 959, -1,959, 960, 957, -1,961, 958, 957, -1,962, 958, + 961, -1,963, 964, 965, -1,963, 965, 958, -1,966, 963, 958, -1,961, 967, 968, -1,967, + 969, 968, -1,967, 957, 970, -1,971, 961, 972, -1,972, 973, 971, -1,967, 961, 957, -1, + 971, 974, 961, -1,966, 975, 963, -1,976, 977, 966, -1,966, 962, 976, -1,974, 962, + 961, -1,978, 979, 980, -1,962, 981, 978, -1,980, 962, 978, -1,978, 981, 982, -1,983, + 984, 985, -1,974, 983, 985, -1,983, 971, 986, -1,987, 988, 981, -1,981, 974, 987, -1, + 983, 974, 971, -1,974, 981, 962, -1,958, 962, 966, -1,989, 992, 991, -1,991, 990, + 989, -1,1000, 999, 1001, -1,999, 998, 1114, -1,1114, 998, 997, -1,1165, 1000, 1001, -1, + 1003, 1002, 1114, -1,1114, 1002, 1001, -1,999, 1114, 1001, -1,1114, 997, 1115, -1, + 1115, 997, 1116, -1,1116, 997, 996, -1,1116, 996, 995, -1,993, 995, 994, -1,1003, + 1116, 1004, -1,1116, 1003, 1115, -1,1005, 1004, 1116, -1,1005, 1116, 995, -1,995, + 993, 1005, -1,1115, 1003, 1114, -1,1166, 1011, 1117, -1,1167, 1117, 1006, -1,1117, + 1167, 1166, -1,1118, 1006, 1117, -1,1117, 1011, 1118, -1,1119, 1118, 1010, -1,1010, + 1118, 1011, -1,1119, 1010, 1009, -1,1007, 1119, 1008, -1,1119, 1007, 1118, -1,1008, + 1119, 1009, -1,1118, 1007, 1006, -1,1120, 1014, 1013, -1,1168, 1120, 1169, -1,1014, + 1120, 1015, -1,1169, 1120, 1013, -1,1155, 1018, 1122, -1,1167, 1012, 1170, -1,1013, + 1012, 1167, -1,1167, 1169, 1013, -1,1121, 1015, 1120, -1,1016, 1121, 1122, -1,1120, + 1168, 1121, -1,1122, 1017, 1016, -1,1017, 1122, 1018, -1,1157, 1156, 1122, -1,1122, + 1121, 1157, -1,1155, 1122, 1156, -1,1168, 1157, 1121, -1,1016, 1015, 1121, -1,1022, + 1171, 1023, -1,1172, 1171, 1123, -1,1123, 1173, 1172, -1,1174, 1173, 1123, -1,1171, + 1022, 1123, -1,1123, 1022, 1021, -1,1021, 1020, 1019, -1,1123, 1019, 1174, -1,1123, + 1021, 1019, -1,1175, 1174, 1176, -1,1177, 1174, 1175, -1,1178, 1176, 1024, -1,1024, + 1176, 1025, -1,1175, 1176, 1178, -1,1040, 1030, 1029, -1,1030, 1040, 1179, -1,1031, + 1030, 1179, -1,1179, 1178, 1031, -1,1041, 1040, 1027, -1,1027, 1026, 1041, -1,1028, + 1027, 1040, -1,1040, 1029, 1028, -1,1033, 1032, 1178, -1,1039, 1033, 1178, -1,1033, + 1039, 1034, -1,1032, 1031, 1178, -1,1036, 1035, 1039, -1,1036, 1038, 1037, -1,1038, + 1036, 1039, -1,1035, 1034, 1039, -1,1180, 1043, 1042, -1,1180, 1045, 1044, -1,1043, + 1180, 1044, -1,1181, 1182, 1124, -1,1183, 1184, 1125, -1,1181, 1124, 1127, -1,1125, + 1124, 1183, -1,1125, 1126, 1128, -1,1183, 1124, 1182, -1,1128, 1124, 1125, -1,1130, + 1185, 1186, -1,1127, 1186, 1181, -1,1130, 1050, 1185, -1,1186, 1127, 1130, -1,1130, + 1128, 1131, -1,1128, 1130, 1127, -1,1051, 1131, 1052, -1,1131, 1051, 1130, -1,1131, + 1128, 1129, -1,1130, 1051, 1050, -1,1127, 1124, 1128, -1,1126, 1125, 1184, -1,1126, + 1187, 1048, -1,1132, 1131, 1129, -1,1047, 1129, 1126, -1,1048, 1187, 1049, -1,1187, + 1126, 1184, -1,1047, 1126, 1048, -1,1129, 1047, 1132, -1,1052, 1132, 1053, -1,1052, + 1131, 1132, -1,1046, 1132, 1047, -1,1054, 1053, 1132, -1,1046, 1054, 1132, -1,1129, + 1128, 1126, -1,1133, 1188, 1189, -1,1133, 1058, 1057, -1,1189, 1058, 1133, -1,1188, + 1133, 1134, -1,1134, 1133, 1057, -1,1134, 1190, 1188, -1,1135, 1191, 1190, -1,1055, + 1191, 1135, -1,1134, 1057, 1135, -1,1057, 1056, 1135, -1,1055, 1135, 1056, -1,1190, + 1134, 1135, -1,1065, 1064, 1136, -1,1136, 1066, 1065, -1,1136, 1064, 1063, -1,1136, + 1062, 1137, -1,1062, 1136, 1063, -1,1139, 1137, 1140, -1,1137, 1139, 1136, -1,1062, + 1061, 1137, -1,1136, 1139, 1066, -1,1066, 1139, 1192, -1,1192, 1139, 1142, -1,1142, + 1193, 1192, -1,1143, 1193, 1142, -1,1194, 1143, 1144, -1,1194, 1193, 1143, -1,1141, + 1143, 1140, -1,1143, 1142, 1140, -1,1142, 1139, 1140, -1,1140, 1137, 1138, -1,1060, + 1138, 1061, -1,1195, 1059, 1196, -1,1059, 1138, 1060, -1,1141, 1140, 1138, -1,1197, + 1144, 1141, -1,1144, 1198, 1194, -1,1199, 1198, 1144, -1,1141, 1138, 1195, -1,1144, + 1143, 1141, -1,1197, 1199, 1144, -1,1197, 1141, 1195, -1,1138, 1059, 1195, -1,1137, + 1061, 1138, -1,1068, 1067, 1200, -1,1200, 1067, 1201, -1,1200, 1202, 1203, -1,1202, + 1200, 1201, -1,1204, 1205, 1206, -1,1204, 1206, 1207, -1,1078, 1208, 1209, -1,1210, + 1207, 1206, -1,1209, 1210, 1206, -1,1211, 1212, 1213, -1,1209, 1206, 1213, -1,1214, + 1213, 1212, -1,1077, 1213, 1214, -1,1077, 1215, 1213, -1,1213, 1215, 1209, -1,1215, + 1079, 1209, -1,1083, 1080, 1079, -1,1079, 1215, 1074, -1,1083, 1082, 1081, -1,1083, + 1079, 1069, -1,1081, 1080, 1083, -1,1074, 1069, 1079, -1,1076, 1075, 1215, -1,1215, + 1075, 1074, -1,1069, 1072, 1071, -1,1072, 1069, 1073, -1,1069, 1074, 1073, -1,1071, + 1070, 1069, -1,1078, 1209, 1079, -1,1089, 1145, 1090, -1,1145, 1089, 1088, -1,1088, + 1146, 1145, -1,1146, 1088, 1087, -1,1145, 1146, 1216, -1,1145, 1217, 1090, -1,1217, + 1145, 1216, -1,1146, 1218, 1216, -1,1147, 1087, 1086, -1,1147, 1086, 1085, -1,1218, + 1147, 1084, -1,1218, 1146, 1147, -1,1084, 1147, 1085, -1,1147, 1146, 1087, -1,1219, + 1220, 1221, -1,1220, 1219, 1091, -1,1222, 1148, 1092, -1,1148, 1222, 1223, -1,1223, + 1149, 1148, -1,1149, 1223, 1224, -1,1148, 1149, 1094, -1,1148, 1093, 1092, -1,1093, + 1148, 1094, -1,1149, 1095, 1094, -1,1150, 1095, 1149, -1,1150, 1224, 1225, -1,1150, + 1225, 1226, -1,1095, 1150, 1096, -1,1150, 1226, 1096, -1,1150, 1149, 1224, -1,1227, + 1228, 1229, -1,1230, 1231, 1232, -1,1233, 1234, 1230, -1,1232, 1233, 1230, -1,1231, + 1235, 1232, -1,1230, 1234, 1236, -1,1237, 1159, 1100, -1,1101, 1237, 1230, -1,1230, + 1236, 1101, -1,1238, 1235, 1098, -1,1238, 1098, 1239, -1,1098, 1235, 1099, -1,1239, + 1098, 1240, -1,1235, 1231, 1099, -1,1097, 1158, 1241, -1,1240, 1098, 1242, -1,1243, + 1244, 1158, -1,1241, 1242, 1098, -1,1100, 1159, 1245, -1,1097, 1241, 1098, -1,1243, + 1158, 1097, -1,1101, 1159, 1237, -1,1246, 1108, 1107, -1,1246, 1247, 1109, -1,1108, + 1246, 1109, -1,1107, 1106, 1103, -1,1103, 1102, 1246, -1,1104, 1103, 1105, -1,1103, + 1246, 1107, -1,1103, 1106, 1105, -1,1110, 1248, 1111, -1,1249, 1248, 1110, -1,1250, + 1251, 1252, -1,1252, 1110, 1250, -1,1249, 1110, 1252, -1,1253, 1254, 1151, -1,1255, + 1151, 1256, -1,1253, 1151, 1112, -1,1113, 1112, 1257, -1,1257, 1112, 1151, -1,1151, + 1255, 1257, -1,1151, 1254, 1258, -1,1256, 1259, 1255, -1,1151, 1258, 1256, -1,1260, + 1261, 1152, -1,1154, 1262, 1164, -1,1263, 1152, 1264, -1,1265, 1152, 1261, -1,1260, + 1152, 1263, -1,1154, 1161, 1160, -1,1266, 1267, 1268, -1,1154, 1162, 1161, -1,1268, + 1267, 1260, -1,1260, 1263, 1268, -1,1152, 1265, 1153, -1,1154, 1153, 1269, -1,1153, + 1264, 1152, -1,1269, 1270, 1154, -1,1262, 1154, 1270, -1,1153, 1160, 1264, -1,1160, + 1153, 1154, -1,1162, 1164, 1163, -1,1153, 1265, 1269, -1,1154, 1164, 1162, -1,1271, + 1272, 1273, -1,1273, 1272, 1274, -1,1275, 1272, 1276, -1,1277, 1272, 1275, -1,1278, + 1273, 1274, -1,1279, 1280, 1273, -1,1273, 1278, 1279, -1,1274, 1272, 1277, -1,1281, + 1282, 1283, -1,1284, 1285, 1286, -1,1287, 1288, 1286, -1,1287, 1286, 1285, -1,1330, + 1327, 1326, -1,1330, 1326, 1325, -1,1330, 1325, 1324, -1,1327, 1330, 1328, -1,1289, + 1291, 1290, -1,1323, 1330, 1324, -1,1289, 1330, 1322, -1,1328, 1330, 1329, -1,1289, + 1321, 1300, -1,1321, 1289, 1322, -1,1310, 1319, 1318, -1,1309, 1320, 1319, -1,1330, + 1323, 1322, -1,1313, 1312, 1316, -1,1316, 1312, 1317, -1,1314, 1313, 1315, -1,1316, + 1315, 1313, -1,1318, 1317, 1311, -1,1320, 1308, 1321, -1,1291, 1289, 1292, -1,1289, + 1294, 1293, -1,1295, 1289, 1296, -1,1295, 1294, 1289, -1,1289, 1297, 1296, -1,1298, + 1289, 1299, -1,1301, 1300, 1321, -1,1289, 1300, 1299, -1,1297, 1289, 1298, -1,1321, + 1302, 1301, -1,1309, 1319, 1310, -1,1312, 1311, 1317, -1,1311, 1310, 1318, -1,1309, + 1308, 1320, -1,1321, 1305, 1304, -1,1305, 1321, 1306, -1,1321, 1308, 1307, -1,1321, + 1307, 1306, -1,1321, 1304, 1303, -1,1321, 1303, 1302, -1,1293, 1292, 1289, -1,1690, + 1691, 1454, -1,1691, 1692, 1455, -1,1693, 1694, 1457, -1,1694, 1695, 1458, -1,1692, + 1693, 1456, -1,1454, 1455, 1332, -1,1455, 1454, 1691, -1,1456, 1455, 1692, -1,1455, + 1456, 1333, -1,1457, 1458, 1335, -1,1458, 1457, 1694, -1,1459, 1458, 1695, -1,1458, + 1459, 1336, -1,1456, 1693, 1457, -1,1456, 1457, 1334, -1,1695, 1696, 1459, -1,1690, + 1454, 1331, -1,1696, 1697, 1460, -1,1460, 1697, 1461, -1,1461, 1698, 1699, -1,1462, + 1699, 1700, -1,1461, 1697, 1698, -1,1701, 1464, 1702, -1,1700, 1702, 1463, -1,1703, + 1465, 1701, -1,1466, 1703, 1704, -1,1467, 1704, 1705, -1,1468, 1705, 1706, -1,1696, + 1460, 1459, -1,1459, 1460, 1337, -1,1331, 1454, 1332, -1,1332, 1455, 1333, -1,1334, + 1457, 1335, -1,1334, 1333, 1456, -1,1462, 1461, 1699, -1,1340, 1461, 1462, -1,1460, + 1461, 1338, -1,1335, 1458, 1336, -1,1336, 1459, 1337, -1,1339, 1338, 1461, -1,1340, + 1339, 1461, -1,1460, 1338, 1337, -1,1462, 1341, 1340, -1,1463, 1464, 1342, -1,1464, + 1463, 1702, -1,1465, 1464, 1701, -1,1464, 1465, 1343, -1,1466, 1467, 1345, -1,1467, + 1466, 1704, -1,1468, 1467, 1705, -1,1467, 1468, 1346, -1,1465, 1703, 1466, -1,1465, + 1466, 1344, -1,1342, 1341, 1463, -1,1343, 1342, 1464, -1,1345, 1344, 1466, -1,1346, + 1345, 1467, -1,1343, 1465, 1344, -1,1346, 1468, 1347, -1,1463, 1341, 1462, -1,1462, + 1700, 1463, -1,1468, 1706, 1469, -1,1469, 1706, 1470, -1,1470, 1706, 1707, -1,1708, + 1471, 1707, -1,1472, 1708, 1709, -1,1473, 1709, 1710, -1,1474, 1710, 1711, -1,1470, + 1471, 1348, -1,1471, 1470, 1707, -1,1472, 1471, 1708, -1,1471, 1472, 1349, -1,1473, + 1474, 1351, -1,1474, 1473, 1710, -1,1475, 1474, 1711, -1,1474, 1475, 1352, -1,1472, + 1709, 1473, -1,1472, 1473, 1350, -1,1711, 1712, 1475, -1,1469, 1470, 1347, -1,1712, + 1713, 1476, -1,1476, 1713, 1477, -1,1477, 1714, 1715, -1,1478, 1715, 1716, -1,1477, + 1713, 1714, -1,1717, 1480, 1718, -1,1716, 1718, 1479, -1,1719, 1481, 1717, -1,1482, + 1719, 1720, -1,1483, 1720, 1721, -1,1484, 1721, 1364, -1,1712, 1476, 1475, -1,1475, + 1476, 1353, -1,1347, 1470, 1348, -1,1348, 1471, 1349, -1,1350, 1473, 1351, -1,1350, + 1349, 1472, -1,1478, 1477, 1715, -1,1356, 1477, 1478, -1,1476, 1477, 1354, -1,1351, + 1474, 1352, -1,1352, 1475, 1353, -1,1355, 1354, 1477, -1,1356, 1355, 1477, -1,1476, + 1354, 1353, -1,1478, 1357, 1356, -1,1479, 1480, 1358, -1,1480, 1479, 1718, -1,1481, + 1480, 1717, -1,1480, 1481, 1359, -1,1482, 1483, 1361, -1,1483, 1482, 1720, -1,1484, + 1483, 1721, -1,1483, 1484, 1362, -1,1481, 1719, 1482, -1,1481, 1482, 1360, -1,1358, + 1357, 1479, -1,1359, 1358, 1480, -1,1361, 1360, 1482, -1,1363, 1362, 1484, -1,1361, + 1483, 1362, -1,1359, 1481, 1360, -1,1484, 1364, 1363, -1,1479, 1357, 1478, -1,1478, + 1716, 1479, -1,1469, 1347, 1468, -1,1722, 1723, 1485, -1,1485, 1488, 1489, -1,1488, + 1485, 1723, -1,1723, 1724, 1488, -1,1722, 1485, 1365, -1,1488, 1724, 1491, -1,1494, + 1725, 1726, -1,1497, 1726, 1727, -1,1491, 1724, 1725, -1,1500, 1727, 1728, -1,1485, + 1486, 1365, -1,1488, 1491, 1489, -1,1486, 1489, 1490, -1,1486, 1485, 1489, -1,1491, + 1492, 1489, -1,1365, 1486, 1366, -1,1494, 1497, 1495, -1,1497, 1494, 1726, -1,1494, + 1495, 1492, -1,1498, 1495, 1497, -1,1500, 1501, 1497, -1,1492, 1495, 1496, -1,1497, + 1727, 1500, -1,1494, 1492, 1491, -1,1491, 1725, 1494, -1,1489, 1492, 1493, -1,1728, + 1503, 1500, -1,1509, 1729, 1730, -1,1731, 1732, 1506, -1,1732, 1729, 1506, -1,1512, + 1730, 1733, -1,1518, 1734, 1735, -1,1736, 1521, 1735, -1,1515, 1733, 1734, -1,1524, + 1736, 1737, -1,1504, 1500, 1503, -1,1506, 1503, 1731, -1,1510, 1506, 1509, -1,1512, + 1509, 1730, -1,1515, 1512, 1733, -1,1513, 1509, 1512, -1,1506, 1729, 1509, -1,1507, + 1503, 1506, -1,1519, 1515, 1518, -1,1521, 1518, 1735, -1,1525, 1521, 1524, -1,1527, + 1524, 1737, -1,1738, 1530, 1527, -1,1528, 1524, 1527, -1,1521, 1736, 1524, -1,1522, + 1518, 1521, -1,1515, 1734, 1518, -1,1516, 1512, 1515, -1,1527, 1737, 1738, -1,1731, + 1503, 1728, -1,1531, 1527, 1530, -1,1366, 1487, 1367, -1,1487, 1486, 1490, -1,1490, + 1493, 1368, -1,1493, 1490, 1489, -1,1487, 1366, 1486, -1,1487, 1490, 1368, -1,1496, + 1498, 1499, -1,1501, 1498, 1497, -1,1504, 1505, 1501, -1,1498, 1501, 1502, -1,1507, + 1504, 1503, -1,1508, 1504, 1507, -1,1501, 1500, 1504, -1,1496, 1493, 1492, -1,1495, + 1498, 1496, -1,1493, 1496, 1369, -1,1487, 1368, 1367, -1,1496, 1499, 1369, -1,1368, + 1493, 1369, -1,1499, 1370, 1369, -1,1502, 1505, 1370, -1,1505, 1502, 1501, -1,1505, + 1371, 1370, -1,1371, 1505, 1508, -1,1371, 1508, 1511, -1,1505, 1504, 1508, -1,1502, + 1370, 1499, -1,1499, 1498, 1502, -1,1507, 1510, 1508, -1,1510, 1513, 1511, -1,1513, + 1510, 1509, -1,1516, 1517, 1513, -1,1513, 1514, 1511, -1,1513, 1512, 1516, -1,1510, + 1511, 1508, -1,1520, 1516, 1519, -1,1522, 1519, 1518, -1,1526, 1522, 1525, -1,1528, + 1525, 1524, -1,1531, 1528, 1527, -1,1529, 1525, 1528, -1,1522, 1521, 1525, -1,1523, + 1519, 1522, -1,1516, 1515, 1519, -1,1532, 1528, 1531, -1,1514, 1517, 1372, -1,1517, + 1514, 1513, -1,1517, 1373, 1372, -1,1373, 1517, 1520, -1,1373, 1520, 1523, -1,1517, + 1516, 1520, -1,1514, 1372, 1511, -1,1523, 1526, 1374, -1,1526, 1523, 1522, -1,1375, + 1374, 1529, -1,1529, 1374, 1526, -1,1532, 1529, 1528, -1,1375, 1529, 1532, -1,1526, + 1525, 1529, -1,1523, 1374, 1373, -1,1520, 1519, 1523, -1,1531, 1534, 1532, -1,1511, + 1372, 1371, -1,1507, 1506, 1510, -1,1530, 1533, 1531, -1,1738, 1739, 1533, -1,1740, + 1536, 1739, -1,1739, 1536, 1533, -1,1533, 1534, 1531, -1,1741, 1742, 1542, -1,1548, + 1743, 1744, -1,1743, 1545, 1742, -1,1740, 1741, 1539, -1,1551, 1744, 1745, -1,1536, + 1539, 1537, -1,1539, 1536, 1740, -1,1534, 1537, 1538, -1,1537, 1534, 1536, -1,1539, + 1540, 1537, -1,1536, 1534, 1533, -1,1540, 1542, 1543, -1,1545, 1542, 1742, -1,1548, + 1549, 1545, -1,1542, 1545, 1546, -1,1551, 1548, 1744, -1,1551, 1552, 1548, -1,1545, + 1743, 1548, -1,1542, 1540, 1539, -1,1539, 1741, 1542, -1,1537, 1540, 1541, -1,1745, + 1554, 1551, -1,1535, 1532, 1534, -1,1560, 1746, 1747, -1,1566, 1748, 1749, -1,1563, + 1747, 1748, -1,1572, 1750, 1751, -1,1751, 1752, 1575, -1,1749, 1750, 1569, -1,1575, + 1752, 1385, -1,1753, 1754, 1554, -1,1555, 1551, 1554, -1,1557, 1554, 1754, -1,1557, + 1754, 1746, -1,1558, 1554, 1557, -1,1560, 1557, 1746, -1,1753, 1554, 1745, -1,1564, + 1560, 1563, -1,1560, 1747, 1563, -1,1570, 1566, 1569, -1,1566, 1749, 1569, -1,1569, + 1750, 1572, -1,1573, 1569, 1572, -1,1748, 1566, 1563, -1,1567, 1563, 1566, -1,1751, + 1575, 1572, -1,1561, 1557, 1560, -1,1576, 1572, 1575, -1,1534, 1538, 1535, -1,1540, + 1543, 1541, -1,1538, 1541, 1376, -1,1538, 1537, 1541, -1,1541, 1543, 1544, -1,1535, + 1538, 1376, -1,1547, 1543, 1546, -1,1549, 1546, 1545, -1,1553, 1549, 1552, -1,1555, + 1552, 1551, -1,1558, 1555, 1554, -1,1556, 1552, 1555, -1,1549, 1548, 1552, -1,1550, + 1546, 1549, -1,1543, 1542, 1546, -1,1556, 1555, 1558, -1,1544, 1547, 1377, -1,1547, + 1544, 1543, -1,1375, 1535, 1376, -1,1376, 1541, 1377, -1,1547, 1378, 1377, -1,1541, + 1544, 1377, -1,1550, 1553, 1378, -1,1553, 1550, 1549, -1,1553, 1379, 1378, -1,1379, + 1553, 1556, -1,1559, 1379, 1556, -1,1553, 1552, 1556, -1,1550, 1378, 1547, -1,1547, + 1546, 1550, -1,1556, 1558, 1559, -1,1375, 1532, 1535, -1,1559, 1561, 1562, -1,1564, + 1561, 1560, -1,1567, 1568, 1564, -1,1561, 1564, 1565, -1,1564, 1563, 1567, -1,1561, + 1559, 1558, -1,1574, 1570, 1573, -1,1573, 1570, 1569, -1,1576, 1385, 1384, -1,1385, + 1576, 1575, -1,1573, 1576, 1577, -1,1573, 1572, 1576, -1,1571, 1567, 1570, -1,1567, + 1566, 1570, -1,1576, 1384, 1577, -1,1562, 1565, 1380, -1,1565, 1562, 1561, -1,1565, + 1381, 1380, -1,1381, 1565, 1568, -1,1381, 1568, 1571, -1,1565, 1564, 1568, -1,1562, + 1380, 1559, -1,1571, 1574, 1382, -1,1574, 1571, 1570, -1,1382, 1577, 1383, -1,1577, + 1382, 1574, -1,1383, 1577, 1384, -1,1574, 1573, 1577, -1,1571, 1382, 1381, -1,1568, + 1567, 1571, -1,1559, 1380, 1379, -1,1558, 1557, 1561, -1,1530, 1738, 1533, -1,1389, + 1388, 1578, -1,1390, 1578, 1755, -1,1578, 1390, 1389, -1,1579, 1755, 1578, -1,1578, + 1388, 1579, -1,1579, 1387, 1580, -1,1580, 1387, 1386, -1,1579, 1756, 1755, -1,1756, + 1580, 1757, -1,1580, 1756, 1579, -1,1757, 1580, 1386, -1,1579, 1388, 1387, -1,1399, + 1398, 1581, -1,1402, 1400, 1399, -1,1399, 1581, 1402, -1,1400, 1402, 1401, -1,1584, + 1582, 1581, -1,1402, 1581, 1582, -1,1581, 1398, 1584, -1,1587, 1397, 1396, -1,1590, + 1396, 1395, -1,1582, 1584, 1585, -1,1587, 1584, 1397, -1,1590, 1587, 1396, -1,1588, + 1584, 1587, -1,1395, 1394, 1590, -1,1397, 1584, 1398, -1,1588, 1587, 1590, -1,1582, + 1583, 1402, -1,1583, 1582, 1585, -1,1405, 1583, 1586, -1,1402, 1583, 1403, -1,1403, + 1405, 1404, -1,1405, 1403, 1583, -1,1583, 1585, 1586, -1,1586, 1588, 1589, -1,1588, + 1586, 1585, -1,1589, 1588, 1591, -1,1586, 1589, 1406, -1,1407, 1406, 1589, -1,1408, + 1407, 1589, -1,1589, 1592, 1408, -1,1586, 1406, 1405, -1,1585, 1584, 1588, -1,1591, + 1588, 1590, -1,1593, 1394, 1393, -1,1596, 1393, 1392, -1,1594, 1591, 1593, -1,1591, + 1590, 1593, -1,1596, 1593, 1393, -1,1596, 1597, 1593, -1,1392, 1599, 1596, -1,1593, + 1590, 1394, -1,1758, 1391, 1413, -1,1599, 1391, 1758, -1,1413, 1759, 1758, -1,1391, + 1599, 1392, -1,1600, 1596, 1599, -1,1595, 1592, 1594, -1,1594, 1592, 1591, -1,1597, + 1594, 1593, -1,1595, 1594, 1597, -1,1409, 1595, 1410, -1,1595, 1409, 1592, -1,1598, + 1410, 1595, -1,1595, 1597, 1598, -1,1592, 1409, 1408, -1,1601, 1598, 1600, -1,1600, + 1598, 1597, -1,1758, 1600, 1599, -1,1601, 1600, 1758, -1,1411, 1601, 1760, -1,1601, + 1411, 1598, -1,1760, 1412, 1411, -1,1601, 1758, 1760, -1,1598, 1411, 1410, -1,1597, + 1596, 1600, -1,1591, 1592, 1589, -1,1761, 1762, 1602, -1,1603, 1602, 1762, -1,1761, + 1602, 1763, -1,1603, 1762, 1764, -1,1604, 1764, 1765, -1,1605, 1604, 1765, -1,1602, + 1766, 1763, -1,1766, 1602, 1603, -1,1766, 1603, 1767, -1,1767, 1604, 1768, -1,1604, + 1767, 1603, -1,1605, 1768, 1604, -1,1603, 1764, 1604, -1,1605, 1765, 1769, -1,1605, + 1770, 1606, -1,1770, 1605, 1769, -1,1606, 1770, 1771, -1,1605, 1606, 1772, -1,1606, + 1771, 1607, -1,1607, 1771, 1773, -1,1608, 1773, 1414, -1,1774, 1605, 1772, -1,1772, + 1606, 1775, -1,1607, 1608, 1776, -1,1608, 1607, 1773, -1,1777, 1776, 1608, -1,1608, + 1414, 1777, -1,1607, 1776, 1775, -1,1607, 1775, 1606, -1,1605, 1774, 1768, -1,1777, + 1778, 1779, -1,1778, 1777, 1780, -1,1778, 1781, 1782, -1,1781, 1778, 1780, -1,1783, + 1416, 1415, -1,1416, 1783, 1784, -1,1416, 1785, 1786, -1,1785, 1416, 1784, -1,1787, + 1788, 1609, -1,1789, 1609, 1790, -1,1609, 1789, 1787, -1,1610, 1790, 1609, -1,1609, + 1788, 1610, -1,1610, 1791, 1611, -1,1611, 1791, 1792, -1,1610, 1793, 1790, -1,1793, + 1611, 1794, -1,1611, 1793, 1610, -1,1794, 1611, 1792, -1,1610, 1788, 1791, -1,1419, + 1795, 1796, -1,1797, 1795, 1419, -1,1798, 1799, 1419, -1,1799, 1797, 1419, -1,1800, + 1798, 1419, -1,1419, 1796, 1801, -1,1423, 1802, 1424, -1,1423, 1422, 1801, -1,1420, + 1419, 1801, -1,1422, 1421, 1801, -1,1420, 1801, 1421, -1,1423, 1801, 1802, -1,1800, + 1419, 1803, -1,1803, 1418, 1804, -1,1418, 1803, 1419, -1,1804, 1418, 1417, -1,1417, + 1448, 1804, -1,1804, 1447, 1805, -1,1448, 1447, 1804, -1,1805, 1447, 1446, -1,1805, + 1445, 1806, -1,1445, 1805, 1446, -1,1806, 1444, 1443, -1,1444, 1806, 1445, -1,1443, + 1807, 1806, -1,1807, 1443, 1442, -1,1442, 1808, 1807, -1,1442, 1441, 1808, -1,1424, + 1802, 1425, -1,1426, 1425, 1809, -1,1809, 1425, 1802, -1,1426, 1809, 1810, -1,1426, + 1810, 1427, -1,1428, 1811, 1429, -1,1811, 1428, 1427, -1,1810, 1811, 1427, -1,1429, + 1812, 1430, -1,1812, 1429, 1811, -1,1430, 1812, 1813, -1,1431, 1813, 1814, -1,1813, + 1431, 1430, -1,1432, 1814, 1433, -1,1814, 1432, 1431, -1,1815, 1439, 1438, -1,1816, + 1438, 1437, -1,1815, 1438, 1816, -1,1441, 1817, 1808, -1,1817, 1441, 1440, -1,1439, + 1817, 1440, -1,1817, 1439, 1815, -1,1434, 1818, 1435, -1,1818, 1434, 1819, -1,1433, + 1819, 1434, -1,1819, 1433, 1814, -1,1437, 1436, 1820, -1,1820, 1435, 1818, -1,1435, + 1820, 1436, -1,1437, 1820, 1816, -1,1821, 1822, 1453, -1,1612, 1823, 1821, -1,1616, + 1615, 1612, -1,1615, 1823, 1612, -1,1615, 1618, 1824, -1,1825, 1824, 1618, -1,1615, + 1824, 1823, -1,1619, 1618, 1615, -1,1612, 1821, 1453, -1,1621, 1826, 1825, -1,1627, + 1827, 1828, -1,1624, 1828, 1826, -1,1625, 1624, 1621, -1,1624, 1826, 1621, -1,1829, + 1827, 1630, -1,1828, 1624, 1627, -1,1627, 1630, 1827, -1,1628, 1627, 1624, -1,1618, + 1621, 1825, -1,1622, 1621, 1618, -1,1613, 1453, 1452, -1,1617, 1616, 1613, -1,1612, + 1453, 1613, -1,1612, 1613, 1616, -1,1614, 1613, 1452, -1,1617, 1614, 1451, -1,1452, + 1451, 1614, -1,1620, 1619, 1617, -1,1613, 1614, 1617, -1,1617, 1619, 1616, -1,1620, + 1617, 1451, -1,1615, 1616, 1619, -1,1626, 1625, 1622, -1,1625, 1621, 1622, -1,1631, + 1628, 1629, -1,1624, 1625, 1628, -1,1622, 1618, 1619, -1,1629, 1628, 1625, -1,1622, + 1620, 1623, -1,1626, 1623, 1451, -1,1625, 1626, 1629, -1,1626, 1622, 1623, -1,1623, + 1620, 1451, -1,1631, 1630, 1628, -1,1619, 1620, 1622, -1,1628, 1630, 1627, -1,1629, + 1626, 1451, -1,1630, 1830, 1829, -1,1633, 1831, 1830, -1,1639, 1832, 1833, -1,1636, + 1833, 1831, -1,1633, 1631, 1634, -1,1633, 1630, 1631, -1,1636, 1633, 1637, -1,1833, + 1636, 1639, -1,1636, 1831, 1633, -1,1636, 1640, 1639, -1,1639, 1642, 1832, -1,1830, + 1630, 1633, -1,1645, 1834, 1835, -1,1449, 1836, 1837, -1,1648, 1837, 1834, -1,1646, + 1645, 1642, -1,1835, 1642, 1645, -1,1649, 1648, 1645, -1,1837, 1648, 1449, -1,1648, + 1834, 1645, -1,1643, 1642, 1639, -1,1832, 1642, 1835, -1,1449, 1648, 1649, -1,1634, + 1632, 1635, -1,1631, 1632, 1634, -1,1637, 1634, 1638, -1,1636, 1637, 1640, -1,1637, + 1633, 1634, -1,1640, 1637, 1641, -1,1638, 1635, 1451, -1,1632, 1451, 1635, -1,1451, + 1641, 1638, -1,1637, 1638, 1641, -1,1638, 1634, 1635, -1,1644, 1641, 1451, -1,1641, + 1643, 1640, -1,1629, 1451, 1632, -1,1647, 1646, 1643, -1,1642, 1643, 1646, -1,1650, + 1450, 1649, -1,1449, 1649, 1450, -1,1649, 1645, 1646, -1,1650, 1649, 1646, -1,1451, + 1647, 1644, -1,1643, 1644, 1647, -1,1647, 1451, 1650, -1,1450, 1650, 1451, -1,1650, + 1646, 1647, -1,1641, 1644, 1643, -1,1643, 1639, 1640, -1,1629, 1632, 1631, -1,1838, + 1839, 1840, -1,1651, 1841, 1838, -1,1655, 1654, 1651, -1,1654, 1841, 1651, -1,1654, + 1657, 1842, -1,1843, 1842, 1657, -1,1654, 1842, 1841, -1,1658, 1657, 1654, -1,1651, + 1838, 1840, -1,1660, 1844, 1843, -1,1666, 1845, 1846, -1,1663, 1846, 1844, -1,1664, + 1663, 1660, -1,1663, 1844, 1660, -1,1669, 1666, 1667, -1,1846, 1663, 1666, -1,1666, + 1669, 1845, -1,1667, 1666, 1663, -1,1657, 1660, 1843, -1,1661, 1660, 1657, -1,1652, + 1840, 1847, -1,1656, 1655, 1652, -1,1651, 1840, 1652, -1,1651, 1652, 1655, -1,1653, + 1652, 1847, -1,1656, 1653, 1848, -1,1847, 1848, 1653, -1,1659, 1658, 1656, -1,1652, + 1653, 1656, -1,1656, 1658, 1655, -1,1659, 1656, 1848, -1,1654, 1655, 1658, -1,1661, + 1659, 1662, -1,1658, 1659, 1661, -1,1664, 1661, 1665, -1,1664, 1660, 1661, -1,1658, + 1661, 1657, -1,1667, 1664, 1668, -1,1848, 1665, 1662, -1,1661, 1662, 1665, -1,1665, + 1848, 1668, -1,1668, 1848, 1671, -1,1668, 1664, 1665, -1,1659, 1848, 1662, -1,1667, + 1668, 1670, -1,1664, 1667, 1663, -1,1845, 1669, 1849, -1,1672, 1850, 1851, -1,1678, + 1852, 1853, -1,1675, 1853, 1850, -1,1672, 1669, 1673, -1,1851, 1669, 1672, -1,1678, + 1675, 1679, -1,1853, 1675, 1678, -1,1675, 1850, 1672, -1,1675, 1672, 1676, -1,1678, + 1681, 1852, -1,1849, 1669, 1851, -1,1684, 1854, 1855, -1,1856, 1857, 1858, -1,1687, + 1858, 1854, -1,1684, 1681, 1685, -1,1855, 1681, 1684, -1,1688, 1687, 1684, -1,1858, + 1687, 1856, -1,1687, 1854, 1684, -1,1682, 1681, 1678, -1,1852, 1681, 1855, -1,1688, + 1856, 1687, -1,1674, 1673, 1670, -1,1669, 1670, 1673, -1,1680, 1679, 1676, -1,1675, + 1676, 1679, -1,1676, 1672, 1673, -1,1677, 1676, 1673, -1,1674, 1848, 1677, -1,1670, + 1671, 1674, -1,1676, 1677, 1680, -1,1677, 1673, 1674, -1,1677, 1848, 1680, -1,1680, + 1682, 1679, -1,1668, 1671, 1670, -1,1686, 1685, 1682, -1,1681, 1682, 1685, -1,1689, + 1859, 1688, -1,1856, 1688, 1859, -1,1688, 1684, 1685, -1,1689, 1688, 1685, -1,1848, + 1686, 1683, -1,1682, 1683, 1686, -1,1686, 1848, 1689, -1,1859, 1689, 1848, -1,1689, + 1685, 1686, -1,1680, 1848, 1683, -1,1680, 1683, 1682, -1,1682, 1678, 1679, -1,1671, + 1848, 1674, -1,1667, 1670, 1669, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,1, 2, 3, -1, + 3, 2, 4, -1,5, 3, 6, -1,4, 6, 3, -1,3, 5, 1, -1,4, 2, 7, -1,8, 4, 9, -1,9, 4, 7, -1, + 8, 9, 10, -1,4, 9, 7, -1,9, 4, 8, -1,9, 8, 10, -1,10, 8, 10, -1,4, 7, 6, -1,11, 12, + 13, -1,14, 11, 15, -1,16, 13, 17, -1,17, 13, 12, -1,15, 18, 19, -1,13, 15, 11, -1, + 14, 15, 20, -1,21, 22, 19, -1,23, 22, 24, -1,20, 15, 23, -1,25, 21, 19, -1,26, 25, + 19, -1,15, 19, 23, -1,19, 22, 23, -1,18, 27, 19, -1,28, 29, 17, -1,30, 28, 31, -1, + 32, 33, 30, -1,33, 34, 35, -1,34, 33, 32, -1,32, 30, 31, -1,33, 36, 37, -1,36, 27, + 37, -1,36, 33, 35, -1,38, 26, 36, -1,36, 26, 27, -1,36, 35, 39, -1,26, 19, 27, -1, + 39, 40, 41, -1,38, 36, 41, -1,17, 29, 16, -1,41, 36, 39, -1,28, 30, 42, -1,29, 28, + 43, -1,28, 42, 43, -1,27, 18, 37, -1,44, 44, 44, -1,44, 44, 44, -1,45, 46, 47, -1, + 47, 48, 49, -1,47, 49, 45, -1,50, 50, 50, -1,50, 50, 50, -1,51, 52, 53, -1,53, 54, + 55, -1,53, 55, 51, -1,56, 56, 56, -1,56, 56, 56, -1,57, 58, 59, -1,60, 57, 59, -1, + 61, 62, 63, -1,64, 61, 59, -1,61, 60, 59, -1,62, 61, 64, -1,65, 66, 67, -1,66, 68, + 69, -1,65, 62, 64, -1,70, 66, 69, -1,67, 71, 72, -1,70, 67, 66, -1,67, 72, 65, -1, + 62, 65, 72, -1,62, 73, 74, -1,73, 62, 75, -1,76, 77, 75, -1,75, 78, 76, -1,75, 77, + 73, -1,75, 79, 78, -1,80, 81, 82, -1,72, 82, 81, -1,71, 71, 72, -1,80, 83, 81, -1, + 81, 83, 84, -1,75, 72, 81, -1,72, 75, 62, -1,74, 85, 62, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,56, 56, 56, -1, + 56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, + 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1, + 56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,87, 88, 89, -1,89, 90, + 87, -1,91, 89, 88, -1,92, 93, 94, -1,95, 94, 96, -1,97, 96, 94, -1,94, 95, 92, -1, + 94, 93, 97, -1,97, 98, 96, -1,99, 97, 100, -1,99, 100, 101, -1,98, 99, 102, -1,99, + 98, 97, -1,102, 99, 101, -1,97, 93, 100, -1,103, 104, 105, -1,106, 107, 108, -1,105, + 107, 103, -1,109, 103, 107, -1,107, 106, 109, -1,107, 105, 108, -1,110, 108, 105, -1, + 111, 108, 110, -1,111, 110, 112, -1,113, 111, 114, -1,111, 113, 108, -1,114, 111, + 115, -1,111, 112, 115, -1,108, 113, 106, -1,116, 117, 118, -1,119, 120, 118, -1,118, + 117, 119, -1,119, 121, 122, -1,121, 119, 117, -1,123, 122, 124, -1,122, 123, 119, -1, + 119, 123, 120, -1,125, 126, 127, -1,126, 125, 128, -1,126, 128, 129, -1,130, 126, + 129, -1,131, 127, 126, -1,130, 131, 126, -1,129, 128, 132, -1,133, 129, 134, -1,134, + 129, 132, -1,133, 134, 135, -1,136, 133, 137, -1,133, 136, 129, -1,133, 135, 137, -1, + 129, 136, 130, -1,138, 139, 140, -1,141, 140, 142, -1,143, 140, 139, -1,139, 144, + 143, -1,138, 140, 141, -1,142, 140, 143, -1,145, 146, 147, -1,146, 148, 147, -1,146, + 142, 149, -1,150, 148, 146, -1,146, 151, 150, -1,146, 145, 142, -1,145, 141, 142, -1, + 149, 142, 143, -1,152, 153, 143, -1,153, 152, 154, -1,153, 149, 143, -1,155, 154, + 152, -1,153, 154, 156, -1,149, 157, 158, -1,157, 149, 153, -1,158, 159, 150, -1,158, + 151, 149, -1,157, 156, 158, -1,149, 151, 146, -1,160, 160, 160, -1,157, 153, 156, -1, + 158, 150, 151, -1,143, 144, 152, -1,161, 162, 163, -1,163, 162, 164, -1,165, 163, + 166, -1,164, 166, 163, -1,163, 165, 161, -1,164, 162, 167, -1,168, 164, 169, -1,169, + 164, 167, -1,168, 169, 170, -1,164, 169, 167, -1,169, 164, 168, -1,169, 168, 170, -1, + 170, 168, 170, -1,164, 167, 166, -1,171, 171, 171, -1,171, 171, 171, -1,86, 86, 86, -1, + 86, 86, 86, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1, + 172, 172, 172, -1,173, 174, 175, -1,176, 177, 173, -1,177, 176, 178, -1,179, 176, + 175, -1,173, 175, 176, -1,180, 181, 179, -1,176, 179, 181, -1,181, 178, 176, -1,181, + 182, 178, -1,183, 184, 182, -1,185, 186, 187, -1,188, 181, 180, -1,185, 189, 183, -1, + 184, 183, 189, -1,187, 189, 185, -1,188, 185, 183, -1,181, 188, 183, -1,182, 181, + 183, -1,190, 190, 191, -1,191, 190, 192, -1,193, 191, 193, -1,193, 191, 192, -1,193, + 192, 191, -1,191, 192, 190, -1,194, 195, 196, -1,196, 197, 198, -1,198, 194, 196, -1, + 196, 199, 200, -1,199, 201, 200, -1,202, 203, 200, -1,201, 202, 200, -1,204, 200, + 203, -1,204, 196, 200, -1,199, 196, 195, -1,205, 206, 207, -1,206, 208, 207, -1,209, + 210, 211, -1,210, 209, 212, -1,213, 212, 209, -1,214, 207, 211, -1,210, 214, 211, -1, + 209, 215, 216, -1,211, 207, 208, -1,216, 217, 218, -1,216, 213, 209, -1,216, 215, + 217, -1,219, 220, 221, -1,222, 220, 217, -1,221, 220, 222, -1,215, 222, 217, -1,215, + 223, 222, -1,224, 225, 226, -1,227, 224, 226, -1,225, 228, 223, -1,228, 225, 224, -1, + 221, 228, 229, -1,228, 221, 222, -1,230, 226, 231, -1,232, 233, 234, -1,235, 236, + 237, -1,236, 238, 233, -1,239, 237, 240, -1,232, 241, 231, -1,242, 240, 243, -1,244, + 224, 227, -1,230, 227, 226, -1,241, 230, 231, -1,245, 227, 230, -1,234, 246, 241, -1, + 230, 241, 247, -1,238, 234, 233, -1,238, 248, 234, -1,241, 232, 234, -1,228, 224, + 249, -1,250, 238, 251, -1,235, 251, 236, -1,239, 235, 237, -1,252, 251, 235, -1,253, + 239, 254, -1,242, 254, 240, -1,255, 242, 243, -1,256, 254, 242, -1,239, 240, 254, -1, + 257, 235, 239, -1,238, 236, 251, -1,256, 242, 255, -1,243, 258, 255, -1,228, 222, + 223, -1,219, 221, 259, -1,260, 259, 261, -1,262, 261, 259, -1,261, 262, 263, -1,221, + 262, 259, -1,229, 249, 264, -1,249, 229, 228, -1,244, 249, 224, -1,249, 244, 264, -1, + 229, 264, 265, -1,266, 264, 244, -1,267, 244, 245, -1,265, 264, 268, -1,244, 227, + 245, -1,229, 265, 262, -1,221, 229, 262, -1,262, 265, 269, -1,260, 263, 270, -1,220, + 219, 271, -1,268, 269, 265, -1,259, 271, 219, -1,263, 262, 269, -1,217, 220, 218, -1, + 272, 273, 266, -1,273, 268, 264, -1,267, 266, 244, -1,274, 266, 267, -1,274, 272, + 266, -1,275, 274, 267, -1,275, 267, 276, -1,266, 273, 264, -1,260, 261, 263, -1,267, + 245, 247, -1,247, 246, 277, -1,246, 247, 241, -1,248, 246, 234, -1,246, 248, 278, -1, + 276, 277, 279, -1,277, 276, 247, -1,278, 277, 246, -1,277, 278, 280, -1,248, 250, + 278, -1,247, 276, 267, -1,250, 252, 281, -1,252, 250, 251, -1,257, 252, 235, -1,281, + 252, 282, -1,253, 283, 257, -1,252, 257, 284, -1,256, 253, 254, -1,285, 253, 256, -1, + 257, 239, 253, -1,250, 281, 278, -1,248, 238, 250, -1,278, 281, 286, -1,278, 286, + 280, -1,280, 279, 277, -1,281, 287, 286, -1,287, 281, 288, -1,282, 289, 288, -1,288, + 281, 282, -1,284, 283, 290, -1,283, 284, 257, -1,285, 283, 253, -1,283, 285, 290, -1, + 290, 289, 284, -1,291, 290, 285, -1,292, 293, 294, -1,285, 256, 295, -1,284, 289, + 282, -1,282, 252, 284, -1,296, 297, 298, -1,285, 299, 291, -1,276, 279, 275, -1,245, + 230, 247, -1,300, 301, 302, -1,295, 256, 255, -1,303, 258, 304, -1,305, 304, 306, -1, + 305, 307, 304, -1,307, 308, 304, -1,309, 310, 311, -1,312, 313, 314, -1,309, 315, + 316, -1,317, 318, 319, -1,320, 295, 321, -1,295, 255, 321, -1,321, 258, 303, -1,320, + 321, 303, -1,299, 320, 322, -1,320, 299, 295, -1,323, 322, 320, -1,299, 322, 324, -1, + 320, 303, 323, -1,295, 299, 285, -1,317, 319, 313, -1,317, 313, 325, -1,317, 323, + 303, -1,322, 323, 326, -1,327, 323, 317, -1,325, 327, 317, -1,328, 323, 327, -1,313, + 329, 325, -1,317, 303, 308, -1,304, 308, 303, -1,325, 330, 327, -1,321, 255, 258, -1, + 329, 312, 331, -1,332, 331, 333, -1,331, 332, 329, -1,332, 333, 334, -1,335, 332, + 334, -1,329, 332, 336, -1,329, 337, 325, -1,329, 336, 337, -1,336, 332, 335, -1,336, + 335, 338, -1,339, 337, 336, -1,325, 337, 340, -1,336, 338, 339, -1,329, 313, 312, -1, + 328, 341, 326, -1,328, 326, 323, -1,330, 328, 327, -1,330, 342, 328, -1,343, 340, + 339, -1,339, 340, 337, -1,339, 338, 344, -1,330, 340, 345, -1,330, 325, 340, -1,344, + 346, 339, -1,347, 348, 349, -1,348, 347, 350, -1,344, 347, 346, -1,351, 347, 349, -1, + 326, 341, 352, -1,353, 322, 352, -1,354, 355, 293, -1,345, 342, 330, -1,341, 328, + 342, -1,322, 353, 324, -1,343, 339, 346, -1,343, 345, 340, -1,356, 357, 358, -1,317, + 308, 318, -1,346, 347, 351, -1,356, 351, 357, -1,358, 354, 356, -1,357, 351, 349, -1, + 319, 314, 313, -1,322, 326, 352, -1,292, 294, 296, -1,355, 354, 359, -1,359, 354, + 360, -1,301, 300, 361, -1,297, 362, 302, -1,363, 361, 364, -1,292, 296, 298, -1,297, + 302, 298, -1,365, 366, 306, -1,363, 301, 361, -1,309, 316, 310, -1,362, 300, 302, -1, + 367, 364, 368, -1,311, 365, 309, -1,369, 364, 367, -1,305, 306, 366, -1,369, 363, + 364, -1,366, 365, 311, -1,293, 356, 354, -1,299, 324, 291, -1,355, 294, 293, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,371, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,372, 371, 373, -1,374, 373, 375, -1,376, 373, 371, -1,372, + 373, 374, -1,377, 378, 379, -1,380, 377, 381, -1,379, 378, 374, -1,382, 379, 374, -1, + 381, 377, 379, -1,378, 372, 374, -1,383, 373, 376, -1,384, 381, 379, -1,382, 374, + 375, -1,375, 373, 383, -1,379, 382, 384, -1,385, 381, 386, -1,381, 384, 386, -1,383, + 376, 387, -1,388, 389, 390, -1,391, 392, 389, -1,393, 388, 390, -1,393, 380, 394, -1, + 390, 380, 393, -1,388, 391, 389, -1,395, 396, 394, -1,396, 393, 394, -1,397, 398, + 397, -1,399, 400, 401, -1,402, 403, 404, -1,86, 86, 86, -1,405, 403, 398, -1,406, + 399, 407, -1,408, 409, 400, -1,409, 410, 411, -1,398, 412, 405, -1,409, 401, 400, -1, + 398, 413, 412, -1,411, 414, 409, -1,415, 407, 399, -1,399, 401, 415, -1,415, 401, + 416, -1,407, 415, 416, -1,416, 401, 414, -1,405, 404, 403, -1,401, 409, 414, -1,397, + 397, 417, -1,418, 403, 402, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,402, + 406, 418, -1,419, 418, 406, -1,406, 407, 419, -1,86, 86, 86, -1,86, 86, 86, -1,86, + 86, 86, -1,420, 421, 422, -1,421, 420, 423, -1,420, 422, 424, -1,425, 426, 427, -1, + 426, 420, 427, -1,420, 424, 427, -1,428, 429, 430, -1,431, 429, 423, -1,429, 431, + 430, -1,423, 432, 431, -1,428, 430, 433, -1,429, 434, 423, -1,423, 434, 421, -1,435, + 436, 437, -1,438, 437, 439, -1,438, 435, 437, -1,440, 441, 438, -1,439, 440, 438, -1, + 437, 436, 442, -1,443, 442, 436, -1,436, 425, 443, -1,436, 426, 425, -1,444, 445, + 446, -1,432, 444, 447, -1,448, 447, 444, -1,449, 446, 445, -1,448, 444, 446, -1,445, + 450, 449, -1,451, 450, 452, -1,452, 453, 454, -1,455, 456, 453, -1,451, 452, 454, -1, + 457, 454, 453, -1,456, 457, 453, -1,450, 451, 449, -1,431, 432, 447, -1,370, 370, + 370, -1,370, 370, 370, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,458, 459, 460, -1,458, 460, 461, -1, + 462, 460, 459, -1,462, 459, 463, -1,461, 460, 464, -1,463, 465, 462, -1,465, 463, + 466, -1,465, 466, 467, -1,462, 465, 468, -1,468, 464, 462, -1,467, 468, 465, -1,462, + 464, 460, -1,469, 470, 471, -1,471, 470, 472, -1,473, 474, 471, -1,471, 475, 473, -1, + 472, 475, 471, -1,474, 469, 471, -1,472, 470, 476, -1,477, 472, 478, -1,478, 472, + 476, -1,477, 478, 479, -1,480, 475, 477, -1,477, 479, 480, -1,477, 475, 472, -1,481, + 482, 483, -1,484, 483, 485, -1,481, 483, 484, -1,486, 481, 487, -1,487, 488, 486, -1, + 489, 490, 488, -1,484, 487, 481, -1,484, 491, 487, -1,491, 484, 485, -1,491, 492, + 487, -1,487, 492, 489, -1,489, 493, 490, -1,493, 489, 494, -1,494, 495, 493, -1,489, + 492, 494, -1,487, 489, 488, -1,496, 497, 498, -1,499, 500, 501, -1,497, 499, 502, -1, + 503, 497, 502, -1,503, 498, 497, -1,504, 499, 501, -1,502, 499, 504, -1,505, 496, + 498, -1,501, 500, 506, -1,507, 508, 509, -1,508, 507, 500, -1,510, 507, 509, -1,511, + 512, 513, -1,506, 500, 507, -1,514, 515, 516, -1,510, 517, 507, -1,503, 502, 504, -1, + 518, 519, 520, -1,521, 505, 498, -1,514, 522, 515, -1,504, 501, 506, -1,506, 507, + 517, -1,498, 503, 521, -1,522, 523, 524, -1,523, 512, 525, -1,526, 527, 517, -1,514, + 523, 522, -1,512, 528, 525, -1,514, 519, 518, -1,514, 516, 519, -1,518, 520, 529, -1, + 527, 512, 517, -1,523, 530, 524, -1,529, 531, 518, -1,532, 533, 534, -1,534, 535, + 536, -1,537, 538, 535, -1,537, 539, 538, -1,540, 541, 518, -1,541, 540, 533, -1,532, + 536, 542, -1,536, 532, 534, -1,538, 536, 535, -1,536, 538, 542, -1,541, 533, 532, -1, + 541, 532, 543, -1,538, 539, 544, -1,533, 540, 531, -1,545, 546, 547, -1,544, 548, + 549, -1,550, 551, 552, -1,550, 553, 551, -1,541, 543, 518, -1,544, 549, 542, -1,549, + 554, 551, -1,542, 543, 532, -1,550, 555, 553, -1,538, 544, 542, -1,556, 553, 555, -1, + 546, 557, 547, -1,545, 558, 559, -1,560, 561, 562, -1,562, 563, 560, -1,553, 564, + 560, -1,545, 565, 546, -1,546, 560, 563, -1,513, 512, 527, -1,565, 545, 559, -1,528, + 512, 511, -1,517, 510, 526, -1,530, 523, 525, -1,540, 518, 531, -1,546, 563, 557, -1, + 560, 564, 566, -1,560, 566, 561, -1,564, 553, 567, -1,567, 553, 556, -1,551, 554, + 552, -1,554, 549, 548, -1,568, 569, 570, -1,571, 572, 573, -1,573, 572, 569, -1,573, + 574, 571, -1,575, 576, 570, -1,576, 568, 570, -1,577, 568, 576, -1,578, 573, 577, -1, + 568, 577, 573, -1,573, 578, 579, -1,568, 573, 569, -1,580, 571, 574, -1,581, 370, + 582, -1,370, 581, 370, -1,582, 583, 581, -1,584, 583, 582, -1,574, 579, 585, -1,573, + 579, 574, -1,580, 574, 586, -1,586, 574, 587, -1,585, 584, 587, -1,583, 584, 585, -1, + 574, 585, 587, -1,588, 589, 590, -1,589, 588, 591, -1,591, 592, 589, -1,593, 591, + 588, -1,594, 595, 596, -1,595, 594, 597, -1,594, 596, 598, -1,597, 594, 599, -1,598, + 599, 594, -1,596, 600, 598, -1,601, 602, 603, -1,596, 601, 600, -1,596, 595, 602, -1, + 601, 604, 600, -1,604, 601, 603, -1,602, 601, 596, -1,605, 606, 607, -1,608, 607, + 609, -1,606, 610, 607, -1,610, 611, 612, -1,609, 607, 612, -1,609, 608, 608, -1,612, + 607, 610, -1,613, 614, 615, -1,616, 615, 617, -1,613, 615, 618, -1,616, 618, 615, -1, + 615, 614, 617, -1,619, 620, 621, -1,617, 622, 616, -1,622, 617, 621, -1,621, 623, + 622, -1,623, 621, 620, -1,617, 619, 621, -1,619, 617, 614, -1,624, 625, 626, -1,624, + 627, 628, -1,627, 624, 626, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, + 0, -1,0, 0, 0, -1,0, 0, 0, -1,86, 86, 86, -1,86, 86, 86, -1,172, 172, 172, -1,172, + 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1, + 172, 172, 172, -1,629, 630, 631, -1,632, 629, 631, -1,632, 633, 634, -1,629, 632, + 634, -1,635, 635, 635, -1,635, 635, 635, -1,172, 172, 172, -1,172, 172, 172, -1,172, + 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1, + 370, 370, 370, -1,370, 370, 370, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1, + 56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 56, 56, -1,56, 636, + 637, -1,637, 636, 636, -1,637, 636, 56, -1,56, 56, 56, -1,56, 56, 56, -1,637, 56, + 56, -1,56, 56, 637, -1,56, 637, 56, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,638, 638, 639, -1,639, + 638, 640, -1,641, 639, 641, -1,641, 639, 640, -1,641, 640, 639, -1,639, 640, 638, -1, + 642, 642, 642, -1,642, 642, 642, -1,643, 644, 645, -1,644, 646, 645, -1,647, 648, + 645, -1,648, 647, 649, -1,646, 647, 645, -1,643, 645, 648, -1,650, 643, 648, -1,650, + 649, 651, -1,651, 652, 650, -1,650, 652, 653, -1,643, 650, 654, -1,653, 655, 654, -1, + 650, 653, 654, -1,650, 648, 649, -1,656, 657, 658, -1,656, 659, 660, -1,659, 656, + 658, -1,657, 661, 658, -1,659, 658, 662, -1,663, 664, 662, -1,663, 665, 666, -1,665, + 662, 658, -1,663, 667, 664, -1,668, 667, 663, -1,666, 665, 661, -1,665, 663, 662, -1, + 658, 661, 665, -1,657, 669, 661, -1,661, 669, 666, -1,669, 657, 670, -1,669, 670, + 671, -1,672, 666, 669, -1,669, 671, 672, -1,673, 672, 671, -1,674, 668, 675, -1,672, + 668, 666, -1,674, 676, 668, -1,668, 672, 675, -1,668, 676, 667, -1,675, 677, 674, -1, + 672, 673, 675, -1,673, 677, 675, -1,666, 668, 663, -1,678, 679, 680, -1,680, 679, + 681, -1,678, 682, 683, -1,684, 682, 680, -1,682, 678, 680, -1,680, 681, 684, -1,685, + 686, 687, -1,685, 687, 688, -1,689, 684, 685, -1,684, 689, 682, -1,685, 684, 686, -1, + 689, 685, 690, -1,690, 685, 688, -1,686, 684, 681, -1,691, 692, 693, -1,691, 694, + 692, -1,692, 695, 693, -1,696, 697, 698, -1,693, 698, 699, -1,698, 693, 696, -1,693, + 699, 691, -1,696, 693, 695, -1,700, 701, 702, -1,703, 702, 701, -1,703, 701, 704, -1, + 705, 706, 707, -1,708, 706, 709, -1,710, 709, 706, -1,706, 708, 707, -1,706, 705, + 710, -1,710, 711, 709, -1,712, 710, 713, -1,712, 713, 714, -1,711, 712, 715, -1,712, + 711, 710, -1,715, 712, 714, -1,710, 705, 713, -1,370, 370, 370, -1,370, 370, 370, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 716, 716, 716, -1,716, 716, 716, -1,717, 718, 719, -1,718, 720, 721, -1,721, 720, + 722, -1,717, 717, 719, -1,723, 724, 721, -1,721, 724, 719, -1,718, 721, 719, -1,721, + 722, 725, -1,725, 722, 726, -1,726, 722, 727, -1,726, 727, 728, -1,729, 728, 729, -1, + 723, 726, 730, -1,726, 723, 725, -1,731, 730, 726, -1,731, 726, 728, -1,728, 729, + 731, -1,725, 723, 721, -1,732, 733, 734, -1,735, 734, 736, -1,734, 735, 732, -1,737, + 736, 734, -1,734, 733, 737, -1,738, 737, 739, -1,739, 737, 733, -1,738, 739, 740, -1, + 741, 738, 742, -1,738, 741, 737, -1,742, 738, 740, -1,737, 741, 736, -1,743, 744, + 745, -1,746, 743, 747, -1,744, 743, 748, -1,747, 743, 745, -1,749, 750, 751, -1,370, + 370, 370, -1,745, 752, 753, -1,753, 747, 745, -1,754, 748, 743, -1,755, 754, 751, -1, + 743, 746, 754, -1,751, 756, 755, -1,756, 751, 750, -1,757, 758, 751, -1,751, 754, + 757, -1,749, 751, 758, -1,746, 757, 754, -1,755, 748, 754, -1,759, 760, 761, -1,762, + 760, 763, -1,763, 764, 762, -1,765, 764, 763, -1,760, 759, 763, -1,763, 759, 766, -1, + 766, 767, 768, -1,763, 768, 765, -1,763, 766, 768, -1,769, 765, 770, -1,771, 765, + 769, -1,772, 770, 773, -1,773, 770, 774, -1,769, 770, 772, -1,775, 776, 777, -1,776, + 775, 778, -1,779, 776, 778, -1,778, 780, 779, -1,781, 775, 782, -1,782, 783, 781, -1, + 784, 782, 775, -1,775, 777, 784, -1,785, 786, 780, -1,787, 785, 780, -1,785, 787, + 788, -1,786, 779, 780, -1,789, 790, 787, -1,789, 791, 783, -1,791, 789, 787, -1,790, + 788, 787, -1,792, 793, 794, -1,792, 795, 796, -1,793, 792, 796, -1,797, 798, 799, -1, + 800, 801, 802, -1,797, 799, 803, -1,802, 799, 800, -1,802, 804, 805, -1,800, 799, + 798, -1,805, 799, 802, -1,806, 807, 808, -1,803, 808, 797, -1,806, 809, 807, -1,808, + 803, 806, -1,806, 805, 810, -1,805, 806, 803, -1,811, 810, 812, -1,810, 811, 806, -1, + 810, 805, 813, -1,806, 811, 809, -1,803, 799, 805, -1,804, 802, 801, -1,804, 814, + 815, -1,816, 810, 813, -1,817, 813, 804, -1,815, 814, 818, -1,814, 804, 801, -1,817, + 804, 815, -1,813, 817, 816, -1,812, 816, 819, -1,812, 810, 816, -1,820, 816, 817, -1, + 821, 819, 816, -1,820, 821, 816, -1,813, 805, 804, -1,822, 823, 824, -1,822, 825, + 826, -1,824, 825, 822, -1,823, 822, 827, -1,827, 822, 826, -1,827, 828, 823, -1,829, + 830, 828, -1,831, 830, 829, -1,827, 826, 829, -1,826, 832, 829, -1,831, 829, 832, -1, + 828, 827, 829, -1,833, 834, 835, -1,835, 836, 833, -1,835, 834, 837, -1,835, 838, + 839, -1,838, 835, 837, -1,840, 839, 841, -1,839, 840, 835, -1,838, 842, 839, -1,835, + 840, 836, -1,836, 840, 843, -1,843, 840, 844, -1,844, 845, 843, -1,846, 845, 844, -1, + 847, 846, 848, -1,847, 845, 846, -1,849, 846, 841, -1,846, 844, 841, -1,844, 840, + 841, -1,841, 839, 850, -1,851, 850, 842, -1,852, 853, 854, -1,853, 850, 851, -1,849, + 841, 850, -1,855, 848, 849, -1,848, 856, 847, -1,857, 856, 848, -1,849, 850, 852, -1, + 848, 846, 849, -1,855, 857, 848, -1,855, 849, 852, -1,850, 853, 852, -1,839, 842, + 850, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,172, 172, 172, -1,858, + 859, 860, -1,858, 860, 861, -1,862, 862, 863, -1,864, 861, 860, -1,863, 864, 860, -1, + 865, 866, 867, -1,863, 860, 867, -1,868, 867, 866, -1,869, 867, 868, -1,869, 870, + 867, -1,867, 870, 863, -1,870, 871, 863, -1,872, 873, 871, -1,871, 870, 874, -1,872, + 875, 876, -1,872, 871, 877, -1,876, 873, 872, -1,874, 877, 871, -1,862, 862, 870, -1, + 870, 862, 874, -1,877, 878, 879, -1,878, 877, 880, -1,877, 874, 880, -1,879, 881, + 877, -1,862, 863, 871, -1,882, 883, 884, -1,883, 882, 885, -1,885, 886, 883, -1,886, + 885, 887, -1,883, 886, 888, -1,883, 889, 884, -1,889, 883, 888, -1,886, 890, 888, -1, + 891, 887, 892, -1,891, 892, 893, -1,890, 891, 894, -1,890, 886, 891, -1,894, 891, + 893, -1,891, 886, 887, -1,895, 895, 896, -1,895, 895, 897, -1,898, 899, 900, -1,899, + 898, 901, -1,901, 902, 899, -1,902, 901, 903, -1,899, 902, 904, -1,899, 905, 900, -1, + 905, 899, 904, -1,902, 906, 904, -1,907, 906, 902, -1,907, 903, 908, -1,907, 908, + 909, -1,906, 907, 910, -1,907, 909, 910, -1,907, 902, 903, -1,911, 911, 911, -1,912, + 913, 914, -1,915, 916, 912, -1,914, 915, 912, -1,913, 917, 914, -1,912, 916, 918, -1, + 919, 920, 921, -1,922, 919, 912, -1,912, 918, 922, -1,923, 917, 924, -1,923, 924, + 925, -1,924, 917, 926, -1,925, 924, 927, -1,917, 913, 926, -1,928, 929, 930, -1,927, + 924, 931, -1,932, 933, 929, -1,930, 931, 924, -1,921, 920, 933, -1,928, 930, 924, -1, + 932, 929, 928, -1,922, 920, 919, -1,934, 935, 936, -1,934, 937, 938, -1,935, 934, + 938, -1,936, 939, 940, -1,940, 941, 934, -1,86, 940, 942, -1,940, 934, 936, -1,940, + 939, 942, -1,943, 944, 945, -1,946, 944, 943, -1,947, 947, 947, -1,948, 943, 949, -1, + 946, 943, 948, -1,950, 951, 952, -1,953, 952, 954, -1,950, 952, 955, -1,956, 955, + 957, -1,957, 955, 952, -1,952, 953, 957, -1,952, 951, 958, -1,954, 959, 953, -1,952, + 958, 954, -1,960, 961, 962, -1,963, 964, 965, -1,966, 962, 967, -1,968, 962, 961, -1, + 960, 962, 966, -1,963, 969, 970, -1,971, 972, 973, -1,963, 974, 969, -1,973, 972, + 960, -1,960, 966, 973, -1,962, 968, 975, -1,963, 975, 976, -1,975, 967, 962, -1,976, + 977, 963, -1,964, 963, 977, -1,975, 970, 967, -1,970, 975, 963, -1,974, 965, 978, -1, + 975, 968, 976, -1,963, 965, 974, -1,979, 980, 981, -1,981, 980, 982, -1,983, 980, + 370, -1,984, 980, 983, -1,985, 981, 982, -1,986, 987, 981, -1,981, 985, 986, -1,982, + 980, 984, -1,988, 988, 988, -1,989, 990, 991, -1,992, 993, 991, -1,992, 991, 990, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1, + 370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, + 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,370, + 370, 370, -1,370, 370, 370, -1,370, 370, 370, -1,994, 995, 996, -1,995, 997, 998, -1, + 999, 1000, 1001, -1,1000, 1002, 1003, -1,997, 999, 1004, -1,996, 998, 1005, -1,998, + 996, 995, -1,1004, 998, 997, -1,998, 1004, 1006, -1,1001, 1003, 1007, -1,1003, 1001, + 1000, -1,1008, 1003, 1002, -1,1003, 1008, 1009, -1,1004, 999, 1001, -1,1004, 1001, + 1010, -1,1002, 1011, 1008, -1,994, 996, 1012, -1,1011, 1013, 1014, -1,1014, 1013, + 1015, -1,1015, 1016, 1017, -1,1018, 1017, 1019, -1,1015, 1013, 1016, -1,1020, 1021, + 1022, -1,1019, 1022, 1023, -1,1024, 1025, 1020, -1,1026, 1024, 1027, -1,1028, 1027, + 1029, -1,1030, 1029, 1031, -1,1011, 1014, 1008, -1,1008, 1014, 1032, -1,1012, 996, + 1005, -1,1005, 998, 1006, -1,1010, 1001, 1007, -1,1010, 1006, 1004, -1,1018, 1015, + 1017, -1,1033, 1015, 1018, -1,1014, 1015, 1034, -1,1007, 1003, 1009, -1,1009, 1008, + 1032, -1,1035, 1034, 1015, -1,1033, 1035, 1015, -1,1014, 1034, 1032, -1,1018, 1036, + 1033, -1,1023, 1021, 1037, -1,1021, 1023, 1022, -1,1025, 1021, 1020, -1,1021, 1025, + 1038, -1,1026, 1028, 1039, -1,1028, 1026, 1027, -1,1030, 1028, 1029, -1,1028, 1030, + 1040, -1,1025, 1024, 1026, -1,1025, 1026, 1041, -1,1037, 1036, 1023, -1,1038, 1037, + 1021, -1,1039, 1041, 1026, -1,1040, 1039, 1028, -1,1038, 1025, 1041, -1,1040, 1030, + 1042, -1,1023, 1036, 1018, -1,1018, 1019, 1023, -1,1030, 1031, 1043, -1,1043, 1031, + 1044, -1,1044, 1031, 1045, -1,1046, 1047, 1045, -1,1048, 1046, 1049, -1,1050, 1049, + 1051, -1,1052, 1051, 1053, -1,1044, 1047, 1054, -1,1047, 1044, 1045, -1,1048, 1047, + 1046, -1,1047, 1048, 1055, -1,1050, 1052, 1056, -1,1052, 1050, 1051, -1,1057, 1052, + 1053, -1,1052, 1057, 1058, -1,1048, 1049, 1050, -1,1048, 1050, 1059, -1,1053, 1060, + 1057, -1,1043, 1044, 1042, -1,1060, 1061, 1062, -1,1062, 1061, 1063, -1,1063, 1064, + 1065, -1,1066, 1065, 1067, -1,1063, 1061, 1064, -1,1068, 1069, 1070, -1,1067, 1070, + 1071, -1,1072, 1073, 1068, -1,1074, 1072, 1075, -1,1076, 1075, 1077, -1,1078, 1077, + 1079, -1,1060, 1062, 1057, -1,1057, 1062, 1080, -1,1042, 1044, 1054, -1,1054, 1047, + 1055, -1,1059, 1050, 1056, -1,1059, 1055, 1048, -1,1066, 1063, 1065, -1,1081, 1063, + 1066, -1,1062, 1063, 1082, -1,1056, 1052, 1058, -1,1058, 1057, 1080, -1,1083, 1082, + 1063, -1,1081, 1083, 1063, -1,1062, 1082, 1080, -1,1066, 1084, 1081, -1,1071, 1069, + 1085, -1,1069, 1071, 1070, -1,1073, 1069, 1068, -1,1069, 1073, 1086, -1,1074, 1076, + 1087, -1,1076, 1074, 1075, -1,1078, 1076, 1077, -1,1076, 1078, 1088, -1,1073, 1072, + 1074, -1,1073, 1074, 1089, -1,1085, 1084, 1071, -1,1086, 1085, 1069, -1,1087, 1089, + 1074, -1,1090, 1088, 1078, -1,1087, 1076, 1088, -1,1086, 1073, 1089, -1,1078, 1079, + 1090, -1,1071, 1084, 1066, -1,1066, 1067, 1071, -1,1043, 1042, 1030, -1,1091, 1092, + 1093, -1,1093, 1094, 1095, -1,1094, 1093, 1092, -1,1092, 1096, 1094, -1,1091, 1093, + 1097, -1,1094, 1096, 1098, -1,1099, 1100, 1101, -1,1102, 1101, 1103, -1,1098, 1096, + 1100, -1,1104, 1103, 1105, -1,1093, 1106, 1097, -1,1094, 1098, 1095, -1,1106, 1095, + 1107, -1,1106, 1093, 1095, -1,1098, 1108, 1095, -1,1097, 1106, 1109, -1,1099, 1102, + 1110, -1,1102, 1099, 1101, -1,1099, 1110, 1108, -1,1111, 1110, 1102, -1,1104, 1112, + 1102, -1,1108, 1110, 1113, -1,1102, 1103, 1104, -1,1099, 1108, 1098, -1,1098, 1100, + 1099, -1,1095, 1108, 1114, -1,1105, 1115, 1104, -1,1116, 1117, 1118, -1,1119, 1120, + 1121, -1,1120, 1117, 1121, -1,1122, 1118, 1123, -1,1124, 1125, 1126, -1,1127, 1128, + 1126, -1,1129, 1123, 1125, -1,1130, 1127, 1131, -1,1132, 1104, 1115, -1,1121, 1115, + 1119, -1,1133, 1121, 1116, -1,1122, 1116, 1118, -1,1129, 1122, 1123, -1,1134, 1116, + 1122, -1,1121, 1117, 1116, -1,1135, 1115, 1121, -1,1136, 1129, 1124, -1,1128, 1124, + 1126, -1,1137, 1128, 1130, -1,1138, 1130, 1131, -1,1139, 1140, 1138, -1,1141, 1130, + 1138, -1,1128, 1127, 1130, -1,1142, 1124, 1128, -1,1129, 1125, 1124, -1,1143, 1122, + 1129, -1,1138, 1131, 1139, -1,1119, 1115, 1105, -1,1144, 1138, 1140, -1,1109, 1145, + 1146, -1,1145, 1106, 1107, -1,1107, 1114, 1147, -1,1114, 1107, 1095, -1,1145, 1109, + 1106, -1,1145, 1107, 1147, -1,1113, 1111, 1148, -1,1112, 1111, 1102, -1,1132, 1149, + 1112, -1,1111, 1112, 1150, -1,1135, 1132, 1115, -1,1151, 1132, 1135, -1,1112, 1104, + 1132, -1,1113, 1114, 1108, -1,1110, 1111, 1113, -1,1114, 1113, 1152, -1,1145, 1147, + 1146, -1,1113, 1148, 1152, -1,1147, 1114, 1152, -1,1148, 1153, 1152, -1,1150, 1149, + 1153, -1,1149, 1150, 1112, -1,1149, 1154, 1153, -1,1154, 1149, 1151, -1,1154, 1151, + 1155, -1,1149, 1132, 1151, -1,1150, 1153, 1148, -1,1148, 1111, 1150, -1,1135, 1133, + 1151, -1,1133, 1134, 1155, -1,1134, 1133, 1116, -1,1143, 1156, 1134, -1,1134, 1157, + 1155, -1,1134, 1122, 1143, -1,1133, 1155, 1151, -1,1158, 1143, 1136, -1,1142, 1136, + 1124, -1,1159, 1142, 1137, -1,1141, 1137, 1130, -1,1144, 1141, 1138, -1,1160, 1137, + 1141, -1,1142, 1128, 1137, -1,1161, 1136, 1142, -1,1143, 1129, 1136, -1,1162, 1141, + 1144, -1,1157, 1156, 1163, -1,1156, 1157, 1134, -1,1156, 1164, 1163, -1,1164, 1156, + 1158, -1,1164, 1158, 1161, -1,1156, 1143, 1158, -1,1157, 1163, 1155, -1,1161, 1159, + 1165, -1,1159, 1161, 1142, -1,1166, 1165, 1160, -1,1160, 1165, 1159, -1,1162, 1160, + 1141, -1,1166, 1160, 1162, -1,1159, 1137, 1160, -1,1161, 1165, 1164, -1,1158, 1136, + 1161, -1,1144, 1167, 1162, -1,1155, 1163, 1154, -1,1135, 1121, 1133, -1,1140, 1168, + 1144, -1,1139, 1169, 1168, -1,1170, 1171, 1169, -1,1169, 1171, 1168, -1,1168, 1167, + 1144, -1,1172, 1173, 1174, -1,1175, 1176, 1177, -1,1176, 1178, 1173, -1,1170, 1172, + 1179, -1,1180, 1177, 1181, -1,1171, 1179, 1182, -1,1179, 1171, 1170, -1,1167, 1182, + 1183, -1,1182, 1167, 1171, -1,1179, 1184, 1182, -1,1171, 1167, 1168, -1,1184, 1174, + 1185, -1,1178, 1174, 1173, -1,1175, 1186, 1178, -1,1174, 1178, 1187, -1,1180, 1175, + 1177, -1,1180, 1188, 1175, -1,1178, 1176, 1175, -1,1174, 1184, 1179, -1,1179, 1172, + 1174, -1,1182, 1184, 1189, -1,1181, 1190, 1180, -1,1191, 1162, 1167, -1,1192, 1193, + 1194, -1,1195, 1196, 1197, -1,1198, 1194, 1196, -1,1199, 1200, 1201, -1,1201, 1202, + 1203, -1,1197, 1200, 1204, -1,1203, 1202, 1205, -1,1206, 1207, 1190, -1,1208, 1180, + 1190, -1,1209, 1190, 1207, -1,1209, 1207, 1193, -1,1210, 1190, 1209, -1,1192, 1209, + 1193, -1,1206, 1190, 1181, -1,1211, 1192, 1198, -1,1192, 1194, 1198, -1,1212, 1195, + 1204, -1,1195, 1197, 1204, -1,1204, 1200, 1199, -1,1213, 1204, 1199, -1,1196, 1195, + 1198, -1,1214, 1198, 1195, -1,1201, 1203, 1199, -1,1215, 1209, 1192, -1,1216, 1199, + 1203, -1,1167, 1183, 1191, -1,1184, 1185, 1189, -1,1183, 1189, 1217, -1,1183, 1182, + 1189, -1,1189, 1185, 1218, -1,1191, 1183, 1217, -1,1219, 1185, 1187, -1,1186, 1187, + 1178, -1,1220, 1186, 1188, -1,1208, 1188, 1180, -1,1210, 1208, 1190, -1,1221, 1188, + 1208, -1,1186, 1175, 1188, -1,1222, 1187, 1186, -1,1185, 1174, 1187, -1,1221, 1208, + 1210, -1,1218, 1219, 1223, -1,1219, 1218, 1185, -1,1166, 1191, 1217, -1,1217, 1189, + 1223, -1,1219, 1224, 1223, -1,1189, 1218, 1223, -1,1222, 1220, 1224, -1,1220, 1222, + 1186, -1,1220, 1225, 1224, -1,1225, 1220, 1221, -1,1226, 1225, 1221, -1,1220, 1188, + 1221, -1,1222, 1224, 1219, -1,1219, 1187, 1222, -1,1221, 1210, 1226, -1,1166, 1162, + 1191, -1,1226, 1215, 1227, -1,1211, 1215, 1192, -1,1214, 1228, 1211, -1,1215, 1211, + 1229, -1,1211, 1198, 1214, -1,1215, 1226, 1210, -1,1230, 1212, 1213, -1,1213, 1212, + 1204, -1,1216, 1205, 1231, -1,1205, 1216, 1203, -1,1213, 1216, 1232, -1,1213, 1199, + 1216, -1,1233, 1214, 1212, -1,1214, 1195, 1212, -1,1216, 1231, 1232, -1,1227, 1229, + 1234, -1,1229, 1227, 1215, -1,1229, 1235, 1234, -1,1235, 1229, 1228, -1,1235, 1228, + 1233, -1,1229, 1211, 1228, -1,1227, 1234, 1226, -1,1233, 1230, 1236, -1,1230, 1233, + 1212, -1,1236, 1232, 1237, -1,1232, 1236, 1230, -1,1237, 1232, 1231, -1,1230, 1213, + 1232, -1,1233, 1236, 1235, -1,1228, 1214, 1233, -1,1226, 1234, 1225, -1,1210, 1209, + 1215, -1,1140, 1139, 1168, -1,1238, 1239, 1240, -1,1241, 1240, 1242, -1,1240, 1241, + 1238, -1,1243, 1242, 1240, -1,1240, 1239, 1243, -1,1243, 1244, 1245, -1,1245, 1244, + 1246, -1,1243, 1247, 1242, -1,1247, 1245, 1248, -1,1245, 1247, 1243, -1,1248, 1245, + 1246, -1,1243, 1239, 1244, -1,1249, 1250, 1251, -1,1252, 1253, 1249, -1,1249, 1251, + 1252, -1,1253, 1252, 1254, -1,1255, 1256, 1251, -1,1252, 1251, 1256, -1,1251, 1250, + 1255, -1,1257, 1258, 1259, -1,1260, 1259, 1261, -1,1256, 1255, 1262, -1,1257, 1255, + 1258, -1,1260, 1257, 1259, -1,1263, 1255, 1257, -1,1261, 1264, 1260, -1,1258, 1255, + 1250, -1,1263, 1257, 1260, -1,1256, 1265, 1252, -1,1265, 1256, 1262, -1,1266, 1265, + 1267, -1,1252, 1265, 1268, -1,1268, 1266, 1269, -1,1266, 1268, 1265, -1,1265, 1262, + 1267, -1,1267, 1263, 1270, -1,1263, 1267, 1262, -1,1270, 1263, 1271, -1,1267, 1270, + 1272, -1,1273, 1272, 1270, -1,1274, 1273, 1270, -1,1270, 1275, 1274, -1,1267, 1272, + 1266, -1,1262, 1255, 1263, -1,1271, 1263, 1260, -1,1276, 1264, 1277, -1,1278, 1277, + 1279, -1,1280, 1271, 1276, -1,1271, 1260, 1276, -1,1278, 1276, 1277, -1,1278, 1281, + 1276, -1,1279, 1282, 1278, -1,1276, 1260, 1264, -1,1283, 1284, 1285, -1,1282, 1284, + 1283, -1,1285, 1286, 1283, -1,1284, 1282, 1279, -1,1287, 1278, 1282, -1,1288, 1275, + 1280, -1,1280, 1275, 1271, -1,1281, 1280, 1276, -1,1288, 1280, 1281, -1,1289, 1288, + 1290, -1,1288, 1289, 1275, -1,1291, 1290, 1288, -1,1288, 1281, 1291, -1,1275, 1289, + 1274, -1,1292, 1291, 1287, -1,1287, 1291, 1281, -1,1283, 1287, 1282, -1,1292, 1287, + 1283, -1,1293, 1292, 1294, -1,1292, 1293, 1291, -1,1294, 1295, 1293, -1,1292, 1283, + 1294, -1,1291, 1293, 1290, -1,1281, 1278, 1287, -1,1271, 1275, 1270, -1,1296, 1297, + 1298, -1,1299, 1298, 1297, -1,1296, 1298, 1300, -1,1299, 1297, 1301, -1,1302, 1301, + 1303, -1,1304, 1302, 1303, -1,1298, 1305, 1300, -1,1305, 1298, 1299, -1,1305, 1299, + 1306, -1,1306, 1302, 1307, -1,1302, 1306, 1299, -1,1304, 1307, 1302, -1,1299, 1301, + 1302, -1,1304, 1303, 1308, -1,1304, 1309, 1310, -1,1309, 1304, 1308, -1,1310, 1309, + 1311, -1,1304, 1310, 1312, -1,1310, 1311, 1313, -1,1313, 1311, 1314, -1,1315, 1314, + 1316, -1,1317, 1304, 1312, -1,1312, 1310, 1318, -1,1313, 1315, 1319, -1,1315, 1313, + 1314, -1,1320, 1319, 1315, -1,1315, 1316, 1320, -1,1313, 1319, 1318, -1,1313, 1318, + 1310, -1,1304, 1317, 1307, -1,1320, 1321, 1322, -1,1321, 1320, 1323, -1,1321, 1324, + 1325, -1,1324, 1321, 1323, -1,1326, 1327, 1326, -1,1327, 1326, 1328, -1,1327, 1329, + 56, -1,1329, 1327, 1328, -1,1330, 1331, 1332, -1,1333, 1332, 1334, -1,1332, 1333, + 1330, -1,1335, 1334, 1332, -1,1332, 1331, 1335, -1,1335, 1336, 1337, -1,1337, 1336, + 1338, -1,1335, 1339, 1334, -1,1339, 1337, 1340, -1,1337, 1339, 1335, -1,1340, 1337, + 1338, -1,1335, 1331, 1336, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 1341, -1,86, + 86, 86, -1,1341, 86, 86, -1,86, 86, 1341, -1,1341, 1342, 1343, -1,86, 1342, 1341, -1, + 1343, 1342, 86, -1,1343, 86, 86, -1,86, 1343, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, + 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1,86, 86, 86, -1, + 86, 86, 86, -1,1344, 1345, 1346, -1,1347, 1348, 1344, -1,1349, 1350, 1347, -1,1350, + 1348, 1347, -1,1350, 1351, 1352, -1,1353, 1352, 1351, -1,1350, 1352, 1348, -1,1354, + 1351, 1350, -1,1347, 1344, 1346, -1,1355, 1356, 1353, -1,1357, 1358, 1359, -1,1360, + 1359, 1356, -1,1361, 1360, 1355, -1,1360, 1356, 1355, -1,1362, 1358, 1363, -1,1359, + 1360, 1357, -1,1357, 1363, 1358, -1,1364, 1357, 1360, -1,1351, 1355, 1353, -1,1365, + 1355, 1351, -1,1366, 1346, 1367, -1,1368, 1349, 1366, -1,1347, 1346, 1366, -1,1347, + 1366, 1349, -1,1369, 1366, 1367, -1,1368, 1369, 1370, -1,1367, 1370, 1369, -1,1371, + 1354, 1368, -1,1366, 1369, 1368, -1,1368, 1354, 1349, -1,1371, 1368, 1370, -1,1350, + 1349, 1354, -1,1372, 1361, 1365, -1,1361, 1355, 1365, -1,1373, 1364, 1374, -1,1360, + 1361, 1364, -1,1365, 1351, 1354, -1,1374, 1364, 1361, -1,1365, 1371, 1375, -1,1372, + 1375, 1370, -1,1361, 1372, 1374, -1,1372, 1365, 1375, -1,1375, 1371, 1370, -1,1373, + 1363, 1364, -1,1354, 1371, 1365, -1,1364, 1363, 1357, -1,1374, 1372, 1370, -1,1363, + 1376, 1362, -1,1377, 1378, 1376, -1,1379, 1380, 1381, -1,1382, 1381, 1378, -1,1377, + 1373, 1383, -1,1377, 1363, 1373, -1,1382, 1377, 1384, -1,1381, 1382, 1379, -1,1382, + 1378, 1377, -1,1382, 1385, 1379, -1,1379, 1386, 1380, -1,1376, 1363, 1377, -1,1387, + 1388, 1389, -1,1390, 1391, 1392, -1,1393, 1392, 1388, -1,1394, 1387, 1386, -1,1389, + 1386, 1387, -1,1395, 1393, 1387, -1,1392, 1393, 1390, -1,1393, 1388, 1387, -1,1396, + 1386, 1379, -1,1380, 1386, 1389, -1,1390, 1393, 1395, -1,1383, 1397, 1398, -1,1373, + 1397, 1383, -1,1384, 1383, 1399, -1,1382, 1384, 1385, -1,1384, 1377, 1383, -1,1385, + 1384, 1400, -1,1399, 1398, 1370, -1,1397, 1370, 1398, -1,1370, 1400, 1399, -1,1384, + 1399, 1400, -1,1399, 1383, 1398, -1,1401, 1400, 1370, -1,1400, 1396, 1385, -1,1374, + 1370, 1397, -1,1402, 1394, 1396, -1,1386, 1396, 1394, -1,1403, 1404, 1395, -1,1390, + 1395, 1404, -1,1395, 1387, 1394, -1,1403, 1395, 1394, -1,1370, 1402, 1401, -1,1396, + 1401, 1402, -1,1402, 1370, 1403, -1,1404, 1403, 1370, -1,1403, 1394, 1402, -1,1400, + 1401, 1396, -1,1396, 1379, 1385, -1,1374, 1397, 1373, -1,1405, 1406, 1407, -1,1408, + 1409, 1405, -1,1410, 1411, 1408, -1,1411, 1409, 1408, -1,1411, 1412, 1413, -1,1414, + 1413, 1412, -1,1411, 1413, 1409, -1,1415, 1412, 1411, -1,1408, 1405, 1407, -1,1416, + 1417, 1414, -1,1418, 1419, 1420, -1,1421, 1420, 1417, -1,1422, 1421, 1416, -1,1421, + 1417, 1416, -1,1423, 1418, 1424, -1,1420, 1421, 1418, -1,1418, 1423, 1419, -1,1424, + 1418, 1421, -1,1412, 1416, 1414, -1,1425, 1416, 1412, -1,1426, 1407, 1427, -1,1428, + 1410, 1426, -1,1408, 1407, 1426, -1,1408, 1426, 1410, -1,1429, 1426, 1427, -1,1428, + 1429, 1430, -1,1427, 1430, 1429, -1,1431, 1415, 1428, -1,1426, 1429, 1428, -1,1428, + 1415, 1410, -1,1431, 1428, 1430, -1,1411, 1410, 1415, -1,1425, 1431, 1432, -1,1415, + 1431, 1425, -1,1422, 1425, 1433, -1,1422, 1416, 1425, -1,1415, 1425, 1412, -1,1424, + 1422, 1434, -1,1430, 1433, 1432, -1,1425, 1432, 1433, -1,1433, 1430, 1434, -1,1434, + 1430, 1435, -1,1434, 1422, 1433, -1,1431, 1430, 1432, -1,1424, 1434, 1436, -1,1422, + 1424, 1421, -1,1419, 1423, 1437, -1,1438, 1439, 1440, -1,1441, 1442, 1443, -1,1444, + 1443, 1439, -1,1438, 1423, 1445, -1,1440, 1423, 1438, -1,1441, 1444, 1446, -1,1443, + 1444, 1441, -1,1444, 1439, 1438, -1,1444, 1438, 1447, -1,1441, 1448, 1442, -1,1437, + 1423, 1440, -1,1449, 1450, 1451, -1,1452, 1453, 1454, -1,1455, 1454, 1450, -1,1449, + 1448, 1456, -1,1451, 1448, 1449, -1,1457, 1455, 1449, -1,1454, 1455, 1452, -1,1455, + 1450, 1449, -1,1458, 1448, 1441, -1,1442, 1448, 1451, -1,1457, 1452, 1455, -1,1459, + 1445, 1436, -1,1423, 1436, 1445, -1,1460, 1446, 1447, -1,1444, 1447, 1446, -1,1447, + 1438, 1445, -1,1461, 1447, 1445, -1,1459, 1430, 1461, -1,1436, 1435, 1459, -1,1447, + 1461, 1460, -1,1461, 1445, 1459, -1,1461, 1430, 1460, -1,1460, 1458, 1446, -1,1434, + 1435, 1436, -1,1462, 1456, 1458, -1,1448, 1458, 1456, -1,1463, 1464, 1457, -1,1452, + 1457, 1464, -1,1457, 1449, 1456, -1,1463, 1457, 1456, -1,1430, 1462, 1465, -1,1458, + 1465, 1462, -1,1462, 1430, 1463, -1,1464, 1463, 1430, -1,1463, 1456, 1462, -1,1460, + 1430, 1465, -1,1460, 1465, 1458, -1,1458, 1441, 1446, -1,1435, 1430, 1459, -1,1424, + 1436, 1423, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link4.wrl b/examples/rlsg/mitsubishi-rv6sl/link4.wrl new file mode 100644 index 00000000..205c68d1 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link4.wrl @@ -0,0 +1,4063 @@ +#VRML V2.0 utf8 + +DEF link4 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.749020 0.749020 0.698039 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 4259 + 0.060013 -0.215027 0.0495, 0.060013 -0.215027 0.034485, 0.056503 -0.215027 0.034485, 0.056505 -0.215027 -0.028503, + 0.060015 -0.215027 -0.028503, 0.060013 -0.215027 -0.04248, -0.060013 -0.215027 -0.04248, -0.060013 -0.215027 0.0495, + 0.054916 -0.072388 0.036926, 0.05574 -0.084534 0.036926, 0.056503 -0.096741 0.036987, 0.056564 -0.097778 0.036865, + 0.056595 -0.098633 0.03656, 0.056656 -0.099609 0.035828, 0.056717 -0.100403 0.035034, 0.056719 -0.100403 -0.029541, + 0.056658 -0.099609 -0.030334, 0.056597 -0.098633 -0.031067, 0.056566 -0.097778 -0.031372, 0.056505 -0.096741 -0.031494, + 0.055742 -0.084534 -0.031433, 0.054918 -0.072388 -0.031433, 0.054916 -0.072388 -0.037903, 0.050797 -0.023254 -0.037781, + 0.048264 0.001282 -0.037659, 0.045425 0.025757 -0.037598, 0.045425 0.025757 -0.04248, 0.051804 -0.034241 -0.04248, + 0.056351 -0.094421 -0.04248, 0.059097 -0.154663 -0.04248, 0.060013 -0.215027 -0.04248, 0.059952 -0.199524 -0.033508, + 0.059769 -0.184021 -0.038513, 0.058762 -0.144531 -0.038513, 0.056992 -0.105103 -0.038513, 0.056992 -0.105103 -0.037109, + 0.056961 -0.104736 -0.039001, 0.0569 -0.103638 -0.040649, 0.056808 -0.102051 -0.041748, 0.056686 -0.100098 -0.042114, + 0.056076 -0.089966 -0.042114, 0.055435 -0.079834 -0.042175, 0.055283 -0.077942 -0.041809, 0.055191 -0.076294 -0.04071, + 0.055099 -0.075195 -0.039063, 0.055069 -0.074829 -0.03717, 0.055069 -0.074829 -0.036804, 0.055099 -0.075195 -0.034912, + 0.055191 -0.076294 -0.033325, 0.055283 -0.077942 -0.032227, 0.055437 -0.079834 -0.03186, 0.056078 -0.089966 -0.03186, + 0.056688 -0.100098 -0.03186, 0.056808 -0.102051 -0.032288, 0.0569 -0.103638 -0.033325, 0.056961 -0.104736 -0.034973, + 0.056992 -0.105103 -0.036865, 0.056992 -0.105103 0.042908, 0.056961 -0.104736 0.040955, 0.0569 -0.103638 0.039368, + 0.056808 -0.102051 0.038269, 0.056686 -0.100098 0.037903, 0.056076 -0.089966 0.037842, 0.055435 -0.079834 0.037842, + 0.055283 -0.077942 0.038208, 0.055191 -0.076294 0.039307, 0.055099 -0.075195 0.040894, 0.055069 -0.074829 0.042847, + 0.055069 -0.074829 0.043152, 0.055099 -0.075195 0.045105, 0.055191 -0.076294 0.046692, 0.055283 -0.077942 0.047791, + 0.055435 -0.079834 0.048157, 0.056076 -0.089966 0.048157, 0.056686 -0.100098 0.048096, 0.056808 -0.102051 0.047729, + 0.0569 -0.103638 0.046631, 0.056961 -0.104736 0.045044, 0.056992 -0.105103 0.043091, 0.056992 -0.105103 0.044495, + 0.058762 -0.144531 0.044495, 0.059769 -0.184021 0.044495, 0.059952 -0.199524 0.03949, 0.060013 -0.215027 0.034485, + 0.059097 -0.154663 0.0495, 0.056351 -0.094421 0.0495, 0.051804 -0.034241 0.0495, 0.045425 0.025757 0.0495, + 0.045425 0.025757 0.043579, 0.050797 -0.023254 0.043762, 0.052994 -0.047791 0.043823, 0.054916 -0.072388 0.043945, + 0.048538 -0.088745 0.036682, 0.056503 -0.096741 0.036987, 0.054642 -0.071472 0.036926, 0.054367 -0.071167 0.036926, + 0.054001 -0.070862 0.036865, 0.02037 -0.049011 0.035706, 0.019882 -0.048767 0.035706, 0.019608 -0.048706 0.035706, + 0.019333 -0.048706 0.035706, -1.5e-005 -0.047974 0.034973, -1.5e-005 -0.085999 0.034973, 0.045853 -0.087585 0.036621, + 0.046585 -0.087708 0.036621, 0.047287 -0.087952 0.036682, 0.047989 -0.089294 0.036499, 0.047562 -0.089783 0.036072, + 0.047287 -0.090088 0.035461, 0.047195 -0.09021 0.034668, 0.056137 -0.099121 0.035034, 0.056259 -0.098999 0.035828, + 0.056412 -0.098816 0.036194, 0.056595 -0.098633 0.03656, 0.045822 -0.088379 0.036438, 0.045822 -0.088989 0.036011, + 0.045822 -0.089478 0.035339, 0.045853 -0.0896 0.034607, 0.046219 -0.089661 0.034607, 0.046555 -0.089783 0.034668, + 0.047195 -0.09021 0.034668, -1.5e-005 -0.088013 0.03302, 0.045853 -0.0896 0.034607, -1.5e-005 -0.086792 0.034851, + -1.5e-005 -0.087402 0.034424, -1.5e-005 -0.08783 0.033752, -1.3e-005 -0.088013 -0.027527, 0.045855 -0.0896 -0.029114, + 0.045853 -0.0896 0.034607, -1.3e-005 -0.085999 -0.02948, 0.045855 -0.087585 -0.031128, 0.045824 -0.088379 -0.030945, + 0.045824 -0.088989 -0.030518, 0.045824 -0.089478 -0.029846, 0.045855 -0.0896 -0.029114, -1.3e-005 -0.08783 -0.028259, + -1.3e-005 -0.087402 -0.028931, -1.3e-005 -0.086792 -0.029358, 0.056505 -0.096741 -0.031494, 0.04854 -0.088745 -0.031189, + 0.04796 -0.088318 -0.031189, 0.047289 -0.087952 -0.031128, 0.045855 -0.087585 -0.031128, -1.3e-005 -0.047974 -0.02948, + 0.019335 -0.048645 -0.030151, 0.019884 -0.048767 -0.030212, 0.020128 -0.048889 -0.030212, 0.020372 -0.049011 -0.030212, + 0.054003 -0.070862 -0.031372, 0.054644 -0.071472 -0.031433, 0.054827 -0.071899 -0.031433, 0.054918 -0.072388 -0.031433, + 0.056139 -0.099121 -0.02948, 0.047197 -0.09021 -0.029175, 0.047289 -0.090088 -0.029968, 0.047564 -0.089783 -0.030579, + 0.047991 -0.089294 -0.031006, 0.04854 -0.088745 -0.031189, 0.056414 -0.098816 -0.030701, 0.056261 -0.098999 -0.030334, + 0.056137 -0.099121 0.035034, 0.056139 -0.099121 -0.02948, 0.056536 -0.099731 -0.029541, 0.056658 -0.100098 -0.029541, + 0.056719 -0.100403 -0.029541, 0.056534 -0.099731 0.035034, 0.056351 -0.099426 0.035034, 0.056137 -0.099121 0.035034, + 0.045855 -0.0896 -0.029114, 0.046556 -0.089783 -0.029175, 0.046892 -0.089966 -0.029175, 0.047197 -0.09021 -0.029175, + -0.048536 -0.088745 -0.031189, -0.056501 -0.096741 -0.031494, -0.055738 -0.084534 -0.031433, -0.054914 -0.072388 -0.031433, + -0.05464 -0.071472 -0.031433, -0.054365 -0.071167 -0.031372, -0.053999 -0.070862 -0.031372, -0.020369 -0.049011 -0.030212, + -0.01988 -0.048767 -0.030212, -0.019606 -0.048706 -0.030212, -0.019361 -0.048645 -0.030151, -1.3e-005 -0.047974 -0.02948, + -0.045851 -0.087585 -0.031128, -0.046583 -0.087708 -0.031128, -0.047285 -0.087952 -0.031128, -0.048018 -0.089294 -0.031006, + -0.04756 -0.089783 -0.030579, -0.047285 -0.090088 -0.029968, -0.047194 -0.09021 -0.029175, -0.056135 -0.099121 -0.02948, + -0.056257 -0.098999 -0.030334, -0.05641 -0.098816 -0.030701, -0.056623 -0.098633 -0.031067, -0.056562 -0.097778 -0.031372, + -0.045851 -0.0896 -0.029114, -0.046217 -0.089661 -0.029114, -0.046583 -0.089783 -0.029175, -0.047194 -0.09021 -0.029175, + -0.04582 -0.088379 -0.030945, -0.04582 -0.088989 -0.030518, -0.04582 -0.089478 -0.029846, -0.045853 -0.0896 0.034607, + -0.046585 -0.089783 0.034668, -0.04689 -0.089966 0.034668, -0.047195 -0.09021 0.034668, -0.045851 -0.0896 -0.029114, + -1.3e-005 -0.088013 -0.027527, -0.045853 -0.0896 0.034607, -1.5e-005 -0.085999 0.034973, -0.045853 -0.087585 0.036621, + -0.045822 -0.088379 0.036438, -0.045822 -0.088989 0.036011, -0.045822 -0.089478 0.035339, -0.045853 -0.0896 0.034607, + -0.056503 -0.096741 0.036987, -0.048538 -0.088745 0.036682, -0.047958 -0.088318 0.036682, -0.047287 -0.087952 0.036682, + -0.045853 -0.087585 0.036621, -0.019363 -0.048706 0.035706, -0.019882 -0.048767 0.035706, -0.020126 -0.048889 0.035706, + -0.02037 -0.049011 0.035706, -0.054001 -0.070862 0.036865, -0.054642 -0.071472 0.036926, -0.054825 -0.071899 0.036926, + -0.054916 -0.072388 0.036926, -0.05574 -0.084534 0.036926, -0.056137 -0.099121 0.035034, -0.047195 -0.09021 0.034668, + -0.047287 -0.090088 0.035461, -0.047562 -0.089783 0.036072, -0.048019 -0.089294 0.036499, -0.048538 -0.088745 0.036682, + -0.056564 -0.097778 0.036865, -0.056625 -0.098633 0.03656, -0.056412 -0.098816 0.036194, -0.056259 -0.098999 0.035828, + -0.056715 -0.100403 -0.029541, -0.056532 -0.099731 -0.029541, -0.056379 -0.099426 -0.029541, -0.056135 -0.099121 -0.02948, + -0.056534 -0.099731 0.035034, -0.056656 -0.100098 0.035034, -0.056717 -0.100403 0.035034, -0.056654 -0.099609 -0.030334, + -0.056623 -0.098633 -0.031067, -0.056656 -0.099609 0.035828, -0.056625 -0.098633 0.03656, -0.054916 -0.072388 0.043945, + -0.050797 -0.023254 0.043762, -0.048264 0.001282 0.043701, -0.045456 0.025757 0.043579, -0.045456 0.025757 0.0495, + -0.051804 -0.034241 0.0495, -0.056351 -0.094421 0.0495, -0.059097 -0.154663 0.0495, -0.060013 -0.215027 0.0495, + -0.059097 -0.154663 -0.04248, -0.056351 -0.094421 -0.04248, -0.051804 -0.034241 -0.04248, -0.045456 0.025757 -0.04248, + -0.045456 0.025757 -0.037598, -0.050797 -0.023254 -0.037781, -0.052994 -0.047791 -0.037842, -0.054916 -0.072388 -0.037903, + -0.054914 -0.072388 -0.031433, -0.054001 -0.070862 0.043884, -0.054367 -0.071167 0.043884, -0.054642 -0.071472 0.043884, + -0.02037 -0.049011 0.035706, -0.02037 -0.049011 0.042725, -0.054001 -0.070862 0.043884, -0.019363 -0.048706 0.035706, + -0.019363 -0.048706 0.042664, -0.019608 -0.048706 0.042664, -0.019882 -0.048767 0.042725, -0.02037 -0.049011 0.042725, + -1.5e-005 -0.047974 0.041992, 0.019333 -0.048706 0.035706, 0.019333 -0.048706 0.042664, -1.5e-005 -0.047974 0.041992, + 0.02037 -0.049011 0.035706, 0.02037 -0.049011 0.042725, 0.020126 -0.048889 0.042725, 0.019882 -0.048767 0.042725, + 0.019333 -0.048706 0.042664, 0.054001 -0.070862 0.043884, 0.054825 -0.071899 0.043884, 0.054642 -0.071472 0.043884, + 0.054001 -0.070862 0.043884, 0.043839 0.030457 0.043518, 0.042374 0.03241 0.043457, 0.040482 0.034119 0.043396, + 0.034988 0.037659 0.043213, 0.02919 0.040649 0.04303, 0.016861 0.044922 0.042603, 0.022964 0.042114 0.042786, + 0.028641 0.038513 0.04303, 0.028641 0.031433 0.04303, 0.035355 0.02356 0.043213, 0.039505 0.015686 0.043396, + 0.041763 0.007874 0.043457, 0.042496 0 0.043457, 0.041763 -0.007874 0.043457, 0.039505 -0.015686 0.043396, + 0.035385 -0.02356 0.043213, 0.028641 -0.031433 0.04303, 0.028641 -0.038513 0.04303, 0.022049 -0.042664 0.042786, + 0.015091 -0.045593 0.042542, 0.007736 -0.047363 0.042297, -1.5e-005 -0.047974 0.041992, 0.040482 0.034119 0.0495, + 0.040482 0.034119 0.043396, 0.044876 0.028198 0.0495, 0.043839 0.030457 0.0495, 0.031204 0.039673 0.0495, + 0.021255 0.043701 0.0495, 0.010757 0.046143 0.0495, 1.5e-005 0.046997 0.0495, -0.010727 0.046143 0.0495, + -0.021225 0.043701 0.0495, -0.031235 0.039673 0.0495, -0.040512 0.034119 0.0495, -0.040512 0.034119 0.043396, + -0.02916 0.040649 0.04303, -0.023178 0.04303 0.042786, -0.016891 0.044922 0.042603, -0.016891 0.044922 0.04303, + -0.00853 0.046509 0.04303, 1.5e-005 0.046997 0.04303, 0.008499 0.046509 0.04303, 0.016861 0.044922 0.04303, + 0.016861 0.044922 0.042603, 0.016312 0.045044 -0.03656, 0.008133 0.046509 -0.038025, 1.5e-005 0.046997 -0.038513, + -0.008163 0.046509 -0.038025, -0.016342 0.045044 -0.03656, -0.022751 0.043213 -0.036804, -0.028915 0.040771 -0.036987, + -0.040512 0.034119 -0.037415, -0.040512 0.034119 -0.04248, -0.031235 0.039673 -0.04248, -0.021225 0.043701 -0.04248, + -0.010727 0.046143 -0.04248, 1.5e-005 0.046997 -0.04248, 0.010757 0.046143 -0.04248, 0.021255 0.043701 -0.04248, + 0.031204 0.039673 -0.04248, 0.040482 0.034119 -0.04248, 0.040482 0.034119 -0.037415, 0.034805 0.03772 -0.037231, + 0.028946 0.040771 -0.036987, -0.043869 0.030457 0.0495, -0.042343 0.032471 0.0495, -0.040512 0.034119 0.0495, + -0.044907 0.028259 0.043579, -0.043869 0.030457 0.043518, -0.007736 -0.047363 0.042297, -0.015091 -0.045593 0.042542, + -0.022049 -0.042664 0.042786, -0.028641 -0.038513 0.04303, -0.028641 -0.031433 0.04303, -0.035385 -0.02356 0.043213, + -0.039505 -0.015686 0.043396, -0.041763 -0.007874 0.043457, -0.042496 0 0.043457, -0.041794 0.007874 0.043457, + -0.039474 0.015686 0.043396, -0.035385 0.02356 0.043213, -0.02861 0.031433 0.04303, -0.02861 0.038513 0.04303, + -0.022995 0.042114 0.042786, -0.016891 0.044922 0.042603, -0.022995 0.042114 0.04303, -0.016891 0.044922 0.04303, + 0.022964 0.042114 0.04303, 0.028641 -0.038513 0.04303, 0.022141 -0.042603 0.04303, 0.015091 -0.045593 0.04303, + 0.007645 -0.047363 0.04303, -1.5e-005 -0.047974 0.04303, -0.007645 -0.047363 0.04303, -0.015091 -0.045593 0.04303, + -0.022141 -0.042603 0.04303, -0.028641 -0.038513 0.04303, 1.5e-005 0.04248 0.04303, 0.007828 0.041748 0.04303, + 0.015335 0.039612 0.04303, 0.022354 0.036133 0.04303, 0.028641 0.031433 0.04303, -0.022385 0.036133 0.04303, + -0.015366 0.039612 0.04303, -0.007797 0.041748 0.04303, 0.028641 -0.031433 0.04303, 0.022385 -0.036133 0.04303, + 0.015366 -0.039612 0.04303, 0.007797 -0.041748 0.04303, -1.5e-005 -0.04248 0.04303, -0.007828 -0.041748 0.04303, + -0.015366 -0.039612 0.04303, -0.022385 -0.036133 0.04303, -0.028641 -0.031433 0.04303, 1.5e-005 0.04248 0.044006, + 0.008316 0.041687 0.044006, 0.016251 0.039246 0.044006, 0.023636 0.035339 0.044006, 0.030045 0.030029 0.044006, + 0.035355 0.023621 0.044006, 0.039261 0.016235 0.044006, 0.041702 0.008301 0.044006, 0.042496 0 0.044006, + 0.041672 -0.008301 0.044006, 0.039261 -0.016235 0.044006, 0.035324 -0.023621 0.044006, 0.030045 -0.030029 0.044006, + 0.023605 -0.035339 0.044006, 0.016251 -0.039246 0.044006, 0.008286 -0.041687 0.044006, -1.5e-005 -0.04248 0.044006, + -1.5e-005 -0.04248 0.04303, -0.008286 -0.041687 0.044006, -0.016281 -0.039246 0.044006, -0.023605 -0.035339 0.044006, + -0.030045 -0.030029 0.044006, -0.035324 -0.023621 0.044006, -0.039261 -0.016235 0.044006, -0.041672 -0.008301 0.044006, + -0.042496 0 0.044006, -0.041672 0.008301 0.044006, -0.039291 0.016235 0.044006, -0.035324 0.023621 0.044006, + -0.030075 0.030029 0.044006, -0.023605 0.035339 0.044006, -0.016281 0.039246 0.044006, -0.008286 0.041687 0.044006, + 1.5e-005 0.04248 0.044006, 1.5e-005 0.044495 -0.036011, -1.5e-005 -0.036987 -0.036011, 0.006729 -0.036377 -0.036255, + 0.013626 -0.034424 -0.036499, 0.020248 -0.030945 -0.036682, 0.026169 -0.026184 -0.036926, 0.03096 -0.020264 -0.037109, + 0.034409 -0.013611 -0.037231, 0.036392 -0.006714 -0.037292, 0.037003 0 -0.037292, 0.036392 0.006714 -0.037292, + 0.034378 0.013611 -0.037231, 0.03096 0.020264 -0.037109, 0.026138 0.026184 -0.036926, 0.020218 0.030945 -0.036682, + 0.013626 0.034424 -0.036499, 0.006729 0.036377 -0.036255, 1.5e-005 0.036987 -0.036011, 1.5e-005 0.044495 -0.036011, + 0.043839 0.030457 -0.037537, 0.044876 0.028259 -0.037598, 0.045425 0.025757 -0.037598, 0.054642 -0.071472 -0.037903, + 0.054367 -0.071167 -0.037903, 0.054001 -0.070862 -0.037903, 0.02037 -0.049011 -0.036682, 0.019882 -0.048767 -0.036682, + 0.019608 -0.048706 -0.036682, 0.019333 -0.048706 -0.036682, -1.5e-005 -0.047974 -0.036011, -1.3e-005 -0.036987 -0.030029, + 0.007219 -0.036316 -0.030029, 0.014147 -0.03418 -0.030029, 0.020555 -0.030762 -0.030029, 0.026171 -0.026184 -0.030029, + 0.030779 -0.020569 -0.030029, 0.034197 -0.01416 -0.030029, 0.036303 -0.007202 -0.030029, 0.037004 0 -0.030029, + 0.036272 0.007202 -0.030029, 0.034197 0.01416 -0.030029, 0.030779 0.020569 -0.030029, 0.02614 0.026184 -0.030029, + 0.020586 0.030762 -0.030029, 0.014177 0.03418 -0.030029, 0.007219 0.036316 -0.030029, 1.7e-005 0.036987 -0.030029, + -1.5e-005 -0.036987 -0.036011, -0.006729 -0.036377 -0.036255, -0.013626 -0.034424 -0.036499, -0.020248 -0.030945 -0.036682, + -0.026169 -0.026184 -0.036926, -0.03096 -0.020264 -0.037109, -0.034409 -0.013611 -0.037231, -0.036392 -0.006714 -0.037292, + -0.037003 0 -0.037292, -0.036362 0.006714 -0.037292, -0.034409 0.013611 -0.037231, -0.030991 0.020264 -0.037109, + -0.026169 0.026184 -0.036926, -0.020248 0.030945 -0.036682, -0.013596 0.034424 -0.036499, -0.00676 0.036377 -0.036255, + 1.5e-005 0.036987 -0.036011, -0.007246 0.036316 -0.030029, -0.014143 0.03418 -0.030029, -0.020552 0.030762 -0.030029, + -0.026167 0.026184 -0.030029, -0.030745 0.020569 -0.030029, -0.034163 0.01416 -0.030029, -0.036299 0.007202 -0.030029, + -0.037001 0 -0.030029, -0.036299 -0.007202 -0.030029, -0.034193 -0.01416 -0.030029, -0.030775 -0.020569 -0.030029, + -0.026167 -0.026184 -0.030029, -0.020552 -0.030762 -0.030029, -0.014174 -0.03418 -0.030029, -0.007215 -0.036316 -0.030029, + -1.3e-005 -0.036987 -0.030029, -0.019363 -0.048706 -0.036682, -0.019882 -0.048767 -0.036682, -0.020126 -0.048889 -0.036682, + -0.02037 -0.049011 -0.036682, -0.054001 -0.070862 -0.037903, -0.054642 -0.071472 -0.037903, -0.054825 -0.071899 -0.037903, + -0.054916 -0.072388 -0.037903, -0.043869 0.030457 -0.037537, -0.042404 0.03241 -0.037476, -0.040512 0.034119 -0.037415, + -0.019361 -0.048645 -0.030151, -0.019363 -0.048706 -0.036682, -1.3e-005 -0.047974 -0.02948, -0.020369 -0.049011 -0.030212, + -0.02037 -0.049011 -0.036682, -0.054001 -0.070862 -0.037903, 0.019333 -0.048706 -0.036682, 0.019335 -0.048645 -0.030151, + 0.020372 -0.049011 -0.030212, 0.054001 -0.070862 -0.037903, 0.054003 -0.070862 -0.031372, -0.044907 0.028198 -0.04248, + -0.043869 0.030457 -0.04248, 0.045425 0.025757 -0.04248, 0.043839 0.030457 -0.04248, 0.042374 0.032471 -0.04248, + 0.040482 0.034119 -0.04248, 0.056505 -0.215027 -0.028503, 0.056503 -0.184021 -0.038513, 0.059769 -0.184021 -0.038513, + 0.056503 -0.184021 0.044495, 0.056503 -0.105103 0.044495, 0.056503 -0.105103 -0.038513, 0.056992 -0.105103 0.044495, + 0.056503 -0.105103 0.044495, 0.056992 -0.105103 0.043091, 0.060013 -0.10498 0.04303, 0.060013 -0.10498 0.042969, + 0.056992 -0.105103 0.042908, 0.060013 -0.10498 -0.036987, 0.060013 -0.10498 -0.036987, 0.056992 -0.105103 -0.037109, + 0.056503 -0.105103 -0.038513, 0.056686 -0.100098 0.048096, 0.060013 -0.099976 0.047974, 0.060013 -0.102051 0.047546, + 0.060013 -0.103516 0.046509, 0.060013 -0.104553 0.045044, 0.060013 -0.10498 0.04303, 0.055435 -0.079834 0.048157, + 0.060013 -0.080017 0.047974, 0.060013 -0.099976 0.047974, 0.055069 -0.074829 0.043152, 0.060013 -0.075012 0.04303, + 0.060013 -0.075439 0.045044, 0.060013 -0.076477 0.046509, 0.060013 -0.077942 0.047546, 0.060013 -0.080017 0.047974, + 0.055069 -0.074829 0.042847, 0.060013 -0.075012 0.042969, 0.060013 -0.075012 0.04303, 0.055435 -0.079834 0.037842, + 0.060013 -0.080017 0.038025, 0.060013 -0.077942 0.038452, 0.060013 -0.076477 0.03949, 0.060013 -0.075439 0.040955, + 0.060013 -0.075012 0.042969, 0.060013 -0.099976 0.038025, 0.060013 -0.104553 0.040955, 0.060013 -0.103516 0.03949, + 0.060013 -0.102051 0.038452, 0.060013 -0.099976 0.038025, 0.056688 -0.100098 -0.03186, 0.060013 -0.099976 -0.031982, + 0.060013 -0.102051 -0.032471, 0.060013 -0.103516 -0.033447, 0.060013 -0.104553 -0.034912, 0.060013 -0.10498 -0.036987, + 0.060013 -0.080017 -0.031982, 0.055069 -0.074829 -0.036804, 0.060013 -0.075012 -0.036987, 0.060013 -0.075439 -0.034912, + 0.060013 -0.076477 -0.033447, 0.060013 -0.077942 -0.032471, 0.060013 -0.080017 -0.031982, 0.055069 -0.074829 -0.03717, + 0.060013 -0.075012 -0.036987, 0.060013 -0.075012 -0.036987, 0.055435 -0.079834 -0.042175, 0.060013 -0.080017 -0.041992, + 0.060013 -0.077942 -0.041565, 0.060013 -0.076477 -0.040527, 0.060013 -0.075439 -0.039063, 0.060013 -0.075012 -0.036987, + 0.056686 -0.100098 -0.042114, 0.060013 -0.099976 -0.041992, 0.060013 -0.080017 -0.041992, 0.060013 -0.104553 -0.039063, + 0.060013 -0.103516 -0.040527, 0.060013 -0.102051 -0.041565, 0.060013 -0.099976 -0.041992, 0.052505 -0.09375 0.036682, + 0.052048 -0.094238 0.036255, 0.051743 -0.094543 0.035583, 0.046432 -0.088379 0.036499, 0.04628 -0.08905 0.036011, + 0.046219 -0.089478 0.035339, 0.047012 -0.088562 0.036499, 0.046768 -0.089233 0.036072, 0.046616 -0.0896 0.0354, + 0.047562 -0.088867 0.03656, 0.047195 -0.089417 0.036072, 0.046951 -0.089844 0.0354, 0.022903 -0.087524 0.035645, + 0.022903 -0.088196 0.035217, 0.022903 -0.088684 0.034546, 0.022905 -0.087524 -0.030151, 0.022905 -0.088196 -0.029724, + 0.022905 -0.088684 -0.029053, 0.052507 -0.09375 -0.031189, 0.05205 -0.094238 -0.030762, 0.051744 -0.094543 -0.03009, + 0.056353 -0.099426 0.002747, 0.056536 -0.099731 0.002747, 0.056658 -0.100098 0.002747, 0.056597 -0.099731 -0.029968, + 0.056505 -0.099304 -0.030396, 0.056414 -0.099365 -0.029968, 0.056503 -0.099304 0.035889, 0.056412 -0.099365 0.035461, + 0.056595 -0.099731 0.035461, 0.046892 -0.089966 0.002747, 0.046556 -0.089783 0.002747, 0.046221 -0.089661 0.002747, + 0.047564 -0.088867 -0.031006, 0.047197 -0.089417 -0.030579, 0.046953 -0.089844 -0.029907, 0.047014 -0.088562 -0.031006, + 0.04677 -0.089233 -0.030579, 0.046618 -0.0896 -0.029907, 0.046434 -0.088379 -0.031006, 0.046282 -0.08905 -0.030518, + 0.046221 -0.089478 -0.029846, -0.052504 -0.09375 -0.031189, -0.052046 -0.094238 -0.030762, -0.051741 -0.094543 -0.03009, + -0.046431 -0.088379 -0.031006, -0.046309 -0.08905 -0.030518, -0.046217 -0.089478 -0.029846, -0.04701 -0.088562 -0.031006, + -0.046766 -0.089233 -0.030579, -0.046614 -0.0896 -0.029907, -0.04756 -0.088867 -0.031006, -0.047194 -0.089417 -0.030579, + -0.046949 -0.089844 -0.029907, -0.046217 -0.089661 0.002747, -0.046583 -0.089783 0.002747, -0.046888 -0.089966 0.002747, + -0.022902 -0.087524 -0.030151, -0.022902 -0.088196 -0.029724, -0.022902 -0.088684 -0.029053, -0.022903 -0.087524 0.035645, + -0.022903 -0.088196 0.035217, -0.022903 -0.088684 0.034546, -0.052505 -0.09375 0.036682, -0.052048 -0.094238 0.036255, + -0.051743 -0.094543 0.035583, -0.056379 -0.099426 0.002747, -0.056532 -0.099731 0.002747, -0.056654 -0.100098 0.002747, + -0.056501 -0.099304 -0.030396, -0.05641 -0.099365 -0.029968, -0.056593 -0.099731 -0.029968, -0.059095 -0.154663 0.003479, + -0.056595 -0.099731 0.035461, -0.056503 -0.099304 0.035889, -0.056412 -0.099365 0.035461, -0.054367 -0.071106 0.040405, + -0.054642 -0.071472 0.040405, -0.054825 -0.071899 0.040405, -0.020126 -0.048889 0.039185, -0.019882 -0.048767 0.039185, + -0.019608 -0.048706 0.039185, 0.019608 -0.048706 0.039185, 0.019882 -0.048767 0.039185, 0.020126 -0.048889 0.039185, + 0.054337 -0.071106 0.040405, 0.054642 -0.071472 0.040405, 0.054825 -0.071899 0.040405, 0.044876 0.028198 0.046448, + 0.043839 0.030457 0.046448, 0.042313 0.032471 0.046448, 0.031631 0.039429 0.046021, 0.021744 0.043518 0.046021, + 0.011063 0.046143 0.046021, 1.5e-005 0.046997 0.046021, -0.011093 0.046143 0.046021, -0.021774 0.043518 0.046021, + -0.031662 0.039429 0.046021, 0.031631 0.039429 -0.039551, 0.021744 0.043518 -0.039551, 0.011063 0.046143 -0.039551, + 1.5e-005 0.046997 -0.039551, -0.011093 0.046143 -0.039551, -0.021774 0.043518 -0.039551, -0.031662 0.039429 -0.039551, + -0.044907 0.028198 0.046448, -0.043869 0.030457 0.046448, -0.042343 0.032471 0.046448, 0.013657 -0.046021 0.04248, + 0.005539 -0.047668 0.04248, -0.002487 -0.047913 0.04248, -0.010117 -0.046936 0.04248, 0.011917 0.040771 0.043518, + 0.018631 0.038208 0.043518, 0.025528 0.033997 0.043518, 0.031998 0.027954 0.043518, 0.037491 0.02002 0.043518, + 0.041214 0.010437 0.043518, 0.042496 0 0.043518, 0.041183 -0.010437 0.043518, 0.037491 -0.02002 0.043518, + 0.032028 -0.027954 0.043518, 0.025497 -0.033997 0.043518, 0.018631 -0.038208 0.043518, 0.011887 -0.040771 0.043518, + -0.011887 -0.040771 0.043518, -0.018631 -0.038208 0.043518, -0.025497 -0.033997 0.043518, -0.032028 -0.027954 0.043518, + -0.037491 -0.02002 0.043518, -0.041183 -0.010437 0.043518, -0.042496 0 0.043518, -0.041183 0.010437 0.043518, + -0.037521 0.02002 0.043518, -0.032028 0.027954 0.043518, -0.025497 0.033997 0.043518, -0.0186 0.038208 0.043518, + -0.011887 0.040771 0.043518, 0.01033 0.035522 -0.03363, 0.01619 0.033264 -0.03363, 0.022171 0.029602 -0.03363, + 0.027847 0.024353 -0.03363, 0.032669 0.017395 -0.03363, 0.035843 0.009094 -0.03363, 0.037003 0 -0.03363, + 0.035873 -0.009094 -0.03363, 0.032639 -0.017395 -0.03363, 0.027878 -0.024353 -0.03363, 0.022202 -0.029602 -0.03363, + 0.01622 -0.033264 -0.03363, 0.010361 -0.035522 -0.03363, -0.010361 -0.035522 -0.03363, -0.01622 -0.033264 -0.03363, + -0.022202 -0.029602 -0.03363, -0.027878 -0.024353 -0.03363, -0.032639 -0.017395 -0.03363, -0.035873 -0.009094 -0.03363, + -0.037003 0 -0.03363, -0.035873 0.009094 -0.03363, -0.032639 0.017395 -0.03363, -0.027878 0.024353 -0.03363, + -0.022202 0.029602 -0.03363, -0.01622 0.033264 -0.03363, -0.010361 0.035522 -0.03363, -0.019608 -0.048706 -0.033447, + -0.019882 -0.048767 -0.033447, -0.020126 -0.048889 -0.033447, -0.054367 -0.071106 -0.034668, -0.054642 -0.071472 -0.034668, + -0.054825 -0.071899 -0.034668, 0.020126 -0.048889 -0.033447, 0.019882 -0.048767 -0.033447, 0.019608 -0.048706 -0.033447, + 0.054337 -0.071106 -0.034668, 0.054642 -0.071472 -0.034668, 0.054825 -0.071899 -0.034668, -0.044907 0.028198 -0.039978, + -0.043869 0.030457 -0.039978, -0.042343 0.032471 -0.039978, 0.044876 0.028198 -0.039978, 0.043839 0.030457 -0.039978, + 0.042313 0.032471 -0.039978, -0.047562 -0.088867 0.03656, -0.047195 -0.089417 0.036072, -0.046951 -0.089844 0.0354, + -0.047012 -0.088562 0.036499, -0.046768 -0.089233 0.036072, -0.046616 -0.0896 0.0354, -0.046432 -0.088379 0.036499, + -0.04631 -0.08905 0.036011, -0.046219 -0.089478 0.035339, 0.058395 -0.104675 0.044922, 0.058426 -0.103577 0.04657, + 0.058395 -0.101929 0.047729, 0.057571 -0.078064 0.047729, 0.057602 -0.076355 0.046631, 0.057571 -0.075256 0.044922, + 0.057571 -0.075256 0.041077, 0.057602 -0.076355 0.039368, 0.057571 -0.078064 0.038269, 0.058395 -0.101929 0.038269, + 0.058426 -0.103577 0.039429, 0.058395 -0.104675 0.041077, 0.058395 -0.104675 -0.035095, 0.058426 -0.103577 -0.033386, + 0.058395 -0.101929 -0.032288, 0.057571 -0.078064 -0.032288, 0.057602 -0.076355 -0.033386, 0.057571 -0.075256 -0.035095, + 0.057571 -0.075256 -0.03894, 0.057602 -0.076355 -0.040649, 0.057571 -0.078064 -0.041748, 0.058395 -0.101929 -0.041687, + 0.058426 -0.103577 -0.040588, 0.058395 -0.104675 -0.038879, 0.055313 -0.078491 0.036926, 0.056107 -0.090637 0.036987, + 0.056719 -0.100403 0.002747, 0.056108 -0.090637 -0.031433, 0.055315 -0.078491 -0.031433, 0.052841 -0.047791 -0.037842, + 0.051804 -0.035522 -0.037781, 0.05925 -0.164246 -0.038513, 0.056381 -0.095032 -0.042114, 0.055773 -0.0849 -0.03186, + 0.056383 -0.095032 -0.03186, 0.056536 -0.097595 -0.03186, 0.056993 -0.105103 0.002991, 0.056993 -0.105103 -0.016968, + 0.056993 -0.105103 -0.026917, 0.056993 -0.105103 0.022949, 0.056992 -0.105103 0.032898, 0.056381 -0.095032 0.037903, + 0.055771 -0.0849 0.037842, 0.056381 -0.095032 0.048096, 0.05925 -0.164246 0.044495, 0.047897 -0.088379 0.036682, + 0.056627 -0.099121 -0.030701, 0.056627 -0.098877 -0.030884, 0.056658 -0.099365 -0.030518, 0.056688 -0.100037 -0.029968, + 0.056688 -0.099792 -0.030151, 0.056719 -0.10022 -0.029724, 0.056686 -0.100037 0.035461, 0.056686 -0.099792 0.035645, + 0.056625 -0.099121 0.036194, 0.056656 -0.099365 0.036011, 0.056625 -0.098877 0.036377, 0.046556 -0.087769 -0.031128, + -0.047926 -0.088379 -0.031189, -0.056684 -0.100037 -0.029968, -0.056684 -0.099792 -0.030151, -0.056623 -0.099121 -0.030701, + -0.056654 -0.099365 -0.030518, -0.056623 -0.098877 -0.030884, -0.056715 -0.100403 0.002747, -0.052841 -0.047791 0.043823, + -0.051895 -0.035522 -0.037842, -0.056625 -0.099121 0.036194, -0.056625 -0.098877 0.036377, -0.056656 -0.099365 0.036011, + -0.056686 -0.100037 0.035461, -0.056686 -0.099792 0.035645, -0.056717 -0.10022 0.035278, 0.009659 -0.04834 0.042358, + -0.009689 -0.04834 0.042358, -0.016891 0.044922 0.042786, -0.01857 -0.044128 0.042664, -0.01683 -0.044861 0.042603, + 0.011398 -0.046448 0.042419, -0.046585 -0.087769 0.036621, 0.060015 -0.215027 -0.028503, 0.060013 -0.215027 0.0495, + 0.054916 -0.072388 0.036926, 0.05574 -0.084534 0.036926, 0.048538 -0.088745 0.036682, 0.056503 -0.096741 0.036987, + 0.056564 -0.097778 0.036865, 0.046585 -0.087708 0.036621, 0.045853 -0.087585 0.036621, 0.047287 -0.087952 0.036682, + 0.047989 -0.089294 0.036499, 0.048538 -0.088745 0.036682, 0.047287 -0.090088 0.035461, 0.047562 -0.089783 0.036072, + -1.5e-005 -0.085999 0.034973, 0.045822 -0.088379 0.036438, 0.045853 -0.087585 0.036621, 0.045822 -0.089478 0.035339, + 0.045822 -0.088989 0.036011, -1.5e-005 -0.088013 0.03302, -1.3e-005 -0.088013 -0.027527, -1.3e-005 -0.085999 -0.02948, + 0.055742 -0.084534 -0.031433, 0.056597 -0.098633 -0.031067, 0.056566 -0.097778 -0.031372, 0.056505 -0.096741 -0.031494, + 0.056139 -0.099121 -0.02948, 0.047197 -0.09021 -0.029175, 0.047195 -0.09021 0.034668, 0.056717 -0.100403 0.035034, + 0.056414 -0.098816 -0.030701, 0.056597 -0.098633 -0.031067, 0.056261 -0.098999 -0.030334, 0.056658 -0.100098 -0.029541, + 0.056658 -0.099609 -0.030334, 0.056536 -0.099731 -0.029541, 0.056139 -0.099121 -0.02948, 0.056719 -0.100403 -0.029541, + 0.056595 -0.098633 0.03656, 0.056412 -0.098816 0.036194, 0.056259 -0.098999 0.035828, 0.056534 -0.099731 0.035034, + 0.056351 -0.099426 0.035034, 0.056137 -0.099121 0.035034, 0.056656 -0.099609 0.035828, 0.056717 -0.100403 0.035034, + 0.046555 -0.089783 0.034668, 0.047195 -0.09021 0.034668, 0.046219 -0.089661 0.034607, 0.045853 -0.0896 0.034607, + 0.04854 -0.088745 -0.031189, 0.04796 -0.088318 -0.031189, 0.047289 -0.087952 -0.031128, 0.047991 -0.089294 -0.031006, + 0.045855 -0.087585 -0.031128, 0.045824 -0.088989 -0.030518, 0.045824 -0.088379 -0.030945, 0.047564 -0.089783 -0.030579, + 0.047289 -0.090088 -0.029968, 0.046892 -0.089966 -0.029175, 0.047197 -0.09021 -0.029175, 0.046556 -0.089783 -0.029175, + 0.045824 -0.089478 -0.029846, 0.045855 -0.0896 -0.029114, -1.3e-005 -0.085999 -0.02948, -0.048536 -0.088745 -0.031189, + -0.056501 -0.096741 -0.031494, -0.046583 -0.087708 -0.031128, -0.045851 -0.087585 -0.031128, -0.047285 -0.087952 -0.031128, + -0.048018 -0.089294 -0.031006, -0.048536 -0.088745 -0.031189, -0.047285 -0.090088 -0.029968, -0.04756 -0.089783 -0.030579, + -0.045851 -0.0896 -0.029114, -0.046217 -0.089661 -0.029114, -0.046583 -0.089783 -0.029175, -0.047194 -0.09021 -0.029175, + -1.5e-005 -0.088013 0.03302, -1.3e-005 -0.086792 -0.029358, -1.3e-005 -0.085999 -0.02948, -0.04582 -0.088379 -0.030945, + -0.045851 -0.087585 -0.031128, -1.3e-005 -0.087402 -0.028931, -1.3e-005 -0.08783 -0.028259, -1.3e-005 -0.088013 -0.027527, + -0.04582 -0.089478 -0.029846, -0.04582 -0.088989 -0.030518, -0.045851 -0.0896 -0.029114, -1.5e-005 -0.086792 0.034851, + -1.5e-005 -0.08783 0.033752, -1.5e-005 -0.087402 0.034424, -1.5e-005 -0.088013 0.03302, -1.5e-005 -0.085999 0.034973, + -1.5e-005 -0.047974 0.034973, -0.056503 -0.096741 0.036987, -0.047195 -0.09021 0.034668, -0.056135 -0.099121 -0.02948, + -0.056137 -0.099121 0.035034, -0.047194 -0.09021 -0.029175, -0.056137 -0.099121 0.035034, -0.05641 -0.098816 -0.030701, + -0.056257 -0.098999 -0.030334, -0.056532 -0.099731 -0.029541, -0.056379 -0.099426 -0.029541, -0.056135 -0.099121 -0.02948, + -0.056715 -0.100403 -0.029541, -0.055738 -0.084534 -0.031433, -0.054916 -0.072388 0.036926, -0.05574 -0.084534 0.036926, + -0.056717 -0.100403 0.035034, -0.056501 -0.096741 -0.031494, -0.056562 -0.097778 -0.031372, -0.056623 -0.098633 -0.031067, + -0.056654 -0.099609 -0.030334, -0.060013 -0.215027 -0.04248, -0.056564 -0.097778 0.036865, -0.056503 -0.096741 0.036987, + -0.056412 -0.098816 0.036194, -0.056625 -0.098633 0.03656, -0.056259 -0.098999 0.035828, -0.056656 -0.100098 0.035034, + -0.056656 -0.099609 0.035828, -0.056534 -0.099731 0.035034, -0.056137 -0.099121 0.035034, -0.056717 -0.100403 0.035034, + -0.054642 -0.071472 0.036926, -0.054001 -0.070862 0.036865, -0.054825 -0.071899 0.036926, -0.054916 -0.072388 0.036926, + -0.054916 -0.072388 0.043945, -0.054001 -0.070862 0.036865, -0.02037 -0.049011 0.035706, -0.020126 -0.048889 0.035706, + -0.019882 -0.048767 0.035706, -1.5e-005 -0.047974 0.034973, -0.019363 -0.048706 0.035706, -0.019363 -0.048706 0.042664, + -1.5e-005 -0.047974 0.034973, 0.019333 -0.048706 0.035706, 0.019608 -0.048706 0.035706, 0.019882 -0.048767 0.035706, + 0.02037 -0.049011 0.042725, 0.054001 -0.070862 0.036865, 0.02037 -0.049011 0.035706, 0.054001 -0.070862 0.036865, + 0.054367 -0.071167 0.036926, 0.054916 -0.072388 0.043945, 0.054642 -0.071472 0.036926, 0.054916 -0.072388 0.036926, + 0.019882 -0.048767 0.042725, 0.019333 -0.048706 0.042664, 0.02037 -0.049011 0.042725, 0.020126 -0.048889 0.042725, + 0.054642 -0.071472 0.043884, 0.054001 -0.070862 0.043884, 0.052994 -0.047791 0.043823, 0.054916 -0.072388 0.043945, + 0.054825 -0.071899 0.043884, 0.050797 -0.023254 0.043762, 0.045425 0.025757 0.043579, 0.043839 0.030457 0.043518, + 0.045425 0.025757 0.0495, 0.042374 0.03241 0.043457, 0.034988 0.037659 0.043213, 0.02919 0.040649 0.04303, + 0.040482 0.034119 0.0495, 0.040482 0.034119 0.043396, 0.056351 -0.094421 0.0495, -0.051804 -0.034241 0.0495, + -0.056351 -0.094421 0.0495, 1.5e-005 0.046997 0.0495, -0.010727 0.046143 0.0495, -0.045456 0.025757 0.0495, + -0.031235 0.039673 0.0495, -0.059097 -0.154663 0.0495, -0.021225 0.043701 0.0495, -0.060013 -0.215027 0.0495, + 0.060013 -0.215027 0.0495, 0.045425 0.025757 0.0495, 0.031204 0.039673 0.0495, 0.051804 -0.034241 0.0495, + 0.059097 -0.154663 0.0495, 0.044876 0.028198 0.0495, 0.043839 0.030457 0.0495, 0.021255 0.043701 0.0495, + 0.010757 0.046143 0.0495, 0.040482 0.034119 0.0495, -0.045456 0.025757 0.0495, -0.043869 0.030457 0.0495, + -0.045456 0.025757 0.043579, -0.042343 0.032471 0.0495, -0.040512 0.034119 0.0495, -0.040512 0.034119 0.043396, + -0.054642 -0.071472 0.043884, -0.054916 -0.072388 0.043945, -0.050797 -0.023254 0.043762, -0.054001 -0.070862 0.043884, + -0.054367 -0.071167 0.043884, -0.02037 -0.049011 0.042725, -0.019882 -0.048767 0.042725, -0.019363 -0.048706 0.042664, + -0.019608 -0.048706 0.042664, -0.048264 0.001282 0.043701, -0.045456 0.025757 0.043579, -0.044907 0.028259 0.043579, + -0.043869 0.030457 0.043518, -0.02916 0.040649 0.04303, -0.023178 0.04303 0.042786, -1.5e-005 -0.047974 0.041992, + -0.022995 0.042114 0.042786, -0.02861 0.038513 0.04303, -0.016891 0.044922 0.042603, 0.016861 0.044922 0.042603, + 0.022964 0.042114 0.042786, 0.016861 0.044922 0.04303, 0.028641 0.038513 0.04303, 0.022049 -0.042664 0.042786, + 0.015091 -0.045593 0.042542, -1.5e-005 -0.047974 0.041992, 0.007736 -0.047363 0.042297, -0.022049 -0.042664 0.042786, + -0.007736 -0.047363 0.042297, -0.015091 -0.045593 0.042542, -0.02861 0.031433 0.04303, -0.02861 0.038513 0.04303, + -0.022995 0.042114 0.04303, 0.028641 0.038513 0.04303, 0.022964 0.042114 0.04303, -0.016891 0.044922 0.04303, + -0.00853 0.046509 0.04303, 1.5e-005 0.046997 0.04303, 0.016861 0.044922 0.04303, 0.008499 0.046509 0.04303, + -0.007645 -0.047363 0.04303, -0.015091 -0.045593 0.04303, -0.022141 -0.042603 0.04303, 0.007645 -0.047363 0.04303, + -1.5e-005 -0.047974 0.04303, 0.022141 -0.042603 0.04303, 0.015091 -0.045593 0.04303, -0.028641 -0.038513 0.04303, + 0.028641 -0.038513 0.04303, 0.007828 0.041748 0.04303, 0.015335 0.039612 0.04303, 0.041763 0.007874 0.043457, + 0.022354 0.036133 0.04303, 0.028641 0.031433 0.04303, 1.5e-005 0.04248 0.04303, 0.035355 0.02356 0.043213, + 0.039505 0.015686 0.043396, 0.041763 -0.007874 0.043457, 0.039505 -0.015686 0.043396, 0.035385 -0.02356 0.043213, + 0.007797 -0.041748 0.04303, 0.042496 0 0.043457, 0.028641 -0.031433 0.04303, 0.022385 -0.036133 0.04303, + 0.015366 -0.039612 0.04303, -1.5e-005 -0.04248 0.044006, -0.007828 -0.041748 0.04303, -0.015366 -0.039612 0.04303, + -0.041763 -0.007874 0.043457, -1.5e-005 -0.04248 0.04303, -0.022385 -0.036133 0.04303, -0.028641 -0.031433 0.04303, + -0.035385 -0.02356 0.043213, -0.039505 -0.015686 0.043396, -0.041794 0.007874 0.043457, -0.039474 0.015686 0.043396, + -0.035385 0.02356 0.043213, -0.007797 0.041748 0.04303, -0.042496 0 0.043457, -0.02861 0.031433 0.04303, + -0.022385 0.036133 0.04303, -0.015366 0.039612 0.04303, 1.5e-005 0.04248 0.04303, -0.023605 -0.035339 0.044006, + -0.030045 -0.030029 0.044006, -0.016281 -0.039246 0.044006, -1.5e-005 -0.04248 0.044006, -0.008286 -0.041687 0.044006, + 0.030045 -0.030029 0.044006, -0.042496 0 0.044006, -0.041672 -0.008301 0.044006, -0.039261 -0.016235 0.044006, + -0.035324 -0.023621 0.044006, -0.030075 0.030029 0.044006, 0.008286 -0.041687 0.044006, 0.016251 -0.039246 0.044006, + 0.023605 -0.035339 0.044006, 0.035324 -0.023621 0.044006, 0.039261 -0.016235 0.044006, 0.041672 -0.008301 0.044006, + 0.042496 0 0.044006, -0.041672 0.008301 0.044006, -0.039291 0.016235 0.044006, -0.035324 0.023621 0.044006, + 0.030045 0.030029 0.044006, -0.016281 0.039246 0.044006, 0.016251 0.039246 0.044006, -0.008286 0.041687 0.044006, + 1.5e-005 0.04248 0.044006, -0.023605 0.035339 0.044006, 0.035355 0.023621 0.044006, 0.039261 0.016235 0.044006, + 0.041702 0.008301 0.044006, 0.023636 0.035339 0.044006, 0.008316 0.041687 0.044006, 0.008133 0.046509 -0.038025, + 0.016312 0.045044 -0.03656, -0.016342 0.045044 -0.03656, -0.008163 0.046509 -0.038025, 1.5e-005 0.046997 -0.038513, + 0.016312 0.045044 -0.03656, 0.028946 0.040771 -0.036987, 0.034805 0.03772 -0.037231, 0.040482 0.034119 -0.037415, + 0.048264 0.001282 -0.037659, 0.050797 -0.023254 -0.037781, 0.054916 -0.072388 -0.037903, 0.006729 0.036377 -0.036255, + 0.013626 0.034424 -0.036499, 1.5e-005 0.036987 -0.036011, 0.020218 0.030945 -0.036682, 0.026138 0.026184 -0.036926, + 0.03096 0.020264 -0.037109, 0.034378 0.013611 -0.037231, 0.036392 0.006714 -0.037292, 0.036392 -0.006714 -0.037292, + 0.034409 -0.013611 -0.037231, 0.006729 -0.036377 -0.036255, 0.03096 -0.020264 -0.037109, 0.026169 -0.026184 -0.036926, + 0.020248 -0.030945 -0.036682, 0.037003 0 -0.037292, 0.013626 -0.034424 -0.036499, -1.5e-005 -0.036987 -0.036011, + 1.7e-005 0.036987 -0.030029, -0.045456 0.025757 -0.037598, -0.034409 0.013611 -0.037231, -0.037003 0 -0.037292, + -0.036362 0.006714 -0.037292, -0.030991 0.020264 -0.037109, -0.036392 -0.006714 -0.037292, -0.050797 -0.023254 -0.037781, + -0.028915 0.040771 -0.036987, -0.020248 0.030945 -0.036682, -0.016342 0.045044 -0.03656, -0.022751 0.043213 -0.036804, + -0.00676 0.036377 -0.036255, 1.5e-005 0.044495 -0.036011, -0.026169 0.026184 -0.036926, 1.5e-005 0.036987 -0.036011, + -0.013596 0.034424 -0.036499, -0.034409 -0.013611 -0.037231, -0.03096 -0.020264 -0.037109, -0.026169 -0.026184 -0.036926, + -0.052994 -0.047791 -0.037842, -0.013626 -0.034424 -0.036499, -0.020248 -0.030945 -0.036682, -1.5e-005 -0.036987 -0.036011, + -0.006729 -0.036377 -0.036255, -1.5e-005 -0.047974 -0.036011, -0.019361 -0.048645 -0.030151, -0.019363 -0.048706 -0.036682, + -0.019606 -0.048706 -0.030212, -0.019882 -0.048767 -0.036682, -0.020126 -0.048889 -0.036682, -0.01988 -0.048767 -0.030212, + -0.02037 -0.049011 -0.036682, -0.053999 -0.070862 -0.031372, -0.020369 -0.049011 -0.030212, -0.054001 -0.070862 -0.037903, + -0.054642 -0.071472 -0.037903, -0.053999 -0.070862 -0.031372, -0.054365 -0.071167 -0.031372, -0.054825 -0.071899 -0.037903, + -0.054916 -0.072388 -0.037903, -0.05464 -0.071472 -0.031433, -0.054914 -0.072388 -0.031433, -1.5e-005 -0.047974 -0.036011, + -1.3e-005 -0.047974 -0.02948, 0.020128 -0.048889 -0.030212, 0.02037 -0.049011 -0.036682, 0.019884 -0.048767 -0.030212, + 0.019882 -0.048767 -0.036682, 0.019608 -0.048706 -0.036682, 0.019333 -0.048706 -0.036682, 0.019335 -0.048645 -0.030151, + 0.02037 -0.049011 -0.036682, 0.020372 -0.049011 -0.030212, 0.054644 -0.071472 -0.031433, 0.054003 -0.070862 -0.031372, + 0.054001 -0.070862 -0.037903, 0.054367 -0.071167 -0.037903, 0.054827 -0.071899 -0.031433, 0.054918 -0.072388 -0.031433, + 0.054642 -0.071472 -0.037903, 0.054916 -0.072388 -0.037903, -0.043869 0.030457 -0.037537, -0.045456 0.025757 -0.037598, + -0.045456 0.025757 -0.04248, -0.042404 0.03241 -0.037476, -0.040512 0.034119 -0.037415, -0.040512 0.034119 -0.04248, + -0.056351 -0.094421 -0.04248, 0.051804 -0.034241 -0.04248, 0.056351 -0.094421 -0.04248, 1.5e-005 0.046997 -0.04248, + 0.010757 0.046143 -0.04248, 0.031204 0.039673 -0.04248, 0.059097 -0.154663 -0.04248, 0.021255 0.043701 -0.04248, + 0.060013 -0.215027 -0.04248, -0.060013 -0.215027 -0.04248, -0.045456 0.025757 -0.04248, -0.031235 0.039673 -0.04248, + -0.051804 -0.034241 -0.04248, -0.059097 -0.154663 -0.04248, -0.044907 0.028198 -0.04248, -0.043869 0.030457 -0.04248, + -0.021225 0.043701 -0.04248, -0.010727 0.046143 -0.04248, 0.045425 0.025757 -0.04248, 0.043839 0.030457 -0.04248, + 0.044876 0.028259 -0.037598, 0.045425 0.025757 -0.037598, 0.042374 0.032471 -0.04248, 0.040482 0.034119 -0.04248, + 0.043839 0.030457 -0.037537, 0.040482 0.034119 -0.037415, -0.014174 -0.03418 -0.030029, -1.3e-005 -0.036987 -0.030029, + -0.020552 -0.030762 -0.030029, -0.007215 -0.036316 -0.030029, -0.030775 -0.020569 -0.030029, -0.026167 -0.026184 -0.030029, + -0.036299 0.007202 -0.030029, -0.036299 -0.007202 -0.030029, -0.034193 -0.01416 -0.030029, 0.030779 -0.020569 -0.030029, + -0.030745 0.020569 -0.030029, 0.014147 -0.03418 -0.030029, 0.007219 -0.036316 -0.030029, 0.020555 -0.030762 -0.030029, + 0.026171 -0.026184 -0.030029, 0.034197 -0.01416 -0.030029, 0.036303 -0.007202 -0.030029, 0.030779 0.020569 -0.030029, + -0.037001 0 -0.030029, -0.034163 0.01416 -0.030029, -0.026167 0.026184 -0.030029, -0.020552 0.030762 -0.030029, + 1.7e-005 0.036987 -0.030029, -0.014143 0.03418 -0.030029, -0.007246 0.036316 -0.030029, 0.036272 0.007202 -0.030029, + 0.034197 0.01416 -0.030029, 0.037004 0 -0.030029, 0.020586 0.030762 -0.030029, 0.014177 0.03418 -0.030029, + 0.02614 0.026184 -0.030029, 0.007219 0.036316 -0.030029, -0.048538 -0.088745 0.036682, -0.047958 -0.088318 0.036682, + -0.047287 -0.087952 0.036682, -0.048019 -0.089294 0.036499, -0.045853 -0.087585 0.036621, -0.045822 -0.088989 0.036011, + -0.045822 -0.088379 0.036438, -0.047562 -0.089783 0.036072, -0.047287 -0.090088 0.035461, -0.04689 -0.089966 0.034668, + -0.047195 -0.09021 0.034668, -0.046585 -0.089783 0.034668, -0.045822 -0.089478 0.035339, -0.045853 -0.0896 0.034607, + 0.059952 -0.199524 -0.033508, 0.060015 -0.215027 -0.028503, 0.056505 -0.215027 -0.028503, 0.056503 -0.215027 0.034485, + 0.056503 -0.184021 -0.038513, 0.060013 -0.215027 0.034485, 0.056503 -0.215027 0.034485, 0.059952 -0.199524 0.03949, + 0.056503 -0.184021 0.044495, 0.059769 -0.184021 0.044495, 0.058762 -0.144531 0.044495, 0.056503 -0.184021 0.044495, + 0.056992 -0.105103 -0.038513, 0.056992 -0.105103 -0.036865, 0.056503 -0.105103 0.044495, 0.056992 -0.105103 0.044495, + 0.056992 -0.105103 0.043091, 0.056961 -0.104736 0.045044, 0.0569 -0.103638 0.046631, 0.056808 -0.102051 0.047729, + 0.056076 -0.089966 0.048157, 0.056686 -0.100098 0.048096, 0.055435 -0.079834 0.048157, 0.055283 -0.077942 0.047791, + 0.055191 -0.076294 0.046692, 0.055099 -0.075195 0.045105, 0.055069 -0.074829 0.043152, 0.055099 -0.075195 0.040894, + 0.055069 -0.074829 0.042847, 0.055191 -0.076294 0.039307, 0.055283 -0.077942 0.038208, 0.056686 -0.100098 0.037903, + 0.056076 -0.089966 0.037842, 0.055435 -0.079834 0.037842, 0.060013 -0.080017 0.038025, 0.056808 -0.102051 0.038269, + 0.056686 -0.100098 0.037903, 0.0569 -0.103638 0.039368, 0.060013 -0.10498 0.042969, 0.056961 -0.104736 0.040955, + 0.056992 -0.105103 0.042908, 0.060013 -0.10498 0.04303, 0.060013 -0.075012 0.04303, 0.060013 -0.075439 0.045044, + 0.060013 -0.076477 0.046509, 0.060013 -0.077942 0.047546, 0.060013 -0.080017 0.047974, 0.060013 -0.075012 0.042969, + 0.060013 -0.080017 0.038025, 0.060013 -0.075439 0.040955, 0.060013 -0.099976 0.038025, 0.060013 -0.076477 0.03949, + 0.060013 -0.077942 0.038452, 0.060013 -0.10498 0.042969, 0.060013 -0.099976 0.047974, 0.060013 -0.102051 0.047546, + 0.060013 -0.103516 0.046509, 0.060013 -0.104553 0.045044, 0.060013 -0.102051 0.038452, 0.060013 -0.103516 0.03949, + 0.060013 -0.104553 0.040955, 0.056992 -0.105103 -0.036865, 0.056961 -0.104736 -0.034973, 0.0569 -0.103638 -0.033325, + 0.056808 -0.102051 -0.032288, 0.055437 -0.079834 -0.03186, 0.056078 -0.089966 -0.03186, 0.056688 -0.100098 -0.03186, + 0.060013 -0.099976 -0.031982, 0.055437 -0.079834 -0.03186, 0.055283 -0.077942 -0.032227, 0.055191 -0.076294 -0.033325, + 0.055099 -0.075195 -0.034912, 0.055069 -0.074829 -0.036804, 0.055099 -0.075195 -0.039063, 0.055069 -0.074829 -0.03717, + 0.055191 -0.076294 -0.04071, 0.055283 -0.077942 -0.041809, 0.056076 -0.089966 -0.042114, 0.055435 -0.079834 -0.042175, + 0.056808 -0.102051 -0.041748, 0.056686 -0.100098 -0.042114, 0.0569 -0.103638 -0.040649, 0.060013 -0.10498 -0.036987, + 0.056961 -0.104736 -0.039001, 0.056992 -0.105103 -0.037109, 0.060013 -0.10498 -0.036987, 0.060013 -0.075012 -0.036987, + 0.060013 -0.075439 -0.034912, 0.060013 -0.076477 -0.033447, 0.060013 -0.077942 -0.032471, 0.060013 -0.080017 -0.031982, + 0.060013 -0.075012 -0.036987, 0.060013 -0.080017 -0.041992, 0.060013 -0.075439 -0.039063, 0.060013 -0.099976 -0.041992, + 0.060013 -0.076477 -0.040527, 0.060013 -0.077942 -0.041565, 0.060013 -0.10498 -0.036987, 0.060013 -0.099976 -0.031982, + 0.060013 -0.102051 -0.032471, 0.060013 -0.103516 -0.033447, 0.060013 -0.104553 -0.034912, 0.060013 -0.102051 -0.041565, + 0.060013 -0.103516 -0.040527, 0.060013 -0.104553 -0.039063, 0.056503 -0.184021 -0.038513, 0.056992 -0.105103 -0.038513, + 0.056503 -0.105103 -0.038513, 0.059769 -0.184021 -0.038513, 0.058762 -0.144531 -0.038513, 0.044266 0.025513 0.05304, + 0.050705 -0.034302 0.05304, 0.055313 -0.094421 0.053101, 0.05809 -0.154663 0.053101, 0.059006 -0.215027 0.053101, + 0.052139 -0.215027 0.056824, 0.044998 -0.215027 0.059998, 0.044113 -0.155518 0.059875, 0.041458 -0.09613 0.059448, + 0.037033 -0.036804 0.058716, 0.030838 0.0224 0.057739, 0.037613 0.023926 0.055603, 0.044754 0.025574 0.052734, + 0.04512 0.025574 0.052307, 0.045364 0.025635 0.051758, 0.045486 0.025635 0.051208, 0.051804 -0.034241 0.05127, + 0.056351 -0.09436 0.051331, 0.059097 -0.154602 0.051331, 0.060013 -0.215027 0.051392, 0.059738 -0.215027 0.052368, + 0.059433 -0.215027 0.052795, 0.044266 0.025574 0.05304, 0.044266 0.025635 0.05304, 0.044754 0.025696 0.052734, + 0.04512 0.025757 0.052307, 0.045364 0.025757 0.051758, 0.045425 0.025757 0.051208, 0.045486 0.025696 0.051208, + 0.039261 0.03363 0.05304, 0.039566 0.033386 0.05304, 0.039871 0.033142 0.05304, 0.042801 0.029846 0.05304, + 0.043716 0.027771 0.05304, 0.044266 0.025635 0.05304, 0.030411 0.024292 0.057739, 0.029495 0.026001 0.057678, + 0.026566 0.028564 0.057617, 0.033279 0.031189 0.055481, 0.039505 0.033997 0.052734, 0.039688 0.034302 0.052307, + 0.03981 0.034485 0.051819, 0.039871 0.034546 0.05127, 0.040176 0.034302 0.05127, 0.040482 0.034119 0.05127, + 0.040421 0.034058 0.051819, 0.040298 0.033813 0.052307, 0.040115 0.033508 0.052734, 0.039261 0.03363 0.05304, + 0.030228 0.038879 0.05304, 0.020584 0.042725 0.05304, 0.010391 0.045105 0.05304, 1.5e-005 0.045837 0.05304, + 1.5e-005 0.046326 0.052734, 1.5e-005 0.046692 0.052307, 1.5e-005 0.046936 0.051819, 1.5e-005 0.046997 0.05127, + 0.010574 0.046204 0.05127, 0.020889 0.043823 0.05127, 0.030716 0.039917 0.05127, 0.039871 0.034546 0.05127, + 0.020279 0.031311 0.057556, 0.013687 0.033386 0.057556, 1.5e-005 0.034973 0.057495, 1.5e-005 0.040527 0.05542, + 1.5e-005 0.034973 0.058472, 1.5e-005 0.034973 0.057495, 0.026566 0.028564 0.058655, 0.013687 0.033386 0.058533, + 0.006912 0.034607 0.058533, -0.006882 0.034607 0.058533, -0.013657 0.033386 0.058533, -0.026596 0.028564 0.058655, + -0.026596 0.028564 0.057617, -0.020248 0.031311 0.057556, -0.013657 0.033386 0.057556, 0.028214 0.027466 0.058655, + 0.029495 0.026001 0.058655, 0.030838 0.0224 0.058716, 0.037033 -0.036804 0.059753, 0.041458 -0.09613 0.060425, + 0.044113 -0.155518 0.060852, 0.044998 -0.215027 0.060974, -1.5e-005 -0.215027 0.060974, -0.044998 -0.215027 0.060974, + -0.044113 -0.155518 0.060852, -0.041458 -0.09613 0.060425, -0.037033 -0.036804 0.059753, -0.030869 0.0224 0.058716, + -0.029465 0.026001 0.058655, -0.028183 0.027466 0.058655, 0.044998 -0.215027 0.060974, 0.044998 -0.231506 0.059998, + 0.044998 -0.231506 0.060974, 0.059006 -0.215027 0.053101, 0.059006 -0.231506 0.053101, 0.052139 -0.231506 0.056824, + 0.044998 -0.231506 0.059998, 0.060013 -0.231506 0.051392, 0.059921 -0.231506 0.05188, 0.059738 -0.231506 0.052368, + 0.060013 -0.215027 0.0495, 0.060013 -0.231506 0.0495, 0.045425 0.025757 0.0495, 0.051804 -0.034241 0.0495, + 0.056351 -0.094421 0.0495, 0.059097 -0.154663 0.0495, 0.060013 -0.215027 0.0495, 0.045425 0.025757 0.051208, + 0.044876 0.028198 0.051208, 0.043839 0.030457 0.051208, 0.040482 0.034119 0.05127, 0.040482 0.034119 0.0495, + 0.043839 0.030457 0.0495, 0.044876 0.028198 0.0495, 0.045425 0.025757 0.0495, -0.039902 0.034546 0.05127, + -0.040207 0.034302 0.05127, -0.040512 0.034119 0.05127, -0.040512 0.034119 0.0495, -0.031235 0.039673 0.0495, + -0.021225 0.043701 0.0495, -0.010727 0.046143 0.0495, 1.5e-005 0.046997 0.0495, 0.010757 0.046143 0.0495, + 0.021255 0.043701 0.0495, 0.031204 0.039673 0.0495, 0.040482 0.034119 0.0495, -0.010544 0.046204 0.05127, + -0.02092 0.043823 0.05127, -0.030746 0.039917 0.05127, -0.03923 0.03363 0.05304, -0.039536 0.033386 0.05304, + -0.039841 0.033142 0.05304, -0.040146 0.033508 0.052734, -0.040329 0.033813 0.052307, -0.040451 0.034058 0.051819, + -0.040512 0.034119 0.05127, -0.039841 0.034485 0.051819, -0.039719 0.034302 0.052307, -0.039536 0.033997 0.052734, + -0.044235 0.025635 0.05304, -0.042831 0.029846 0.05304, -0.041489 0.031616 0.05304, -0.039841 0.033142 0.05304, + -0.033249 0.031189 0.055481, -0.026596 0.028564 0.057617, -0.029465 0.026001 0.057678, -0.03038 0.024292 0.057739, + -0.030869 0.0224 0.057739, -0.037643 0.023926 0.055603, -0.044296 0.025513 0.05304, -0.044235 0.025574 0.05304, + -0.044724 0.025696 0.052734, -0.045151 0.025757 0.052307, -0.045395 0.025757 0.051758, -0.045456 0.025757 0.051208, + -0.043869 0.030457 0.051208, -0.042343 0.032471 0.051208, -0.040512 0.034119 0.05127, -0.044785 0.025574 0.052734, + -0.045151 0.025574 0.052307, -0.045395 0.025635 0.051758, -0.045456 0.025635 0.051208, -0.045456 0.025696 0.051208, + -0.044296 0.025513 0.05304, -0.050705 -0.034302 0.05304, -0.055313 -0.094421 0.053101, -0.05809 -0.154663 0.053101, + -0.059036 -0.215027 0.053101, -0.059433 -0.215027 0.052795, -0.059738 -0.215027 0.052368, -0.060013 -0.215027 0.051392, + -0.059097 -0.154602 0.051331, -0.056351 -0.09436 0.051331, -0.051804 -0.034241 0.05127, -0.045456 0.025635 0.051208, + -0.037033 -0.036804 0.058716, -0.041458 -0.09613 0.059448, -0.044113 -0.155518 0.059875, -0.044998 -0.215027 0.059998, + -0.052139 -0.215027 0.056824, -0.030869 0.0224 0.058716, -0.044998 -0.231506 0.060974, -0.044998 -0.231506 0.059998, + -0.044998 -0.231506 0.060974, -0.060013 -0.231506 0.051392, -0.059738 -0.231506 0.052368, -0.059433 -0.231506 0.052795, + -0.059036 -0.231506 0.053101, -0.052139 -0.231506 0.056824, -0.044998 -0.231506 0.059998, -0.060013 -0.231506 0.0495, + -0.059036 -0.231506 0.053101, -0.060013 -0.215027 0.0495, -0.043869 0.030457 0.0495, -0.044907 0.028198 0.0495, + -0.045456 0.025757 0.0495, -0.051804 -0.034241 0.0495, -0.056351 -0.094421 0.0495, -0.059097 -0.154663 0.0495, + -0.060013 -0.215027 0.0495, -0.023849 0.038513 0.0495, -0.012131 0.04187 0.0495, 1.5e-005 0.04303 0.0495, + 0.012161 0.04187 0.0495, 0.02388 0.038513 0.0495, 0.03096 0.034607 0.0495, 0.036758 0.028931 0.0495, 0.040787 0.021851 0.0495, + 0.042801 0.013977 0.0495, 0.048508 -0.042053 0.0495, 0.052597 -0.098328 0.0495, 0.055099 -0.154602 0.0495, + 0.055984 -0.210999 0.0495, -0.055984 -0.210999 0.0495, -0.055099 -0.154602 0.0495, -0.052597 -0.098328 0.0495, + -0.048508 -0.042053 0.0495, -0.042831 0.013977 0.0495, -0.040817 0.021851 0.0495, -0.036728 0.028931 0.0495, + -0.030991 0.034607 0.0495, -0.045456 0.025757 0.0495, -0.023849 0.038513 0.05249, -0.012131 0.04187 0.05249, + 1.5e-005 0.04303 0.05249, 0.012161 0.04187 0.05249, 0.02388 0.038513 0.05249, 0.02388 0.038513 0.0495, + -0.055252 -0.159973 0.05249, -0.053268 -0.112793 0.05249, -0.050125 -0.066284 0.05249, -0.045853 -0.020935 0.05249, + -0.040634 0.022278 0.05249, -0.042038 0.018188 0.05249, -0.042831 0.013977 0.05249, -0.050919 -0.072815 0.05249, + -0.053574 -0.116394 0.05249, 0.040665 0.022278 0.05249, 0.045853 -0.020935 0.05249, 0.050125 -0.066284 0.05249, + 0.053268 -0.112793 0.05249, 0.055252 -0.159973 0.05249, 0.053574 -0.116394 0.05249, 0.050919 -0.072815 0.05249, + 0.042801 0.013977 0.05249, 0.042007 0.018188 0.05249, -0.027573 0.036804 0.05249, -0.030991 0.034546 0.05249, + -0.015976 0.040344 0.05249, -0.008041 0.041809 0.05249, 1.5e-005 0.042297 0.05249, 0.008072 0.041809 0.05249, + 0.016006 0.040344 0.05249, 0.031021 0.034546 0.05249, 0.027542 0.036804 0.05249, -0.055984 -0.210999 0.052551, + -0.049606 -0.210999 0.055847, -0.042984 -0.210999 0.058655, -0.042038 -0.152649 0.058472, -0.039352 -0.094299 0.057983, + -0.034988 -0.036072 0.057251, -0.028915 0.021973 0.056213, -0.034286 0.023193 0.054626, -0.039597 0.024475 0.052795, + -0.040146 0.023376 0.052612, -0.040634 0.022278 0.05249, -0.055771 -0.185486 0.05249, 0.055984 -0.210999 0.052551, + 0.049606 -0.210999 0.055847, 0.042984 -0.210999 0.058655, 0.042984 -0.210999 0.059021, -0.042984 -0.210999 0.059021, + -0.042984 -0.210999 0.058655, 0.055771 -0.185486 0.05249, 0.055984 -0.210999 0.052551, 0.040115 0.023376 0.052612, + 0.039627 0.024475 0.052795, 0.034317 0.023193 0.054626, 0.028885 0.021973 0.056213, 0.034958 -0.036072 0.057251, + 0.039352 -0.094299 0.057983, 0.042038 -0.152649 0.058472, 0.032913 0.03302 0.052673, 0.034683 0.031311 0.052979, + 0.037247 0.028259 0.053101, 0.039627 0.024475 0.052795, 1.5e-005 0.042297 0.05249, 1.5e-005 0.037659 0.054382, + 1.5e-005 0.03302 0.05603, 0.01265 0.031555 0.056091, 0.018753 0.029785 0.056152, 0.024612 0.027283 0.056213, + 0.029922 0.029419 0.054626, 0.034683 0.031311 0.052979, -0.032944 0.03302 0.052673, -0.034714 0.031311 0.052979, + -0.029953 0.029419 0.054626, -0.024643 0.027283 0.056213, -0.018784 0.029785 0.056152, -0.012619 0.031555 0.056091, + -0.037277 0.028259 0.053101, -0.034714 0.031311 0.052979, -0.028915 0.022034 0.056213, -0.028854 0.022156 0.056213, + -0.028549 0.02356 0.056152, -0.027878 0.024841 0.056152, -0.025681 0.026794 0.056152, -0.025131 0.027039 0.056213, + -0.024643 0.027283 0.056213, -0.042984 -0.210999 0.059021, -0.042038 -0.152588 0.058838, -0.039352 -0.094238 0.058411, + -0.034958 -0.03595 0.057739, -0.028854 0.022156 0.056763, -0.028854 0.022156 0.056213, 0.042038 -0.152588 0.058838, + 0.039352 -0.094238 0.058411, 0.034958 -0.03595 0.057739, 0.028885 0.022156 0.056763, 0.027847 0.024841 0.056702, + 0.026871 0.02594 0.056702, 0.02565 0.026794 0.056641, 0.013199 0.031433 0.05658, 0.006668 0.032593 0.056519, + 1.5e-005 0.03302 0.056519, -0.006638 0.032593 0.056519, -0.013229 0.031433 0.05658, -0.025681 0.026794 0.056641, + -0.026901 0.02594 0.056702, -0.027878 0.024841 0.056702, -0.028854 0.022156 0.056763, 0.028885 0.022034 0.056213, + 0.028885 0.022156 0.056213, 0.025101 0.027039 0.056213, 0.02565 0.026794 0.056152, 0.027847 0.024841 0.056152, + 0.028519 0.02356 0.056152, 0.028885 0.022156 0.056213, 1.5e-005 0.03302 0.05603, 1.5e-005 0.03302 0.056519, + 0.02565 0.026794 0.056152, -0.025681 0.026794 0.056641, -0.03923 0.03363 0.05304, -0.030258 0.038879 0.05304, + -0.020554 0.042725 0.05304, -0.010422 0.045105 0.05304, 1.5e-005 0.045837 0.05304, 0.051224 -0.154968 0.056763, + 0.048538 -0.09491 0.056519, 0.043991 -0.035034 0.056091, 0.058548 -0.154724 0.052734, 0.058884 -0.154724 0.052246, + 0.059067 -0.154724 0.051697, 0.055771 -0.094482 0.052734, 0.056137 -0.094482 0.052246, 0.05632 -0.094482 0.051697, + 0.051193 -0.034424 0.052734, 0.051559 -0.034363 0.052246, 0.051773 -0.034363 0.051697, 0.044754 0.025635 0.052734, + 0.04512 0.025635 0.052307, 0.045364 0.025696 0.051758, 0.037064 0.026062 0.055664, 0.035965 0.028015 0.055664, + 0.034439 0.029663 0.055725, 0.03981 0.033752 0.052795, 0.039993 0.034058 0.052307, 0.040115 0.034241 0.051819, + 0.030472 0.039307 0.052734, 0.030594 0.039612 0.052307, 0.030716 0.039795 0.051819, 0.020706 0.043152 0.052734, + 0.020828 0.043518 0.052307, 0.020889 0.043762 0.051819, 0.010452 0.045532 0.052734, 0.010513 0.045898 0.052307, + 0.010574 0.046143 0.051819, 0.009598 0.039795 0.05542, 0.018936 0.037598 0.055481, 0.027908 0.034058 0.055481, + 0.020279 0.031311 0.058044, 0.013687 0.033386 0.058044, 0.006912 0.034607 0.058044, -0.020248 0.031311 0.058044, + -0.013657 0.033386 0.058044, -0.006882 0.034607 0.058044, -1.5e-005 -0.152527 0.060852, -1.5e-005 -0.089966 0.060364, + -1.5e-005 -0.027466 0.05957, 0.030411 0.024292 0.058167, 0.029495 0.026001 0.058167, 0.028214 0.027466 0.058167, + 0.037033 -0.036804 0.059387, 0.052139 -0.223267 0.056824, 0.059433 -0.223267 0.052795, 0.059738 -0.223267 0.052368, + 0.059921 -0.223267 0.05188, 0.059097 -0.154663 0.050415, 0.056351 -0.094421 0.050415, 0.051804 -0.034241 0.050415, + 0.044876 0.028198 0.050354, 0.043839 0.030457 0.050354, 0.042374 0.032471 0.050354, 0.044205 0.027954 0.052734, + 0.044571 0.028076 0.052307, 0.044815 0.028198 0.051758, 0.043228 0.03009 0.052734, 0.043594 0.030273 0.052307, + 0.043777 0.030396 0.051758, 0.041885 0.031982 0.052734, 0.04213 0.032227 0.052307, 0.042313 0.03241 0.051758, + -0.031662 0.039429 0.050415, -0.021774 0.043518 0.050415, -0.011093 0.046143 0.050415, 1.5e-005 0.046997 0.050415, + 0.011063 0.046143 0.050415, 0.021744 0.043518 0.050415, 0.031631 0.039429 0.050415, -0.039841 0.033752 0.052795, + -0.040024 0.034058 0.052307, -0.040146 0.034241 0.051819, -0.037033 0.026062 0.055664, -0.035934 0.028015 0.055664, + -0.034409 0.029663 0.055725, -0.041855 0.031982 0.052734, -0.04216 0.032227 0.052307, -0.042282 0.03241 0.051758, + -0.043259 0.03009 0.052734, -0.043564 0.030273 0.052307, -0.043808 0.030396 0.051758, -0.044174 0.027954 0.052734, + -0.044601 0.028076 0.052307, -0.044846 0.028198 0.051758, -0.044724 0.025635 0.052734, -0.045151 0.025635 0.052307, + -0.045395 0.025696 0.051758, -0.051193 -0.034424 0.052734, -0.051559 -0.034363 0.052246, -0.051773 -0.034363 0.051697, + -0.055801 -0.094482 0.052734, -0.056137 -0.094482 0.052246, -0.05632 -0.094482 0.051697, -0.058548 -0.154724 0.052734, + -0.058884 -0.154724 0.052246, -0.059067 -0.154724 0.051697, -0.051254 -0.154968 0.056763, -0.048538 -0.09491 0.056519, + -0.043991 -0.035034 0.056091, -0.037033 -0.036804 0.059387, -0.03038 0.024292 0.058167, -0.029465 0.026001 0.058167, + -0.028183 0.027466 0.058167, -0.059433 -0.223267 0.052795, -0.059738 -0.223267 0.052368, -0.059952 -0.223267 0.05188, + -0.052139 -0.223267 0.056824, -0.044907 0.028198 0.050354, -0.043869 0.030457 0.050354, -0.042343 0.032471 0.050354, + -0.059097 -0.154663 0.050415, -0.056351 -0.094421 0.050415, -0.051804 -0.034241 0.050415, -0.012253 0.04187 0.051025, + 1.5e-005 0.04303 0.051025, 0.012222 0.04187 0.051025, -0.048508 -0.152161 0.055786, -0.045822 -0.093323 0.055481, + -0.041428 -0.034607 0.054993, 0.055099 -0.154663 0.051025, 0.052597 -0.098328 0.051025, 0.048508 -0.042053 0.051025, + 0.048508 -0.152161 0.055786, 0.045822 -0.093323 0.055481, 0.041428 -0.034607 0.054993, 0.040848 0.021729 0.051331, + 0.036758 0.028931 0.051331, 0.030838 0.034668 0.051331, 0.008621 0.037109 0.054382, 0.017044 0.035278 0.054382, + 0.025162 0.032288 0.054443, -0.008591 0.037109 0.054382, -0.017075 0.035278 0.054382, -0.025131 0.032288 0.054443, + -0.040878 0.021729 0.051331, -0.036728 0.028931 0.051331, -0.030869 0.034668 0.051331, -0.033493 0.025024 0.054749, + -0.032516 0.026733 0.054749, -0.031174 0.028137 0.054749, -0.034958 -0.03595 0.057617, -1.5e-005 -0.150024 0.058838, + -1.5e-005 -0.088989 0.05835, -1.5e-005 -0.028015 0.057617, 0.034958 -0.03595 0.057617, 0.033524 0.025024 0.054749, + 0.032547 0.026733 0.054749, 0.031143 0.028137 0.054749, 0.019547 0.02948 0.056335, 0.013199 0.031433 0.056335, + 0.006668 0.032593 0.056335, -0.019577 0.02948 0.056335, -0.013229 0.031433 0.056335, -0.006638 0.032593 0.056335, + -0.028549 0.02356 0.056458, -0.027878 0.024841 0.056458, -0.026901 0.02594 0.056458, 0.028519 0.02356 0.056458, + 0.027847 0.024841 0.056458, 0.026871 0.02594 0.056458, -0.055099 -0.154663 0.051025, -0.052597 -0.098328 0.051025, + -0.048508 -0.042053 0.051025, -0.009567 0.039795 0.05542, -0.018967 0.037598 0.055481, -0.027878 0.034058 0.055481, + -0.010483 0.045532 0.052734, -0.010544 0.045898 0.052307, -0.010544 0.046143 0.051819, -0.020676 0.043152 0.052734, + -0.020798 0.043518 0.052307, -0.020859 0.043762 0.051819, -0.030441 0.039307 0.052734, -0.030624 0.039612 0.052307, + -0.030685 0.039795 0.051819, 0.006851 0.03418 0.057495, 0.039261 -0.066467 0.059082, 0.041336 0.031494 0.05304, + -0.039261 -0.066467 0.059082, -0.023483 0.037476 0.05249, 0.023514 0.037476 0.05249, -0.036972 0.023865 0.053711, + -0.038254 0.02417 0.053223, -0.038925 0.024292 0.05304, -0.039291 0.024414 0.052917, 0.006302 0.032288 0.056091, + -0.006332 0.032288 0.056091, -0.037155 -0.065186 0.057617, 0.037155 -0.065186 0.057617, -0.006821 0.03418 0.057495, + 0.05809 -0.154663 0.053101, 0.059006 -0.215027 0.053101, 0.050705 -0.034302 0.05304, 0.055313 -0.094421 0.053101, + 0.044266 0.025513 0.05304, 0.044754 0.025574 0.052734, 0.04512 0.025574 0.052307, 0.045364 0.025635 0.051758, + 0.045486 0.025635 0.051208, 0.037613 0.023926 0.055603, 0.044266 0.025574 0.05304, 0.044266 0.025513 0.05304, + 0.030838 0.0224 0.057739, 0.039871 0.033142 0.05304, 0.039566 0.033386 0.05304, 0.039261 0.03363 0.05304, + 0.039505 0.033997 0.052734, 0.039688 0.034302 0.052307, 0.03981 0.034485 0.051819, 0.020584 0.042725 0.05304, + 0.010391 0.045105 0.05304, 1.5e-005 0.045837 0.05304, 0.039261 0.03363 0.05304, 0.030228 0.038879 0.05304, + 0.033279 0.031189 0.055481, 0.026566 0.028564 0.057617, 0.020279 0.031311 0.057556, 0.013687 0.033386 0.057556, + 1.5e-005 0.034973 0.058472, 1.5e-005 0.034973 0.057495, 0.026566 0.028564 0.058655, 0.006912 0.034607 0.058533, + 0.013687 0.033386 0.058533, 1.5e-005 0.034973 0.058472, -0.026596 0.028564 0.058655, -0.013657 0.033386 0.058533, + -0.006882 0.034607 0.058533, 0.030838 0.0224 0.057739, 0.030411 0.024292 0.057739, 0.030838 0.0224 0.058716, + 0.029495 0.026001 0.058655, 0.029495 0.026001 0.057678, 0.026566 0.028564 0.057617, 0.028214 0.027466 0.058655, + 0.026566 0.028564 0.058655, 0.041458 -0.09613 0.060425, 0.044113 -0.155518 0.059875, 0.041458 -0.09613 0.059448, + 0.044998 -0.215027 0.059998, 0.044113 -0.155518 0.060852, 0.037033 -0.036804 0.059753, 0.037033 -0.036804 0.058716, + 0.030838 0.0224 0.057739, 0.030838 0.0224 0.058716, 0.044998 -0.215027 0.059998, 0.044998 -0.215027 0.060974, + 0.052139 -0.215027 0.056824, 0.044998 -0.215027 0.059998, 0.059006 -0.231506 0.053101, 0.059433 -0.215027 0.052795, + 0.059006 -0.215027 0.053101, 0.059738 -0.215027 0.052368, 0.060013 -0.215027 0.051392, 0.060013 -0.231506 0.051392, + 0.060013 -0.215027 0.051392, 0.059097 -0.154602 0.051331, 0.056351 -0.09436 0.051331, 0.051804 -0.034241 0.05127, + 0.045486 0.025635 0.051208, 0.045425 0.025757 0.051208, 0.045486 0.025696 0.051208, 0.044754 0.025696 0.052734, + 0.044266 0.025635 0.05304, 0.043716 0.027771 0.05304, 0.042801 0.029846 0.05304, 0.040115 0.033508 0.052734, + 0.039871 0.033142 0.05304, 0.040298 0.033813 0.052307, 0.04512 0.025757 0.052307, 0.045364 0.025757 0.051758, + 0.044876 0.028198 0.051208, 0.043839 0.030457 0.051208, 0.045425 0.025757 0.051208, 0.040421 0.034058 0.051819, + 0.040482 0.034119 0.05127, 1.5e-005 0.046997 0.05127, 0.010574 0.046204 0.05127, 0.020889 0.043823 0.05127, + 0.030716 0.039917 0.05127, 0.039871 0.034546 0.05127, 0.040176 0.034302 0.05127, -0.039902 0.034546 0.05127, + -0.040207 0.034302 0.05127, -0.03923 0.03363 0.05304, -0.039536 0.033386 0.05304, -0.040146 0.033508 0.052734, + -0.040329 0.033813 0.052307, -0.040451 0.034058 0.051819, -0.039841 0.033142 0.05304, -0.041489 0.031616 0.05304, + -0.042831 0.029846 0.05304, -0.044235 0.025635 0.05304, -0.044724 0.025696 0.052734, -0.044296 0.025513 0.05304, + -0.044235 0.025574 0.05304, -0.045151 0.025757 0.052307, -0.045395 0.025757 0.051758, -0.045456 0.025757 0.051208, + -0.044785 0.025574 0.052734, -0.045151 0.025574 0.052307, -0.045395 0.025635 0.051758, -0.030869 0.0224 0.057739, + -0.037643 0.023926 0.055603, -0.05809 -0.154663 0.053101, -0.059036 -0.215027 0.053101, -0.055313 -0.094421 0.053101, + -0.044296 0.025513 0.05304, -0.050705 -0.034302 0.05304, -0.044998 -0.215027 0.059998, -0.044998 -0.215027 0.060974, + -0.044113 -0.155518 0.060852, -0.044113 -0.155518 0.059875, -0.041458 -0.09613 0.060425, -0.037033 -0.036804 0.058716, + -0.041458 -0.09613 0.059448, -0.037033 -0.036804 0.059753, -0.030869 0.0224 0.057739, -0.03038 0.024292 0.057739, + -0.030869 0.0224 0.058716, -0.029465 0.026001 0.057678, -0.029465 0.026001 0.058655, -0.028183 0.027466 0.058655, + -0.026596 0.028564 0.058655, -0.026596 0.028564 0.057617, -0.044998 -0.215027 0.060974, -0.044998 -0.215027 0.059998, + -1.5e-005 -0.215027 0.060974, -0.044998 -0.215027 0.060974, 0.044998 -0.231506 0.060974, 0.044998 -0.215027 0.060974, + 0.044998 -0.231506 0.059998, 0.044998 -0.231506 0.060974, 0.052139 -0.231506 0.056824, 0.059006 -0.231506 0.053101, + -0.044998 -0.231506 0.060974, 0.059921 -0.231506 0.05188, 0.059738 -0.231506 0.052368, 0.060013 -0.231506 0.051392, + 0.060013 -0.231506 0.0495, -0.059433 -0.231506 0.052795, -0.059036 -0.215027 0.053101, -0.059433 -0.215027 0.052795, + -0.059738 -0.215027 0.052368, -0.060013 -0.215027 0.051392, -0.059738 -0.231506 0.052368, -0.060013 -0.231506 0.051392, + -0.059036 -0.215027 0.053101, -0.059036 -0.231506 0.053101, -0.052139 -0.231506 0.056824, -0.044998 -0.231506 0.059998, + -0.044998 -0.215027 0.059998, -0.052139 -0.215027 0.056824, -0.060013 -0.231506 0.051392, -0.060013 -0.231506 0.0495, + -0.060013 -0.215027 0.051392, 0.031204 0.039673 0.0495, 0.021255 0.043701 0.0495, 0.010757 0.046143 0.0495, + 0.043839 0.030457 0.0495, 0.044876 0.028198 0.0495, 0.040482 0.034119 0.0495, 1.5e-005 0.046997 0.0495, + -0.010727 0.046143 0.0495, -0.031235 0.039673 0.0495, -0.021225 0.043701 0.0495, -0.040512 0.034119 0.0495, + 0.045425 0.025757 0.0495, 0.051804 -0.034241 0.0495, 0.056351 -0.094421 0.0495, 0.059097 -0.154663 0.0495, + 0.060013 -0.215027 0.0495, 0.060013 -0.231506 0.0495, -0.060013 -0.231506 0.0495, -0.045456 0.025757 0.051208, + -0.043869 0.030457 0.051208, -0.044907 0.028198 0.0495, -0.043869 0.030457 0.0495, -0.042343 0.032471 0.051208, + -0.040512 0.034119 0.05127, -0.040512 0.034119 0.0495, -0.060013 -0.215027 0.051392, -0.059097 -0.154602 0.051331, + -0.056351 -0.09436 0.051331, -0.060013 -0.215027 0.0495, -0.059097 -0.154663 0.0495, -0.056351 -0.094421 0.0495, + -0.051804 -0.034241 0.0495, -0.051804 -0.034241 0.05127, -0.045456 0.025635 0.051208, -0.045456 0.025696 0.051208, + -0.045456 0.025757 0.051208, -0.045456 0.025757 0.0495, -0.012131 0.04187 0.0495, -0.023849 0.038513 0.0495, + 1.5e-005 0.04303 0.0495, 0.012161 0.04187 0.0495, -0.012131 0.04187 0.05249, -0.023849 0.038513 0.05249, + 1.5e-005 0.04303 0.05249, 0.012161 0.04187 0.05249, 0.02388 0.038513 0.05249, -0.053268 -0.112793 0.05249, + -0.050125 -0.066284 0.05249, -0.045853 -0.020935 0.05249, -0.055252 -0.159973 0.05249, -0.055984 -0.210999 0.052551, + -0.049606 -0.210999 0.055847, -0.055984 -0.210999 0.0495, 0.055984 -0.210999 0.0495, 0.055099 -0.154602 0.0495, + 0.053574 -0.116394 0.05249, 0.055252 -0.159973 0.05249, 0.042801 0.013977 0.0495, 0.048508 -0.042053 0.0495, + 0.052597 -0.098328 0.0495, 0.050919 -0.072815 0.05249, 0.042801 0.013977 0.05249, 0.049606 -0.210999 0.055847, + 0.042984 -0.210999 0.058655, 0.053268 -0.112793 0.05249, 0.050125 -0.066284 0.05249, 0.045853 -0.020935 0.05249, + 0.055771 -0.185486 0.05249, 0.055252 -0.159973 0.05249, 0.040665 0.022278 0.05249, 0.055984 -0.210999 0.052551, + 0.040787 0.021851 0.0495, 0.042801 0.013977 0.0495, 0.042007 0.018188 0.05249, 0.042801 0.013977 0.05249, + 0.040665 0.022278 0.05249, 0.040115 0.023376 0.052612, 0.036758 0.028931 0.0495, 0.03096 0.034607 0.0495, + 0.031021 0.034546 0.05249, 0.02388 0.038513 0.0495, 0.027542 0.036804 0.05249, 0.02388 0.038513 0.05249, + 0.008072 0.041809 0.05249, 0.016006 0.040344 0.05249, 0.031021 0.034546 0.05249, 0.032913 0.03302 0.052673, + -0.015976 0.040344 0.05249, -0.008041 0.041809 0.05249, 1.5e-005 0.037659 0.054382, 1.5e-005 0.042297 0.05249, + -0.030991 0.034546 0.05249, 1.5e-005 0.03302 0.05603, -0.039597 0.024475 0.052795, -0.040146 0.023376 0.052612, + -0.042038 0.018188 0.05249, -0.042831 0.013977 0.05249, -0.042831 0.013977 0.0495, -0.040634 0.022278 0.05249, + -0.040817 0.021851 0.0495, -0.030991 0.034546 0.05249, -0.032944 0.03302 0.052673, -0.023849 0.038513 0.0495, + -0.023849 0.038513 0.05249, -0.027573 0.036804 0.05249, -0.036728 0.028931 0.0495, -0.030991 0.034607 0.0495, + -0.028915 0.021973 0.056213, -0.034286 0.023193 0.054626, -0.039597 0.024475 0.052795, -0.037277 0.028259 0.053101, + -0.034714 0.031311 0.052979, -0.029953 0.029419 0.054626, -0.042984 -0.210999 0.058655, -0.042038 -0.152649 0.058472, + -0.039352 -0.094299 0.057983, -0.034988 -0.036072 0.057251, -0.028915 0.021973 0.056213, -0.028915 0.022034 0.056213, + 0.042984 -0.210999 0.059021, -0.042984 -0.210999 0.059021, -0.042038 -0.152588 0.058838, -0.039352 -0.094238 0.058411, + -0.034958 -0.03595 0.057739, 0.039352 -0.094238 0.058411, 0.039352 -0.094299 0.057983, 0.042038 -0.152649 0.058472, + 0.042038 -0.152588 0.058838, 0.042984 -0.210999 0.058655, 0.042984 -0.210999 0.059021, 0.034958 -0.03595 0.057739, + 0.028885 0.022156 0.056763, 0.028885 0.021973 0.056213, 0.034958 -0.036072 0.057251, 0.034317 0.023193 0.054626, + 0.028885 0.021973 0.056213, 0.028885 0.022034 0.056213, 0.039627 0.024475 0.052795, 0.037247 0.028259 0.053101, + 0.034683 0.031311 0.052979, 0.029922 0.029419 0.054626, 0.024612 0.027283 0.056213, 0.02565 0.026794 0.056641, + 0.025101 0.027039 0.056213, 0.018753 0.029785 0.056152, 0.013199 0.031433 0.05658, 0.01265 0.031555 0.056091, + 0.006668 0.032593 0.056519, -0.024643 0.027283 0.056213, -0.013229 0.031433 0.05658, -0.018784 0.029785 0.056152, + -0.025131 0.027039 0.056213, -0.025681 0.026794 0.056152, 1.5e-005 0.03302 0.056519, -0.006638 0.032593 0.056519, + -0.012619 0.031555 0.056091, 1.5e-005 0.03302 0.05603, -0.027878 0.024841 0.056702, -0.028854 0.022156 0.056763, + -0.028854 0.022156 0.056213, -0.028549 0.02356 0.056152, -0.027878 0.024841 0.056152, -0.026901 0.02594 0.056702, + -0.025681 0.026794 0.056641, -0.025681 0.026794 0.056152, 0.028519 0.02356 0.056152, 0.028885 0.022156 0.056213, + 0.028885 0.022156 0.056763, 0.027847 0.024841 0.056702, 0.026871 0.02594 0.056702, 0.027847 0.024841 0.056152, + 0.02565 0.026794 0.056152, 0.02565 0.026794 0.056641, -0.055771 -0.185486 0.05249, -0.055984 -0.210999 0.052551, + -0.055984 -0.210999 0.0495, -0.055252 -0.159973 0.05249, -0.055099 -0.154602 0.0495, -0.053574 -0.116394 0.05249, + -0.050919 -0.072815 0.05249, -0.042831 0.013977 0.05249, -0.048508 -0.042053 0.0495, -0.052597 -0.098328 0.0495, + -0.042831 0.013977 0.0495, 1.5e-005 0.040527 0.05542, -0.033249 0.031189 0.055481, -0.013657 0.033386 0.057556, + -0.020248 0.031311 0.057556, -0.026596 0.028564 0.057617, 1.5e-005 0.034973 0.057495, -0.020554 0.042725 0.05304, + -0.010422 0.045105 0.05304, 1.5e-005 0.045837 0.05304, 1.5e-005 0.046326 0.052734, 1.5e-005 0.046692 0.052307, + -0.030258 0.038879 0.05304, -0.03923 0.03363 0.05304, -0.039719 0.034302 0.052307, -0.039536 0.033997 0.052734, + 1.5e-005 0.046936 0.051819, -0.010544 0.046204 0.05127, -0.02092 0.043823 0.05127, 1.5e-005 0.046997 0.05127, + -0.039841 0.034485 0.051819, -0.030746 0.039917 0.05127, -0.039902 0.034546 0.05127, -0.05275 -0.101685 -0.047668, + -0.047012 -0.093506 -0.05011, -0.041031 -0.085083 -0.052246, -0.040909 -0.0849 -0.052246, -0.040756 -0.084717 -0.052307, + -0.038834 -0.057922 -0.052002, -0.036545 -0.031128 -0.051636, -0.030869 0.0224 -0.05072, -0.037643 0.023926 -0.048645, + -0.044296 0.025513 -0.046021, -0.050705 -0.034302 -0.046082, -0.055313 -0.094421 -0.046082, -0.05809 -0.154663 -0.046082, + -0.059036 -0.215027 -0.046082, -0.052139 -0.215027 -0.049805, -0.044998 -0.215027 -0.052979, -0.044968 -0.202454 -0.052979, + -0.044846 -0.18988 -0.052979, -0.04921 -0.179199 -0.051025, -0.053513 -0.168579 -0.048828, -0.054001 -0.166992 -0.048523, + -0.054153 -0.165466 -0.048462, -0.054214 -0.135742 -0.047852, -0.054276 -0.106384 -0.047058, -0.053909 -0.104004 -0.04718, + -0.053452 -0.102783 -0.047363, -0.040756 -0.084595 -0.050171, -0.040756 -0.084595 -0.049927, -0.040756 -0.084595 -0.049683, + -0.040909 -0.084595 -0.04248, -0.054672 -0.104248 -0.04248, -0.054489 -0.104065 -0.044556, -0.047775 -0.094543 -0.047607, + -0.049942 -0.098633 -0.079956, -0.048203 -0.096069 -0.077454, -0.047562 -0.095093 -0.07605, -0.047073 -0.09436 -0.074524, + -0.041031 -0.085083 -0.052246, -0.040756 -0.084595 -0.050171, -0.03685 -0.034729 -0.049622, -0.034439 -0.009827 -0.049255, + -0.031723 0.015015 -0.048828, -0.031723 0.015015 -0.04248, -0.03685 -0.034729 -0.04248, -0.038956 -0.059631 -0.04248, + -0.040756 -0.084595 -0.04248, -0.040756 -0.084595 -0.049683, -0.031723 0.015015 -0.05188, -0.03688 -0.03479 -0.052673, + -0.038956 -0.059753 -0.05304, -0.040756 -0.084717 -0.053345, -0.040756 -0.084839 -0.053345, -0.040756 -0.084961 -0.053345, + -0.040817 -0.085571 -0.055542, -0.040878 -0.08667 -0.058472, -0.040939 -0.087708 -0.061035, -0.041031 -0.088806 -0.06366, + -0.039169 -0.0625 -0.062744, -0.037003 -0.036255 -0.061829, -0.036606 -0.032043 -0.061462, -0.036209 -0.027832 -0.060791, + -0.034195 -0.007324 -0.056519, -0.031967 0.013184 -0.052246, -0.031723 0.015015 -0.051941, -0.03154 0.016846 -0.05188, + -0.031601 0.01593 -0.05188, -0.054428 -0.135193 -0.045471, -0.054367 -0.166626 -0.046082, -0.049515 -0.178528 -0.048645, + -0.044632 -0.190491 -0.050903, -0.043747 -0.190491 -0.05127, -0.042862 -0.190491 -0.051636, -0.042953 -0.200745 -0.051636, + -0.042984 -0.210999 -0.051636, -0.049606 -0.210999 -0.048828, -0.055984 -0.210999 -0.045532, -0.055771 -0.185486 -0.045532, + -0.055252 -0.159973 -0.045471, -0.053268 -0.112793 -0.045471, -0.050125 -0.066284 -0.045471, -0.045853 -0.020935 -0.045471, + -0.040634 0.022278 -0.045471, -0.040146 0.023376 -0.045654, -0.039597 0.024475 -0.045776, -0.034286 0.023193 -0.047668, + -0.028915 0.021973 -0.049194, -0.029343 0.018494 -0.049255, -0.029709 0.015015 -0.049316, -0.030746 0.015015 -0.049072, + -0.054672 -0.166016 -0.04248, -0.051193 -0.171204 -0.082153, -0.051163 -0.169373 -0.08252, -0.051163 -0.167603 -0.082703, + -0.051163 -0.107483 -0.082703, -0.051193 -0.105225 -0.082458, -0.051224 -0.103088 -0.081909, -0.054276 -0.106384 -0.047058, + -0.040909 -0.084595 -0.04248, -0.040756 -0.084595 -0.04248, 0.020523 0.015015 -0.04248, 0.027664 -0.190491 -0.04248, + -0.044785 -0.190491 -0.04248, -0.054672 -0.166016 -0.04248, -0.029709 0.015015 -0.049866, 0.019852 0.015015 -0.049866, + 0.020523 0.015015 -0.04248, -0.042862 -0.190491 -0.051636, -0.042862 -0.190491 -0.052002, -0.042953 -0.200745 -0.052002, + -0.042984 -0.210999 -0.052002, -0.042984 -0.210999 -0.051636, -0.028915 0.022034 -0.049194, -0.028854 0.022156 -0.049194, + -0.028854 0.022156 -0.049744, -0.029282 0.018555 -0.049805, -0.044785 -0.190491 -0.04248, 0.02684 -0.190491 -0.052002, + -0.042862 -0.190491 -0.052002, -0.045151 -0.189087 -0.053955, -0.048325 -0.180298 -0.074646, -0.04924 -0.177795 -0.07843, + -0.049911 -0.176086 -0.079956, -0.050705 -0.174072 -0.081177, -0.053513 -0.168579 -0.048828, -0.044846 -0.18988 -0.053467, + -0.044846 -0.189819 -0.053955, -0.044998 -0.189453 -0.053955, -0.043167 -0.190491 -0.053955, -0.046463 -0.181396 -0.075378, + -0.047043 -0.181335 -0.075256, -0.047592 -0.181091 -0.075073, -0.048019 -0.180786 -0.07489, -0.048325 -0.180298 -0.074646, + -0.044815 -0.189697 -0.053955, -0.044327 -0.190125 -0.053955, -0.043747 -0.19043 -0.053955, 0.024673 -0.190491 -0.053955, + 0.022476 -0.181396 -0.075378, -0.03154 0.016846 -0.05188, 0.017776 0.016846 -0.05188, 0.018448 0.015015 -0.05188, + 0.018997 0.013123 -0.051941, 0.019608 0.010254 -0.051941, 0.019974 0.005249 -0.052063, 0.02327 -0.091553 -0.053406, + 0.026596 -0.188354 -0.053955, 0.026443 -0.189209 -0.053955, 0.026016 -0.18988 -0.053955, 0.025406 -0.190369 -0.053955, + 0.024673 -0.190491 -0.053955, -0.044968 -0.202393 -0.054016, -0.044998 -0.215027 -0.054016, -1.5e-005 -0.215027 -0.054016, + 0.044998 -0.215027 -0.054016, 0.044113 -0.155518 -0.053833, 0.041458 -0.09613 -0.053406, 0.037033 -0.036804 -0.052734, + 0.030838 0.0224 -0.051758, 0.029495 0.026001 -0.051697, 0.028214 0.027466 -0.051636, 0.026566 0.028564 -0.051636, + 0.013687 0.033386 -0.051514, 0.006912 0.034607 -0.051514, 1.5e-005 0.034973 -0.051514, -0.006882 0.034607 -0.051514, + -0.013657 0.033386 -0.051514, -0.026596 0.028564 -0.051636, -0.028183 0.027466 -0.051636, -0.029465 0.026001 -0.051697, + -0.030869 0.0224 -0.051758, -0.031174 0.019653 -0.051819, 0.017899 0.013184 -0.052246, 0.017838 0.015015 -0.051941, + 0.017776 0.016846 -0.05188, -0.03154 0.016846 -0.05188, -0.03154 0.016846 -0.05188, 0.018204 0.013184 -0.052246, + 0.018448 0.013184 -0.052185, 0.018997 0.013123 -0.051941, 0.017899 0.013184 -0.052246, 0.01857 -0.027832 -0.060791, + 0.019302 -0.027832 -0.060669, 0.019913 -0.027893 -0.060303, 0.02037 -0.028015 -0.059692, 0.020554 -0.028137 -0.059021, + 0.019974 0.005249 -0.052063, 0.018753 -0.036255 -0.061829, 0.018661 -0.032043 -0.061462, 0.01857 -0.027832 -0.060791, + 0.019485 -0.036255 -0.061646, 0.020126 -0.036255 -0.061279, 0.020554 -0.036255 -0.060669, 0.020767 -0.036255 -0.059998, + 0.020645 -0.032166 -0.059692, 0.020554 -0.028137 -0.059021, 0.022476 -0.090088 -0.06189, 0.020767 -0.036255 -0.059998, + 0.020432 -0.088806 -0.06366, 0.021225 -0.088928 -0.063477, 0.021866 -0.089233 -0.063049, 0.022293 -0.089661 -0.0625, + 0.0233 -0.087769 -0.051331, 0.02684 -0.190491 -0.052002, 0.02153 -0.095398 -0.074707, 0.021317 -0.097412 -0.077942, + 0.021194 -0.10022 -0.080505, 0.021164 -0.103638 -0.082092, 0.021255 -0.107422 -0.082703, 0.023361 -0.167542 -0.082703, + 0.023544 -0.171265 -0.082153, 0.023788 -0.174683 -0.080505, 0.024124 -0.17749 -0.078003, 0.02446 -0.179504 -0.074768, + 0.026596 -0.188354 -0.053955, -0.027878 0.024841 -0.049683, -0.026901 0.02594 -0.049683, -0.025681 0.026794 -0.049683, + -0.013229 0.031433 -0.049561, -0.006638 0.032593 -0.049561, 1.5e-005 0.03302 -0.049561, 0.006668 0.032593 -0.049561, + 0.013199 0.031433 -0.049561, 0.02565 0.026794 -0.049683, 0.026871 0.02594 -0.049683, 0.027847 0.024841 -0.049683, + 0.028885 0.022156 -0.049744, 0.034958 -0.03595 -0.05072, 0.039352 -0.094238 -0.051392, 0.042038 -0.152588 -0.051819, + 0.042984 -0.210999 -0.052002, -0.042984 -0.210999 -0.052002, -0.028549 0.02356 -0.049133, -0.027878 0.024841 -0.049133, + -0.025681 0.026794 -0.049194, -0.037277 0.028259 -0.046082, -0.034714 0.031311 -0.045959, -0.029953 0.029419 -0.047668, + -0.024643 0.027283 -0.049194, -0.025131 0.027039 -0.049194, -0.025681 0.026794 -0.049194, -0.040634 0.022278 -0.045471, + -0.042038 0.018188 -0.045471, -0.042831 0.013977 -0.045471, -0.042831 0.013977 -0.04248, -0.040817 0.021851 -0.04248, + -0.036728 0.028931 -0.04248, -0.030991 0.034607 -0.04248, -0.023849 0.038513 -0.04248, -0.023849 0.038513 -0.045471, + -0.027573 0.036804 -0.045471, -0.030991 0.034546 -0.045471, -0.032944 0.03302 -0.045715, -0.034714 0.031311 -0.045959, + 0.055252 -0.159973 -0.045471, 0.053268 -0.112793 -0.045471, 0.050125 -0.066284 -0.045471, 0.045853 -0.020935 -0.045471, + 0.040665 0.022278 -0.045471, 0.042007 0.018188 -0.045471, 0.042801 0.013977 -0.045471, 0.050919 -0.072815 -0.045471, + 0.053574 -0.116394 -0.045471, -0.053574 -0.116394 -0.045471, -0.050919 -0.072815 -0.045471, -0.042831 0.013977 -0.045471, + -0.023849 0.038513 -0.045471, -0.012131 0.04187 -0.045471, 1.5e-005 0.04303 -0.045471, 0.012161 0.04187 -0.045471, + 0.02388 0.038513 -0.045471, 0.027542 0.036804 -0.045471, 0.031021 0.034546 -0.045471, 0.016006 0.040344 -0.045471, + 0.008072 0.041809 -0.045471, 1.5e-005 0.042297 -0.045471, -0.008041 0.041809 -0.045471, -0.015976 0.040344 -0.045471, + -0.030991 0.034546 -0.045471, 0.055984 -0.210999 -0.045532, 0.049606 -0.210999 -0.048828, 0.042984 -0.210999 -0.051636, + 0.042038 -0.152649 -0.051453, 0.039352 -0.094299 -0.051025, 0.034958 -0.036072 -0.050232, 0.028885 0.021973 -0.049194, + 0.034317 0.023193 -0.047668, 0.039627 0.024475 -0.045776, 0.040115 0.023376 -0.045654, 0.040665 0.022278 -0.045471, + 0.055771 -0.185486 -0.045532, 0.055984 -0.210999 -0.04248, -0.055984 -0.210999 -0.04248, -0.055984 -0.210999 -0.045532, + 0.042984 -0.210999 -0.051636, 0.060013 -0.231506 -0.04248, -0.060013 -0.231506 -0.04248, -0.060013 -0.215027 -0.04248, + -0.059097 -0.154663 -0.04248, -0.056351 -0.094421 -0.04248, -0.051804 -0.034241 -0.04248, -0.045456 0.025757 -0.04248, + -0.044907 0.028198 -0.04248, -0.043869 0.030457 -0.04248, -0.040512 0.034119 -0.04248, -0.031235 0.039673 -0.04248, + -0.021225 0.043701 -0.04248, -0.010727 0.046143 -0.04248, 1.5e-005 0.046997 -0.04248, 0.010757 0.046143 -0.04248, + 0.021255 0.043701 -0.04248, 0.031204 0.039673 -0.04248, 0.040482 0.034119 -0.04248, 0.043839 0.030457 -0.04248, + 0.044876 0.028198 -0.04248, 0.045425 0.025757 -0.04248, 0.051804 -0.034241 -0.04248, 0.056351 -0.094421 -0.04248, + 0.059097 -0.154663 -0.04248, 0.060013 -0.215027 -0.04248, 0.02388 0.038513 -0.04248, 0.012161 0.04187 -0.04248, + 1.5e-005 0.04303 -0.04248, -0.012131 0.04187 -0.04248, -0.023849 0.038513 -0.04248, -0.048508 -0.042053 -0.04248, + -0.052597 -0.098328 -0.04248, -0.055099 -0.154602 -0.04248, -0.055984 -0.210999 -0.04248, 0.055099 -0.154602 -0.04248, + 0.052597 -0.098328 -0.04248, 0.048508 -0.042053 -0.04248, 0.042801 0.013977 -0.04248, 0.040787 0.021851 -0.04248, + 0.036758 0.028931 -0.04248, 0.03096 0.034607 -0.04248, 0.060013 -0.231506 -0.044373, 0.059738 -0.231506 -0.045349, + 0.059433 -0.231506 -0.045776, 0.059006 -0.231506 -0.046082, 0.052139 -0.231506 -0.049805, 0.044998 -0.231506 -0.052979, + 0.044998 -0.231506 -0.054016, -0.044998 -0.231506 -0.054016, -0.044998 -0.231506 -0.052979, -0.052139 -0.231506 -0.049805, + -0.059036 -0.231506 -0.046082, -0.059738 -0.231506 -0.045349, -0.059921 -0.231506 -0.044861, -0.060013 -0.231506 -0.044373, + -0.060013 -0.231506 -0.04248, 0.060013 -0.215027 -0.044373, 0.059738 -0.215027 -0.045349, 0.059433 -0.215027 -0.045776, + 0.059006 -0.215027 -0.046082, 0.059006 -0.231506 -0.046082, 0.044266 0.025513 -0.046021, 0.050705 -0.034302 -0.046082, + 0.055313 -0.094421 -0.046082, 0.05809 -0.154663 -0.046082, 0.059006 -0.215027 -0.046082, 0.059097 -0.154602 -0.044373, + 0.056351 -0.09436 -0.044312, 0.051804 -0.034241 -0.04425, 0.045486 0.025635 -0.044189, 0.045364 0.025635 -0.044739, + 0.04512 0.025574 -0.045288, 0.044754 0.025574 -0.045715, 0.037613 0.023926 -0.048645, 0.030838 0.0224 -0.05072, + 0.037033 -0.036804 -0.051758, 0.041458 -0.09613 -0.052429, 0.044113 -0.155518 -0.052856, 0.044998 -0.215027 -0.052979, + 0.052139 -0.215027 -0.049805, 0.044266 0.025635 -0.046021, 0.042801 0.029846 -0.046021, 0.041519 0.031616 -0.046021, + 0.039871 0.033142 -0.046082, 0.039566 0.033386 -0.046082, 0.039261 0.03363 -0.046082, 0.033279 0.031189 -0.048462, + 0.026566 0.028564 -0.050598, 0.029495 0.026001 -0.050659, 0.030411 0.024292 -0.05072, 0.030838 0.0224 -0.05072, + 0.044266 0.025574 -0.046021, 0.044754 0.025696 -0.045715, 0.04512 0.025757 -0.045288, 0.045364 0.025757 -0.044739, + 0.045425 0.025757 -0.044189, 0.043839 0.030457 -0.044189, 0.042374 0.032471 -0.044189, 0.040482 0.034119 -0.04425, + 0.040421 0.034058 -0.0448, 0.040298 0.033813 -0.045349, 0.040115 0.033508 -0.045776, 0.045486 0.025696 -0.044189, + 0.060013 -0.215027 -0.04248, 0.045425 0.025757 -0.044189, 0.039871 0.034546 -0.04425, 0.040176 0.034302 -0.04425, + 0.040482 0.034119 -0.04425, -0.040512 0.034119 -0.04425, -0.040207 0.034302 -0.04425, -0.039902 0.034546 -0.04425, + -0.030746 0.039917 -0.04425, -0.02092 0.043823 -0.04425, -0.010544 0.046204 -0.04425, 1.5e-005 0.046997 -0.04425, + 0.010574 0.046204 -0.04425, 0.020889 0.043823 -0.04425, 0.030716 0.039917 -0.04425, 0.03981 0.034485 -0.0448, + 0.039688 0.034302 -0.045349, 0.039505 0.033997 -0.045776, 1.5e-005 0.045837 -0.046082, 0.010391 0.045105 -0.046082, + 0.020584 0.042725 -0.046082, 0.030228 0.038879 -0.046082, 0.039261 0.03363 -0.046082, 1.5e-005 0.046936 -0.0448, + 1.5e-005 0.046692 -0.045288, 1.5e-005 0.046326 -0.045715, 1.5e-005 0.040527 -0.048462, 1.5e-005 0.034973 -0.050476, + 0.013687 0.033386 -0.050537, 0.020279 0.031311 -0.050598, 0.026566 0.028564 -0.050598, 1.5e-005 0.045837 -0.046082, + -0.010422 0.045105 -0.046082, -0.020554 0.042725 -0.046082, -0.030258 0.038879 -0.046082, -0.03923 0.03363 -0.046082, + -0.033249 0.031189 -0.048462, -0.026596 0.028564 -0.050598, -0.020248 0.031311 -0.050598, -0.013657 0.033386 -0.050537, + 1.5e-005 0.034973 -0.050476, -0.039841 0.034485 -0.0448, -0.039719 0.034302 -0.045349, -0.039536 0.033997 -0.045776, + -0.039841 0.033142 -0.046082, -0.039536 0.033386 -0.046082, -0.03923 0.03363 -0.046082, -0.040451 0.034058 -0.0448, + -0.040329 0.033813 -0.045349, -0.040146 0.033508 -0.045776, -0.042831 0.029846 -0.046021, -0.043747 0.027771 -0.046021, + -0.044235 0.025635 -0.046021, -0.044235 0.025574 -0.046021, -0.044296 0.025513 -0.046021, -0.03038 0.024292 -0.05072, + -0.029465 0.026001 -0.050659, -0.026596 0.028564 -0.050598, -0.043869 0.030457 -0.044189, -0.044907 0.028198 -0.044189, + -0.045456 0.025757 -0.044189, -0.045395 0.025757 -0.044739, -0.045151 0.025757 -0.045288, -0.044724 0.025696 -0.045715, + -0.060013 -0.215027 -0.044373, -0.059097 -0.154602 -0.044373, -0.056351 -0.09436 -0.044312, -0.051804 -0.034241 -0.04425, + -0.045456 0.025635 -0.044189, -0.045456 0.025696 -0.044189, -0.045456 0.025757 -0.044189, -0.044785 0.025574 -0.045715, + -0.045151 0.025574 -0.045288, -0.045395 0.025635 -0.044739, -0.045456 0.025635 -0.044189, -0.059738 -0.215027 -0.045349, + -0.059433 -0.215027 -0.045776, -0.059036 -0.231506 -0.046082, -0.059036 -0.215027 -0.046082, -0.060013 -0.231506 -0.044373, + -0.044998 -0.215027 -0.052979, -0.044998 -0.215027 -0.054016, -0.044998 -0.215027 -0.052979, -0.040756 -0.084839 -0.052795, + -0.040756 -0.084961 -0.053345, -0.046768 -0.093994 -0.074768, -0.046371 -0.093811 -0.074951, -0.045425 -0.093628 -0.075256, + -0.040878 -0.08667 -0.058472, -0.049667 -0.098389 -0.080505, -0.049301 -0.098328 -0.080933, -0.048813 -0.098389 -0.081299, + -0.048294 -0.098572 -0.081543, -0.046555 -0.095642 -0.078674, -0.045914 -0.094482 -0.077026, -0.045425 -0.093628 -0.075256, + -0.049942 -0.098633 -0.079956, -0.050522 -0.09967 -0.080566, -0.050949 -0.100769 -0.081055, -0.051224 -0.103088 -0.081909, + -0.051041 -0.102844 -0.082581, -0.050583 -0.1026 -0.08313, -0.049973 -0.102478 -0.083496, -0.04924 -0.102356 -0.083618, + -0.049026 -0.100403 -0.082703, -0.048721 -0.099426 -0.082153, -0.048294 -0.098572 -0.081543, -0.050949 -0.107483 -0.083374, + -0.050522 -0.107483 -0.083984, -0.049881 -0.107483 -0.084351, -0.049179 -0.107483 -0.084473, -0.049179 -0.104919 -0.08429, + -0.04924 -0.102356 -0.083618, -0.050949 -0.167603 -0.083374, -0.050522 -0.167603 -0.083984, -0.049881 -0.167603 -0.084351, + -0.049179 -0.167603 -0.084473, -0.049179 -0.107483 -0.084473, -0.05101 -0.171387 -0.082825, -0.050552 -0.17157 -0.083435, + -0.049942 -0.171692 -0.083801, -0.04921 -0.171753 -0.083923, -0.049179 -0.169678 -0.084351, -0.049179 -0.167603 -0.084473, + -0.051193 -0.171204 -0.082153, -0.051102 -0.172668 -0.081726, -0.050705 -0.174072 -0.081177, -0.050461 -0.174316 -0.081787, + -0.050034 -0.174438 -0.082336, -0.049484 -0.174377 -0.082764, -0.048843 -0.174255 -0.082947, -0.049149 -0.173035 -0.083496, + -0.04921 -0.171753 -0.083923, -0.047379 -0.178528 -0.079773, -0.04805 -0.176514 -0.081543, -0.048843 -0.174255 -0.082947, + 0.02211 -0.179077 -0.079102, 0.021805 -0.175842 -0.082031, 0.02153 -0.171875 -0.083862, 0.021378 -0.167603 -0.084473, + -0.049179 -0.167603 -0.084473, 0.023148 -0.167542 -0.083374, 0.02272 -0.167542 -0.083984, 0.022079 -0.167542 -0.084351, + 0.021378 -0.167603 -0.084473, 0.023239 -0.181213 -0.075378, 0.02388 -0.180786 -0.075256, 0.024307 -0.180176 -0.075073, + 0.021072 -0.107422 -0.083374, 0.020615 -0.107422 -0.083984, 0.020004 -0.107483 -0.084351, 0.019272 -0.107483 -0.084473, + 0.021378 -0.167603 -0.084473, 0.021347 -0.094727 -0.074951, 0.02092 -0.094177 -0.075134, 0.020279 -0.093811 -0.075256, + 0.019547 -0.093628 -0.075256, 0.019333 -0.095947 -0.079041, 0.019211 -0.099182 -0.08197, 0.01918 -0.103149 -0.083862, + 0.019272 -0.107483 -0.084473, 0.020432 -0.088806 -0.06366, 0.020401 -0.088806 -0.06366, 0.019547 -0.093628 -0.075256, + 0.020401 -0.088806 -0.06366, 0.019547 -0.093628 -0.075256, 0.019272 -0.107483 -0.084473, -0.026596 0.028564 -0.050598, + 1.5e-005 0.034973 -0.051514, 1.5e-005 0.034973 -0.050476, 0.026566 0.028564 -0.050598, 0.030838 0.0224 -0.05072, + 0.044998 -0.231506 -0.054016, 0.037247 0.028259 -0.046082, 0.034683 0.031311 -0.045959, 0.032913 0.03302 -0.045715, + 0.031021 0.034546 -0.045471, 0.028885 0.022034 -0.049194, 0.028885 0.022156 -0.049194, 0.028519 0.02356 -0.049133, + 0.027847 0.024841 -0.049133, 0.02565 0.026794 -0.049194, 0.025101 0.027039 -0.049194, 0.024612 0.027283 -0.049194, + 0.029922 0.029419 -0.047668, 0.034683 0.031311 -0.045959, 0.028885 0.022156 -0.049194, 0.02565 0.026794 -0.049194, + 1.5e-005 0.03302 -0.049561, 1.5e-005 0.03302 -0.049072, 0.01265 0.031555 -0.049072, 0.018753 0.029785 -0.049133, + 0.024612 0.027283 -0.049194, -0.018784 0.029785 -0.049133, -0.012619 0.031555 -0.049072, 1.5e-005 0.042297 -0.045471, + 1.5e-005 0.037659 -0.047424, 1.5e-005 0.03302 -0.049072, -0.048538 -0.09491 -0.0495, -0.043991 -0.035034 -0.049133, + -0.034439 -0.009827 -0.046326, -0.03685 -0.034729 -0.046326, -0.038956 -0.059631 -0.046326, -0.036972 -0.035889 -0.057739, + -0.039169 -0.062317 -0.057739, -0.042221 -0.034546 -0.047668, -0.042953 -0.200745 -0.051819, -0.029282 0.018555 -0.049561, + -0.046402 -0.185303 -0.064148, -0.045944 -0.185669 -0.064392, -0.045395 -0.185913 -0.064575, -0.007004 0.015015 -0.051941, + 0.018143 0.015015 -0.051941, 0.018936 -0.007324 -0.056396, 0.019577 -0.007385 -0.05603, 0.020035 -0.007507 -0.05542, + -0.009109 -0.032043 -0.061462, 0.019333 -0.032043 -0.06134, 0.020004 -0.032043 -0.060974, 0.020462 -0.032104 -0.060364, + 0.020309 -0.063171 -0.062622, 0.020981 -0.063171 -0.062195, 0.021439 -0.063171 -0.061584, -0.028549 0.02356 -0.049438, + -0.027878 0.024841 -0.049438, -0.026901 0.02594 -0.049438, -0.033493 0.025024 -0.047729, -0.032516 0.026733 -0.047729, + -0.031174 0.028137 -0.047729, -0.040878 0.021729 -0.044312, -0.036728 0.028931 -0.044312, -0.030869 0.034668 -0.044312, + 0.048508 -0.152161 -0.048767, 0.045822 -0.093323 -0.048462, 0.041428 -0.034607 -0.047974, 0.059433 -0.223267 -0.045776, + 0.059738 -0.223267 -0.045349, 0.059921 -0.223267 -0.044861, 0.051193 -0.034424 -0.045715, 0.051559 -0.034363 -0.045288, + 0.051773 -0.034363 -0.044739, 0.055771 -0.094482 -0.045715, 0.056137 -0.094482 -0.045227, 0.05632 -0.094482 -0.044678, + 0.058548 -0.154724 -0.045715, 0.058884 -0.154724 -0.045227, 0.059067 -0.154724 -0.044678, 0.051224 -0.154968 -0.049744, + 0.048538 -0.09491 -0.0495, 0.043991 -0.035034 -0.049133, 0.037064 0.026062 -0.048645, 0.035965 0.028015 -0.048645, + 0.034439 0.029663 -0.048706, 0.041885 0.031982 -0.045715, 0.04213 0.032227 -0.045288, 0.042313 0.03241 -0.044739, + 0.043228 0.03009 -0.045715, 0.043594 0.030273 -0.045288, 0.043777 0.030396 -0.044739, 0.044205 0.027954 -0.045715, + 0.044571 0.028076 -0.045288, 0.044815 0.028198 -0.044739, 0.044754 0.025635 -0.045715, 0.04512 0.025635 -0.045288, + 0.045364 0.025696 -0.044739, 0.059097 -0.154663 -0.043457, 0.056351 -0.094421 -0.043457, 0.051804 -0.034241 -0.043457, + 0.044876 0.028198 -0.043396, 0.043839 0.030457 -0.043396, 0.042374 0.032471 -0.043396, 0.031631 0.039429 -0.043396, + 0.021744 0.043518 -0.043396, 0.011063 0.046143 -0.043396, 1.5e-005 0.046997 -0.043396, -0.011093 0.046143 -0.043396, + -0.021774 0.043518 -0.043396, -0.031662 0.039429 -0.043396, 0.03981 0.033752 -0.045776, 0.039993 0.034058 -0.045349, + 0.040115 0.034241 -0.0448, 0.010452 0.045532 -0.045776, 0.010513 0.045898 -0.045288, 0.010574 0.046143 -0.0448, + 0.020706 0.043152 -0.045776, 0.020828 0.043518 -0.045288, 0.020889 0.043762 -0.0448, 0.030472 0.039307 -0.045776, + 0.030594 0.039612 -0.045288, 0.030716 0.039795 -0.0448, 0.009598 0.039795 -0.048462, 0.018936 0.037598 -0.048462, + 0.027908 0.034058 -0.048523, -0.009567 0.039795 -0.048462, -0.018967 0.037598 -0.048462, -0.027878 0.034058 -0.048523, + -0.030441 0.039307 -0.045776, -0.030624 0.039612 -0.045288, -0.030685 0.039795 -0.0448, -0.020676 0.043152 -0.045776, + -0.020798 0.043518 -0.045288, -0.020859 0.043762 -0.0448, -0.010483 0.045532 -0.045776, -0.010544 0.045898 -0.045288, + -0.010544 0.046143 -0.0448, -0.039841 0.033752 -0.045776, -0.040024 0.034058 -0.045349, -0.040146 0.034241 -0.0448, + -0.037033 0.026062 -0.048645, -0.035934 0.028015 -0.048645, -0.034409 0.029663 -0.048706, -0.044235 0.027954 -0.045715, + -0.044601 0.028076 -0.045288, -0.044846 0.028198 -0.044739, -0.043259 0.03009 -0.045715, -0.043564 0.030273 -0.045288, + -0.043808 0.030396 -0.044739, -0.041855 0.031982 -0.045715, -0.04216 0.032227 -0.045288, -0.042282 0.03241 -0.044739, + -0.044907 0.028198 -0.043396, -0.043869 0.030457 -0.043396, -0.042343 0.032471 -0.043396, -0.059097 -0.154663 -0.043457, + -0.056351 -0.094421 -0.043457, -0.051804 -0.034241 -0.043457, -0.058548 -0.154724 -0.045715, -0.058884 -0.154724 -0.045227, + -0.059067 -0.154724 -0.044678, -0.055801 -0.094482 -0.045715, -0.056137 -0.094482 -0.045227, -0.05632 -0.094482 -0.044678, + -0.051193 -0.034424 -0.045715, -0.051559 -0.034363 -0.045288, -0.051773 -0.034363 -0.044739, -0.044724 0.025635 -0.045715, + -0.045151 0.025635 -0.045288, -0.045395 0.025696 -0.044739, -0.059433 -0.223267 -0.045776, -0.059738 -0.223267 -0.045349, + -0.059952 -0.223267 -0.044861, -0.052139 -0.223267 -0.049805, -0.044968 -0.202393 -0.053467, -0.038834 -0.058044 -0.052063, + -0.036545 -0.031189 -0.052063, -0.03389 -0.004395 -0.052063, -0.043747 -0.089355 -0.063538, -0.04332 -0.089111 -0.063782, + -0.042862 -0.088989 -0.063965, -0.047256 -0.094849 -0.076477, -0.046768 -0.094604 -0.076782, -0.046219 -0.094543 -0.077026, + -0.047958 -0.095886 -0.078003, -0.047501 -0.095703 -0.078369, -0.046951 -0.095703 -0.078674, -0.048782 -0.097107 -0.079346, + -0.048355 -0.096924 -0.079773, -0.047836 -0.096985 -0.080139, -0.0504 -0.099487 -0.080811, -0.049973 -0.099304 -0.081421, + -0.049362 -0.099243 -0.081909, -0.050766 -0.100525 -0.081482, -0.050339 -0.100281 -0.082092, -0.049698 -0.100281 -0.08252, + -0.05098 -0.101624 -0.082031, -0.050552 -0.10144 -0.082642, -0.049881 -0.101318 -0.083008, -0.051956 -0.101196 -0.064087, + -0.052414 -0.102295 -0.064209, -0.052658 -0.103516 -0.064331, -0.05098 -0.105103 -0.08313, -0.050522 -0.105042 -0.08374, + -0.049881 -0.104919 -0.084167, -0.05098 -0.137512 -0.083374, -0.050522 -0.137512 -0.083984, -0.049881 -0.137512 -0.084351, + -0.05098 -0.169495 -0.083252, -0.050522 -0.169617 -0.083862, -0.049881 -0.169678 -0.084229, -0.050919 -0.172852 -0.082336, + -0.050461 -0.173035 -0.082886, -0.04982 -0.173096 -0.083313, -0.052567 -0.169861 -0.065063, -0.049667 -0.176331 -0.080566, + -0.04921 -0.176514 -0.081055, -0.048599 -0.176575 -0.081421, -0.048996 -0.178101 -0.078979, -0.048477 -0.178406 -0.079407, + -0.047867 -0.178467 -0.079712, -0.048416 -0.179626 -0.077087, -0.047897 -0.179993 -0.077393, -0.047226 -0.180115 -0.077698, + -0.013382 -0.179138 -0.079041, -0.013382 -0.175842 -0.082031, -0.013382 -0.171814 -0.083862, 0.023941 -0.178101 -0.07843, + 0.023483 -0.178589 -0.078857, 0.022812 -0.178955 -0.079041, 0.023605 -0.17511 -0.081116, 0.023148 -0.175476 -0.081665, + 0.022446 -0.175781 -0.08197, 0.023331 -0.171509 -0.082825, 0.022842 -0.171692 -0.083435, 0.022141 -0.171875 -0.083801, + 0.02211 -0.137451 -0.083374, 0.021652 -0.137512 -0.083984, 0.021011 -0.137512 -0.084351, 0.020981 -0.103455 -0.082764, + 0.020523 -0.103271 -0.083374, 0.019852 -0.103149 -0.08374, 0.021011 -0.099854 -0.081055, 0.020523 -0.099487 -0.081604, + 0.019852 -0.099243 -0.081909, 0.021133 -0.096863 -0.078369, 0.020676 -0.096375 -0.078735, 0.020004 -0.096008 -0.078979, + 0.021835 -0.092102 -0.068542, 0.021378 -0.091492 -0.068726, 0.020737 -0.091125 -0.068848, -0.014847 -0.103271 -0.083862, + -0.014847 -0.099182 -0.08197, -0.014847 -0.095825 -0.078979, 0.025406 -0.184692 -0.064331, 0.024979 -0.185364 -0.064575, + 0.024307 -0.185791 -0.064697, -0.03038 0.024292 -0.051208, -0.029465 0.026001 -0.051208, -0.028183 0.027466 -0.051208, + -0.020248 0.031311 -0.051086, -0.013657 0.033386 -0.051086, -0.006882 0.034607 -0.051086, 0.020279 0.031311 -0.051086, + 0.013687 0.033386 -0.051086, 0.006912 0.034607 -0.051086, 0.030411 0.024292 -0.051208, 0.029495 0.026001 -0.051208, + 0.028214 0.027466 -0.051208, 0.037033 -0.036804 -0.052368, 0.052139 -0.223267 -0.049805, 0.012222 0.04187 -0.044006, + 1.5e-005 0.04303 -0.044006, -0.012253 0.04187 -0.044006, 0.040848 0.021729 -0.044312, 0.036758 0.028931 -0.044312, + 0.030838 0.034668 -0.044312, 0.033524 0.025024 -0.047729, 0.032547 0.026733 -0.047729, 0.031143 0.028137 -0.047729, + 0.034958 -0.03595 -0.050598, 0.028519 0.02356 -0.049438, 0.027847 0.024841 -0.049438, 0.026871 0.02594 -0.049438, + 0.019547 0.02948 -0.049377, 0.013199 0.031433 -0.049377, 0.006668 0.032593 -0.049377, -0.019577 0.02948 -0.049377, + -0.013229 0.031433 -0.049377, -0.006638 0.032593 -0.049377, -0.008591 0.037109 -0.047363, -0.017075 0.035278 -0.047424, + -0.025131 0.032288 -0.047424, 0.008621 0.037109 -0.047363, 0.017044 0.035278 -0.047424, 0.025162 0.032288 -0.047424, + 0.055099 -0.154663 -0.044006, 0.052597 -0.098328 -0.044006, 0.048508 -0.042053 -0.044006, -0.055099 -0.154663 -0.044006, + -0.052597 -0.098328 -0.044006, -0.048508 -0.042053 -0.044006, -0.049881 -0.097595 -0.048889, -0.048447 -0.095581 -0.0495, + -0.035202 -0.017578 -0.058655, -0.044266 -0.089539 -0.048889, -0.046005 -0.092041 -0.048279, -0.054398 -0.15094 -0.045776, + -0.054428 -0.137329 -0.045532, -0.053848 -0.125061 -0.045532, -0.054123 -0.131165 -0.045532, -0.052567 -0.101318 -0.045471, + -0.031235 0.015015 -0.04895, 0.021622 -0.043152 -0.052734, 0.020828 -0.018982 -0.052368, 0.024918 -0.139954 -0.053711, + 0.025772 -0.164124 -0.053833, 0.018692 0.014038 -0.05188, 0.01857 0.014526 -0.05188, 0.018509 0.014771 -0.05188, + 0.02507 -0.139099 -0.051636, 0.025955 -0.164795 -0.051819, 0.021591 -0.036377 -0.050598, 0.023514 0.037476 -0.045471, + -0.023483 0.037476 -0.045471, 0.036942 0.023865 -0.046692, 0.038284 0.02417 -0.046265, 0.038956 0.024292 -0.046021, + 0.039261 0.024414 -0.045898, 0.006851 0.03418 -0.050537, -0.006821 0.03418 -0.050537, -0.041367 0.031494 -0.046021, + -0.050217 -0.099121 -0.080261, -0.051071 -0.101929 -0.081482, 0.039261 -0.066467 -0.052063, 0.037155 -0.065186 -0.050659, + -0.006332 0.032288 -0.049072, 0.006302 0.032288 -0.049072, -0.05275 -0.101685 -0.047668, -0.047012 -0.093506 -0.05011, + -0.040756 -0.084595 -0.049927, -0.034439 -0.009827 -0.049255, -0.03685 -0.034729 -0.049622, -0.040756 -0.084595 -0.050171, + -0.031723 0.015015 -0.048828, -0.054489 -0.104065 -0.044556, -0.047775 -0.094543 -0.047607, -0.054367 -0.166626 -0.046082, + -0.054428 -0.135193 -0.045471, -0.054672 -0.104248 -0.04248, -0.054489 -0.104065 -0.044556, -0.054153 -0.165466 -0.048462, + -0.054214 -0.135742 -0.047852, -0.054672 -0.104248 -0.04248, -0.038956 -0.059631 -0.04248, -0.031723 0.015015 -0.04248, + -0.03685 -0.034729 -0.04248, -0.040909 -0.084595 -0.04248, -0.040756 -0.084595 -0.04248, -0.040756 -0.084595 -0.049683, + -0.031723 0.015015 -0.048828, -0.030746 0.015015 -0.049072, -0.031723 0.015015 -0.04248, -0.029709 0.015015 -0.049316, + -0.042953 -0.200745 -0.051636, -0.029709 0.015015 -0.049316, -0.029709 0.015015 -0.049866, -0.029343 0.018494 -0.049255, + -0.028915 0.021973 -0.049194, -0.043747 -0.190491 -0.05127, -0.042862 -0.190491 -0.051636, -0.044632 -0.190491 -0.050903, + 0.027664 -0.190491 -0.04248, -0.044632 -0.190491 -0.050903, -0.044785 -0.190491 -0.04248, -0.049515 -0.178528 -0.048645, + -0.054367 -0.166626 -0.046082, -0.054672 -0.166016 -0.04248, -0.044846 -0.18988 -0.052979, -0.04921 -0.179199 -0.051025, + -0.045151 -0.189087 -0.053955, -0.043167 -0.190491 -0.053955, -0.046463 -0.181396 -0.075378, -0.043747 -0.19043 -0.053955, + -0.043167 -0.190491 -0.053955, -0.044327 -0.190125 -0.053955, -0.044846 -0.189819 -0.053955, -0.044998 -0.189453 -0.053955, + -0.045151 -0.189087 -0.053955, -0.044815 -0.189697 -0.053955, -0.031967 0.013184 -0.052246, -0.031723 0.015015 -0.051941, + -0.03154 0.016846 -0.05188, 0.017776 0.016846 -0.05188, 0.017838 0.015015 -0.051941, 0.018448 0.015015 -0.05188, + 0.017899 0.013184 -0.052246, 0.018204 0.013184 -0.052246, 0.018448 0.013184 -0.052185, 0.018997 0.013123 -0.051941, + 0.019608 0.010254 -0.051941, -0.034195 -0.007324 -0.056519, -0.031967 0.013184 -0.052246, 0.017899 0.013184 -0.052246, + 0.01857 -0.027832 -0.060791, -0.036209 -0.027832 -0.060791, -0.037003 -0.036255 -0.061829, -0.036606 -0.032043 -0.061462, + 0.018661 -0.032043 -0.061462, 0.01857 -0.027832 -0.060791, 0.019302 -0.027832 -0.060669, 0.018753 -0.036255 -0.061829, + 0.019913 -0.027893 -0.060303, 0.02037 -0.028015 -0.059692, 0.018753 -0.036255 -0.061829, 0.019485 -0.036255 -0.061646, + 0.020126 -0.036255 -0.061279, 0.020554 -0.036255 -0.060669, 0.019852 0.015015 -0.049866, 0.020523 0.015015 -0.04248, + 0.027664 -0.190491 -0.04248, 0.020554 -0.028137 -0.059021, 0.019974 0.005249 -0.052063, 0.02327 -0.091553 -0.053406, + 0.020767 -0.036255 -0.059998, 0.020645 -0.032166 -0.059692, 0.022476 -0.090088 -0.06189, 0.02684 -0.190491 -0.052002, + -0.042953 -0.200745 -0.052002, -0.042862 -0.190491 -0.052002, 0.0233 -0.087769 -0.051331, 0.019852 0.015015 -0.049866, + -0.029709 0.015015 -0.049866, -0.028854 0.022156 -0.049744, -0.029282 0.018555 -0.049805, -0.028854 0.022156 -0.049194, + -0.028854 0.022156 -0.049744, -0.027878 0.024841 -0.049683, -0.026901 0.02594 -0.049683, -0.025681 0.026794 -0.049683, + -0.034286 0.023193 -0.047668, -0.028915 0.021973 -0.049194, -0.028915 0.022034 -0.049194, -0.039597 0.024475 -0.045776, + -0.028854 0.022156 -0.049194, -0.028549 0.02356 -0.049133, -0.027878 0.024841 -0.049133, -0.039597 0.024475 -0.045776, + -0.040146 0.023376 -0.045654, -0.037277 0.028259 -0.046082, -0.040634 0.022278 -0.045471, -0.042038 0.018188 -0.045471, + -0.045853 -0.020935 -0.045471, -0.050125 -0.066284 -0.045471, -0.053268 -0.112793 -0.045471, -0.055252 -0.159973 -0.045471, + -0.027573 0.036804 -0.045471, 0.053268 -0.112793 -0.045471, 0.050125 -0.066284 -0.045471, 0.045853 -0.020935 -0.045471, + 0.055252 -0.159973 -0.045471, -0.049606 -0.210999 -0.048828, 0.055984 -0.210999 -0.045532, 0.049606 -0.210999 -0.048828, + -0.042984 -0.210999 -0.051636, -0.042984 -0.210999 -0.052002, 0.042984 -0.210999 -0.052002, -0.030991 0.034607 -0.04248, + -0.040817 0.021851 -0.04248, -0.036728 0.028931 -0.04248, -0.042831 0.013977 -0.04248, 0.055984 -0.210999 -0.04248, + 0.060013 -0.231506 -0.04248, 0.059433 -0.231506 -0.045776, 0.059738 -0.231506 -0.045349, 0.060013 -0.231506 -0.044373, + 0.059433 -0.215027 -0.045776, 0.059738 -0.215027 -0.045349, 0.060013 -0.215027 -0.044373, 0.05809 -0.154663 -0.046082, + 0.059006 -0.215027 -0.046082, 0.055313 -0.094421 -0.046082, 0.044266 0.025513 -0.046021, 0.050705 -0.034302 -0.046082, + 0.037613 0.023926 -0.048645, 0.044266 0.025513 -0.046021, 0.039871 0.033142 -0.046082, 0.041519 0.031616 -0.046021, + 0.042801 0.029846 -0.046021, 0.044266 0.025635 -0.046021, 0.044754 0.025696 -0.045715, 0.044266 0.025513 -0.046021, + 0.044754 0.025574 -0.045715, 0.044266 0.025574 -0.046021, 0.04512 0.025757 -0.045288, 0.045364 0.025757 -0.044739, + 0.045425 0.025757 -0.044189, 0.045364 0.025635 -0.044739, 0.04512 0.025574 -0.045288, 0.045486 0.025635 -0.044189, + 0.060013 -0.215027 -0.044373, 0.059097 -0.154602 -0.044373, 0.056351 -0.09436 -0.044312, 0.059097 -0.154663 -0.04248, + 0.056351 -0.094421 -0.04248, 0.051804 -0.034241 -0.04248, 0.051804 -0.034241 -0.04425, 0.045486 0.025696 -0.044189, + 0.045425 0.025757 -0.04248, 0.060013 -0.231506 -0.044373, 0.060013 -0.215027 -0.04248, 0.060013 -0.231506 -0.04248, + 0.060013 -0.215027 -0.044373, 0.045425 0.025757 -0.044189, 0.045425 0.025757 -0.04248, 0.043839 0.030457 -0.044189, + 0.044876 0.028198 -0.04248, 0.043839 0.030457 -0.04248, 0.042374 0.032471 -0.044189, 0.040482 0.034119 -0.04425, + 0.040482 0.034119 -0.04248, 0.031204 0.039673 -0.04248, 0.021255 0.043701 -0.04248, 0.010757 0.046143 -0.04248, + -0.040512 0.034119 -0.04248, -0.021225 0.043701 -0.04248, 1.5e-005 0.046997 -0.04248, -0.010727 0.046143 -0.04248, + -0.031235 0.039673 -0.04248, 0.039261 0.03363 -0.046082, 0.040115 0.033508 -0.045776, 0.039566 0.033386 -0.046082, + 0.040298 0.033813 -0.045349, 0.039871 0.033142 -0.046082, 0.039871 0.034546 -0.04425, 0.040421 0.034058 -0.0448, + 0.040482 0.034119 -0.04425, 0.040176 0.034302 -0.04425, 0.039688 0.034302 -0.045349, 0.039505 0.033997 -0.045776, + 0.010574 0.046204 -0.04425, 0.020889 0.043823 -0.04425, 1.5e-005 0.046997 -0.04425, 0.03981 0.034485 -0.0448, + 0.030716 0.039917 -0.04425, 0.039871 0.034546 -0.04425, 0.010391 0.045105 -0.046082, 0.020584 0.042725 -0.046082, + 1.5e-005 0.045837 -0.046082, 0.033279 0.031189 -0.048462, 0.030228 0.038879 -0.046082, 0.039261 0.03363 -0.046082, + 1.5e-005 0.040527 -0.048462, -0.030258 0.038879 -0.046082, -0.03923 0.03363 -0.046082, -0.020554 0.042725 -0.046082, + -0.010422 0.045105 -0.046082, 1.5e-005 0.045837 -0.046082, 1.5e-005 0.046326 -0.045715, 1.5e-005 0.046692 -0.045288, + -0.039902 0.034546 -0.04425, -0.030746 0.039917 -0.04425, 1.5e-005 0.046936 -0.0448, 1.5e-005 0.046997 -0.04425, + -0.02092 0.043823 -0.04425, -0.010544 0.046204 -0.04425, -0.039536 0.033997 -0.045776, -0.040512 0.034119 -0.04425, + -0.040207 0.034302 -0.04425, -0.039719 0.034302 -0.045349, -0.039841 0.034485 -0.0448, -0.039902 0.034546 -0.04425, + -0.037643 0.023926 -0.048645, -0.030869 0.0224 -0.05072, -0.039841 0.033142 -0.046082, -0.039536 0.033386 -0.046082, + -0.03923 0.03363 -0.046082, -0.033249 0.031189 -0.048462, -0.044235 0.025635 -0.046021, -0.043747 0.027771 -0.046021, + -0.042831 0.029846 -0.046021, -0.040146 0.033508 -0.045776, -0.039841 0.033142 -0.046082, -0.040329 0.033813 -0.045349, + -0.040451 0.034058 -0.0448, -0.040512 0.034119 -0.04425, -0.045456 0.025757 -0.04248, -0.044907 0.028198 -0.04248, + -0.045456 0.025757 -0.044189, -0.044907 0.028198 -0.044189, -0.043869 0.030457 -0.04248, -0.040512 0.034119 -0.04248, + -0.043869 0.030457 -0.044189, -0.060013 -0.215027 -0.04248, -0.059097 -0.154663 -0.04248, -0.056351 -0.094421 -0.04248, + -0.051804 -0.034241 -0.04248, -0.045456 0.025757 -0.04248, -0.05809 -0.154663 -0.046082, -0.059036 -0.215027 -0.046082, + -0.050705 -0.034302 -0.046082, -0.055313 -0.094421 -0.046082, -0.044296 0.025513 -0.046021, -0.059097 -0.154602 -0.044373, + -0.060013 -0.215027 -0.044373, -0.056351 -0.09436 -0.044312, -0.051804 -0.034241 -0.04425, -0.044296 0.025513 -0.046021, + -0.044785 0.025574 -0.045715, -0.044724 0.025696 -0.045715, -0.044235 0.025574 -0.046021, -0.044235 0.025635 -0.046021, + -0.045151 0.025757 -0.045288, -0.045151 0.025574 -0.045288, -0.045395 0.025635 -0.044739, -0.045456 0.025635 -0.044189, + -0.045395 0.025757 -0.044739, -0.045456 0.025757 -0.044189, -0.045456 0.025696 -0.044189, -0.059738 -0.231506 -0.045349, + -0.059433 -0.215027 -0.045776, -0.059738 -0.215027 -0.045349, -0.059921 -0.231506 -0.044861, -0.060013 -0.215027 -0.044373, + -0.059036 -0.231506 -0.046082, -0.059036 -0.215027 -0.046082, -0.052139 -0.215027 -0.049805, -0.044998 -0.231506 -0.052979, + -0.052139 -0.231506 -0.049805, -0.044998 -0.231506 -0.052979, -0.044998 -0.231506 -0.054016, -0.044998 -0.215027 -0.054016, + -0.044998 -0.215027 -0.052979, -0.044968 -0.202393 -0.054016, -0.044968 -0.202454 -0.052979, -0.044846 -0.18988 -0.053467, + -0.044846 -0.189819 -0.053955, -0.044846 -0.18988 -0.052979, -0.038956 -0.059753 -0.05304, -0.040756 -0.084717 -0.052307, + -0.038834 -0.057922 -0.052002, -0.03688 -0.03479 -0.052673, -0.036545 -0.031128 -0.051636, -0.040756 -0.084839 -0.053345, + -0.040756 -0.084717 -0.053345, -0.03154 0.016846 -0.05188, -0.030869 0.0224 -0.05072, -0.03154 0.016846 -0.05188, + -0.031174 0.019653 -0.051819, -0.030869 0.0224 -0.051758, -0.031723 0.015015 -0.05188, -0.031601 0.01593 -0.05188, + -0.03154 0.016846 -0.05188, -0.047073 -0.09436 -0.074524, -0.041031 -0.085083 -0.052246, -0.040909 -0.0849 -0.052246, + -0.040756 -0.084717 -0.052307, -0.040756 -0.084839 -0.052795, -0.040756 -0.084961 -0.053345, -0.040817 -0.085571 -0.055542, + -0.046768 -0.093994 -0.074768, -0.047562 -0.095093 -0.07605, -0.046371 -0.093811 -0.074951, -0.047073 -0.09436 -0.074524, + -0.048203 -0.096069 -0.077454, -0.049942 -0.098633 -0.079956, -0.049667 -0.098389 -0.080505, -0.049301 -0.098328 -0.080933, + -0.048813 -0.098389 -0.081299, -0.049942 -0.098633 -0.079956, -0.050522 -0.09967 -0.080566, -0.050949 -0.100769 -0.081055, + -0.05275 -0.101685 -0.047668, -0.053452 -0.102783 -0.047363, -0.053909 -0.104004 -0.04718, -0.054276 -0.106384 -0.047058, + -0.051224 -0.103088 -0.081909, -0.051041 -0.102844 -0.082581, -0.051163 -0.107483 -0.082703, -0.051193 -0.105225 -0.082458, + -0.050583 -0.1026 -0.08313, -0.049973 -0.102478 -0.083496, -0.051163 -0.107483 -0.082703, -0.050949 -0.107483 -0.083374, + -0.051163 -0.167603 -0.082703, -0.050522 -0.107483 -0.083984, -0.049881 -0.107483 -0.084351, -0.051163 -0.167603 -0.082703, + -0.050949 -0.167603 -0.083374, -0.050522 -0.167603 -0.083984, -0.051193 -0.171204 -0.082153, -0.051163 -0.169373 -0.08252, + -0.049881 -0.167603 -0.084351, -0.05101 -0.171387 -0.082825, -0.050552 -0.17157 -0.083435, -0.049942 -0.171692 -0.083801, + -0.054153 -0.165466 -0.048462, -0.051193 -0.171204 -0.082153, -0.054001 -0.166992 -0.048523, -0.051102 -0.172668 -0.081726, + -0.050705 -0.174072 -0.081177, -0.053513 -0.168579 -0.048828, -0.050705 -0.174072 -0.081177, -0.050461 -0.174316 -0.081787, + -0.049911 -0.176086 -0.079956, -0.050034 -0.174438 -0.082336, -0.04924 -0.177795 -0.07843, -0.048325 -0.180298 -0.074646, + -0.048019 -0.180786 -0.07489, -0.047592 -0.181091 -0.075073, -0.049484 -0.174377 -0.082764, -0.047043 -0.181335 -0.075256, + -0.046463 -0.181396 -0.075378, -0.047379 -0.178528 -0.079773, -0.04805 -0.176514 -0.081543, -0.048843 -0.174255 -0.082947, + 0.022476 -0.181396 -0.075378, -0.04921 -0.171753 -0.083923, -0.049179 -0.169678 -0.084351, -0.049149 -0.173035 -0.083496, + 0.024124 -0.17749 -0.078003, 0.02446 -0.179504 -0.074768, 0.023788 -0.174683 -0.080505, 0.023544 -0.171265 -0.082153, + 0.023361 -0.167542 -0.082703, 0.02211 -0.179077 -0.079102, 0.022476 -0.181396 -0.075378, 0.021805 -0.175842 -0.082031, + 0.02153 -0.171875 -0.083862, 0.023361 -0.167542 -0.082703, 0.023148 -0.167542 -0.083374, 0.021255 -0.107422 -0.082703, + 0.02272 -0.167542 -0.083984, 0.022079 -0.167542 -0.084351, 0.021255 -0.107422 -0.082703, 0.021164 -0.103638 -0.082092, + 0.021072 -0.107422 -0.083374, 0.020615 -0.107422 -0.083984, 0.020004 -0.107483 -0.084351, 0.021194 -0.10022 -0.080505, + 0.021317 -0.097412 -0.077942, 0.02153 -0.095398 -0.074707, 0.021347 -0.094727 -0.074951, 0.021866 -0.089233 -0.063049, + 0.022476 -0.090088 -0.06189, 0.022293 -0.089661 -0.0625, 0.02092 -0.094177 -0.075134, 0.020279 -0.093811 -0.075256, + 0.020432 -0.088806 -0.06366, 0.021225 -0.088928 -0.063477, 0.018753 -0.036255 -0.061829, -0.039169 -0.0625 -0.062744, + -0.037003 -0.036255 -0.061829, -0.041031 -0.088806 -0.06366, 0.020432 -0.088806 -0.06366, 0.020432 -0.088806 -0.06366, + -0.045425 -0.093628 -0.075256, -0.041031 -0.088806 -0.06366, -0.040939 -0.087708 -0.061035, 0.020401 -0.088806 -0.06366, + -0.040878 -0.08667 -0.058472, -0.049179 -0.104919 -0.08429, -0.04924 -0.102356 -0.083618, -0.049179 -0.107483 -0.084473, + 0.01918 -0.103149 -0.083862, -0.049026 -0.100403 -0.082703, -0.048721 -0.099426 -0.082153, -0.048294 -0.098572 -0.081543, + -0.046555 -0.095642 -0.078674, -0.045914 -0.094482 -0.077026, -0.045425 -0.093628 -0.075256, 0.019547 -0.093628 -0.075256, + 0.019211 -0.099182 -0.08197, 0.019333 -0.095947 -0.079041, 0.021378 -0.167603 -0.084473, -0.049179 -0.167603 -0.084473, + 0.019272 -0.107483 -0.084473, -0.049179 -0.107483 -0.084473, 0.026596 -0.188354 -0.053955, 0.026443 -0.189209 -0.053955, + 0.02446 -0.179504 -0.074768, 0.024307 -0.180176 -0.075073, 0.02388 -0.180786 -0.075256, 0.026016 -0.18988 -0.053955, + 0.025406 -0.190369 -0.053955, 0.024673 -0.190491 -0.053955, 0.023239 -0.181213 -0.075378, 0.022476 -0.181396 -0.075378, + -0.030869 0.0224 -0.05072, -0.03038 0.024292 -0.05072, -0.030869 0.0224 -0.051758, -0.029465 0.026001 -0.051697, + -0.029465 0.026001 -0.050659, -0.028183 0.027466 -0.051636, -0.026596 0.028564 -0.051636, -0.026596 0.028564 -0.050598, + -0.020248 0.031311 -0.050598, -0.013657 0.033386 -0.051514, -0.013657 0.033386 -0.050537, -0.006882 0.034607 -0.051514, + 0.026566 0.028564 -0.051636, 0.013687 0.033386 -0.051514, 0.020279 0.031311 -0.050598, 0.013687 0.033386 -0.050537, + 0.006912 0.034607 -0.051514, 1.5e-005 0.034973 -0.051514, 1.5e-005 0.034973 -0.050476, 0.030411 0.024292 -0.05072, + 0.030838 0.0224 -0.051758, 0.029495 0.026001 -0.050659, 0.029495 0.026001 -0.051697, 0.028214 0.027466 -0.051636, + 0.026566 0.028564 -0.051636, 0.026566 0.028564 -0.050598, 0.044998 -0.215027 -0.052979, 0.044998 -0.215027 -0.054016, + 0.044113 -0.155518 -0.053833, 0.044113 -0.155518 -0.052856, 0.041458 -0.09613 -0.053406, 0.041458 -0.09613 -0.052429, + 0.037033 -0.036804 -0.051758, 0.037033 -0.036804 -0.052734, 0.030838 0.0224 -0.051758, 0.030838 0.0224 -0.05072, + 0.044998 -0.215027 -0.054016, 0.044998 -0.215027 -0.052979, 0.044998 -0.231506 -0.052979, -1.5e-005 -0.215027 -0.054016, + 0.044998 -0.215027 -0.054016, 0.044998 -0.231506 -0.054016, -0.044998 -0.231506 -0.054016, -0.044998 -0.215027 -0.054016, + 0.059006 -0.215027 -0.046082, 0.059006 -0.231506 -0.046082, 0.052139 -0.231506 -0.049805, 0.044998 -0.231506 -0.052979, + 0.044998 -0.215027 -0.052979, 0.052139 -0.215027 -0.049805, -0.060013 -0.231506 -0.04248, -0.060013 -0.215027 -0.04248, + -0.060013 -0.231506 -0.044373, -0.060013 -0.215027 -0.044373, 0.012161 0.04187 -0.045471, 0.02388 0.038513 -0.045471, + 0.012161 0.04187 -0.04248, 0.02388 0.038513 -0.04248, 1.5e-005 0.04303 -0.045471, -0.012131 0.04187 -0.045471, + -0.023849 0.038513 -0.045471, 1.5e-005 0.04303 -0.04248, -0.012131 0.04187 -0.04248, -0.023849 0.038513 -0.04248, + 0.039627 0.024475 -0.045776, 0.040115 0.023376 -0.045654, 0.042007 0.018188 -0.045471, 0.042801 0.013977 -0.045471, + 0.042801 0.013977 -0.04248, 0.040665 0.022278 -0.045471, 0.040787 0.021851 -0.04248, 0.02388 0.038513 -0.04248, + 0.02388 0.038513 -0.045471, 0.027542 0.036804 -0.045471, 0.036758 0.028931 -0.04248, 0.03096 0.034607 -0.04248, + 0.028885 0.021973 -0.049194, 0.034317 0.023193 -0.047668, 0.039627 0.024475 -0.045776, 0.037247 0.028259 -0.046082, + 0.042984 -0.210999 -0.051636, 0.042038 -0.152588 -0.051819, 0.042984 -0.210999 -0.052002, 0.042038 -0.152649 -0.051453, + 0.034958 -0.03595 -0.05072, 0.039352 -0.094238 -0.051392, 0.039352 -0.094299 -0.051025, 0.034958 -0.036072 -0.050232, + 0.028885 0.022156 -0.049744, 0.028885 0.021973 -0.049194, 0.028885 0.022034 -0.049194, 0.027847 0.024841 -0.049683, + 0.028885 0.022156 -0.049744, 0.028885 0.022156 -0.049194, 0.028519 0.02356 -0.049133, 0.027847 0.024841 -0.049133, + 0.026871 0.02594 -0.049683, 0.02565 0.026794 -0.049683, 0.013199 0.031433 -0.049561, 0.025101 0.027039 -0.049194, + 0.02565 0.026794 -0.049194, 0.006668 0.032593 -0.049561, -0.025681 0.026794 -0.049683, -0.025131 0.027039 -0.049194, + -0.025681 0.026794 -0.049194, -0.024643 0.027283 -0.049194, -0.013229 0.031433 -0.049561, 1.5e-005 0.03302 -0.049072, + -0.006638 0.032593 -0.049561, 1.5e-005 0.03302 -0.049561, -0.008041 0.041809 -0.045471, -0.015976 0.040344 -0.045471, + -0.030991 0.034546 -0.045471, -0.032944 0.03302 -0.045715, -0.029953 0.029419 -0.047668, -0.034714 0.031311 -0.045959, + -0.018784 0.029785 -0.049133, -0.012619 0.031555 -0.049072, -0.024643 0.027283 -0.049194, 0.016006 0.040344 -0.045471, + 0.008072 0.041809 -0.045471, 1.5e-005 0.037659 -0.047424, 1.5e-005 0.042297 -0.045471, 0.029922 0.029419 -0.047668, + 0.032913 0.03302 -0.045715, 0.031021 0.034546 -0.045471, 0.034683 0.031311 -0.045959, 0.018753 0.029785 -0.049133, + 0.01265 0.031555 -0.049072, 0.024612 0.027283 -0.049194, 1.5e-005 0.03302 -0.049072, 0.055771 -0.185486 -0.045532, + 0.055984 -0.210999 -0.045532, 0.055984 -0.210999 -0.04248, 0.055252 -0.159973 -0.045471, 0.055099 -0.154602 -0.04248, + 0.053574 -0.116394 -0.045471, 0.050919 -0.072815 -0.045471, 0.042801 0.013977 -0.045471, 0.048508 -0.042053 -0.04248, + 0.052597 -0.098328 -0.04248, 0.042801 0.013977 -0.04248, -0.055099 -0.154602 -0.04248, -0.055984 -0.210999 -0.04248, + -0.053574 -0.116394 -0.045471, -0.055771 -0.185486 -0.045532, -0.055984 -0.210999 -0.045532, -0.055252 -0.159973 -0.045471, + -0.048508 -0.042053 -0.04248, -0.052597 -0.098328 -0.04248, -0.042831 0.013977 -0.04248, -0.050919 -0.072815 -0.045471, + -0.042831 0.013977 -0.045471, 0.059998 -0.341492 -0.044739, 0.059921 -0.341492 -0.045288, 0.059692 -0.341492 -0.045776, + 0.059311 -0.341492 -0.046204, 0.058838 -0.341492 -0.046509, 0.044998 -0.341492 -0.052979, 0.044998 -0.341492 -0.054016, + -0.044998 -0.341492 -0.054016, -0.044998 -0.341492 -0.052979, -0.058853 -0.341492 -0.046509, -0.059326 -0.341492 -0.046204, + -0.059692 -0.341492 -0.045776, -0.059921 -0.341492 -0.045288, -0.059998 -0.341492 -0.044739, -0.059998 -0.341492 0.051697, + -0.059921 -0.341492 0.052307, -0.059692 -0.341492 0.052795, -0.059326 -0.341492 0.053223, -0.058853 -0.341492 0.053528, + -0.044998 -0.341492 0.059998, -0.044998 -0.341492 0.060974, 0.044998 -0.341492 0.060974, 0.044998 -0.341492 0.059998, + 0.058838 -0.341492 0.053528, 0.059311 -0.341492 0.053223, 0.059692 -0.341492 0.052795, 0.059921 -0.341492 0.052307, + 0.059998 -0.341492 0.051697, 0 -0.341492 -0.047485, 0.009262 -0.341492 -0.04657, 0.018173 -0.341492 -0.043884, + 0.026382 -0.341492 -0.03949, 0.033585 -0.341492 -0.033569, 0.039492 -0.341492 -0.026367, 0.043886 -0.341492 -0.018188, + 0.046587 -0.341492 -0.009277, 0.047502 -0.341492 0, 0.046587 -0.341492 0.009277, 0.043886 -0.341492 0.018188, + 0.039492 -0.341492 0.026367, 0.033585 -0.341492 0.033569, 0.026382 -0.341492 0.03949, 0.018173 -0.341492 0.043884, + 0.009262 -0.341492 0.04657, 0 -0.341492 0.047485, -0.009262 -0.341492 0.04657, -0.018173 -0.341492 0.043884, + -0.026398 -0.341492 0.03949, -0.033585 -0.341492 0.033569, -0.039488 -0.341492 0.026367, -0.043882 -0.341492 0.018188, + -0.046583 -0.341492 0.009277, -0.047499 -0.341492 0, -0.046583 -0.341492 -0.009277, -0.043882 -0.341492 -0.018188, + -0.039488 -0.341492 -0.026367, -0.033585 -0.341492 -0.033569, -0.026398 -0.341492 -0.03949, -0.018173 -0.341492 -0.043884, + -0.009262 -0.341492 -0.04657, 0 -0.346497 -0.047485, 0.009262 -0.346497 -0.04657, 0.018173 -0.346497 -0.043884, + 0.026382 -0.346497 -0.03949, 0.033585 -0.346497 -0.033569, 0.039492 -0.346497 -0.026367, 0.043886 -0.346497 -0.018188, + 0.046587 -0.346497 -0.009277, 0.047502 -0.346497 0, 0.046587 -0.346497 0.009277, 0.043886 -0.346497 0.018188, + 0.039492 -0.346497 0.026367, 0.033585 -0.346497 0.033569, 0.026382 -0.346497 0.03949, 0.018173 -0.346497 0.043884, + 0.009262 -0.346497 0.04657, 0 -0.346497 0.047485, -0.009262 -0.346497 0.04657, -0.018173 -0.346497 0.043884, + -0.026398 -0.346497 0.03949, -0.033585 -0.346497 0.033569, -0.039488 -0.346497 0.026367, -0.043882 -0.346497 0.018188, + -0.046583 -0.346497 0.009277, -0.047499 -0.346497 0, -0.046583 -0.346497 -0.009277, -0.043882 -0.346497 -0.018188, + -0.039488 -0.346497 -0.026367, -0.033585 -0.346497 -0.033569, -0.026398 -0.346497 -0.03949, -0.018173 -0.346497 -0.043884, + -0.009262 -0.346497 -0.04657, 0 -0.346497 -0.047485, 0.058853 -0.231506 -0.046509, 0.058838 -0.341492 -0.046509, + 0.060013 -0.231506 -0.044739, 0.059921 -0.231506 -0.045288, 0.059677 -0.231506 -0.045776, 0.059311 -0.231506 -0.046204, + 0.044998 -0.231506 -0.052979, 0.044998 -0.341492 -0.052979, 0.060013 -0.231506 -0.04248, 0.039993 -0.231506 -0.04248, + 0.039993 -0.231506 -0.049988, -0.039993 -0.231506 -0.049988, -0.039993 -0.231506 -0.04248, -0.060013 -0.231506 -0.04248, + -0.060013 -0.231506 -0.044739, -0.059921 -0.231506 -0.045288, -0.059677 -0.231506 -0.045776, -0.059311 -0.231506 -0.046204, + -0.058853 -0.231506 -0.046509, -0.044998 -0.231506 -0.052979, -0.044998 -0.231506 -0.054016, 0.044998 -0.231506 -0.054016, + 0.044998 -0.231506 -0.052979, 0.060013 -0.231506 0.051697, 0.059921 -0.231506 0.052307, 0.059677 -0.231506 0.052795, + 0.059311 -0.231506 0.053223, 0.058853 -0.231506 0.053528, 0.044998 -0.231506 0.059998, 0.044998 -0.231506 0.060974, + -0.044998 -0.231506 0.060974, -0.044998 -0.231506 0.059998, -0.058853 -0.231506 0.053528, -0.059311 -0.231506 0.053223, + -0.059677 -0.231506 0.052795, -0.059921 -0.231506 0.052307, -0.060013 -0.231506 0.051697, -0.060013 -0.231506 0.0495, + 0.060013 -0.231506 0.0495, 0.060013 -0.231506 0.051697, 0.060013 -0.215027 0.0495, 0.060013 -0.215027 -0.04248, + 0.060013 -0.231506 -0.04248, 0.058838 -0.341492 0.053528, 0.058853 -0.231506 0.053528, 0.044998 -0.231506 0.059998, + -0.058853 -0.341492 0.053528, -0.058853 -0.231506 0.053528, -0.060013 -0.231506 0.051697, -0.060013 -0.231506 -0.044739, + -0.060013 -0.215027 -0.04248, -0.060013 -0.215027 0.0495, -0.060013 -0.231506 0.0495, -0.058853 -0.341492 -0.046509, + -0.058853 -0.231506 -0.046509, -0.044998 -0.231506 -0.052979, 0.039993 -0.215027 -0.04248, 0.039993 -0.231506 -0.04248, + -0.039993 -0.231506 -0.04248, -0.039993 -0.215027 -0.04248, -0.060013 -0.215027 -0.04248, 0.039993 -0.215027 -0.049988, + -0.039993 -0.215027 -0.049988, 0.039993 -0.215027 -0.049988, -0.060013 -0.215027 0.0495, -0.039993 -0.215027 -0.049988, + 0.013306 -0.343994 -0.045593, 0.020813 -0.343994 -0.042725, 0.028503 -0.343994 -0.038025, 0.035784 -0.343994 -0.03125, + 0.041918 -0.343994 -0.022339, 0.046038 -0.343994 -0.011719, 0.047502 -0.343994 0, 0.046038 -0.343994 0.011719, + 0.041918 -0.343994 0.022339, 0.035784 -0.343994 0.03125, 0.028503 -0.343994 0.038025, 0.020813 -0.343994 0.042725, + 0.013306 -0.343994 0.045593, -0.013306 -0.343994 0.045593, -0.020813 -0.343994 0.042725, -0.028503 -0.343994 0.038025, + -0.03578 -0.343994 0.03125, -0.041914 -0.343994 0.022339, -0.046034 -0.343994 0.011719, -0.047499 -0.343994 0, + -0.046034 -0.343994 -0.011719, -0.041914 -0.343994 -0.022339, -0.03578 -0.343994 -0.03125, -0.028503 -0.343994 -0.038025, + -0.020813 -0.343994 -0.042725, -0.013306 -0.343994 -0.045593, 0.059921 -0.286499 -0.045288, 0.059692 -0.286499 -0.045776, + 0.059311 -0.286499 -0.046265, 0.059921 -0.286499 0.052246, 0.059692 -0.286499 0.052795, 0.059311 -0.286499 0.053223, + -0.059921 -0.286499 0.052246, -0.059692 -0.286499 0.052795, -0.059311 -0.286499 0.053223, -0.059921 -0.286499 -0.045288, + -0.059692 -0.286499 -0.045776, -0.059311 -0.286499 -0.046265, 0 -0.341492 -0.047485, 0.009262 -0.341492 -0.04657, + 0.018173 -0.341492 -0.043884, 0.026382 -0.341492 -0.03949, 0.033585 -0.341492 -0.033569, 0.039492 -0.341492 -0.026367, + 0.043886 -0.341492 -0.018188, 0.046587 -0.341492 -0.009277, 0.047502 -0.341492 0, 0.046587 -0.341492 0.009277, + 0.043886 -0.341492 0.018188, 0.039492 -0.341492 0.026367, 0.033585 -0.341492 0.033569, 0.026382 -0.341492 0.03949, + 0.009262 -0.341492 0.04657, 0.018173 -0.341492 0.043884, 0 -0.341492 0.047485, 0 -0.346497 0.047485, + -0.009262 -0.341492 0.04657, -0.018173 -0.341492 0.043884, -0.026398 -0.341492 0.03949, -0.043882 -0.341492 0.018188, + -0.039488 -0.341492 0.026367, -0.033585 -0.341492 0.033569, -0.046583 -0.341492 0.009277, -0.047499 -0.341492 0, + -0.046583 -0.341492 -0.009277, -0.043882 -0.341492 -0.018188, -0.039488 -0.341492 -0.026367, -0.033585 -0.341492 -0.033569, + -0.026398 -0.341492 -0.03949, -0.009262 -0.341492 -0.04657, -0.018173 -0.341492 -0.043884, 0 -0.341492 -0.047485, + -0.039488 -0.346497 0.026367, -0.018173 -0.346497 0.043884, -0.026398 -0.346497 0.03949, -0.043882 -0.346497 0.018188, + -0.009262 -0.346497 0.04657, -0.033585 -0.346497 0.033569, -0.046583 -0.346497 0.009277, 0.046587 -0.346497 0.009277, + -0.046583 -0.346497 -0.009277, 0.018173 -0.346497 0.043884, 0.009262 -0.346497 0.04657, 0.043886 -0.346497 0.018188, + 0.026382 -0.346497 0.03949, 0 -0.346497 0.047485, 0.033585 -0.346497 0.033569, 0.039492 -0.346497 0.026367, + -0.047499 -0.346497 0, -0.018173 -0.346497 -0.043884, -0.043882 -0.346497 -0.018188, -0.026398 -0.346497 -0.03949, + -0.039488 -0.346497 -0.026367, -0.033585 -0.346497 -0.033569, -0.009262 -0.346497 -0.04657, 0.009262 -0.346497 -0.04657, + 0 -0.346497 -0.047485, 0.018173 -0.346497 -0.043884, 0.039492 -0.346497 -0.026367, 0.043886 -0.346497 -0.018188, + 0.046587 -0.346497 -0.009277, 0.047502 -0.346497 0, 0.026382 -0.346497 -0.03949, 0.033585 -0.346497 -0.033569, + 0.059998 -0.341492 -0.044739, 0.059921 -0.341492 -0.045288, 0.059692 -0.341492 -0.045776, 0.059311 -0.341492 -0.046204, + 0.058853 -0.231506 -0.046509, 0.058838 -0.341492 -0.046509, 0.058853 -0.231506 -0.046509, 0.059311 -0.231506 -0.046204, + 0.059921 -0.231506 -0.045288, 0.059677 -0.231506 -0.045776, 0.060013 -0.231506 -0.044739, 0.059998 -0.341492 0.051697, + 0.060013 -0.231506 0.0495, 0.059998 -0.341492 -0.044739, 0.060013 -0.231506 0.051697, 0.059921 -0.231506 0.052307, + 0.059998 -0.341492 0.051697, 0.059921 -0.341492 0.052307, 0.059677 -0.231506 0.052795, 0.059311 -0.231506 0.053223, + 0.059311 -0.341492 0.053223, 0.059692 -0.341492 0.052795, 0.044998 -0.341492 0.059998, 0.058838 -0.341492 0.053528, + 0.058853 -0.231506 0.053528, 0.044998 -0.341492 0.060974, 0.044998 -0.341492 0.059998, 0.044998 -0.231506 0.059998, + 0.044998 -0.231506 0.060974, -0.044998 -0.231506 0.060974, -0.044998 -0.341492 0.060974, 0.044998 -0.341492 0.060974, + -0.044998 -0.341492 0.059998, -0.044998 -0.341492 0.060974, -0.044998 -0.231506 0.060974, -0.044998 -0.231506 0.059998, + -0.044998 -0.341492 0.059998, -0.059998 -0.341492 0.051697, -0.059921 -0.341492 0.052307, -0.059921 -0.231506 0.052307, + -0.059692 -0.341492 0.052795, -0.059326 -0.341492 0.053223, -0.058853 -0.341492 0.053528, -0.059311 -0.231506 0.053223, + -0.059677 -0.231506 0.052795, -0.058853 -0.231506 0.053528, -0.059998 -0.341492 -0.044739, -0.060013 -0.231506 -0.04248, + -0.059998 -0.341492 0.051697, -0.060013 -0.231506 0.051697, -0.060013 -0.231506 -0.044739, -0.059921 -0.231506 -0.045288, + -0.059998 -0.341492 -0.044739, -0.059921 -0.341492 -0.045288, -0.059677 -0.231506 -0.045776, -0.059311 -0.231506 -0.046204, + -0.059326 -0.341492 -0.046204, -0.059692 -0.341492 -0.045776, -0.044998 -0.341492 -0.052979, -0.058853 -0.341492 -0.046509, + -0.058853 -0.231506 -0.046509, -0.044998 -0.341492 -0.054016, -0.044998 -0.341492 -0.052979, -0.044998 -0.231506 -0.052979, + -0.044998 -0.231506 -0.054016, 0.044998 -0.231506 -0.054016, 0.044998 -0.341492 -0.054016, -0.044998 -0.341492 -0.054016, + 0.044998 -0.341492 -0.052979, 0.044998 -0.341492 -0.054016, 0.044998 -0.231506 -0.054016, 0.044998 -0.231506 -0.052979, + 0.060013 -0.231506 -0.04248, 0.060013 -0.215027 -0.04248, -0.060013 -0.231506 -0.04248, 0.039993 -0.215027 -0.04248, + 0.039993 -0.231506 -0.04248, 0.039993 -0.231506 -0.049988, -0.039993 -0.215027 -0.04248, 0.039993 -0.215027 -0.04248, + -0.060013 -0.215027 -0.04248, 0.060013 -0.215027 0.0495, 0.060013 -0.215027 -0.04248, -0.039993 -0.231506 -0.049988, + -0.039993 -0.215027 -0.04248, -0.039993 -0.231506 -0.04248, 0.039993 -0.215027 -0.049988, 0.039993 -0.231506 -0.049988, + -0.039993 -0.231506 -0.049988, -0.039993 -0.215027 -0.049988, -0.060013 -0.215027 0.0495, 0.060013 -0.231506 0.0495, + 0.060013 -0.215027 0.0495, -0.060013 -0.231506 0.0495] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 3389 + 0 -1 0, 0.999715 0.00938679 -0.0219634, 0.999766 0.0167972 -0.0136448, 0.999969 0.00650161 -0.00443544, + 0.997866 0.033289 -0.056169, 0.999097 0.0406066 -0.0124912, 0.99891 0.0447966 -0.0131574, 0.998239 0.0580565 -0.0122152, + 0.997915 0.0443163 -0.0469246, 0.997806 0.06452 -0.0148668, 0.999992 0.00401763 -0.000143126, 0.996451 0.0841738 0, + 0.997999 0.0632205 -0.00089364, 0.996408 0.0846857 -9.99991e-005, 0.997469 0.0710927 -0.000723459, + 0.998088 0.0617715 -0.00216069, 0.998305 0.0581988 0, 0.99646 0.0836383 -0.00847674, 0.993135 0.0869415 -0.0782539, + 0.996298 0.0829372 0.0226096, 0.99438 0.0499569 -0.0933453, 0.998231 0.0593868 -0.00271677, 0.997915 0.0645253 -0.00165346, + 0.997716 0.0675186 -0.00202171, 0.998764 0.0464552 -0.017649, 0.998177 0.0476416 -0.0370586, 0.998219 0.0351897 -0.048169, + 0.998301 0.0582651 1.54633e-005, 0.987746 0.0598204 -0.144148, 0.999992 0.0039348 0, 0.99997 0.0065576 0.00406221, + 0.999797 0.00942606 0.0177798, 0.999795 0.0168626 0.0112234, 0.999341 0.0311778 0.0185827, 0.99757 0.0684933 -0.0127348, + 0.997682 0.0680396 -0.000767504, 0.997879 0.0650916 -0.00100313, 0.999509 0.0254865 -0.0182439, 0.999103 0.0406793 0.0117771, + 0.998251 0.058052 0.0112065, 0.997829 0.0645206 0.0132158, 0.998589 0.0518572 0.0114124, 0.998057 0.0622824 0.00170833, + 0.998194 0.0599982 0.00313499, 0.998208 0.059809 0.00212644, 0.997688 0.067941 0.00158674, 0.998553 0.0528334 -0.0100261, + 0.998716 0.0504459 -0.0046325, 0.998046 0.0607486 0.0146547, 0.998074 0.0615991 0.00735983, 0.998908 0.0447888 0.0133047, + 0.997763 0.0628827 0.0226858, 0.997999 0.0632252 0.000727631, 0.998323 0.0578871 0.00108881, 0.997496 0.0707179 0.000616944, + 0.997284 0.0666164 -0.0314037, 0.99791 0.0616122 -0.0194627, 0.997375 0.0595069 -0.0412679, 0.998103 0.0615652 0.000553804, + 0.980372 0.0712229 -0.183842, 0.996575 0.0819139 -0.0113085, 0.997462 0.0641232 0.0309545, 0.99675 0.0737432 0.0324381, + 0.996893 0.0733291 0.0287556, 0.997837 0.0631279 0.0183368, 0.997397 0.0711386 0.0117502, 0.997773 0.0666625 0.00235277, + 0.997648 0.0685044 0.00252665, 0.998096 0.0608232 0.0102745, 0.997844 0.0656305 -0.000542351, 0.998007 0.0630815 0.0017587, + 0.996948 0.0763268 -0.016397, 0.995726 0.0923205 -0.00247514, 0.993839 0.107892 -0.0253496, 0.993583 0.110445 -0.0244014, + 0.998096 0.0616407 -0.00203977, 0.997799 0.0662076 -0.00384489, 0.99334 0.115223 0, 0.998099 0.0615409 -0.00319284, + 0.997199 0.0730067 -0.0162644, 0.997576 0.0692981 -0.00633218, 0.997968 0.0631358 -0.00854917, 0.998144 0.0599901 -0.0104911, + 0.997836 0.064163 -0.0143599, 0.998098 0.0616464 0.000119585, 0.996284 0.0725686 0.0463863, 0.998179 0.0601246 -0.0048369, + 0.995682 0.0856159 0.0358897, 0.99666 0.0795178 0.0186057, 0.997347 0.0720734 0.0101697, 0.996533 0.081551 0.0164849, + 0.99791 0.0646157 -0.00105841, 0.998094 0.0616728 0.00197002, 0.997769 0.0666656 0.0034676, 0.998005 0.0631057 -0.00170013, + 0.998101 0.0606613 -0.010667, 0.994826 0.101284 0.00795491, 0.994125 0.10733 0.0139588, 0.994047 0.108955 0, + 0.998072 0.0617127 0.00666366, 0.997932 0.0600026 0.0230628, 0.99941 0.025484 0.0230153, 0.998022 0.060086 0.0185031, + 0.998297 0.0583428 5.40106e-005, 0.998314 0.0580364 -0.00122061, 0.0185727 0.00384943 -0.99982, + 0.0107198 0.00426323 -0.999933, 0 0 -1, 0.0262636 0.00568941 -0.999639, 0.0306233 0.00168169 -0.99953, + 0.0718403 0.00930682 -0.997373, 0.497628 0.448687 -0.742325, 0.131772 0.0394167 -0.990496, 0.054449 0.0125176 -0.998438, + 0.0378579 0 -0.999283, 0.0363848 -0.0124067 -0.999261, 0.0387608 -0.0245463 -0.998947, 0.0318297 -0.0188067 -0.999316, + 0.0354815 -0.00277601 -0.999366, 0.026552 0.0125077 -0.999569, 0.524541 0.498372 -0.690277, 0.285809 0.24711 -0.925878, + 0.459744 0.425357 -0.779556, 0.181604 0.143941 -0.97278, 0.331756 0.298579 -0.894868, 0.175184 0.134712 -0.975276, + 0.26788 0.227407 -0.93623, 0.511046 0.485465 -0.709335, 0.642972 0.629965 -0.435581, 0.661323 0.649415 -0.375382, + 0.697044 0.691887 -0.188206, 0.599097 0.578216 -0.553849, 0.658901 0.646642 -0.384322, 0.694638 0.69079 -0.200718, + 0.0827326 0.159978 -0.983647, 0.101673 0.326322 -0.939775, 0.0630754 0.196344 -0.978504, 0.086344 0.462999 -0.882143, + 0.123491 0.206965 -0.970523, 0.156716 0.669671 -0.725934, 0.200747 0.341082 -0.918348, 0.31823 0.647188 -0.692732, + 0.220173 0.336352 -0.915637, 0.143759 0.173075 -0.97436, 0.28471 0.370915 -0.883947, 0.0963763 0.203335 -0.974354, + 0.405633 0.586162 -0.701338, 0.0928923 0.697395 -0.710641, 0.198174 0.904449 -0.377756, 0.0365071 0.897923 -0.438636, + 0.283963 0.927723 -0.242269, 0.0801363 0.975952 -0.202721, 0.407824 0.822427 -0.396603, 0.587524 0.713706 -0.381364, + 0.564414 0.719155 -0.405281, 0.514219 0.538345 -0.667655, 0.496618 0.833505 -0.242157, 0.570419 0.794778 -0.207244, + 0.0491746 0.697527 -0.714869, 0.0454817 0.429542 -0.901901, 0.0444973 0.335718 -0.940911, 0.0406216 0.177153 -0.983345, + 0.0471455 0.450732 -0.891413, 0.0420819 0.212554 -0.976243, 0.0488954 0.721493 -0.690693, 0.0482507 0.885598 -0.46194, + 0.0456278 0.932962 -0.35707, 0.0421767 0.978209 -0.203296, 0.0465786 0.888323 -0.45685, 0.0489023 0.699756 -0.712706, + 0.039779 0.985775 -0.163296, 0.0345785 0.999402 1.11389e-006, 0.0345785 0.999402 1.1422e-006, 0.0345785 0.999402 1.08557e-006, + 0.0444937 0.33557 0.940964, 0.047166 0.450413 0.891574, 0.0421202 0.213192 0.976102, 0.0491744 0.697339 0.715053, + 0.0454495 0.429219 0.902056, 0.0406182 0.177796 0.983229, 0.0489023 0.699756 0.712706, 0.0465786 0.888324 0.45685, + 0.0456278 0.932962 0.35707, 0.039779 0.985775 0.163296, 0.0482507 0.885598 0.46194, 0.0488955 0.721494 0.690692, + 0.0421767 0.978209 0.203296, 0.182573 0.365148 0.912871, 0.116106 0.183738 0.976094, 0.0779244 0.0896139 0.992924, + 0.182574 0.365151 0.91287, 0.0418593 -0.00352244 0.999117, 0.0846484 0.0185832 0.996238, 0.0327293 0.00901454 0.999424, + 0.127361 0.0429098 0.990928, 0.15831 0.0678475 0.985056, 0.0588759 0.00336598 0.99826, 0.0346598 0 0.999399, + 0.0366588 -0.00148672 0.999327, 0.0390885 -0.0159629 0.999108, 0.0315737 0.00439171 0.999492, 0.0271809 0.0114314 0.999565, + 0.0354813 -0.00277604 0.999367, 0.459743 0.425358 0.779556, 0.267879 0.227406 0.93623, 0.285809 0.24711 0.925878, + 0.175183 0.134712 0.975276, 0.181605 0.143942 0.97278, 0.331757 0.298579 0.894868, 0.524445 0.498258 0.690432, + 0.599104 0.578337 0.553716, 0.662106 0.650632 0.371879, 0.660708 0.649109 0.376991, 0.695574 0.693018 0.189481, + 0.642947 0.629834 0.435807, 0.511046 0.485465 0.709335, 0.697237 0.692789 0.184132, 0.705878 0.708334 2.20032e-005, + 0.705878 0.708333 2.21183e-005, 0.705877 0.708334 2.18882e-005, 0.817976 0.575253 3.80325e-005, 0.845007 0.534756 5.2356e-005, + 0.838249 0.545288 -5.47164e-005, 0.887177 0.461429 -0.000135073, 0.82787 0.56092 -0.000188676, 0.908683 0.417488 2.76756e-005, + 0.930296 0.36681 0.000278916, 0.961117 0.276141 0, 0.966421 0.256962 0.000161882, 0.973653 0.228034 0.000374913, + 0.980888 0.194571 1.51983e-005, 0.662707 0.483819 0.57161, 0.646138 0.482735 0.591162, 0.63994 0.509864 0.574905, + 0.675822 0.474544 0.563979, 0.761579 0.519728 0.387144, 0.740242 0.499795 0.449719, 0.896622 0.372239 0.239805, + 0.938799 0.294049 0.179419, 0.880649 0.347454 0.322077, 0.956161 0.250452 0.151757, 0.952406 0.271679 0.138252, + 0.816492 0.451662 0.359641, 0.908197 0.392151 0.146275, 0.839307 0.497639 0.218906, 0.655948 0.479724 0.58275, + 0.825098 0.528053 0.200931, 0.962249 0.192452 0.192454, 0.639944 0.509857 -0.574906, 0.646142 0.482732 -0.591161, + 0.662517 0.483683 -0.571946, 0.675451 0.474702 -0.564291, 0.740144 0.499674 -0.450014, 0.757833 0.522375 -0.390913, + 0.834717 0.506811 -0.215383, 0.938097 0.270961 -0.215764, 0.914214 0.375211 -0.15307, 0.896862 0.372105 -0.239115, + 0.822676 0.534431 -0.193873, 0.806538 0.555629 -0.201924, 0.816942 0.450939 -0.359526, 0.656068 0.478899 -0.583293, + 0.881266 0.347121 -0.320745, 0.953454 0.259646 -0.15333, 0.528921 0.848671 0, 0.554182 0.832396 0.000225688, + 0.625318 0.78037 9.80678e-006, 0.460452 0.887684 0.000373823, 0.591044 0.806639 0.000555514, 0.411247 0.911524 7.87531e-006, + 0.359469 0.933157 -0.000351078, 0.253915 0.967227 -0.000202887, 0.283687 0.958917 1.42142e-005, + 0.208456 0.978032 -0.000521935, 0.164196 0.986428 7.73573e-006, 0.222478 0.297439 0.928458, 0.158524 0.186254 0.969629, + 0.14663 0.188529 0.971059, 0.162732 0.33276 0.928864, 0.0862258 0.161654 0.983073, 0.113437 0.342409 0.932678, + 0.277663 0.627782 0.727182, 0.317586 0.317947 0.893336, 0.387191 0.550178 0.739856, 0.0478049 0.186692 0.981255, + 0.0730372 0.203286 0.976391, 0.0928923 0.697396 0.71064, 0.181794 0.715852 0.674171, 0.0863422 0.462998 0.882144, + 0.514218 0.538346 0.667655, 0.564787 0.738343 0.368599, 0.587523 0.713707 0.381364, 0.544438 0.818854 0.181842, + 0.606942 0.773098 0.184231, 0.410427 0.878503 0.244505, 0.404597 0.79809 0.446491, 0.0365071 0.897923 0.438635, + 0.186198 0.912745 0.363629, 0.134141 0.964423 0.227802, -0.082699 0.09829 0.991716, -0.0423101 -0.00374717 0.999098, + -0.0988464 0.132094 0.986296, 0.46296 -0.555561 0.690666, -0.071848 0.00930304 0.997372, -0.0306349 0.00167597 0.999529, + -0.198942 0.398701 0.895243, -0.216163 0.97094 -0.102712, -0.0346598 0 0.999399, -0.131772 0.0394167 0.990496, + -0.054449 0.0125176 0.998438, -0.0174225 0.0227954 0.999588, -0.0314231 0.0087911 0.999467, -0.0354813 -0.00277603 0.999367, + -0.0382324 -0.0074885 0.999241, -0.0288351 0.0178707 0.999424, -0.520606 0.494552 0.69598, -0.288426 0.249587 0.924401, + -0.455047 0.422231 0.783998, -0.184458 0.146239 0.9719, -0.330491 0.295938 0.896212, -0.175289 0.134798 0.975245, + -0.273367 0.233003 0.933263, -0.507188 0.481352 0.714885, -0.643057 0.630056 0.435325, -0.662196 0.65071 0.371581, + -0.697242 0.692837 0.18393, -0.59401 0.573575 0.564059, -0.660781 0.649036 0.376989, -0.695606 0.692926 0.189701, + -0.0433298 0.169208 0.984627, -0.0843539 0.317508 0.944496, -0.0629986 0.19637 0.978504, -0.0845708 0.463974 0.881803, + -0.0947955 0.152363 0.983768, -0.160431 0.667933 0.726724, -0.18385 0.338109 0.922974, -0.307903 0.641753 0.702388, + -0.217981 0.342897 0.913732, -0.15396 0.206848 0.966183, -0.308708 0.321806 0.895064, -0.154737 0.210134 0.96535, + -0.404923 0.566465 0.717742, -0.0870525 0.697786 0.710997, -0.222884 0.905833 0.360262, -0.0342117 0.897978 0.438708, + -0.25187 0.938866 0.234718, -0.0801363 0.975952 0.202721, -0.414902 0.805733 0.422671, -0.452674 0.86196 0.22828, + -0.587563 0.713858 0.381021, -0.568771 0.718742 0.399888, -0.512221 0.535485 0.67148, -0.579651 0.789725 0.200847, + -0.164633 0.986355 -2.58771e-006, -0.26634 0.963879 0, -0.241423 0.97042 0.000177934, -0.360546 0.932741 0.00028907, + -0.203819 0.979009 0.000454014, -0.417852 0.908515 -1.41351e-005, -0.471396 0.881921 -0.000260015, + -0.552337 0.833621 -3.46148e-005, -0.570882 0.821032 -0.000171365, -0.59812 0.801406 -0.000392148, + -0.623762 0.781614 -2.44447e-005, -0.0346011 0.999401 -1.11462e-006, -0.0346012 0.999401 -1.14295e-006, + -0.0346011 0.999401 -1.08628e-006, -0.0492065 0.697338 0.715052, -0.045507 0.429218 0.902054, -0.0445188 0.33542 0.941016, + -0.0406457 0.177407 0.983298, -0.047168 0.450413 0.891573, -0.0421246 0.212806 0.976186, -0.0489573 0.721492 0.69069, + -0.0483117 0.885595 0.461939, -0.0456555 0.933015 0.356929, -0.0422079 0.978284 0.202928, -0.0465806 0.888323 0.45685, + -0.0489044 0.699756 0.712706, -0.0397822 0.985836 0.162926, -0.0445221 0.335557 -0.940967, -0.0471455 0.450732 -0.891413, + -0.0420846 0.212141 -0.976332, -0.0492066 0.697526 -0.714868, -0.0455412 0.429541 -0.901898, -0.0406493 0.176736 -0.983419, + -0.0489023 0.699756 -0.712706, -0.0465786 0.888323 -0.45685, -0.0456553 0.933019 -0.356919, -0.0397806 0.98584 -0.162899, + -0.0483138 0.885595 -0.461939, -0.0489593 0.721491 -0.69069, -0.0422081 0.978289 -0.202902, -0.0107521 0.00424648 -0.999933, + -0.0263146 0.00567237 -0.999638, -0.018611 0.00383665 -0.999819, -0.0846431 0.0185862 -0.996238, + -0.127361 0.0429102 -0.990928, -0.15831 0.0678475 -0.985056, -0.0373691 -0.00602729 -0.999283, -0.0378579 0 -0.999283, + -0.0588763 0.00336631 -0.99826, -0.0276716 0.00692068 -0.999593, -0.0271812 0.0114315 -0.999565, + -0.0354815 -0.00277601 -0.999366, -0.0177202 0.0280047 -0.999451, -0.0268958 0.0048454 -0.999627, + -0.455109 0.422334 -0.783907, -0.273304 0.233006 -0.933281, -0.288459 0.249647 -0.924375, -0.175184 0.134712 -0.975276, + -0.184291 0.14607 -0.971957, -0.33065 0.296103 -0.896099, -0.520705 0.494662 -0.695827, -0.593875 0.573379 -0.564402, + -0.661323 0.649415 -0.375382, -0.658901 0.646642 -0.384322, -0.694638 0.69079 -0.200718, -0.642972 0.629965 -0.435581, + -0.50731 0.481482 -0.714711, -0.697044 0.691887 -0.188206, -0.705898 0.708314 -1.64637e-005, -0.705878 0.708333 -2.18882e-005, + -0.705917 0.708294 -1.10391e-005, -0.781494 0.623912 -1.21262e-005, -0.860386 0.509643 0, -0.841429 0.540368 0.000210831, + -0.898565 0.438841 0.000340205, -0.811054 0.584971 0.000553106, -0.923786 0.382909 -2.89038e-005, + -0.939188 0.343404 -0.000220491, -0.961117 0.276141 -5.95502e-005, -0.966097 0.258181 -0.000162052, + -0.972929 0.231103 -0.000344936, -0.98027 0.197663 -4.55572e-005, -0.651665 0.455107 0.606803, -0.651665 0.455106 0.606804, + -0.666574 0.465517 0.582214, -0.675823 0.474545 0.563977, -0.740244 0.499793 0.449717, -0.761577 0.519731 0.387144, + -0.841667 0.502792 0.196969, -0.937973 0.270924 0.21635, -0.923239 0.359161 0.136504, -0.896622 0.372239 0.239805, + -0.840187 0.52497 0.135987, -0.804524 0.569481 0.168622, -0.816494 0.451659 0.359641, -0.655957 0.479719 0.582743, + -0.880649 0.347454 0.322077, -0.994751 0.0971373 0.0321758, -0.994149 0.106761 -0.0164439, -0.995973 0.0873624 -0.0201445, + -0.994855 0.100889 -0.00927214, -0.994115 0.108334 0, -0.996004 0.0891678 0.00508546, -0.997223 0.0716595 -0.0202805, + -0.996434 0.0835916 -0.0114474, -0.997868 0.0652578 -0.00119225, -0.997707 0.0676855 0.000308484, + -0.998099 0.0611412 -0.00780288, -0.993483 0.113982 0, -0.994029 0.107295 0.0198683, -0.993801 0.109582 0.0187218, + -0.995849 0.0900484 0.0132844, -0.995674 0.0928638 0.00307644, -0.996363 0.0834609 -0.0172037, -0.997296 0.0732015 0.00651843, + -0.997707 0.0676855 0, -0.997865 0.0652941 0.00127231, -0.998113 0.0610281 0.00672277, -0.998476 0.0551808 -0.00116234, + -0.999039 0.0438203 -3.09499e-005, -0.999502 0.031553 -8.82698e-006, -0.998169 0.060479 -0.000857147, + -0.99786 0.0653798 0.00080401, -0.998931 0.0456955 -0.00694312, -0.99939 0.0348551 -0.00232145, + -0.998501 0.0547051 -0.00154256, -0.999885 0.0151894 2.17613e-005, -0.997867 0.0652805 -0.000522357, + -0.9989 0.0465105 0.00601229, -0.998169 0.0604789 0.000912141, -0.998524 0.0542932 0.0016733, -0.999391 0.0348424 0.00211944, + -0.999885 0.0151894 -2.17319e-005, -0.66638 0.465378 -0.582547, -0.651668 0.455102 -0.606803, -0.651669 0.455099 -0.606805, + -0.675451 0.474702 -0.564291, -0.757833 0.522375 -0.390913, -0.740144 0.499674 -0.450014, -0.896862 0.372105 -0.239115, + -0.942133 0.2842 -0.177807, -0.881266 0.347121 -0.320745, -0.964781 0.231111 -0.125643, -0.958337 0.258805 -0.120874, + -0.816942 0.450939 -0.359526, -0.906003 0.395774 -0.150071, -0.83564 0.501662 -0.223698, -0.656068 0.478899 -0.583293, + -0.813682 0.539881 -0.215524, -0.970142 0.194031 -0.145525, -0.814159 0.580597 -0.00727308, -0.702979 0.71121 0.000500514, + -0.624894 0.780635 -0.0108012, -0.598277 0.801261 0.00674384, -0.730745 0.682603 0.00803661, -0.857983 0.513675 0.00177211, + -0.957124 0.289662 0.00303322, -0.94559 0.325361 0, -0.983121 0.182954 0, -0.888742 0.458378 0.00512036, + -0.97183 0.23556 0.00755708, -0.544828 0.838548 0, -0.447214 0.894427 0, -0.447212 0.894428 2.3531e-008, -0.447212 0.894428 0, + -0.447213 0.894428 5.88275e-008, -0.334763 0.942303 0, -0.263197 0.964738 -0.00276937, -0.373055 0.927809 3.94803e-008, + -0.145652 0.989336 0, -0.110804 0.993841 -0.00165202, 0 1 0, -0.0584652 0.998281 -0.00411729, -0.0378062 0.999285 0, + 0.0378062 0.999285 0, 0.0548232 0.998487 0.00433355, 0.109347 0.994002 0.00173915, 0.145652 0.989336 0, 0.334763 0.942303 0, + 0.260852 0.965374 0.00291653, 0.447212 0.894428 0, 0.447212 0.894428 -2.39436e-008, 0.447214 0.894427 0, + 0.447213 0.894428 -5.9859e-008, 0.373055 0.927809 -4.01726e-008, 0.544828 0.838548 0, 0.639865 0.768446 0.00790279, + 0.803877 0.594772 0.00533418, 0.694215 0.719768 0.000651082, 0.614627 0.788808 -0.00396763, 0.719438 0.694544 -0.0041895, + 0.849213 0.52805 -0.000775627, 0.95718 0.289477 -0.00305889, 0.94559 0.325361 0, 0.983121 0.182954 0, + 0.888889 0.458093 -0.005164, 0.971943 0.235092 -0.00762084, 0.0558551 -0.00985388 -0.99839, 0.0573162 -0.00619922 -0.998337, + 0.0371626 -0.00119078 -0.999309, 0.0255456 0.00317609 -0.999669, 0.00424372 0.00848747 -0.999955, + 0.0382936 0.0129855 -0.999182, 0.0355387 0.00755325 -0.99934, 0.0342828 0.00640985 -0.999392, 0.0324345 0.00390091 -0.999466, + 0.0326666 -0.000458237 -0.999466, -0.00490039 -0.00291696 -0.999984, 0.0215714 -0.000914969 -0.999767, + 0.0179246 -0.00169291 -0.999838, 0.741708 0.0546411 -0.668494, -0.00717555 -0.00307525 -0.99997, 0.0271249 0 -0.999632, + 0.0324921 0.000815393 -0.999472, 0.033929 0.000350993 -0.999424, 0.0284616 0.000365766 -0.999595, + 0.0296598 -0.00138675 -0.999559, 0.0339992 -0.000169703 -0.999422, 0.0312025 -0.00555056 -0.999498, + 0.0348827 -0.000956904 -0.999391, 0.0428431 0.0156944 -0.998959, 0.0487285 0.0408699 -0.997976, + 0.0378497 0.00807531 -0.999251, 0.0310155 0.000422925 -0.999519, 0.0299767 -5.23559e-005 -0.999551, + 0.0303254 -0.00200888 -0.999538, 0.0262562 0.00144311 -0.999654, 0.0335138 0.00167093 -0.999437, + 0.034374 -0.00149154 -0.999408, 0.034286 -0.00223635 -0.99941, 0.0357321 -0.00223016 -0.999359, 0.947337 0.319733 -0.0179715, + 0.892908 0.449233 -0.0300934, 0.858439 0.512916 0.000660333, 0.962085 0.269045 -0.044808, 0.935629 0.352986 0, + 0.975629 0.219426 0, 0.821118 0.570168 0.0259443, 0.736635 0.676102 0.0159836, 0.758823 0.651296 0.000828637, + 0.66966 0.742667 -0.000731445, 0.703296 0.709846 0.0386334, 0.500292 0.865758 0.0131156, 0.390993 0.920337 -0.0101808, + 0.448063 0.893823 0.017876, 0.518313 0.855001 0.0180091, 0.541639 0.840611 0, 0.318275 0.947996 0.00229672, + 0.303005 0.952072 -0.0417974, 0.174507 0.984537 0.0153004, 0.233985 0.9722 0.00884226, 0.107153 0.994228 0.00543416, + 0.000155208 0.999873 0.0159125, 0.424769 0.905294 -0.00369167, 0.280877 0.959741 0.00213271, 0.127939 0.991742 0.00892355, + 0.000204636 1 0, -0.17437 0.984535 0.0169274, -0.106887 0.994256 0.00557653, -0.250446 0.968129 0.00170567, + -0.127796 0.991743 0.0106582, -0.325176 0.94554 0.0146539, -0.315174 0.949034 9.22598e-005, -0.288172 0.957579 0, + -0.418011 0.908433 0.00403897, -0.459662 0.888082 -0.0046053, -0.507104 0.86127 -0.032562, -0.280193 0.959919 0.00685747, + -0.424135 0.905598 -0.00164628, -0.514081 0.857741 0.00143514, 0.424769 0.905291 0.00438451, 0.280879 0.95974 -0.0025331, + 0.324131 0.946012 -0.000570911, 0.170638 0.985225 -0.0146234, 0.127934 0.991726 -0.0105987, 0.000159452 0.999685 -0.0250836, + 0.517154 0.855707 -0.0178129, 0.449404 0.893125 -0.0190571, 0.500405 0.865735 -0.00991261, 0.535643 0.844445 0, + 0.390264 0.920598 0.0138846, 0.242047 0.969451 0.0397251, 0.100109 0.994964 -0.00488224, -0.12779 0.99172 -0.0126587, + -0.280192 0.959909 -0.00814455, -0.170498 0.985218 -0.0166051, -0.0998259 0.994992 -0.00514741, -0.323166 0.946161 -0.0185235, + -0.424136 0.905596 0.00195509, -0.459594 0.888114 0.00516181, -0.51408 0.85774 -0.00170463, 0.000219733 1 0, + -0.225874 0.974126 0.00776039, -0.321678 0.946804 -0.00928438, -0.506771 0.861106 0.0409897, -0.417373 0.908712 -0.00656952, + 0 0 1, -0.961999 0.269701 0.0426617, -0.891985 0.451156 0.0286576, -0.947509 0.319115 0.0198125, + -0.934907 0.354864 0.00450219, -0.857032 0.515261 0.00148804, -0.976197 0.216876 0.00227845, -0.75738 0.652974 0, + -0.668986 0.743275 0, -0.736655 0.676085 -0.0157973, -0.819426 0.572575 -0.0264454, -0.703959 0.709147 -0.0394096, + -0.140031 0.00866113 -0.990109, -0.280241 0.0199186 -0.959723, -0.059305 0.00269979 -0.998236, + -0.0249703 -0.000873738 -0.999688, 0.00267044 -0.00274531 -0.999993, -0.0323765 0.000652824 -0.999476, + -0.0335138 0.00167093 -0.999437, -0.0326952 -0.000207976 -0.999465, -0.0271249 0 -0.999632, -0.0255456 0.0031761 -0.999669, + -0.104518 -0.0271751 -0.994152, -0.0557133 -0.00570134 -0.998431, -0.021486 0.010099 -0.999718, + -0.102429 -0.0213009 -0.994512, -0.032356 0.00430181 -0.999467, -0.0342482 0.00716802 -0.999388, + -0.0354807 0.00852904 -0.999334, -0.0423002 -0.00016122 -0.999105, -0.0393328 3.61594e-005 -0.999226, + -0.0358403 0.00126703 -0.999357, -0.0368266 -0.00137062 -0.999321, -0.0294701 0.00166892 -0.999564, + -0.034556 -0.000820364 -0.999402, -0.0345352 -0.000376805 -0.999403, -0.0404754 -0.00379058 -0.999173, + -0.0358464 -0.000962994 -0.999357, -0.0126264 -0.000753532 -0.99992, -0.0328576 -0.000823014 -0.99946, + -0.0238023 -0.00242947 -0.999714, -0.0251579 -0.00573738 -0.999667, -0.0343028 -0.00756424 -0.999383, + -0.0329687 -0.00658651 -0.999435, -0.0274458 -0.00548314 -0.999608, -0.038341 0.0142573 -0.999163, 0.449218 -0.893422 0, + 0.480043 -0.877245 0, 0.53984 -0.841767 0, 0.417925 -0.908481 0, -0.417982 -0.908455 0, -0.458116 -0.888892 0, + -0.477885 -0.878422 0, -0.535643 -0.844445 0, -0.438113 0.898376 -0.0312547, -0.462611 0.88532 -0.0468951, + -0.532541 0.846336 -0.0107831, -0.324409 0.944075 -0.0590099, -0.337485 0.941331 0, -0.176849 0.983888 0.0262418, + -0.23736 0.970568 0.0407281, 0.00102397 -0.146723 0.989177, -0.191216 0.949757 0.247786, -0.000204507 0.923563 0.383447, + -0.104752 0.993101 -0.0526938, -0.0877612 0.894815 0.437727, -0.156041 0.715326 -0.681145, -0.0293855 0.962639 -0.269188, + 0.0434764 0.999016 0.00875917, -0.0100546 0.996521 -0.0827385, 0.332778 0.941051 -0.0606758, 0.387717 0.921013 -0.0375429, + 0.43711 0.898478 -0.0408931, 0.146204 0.979511 -0.138498, 0.460132 0.886545 -0.0481362, 0.532541 0.846336 -0.0107831, + 0.221222 0.970167 -0.0991858, 0.124036 0.987419 0.0980749, 0.164245 0.571179 0.804225, 0.325053 0.945696 0, + 0.388076 0.921627 -0.000544139, -0.207148 -0.9727 -0.104612, -0.094187 -0.995528 -0.00733232, -0.173461 -0.979885 0.0986738, + -0.44515 -0.895442 -0.00499534, -0.368093 -0.914415 -0.168382, -0.304182 -0.952601 0.00496267, -0.520076 -0.776727 -0.35527, + -0.34351 -0.899853 -0.268823, -0.566013 -0.749806 0.342665, -0.495332 -0.81128 0.310598, -0.664351 -0.664653 -0.341869, + -0.569776 -0.731071 -0.375354, -0.908781 -0.366644 -0.199221, -0.817281 -0.551881 -0.165769, -0.877987 -0.465273 -0.112519, + -0.982232 -0.171828 -0.0754652, -0.955217 -0.270025 -0.121025, -0.741177 -0.670034 0.0413685, -0.991193 -0.132304 0.00564555, + -0.999762 0.0006115 -0.0218236, -0.334338 -0.867557 0.36819, -0.485413 -0.788929 0.376782, -0.597001 -0.639341 0.484596, + -0.0932816 -0.99564 0, -0.606958 -0.649846 -0.457495, -0.49239 -0.806462 -0.327371, -0.767577 -0.51771 0.377892, + -0.929225 -0.367211 -0.0412047, -0.606227 -0.302418 0.735549, -0.504185 -0.20667 0.838502, -0.386927 -0.104684 0.916149, + -0.638966 -0.684116 0.35172, -0.999998 0.00178999 0, -0.953645 0.270268 -0.132349, -0.908836 0.364787 -0.202357, + -0.979917 0.174538 -0.0964301, -0.874344 0.463986 -0.142265, -0.80985 0.545212 -0.216535, -0.990339 0.135941 -0.0273505, + -0.930073 0.36476 -0.0437499, -0.827902 0.560495 -0.0205716, -0.570836 0.756252 0.319734, -0.638753 0.690335 0.339752, + -0.632535 0.607219 0.480817, -0.520302 0.777049 -0.354232, -0.658013 0.659615 -0.363218, -0.566065 0.72784 -0.387066, + -0.367799 0.914907 -0.166338, -0.302857 0.953035 -0.00138375, -0.206933 0.973004 -0.102182, -0.421136 0.836721 -0.350061, + -0.094193 0.995527 -0.00728361, -0.173153 0.980317 0.0948464, -0.718714 0.628367 -0.297668, -1 0 0, + -0.602794 0.651472 -0.460678, -0.446529 0.122144 0.886393, -0.543414 0.219489 0.810263, -0.622012 0.412192 0.665732, + -0.626899 0.311421 0.714153, -0.601291 0.645768 0.470567, -0.493786 0.799692 0.341568, -0.339076 0.892209 -0.298312, + -0.420254 0.854022 0.306649, -0.0932935 0.995639 0, -0.336148 0.87459 0.349422, -0.485893 0.792245 -0.369128, + -0.498339 0.812537 0.302395, 0.207085 0.972864 -0.103204, 0.0943569 0.9955 -0.00871224, 0.173856 0.980597 0.0905708, + 0.41947 0.852055 0.313123, 0.34231 0.900719 0.26745, 0.302965 0.953001 0.0012028, 0.358161 0.864666 -0.352241, + 0.522374 0.779309 -0.346124, 0.422547 0.838244 -0.344675, 0.339076 0.892209 -0.298312, 0.570836 0.756252 0.319734, + 0.498339 0.812537 0.302395, 0.658013 0.659615 -0.363218, 0.566065 0.72784 -0.387066, 0.908836 0.364787 -0.202357, + 0.80985 0.545212 -0.216535, 0.874344 0.463986 -0.142265, 0.979917 0.174538 -0.0964301, 0.953645 0.270268 -0.132349, + 0.740909 0.671393 0.0168793, 0.990339 0.135941 -0.0273505, 0.999178 0.00133151 -0.0405233, 0.0932816 0.99564 0, + 0.485893 0.792245 -0.369128, 0.336974 0.875625 0.346018, 0.493786 0.799692 0.341568, 0.601291 0.645768 0.470567, + 0.602794 0.651472 -0.460678, 0.827902 0.560495 -0.0205716, 0.930073 0.36476 -0.0437499, 0.626899 0.311421 0.714153, + 0.622012 0.412192 0.665732, 0.543414 0.219489 0.810263, 0.446529 0.122144 0.886393, 0.638753 0.690335 0.339752, 1 0 0, + 0.955237 -0.2744 -0.110575, 0.916919 -0.365602 -0.159982, 0.977277 -0.175278 -0.119196, 0.87674 -0.46517 -0.122246, + 0.808891 -0.547146 -0.215236, 0.988635 -0.136816 -0.062304, 0.931244 -0.361485 0.0459666, 0.826173 -0.563053 -0.0202417, + 0.566567 -0.750971 0.339181, 0.629926 -0.680795 0.373781, 0.622084 -0.598189 0.505155, 0.524614 -0.785147 -0.329126, + 0.66295 -0.663761 -0.346294, 0.567944 -0.731372 -0.377537, 0.360318 -0.868699 -0.3399, 0.303101 -0.952947 0.00474702, + 0.206725 -0.973289 -0.0998638, 0.4226 -0.838551 -0.343863, 0.094193 -0.995527 -0.00728361, 0.173153 -0.980317 0.0948464, + 0.72346 -0.631943 -0.277944, 0.999998 0.00195217 0, 0.613251 -0.662774 -0.429714, 0.470602 -0.132948 0.872272, + 0.525672 -0.20798 0.824872, 0.592316 -0.394405 0.702571, 0.575008 -0.280743 0.768472, 0.595404 -0.639491 0.486359, + 0.494912 -0.80061 0.337767, 0.339313 -0.888728 -0.308268, 0.342371 -0.896737 0.280438, 0.4195 -0.852347 0.312288, + 0.0932935 -0.995639 0, 0.338055 -0.878412 0.337805, 0.481701 -0.788955 -0.381465, 0.495332 -0.81128 0.310598, + 0 0.707108 0.707106, 0 0.707107 0.707107, 0 0.70711 0.707104, 0.0323625 -0.0013666 0.999475, 0.0350289 -0.00106741 0.999386, + 0.0348562 -0.00170767 0.999391, 0.0332581 -0.00119682 0.999446, 0.0370092 -0.00173668 0.999313, 0.0363179 0 0.99934, + 0.0308334 -0.00205742 0.999522, 0.0367009 -0.0028861 0.999322, 0.0353424 -0.00141497 0.999374, 0.0364517 -0.00104483 0.999335, + 0.0338878 -0.000769311 0.999425, 0.059606 0.007104 0.998197, 0.0335841 -0.000856172 0.999435, 0.051984 0.00612642 0.998629, + 0.109274 0.0239774 0.993722, 0.0320523 0.00157866 0.999485, 0.0321493 -0.000142886 0.999483, 0.0325766 -3.0681e-005 0.999469, + 0.03269 -0.00178249 0.999464, 0.0352894 0.000680407 0.999377, 0.0361565 0 0.999346, 0.0354242 0.000426393 0.999372, + 0.0138711 -0.000237262 0.999904, 0.0317062 -0.000137125 0.999497, 0.0245285 0.000144649 0.999699, + 0.0286052 0.00072639 0.999591, 0.0386747 0.000856242 0.999251, 0.0335515 1.55647e-005 0.999437, + 0.0353078 0.000765546 0.999376, 0.0165835 -0.00155153 0.999861, 0.0228727 -0.000602633 0.999738, + -0.00267036 -0.00274522 0.999993, -0.0073053 -0.00311263 0.999968, -0.0115321 -0.00344958 0.999928, + 0.173325 0.984733 -0.0161209, 0.0916238 0.995793 0.00121222, 0.208588 0.977929 0.0120492, 0.304482 0.952518 -0.000888914, + 0.375677 0.926629 0.0150388, 0.451203 0.892421 -0.000618056, 0.544824 0.838508 0.0084028, 0.366481 0.930211 -0.0200005, + 0.612643 0.790349 -0.0041286, 0.697518 0.716531 0.00720551, 0.884824 0.465909 -0.00384213, 0.827845 0.56092 0.00647712, + 0.928057 0.372426 0.00300259, 0.966446 0.256871 0.00080016, 0.985129 0.171734 -0.00533533, 0.760945 0.648815 -0.00150694, + 0.999996 0.0013394 0.00263215, 0.0904808 0.995898 -3.0251e-005, 0.539178 0.841832 -0.0246271, 0.695504 0.718318 -0.0171238, + 0.83151 0.555319 -0.0145591, 0.930453 0.366277 -0.00994065, 0.985996 0.166508 0.00933352, 0.999998 0.00213096 -0.000278284, + 0.985326 -0.1706 -0.00536451, 0.92676 -0.375652 0.000685009, 0.966191 -0.257829 9.77374e-005, 0.829587 -0.558359 0.004522, + 0.884498 -0.466541 -0.00195856, 0.98643 -0.164086 0.00562747, 0.929779 -0.368082 -0.00515168, 0.762917 -0.646495 -0.00141226, + 0.696984 -0.717008 0.0106153, 0.611891 -0.790941 -0.00135337, 0.543243 -0.83941 0.0166626, 0.208168 -0.978002 0.0133225, + 0.304324 -0.952569 -0.000296234, 0.376042 -0.926367 0.0208882, 0.450914 -0.892565 0.00205161, 0.172585 -0.984851 -0.0168331, + 0.0912334 -0.995829 0.00122747, 0.83259 -0.553777 -0.011194, 0.696209 -0.717614 -0.0179559, 0.538578 -0.842184 -0.0256955, + 0.36584 -0.930387 -0.0232708, 0.0900816 -0.995934 -3.01176e-005, -0.172751 -0.984823 -0.0167702, + -0.0916248 -0.995793 0.00127227, -0.207848 -0.978073 0.0131174, -0.304062 -0.952652 -0.000964092, + -0.376273 -0.926315 0.0189494, -0.451208 -0.892418 0.00128734, -0.543814 -0.839049 0.0162257, -0.36584 -0.930387 -0.0232708, + -0.611903 -0.790932 -0.00105878, -0.696998 -0.716983 0.0113458, -0.884498 -0.466541 -0.00146992, + -0.829583 -0.558357 0.00544091, -0.926759 -0.375652 0.0017108, -0.96619 -0.257829 0.000631895, + -0.985323 -0.170643 -0.00436436, -0.762917 -0.646495 -0.000990101, -0.999999 0.000562193 0.00109814, + -0.090483 -0.995898 3.02518e-005, -0.538578 -0.842184 -0.0256955, -0.696209 -0.717614 -0.0179559, + -0.83259 -0.553777 -0.011194, -0.929779 -0.368082 -0.00515168, -0.98643 -0.164086 0.00562747, -1 0 0.000555535, + -0.985102 0.171931 -0.00365725, -0.926245 0.376849 0.00745187, -0.966192 0.257823 4.47545e-005, -0.830135 0.557455 0.0109228, + -0.88479 0.465971 0.00414788, -0.986422 0.164229 0.00116941, -0.930716 0.365702 -0.0054507, -0.762927 0.646481 0.00214213, + -0.697752 0.716238 0.0120894, -0.611903 0.790932 -0.00105878, -0.543245 0.839399 0.0171609, -0.2091 0.977808 0.0129917, + -0.305384 0.952228 -0.00119803, -0.376411 0.926219 0.0208207, -0.450615 0.892718 0.00115749, -0.173443 0.9847 -0.0168158, + -0.0908345 0.995865 0.00130263, -0.832747 0.553615 -0.0065166, -0.695483 0.718337 -0.0171698, -0.538029 0.842504 -0.0266726, + -0.999998 0.00221486 0, -0.365936 0.93029 -0.0255199, -0.0896749 0.995971 2.99816e-005, -0.0442183 0.00196518 0.99902, + -0.0352284 0.000634193 0.999379, -0.0371547 -0.000194146 0.99931, -0.0334044 -0.000790706 0.999442, + -0.0336527 -0.00129399 0.999433, -0.0314822 1.29498e-005 0.999504, -0.0303819 0.00155251 0.999537, + -0.0347172 -0.00193229 0.999395, -0.0319293 -0.0017418 0.999489, -0.0334917 -0.000410389 0.999439, + -0.0332227 -0.00202058 0.999446, -0.0359121 0.000722972 0.999355, -0.0334646 -0.00109572 0.999439, + -0.0366743 0.000688665 0.999327, -0.0347827 -0.00174418 0.999393, -0.0348013 -0.000994339 0.999394, + -0.0354556 -0.000798221 0.999371, -0.0359913 0 0.999352, -0.0308076 -0.00222495 0.999523, -0.0335515 1.55647e-005 0.999437, + -0.0349424 0.00112194 0.999389, -0.0296817 0.000480356 0.999559, -0.0386747 0.000856242 0.999251, + -0.0120397 -0.00147774 0.999926, 0.0229651 -0.0042737 0.999727, 0.0150706 -0.0036745 0.99988, 0.00490009 -0.00291678 0.999984, + -0.016478 -0.00192433 0.999862, -0.0316839 -7.94788e-005 0.999498, -0.0138659 -0.000227412 0.999904, + -0.0245182 0.000195433 0.999699, -0.0363179 0 0.99934, -0.0353381 0.000731696 0.999375, -0.0355066 0.000470303 0.999369, + -0.0360713 0.999338 -0.0046554, -0.0346601 0.999399 1.0614e-005, -0.0374817 0.999254 -0.00932131, + -0.182108 0.983268 -0.00454997, -0.119317 0.992815 -0.00903643, -0.183244 0.983061 -0.00356295, + -0.225435 0.974258 0.000139364, -0.334762 0.942303 9.15057e-005, -0.263197 0.964738 -0.00297825, + -0.447212 0.894428 0.000110472, -0.44758 0.894244 3.45611e-005, -0.447213 0.894427 0.000138033, -0.3728 0.927912 0.000207202, + -0.544837 0.838542 0.000125479, -0.544832 0.838545 0.000166885, -0.544841 0.838539 8.40738e-005, -0.62382 0.781481 -0.0116342, + -0.81387 0.580993 -0.00789213, -0.70259 0.711595 0.000610458, -0.597772 0.801632 0.00739755, -0.730756 0.682581 0.00892857, + -0.857989 0.513664 0.00212489, -0.957293 0.289098 0.00358409, -0.983302 0.181982 0.000152043, -0.888895 0.45807 0.00610301, + -0.972167 0.234128 0.00864481, 0.0360706 0.999338 -0.00467749, 0.0346593 0.999399 -1.06138e-005, + 0.0374809 0.999254 -0.00934426, 0.446482 0.894792 -0.000207187, 0.44692 0.894574 -0.00013821, 0.447212 0.894428 -0.00027655, + 0.446482 0.894793 -6.8976e-005, 0.334763 0.942303 -0.000115443, 0.295781 0.955256 -0.000171131, + 0.373055 0.927809 -4.32026e-008, 0.152815 0.988253 -0.00191737, 0.0548819 0.998482 -0.00466541, 0.163502 0.986532 -0.00471488, + 0.544824 0.838551 -0.000167669, 0.544824 0.838551 -0.000168456, 0.544824 0.838551 -0.000166882, 0.804101 0.59447 0.00518303, + 0.694433 0.719558 0.000445585, 0.640837 0.767634 0.00811179, 0.614779 0.788687 -0.00436667, 0.719203 0.694785 -0.00451217, + 0.849212 0.52805 -0.0011059, 0.957065 0.289852 -0.00358678, 0.945591 0.325358 -0.000584741, 0.982941 0.18392 -0.000455624, + 0.888887 0.458093 -0.00555342, 0.971705 0.236049 -0.00834695, -0.947224 0.319842 0.0216241, -0.892638 0.449317 0.0362128, + -0.858345 0.513072 -0.00078918, -0.961668 0.268862 0.0539226, -0.935543 0.353214 0, -0.975629 0.219426 0, + -0.820953 0.57012 -0.0316115, -0.736591 0.676059 -0.019462, -0.758825 0.651294 -0.000989944, -0.669662 0.742665 0.000874781, + -0.703016 0.709614 -0.0470753, 0.961617 0.269448 -0.0518767, 0.894759 0.445191 -0.0348071, 0.947479 0.318911 -0.0240589, + 0.93499 0.354632 -0.00542421, 0.858801 0.512308 0.00146419, 0.976195 0.216876 -0.00274657, 0.758061 0.652075 0.0118757, + 0.662899 0.748666 0.00800638, 0.734347 0.678277 0.0259876, 0.819479 0.572239 0.0315795, 0.703837 0.708801 0.0470626, + -0.217038 0.29499 -0.930524, -0.0984046 0.189661 -0.976906, -0.132229 0.158545 -0.978457, -0.183626 0.343374 -0.921073, + -0.111513 0.216568 -0.969878, -0.131288 0.351065 -0.927101, -0.28567 0.626518 -0.725167, -0.276418 0.372891 -0.885746, + -0.391453 0.561361 -0.729136, -0.0871173 0.174314 -0.980829, -0.071783 0.202412 -0.976666, -0.0872291 0.697774 -0.710987, + -0.185838 0.714689 -0.674303, -0.0847202 0.463961 -0.881795, -0.511929 0.536078 -0.67123, -0.570323 0.735829 -0.365085, + -0.587524 0.713706 -0.381364, -0.561436 0.807405 -0.181347, -0.606945 0.773096 -0.184228, -0.417916 0.877678 -0.234579, + -0.408875 0.797995 -0.442747, -0.0342812 0.897976 -0.438707, -0.183902 0.913687 -0.362431, -0.128703 0.96575 -0.225304, + 0 0.307227 0.951636, -2.57042e-007 0.307227 0.951636, -1.71361e-007 0.307227 0.951636, -2.57042e-007 0.307227 0.951636, + 0 0.307227 0.951636, 1 2.70824e-005 1.58503e-005, 1 1.80549e-005 1.05669e-005, 1 -1.02342e-005 3.17006e-005, 1 2.14663e-005 0, + 0 0.307227 -0.951636, -2.56968e-007 0.307227 -0.951636, -1.71312e-007 0.307227 -0.951636, -2.56968e-007 0.307227 -0.951636, + 0 0.155505 -0.987835, 0.0135631 -0.999908 0, 0.010172 -0.999948 0, 0.0406819 -0.999172 0, 0.0203451 -0.999793 0, + 0.0534909 -0.937084 0.344981, 0.0449431 -0.88995 0.453838, 0.0526841 -0.71016 0.702066, 0.0509342 -0.978215 0.201249, + 0.0506652 -0.980408 0.190349, 0.0663254 -0.893716 0.443703, 0.0542799 -0.706064 0.706065, 0.0500299 -0.346073 0.936873, + 0.06719 -0.459272 0.885751, 0.0685873 -0.179924 0.981287, 0.0564409 -0.704421 0.707535, 0.0386922 -0.450238 0.89207, + 0.0280632 -0.171204 0.984836, 0.0432371 0.00126664 0.999064, 0.0400423 0.00253327 0.999195, 0.0410863 -0.000422791 0.999156, + 0.0367838 -0.00380163 0.999316, 0.0416081 -0.00190084 0.999132, 0.0476376 0.336641 0.940427, 0.057513 0.446828 0.892769, + 0.0503904 0.704837 0.707577, 0.0548509 0.191519 0.979955, 0.0416818 0.187026 0.98147, 0.0418412 0.436421 0.898769, + 0.0713773 0.705142 0.705464, 0.0484629 0.940748 0.335625, 0.057359 0.891839 0.448702, 0.0518253 0.97978 0.193247, + 0.0357577 0.701611 0.711663, 0.0453636 0.897842 0.437974, 0.0393169 0.98261 0.181471, 0.0369895 0.999316 0, + 0.0518253 0.97978 -0.193247, 0.057359 0.891839 -0.448702, 0.0484629 0.940748 -0.335625, 0.0503402 0.704953 -0.707466, + 0.0453639 0.897843 -0.437973, 0.0393169 0.98261 -0.181471, 0.0357588 0.70161 -0.711663, 0.0575178 0.446954 -0.892706, + 0.0548573 0.191036 -0.980049, 0.0474769 0.336607 -0.940448, 0.0713773 0.705303 -0.705303, 0.0415764 0.436542 -0.898723, + 0.0414583 0.186755 -0.981531, 0.0416081 -0.00190084 -0.999132, 0.0367838 -0.00380163 -0.999316, + 0.0410863 -0.000422791 -0.999156, 0.0400423 0.00253327 -0.999195, 0.0432371 0.00126664 -0.999064, + 0.0686016 -0.179443 -0.981373, 0.0671945 -0.459397 -0.885686, 0.0500275 -0.345946 -0.93692, 0.0526798 -0.710309 -0.701916, + 0.038693 -0.450344 -0.892016, 0.0280367 -0.170707 -0.984923, 0.056441 -0.704572 -0.707384, 0.0449431 -0.88995 -0.453838, + 0.0509342 -0.978215 -0.201249, 0.0534909 -0.937084 -0.344981, 0.0542799 -0.706225 -0.705904, 0.0663254 -0.893716 -0.443703, + 0.0506652 -0.980408 -0.190349, 0.0489351 -0.939308 0.339567, 0.0362293 -0.893645 0.44731, 0.0505122 -0.70542 0.706987, + 0.0494375 -0.978543 0.200023, 0.0529081 -0.979398 0.194887, 0.0660089 -0.897937 0.435146, 0.0542761 -0.696007 0.715981, + 0.0501812 -0.353496 0.934089, 0.0669358 -0.451398 0.889809, 0.0677019 -0.208945 0.975581, 0.0564381 -0.701258 0.71067, + 0.0386244 -0.443466 0.895459, 0.029664 -0.20121 0.979099, 0.0288539 0.000845187 0.999583, 0.0267188 0.00169037 0.999642, + 0.0314315 0.00129769 0.999505, 0.0365861 0.00220267 0.999328, 0.0337876 0.00110134 0.999428, 0.0445052 0.344865 0.937597, + 0.0494916 0.446811 0.893259, 0.0440789 0.702479 0.710338, 0.0476775 0.212535 0.97599, 0.0352041 0.194589 0.980253, + 0.041577 0.436452 0.898766, 0.0533309 0.695857 0.716198, 0.0453182 0.940681 0.336251, 0.0463124 0.89318 0.447309, + 0.0506566 0.980129 0.191783, 0.0357577 0.701461 0.71181, 0.0454739 0.897003 0.439679, 0.0406632 0.981753 0.185763, + 0.053038 0.980577 -0.188827, 0.0574203 0.892676 -0.447026, 0.0454077 0.941077 -0.335131, 0.0486537 0.706502 -0.706036, + 0.039418 0.899728 -0.434666, 0.0382828 0.98239 -0.18288, 0.0357586 0.707707 -0.705601, 0.0575169 0.446953 -0.892706, + 0.0548566 0.191037 -0.980049, 0.0474769 0.336607 -0.940448, 0.0713773 0.70519 -0.705417, 0.0415769 0.436542 -0.898723, + 0.0414591 0.186756 -0.981531, 0.0337688 0.00110068 -0.999429, 0.0365642 0.00220135 -0.999329, 0.0357799 -0.000432047 -0.99936, + 0.0398015 -0.00349748 -0.999201, 0.0353877 -0.00174876 -0.999372, 0.0507292 -0.194995 -0.979491, + 0.0451339 -0.452359 -0.890693, 0.0506353 -0.341953 -0.938352, 0.0505305 -0.710384 -0.701998, 0.0616734 -0.441462 -0.895158, + 0.0472751 -0.184799 -0.981639, 0.0564398 -0.710763 -0.701164, 0.036079 -0.893615 -0.447382, 0.0493814 -0.978556 -0.199976, + 0.0488444 -0.939318 -0.339551, 0.0542799 -0.706111 -0.706018, 0.0660093 -0.897937 -0.435145, 0.0529081 -0.979398 -0.194887, + 0.40615 0.00792881 0.913772, 0.428053 0.00771046 0.903721, 0.401954 0.013133 0.915566, 0.384878 0.0282132 0.922536, + 0.433007 0.0153596 0.90126, 0.321135 0.0425692 0.946076, 0.316828 0.0453726 0.947397, 0.358328 0.0418632 0.932657, + 0.354293 0.041206 0.934226, 0.411553 0.0302237 0.910884, 0.463071 0.017478 0.886149, 0.473475 0.0076456 0.880774, + 0.44864 0.0279796 0.893275, 0.379674 0.0448381 0.924033, 0.422572 0.0389972 0.90549, 0.616055 0.0191714 0.78747, + 0.582477 0.00883887 0.812799, 0.681106 0.0105573 0.732108, 0.898212 0.0134519 0.439357, 0.750089 0.0206375 0.661014, + 0.723669 0.0405207 0.688957, 0.877788 0.0292089 0.478157, 0.971539 0.0292893 0.23506, 0.539555 0.0501649 0.840455, + 0.598894 0.0397027 0.799843, 0.669069 0.0595442 0.740811, 0.53238 0.0286602 0.84602, 0.891302 0.0559051 0.449951, + 0.700338 0.0749654 0.709864, 0.85966 0.0829179 0.504093, 0.980481 0.0564128 0.188346, 0.994926 0.0352833 0.0942147, + 0.970598 0.0834697 0.225773, 0.983608 0.0145212 0.179736, 0.99279 0.0651615 0.100606, 0.955978 0.10177 0.275226, + 0.839335 0.0896236 0.536176, 0.986011 0.0946374 0.137208, 0.971109 0.102693 0.21541, 0.690235 0 0.723585, 0.613457 0 0.789728, + 0.84543 0 0.534086, 0.531252 0 0.847214, 0.84543 0 0.534086, 0.938797 0 0.344471, 0.96197 0 0.273156, 0.976271 0 0.216554, + 0.950487 0 0.310766, 0.993905 0 0.110236, 0.698577 0.698555 0.154957, 0.327714 0.0346066 0.944143, 0.359487 0 0.93315, + 0.350259 0.0503358 0.935299, 0.304053 0.118788 0.94522, 0.275481 0.0935196 0.956747, 0.286768 0.0647198 0.955812, + 0.338167 0.117399 0.933735, 0.24069 0.257927 0.935704, 0.306497 0.204099 0.929733, 0.259827 0.299207 0.918131, + 0.248014 0.31002 0.917811, 0.230542 0.310086 0.922332, 0.234881 0.185722 0.954116, 0.274334 0.185251 0.943622, + 0.189646 0.267701 0.944654, 0.357647 0.447062 0.819893, 0.465844 0.490167 0.7367, 0.359414 0.377387 0.853464, + 0.405193 0.503984 0.76277, 0.512574 0.668431 0.53895, 0.278653 0.449944 0.848471, 0.392539 0.607874 0.69022, + 0.518238 0.645152 0.561434, 0.514819 0.781654 0.352106, 0.557102 0.786789 0.265708, 0.507398 0.848441 0.150648, + 0.563576 0.811805 0.152824, 0.544852 0.681063 0.489172, 0.59889 0.748597 0.284488, 0.617216 0.771515 0.154303, + 0.223796 0.4937 0.840343, 0.277306 0.474356 0.835517, 0.309655 0.597272 0.739851, 0.34244 0.582536 0.737148, + 0.419806 0.717466 0.555883, 0.213693 0.628117 0.748201, 0.375197 0.764728 0.52385, 0.106202 0.640147 0.760876, + 0.250676 0.79101 0.558089, 0.157202 0.549446 0.820607, 0.086435 0.572134 0.815593, 0.0405723 0.554331 0.831307, + 0.0521909 0.687524 0.724284, 0.117972 0.830397 0.54454, 0.0628824 0.831412 0.552086, 0.476641 0.816304 0.326285, + 0.420418 0.854614 0.304767, 0.286766 0.908938 0.30265, 0.497836 0.850591 0.169278, 0.411738 0.896273 0.16482, + 0.146319 0.962394 0.228885, 0.0705428 0.937159 0.341698, 0.0744355 0.991127 0.110125, 0.27223 0.956347 0.106264, + 0.149447 0.982722 0.109194, 0.108235 0.368993 0.923109, 0.133382 0.391548 0.910439, 0.0700479 0.401835 0.913029, + 0.0299093 0.407045 0.912918, 0.0469952 0.373591 0.926402, 0.0324919 0.364875 0.930489, 0.216355 0.372325 0.902532, + 0.188782 0.375153 0.907536, 0.194509 0.353229 0.915093, 0.156855 0.354242 0.921905, 0.03217 0.339533 0.940044, + 0.0711625 0.341906 0.937036, 0.124089 0.332701 0.934832, 0.153205 0.325354 0.933098, 0.0405651 0.349689 0.935987, + 0.400383 0.916348 0, 0.334053 0.942554 0, 0.34753 0.930654 0.114483, 0.265628 0.944512 0.193233, 0.35923 0.88682 0.290695, + 0.239287 0.970949 0, 0.239287 0.970949 0, 0.0914244 0.763027 -0.639868, 0.115404 0.993319 0, 0.0529918 0.998595 0, + 0.136144 0.990689 0, -0.357599 0.889582 0.284194, -0.346065 0.931501 0.112003, -0.397145 0.917756 0, -0.239309 0.970944 0, + -0.265692 0.945358 0.188959, -0.332972 0.942937 0, -0.239309 0.970944 0, -0.136144 0.990689 0, -0.0529918 0.998595 0, + -0.115404 0.993319 0, -0.0914244 0.763027 -0.639868, -2.25045e-008 0.00200104 0.999998, 0 0.0020501 0.999998, + 0.000207038 0.00373793 0.999993, -3.30184e-008 0.00565462 0.999984, 2.45977e-007 0.0106152 0.999944, + 0.000130828 0.00878479 0.999961, -0.00068703 0.0138341 0.999904, -0.000207179 0.00373794 0.999993, + -0.000130917 0.00878479 0.999961, 2.23279e-007 0.0162218 0.999868, 0.000687572 0.0138342 0.999904, + -0.0037856 0.0162401 0.999861, 0.00346995 0.0160204 0.999866, 0.00473482 0.00987766 0.99994, 0.010997 0.0125674 0.999861, + -0.00247942 0.0169803 0.999853, -0.00154086 0.0126212 0.999919, 2.02569e-007 0.0175824 0.999845, + -0.0116048 0.0129903 0.999848, -0.00515604 0.0101703 0.999935, 0.00152486 0.0126329 0.999919, 0.00247938 0.0169779 0.999853, + 0.975466 0.22015 0, 0.920184 0.391487 0, 0.93245 0.349338 0.0921977, 0.822357 0.568972 0, 0.932336 0.277638 0.231663, + 0.851888 0.500203 0.15519, 0.768776 0.620715 -0.153933, 0.657549 0.747842 -0.09144, 0.591578 0.772817 -0.229759, + 0.692061 0.721839 0, 0.554468 0.832205 0, 0.998224 0.0594406 0.00383715, 0.999397 0.0347344 0, 0.998242 0.0592686 0, + 0.999889 0.0148701 0, 0.999692 0.024803 0, 0.99721 0.0745535 0.00383673, 0.995987 0.0894943 0, 0.996409 0.0845153 0.00511615, + 0.995539 0.0943555 0, 0.99457 0.10407 0, 0.476617 0 0.879111, 0.44173 0 0.897148, 0.44173 0 0.897148, 0.406162 0 0.913801, + 0.70764 -0.00210815 0.70657, 0.831961 -0.00352978 0.554823, 0.882563 0 0.470194, 0.647217 -0.0052312 0.762288, + 0.745581 0 0.666414, 0.5825 0 0.812831, 0.914063 0.00179096 0.405568, 0.954935 0 0.296816, 0.962973 0.00106614 0.269596, + 0.982689 0 0.185261, 0.9882 0.00178329 0.153156, 0.999538 0.0303549 -0.00117903, 0.999885 0.0151729 0, 0.999373 0.0354183 0, + 0.998039 0.0625847 -0.00115071, 0.998172 0.0604455 0, 0.999885 0.0151647 -0.000504589, 0.999537 0.0303495 -0.00202078, + 0.998452 0.0554997 -0.00369571, 0.99634 0.0854782 0, 0.996359 0.0852384 -0.00167411, 0.995619 0.0933369 -0.00559735, + 0.97487 0.222572 -0.00946235, 0.97493 0.222312 -0.00946265, 0.894433 0.447203 0, 0.947398 0.320059 0, 0.947398 0.320059 0, + 0.872888 0.48792 0, 0.84697 0.525649 -0.0795907, 0.75317 0.657823 -0.00202565, 0.688222 0.707966 -0.158537, + 0.822654 0.559174 0.102789, 0.690223 0.707148 0.15341, 0.564775 0.195778 0.801686, 0.663813 0.159814 0.730624, + 0.790674 0.269508 0.549728, 0.503789 0.126019 0.854586, 0.477877 0.165579 0.86268, 0.529765 0.309021 0.789845, + 0.450026 0.261155 0.853976, 0.353423 0.317217 0.880037, 0.479633 0.441976 0.75803, 0.406252 0.430987 0.805736, + 0.436346 0.387892 0.811875, 0.531462 0.614704 0.582827, 0.638116 0.587289 0.497895, 0.707352 0.431453 0.559912, + 0.823825 0.195032 0.532236, 0.924651 0.211525 0.316665, 0.921405 0.31474 0.227927, 0.815031 0.481537 0.322252, + 0.942198 0.318345 0.104501, 0.847788 0.530172 0.0131831, 0.969967 0.218153 0.107581, 0.616439 0.701826 0.356991, + 0.728242 0.66416 0.168982, 0.654766 0.75283 -0.067295, -0.573464 0.819231 0, -0.530885 0.84742 0.00635083, + -0.533358 0.845776 -0.0138734, -0.180494 0.983352 -0.0210038, -0.125275 0.99197 0.0173777, 0.000103856 0.999913 -0.0132117, + -0.420207 0.907372 -0.0100726, -0.277998 0.960581 0.00130983, -0.331468 0.943297 -0.017875, -0.460471 0.887636 -0.00827126, + -0.424167 0.905563 0.00622545, -0.280168 0.959599 -0.0260113, -0.12758 0.991004 -0.0404312, 0.180859 0.983337 -0.0184151, + 0.125884 0.991987 0.0106895, 0.27838 0.960465 -0.00344416, 0.331858 0.943261 -0.0113325, 0.420222 0.907363 -0.0102509, + 0.533121 0.845927 -0.0137719, 0.530674 0.847553 0.00626664, 0.46048 0.88763 -0.00840023, 0.280942 0.959691 -0.0080998, + 0.127787 0.991223 -0.0338743, 0.424761 0.905197 0.0139978, -0.260721 0.430035 0.864347, -0.387854 0.603536 0.696645, + -0.394654 0.490691 0.776834, -0.512773 0.668379 0.538825, -0.456739 0.476996 0.750909, -0.338413 0.349679 0.873614, + -0.518412 0.645368 0.561025, -0.337644 0.422058 0.841346, -0.557591 0.78644 0.265714, -0.544851 0.681064 0.489171, + -0.598886 0.7486 0.284488, -0.617216 0.771515 0.154303, -0.515667 0.781228 0.351809, -0.508618 0.847701 0.1507, + -0.564162 0.811395 0.15284, -0.313989 0.0973398 0.944423, -0.351629 0.0624882 0.934052, -0.327138 0.143942 0.933949, + -0.284713 0.284722 0.915353, -0.284792 0.0736063 0.955759, -0.274119 0.0989626 0.95659, -0.298989 0.121371 0.946506, + -0.316992 0.171094 0.932868, -0.27713 0.191785 0.941497, -0.283794 0.248575 0.926105, -0.236854 0.262255 0.93548, + -0.252422 0.309683 0.916722, -0.230763 0.31045 0.922155, -0.247728 0.310676 0.917666, -0.247871 0.310348 0.917739, + -0.235374 0.185056 0.954124, -0.191192 0.266911 0.944566, -0.41254 0.457054 0.78798, -0.528458 0.604123 0.596463, + -0.475853 0.45934 0.750047, -0.622151 0.567452 0.539376, -0.549457 0.342929 0.761903, -0.628947 0.700681 0.336856, + -0.36753 0.396913 0.84106, -0.38599 0.351326 0.852984, -0.435768 0.220938 0.872521, -0.575722 0.207882 0.790778, + -0.493871 0.0642493 0.867158, -0.733942 0.421163 0.53287, -0.628137 0.151527 0.763206, -0.776799 0.240621 0.581966, + -0.711915 0.646753 0.273654, -0.663781 0.731709 0.154913, -0.812008 0.516388 0.272006, -0.918006 0.332654 0.215887, + -0.749132 0.644144 0.154531, -0.889579 0.456497 -0.0161246, -0.924478 0.211617 0.317111, -0.804007 0.190687 0.563215, + -0.955976 0.266549 -0.122728, -0.65193 0 0.758279, -0.558877 0.252003 0.790032, -0.844946 0 0.534851, + -0.437244 0.437257 0.785891, -0.618238 0.353625 0.701948, -0.496669 0.224418 0.838425, -0.577344 0.577362 0.577344, + -0.82431 0 0.566138, -0.950486 0 0.310767, -0.977468 0 0.211083, -0.993906 0 0.11023, -0.84543 0 0.534086, + -0.640671 0.0587566 0.765564, -0.582241 0.0387827 0.812091, -0.539534 0.0500271 0.840476, -0.532685 0.0569855 0.844393, + -0.700164 0.0745849 0.710075, -0.72034 0.0444678 0.692194, -0.854552 0.0798335 0.513194, -0.83938 0.0891944 0.536176, + -0.616821 0.0189901 0.786874, -0.689593 0.0107879 0.724117, -0.610456 0.00956682 0.791993, -0.763125 0.0233785 0.645828, + -0.899473 0.0528257 0.433772, -0.898212 0.0134519 0.439357, -0.894664 0.0271792 0.445911, -0.963036 0.102246 0.249214, + -0.970616 0.0833054 0.225752, -0.990265 0.0950592 0.10168, -0.99279 0.0651615 0.100606, -0.980481 0.0564128 0.188346, + -0.988422 0.104905 0.109622, -0.971539 0.0292893 0.23506, -0.983608 0.0145212 0.179736, -0.994926 0.0352833 0.0942147, + -0.40102 0.0130402 0.915976, -0.427044 0.00754993 0.904199, -0.40615 0.00792881 0.913772, -0.432811 0.0153952 0.901353, + -0.384396 0.0282562 0.922736, -0.354307 0.0411478 0.934224, -0.316884 0.0452147 0.947386, -0.358357 0.0417476 0.932651, + -0.321189 0.0424116 0.946065, -0.411783 0.0302944 0.910778, -0.464137 0.0176655 0.885587, -0.473468 0.00764453 0.880778, + -0.44864 0.0279796 0.893275, -0.379705 0.0446496 0.92403, -0.422579 0.0389295 0.90549, -0.999889 0.0148701 0, + -0.999692 0.024803 0, -0.999397 0.0347344 0, -0.998224 0.0594406 0.00383715, -0.99601 0.0892364 0, -0.995571 0.0940117 0, + -0.99721 0.0745535 0.00383673, -0.998242 0.0592686 0, -0.996424 0.0843433 0.00511614, -0.994624 0.103555 0, + -0.979419 0.20184 0, -0.927834 0.363584 0.0832473, -0.916247 0.400613 0, -0.930402 0.301115 0.209004, -0.822376 0.568945 0, + -0.771417 0.619978 -0.143331, -0.852239 0.504049 0.140086, -0.664476 0.74244 -0.0851765, -0.69605 0.717993 0, + -0.568968 0.82236 0, -0.604847 0.767083 -0.21388, -0.610484 0 0.792029, -0.699013 0 0.715109, -0.753193 0 0.657799, + -0.906469 0.00300878 0.422263, -0.85181 0 0.523851, -0.955301 -2.17699e-007 0.295636, -0.980156 0.00448043 0.198177, + -0.906469 -0.00300915 0.422263, -0.980156 -0.00448097 0.198177, -0.475012 0 0.879979, -0.440912 0 0.89755, + -0.406162 0 0.913801, -0.952581 0.265962 0.147831, -0.940424 0.336427 0.0491877, -0.867657 0.491575 0.0743301, + -0.947339 0.320232 0, -0.844652 0.531019 -0.0676877, -0.857932 0.513763 0, -0.736321 0.676633 0, + -0.746383 0.664007 -0.0447944, -0.696845 0.70448 -0.134595, -0.999885 0.0151647 -0.000504589, -0.999537 0.0303495 -0.00202078, + -0.999538 0.0303549 -0.00117903, -0.998039 0.0625847 -0.00115071, -0.998452 0.0554997 -0.00369571, -0.999885 0.0151729 0, + -0.999373 0.0354183 0, -0.998172 0.0604455 0, -0.996355 0.0853085 0, -0.996345 0.0854029 -0.00167411, + -0.995633 0.0933416 0.00150483, -0.99752 0.0703392 0.00251089, -0.997525 0.0702682 0.00251089, 0.20427 -0.978915 -0.000243044, + 0.155438 -0.987792 -0.0102952, 0.276723 -0.960881 -0.0114651, -0.000117605 -1 -5.81841e-005, 0.155439 -0.987796 0.00989024, + 0.276725 -0.960886 0.0110142, -3.74224e-009 -1 0, -0.155599 -0.987807 -0.00515438, -0.20417 -0.978936 -0.000121707, + -0.276043 -0.961128 -0.00573299, -0.155599 -0.987808 0.0049516, -0.276043 -0.961129 0.00550746, 0.364992 -0.0282902 -0.930581, + 0.382255 -0.0172085 -0.923897, 0.411792 -0.015711 -0.911142, 0.386602 -0.00867165 -0.922206, 0.43282 -0.00783384 -0.901446, + 0.384121 -0.0305322 -0.922778, 0.44057 -0.0243308 -0.897388, 0.273486 -0.0457951 -0.960785, 0.318731 -0.0405174 -0.946979, + 0.302358 -0.0453737 -0.952114, 0.355673 -0.0411209 -0.933706, 0.413305 -0.0349957 -0.90992, 0.360948 -0.0421708 -0.931632, + 0.344097 -0.0455146 -0.93783, 0.312889 -0.0157895 -0.949658, 0.451652 -0.00811805 -0.892158, 0.452243 -0.0141593 -0.891782, + 0.321393 -0.0221314 -0.946687, 0.321419 -0.00491442 -0.946924, 0.353293 -0.0257152 -0.935159, 0.365445 -0.0276259 -0.930423, + 0.344042 -0.0074979 -0.938924, 0.459089 -0.0059569 -0.888371, -0.999026 -0.0301702 0.0321876, + -0.999393 -0.0348287 -0.000800742, -0.999539 -0.0139761 0.0269401, -0.998037 -0.0587588 0.0216749, + -0.998853 -0.0478826 -0.00025956, -0.999181 -0.0155207 0.0373785, -0.999965 -0.00834843 0, -0.999565 -0.0294078 -0.00219836, + -0.995426 -0.0880689 -0.0370288, -0.994853 -0.101332 0, -0.996624 -0.0820983 0, -0.99829 -0.0584493 0, + -0.99308 -0.0749124 -0.0904418, -0.983558 -0.096185 -0.152846, -0.411792 -0.015711 -0.911142, -0.382255 -0.0172085 -0.923897, + -0.364983 -0.0283506 -0.930582, -0.43282 -0.00783384 -0.901446, -0.386602 -0.00867165 -0.922206, + -0.44057 -0.0243308 -0.897388, -0.383902 -0.030547 -0.922869, -0.319171 -0.0448278 -0.946636, -0.317393 -0.0403898 -0.947433, + -0.270711 -0.045519 -0.961584, -0.362598 -0.0407994 -0.931052, -0.413305 -0.0349957 -0.90992, -0.36629 -0.0434916 -0.929484, + -0.451652 -0.00811805 -0.892158, -0.452243 -0.0141593 -0.891782, -0.279906 -0.0336045 -0.959439, + -0.372284 -0.0456562 -0.926995, -0.390591 -0.0473777 -0.919344, -0.459089 -0.0059569 -0.888371, -0.909655 -0.415347 0.0039751, + -0.970794 -0.235083 0.0479107, -0.921424 -0.38411 0.0586355, -0.875475 -0.477273 0.0758599, -0.784824 -0.617259 0.0551621, + -0.965576 -0.256723 0.0419013, -0.982684 -0.185289 0, -0.922657 -0.383922 0.0361743, -0.902145 -0.429887 0.0364941, + -0.80706 -0.590469 -0.00121028, -0.595466 -0.801659 0.0525697, -0.673178 -0.730695 0.11365, -0.792013 -0.610505 0, + -0.631179 -0.77559 -0.00855425, -0.587401 -0.809261 0.00756303, -0.471952 -0.880564 0.0432347, -0.492883 -0.869007 0.0434999, + -0.735611 -0.675596 0.0494714, -0.422899 -0.906177 0, -0.0508464 -0.350833 -0.935057, -0.0389986 -0.377726 -0.925096, + -0.10751 -0.376398 -0.920199, -0.0243791 -0.353392 -0.935158, -0.0228716 -0.377617 -0.925679, -0.0972743 -0.348615 -0.932205, + -0.0291135 -0.325983 -0.944927, -0.17098 -0.360806 -0.916834, -0.183382 -0.346597 -0.919914, -0.173497 -0.338671 -0.92477, + -0.178989 -0.350013 -0.919486, -0.141976 -0.346749 -0.92715, -0.109918 -0.328595 -0.938053, -0.0658059 -0.330125 -0.941641, + -0.139854 -0.316438 -0.938247, -0.0298199 -0.334605 -0.941887, 0.107803 -0.376983 -0.919925, 0.0389975 -0.377731 -0.925094, + 0.0507408 -0.350972 -0.93501, 0.024313 -0.353449 -0.935138, 0.0228744 -0.377617 -0.925679, 0.0974018 -0.349016 -0.932041, + 0.0291527 -0.32614 -0.944872, 0.172121 -0.340337 -0.924416, 0.181569 -0.348009 -0.919741, 0.169426 -0.3624 -0.916494, + 0.178989 -0.350013 -0.919486, 0.142184 -0.347901 -0.926687, 0.110128 -0.32904 -0.937872, 0.0654134 -0.329987 -0.941716, + 0.139701 -0.318006 -0.93774, 0.0295383 -0.334607 -0.941895, 0.864131 -0.491853 0.106579, 0.901166 -0.431625 0.0399941, + 0.920137 -0.388344 0.0503685, 0.785203 -0.616059 0.0626716, 0.96489 -0.261184 0.0277306, 0.982727 -0.185063 0, + 0.970796 -0.235042 0.0480678, 0.930462 -0.365686 -0.0226696, 0.907888 -0.419196 0.0038197, 0.80967 -0.586189 0.0285821, + 0.594904 -0.802546 0.0448181, 0.583197 -0.811974 -0.0240816, 0.670694 -0.733225 0.112027, 0.735819 -0.673229 0.0730263, + 0.468264 -0.882401 0.0457924, 0.417091 -0.908865 0, 0.492858 -0.869331 0.0368075, 0.79168 -0.610936 0, + 0.63295 -0.774145 -0.00859027, 0.27005 -0.0640321 -0.960715, 0.283365 0 -0.959012, 0.280244 -0.0628266 -0.957871, + 0.311126 -0.0928636 -0.945821, 0.270065 -0.10741 -0.956832, 0.272092 -0.189669 -0.943394, 0.257435 -0.091962 -0.96191, + 0.218458 -0.168639 -0.961164, 0.241172 -0.109642 -0.964269, 0.242887 -0.182811 -0.952673, 0.214216 -0.241527 -0.946455, + 0.228486 -0.26722 -0.936156, 0.186881 -0.270624 -0.944372, 0.191627 -0.232843 -0.953448, 0.180118 -0.266451 -0.946869, + 0.155314 -0.310629 -0.937757, 0.999868 -0.0161977 0.00135028, 0.999653 -0.02611 0.00345226, 0.999869 -0.0161935 0, + 0.999335 -0.0360225 0.00563461, 0.997154 -0.0749944 -0.0077262, 0.995621 -0.0898561 -0.0257811, + 0.996384 -0.0848104 0.00502322, 0.998118 -0.060496 0.00999503, 0.998129 -0.0605269 0.00862729, 0.993705 -0.0949975 -0.0593741, + 0.986884 -0.154446 -0.0469649, 0.994296 -0.0526266 -0.0927655, 0.971517 -0.230084 -0.0567128, 0.894427 -0.447214 0, + 1.26145e-008 -0.00570577 -0.999984, -0.000319316 -0.0052372 -0.999986, -9.56042e-005 -0.00306865 -0.999995, + 1.61162e-005 -0.00895357 -0.99996, 9.56725e-005 -0.00306866 -0.999995, 0.000147579 -0.013459 -0.999909, + -1.71892e-007 -0.0105143 -0.999945, 0.00144294 -0.0209259 -0.99978, 4.82275e-006 -0.0166626 -0.999861, + 0.000319544 -0.00523721 -0.999986, -1.61355e-005 -0.00895357 -0.99996, -0.000147689 -0.0134591 -0.999909, + -0.00136771 -0.0209947 -0.999779, 0.000192466 -0.0224637 -0.999748, 0.0451061 0.0221436 -0.998737, + 0.129861 0.115327 -0.984802, 0.0709796 0.0487305 -0.996287, 0.00242445 -0.0183806 -0.999828, 3.6438e-008 -0.0179868 -0.999838, + -0.00239812 -0.0183754 -0.999828, -0.130345 0.115875 -0.984674, -0.0451678 0.0222363 -0.998732, -0.071051 0.0488112 -0.996278, + -0.000191283 -0.0224204 -0.999749, -0.998118 -0.060496 0.00999503, -0.997104 -0.0749906 0.0126867, + -0.998129 -0.0605269 0.00862729, -0.999335 -0.0360225 0.00563461, -0.999653 -0.02611 0.00345226, + -0.999868 -0.0161977 0.00135028, -0.999869 -0.0161935 0, -0.996399 -0.0846351 0.0050232, -0.995892 -0.0893158 0.0148614, + -0.997966 -0.0622341 0.0137921, -0.99851 -0.0517709 0.0172255, -0.99509 -0.0939051 0.0312805, -0.285562 -0.0308251 -0.957864, + -0.280434 0 -0.959873, -0.269044 -0.109361 -0.956899, -0.31131 -0.0954749 -0.9455, -0.272621 -0.193906 -0.942379, + -0.264007 -0.0524511 -0.963094, -0.237184 -0.113723 -0.964785, -0.216137 -0.1692 -0.96159, -0.24167 -0.186592 -0.952249, + -0.213288 -0.243981 -0.946034, -0.228465 -0.267243 -0.936154, -0.1869 -0.270623 -0.944369, -0.191701 -0.232729 -0.953461, + -0.180155 -0.266448 -0.946863, -0.155158 -0.310954 -0.937674, -0.417946 -0.908452 -0.00594599, -0.426891 -0.903798 0.030213, + -0.407529 -0.913192 0, -0.345915 -0.93683 -0.0518928, -0.413085 -0.90914 0.0531581, -0.323466 -0.946209 0.00760308, + -0.199222 -0.545415 -0.814146, -0.231775 -0.971838 -0.0425598, -0.227496 -0.973454 0.0251416, -0.119546 -0.992523 -0.0246459, + -0.0755733 -0.619246 0.781552, -0.234908 -0.972018 0, -0.138126 -0.990415 0, -0.0640498 -0.997947 0, + 0.413304 -0.909043 0.0531035, 0.345887 -0.936787 -0.0528379, 0.417968 -0.908446 -0.00527844, 0.199268 -0.54558 -0.814024, + 0.322862 -0.946045 0.027552, 0.426938 -0.903739 0.031306, 0.40691 -0.913468 0, 0.230675 -0.972688 -0.0258381, + 0.118835 -0.992804 -0.0147755, 0.0640498 -0.997947 0, 0.13709 -0.990559 0, 0.234146 -0.972202 0, 0.224753 -0.971434 0.0761674, + 0.0755713 -0.619175 0.781608, 0.764661 -0.291018 -0.574979, 0.822726 -0.568439 0, 0.822726 -0.568439 0, 0.939984 -0.341219 0, + 0.977208 -0.212284 0, 0.92368 -0.383166 0, 0.767775 -0.61768 0.170271, 0.693593 -0.720367 0, 0.573463 -0.819232 0, + 0.661456 -0.743185 0.100759, 0.596604 -0.761286 0.253982, -0.926609 -0.360779 -0.105989, -0.91822 -0.396071 0, + -0.967661 -0.252253 0, -0.822696 -0.568481 0, -0.916562 -0.297083 -0.267686, -0.845065 -0.503749 -0.17917, + -0.693746 -0.72022 0, -0.767714 -0.617613 0.170793, -0.661472 -0.743128 0.101072, -0.596297 -0.761259 0.254783, + -0.573147 -0.819452 0, 0.999181 -0.0155207 0.0373785, 0.999965 -0.00834843 0, 0.999539 -0.0139761 0.0269401, + 0.999565 -0.0294078 -0.00219836, 0.999026 -0.0301702 0.0321876, 0.999393 -0.0348287 -0.000800742, + 0.998853 -0.0478826 -0.00025956, 0.998037 -0.0587588 0.0216749, 0.993281 -0.0748285 -0.0882774, 0.995497 -0.0877959 -0.035749, + 0.984095 -0.0957977 -0.149598, 0.996639 -0.0819222 0, 0.99829 -0.0584493 0, 0.994906 -0.100805 0, + -0.0699816 0.401747 0.913073, -0.133666 0.39181 0.910285, -0.10841 0.368779 0.923174, -0.0467414 0.373374 0.926503, + -0.0298185 0.406919 0.912977, -0.032494 0.364876 0.930489, -0.194712 0.352731 0.915242, -0.188297 0.373882 0.908161, + -0.217068 0.371029 0.902895, -0.156827 0.354285 0.921893, -0.0321711 0.339535 0.940043, -0.070869 0.341481 0.937213, + -0.123929 0.3325 0.934925, -0.153262 0.326812 0.932579, -0.0405651 0.349689 0.935987, -0.0960403 0.624711 0.774928, + -0.157306 0.549441 0.820591, -0.0867006 0.572095 0.815592, -0.0403371 0.554348 0.831307, -0.0518898 0.687544 0.724286, + -0.193721 0.629591 0.752388, -0.114151 0.812551 0.571603, -0.0625205 0.831431 0.552099, -0.230194 0.50619 0.831133, + -0.301606 0.606117 0.735973, -0.27676 0.473545 0.836157, -0.245337 0.791432 0.559862, -0.414939 0.710709 0.568083, + -0.334771 0.573398 0.747758, -0.383981 0.786599 0.48355, -0.0704754 0.938017 0.339349, -0.154745 0.952449 0.262478, + -0.148814 0.982817 0.109205, -0.27102 0.954044 0.127864, -0.0744355 0.991127 0.110125, -0.30871 0.901603 0.303002, + -0.477856 0.822191 0.309281, -0.435902 0.857447 0.27345, -0.40812 0.888761 0.208666, -0.494083 0.84713 0.195584, + -0.417505 0.00396601 -0.908666, -0.400714 0.00388806 -0.916195, -0.404985 0.00237681 -0.91432, + -0.406162 0.000969121 -0.913801, -0.433393 0.00336035 -0.901199, -0.371253 0.016111 -0.928392, -0.387956 0.0405899 -0.920784, + -0.306203 0.0334925 -0.951377, -0.475608 0.00654733 -0.879633, -0.203768 0.0252744 -0.978693, -0.320143 0.0441521 -0.94634, + -0.326541 0.0456408 -0.944081, -0.282999 0.0464024 -0.957997, -0.217598 0.0255611 -0.975704, -0.410782 0.0398333 -0.910863, + -0.389317 -0.00328794 -0.921098, -0.335579 -0.0455096 -0.940912, -0.522245 -0.00193919 -0.852793, + -0.492704 0.00722077 -0.870167, -0.493062 0.0196403 -0.869772, -0.523395 -0.00302212 -0.852085, + -0.513816 0.00963642 -0.857846, -0.503222 0.0253353 -0.863786, -0.467661 0.0326903 -0.883303, -0.465001 0.0336218 -0.884671, + -0.423213 0.0212519 -0.905781, -0.443377 0.0390776 -0.895483, -0.449697 0.036632 -0.89243, -0.420939 0.037944 -0.906295, + -0.383258 0.0454852 -0.922521, -0.819158 0.573282 -0.018128, -0.818995 0.573521 -0.0178819, -0.818085 0.575042 -0.00800325, + -0.818925 0.573493 -0.0216335, -0.817911 0.575279 -0.00869517, -0.817088 0.576512 0, -0.82024 0.571752 -0.0174692, + -0.82839 0.560108 -0.00696494, -0.819627 0.57264 -0.0171522, -0.826017 0.563557 -0.00993911, -0.819199 0.573227 -0.0180047, + -0.81738 0.575815 -0.0180998, -0.844647 0.535151 0.0136101, -0.994698 0.102524 0.00804314, -0.99494 0.100475 0, + -0.995913 0.0903215 0, -0.994207 0.105584 0.0201091, -0.995446 0.0943801 0.0134061, -0.994076 0.108683 0, + -0.996156 0.0863976 -0.0144569, -0.997411 0.071917 0, -0.996782 0.0801542 0, -0.997058 0.0763958 -0.00619515, + -0.996931 0.0752224 -0.0216854, -0.705962 0.0470141 0.706688, -0.991771 0.111221 0.063403, -0.991172 0.121504 0.0530469, + -0.991233 0.132128 0, -0.991228 0.132163 0, -0.994702 0.095619 0.0377474, -0.994904 0.0995239 0.0161735, + -0.995314 0.096686 0.00148545, -0.995577 0.0939487 -0.000821014, -0.995954 0.0898661 0.000251362, -0.99545 0.0952467 0.002579, + -0.996858 0.0791892 0.00203218, -0.996262 0.0863722 -0.00124341, -0.998805 0.0475485 0.011332, + -0.99712 0.0758375 -0.000685517, -0.9993 0.0352464 0.0125514, -0.999615 0 0.0277552, -0.99732 0.0731485 -0.0011424, + -0.997538 0.0699963 -0.00420548, -0.997503 0.0704138 0.00550671, -0.997541 0.0700773 0.000502049, + 0.393621 -0.00308089 0.919268, 0.386409 -0.00263063 0.922324, 0.382611 -0.00335029 0.923903, 0.382164 -0.00339147 0.924088, + 0.392189 -0.0013628 0.919884, 0.427107 -0.00448964 0.90419, 0.334824 -0.048667 0.941023, 0.372048 -0.0410231 0.927306, + 0.340323 -0.0418946 0.939375, 0.306669 -0.046879 0.950661, 0.364837 -0.0441631 0.930023, 0.363259 -0.0359269 0.930995, + 0.237722 -0.0448642 0.970297, 0.228845 -0.0411288 0.972594, 0.235679 -0.0439773 0.970836, 0.246995 -0.0487627 0.967789, + 0.262091 -0.0496537 0.963765, 0.436908 -0.00675016 0.899481, 0.466707 -0.00752796 0.88438, 0.479885 -0.0120362 0.877249, + 0.477191 -0.0154469 0.878664, 0.4861 -0.0144037 0.873784, 0.497379 -0.0251255 0.867169, 0.466432 -0.0274369 0.884132, + 0.488646 -0.0257567 0.872102, 0.485524 -0.0197514 0.874, 0.459093 -0.00383284 0.88838, 0.405488 -0.0360523 0.913389, + 0.387647 -0.0365479 0.921083, 0.30205 -0.0352141 0.952641, 0.421087 -0.0334944 0.906401, 0.390042 -0.0379094 0.920017, + 0.368749 -0.0436582 0.928503, 0.457097 -0.0552054 0.887702, 0.452689 -0.0295628 0.891178, 0.498479 -0.0246223 0.866552, + 0.506944 -0.0242823 0.861637, 0.24204 -0.046718 0.969141, -0.996438 -0.000294675 -0.0843238, + -0.996565 -0.000147338 -0.0828158, -0.996427 0.000110896 -0.084462, -0.996421 0.000313682 -0.0845311, + -0.996142 0.000627361 -0.0877537, -0.991883 -0.0110839 -0.126671, -0.99622 -0.00259993 -0.0868299, + -0.994254 -0.00560575 -0.106896, -0.9859 -0.0172091 -0.166448, -0.996203 -3.40331e-006 -0.0870652, + -0.996205 0.00107532 -0.0870352, -0.997722 -0.00256179 -0.0674179, -0.998849 -0.00524941 -0.0476829, + -0.999889 -0.0123917 -0.00822867, 0.999982 -0.00594872 0, 0.999995 -0.00302338 0, 0.999982 -0.00594872 0, + 0.999961 -0.00887401 0, 0.98971 -0.113335 0.0873459, 0.992804 -0.119753 0, 0.99067 -0.117178 0.0695867, 0.992908 -0.118889 0, + 0.978371 -0.114658 0.172176, 0.983901 -0.172619 0.0462855, 0.971517 -0.230084 0.0567132, 0.989867 -0.079317 0.117777, + -0.92682 -0.375127 -0.0168354, -0.926995 -0.374739 -0.0158299, -0.926943 -0.374852 -0.0162061, -0.927082 -0.374545 -0.0153272, + -0.927099 -0.374514 -0.0150775, -0.93285 -0.359466 -0.0239619, -0.930647 -0.365667 -0.0135832, -0.929428 -0.368201 -0.0243215, + -0.922457 -0.383118 -0.0478941, -0.925248 -0.37887 -0.0193325, -0.927089 -0.374464 -0.0168013, -0.92514 -0.37892 -0.02314, + -0.927583 -0.373218 -0.0172847, -0.924181 -0.381146 -0.024848, -0.917369 -0.39601 -0.0401217, -0.92669 -0.375456 -0.0166858, + -0.863601 -0.497918 -0.079194, -0.730927 -0.661142 -0.169228, -0.799602 -0.586888 -0.127281, -0.578568 -0.778425 -0.243544, + -0.869417 -0.488413 -0.0746116, -0.741094 -0.65097 -0.164375, -0.550268 -0.794847 -0.255779, -0.29761 -0.893893 -0.335236, + -0.373289 -0.872158 -0.316221, -0.140347 -0.918329 -0.370101, -0.521887 -0.81086 -0.26484, -0.275755 -0.899213 -0.339671, + -0.102203 -0.921118 -0.375629, 0 -0.920482 -0.390785, 0.00146026 0.00392486 -0.999991, 0.000345423 0.00247215 -0.999997, + 0.00153773 0.00494218 -0.999987, 0.000637443 0.00414912 -0.999991, 0.00179633 0.00322105 -0.999993, + 0.000948053 0.00160792 -0.999998, -0.00012123 0.00238578 -0.999997, -0.000797248 0.00180927 -0.999998, + -0.000787599 0.00184812 -0.999998, -0.00147759 0.00131045 -0.999998, -0.00218793 0.000790315 -0.999997, + 1.27706e-005 0.00962827 -0.999954, -0.000425322 0.00616216 -0.999981, 0.00256161 0.0101793 -0.999945, + -0.00100832 0.00504477 -0.999987, -0.00126335 0.00283983 -0.999995, -0.0023854 0.0133101 -0.999909, + -8.91972e-005 0.0199198 -0.999802, 0.00020896 0.0218969 -0.99976, -0.000510879 0.0212457 -0.999774, + 0.00262951 0.0179662 -0.999835, -0.0162625 0.0400532 -0.999065, -0.031569 0.0590854 -0.997754, + 0.000913523 0.0191351 -0.999816, -0.00199422 0.0178349 -0.999839, 5.58266e-005 0.0202414 -0.999795, + -0.0724233 0.104677 -0.991866, 0.00265137 0.0222235 -0.99975, 0.00126894 0.0156133 -0.999877, 0.00195856 0.0132546 -0.99991, + 0.00262955 0.0163673 -0.999863, -0.0045039 0.0137151 -0.999896, -0.00555434 0.0175397 -0.999831, + -0.00762361 0.0136019 -0.999878, 4.67665e-005 0.0164392 -0.999865, 0.00143206 0.0224765 -0.999746, + 0.00397022 0.0178409 -0.999833, -0.000397182 0.0233595 -0.999727, -0.0040995 0.0252299 -0.999673, + -0.00232759 0.00496054 -0.999985, 0 0.164312 -0.986408, 0 0.0990196 -0.995085, 0 0.0990196 -0.995085, 0 0.0332975 -0.999445, + 0.0983026 0.0528115 -0.993754, 0.0782799 0.12099 -0.989562, 0.298512 0.135895 -0.944681, 0.145056 0.164674 -0.975623, + 0.465306 0.155279 -0.871423, 0.550025 0.137225 -0.823797, 0.484453 0.168192 -0.858497, 0.549923 0.1372 -0.823869, + 0.416384 0.197955 -0.887377, 0 0.203954 -0.97898, 0.151186 0.203122 -0.967411, 0.125279 0.203887 -0.970946, + 0.341985 0.196562 -0.918918, 0.328435 0.197473 -0.923653, 0.399515 0.193573 -0.896057, 0.678025 0.160642 -0.71727, + 0.554509 0.178883 -0.812724, 0.846279 0.123692 -0.518181, 0.916708 0.0965583 -0.387714, 0.965938 0.070169 -0.249078, + 0.969033 0.065917 -0.237973, 0.872078 0.113431 -0.476038, 0.67538 0.161016 -0.719678, 3.1186e-006 0.203954 -0.97898, + 0 0.203977 -0.978976, 4.6779e-006 0.203966 -0.978978, 4.6779e-006 0.203943 -0.978983, 0 0.172926 -0.984935, + 0 0.0868033 -0.996225, 0 0.122158 -0.992511, 0 0.122158 -0.992511, 0 0.157359 -0.987541, 0.177248 0.124017 -0.976321, + 0.169375 0.157527 -0.972881, 0.288192 0.119014 -0.950148, 0.390741 0.150795 -0.908065, 0.209961 0.0841757 -0.974079, + 0.407985 0.0795447 -0.909517, 0.663984 0.102392 -0.740703, 0.67566 0.132085 -0.725285, 0.870735 0.0981046 -0.481868, + 0.921907 0.0669457 -0.381583, 0.964844 0.0639286 -0.254929, 0.964637 0.0563237 -0.257493, 0.866516 0.0573056 -0.495849, + 0.672182 0.0728227 -0.736796, 0.958803 0.0457286 -0.280366, 0.222966 0.0415839 -0.973939, 0.42909 0.0453897 -0.90212, + 0.354451 0.0441342 -0.934032, 0.217076 0.0405334 -0.975313, 0.451684 0.0452133 -0.891032, 0.673172 0.0464999 -0.738022, + 0.662004 0.0471636 -0.748015, 0.866341 0.0450946 -0.497413, 0.894541 0.0443151 -0.444783, 0.956708 0.0408657 -0.288167, + 0.96269 0.0401308 -0.267616, 0.73356 0.0470201 -0.677996, 0.90024 0.0440009 -0.433165, 0.9953 0.0346772 -0.0904207, + 0.995349 0.0346328 -0.0898902, 0.995458 0.0347138 -0.0886475, 0.995536 0.0347321 -0.0877608, 0.995671 0.0348756 -0.0861618, + 0.996077 0.0354559 -0.0810795, 0.995732 0.0350878 -0.0853573, 0.995789 0.0350306 -0.0847128, 0.996032 0.0353169 -0.08169, + 0.996257 0.0356183 -0.0787588, 0.995567 0.0346997 -0.0874174, 0.995684 0.0347875 -0.0860404, 0.995556 0.0347457 -0.0875283, + 0.995771 0.034897 -0.0849851, 0.995577 0.0346917 -0.0873044, 0.995179 0.0360971 -0.0911862, 0.995554 0.034868 -0.0874997, + 0.996089 0.0361945 -0.0805999, 0.99333 0.0412734 -0.10767, 0.99454 0.0380774 -0.0971641, 0.996301 0.0362661 -0.0779046, + 0.99703 0.0392162 -0.0662825, 0.00024082 -0.00202779 0.999998, 0.00290695 -0.00603986 0.999978, + -0.00203172 -0.00159938 0.999997, 0.00394968 -0.0066377 0.99997, 0.00190304 -0.00818903 0.999965, + 0.00337472 -0.0104766 0.999939, 0.00451479 -0.0140679 0.999891, 0.0095706 -0.0139301 0.999857, 0.00087944 -0.0167364 0.99986, + -0.0109847 -0.0219832 0.999698, 0.00526753 -0.00694009 0.999962, 0.00166177 -0.0185749 0.999826, + 0.000815404 -0.0189835 0.99982, 0.018255 -0.0256341 0.999505, 2.12364e-005 -0.0157835 0.999875, + 0.00784959 -0.0159612 0.999842, 0.0149067 -0.016769 0.999748, -0.000889016 -0.0173913 0.999848, + -7.72314e-005 -0.0170222 0.999855, -0.00733916 -0.0165841 0.999836, -0.0153721 -0.0172926 0.999732, + -8.33392e-005 -0.0186075 0.999827, -0.00236223 -0.0191196 0.999814, 0.765595 -0.291325 0.57358, 0.76412 -0.617809 -0.185559, + 0.659139 -0.743997 -0.109562, 0.587598 -0.760355 -0.276745, 0.272148 -0.0764455 0.959214, 0.273302 0 0.961928, + 0.260428 -0.0617521 0.963516, 0.268102 -0.115805 0.956405, 0.311813 -0.109268 0.943839, 0.271946 -0.189636 0.943442, + 0.249351 -0.0990786 0.963331, 0.241335 -0.109702 0.964221, 0.222081 -0.165199 0.960932, 0.242888 -0.182811 0.952673, + 0.22331 -0.23051 0.9471, 0.239481 -0.255282 0.936739, 0.179935 -0.278771 0.943351, 0.18159 -0.250738 0.950871, + 0.145443 -0.308134 0.940159, 0.150028 -0.300057 0.94205, 0.907888 -0.419196 -0.00381761, 0.970796 -0.235045 -0.0480551, + 0.92048 -0.387721 -0.048879, 0.865272 -0.490572 -0.103167, 0.784986 -0.616362 -0.0624073, 0.96489 -0.261188 -0.0277208, + 0.930462 -0.365685 0.0226697, 0.902412 -0.429463 -0.034842, 0.80967 -0.586189 -0.0285817, 0.594912 -0.802619 -0.0433838, + 0.669851 -0.734122 -0.111194, 0.63295 -0.774145 0.00858557, 0.583011 -0.812107 0.0241153, 0.468268 -0.8824 -0.045782, + 0.492861 -0.86933 -0.0367965, 0.734573 -0.674252 -0.0760733, -0.369996 -0.0286387 0.928592, -0.382289 -0.0167271 0.923891, + -0.412144 -0.015888 0.91098, -0.386602 -0.00867159 0.922206, -0.430607 -0.00708523 0.902512, -0.386378 -0.0308501 0.921825, + -0.44057 -0.0243308 0.897388, -0.260905 -0.0445423 0.964336, -0.316921 -0.040286 0.947596, -0.306431 -0.0451808 0.95082, + -0.359413 -0.0412308 0.932267, -0.413304 -0.0349957 0.90992, -0.354254 -0.0403107 0.93428, -0.335802 -0.0428088 0.940959, + -0.326221 -0.0343291 0.94467, -0.450134 -0.00809573 0.892924, -0.453246 -0.0152474 0.891255, -0.325134 -0.0191149 0.945475, + -0.326584 -0.0279648 0.944754, -0.3181 -0.0293543 0.947603, -0.311151 -0.0327263 0.949797, -0.330512 -0.050381 0.942456, + -0.459093 -0.00383284 0.88838, 0.582505 0 -0.812827, 0.683842 0 -0.72963, 0.745583 0 -0.666413, 0.914063 0.001791 -0.405569, + 0.861127 0 -0.50839, 0.958057 -1.29069e-007 -0.286576, 0.973551 0.00266008 -0.228453, 0.914063 -0.00179122 -0.405569, + 0.973551 -0.00266041 -0.228453, 0.650119 0.0596052 -0.757491, 0.621297 0.041143 -0.782495, 0.609079 0.0565473 -0.791091, + 0.568583 0.0615239 -0.820322, 0.684729 0.0735132 -0.72508, 0.710582 0.0436684 -0.702258, 0.841739 0.0789777 -0.534076, + 0.839283 0.0901637 -0.536167, 0.616056 0.0191714 -0.787469, 0.681108 0.0105573 -0.732107, 0.582482 0.00883894 -0.812796, + 0.758731 0.023304 -0.650987, 0.894432 0.0523859 -0.444125, 0.898212 0.0134518 -0.439357, 0.894665 0.0271792 -0.44591, + 0.956821 0.102083 -0.272163, 0.97152 0.0834945 -0.221762, 0.9871 0.0947691 -0.129047, 0.993178 0.0651837 -0.0966827, + 0.979754 0.0563096 -0.192124, 0.97111 0.102689 -0.215408, 0.970103 0.0292302 -0.240927, 0.982025 0.0144536 -0.188196, + 0.993709 0.0352486 -0.106302, 0.401954 0.013133 -0.915566, 0.428053 0.00771052 -0.903721, 0.40615 0.00792886 -0.913772, + 0.433006 0.0153596 -0.90126, 0.384927 0.0278995 -0.922525, 0.354344 0.0408943 -0.93422, 0.312899 0.045443 -0.948699, + 0.358294 0.0418597 -0.93267, 0.321021 0.0425572 -0.946116, 0.411627 0.0296941 -0.910868, 0.463071 0.017478 -0.886149, + 0.473475 0.00764563 -0.880774, 0.448671 0.0275288 -0.893273, 0.383227 0.0456754 -0.922524, 0.422594 0.038696 -0.905492, + 0.328161 0.0448107 -0.943558, 0.353363 0.069845 -0.932875, 0.366902 0 -0.930259, 0.279258 0.063025 -0.958145, + 0.270644 0.101468 -0.957317, 0.298535 0.128231 -0.945745, 0.319134 0.170882 -0.932176, 0.278418 0.190714 -0.941335, + 0.288325 0.237373 -0.927644, 0.23685 0.257372 -0.936836, 0.251841 0.297268 -0.920982, 0.226367 0.305736 -0.924815, + 0.242762 0.303455 -0.921402, 0.234881 0.185723 -0.954116, 0.189646 0.267701 -0.944654, 0.430229 0.456872 -0.77857, + 0.548665 0.612388 -0.569164, 0.49738 0.462568 -0.733924, 0.618576 0.566791 -0.544162, 0.541169 0.340552 -0.768869, + 0.622963 0.703762 -0.341519, 0.409085 0.409187 -0.815607, 0.402469 0.347722 -0.846823, 0.431071 0.221761 -0.874643, + 0.580935 0.21239 -0.785751, 0.490926 0.06438 -0.868819, 0.735199 0.420277 -0.531837, 0.663812 0.159814 -0.730625, + 0.798325 0.240625 -0.552066, 0.706819 0.647607 -0.284626, 0.65174 0.742511 -0.154635, 0.825112 0.510603 -0.241816, + 0.921861 0.330867 -0.201741, 0.75403 0.638311 -0.154912, 0.892615 0.450571 0.0149702, 0.924651 0.211525 -0.316665, + 0.823825 0.195032 -0.532236, 0.956044 0.26648 0.122343, 0.690234 0 -0.723587, 0.613454 0 -0.78973, 0.84543 0 -0.534086, + 0.531247 0 -0.847217, 0.84543 0 -0.534086, 0.950487 0 -0.310765, 0.96197 0 -0.273155, 0.993905 0 -0.110236, + 0.698577 0.698555 -0.154956, 0.938797 0 -0.344471, 0.987488 0.134246 -0.0827357, 0.976271 0 -0.216553, + 0.999885 0.0151652 0.000504623, 0.999537 0.0303484 0.00202071, 0.999538 0.0303546 0.00121507, 0.998039 0.0625846 0.0012328, + 0.998451 0.0554985 0.00388718, 0.996359 0.0852382 0.00179353, 0.995619 0.0933312 0.00559451, 0.974873 0.222563 0.00945755, + 0.951117 0.265282 -0.158122, 0.940327 0.336185 -0.0525736, 0.872058 0.482923 -0.0793719, 0.847146 0.526099 0.0745965, + 0.862999 0.505206 0, 0.737422 0.675432 0, 0.656809 0.754057 0, 0.749143 0.660561 0.0494415, 0.599616 0.797412 0.0677837, + 0.572832 0.819673 0, 0.530673 0.847553 -0.00628536, 0.180859 0.983337 0.0184233, 0.125884 0.991987 -0.010702, + 0.00010385 0.999913 0.0132112, 0.420223 0.907363 0.0102623, 0.278381 0.960465 0.00344783, 0.331858 0.943261 0.0113903, + 0.460479 0.88763 0.00842865, 0.424761 0.905198 -0.0139826, 0.280942 0.959691 0.008091, 0.127788 0.991224 0.0338375, + -0.180494 0.983352 0.0210019, -0.125275 0.99197 -0.0173979, -0.277999 0.960581 -0.00131167, -0.331468 0.943296 0.0179258, + -0.420207 0.907372 0.0100839, -0.533357 0.845777 0.0138699, -0.530884 0.84742 -0.00636975, -0.460471 0.887636 0.00829947, + -0.280168 0.959599 0.0259831, -0.127581 0.991005 0.0403873, -0.424167 0.905563 -0.00621874, 0.357897 0.446461 -0.820111, + 0.444458 0.554136 -0.70384, 0.41107 0.512971 -0.753579, 0.512575 0.668654 -0.538672, 0.423785 0.529105 -0.735156, + 0.357647 0.447058 -0.819895, 0.526542 0.655489 -0.541376, 0.357647 0.447062 -0.819893, 0.559893 0.790566 -0.248043, + 0.553287 0.691607 -0.464277, 0.602536 0.753154 -0.264024, 0.617243 0.771548 -0.154029, 0.520853 0.789981 -0.323486, + 0.507419 0.848476 -0.150381, 0.5636 0.811839 -0.152553, 0.0976376 0.652003 -0.751903, 0.157202 0.549446 -0.820607, + 0.086435 0.572134 -0.815593, 0.0408758 0.589012 -0.80709, 0.052125 0.722831 -0.689056, 0.199203 0.650623 -0.732808, + 0.115798 0.825868 -0.551844, 0.0628824 0.831413 -0.552085, 0.223796 0.4937 -0.840343, 0.312909 0.629342 -0.711349, + 0.277306 0.474356 -0.835517, 0.251919 0.808888 -0.531259, 0.427828 0.734778 -0.526369, 0.34244 0.582536 -0.737148, + 0.389538 0.797117 -0.461373, 0.0705445 0.937181 -0.341635, 0.154709 0.952292 -0.263069, 0.149451 0.982743 -0.108998, + 0.272236 0.956366 -0.106073, 0.0744371 0.991148 -0.109927, 0.309981 0.904604 -0.29258, 0.478319 0.82061 -0.312747, + 0.436959 0.856983 -0.273218, 0.411759 0.896317 -0.16453, 0.497862 0.850635 -0.168979, 0.0713132 0.398732 -0.91429, + 0.129835 0.386668 -0.913034, 0.106575 0.367883 -0.923745, 0.0500997 0.371999 -0.92688, 0.0299093 0.407045 -0.912918, + 0.0293502 0.361906 -0.931753, 0.197415 0.345817 -0.917299, 0.190032 0.371269 -0.908871, 0.21192 0.364693 -0.906691, + 0.157825 0.350358 -0.923223, 0.031693 0.335354 -0.941559, 0.073287 0.341276 -0.937102, 0.122358 0.334167 -0.934538, + 0.157959 0.314888 -0.935892, 0.0311414 0.340735 -0.939644, -0.106721 0.367661 -0.923816, -0.130089 0.386909 -0.912895, + -0.0712266 0.398625 -0.914344, -0.0298185 0.406919 -0.912977, -0.0498322 0.37177 -0.926986, -0.0293522 0.361907 -0.931752, + -0.212615 0.363418 -0.90704, -0.189531 0.36998 -0.909501, -0.197608 0.345319 -0.917445, -0.157776 0.350401 -0.923215, + -0.0316941 0.335357 -0.941558, -0.0729869 0.340866 -0.937275, -0.122191 0.334014 -0.934614, -0.158015 0.316403 -0.935372, + -0.0311414 0.340735 -0.939644, -0.230194 0.50619 -0.831133, -0.27676 0.473545 -0.836157, -0.312344 0.605814 -0.731731, + -0.334771 0.573398 -0.747758, -0.423283 0.728712 -0.538341, -0.220828 0.64976 -0.727356, -0.382475 0.785031 -0.487277, + -0.10968 0.669843 -0.734358, -0.256687 0.811502 -0.524954, -0.157306 0.549441 -0.820591, -0.0867006 0.572095 -0.815592, + -0.0406388 0.589029 -0.80709, -0.0518242 0.722851 -0.689058, -0.11957 0.842557 -0.525167, -0.0625206 0.831432 -0.552097, + -0.479408 0.826274 -0.295703, -0.419313 0.855218 -0.304596, -0.285449 0.904956 -0.315552, -0.494117 0.847188 -0.195243, + -0.408153 0.888831 -0.208306, -0.146184 0.962626 -0.227995, -0.0704771 0.93804 -0.339286, -0.0744371 0.991148 -0.109927, + -0.271028 0.954072 -0.127635, -0.148817 0.982838 -0.109009, -0.337644 0.422058 -0.841346, -0.414855 0.517944 -0.748084, + -0.337423 0.422238 -0.841345, -0.399833 0.499225 -0.768705, -0.512775 0.668596 -0.538555, -0.337374 0.421549 -0.84171, + -0.438722 0.546998 -0.712963, -0.526698 0.655684 -0.540988, -0.521695 0.78954 -0.323206, -0.560383 0.790217 -0.248049, + -0.508639 0.847736 -0.150433, -0.564186 0.811429 -0.152569, -0.553286 0.691608 -0.464277, -0.602532 0.753158 -0.264025, + -0.617243 0.771548 -0.154029, -0.313941 0.108623 -0.943208, -0.333914 0.146862 -0.931092, -0.354028 0.0592809 -0.933354, + -0.302137 0.126975 -0.94477, -0.290358 0.290367 -0.9118, -0.269304 0.106769 -0.957119, -0.277335 0.071679 -0.958096, + -0.336884 0.111914 -0.934871, -0.239777 0.254553 -0.936862, -0.304721 0.19998 -0.931211, -0.255862 0.291535 -0.921706, + -0.242623 0.303777 -0.921333, -0.242484 0.304099 -0.921263, -0.226589 0.306098 -0.924641, -0.235374 0.185057 -0.954124, + -0.273387 0.184476 -0.944049, -0.191192 0.266912 -0.944565, -0.566991 0.188298 -0.801913, -0.64817 0.145117 -0.747541, + -0.783609 0.270455 -0.559295, -0.507015 0.112758 -0.85453, -0.480892 0.159309 -0.862185, -0.544088 0.325647 -0.773255, + -0.449894 0.260959 -0.854105, -0.35927 0.310793 -0.879962, -0.488103 0.432548 -0.758062, -0.418831 0.410106 -0.810181, + -0.415758 0.353969 -0.837766, -0.545962 0.601407 -0.583297, -0.643589 0.58067 -0.498613, -0.697686 0.42922 -0.573589, + -0.804007 0.190687 -0.563215, -0.924478 0.211617 -0.31711, -0.921345 0.31479 -0.228103, -0.807203 0.485478 -0.335759, + -0.94214 0.318517 -0.104494, -0.844246 0.535034 -0.0314129, -0.969967 0.218154 -0.107577, -0.635186 0.702342 -0.321332, + -0.728935 0.66671 -0.155407, -0.703451 0.709667 -0.0391022, -0.868953 0.494895 0, -0.844784 0.531344 0.0633479, + -0.749965 0.661457 -0.0052635, -0.697725 0.705211 0.125927, -0.819311 0.565693 -0.0933876, -0.999538 0.0303546 0.00121507, + -0.998039 0.0625846 0.0012328, -0.999885 0.0151652 0.000504623, -0.999537 0.0303484 0.00202071, + -0.998451 0.0554985 0.00388718, -0.996345 0.0854027 0.00179354, -0.995633 0.0933431 -0.00150406, + -0.997525 0.0702708 -0.0025096, -0.99752 0.0703417 -0.00250961, -0.616822 0.0189901 -0.786873, -0.610461 0.00956689 -0.791989, + -0.689594 0.0107878 -0.724115, -0.898212 0.0134518 -0.439357, -0.750088 0.0204915 -0.66102, -0.725846 0.0406372 -0.686656, + -0.881639 0.0293131 -0.471014, -0.970103 0.0292302 -0.240927, -0.60906 0.0563923 -0.791117, -0.605005 0.0402468 -0.795204, + -0.674218 0.0598937 -0.7361, -0.568209 0.0611948 -0.820605, -0.892372 0.0557443 -0.447845, -0.68455 0.0731401 -0.725287, + -0.848543 0.0816895 -0.522782, -0.979754 0.0563096 -0.192124, -0.993709 0.0352486 -0.106302, -0.971538 0.0833298 -0.221744, + -0.982025 0.0144536 -0.188196, -0.993178 0.0651837 -0.0966827, -0.963801 0.102552 -0.24611, -0.839329 0.0897345 -0.536167, + -0.991061 0.0951631 -0.0934985, -0.988422 0.104903 -0.109621, -0.43724 0.437254 -0.785895, -0.618237 0.353624 -0.701949, + -0.558874 0.252002 -0.790034, -0.844946 0 -0.534851, -0.651929 0 -0.75828, -0.496664 0.224416 -0.838428, + -0.530465 0 -0.847707, -0.82431 0 -0.566138, -0.577344 0.577362 -0.577344, -0.84543 0 -0.534086, -0.950486 0 -0.310767, + -0.977468 0 -0.211083, -0.993906 0 -0.110229, -0.720341 -0.00183798 -0.693618, -0.835797 -0.00308004 -0.54903, + -0.873866 -0.000578021 -0.486166, -0.668231 -0.00456825 -0.74394, -0.753195 0 -0.657798, -0.610488 0 -0.792025, + -0.906468 0.00300882 -0.422263, -0.949376 -0.00239212 -0.314131, -0.960393 0.000361032 -0.278649, + -0.987956 -0.0018495 -0.154723, -0.980156 0.00448049 -0.198176, -0.475012 0 -0.879979, -0.440912 0 -0.89755, + -0.406162 0 -0.913801, -0.999982 0.00605616 0.000455988, -0.999997 0.00237452 0, -0.999997 0.00238028 0.00014914, + -0.999982 0.00603848 0, -0.999973 0.0072794 0.000505699, -0.999952 0.00973389 0.000812542, -0.999953 0.00972601 0.000609409, + -0.999953 0.00970236 0, -0.997199 0.0745459 -0.00604741, -0.995897 0.0720488 -0.0547486, -0.993734 0.0767118 -0.081285, + -0.99441 0.0807076 -0.0680816, -0.99575 0.0919782 -0.00472814, -0.995318 0.0866401 -0.0428393, -0.993801 0.0951055 0.0575748, + -0.99377 0.10239 0.0440264, -0.999359 0.0358002 -0.000484945, -0.999324 0.0358815 0.00795941, -0.992662 0.108772 0.0528193, + -0.992411 0.120326 -0.0253402, -0.993893 0.110352 0, -0.990191 0.13021 -0.0506615, -0.623673 0.0769631 -0.777888, + -0.991721 0.121301 -0.0421382, -0.99249 0.0995392 0.0711075, -0.965914 0.0643258 0.250743, -0.793705 0.607126 -0.0378102, + -0.832041 0.554688 -0.00532601, -0.791292 0.610104 -0.0403602, -0.653821 0.744788 -0.133447, -0.65541 0.74369 -0.131768, + -0.541315 0.818304 -0.193278, -0.621726 0.768407 -0.151683, -0.467197 0.853997 -0.228945, -0.536022 0.821428 -0.194774, + -0.319814 0.903259 -0.286081, -0.238229 0.917639 -0.318096, -0.103465 0.929162 -0.354898, -0.374131 0.886556 -0.27211, + -0.178169 0.923732 -0.339079, -0.679978 0.717446 -0.151331, -0.639954 0.743766 -0.193056, -0.745637 0.657977 -0.105315, + -0.447371 0.850011 -0.278102, -0.42008 0.847421 -0.324671, -0.782653 0.620657 -0.0473273, -0.748353 0.652461 -0.119425, + -0.688558 0.692861 -0.214084, -0.77015 0.62864 -0.108078, -0.641436 0.732452 -0.228199, -0.434311 0.807799 -0.398541, + -0.66505 0.694277 -0.275115, -0.445673 0.761558 -0.470536, -0.239463 0.903279 -0.356012, -0.215854 0.864132 -0.454624, + -0.174541 0.872622 -0.456143, -0.217306 0.8156 -0.536261, -0.0462465 0.782569 -0.620843, -0.266766 0.71601 -0.645109, + -0.124456 0.73761 -0.663658, -0.470927 0.728432 -0.497609, 0.0665003 0.650301 -0.75676, -0.825475 0.524884 -0.207579, + -0.888486 0.44455 -0.113874, -0.830339 0.54684 -0.10725, -0.755469 0.598868 -0.26575, -0.859442 0.427268 -0.280716, + -0.667686 0.594255 -0.448394, -0.510336 0.663668 -0.546902, -0.814043 0.558457 -0.159563, -0.914512 0.261816 -0.308417, + -0.98105 0.144233 -0.129377, -0.945855 0.284473 -0.156315, -0.669434 0.491894 -0.556686, -0.650377 0.362706 -0.667424, + -0.674831 0.301419 -0.67361, -0.914932 0.208685 -0.345471, -0.961731 0.197086 -0.190342, -0.214627 0.651106 -0.728008, + -0.368419 0.621047 -0.691785, -0.323207 0.498869 -0.804156, -0.139021 0.576981 -0.804839, -0.142916 0.621595 -0.770191, + -0.305724 0.422174 -0.853406, -0.41931 0.372158 -0.828056, -0.18017 0.413291 -0.892597, -0.147306 0.465093 -0.87292, + -0.884197 0.465874 -0.0340327, -0.861838 0.506433 -0.0275854, -0.90491 0.423743 -0.0397441, -0.946428 0.318569 -0.052801, + -0.9678 0.243567 -0.0635458, -0.852053 0.522827 -0.0256327, -0.904916 0.423745 -0.0395857, -0.970757 0.232294 -0.0605858, + -0.985081 0.156653 -0.0712393, -0.990443 0.116778 -0.0733872, -0.981052 0.0819561 -0.175556, -0.917749 0.0517955 -0.393769, + -0.867218 0.0971865 -0.488351, -0.682941 0.113979 -0.721527, -0.953332 0.0192426 -0.301311, -0.954573 0.0404009 -0.295225, + -0.866975 0.0427075 -0.496518, -0.672654 0.0735984 -0.736288, -0.671071 0.163854 -0.72306, -0.314121 0.153052 -0.936965, + -0.441255 0.217952 -0.870512, -0.183474 0.249555 -0.95082, -0.416098 0.0733093 -0.90636, -0.171471 0.0703282 -0.982676, + -0.170385 0.158858 -0.972488, -0.958959 0.000491904 -0.283545, -0.867046 0.000609978 -0.498227, + -0.907281 7.56707e-007 -0.420525, -0.958959 -0.00049089 -0.283545, -0.867046 -0.000608721 -0.498227, -0.674309 0 -0.738449, + -0.668127 2.17511e-007 -0.744047, -0.393594 0 -0.919284, -0.305909 0 -0.952061, -0.171217 0 -0.985233, + -0.926357 -0.0416008 -0.374342, -0.962364 -0.0143339 -0.271387, -0.867535 -0.0215953 -0.496907, + -0.673396 -0.0937573 -0.733313, -0.6737 -0.0446853 -0.737653, -0.968903 -0.0366124 -0.244718, -0.970853 -0.0281762 -0.238015, + -0.874304 -0.0924404 -0.476495, -0.683838 -0.145804 -0.714918, -0.394329 -0.054459 -0.917354, -0.286015 -0.123286 -0.950261, + -0.170935 -0.0578297 -0.983584, -0.169827 -0.127598 -0.977178, -0.409773 -0.181949 -0.893857, -0.172562 -0.198093 -0.964874, + -0.95501 -0.200842 -0.218215, -0.965302 -0.126614 -0.228389, -0.895183 -0.19284 -0.401821, -0.885838 -0.306483 -0.348367, + -0.686126 -0.352618 -0.636311, -0.91644 -0.348166 -0.197279, -0.817386 -0.408653 -0.406059, -0.68351 -0.292993 -0.668558, + -0.37299 -0.38977 -0.841996, -0.427871 -0.33207 -0.840628, -0.20232 -0.327333 -0.922995, -0.197647 -0.396395 -0.896553, + -0.607832 -0.444569 -0.65795, -0.30014 -0.445876 -0.843274, -0.168318 -0.439306 -0.882428, -0.980373 -0.189833 -0.0532128, + -0.993509 -0.088483 -0.0714908, -0.993921 -0.0820018 -0.0734653, -0.979849 -0.192992 -0.0514755, + -0.981176 -0.185093 -0.0550843, -0.955728 -0.292273 -0.0340577, -0.955332 -0.293745 -0.0324707, -0.876984 -0.449156 -0.170759, + -0.77425 -0.523188 -0.356105, -0.812215 -0.514754 -0.274475, -0.874123 -0.460788 -0.153566, -0.786382 -0.559931 -0.260924, + -0.596796 -0.608161 -0.523426, -0.592879 -0.580026 -0.558627, -0.875526 -0.469113 -0.1157, -0.760543 -0.611396 -0.218563, + -0.872469 -0.478494 -0.0992016, -0.76235 -0.618941 -0.189038, -0.536708 -0.698113 -0.473901, -0.589326 -0.756546 -0.283429, + -0.481794 -0.78102 -0.397344, -0.295313 -0.582488 -0.757296, -0.277905 -0.65933 -0.698608, -0.288964 -0.753379 -0.590694, + -0.113169 -0.595709 -0.795188, -0.128737 -0.555683 -0.821367, -0.145398 -0.722403 -0.676012, -0.26867 -0.831084 -0.486946, + -0.33365 -0.859149 -0.387996, 0.0925242 -0.841891 -0.531657, 0.540574 -0.648546 -0.53588, 0.000949178 -0.728804 -0.684722, + 0.000211485 -0.783287 -0.621661, 0.000250043 -0.596012 -0.802975, 0.00264659 -0.451383 -0.892326, + 0.00107885 -0.56183 -0.827252, 0.00027519 -0.850055 -0.526695, 0.000145303 -0.73693 -0.675969, 0 -0.551457 -0.834203, + -0.000326501 -0.327832 -0.944736, 0.00206714 -0.297349 -0.954767, 0.00120256 -0.259449 -0.965756, + 0.00154506 -0.143932 -0.989586, 0 -0.0586918 -0.998276, 0.00101962 -0.123649 -0.992326, 0.0028621 -0.363133 -0.931733, + 0.967233 -0.118688 -0.224441, 0.970573 -0.144248 -0.192821, 0.922292 -0.242312 -0.301101, 0.881886 -0.352474 -0.313112, + 0.705223 -0.515315 -0.48694, 0.906523 -0.189679 -0.377145, 0.88487 -0.0891895 -0.457221, 0.674675 -0.371881 -0.637588, + 0.96464 -0.0674409 -0.254796, 0.95523 -0.0207379 -0.295135, 0.917627 -0.0126257 -0.397242, 0.953129 0.0021533 -0.302557, + 0.713677 -0.067789 -0.697187, 0.60627 -0.193696 -0.771309, 0.690638 -0.581018 -0.430624, 0.369317 -0.771986 -0.517343, + 0.346105 -0.673155 -0.653508, 0.321098 -0.464862 -0.825105, 0.189683 -0.773087 -0.605274, 0.197455 -0.823331 -0.532107, + 0.14666 -0.58057 -0.800893, 0.27855 -0.2291 -0.932697, 0.390091 -0.10951 -0.914241, 0.139534 -0.129505 -0.981712, + 0.105522 -0.324027 -0.940144, 0.955863 0.0332292 -0.291929, 0.866318 0.0301789 -0.498581, 0.908534 0.0314699 -0.416625, + 0.961655 0.0334633 -0.272212, 0.867838 0.0299702 -0.495943, 0.673688 0.0239593 -0.738628, 0.666226 0.0231699 -0.74539, + 0.393461 0.0139932 -0.919235, 0.305204 0.010563 -0.952228, 0.172878 0.00610158 -0.984924, 0.169607 0.00581837 -0.985495, + 0.397438 0.0134892 -0.91753, 0.669356 0.0230682 -0.742583, 0.965056 0.0627439 -0.25442, 0.912476 0.115607 -0.392457, + 0.96705 0.0820054 -0.241016, 0.895138 0.0877414 -0.43707, 0.715102 0.11867 -0.688873, 0.669651 0.213388 -0.71136, + 0.899955 0.22063 -0.376035, 0.390914 0.141474 -0.90949, 0.964665 0.122115 -0.233473, 0.96492 0.165232 -0.20403, + 0.898681 0.304541 -0.315638, 0.966142 0.195759 -0.168071, 0.865777 0.39877 -0.302345, 0.664798 0.399365 -0.631309, + 0.653072 0.572765 -0.495416, 0.338836 0.269694 -0.901363, 0.16977 0.142208 -0.975169, 0.15648 0.33197 -0.93022, + 0.334556 0.514949 -0.78924, 0.130313 0.589012 -0.797549, 0.352559 0.791182 -0.499734, 0.303556 0.709015 -0.636515, + 0.65964 0.620814 -0.423633, 0.154912 0.788486 -0.595224, 0.20723 0.828913 -0.519576, 0.872056 0.425823 -0.241232, + 0.906736 0.361837 -0.216574, 0.749121 0.591629 -0.29798, 0.660016 0.675218 -0.329332, 0.968575 0.196284 -0.152762, + 0.912905 0.349714 -0.210487, 0.670073 0.666341 -0.327095, 0.421487 0.825217 -0.375985, 0.144199 0.909519 -0.389847, + 0.341204 0.858314 -0.383244, 0.216868 0.895906 -0.387713, 0.446801 0.81452 -0.370035, 0 0.92335 -0.383959, + 3.17455e-006 0.0348285 -0.999393, 3.17455e-006 0.0348214 -0.999394, 0 0.0348426 -0.999393, 3.17455e-006 0.0348143 -0.999394, + 0 0.0348 -0.999394, 0 0.0348213 -0.999394, -0.00976446 0.924296 -0.381552, 0.00219529 0.923053 -0.384667, + -0.0146475 0.924734 -0.380333, -0.0358737 0.926572 -0.374403, 0.00447013 0.163103 -0.986599, 0.00237693 0.340112 -0.940382, + 0.00234099 0.27034 -0.962762, 0.00451158 0.107447 -0.994201, -0.000250245 0.141574 -0.989928, -0.000675421 0.33331 -0.942817, + 0.00100398 0.547554 -0.83677, 0.00349847 0.444967 -0.89554, 0.000694582 0.536503 -0.843898, -3.76153e-006 0.650342 -0.759641, + -0.00182556 0.762326 -0.647191, 0.000902193 0.764531 -0.644587, 0.000826591 0.857373 -0.514694, 0 0.900648 -0.434549, + 0.00179677 0.86804 -0.496491, 0 0.556702 -0.830712, 0.00104825 0.736513 -0.676423, 0.970938 -0.167859 -0.170597, + 0.889209 -0.381472 -0.25256, 0.936747 -0.277265 -0.213608, 0.727466 -0.601456 -0.330218, 0.9739 -0.155345 -0.165492, + 0.897552 -0.365287 -0.246913, 0.704473 -0.623209 -0.3396, 0.652526 -0.671812 -0.350541, 0.375742 -0.838209 -0.395251, + 0.376369 -0.837786 -0.395551, 0.160648 -0.902225 -0.400229, 0.447096 -0.804873 -0.390236, 0.19219 -0.8955 -0.401426, + -0.968185 0.250234 0, -0.927846 0.363586 -0.0831098, -0.930472 0.301141 -0.208653, -0.852277 0.504049 -0.139852, + -0.772138 0.621957 0.130278, -0.664804 0.742988 0.0774936, -0.607535 0.770163 0.194291, -0.513904 0.857848 0, + -0.349186 0.937054 0, -0.277073 0.758405 -0.58996, -0.0950938 0.796269 0.597422, -0.115404 0.993319 0, -0.136144 0.990689 0, + 0.350819 0.936443 0, 0.275173 0.750168 -0.601272, 0.115404 0.993319 0, 0.0950938 0.796269 0.597422, + 0.932463 0.34934 -0.0920509, 0.93242 0.277669 -0.231286, 0.769569 0.622984 0.140195, 0.851934 0.500202 -0.154939, + 0.657919 0.74846 0.0833703, 0.594638 0.776322 0.209117, 0.998224 0.0594406 -0.00383714, 0.99721 0.0745535 -0.00383672, + 0.996409 0.0845153 -0.00511614, 0.476617 0 -0.879111, 0.44173 0 -0.897148, 0.44173 0 -0.897148, 0.406162 0 -0.913801, + -0.20417 -0.978936 0.000123659, -0.155599 -0.987807 0.00515438, -0.276043 -0.961128 0.00573299, -0.0001176 -1 5.9117e-005, + -0.155599 -0.987808 -0.00494835, -0.276043 -0.961129 -0.00550384, 0.155438 -0.987792 0.0102952, 0.20427 -0.978915 0.000246941, + 0.276723 -0.960881 0.0114651, 0.155439 -0.987796 -0.00988374, 0.276725 -0.960886 -0.011007, -0.875454 -0.477299 -0.0759265, + -0.901228 -0.431713 -0.0375776, -0.921181 -0.384644 -0.0589441, -0.784636 -0.617524 -0.0548575, + -0.965576 -0.256726 -0.0418915, -0.970794 -0.235087 -0.0478981, -0.921856 -0.385746 -0.0371643, + -0.909655 -0.415347 -0.00397293, -0.807057 -0.590472 0.00121227, -0.595595 -0.80165 -0.0512256, + -0.587581 -0.80913 -0.00760531, -0.672676 -0.731297 -0.11275, -0.734574 -0.676522 -0.0521466, -0.471955 -0.880562 -0.0432248, + -0.492886 -0.869006 -0.0434894, -0.631179 -0.77559 0.00854958, -0.270458 0 0.962732, -0.277411 -0.045587 0.959669, + -0.311983 -0.111873 0.943478, -0.267076 -0.117754 0.956454, -0.272475 -0.193871 0.942428, -0.255701 -0.0611207 0.964822, + -0.219762 -0.165761 0.961368, -0.237345 -0.113786 0.964738, -0.24167 -0.186592 0.95225, -0.22239 -0.232972 0.946714, + -0.23946 -0.255305 0.936738, -0.179936 -0.278793 0.943344, -0.181641 -0.250661 0.950881, -0.145447 -0.308179 0.940144, + -0.149879 -0.300373 0.941973, -0.999868 -0.0161977 -0.00135028, -0.999653 -0.02611 -0.00345226, + -0.999333 -0.036022 -0.00599725, -0.997092 -0.0749645 -0.0137034, -0.995894 -0.0893029 -0.0148572, + -0.996396 -0.0846261 -0.00579282, -0.998105 -0.0604825 -0.0112881, -0.998117 -0.0605143 -0.0100591, + -0.995091 -0.0938879 -0.0312751, -0.997966 -0.0622341 -0.0137922, -0.99851 -0.0517709 -0.0172256, + -0.926641 -0.360785 0.105692, -0.845175 -0.503747 0.178657, -0.916764 -0.297157 0.266911, -0.764047 -0.617738 -0.186095, + -0.482027 -0.876151 0.00290132, -0.659149 -0.743941 -0.109882, -0.587256 -0.760319 -0.277569, -0.413327 -0.909738 -0.0392217, + -0.345926 -0.937313 0.0421881, -0.179687 -0.504487 0.844515, -0.323152 -0.946326 -0.00634927, -0.42694 -0.903893 -0.0264527, + -0.23204 -0.972173 0.0321943, -0.119584 -0.992628 0.0197446, -0.227441 -0.973587 -0.0199599, -0.0766457 -0.661037 -0.746429, + 0.418123 -0.908381 0.00423407, 0.426992 -0.90384 -0.0274103, 0.345902 -0.937289 0.0429182, 0.413547 -0.909636 -0.0392634, + 0.322486 -0.94631 -0.0223498, 0.179733 -0.504647 0.84441, 0.230915 -0.972794 0.0187332, 0.224983 -0.972452 -0.0609866, + 0.118848 -0.992842 0.0118263, 0.0766442 -0.660971 -0.746487, 0.0508366 -0.351259 0.934897, 0.0414068 -0.381376 0.923492, + 0.1094 -0.38202 0.917656, 0.0300178 -0.355512 0.93419, 0.023502 -0.387976 0.92137, 0.0973461 -0.348454 0.932257, + 0.0343422 -0.325176 0.94503, 0.161754 -0.370466 0.914653, 0.181826 -0.347808 0.919766, 0.168222 -0.34331 0.924034, + 0.197204 -0.335747 0.921078, 0.142 -0.350393 0.925776, 0.110465 -0.322861 0.939978, 0.0618154 -0.324925 0.943717, + 0.134188 -0.318741 0.938295, 0.0385785 -0.334504 0.941604, -0.10907 -0.381417 0.917946, -0.041408 -0.381371 0.923494, + -0.0509266 -0.351109 0.934949, -0.0301045 -0.355437 0.934215, -0.023499 -0.387976 0.92137, -0.0971632 -0.348027 0.932436, + -0.0343304 -0.324996 0.945092, -0.169486 -0.341766 0.924376, -0.183461 -0.346535 0.919922, -0.163181 -0.368995 0.914995, + -0.197203 -0.335748 0.921078, -0.14175 -0.349253 0.926245, -0.110234 -0.32241 0.94016, -0.0621758 -0.325047 0.943652, + -0.134307 -0.31724 0.938787, -0.0389461 -0.334499 0.941591, -0.999204 -0.0154778 -0.0367637, -0.999558 -0.0139579 -0.026236, + -0.999566 -0.0293709 0.00206428, -0.999037 -0.0301485 -0.0318802, -0.999393 -0.0348287 0.000800216, + -0.998853 -0.0478826 0.00025956, -0.998037 -0.0587588 -0.0216751, -0.99308 -0.0749124 0.0904418, + -0.995426 -0.0880689 0.0370288, -0.983558 -0.096185 0.152846, 0.999037 -0.0301485 -0.0318802, 0.999393 -0.0348287 0.000800216, + 0.999558 -0.0139579 -0.026236, 0.998037 -0.0587588 -0.021675, 0.998853 -0.0478826 0.00025956, 0.999204 -0.0154778 -0.0367637, + 0.999566 -0.0293709 0.00206428, 0.995497 -0.0877959 0.0357491, 0.993281 -0.0748285 0.0882774, 0.984095 -0.0957977 0.149598, + 0.0983124 0 -0.995156, 0.18051 0.0231527 -0.983301, 0.305522 2.8861e-006 -0.952185, 0.37339 0.0420131 -0.926723, + 0.451408 -1.67165e-006 -0.892318, 0.544231 0.0393673 -0.838011, 0.37339 -0.0419961 -0.926723, 0.207728 -0.0308526 -0.9777, + 0.762381 -6.83277e-006 -0.647128, 0.698418 0.0327082 -0.714943, 0.828328 0.0234668 -0.559751, + 0.614691 -3.48041e-006 -0.788768, 0.926465 0.0109977 -0.376221, 0.882921 -1.02777e-005 -0.469522, + 0.965657 -1.04095e-005 -0.259822, 0.985181 -0.00783443 -0.171339, 0.544231 -0.0393515 -0.838012, 0.698418 -0.032695 -0.714943, + 0.828329 -0.0234572 -0.559751, 0.926465 -0.010993 -0.376221, 1 -9.73947e-006 1.87876e-009, 0.985181 0.00783132 -0.171339, + 0.985181 -0.00783443 0.171339, 0.965657 -1.04095e-005 0.259822, 0.926465 0.0109977 0.376221, 0.882921 -1.02777e-005 0.469522, + 0.828328 0.0234668 0.559751, 0.926465 -0.010993 0.376221, 0.762381 -6.83277e-006 0.647128, 0.985181 0.00783131 0.171339, + 0.614691 -3.48041e-006 0.788768, 0.698418 0.0327082 0.714943, 0.544231 0.0393673 0.838011, 0.207727 0.030865 0.9777, + 0.305522 2.8861e-006 0.952185, 0.37339 0.0420131 0.926723, 0.451408 -1.67165e-006 0.892318, 0.18051 -0.0231434 0.983301, + 0.0329125 0 0.999458, 0.828329 -0.0234572 0.559751, 0.698418 -0.032695 0.714943, 0.544231 -0.0393515 0.838012, + 0.37339 -0.0419961 0.926723, 0.0983124 0 0.995156, -0.0983124 0 0.995156, -0.18051 0.0231527 0.983301, + -0.305522 2.8861e-006 0.952185, -0.373148 0.041703 0.926834, -0.451163 -1.95635e-006 0.892442, -0.544366 0.0369739 0.838033, + -0.373148 -0.0416862 0.926835, -0.207728 -0.0308526 0.9777, -0.926465 0.0109976 0.376221, -0.882921 -1.02777e-005 0.469522, + -0.828394 0.0231972 0.559665, -0.762514 -6.93413e-006 0.646972, -0.615057 -3.94538e-006 0.788483, + -0.698853 0.0312135 0.714584, -0.98517 -0.00780678 0.171401, -0.965649 -1.04044e-005 0.259849, -0.544366 -0.036959 0.838033, + -0.698853 -0.0312009 0.714585, -0.828394 -0.0231877 0.559665, -0.926465 -0.0109929 0.376221, -1 -9.73014e-006 -1.87877e-009, + -0.98517 0.00780368 0.171402, -0.965649 -1.04044e-005 -0.259849, -0.98517 -0.00780678 -0.171401, + -0.926465 0.0109976 -0.376221, -0.882921 -1.02777e-005 -0.469522, -0.828394 0.0231972 -0.559665, + -0.926465 -0.0109929 -0.376221, -0.98517 0.00780368 -0.171402, -0.762514 -6.93288e-006 -0.646972, + -0.698853 0.0312135 -0.714584, -0.615057 -3.946e-006 -0.788483, -0.544366 0.0369739 -0.838033, -0.207727 0.030865 -0.9777, + -0.305522 2.8861e-006 -0.952185, -0.373148 0.041703 -0.926834, -0.451163 -1.95698e-006 -0.892442, + -0.18051 -0.0231434 -0.983301, -0.0983124 0 -0.995156, -0.828395 -0.0231877 -0.559665, -0.698853 -0.0312009 -0.714585, + -0.544366 -0.036959 -0.838033, -0.373148 -0.0416862 -0.926835, 0.989357 -6.74062e-005 -0.145511, 0.942992 0 -0.332816, + 0.964583 -2.72297e-005 -0.263779, 0.843357 5.6839e-005 -0.537354, 0.987327 -6.74062e-005 -0.158701, + 0.937148 8.20552e-005 -0.348931, 0.834781 0 -0.550583, 0.63799 -1.47e-005 -0.770044, 0.699953 -0.000543714 -0.714189, + 0.503602 -0.000498263 -0.863936, 0.708161 0.000610206 -0.70605, 0.833403 0.000227291 -0.552666, 0.50997 0.000430535 -0.860192, + 0.423306 -2.88817e-005 -0.905987, 0.423118 0 -0.906075, 0.423495 -5.77633e-005 -0.905899, 1 -0.000136397 0, 1 -0.000102298 0, + 1 -6.81984e-005 0, 0.98859 -0.000150114 0.150628, 0.943947 -0.000117228 0.330098, 0.97049 -3.25138e-005 0.241141, + 0.840375 5.70513e-005 0.542006, 0.990336 2.04933e-006 0.138691, 0.949196 0.000190463 0.314686, 0.833403 0.000227291 0.552666, + 0.632887 -1.50759e-005 0.774244, 0.692523 6.96392e-005 0.721396, 0.55117 -3.73764e-005 0.834393, 0.684152 0 0.72934, + 0.83478 0 0.550583, 0.544991 -3.73764e-005 0.838442, 0.423306 -2.88817e-005 0.905987, 0.423495 -5.77633e-005 0.905899, + 0.423118 0 0.906075, -0.423118 0 0.906075, -0.990336 2.04933e-006 0.138691, -0.949196 0.000190463 0.314686, + -0.97049 -3.25138e-005 0.241141, -0.841721 8.27844e-005 0.539913, -0.98859 -0.000150114 0.150628, + -0.943947 -0.000117228 0.330098, -0.840217 0 0.542251, -0.634047 7.08971e-005 0.773295, -0.688993 0.000118233 0.724768, + -0.548119 7.39189e-005 0.8364, -0.692523 6.96392e-005 0.721396, -0.833403 0.000227291 0.552666, -0.554283 0 0.832328, + -1 -0.000136397 0, -1 -0.000102298 0, -1 -6.81984e-005 0, -0.987327 -6.74062e-005 -0.158701, -0.937148 8.20552e-005 -0.348931, + -0.964583 -2.72297e-005 -0.263779, -0.844686 8.39146e-005 -0.535263, -0.989357 -6.74062e-005 -0.145511, -0.942992 0 -0.332816, + -0.833403 0.000227291 -0.552666, -0.639018 7.1957e-005 -0.769192, -0.708161 0.000610206 -0.70605, + -0.512854 0.000462161 -0.858476, -0.704713 -0.000421627 -0.709492, -0.840217 0 -0.54225, -0.506498 -0.000392521 -0.862241, + -0.423118 0 -0.906075] + } + coordIndex [ + 5, 3, 6, -1,2, 6, 3, -1,3, 5, 4, -1,0, 7, 2, -1,6, 2, 7, -1,2, 1, 0, -1,30, 32, 31, -1, + 32, 30, 29, -1,33, 37, 36, -1,38, 33, 29, -1,33, 36, 34, -1,31, 894, 30, -1,35, 34, + 36, -1,852, 56, 55, -1,15, 851, 852, -1,843, 27, 844, -1,39, 38, 29, -1,37, 33, 38, -1, + 53, 15, 852, -1,15, 52, 16, -1,52, 15, 53, -1,16, 52, 17, -1,17, 52, 849, -1,18, + 17, 849, -1,15, 840, 851, -1,29, 28, 39, -1,851, 840, 850, -1,83, 82, 895, -1,895, + 81, 84, -1,81, 895, 82, -1,838, 8, 65, -1,858, 80, 84, -1,77, 79, 78, -1,84, 80, + 75, -1,77, 80, 79, -1,14, 61, 60, -1,61, 14, 13, -1,12, 11, 61, -1,13, 12, 61, -1, + 61, 10, 855, -1,77, 76, 80, -1,84, 75, 85, -1,854, 60, 59, -1,76, 75, 80, -1,61, + 11, 10, -1,854, 59, 58, -1,14, 60, 854, -1,85, 75, 74, -1,848, 19, 849, -1,40, 28, + 41, -1,42, 41, 27, -1,42, 27, 843, -1,28, 27, 41, -1,20, 50, 842, -1,20, 847, 50, -1, + 842, 49, 21, -1,21, 49, 48, -1,44, 22, 45, -1,44, 43, 22, -1,23, 27, 24, -1,49, 842, + 50, -1,24, 27, 26, -1,843, 22, 43, -1,843, 43, 42, -1,45, 22, 46, -1,46, 22, 47, -1, + 22, 21, 47, -1,25, 24, 26, -1,47, 21, 48, -1,839, 855, 10, -1,63, 838, 64, -1,856, + 62, 9, -1,62, 839, 9, -1,85, 73, 72, -1,73, 85, 857, -1,85, 72, 86, -1,71, 70, 90, -1, + 72, 71, 86, -1,838, 65, 64, -1,91, 67, 66, -1,91, 68, 67, -1,9, 838, 63, -1,8, 91, + 66, -1,66, 65, 8, -1,91, 90, 70, -1,91, 69, 68, -1,90, 86, 71, -1,86, 89, 87, -1, + 89, 86, 90, -1,87, 89, 88, -1,70, 69, 91, -1,855, 839, 62, -1,20, 841, 51, -1,841, + 848, 51, -1,23, 844, 27, -1,32, 29, 845, -1,33, 845, 29, -1,39, 28, 846, -1,28, 40, + 846, -1,20, 51, 847, -1,841, 19, 848, -1,19, 18, 849, -1,840, 14, 853, -1,54, 53, + 852, -1,54, 852, 55, -1,850, 840, 853, -1,854, 853, 14, -1,57, 854, 58, -1,63, 856, + 9, -1,85, 74, 857, -1,84, 81, 858, -1,97, 100, 98, -1,100, 99, 98, -1,102, 100, 97, -1, + 103, 97, 96, -1,96, 95, 94, -1,94, 896, 96, -1,100, 102, 101, -1,96, 896, 103, -1, + 897, 105, 104, -1,896, 104, 103, -1,897, 104, 896, -1,897, 93, 92, -1,897, 92, 105, -1, + 102, 97, 103, -1,624, 623, 113, -1,898, 623, 106, -1,623, 898, 899, -1,623, 899, + 900, -1,900, 113, 623, -1,624, 106, 623, -1,106, 624, 107, -1,108, 107, 624, -1,625, + 108, 624, -1,109, 108, 625, -1,625, 112, 111, -1,111, 110, 625, -1,109, 625, 110, -1, + 625, 624, 112, -1,113, 112, 624, -1,901, 626, 902, -1,114, 902, 626, -1,626, 901, + 903, -1,627, 626, 629, -1,626, 627, 114, -1,630, 629, 632, -1,629, 626, 903, -1,629, + 903, 859, -1,904, 632, 905, -1,632, 904, 633, -1,859, 632, 629, -1,627, 115, 114, -1, + 905, 632, 859, -1,628, 627, 630, -1,115, 627, 116, -1,116, 627, 628, -1,629, 630, + 627, -1,118, 117, 628, -1,116, 628, 117, -1,631, 628, 630, -1,118, 628, 631, -1,906, + 634, 907, -1,633, 907, 634, -1,904, 907, 633, -1,634, 119, 631, -1,118, 631, 119, -1, + 906, 120, 634, -1,119, 634, 120, -1,633, 634, 631, -1,631, 630, 633, -1,632, 633, + 630, -1,636, 123, 635, -1,635, 123, 908, -1,909, 635, 910, -1,908, 910, 635, -1,635, + 909, 636, -1,124, 123, 636, -1,125, 636, 637, -1,124, 636, 125, -1,121, 125, 637, -1, + 911, 636, 912, -1,911, 122, 637, -1,121, 637, 122, -1,911, 637, 636, -1,909, 912, + 636, -1,126, 913, 128, -1,128, 127, 126, -1,638, 131, 130, -1,639, 131, 638, -1,137, + 638, 129, -1,130, 129, 638, -1,638, 137, 639, -1,132, 131, 639, -1,133, 639, 640, -1, + 132, 639, 133, -1,134, 133, 640, -1,135, 639, 136, -1,135, 914, 640, -1,134, 640, + 914, -1,135, 640, 639, -1,137, 136, 639, -1,146, 144, 147, -1,146, 145, 144, -1,147, + 144, 915, -1,148, 147, 142, -1,150, 149, 148, -1,148, 151, 150, -1,143, 915, 144, -1, + 142, 151, 148, -1,141, 140, 916, -1,142, 141, 916, -1,151, 142, 916, -1,139, 138, + 916, -1,140, 139, 916, -1,142, 147, 915, -1,917, 918, 641, -1,641, 919, 157, -1,157, + 156, 641, -1,641, 156, 642, -1,641, 918, 919, -1,642, 917, 641, -1,158, 642, 643, -1, + 917, 642, 158, -1,159, 158, 643, -1,152, 159, 643, -1,154, 642, 155, -1,154, 153, + 643, -1,152, 643, 153, -1,154, 643, 642, -1,156, 155, 642, -1,920, 921, 922, -1,922, + 160, 920, -1,167, 166, 644, -1,162, 161, 644, -1,645, 644, 166, -1,162, 644, 645, -1, + 644, 161, 167, -1,166, 165, 645, -1,163, 645, 646, -1,646, 165, 923, -1,646, 923, + 164, -1,645, 163, 162, -1,164, 163, 646, -1,646, 645, 165, -1,924, 861, 925, -1,924, + 860, 861, -1,860, 924, 926, -1,648, 860, 926, -1,647, 863, 864, -1,865, 863, 927, -1, + 647, 864, 928, -1,863, 647, 929, -1,927, 863, 929, -1,649, 929, 647, -1,649, 928, + 648, -1,862, 860, 648, -1,647, 928, 649, -1,926, 930, 649, -1,862, 648, 928, -1,930, + 929, 649, -1,648, 926, 649, -1,865, 927, 931, -1,932, 870, 933, -1,870, 868, 933, -1, + 650, 934, 868, -1,650, 651, 934, -1,866, 935, 652, -1,936, 937, 651, -1,650, 938, + 651, -1,933, 868, 934, -1,650, 868, 869, -1,935, 936, 651, -1,652, 938, 867, -1,652, + 651, 938, -1,652, 935, 651, -1,867, 866, 652, -1,937, 934, 651, -1,869, 938, 650, -1, + 935, 866, 939, -1,170, 653, 171, -1,940, 941, 653, -1,170, 654, 653, -1,169, 654, + 170, -1,653, 941, 171, -1,654, 655, 942, -1,654, 169, 655, -1,655, 168, 943, -1,169, + 168, 655, -1,940, 654, 942, -1,655, 943, 942, -1,654, 940, 653, -1,656, 944, 945, -1, + 659, 945, 946, -1,659, 662, 660, -1,944, 656, 947, -1,659, 657, 656, -1,945, 659, + 656, -1,662, 659, 946, -1,871, 662, 946, -1,948, 662, 871, -1,949, 663, 950, -1,950, + 663, 662, -1,948, 950, 662, -1,657, 947, 656, -1,951, 657, 658, -1,947, 657, 951, -1, + 952, 951, 658, -1,953, 954, 658, -1,952, 658, 954, -1,955, 953, 658, -1,661, 658, + 657, -1,956, 664, 663, -1,660, 663, 661, -1,949, 956, 663, -1,662, 663, 660, -1,664, + 955, 661, -1,657, 660, 661, -1,956, 957, 664, -1,955, 664, 957, -1,663, 664, 661, -1, + 661, 955, 658, -1,659, 660, 657, -1,179, 958, 182, -1,177, 176, 178, -1,178, 184, + 179, -1,182, 180, 179, -1,181, 180, 182, -1,183, 182, 958, -1,178, 176, 175, -1,185, + 175, 174, -1,173, 172, 174, -1,186, 174, 172, -1,958, 179, 184, -1,186, 185, 174, -1, + 184, 175, 185, -1,184, 178, 175, -1,666, 665, 194, -1,959, 665, 187, -1,665, 959, + 960, -1,665, 960, 195, -1,195, 194, 665, -1,666, 187, 665, -1,187, 666, 188, -1,189, + 188, 666, -1,667, 189, 666, -1,190, 189, 667, -1,667, 193, 192, -1,192, 191, 667, -1, + 190, 667, 191, -1,667, 666, 193, -1,194, 193, 666, -1,961, 668, 962, -1,200, 962, + 668, -1,668, 961, 963, -1,669, 668, 671, -1,668, 669, 200, -1,672, 671, 674, -1,671, + 668, 963, -1,671, 963, 872, -1,964, 674, 965, -1,674, 964, 675, -1,872, 674, 671, -1, + 669, 201, 200, -1,965, 674, 872, -1,670, 669, 672, -1,201, 669, 202, -1,202, 669, + 670, -1,671, 672, 669, -1,197, 196, 670, -1,202, 670, 196, -1,673, 670, 672, -1,197, + 670, 198, -1,966, 676, 967, -1,675, 967, 676, -1,964, 967, 675, -1,676, 198, 673, -1, + 670, 673, 198, -1,966, 199, 676, -1,198, 676, 199, -1,675, 676, 673, -1,673, 672, + 675, -1,674, 675, 672, -1,968, 969, 677, -1,204, 203, 677, -1,678, 677, 969, -1,204, + 677, 678, -1,677, 203, 968, -1,969, 970, 678, -1,205, 678, 679, -1,679, 970, 971, -1, + 679, 971, 206, -1,678, 205, 204, -1,206, 205, 679, -1,679, 678, 970, -1,208, 209, + 972, -1,209, 208, 207, -1,681, 973, 680, -1,680, 973, 974, -1,975, 680, 976, -1,974, + 976, 680, -1,680, 975, 681, -1,977, 973, 681, -1,978, 681, 682, -1,977, 681, 978, -1, + 979, 978, 682, -1,980, 681, 981, -1,980, 982, 682, -1,979, 682, 982, -1,980, 682, + 681, -1,975, 981, 681, -1,683, 212, 211, -1,684, 212, 683, -1,983, 683, 210, -1,211, + 210, 683, -1,683, 983, 684, -1,213, 212, 684, -1,214, 684, 685, -1,213, 684, 214, -1, + 215, 214, 685, -1,984, 684, 985, -1,984, 986, 685, -1,215, 685, 986, -1,984, 685, + 684, -1,983, 985, 684, -1,221, 987, 224, -1,225, 227, 226, -1,224, 220, 225, -1,224, + 223, 221, -1,221, 223, 222, -1,987, 221, 988, -1,228, 227, 225, -1,229, 228, 220, -1, + 229, 217, 216, -1,217, 229, 218, -1,220, 224, 987, -1,229, 219, 218, -1,219, 229, + 220, -1,228, 225, 220, -1,237, 236, 686, -1,686, 989, 235, -1,235, 234, 686, -1,686, + 234, 687, -1,686, 236, 989, -1,687, 237, 686, -1,238, 687, 688, -1,237, 687, 238, -1, + 239, 238, 688, -1,230, 239, 688, -1,232, 687, 233, -1,232, 231, 688, -1,230, 688, + 231, -1,232, 688, 687, -1,234, 233, 687, -1,990, 991, 992, -1,991, 990, 993, -1,243, + 242, 689, -1,244, 994, 689, -1,690, 689, 242, -1,244, 689, 690, -1,689, 994, 243, -1, + 242, 241, 690, -1,245, 690, 691, -1,691, 241, 240, -1,691, 240, 246, -1,690, 245, + 244, -1,246, 245, 691, -1,691, 690, 241, -1,248, 877, 995, -1,877, 875, 995, -1,692, + 996, 875, -1,692, 693, 996, -1,873, 997, 694, -1,998, 999, 693, -1,692, 247, 693, -1, + 995, 875, 996, -1,692, 875, 876, -1,997, 998, 693, -1,694, 247, 874, -1,694, 693, + 247, -1,694, 997, 693, -1,874, 873, 694, -1,999, 996, 693, -1,876, 247, 692, -1,997, + 873, 1000, -1,263, 262, 265, -1,265, 264, 263, -1,262, 880, 265, -1,267, 266, 262, -1, + 1001, 268, 267, -1,267, 261, 1001, -1,262, 261, 267, -1,254, 253, 255, -1,256, 253, + 252, -1,253, 256, 255, -1,879, 256, 252, -1,251, 256, 879, -1,251, 1002, 1003, -1, + 251, 1003, 257, -1,256, 251, 257, -1,1004, 878, 695, -1,1000, 695, 878, -1,1005, + 261, 1006, -1,261, 1007, 1006, -1,1005, 1001, 261, -1,1000, 260, 695, -1,1007, 261, + 1008, -1,1008, 261, 1000, -1,261, 260, 1000, -1,695, 260, 1009, -1,1010, 250, 257, -1, + 257, 1011, 1010, -1,257, 1003, 1011, -1,250, 249, 257, -1,1004, 695, 258, -1,258, + 257, 1004, -1,258, 695, 259, -1,262, 266, 880, -1,1004, 257, 249, -1,695, 1009, 259, -1, + 1012, 882, 1013, -1,1012, 881, 882, -1,881, 1012, 1014, -1,697, 881, 1014, -1,696, + 884, 885, -1,886, 884, 1015, -1,696, 885, 1016, -1,884, 696, 1017, -1,1015, 884, + 1017, -1,698, 1017, 696, -1,698, 1016, 697, -1,883, 881, 697, -1,696, 1016, 698, -1, + 1014, 1018, 698, -1,883, 697, 1016, -1,1018, 1017, 698, -1,697, 1014, 698, -1,886, + 1015, 1019, -1,1020, 699, 1021, -1,269, 699, 270, -1,700, 270, 699, -1,699, 269, + 1021, -1,699, 1020, 700, -1,701, 700, 1022, -1,1022, 700, 1020, -1,701, 1022, 1023, -1, + 271, 701, 1024, -1,701, 271, 700, -1,1024, 701, 1023, -1,700, 271, 270, -1,1025, + 273, 272, -1,273, 1025, 274, -1,1026, 702, 1027, -1,702, 1026, 279, -1,1027, 703, + 1028, -1,703, 1027, 702, -1,703, 702, 278, -1,702, 279, 278, -1,277, 704, 703, -1, + 704, 276, 275, -1,276, 704, 277, -1,704, 1028, 703, -1,1028, 704, 275, -1,703, 278, + 277, -1,280, 1029, 1030, -1,1030, 1031, 280, -1,283, 281, 1032, -1,281, 283, 282, -1, + 1033, 288, 705, -1,705, 1034, 1033, -1,706, 1034, 705, -1,288, 287, 705, -1,705, + 287, 706, -1,706, 286, 707, -1,286, 706, 287, -1,707, 285, 284, -1,285, 707, 286, -1, + 706, 707, 1035, -1,284, 1035, 707, -1,706, 1035, 1034, -1,1036, 289, 1037, -1,1037, + 1038, 1036, -1,292, 291, 708, -1,1039, 708, 1040, -1,709, 1040, 708, -1,708, 1039, + 292, -1,708, 291, 709, -1,710, 709, 290, -1,290, 709, 291, -1,710, 290, 1041, -1, + 1042, 710, 1043, -1,710, 1042, 709, -1,1043, 710, 1041, -1,709, 1042, 1040, -1,1044, + 1045, 311, -1,1046, 1047, 311, -1,1044, 311, 1047, -1,314, 313, 887, -1,312, 311, + 1045, -1,312, 1045, 887, -1,1046, 311, 310, -1,1048, 1049, 1050, -1,1051, 1052, 1050, -1, + 1048, 1050, 1052, -1,310, 309, 308, -1,1050, 308, 1053, -1,308, 1050, 310, -1,310, + 1050, 1049, -1,1046, 310, 1049, -1,887, 313, 312, -1,301, 296, 302, -1,296, 301, + 300, -1,302, 296, 295, -1,299, 298, 297, -1,300, 297, 296, -1,297, 300, 299, -1,1054, + 1053, 305, -1,305, 1053, 306, -1,305, 304, 1054, -1,306, 1053, 307, -1,303, 295, + 294, -1,295, 303, 302, -1,303, 293, 1054, -1,293, 303, 294, -1,303, 1054, 304, -1, + 307, 1053, 308, -1,711, 1055, 712, -1,1055, 711, 1054, -1,711, 712, 317, -1,1054, + 711, 1056, -1,317, 1056, 711, -1,712, 318, 317, -1,713, 1057, 316, -1,712, 713, 318, -1, + 712, 1055, 1057, -1,713, 315, 318, -1,315, 713, 316, -1,1057, 713, 712, -1,1058, + 1059, 714, -1,1060, 1058, 714, -1,1058, 1060, 1061, -1,714, 1059, 715, -1,1059, 336, + 715, -1,716, 335, 334, -1,335, 715, 336, -1,717, 716, 334, -1,1060, 714, 319, -1, + 715, 716, 320, -1,716, 715, 335, -1,321, 320, 716, -1,321, 716, 717, -1,715, 320, + 319, -1,319, 714, 715, -1,717, 334, 333, -1,718, 332, 331, -1,717, 718, 323, -1,718, + 717, 332, -1,332, 717, 333, -1,719, 331, 329, -1,329, 331, 330, -1,329, 328, 719, -1, + 719, 718, 331, -1,720, 328, 327, -1,717, 323, 322, -1,718, 719, 324, -1,323, 718, + 324, -1,719, 325, 324, -1,325, 720, 326, -1,720, 325, 719, -1,326, 720, 327, -1,719, + 328, 720, -1,717, 322, 321, -1,352, 351, 722, -1,723, 350, 724, -1,351, 350, 723, -1, + 353, 352, 721, -1,353, 355, 354, -1,355, 353, 721, -1,356, 355, 721, -1,721, 722, + 356, -1,722, 723, 337, -1,723, 722, 351, -1,338, 337, 723, -1,338, 723, 724, -1,722, + 337, 356, -1,721, 352, 722, -1,724, 350, 349, -1,348, 347, 725, -1,724, 725, 340, -1, + 725, 724, 348, -1,725, 347, 726, -1,348, 724, 349, -1,726, 347, 346, -1,727, 346, + 345, -1,724, 340, 339, -1,725, 726, 341, -1,340, 725, 341, -1,726, 342, 341, -1,727, + 344, 343, -1,344, 727, 345, -1,342, 726, 343, -1,343, 726, 727, -1,726, 346, 727, -1, + 724, 339, 338, -1,1062, 1063, 1064, -1,1063, 1065, 1066, -1,1067, 1063, 1068, -1, + 1064, 1069, 1062, -1,1067, 358, 357, -1,1067, 359, 358, -1,1068, 359, 1067, -1,1063, + 1070, 1068, -1,1063, 1066, 1070, -1,1069, 1071, 1072, -1,1073, 1074, 1075, -1,1075, + 1065, 1063, -1,1063, 1062, 1075, -1,1062, 1069, 1076, -1,1073, 1077, 1078, -1,1075, + 1079, 1080, -1,1080, 1065, 1075, -1,1073, 1081, 1074, -1,1074, 1079, 1075, -1,1073, + 1078, 1081, -1,1076, 1069, 1072, -1,1082, 1083, 728, -1,360, 728, 729, -1,1082, 728, + 1084, -1,360, 1084, 728, -1,728, 1083, 729, -1,1085, 1086, 730, -1,729, 361, 360, -1, + 361, 729, 730, -1,730, 1087, 361, -1,1087, 730, 1086, -1,729, 1085, 730, -1,1085, + 729, 1083, -1,1088, 1089, 1090, -1,1091, 1092, 1090, -1,1088, 1090, 1092, -1,367, + 1090, 368, -1,367, 365, 1091, -1,366, 365, 367, -1,367, 1091, 1090, -1,1093, 1091, + 365, -1,1094, 1093, 364, -1,1095, 1096, 364, -1,1094, 364, 1096, -1,363, 888, 1095, -1, + 364, 363, 1095, -1,362, 888, 363, -1,1093, 365, 364, -1,370, 1097, 371, -1,1097, + 370, 369, -1,1097, 1098, 371, -1,369, 368, 1090, -1,372, 1098, 1099, -1,372, 1099, + 1100, -1,1098, 372, 371, -1,1087, 372, 1100, -1,374, 373, 1101, -1,1087, 373, 372, -1, + 375, 1101, 1102, -1,1101, 375, 374, -1,376, 1102, 377, -1,1102, 376, 375, -1,1087, + 1101, 373, -1,369, 1090, 1097, -1,1103, 888, 362, -1,1104, 378, 1105, -1,1104, 379, + 378, -1,1104, 889, 379, -1,889, 1104, 1106, -1,1107, 1108, 1109, -1,380, 1109, 1108, -1, + 380, 1108, 1110, -1,1111, 382, 381, -1,383, 1111, 1112, -1,382, 1111, 383, -1,384, + 383, 731, -1,892, 731, 1112, -1,731, 383, 1112, -1,731, 892, 384, -1,1113, 732, 1114, -1, + 732, 892, 1114, -1,732, 1113, 733, -1,384, 892, 732, -1,385, 384, 732, -1,387, 890, + 388, -1,733, 386, 385, -1,890, 1115, 388, -1,1115, 389, 388, -1,734, 387, 386, -1, + 733, 1116, 386, -1,1116, 734, 386, -1,1117, 734, 1116, -1,1113, 1116, 733, -1,387, + 1117, 891, -1,387, 734, 1117, -1,890, 387, 891, -1,732, 733, 385, -1,395, 1118, 1119, -1, + 1119, 396, 395, -1,397, 396, 1120, -1,394, 393, 1121, -1,1122, 1121, 392, -1,392, + 1121, 393, -1,396, 1119, 1120, -1,1123, 1124, 397, -1,1124, 390, 397, -1,1125, 390, + 1124, -1,391, 1122, 392, -1,1122, 391, 1126, -1,1127, 1126, 391, -1,1127, 390, 1125, -1, + 1127, 391, 390, -1,397, 1120, 1123, -1,402, 1128, 1129, -1,1130, 403, 1129, -1,403, + 1130, 404, -1,402, 1129, 403, -1,1131, 1132, 402, -1,1133, 1134, 401, -1,402, 1134, + 1131, -1,402, 401, 1134, -1,1132, 1128, 402, -1,404, 1135, 405, -1,406, 405, 1135, -1, + 400, 1136, 1133, -1,1136, 399, 398, -1,399, 1136, 400, -1,400, 1133, 401, -1,404, + 1130, 1135, -1,408, 407, 1137, -1,736, 409, 735, -1,408, 735, 409, -1,410, 409, 736, -1, + 1138, 736, 735, -1,735, 408, 1137, -1,737, 410, 736, -1,411, 410, 737, -1,413, 412, + 739, -1,414, 413, 740, -1,412, 411, 738, -1,414, 1139, 741, -1,1138, 1140, 736, -1, + 735, 1137, 1138, -1,1141, 737, 1140, -1,407, 1142, 1137, -1,1141, 738, 737, -1,736, + 1140, 737, -1,738, 1143, 412, -1,739, 412, 1143, -1,740, 413, 1144, -1,739, 1144, + 413, -1,739, 1143, 1144, -1,740, 1144, 1139, -1,1139, 414, 740, -1,1141, 1143, 738, -1, + 738, 411, 737, -1,741, 415, 414, -1,742, 417, 416, -1,743, 418, 417, -1,742, 416, + 1145, -1,741, 1145, 416, -1,742, 1146, 417, -1,743, 417, 1146, -1,1147, 418, 743, -1, + 415, 741, 416, -1,745, 419, 744, -1,420, 419, 745, -1,421, 747, 422, -1,746, 421, + 420, -1,423, 422, 1148, -1,418, 744, 419, -1,744, 418, 1147, -1,1149, 1145, 741, -1, + 745, 744, 1150, -1,1145, 1146, 742, -1,1147, 743, 1146, -1,1150, 744, 1147, -1,1150, + 1151, 745, -1,747, 746, 1152, -1,421, 746, 747, -1,424, 423, 1148, -1,1148, 422, + 747, -1,1151, 1152, 746, -1,1148, 747, 1152, -1,745, 1151, 746, -1,746, 420, 745, -1, + 1139, 1149, 741, -1,425, 1153, 1154, -1,749, 426, 748, -1,425, 748, 426, -1,427, + 426, 749, -1,1155, 749, 748, -1,748, 425, 1154, -1,750, 427, 749, -1,428, 427, 750, -1, + 430, 429, 752, -1,431, 430, 753, -1,429, 428, 751, -1,431, 1156, 754, -1,1157, 1154, + 1153, -1,749, 1158, 750, -1,1154, 1155, 748, -1,1158, 749, 1155, -1,750, 1158, 1159, -1, + 1159, 751, 750, -1,751, 1160, 429, -1,752, 429, 1160, -1,753, 430, 1161, -1,752, + 1161, 430, -1,752, 1160, 1161, -1,753, 1161, 1156, -1,1156, 431, 753, -1,1159, 1160, + 751, -1,751, 428, 750, -1,754, 432, 431, -1,755, 434, 433, -1,756, 435, 434, -1,755, + 433, 1162, -1,754, 1162, 433, -1,755, 1163, 434, -1,756, 434, 1163, -1,1164, 435, + 756, -1,432, 754, 433, -1,758, 436, 757, -1,437, 436, 758, -1,438, 760, 439, -1,759, + 438, 437, -1,440, 439, 1165, -1,435, 757, 436, -1,757, 435, 1164, -1,1166, 1162, + 754, -1,758, 757, 1167, -1,1162, 1163, 755, -1,1164, 756, 1163, -1,1167, 757, 1164, -1, + 1167, 1168, 758, -1,760, 759, 1169, -1,438, 759, 760, -1,1170, 440, 1165, -1,1165, + 439, 760, -1,1168, 1169, 759, -1,1165, 760, 1169, -1,758, 1168, 759, -1,759, 437, + 758, -1,1156, 1166, 754, -1,1171, 1172, 1173, -1,1173, 1174, 1175, -1,1176, 1173, + 1172, -1,1177, 1172, 1178, -1,1179, 1178, 1172, -1,1180, 1179, 1172, -1,1172, 1181, + 1176, -1,1182, 1174, 1183, -1,1176, 1184, 1183, -1,1174, 1173, 1183, -1,1185, 1176, + 1186, -1,1187, 1186, 1176, -1,1173, 1176, 1183, -1,1176, 1188, 1187, -1,1181, 1172, + 1177, -1,1189, 1190, 1181, -1,1191, 1181, 1190, -1,1181, 1192, 1176, -1,1181, 1193, + 1194, -1,1195, 1196, 1193, -1,1193, 1181, 1197, -1,1196, 1194, 1193, -1,1192, 1198, + 1199, -1,1192, 1199, 1200, -1,1192, 1200, 1188, -1,1188, 1176, 1192, -1,1201, 1192, + 1194, -1,1181, 1194, 1192, -1,1196, 1202, 1194, -1,1181, 1177, 1189, -1,1203, 441, + 1204, -1,1205, 441, 1206, -1,1203, 1207, 1206, -1,441, 1203, 1206, -1,1208, 459, + 457, -1,455, 1209, 1208, -1,457, 459, 458, -1,457, 456, 1208, -1,454, 453, 1209, -1, + 455, 454, 1209, -1,456, 455, 1208, -1,1209, 453, 1210, -1,452, 460, 1211, -1,462, + 461, 460, -1,1210, 453, 1211, -1,452, 451, 462, -1,451, 1212, 462, -1,1212, 451, + 450, -1,1212, 450, 449, -1,452, 462, 460, -1,453, 452, 1211, -1,443, 442, 470, -1, + 445, 444, 469, -1,443, 469, 444, -1,470, 469, 443, -1,467, 466, 445, -1,468, 467, + 445, -1,469, 468, 445, -1,445, 466, 446, -1,448, 447, 1213, -1,449, 1213, 1212, -1, + 1213, 449, 448, -1,447, 465, 1213, -1,465, 464, 1213, -1,466, 465, 447, -1,463, 1214, + 1213, -1,463, 1213, 464, -1,446, 466, 447, -1,1215, 487, 486, -1,761, 485, 762, -1, + 485, 761, 486, -1,762, 485, 484, -1,761, 762, 1216, -1,1215, 486, 761, -1,762, 484, + 763, -1,763, 484, 483, -1,765, 482, 481, -1,766, 481, 480, -1,764, 483, 482, -1,767, + 766, 480, -1,487, 1215, 1217, -1,763, 1218, 762, -1,761, 1216, 1215, -1,1218, 1216, + 762, -1,1218, 763, 1219, -1,763, 764, 1219, -1,764, 765, 1220, -1,765, 764, 482, -1, + 766, 765, 481, -1,765, 766, 1221, -1,765, 1221, 1220, -1,1221, 766, 1222, -1,1222, + 766, 767, -1,764, 1220, 1219, -1,763, 483, 764, -1,767, 480, 479, -1,478, 477, 768, -1, + 477, 476, 769, -1,767, 768, 1223, -1,768, 767, 478, -1,769, 768, 477, -1,768, 769, + 1224, -1,476, 770, 769, -1,478, 767, 479, -1,770, 475, 771, -1,771, 475, 474, -1, + 472, 773, 473, -1,474, 473, 772, -1,1225, 472, 471, -1,475, 770, 476, -1,769, 770, + 1226, -1,770, 1227, 1226, -1,1226, 1224, 769, -1,1227, 771, 1228, -1,1223, 1229, + 767, -1,768, 1224, 1223, -1,1227, 770, 771, -1,1230, 772, 773, -1,773, 772, 473, -1, + 1225, 471, 1231, -1,773, 472, 1225, -1,1230, 1228, 772, -1,1225, 1230, 773, -1,772, + 1228, 771, -1,771, 474, 772, -1,767, 1229, 1222, -1,489, 520, 519, -1,774, 518, 775, -1, + 518, 774, 519, -1,775, 518, 517, -1,774, 775, 490, -1,489, 519, 774, -1,775, 517, + 776, -1,776, 517, 516, -1,778, 515, 514, -1,779, 514, 513, -1,777, 516, 515, -1,780, + 779, 513, -1,520, 489, 488, -1,776, 491, 775, -1,774, 490, 489, -1,491, 490, 775, -1, + 491, 776, 492, -1,776, 777, 492, -1,777, 778, 493, -1,778, 777, 515, -1,779, 778, + 514, -1,778, 779, 494, -1,778, 494, 493, -1,494, 779, 495, -1,495, 779, 780, -1,777, + 493, 492, -1,776, 516, 777, -1,780, 513, 512, -1,511, 510, 781, -1,510, 509, 782, -1, + 780, 781, 497, -1,781, 780, 511, -1,782, 781, 510, -1,781, 782, 498, -1,509, 783, + 782, -1,511, 780, 512, -1,783, 508, 784, -1,784, 508, 507, -1,505, 786, 506, -1,507, + 506, 785, -1,503, 505, 1232, -1,508, 783, 509, -1,782, 783, 499, -1,783, 500, 499, -1, + 499, 498, 782, -1,500, 784, 501, -1,497, 496, 780, -1,781, 498, 497, -1,500, 783, + 784, -1,502, 785, 786, -1,786, 785, 506, -1,503, 1232, 504, -1,786, 505, 503, -1, + 502, 501, 785, -1,503, 502, 786, -1,785, 501, 784, -1,784, 507, 785, -1,780, 496, + 495, -1,529, 1233, 530, -1,1234, 531, 530, -1,530, 1233, 1234, -1,1235, 1236, 1233, -1, + 1234, 1237, 531, -1,1238, 1235, 1239, -1,1236, 1234, 1233, -1,1235, 1233, 1239, -1, + 531, 1237, 1240, -1,1241, 1242, 1243, -1,1244, 1245, 1242, -1,1243, 1240, 1246, -1, + 1246, 1241, 1243, -1,1244, 1247, 1245, -1,1248, 1244, 1242, -1,1241, 1248, 1242, -1, + 1240, 1237, 1246, -1,1249, 1239, 1250, -1,1239, 1249, 1238, -1,1250, 524, 1251, -1, + 1250, 1239, 1252, -1,528, 527, 1252, -1,1252, 526, 525, -1,526, 1252, 527, -1,524, + 1250, 1252, -1,1252, 525, 524, -1,1253, 1254, 521, -1,1255, 1256, 1257, -1,1253, + 521, 1256, -1,524, 523, 1254, -1,521, 1257, 1256, -1,522, 521, 1254, -1,523, 522, + 1254, -1,1254, 1251, 524, -1,1257, 532, 534, -1,532, 1257, 533, -1,1258, 1259, 787, -1, + 787, 1260, 1258, -1,788, 1260, 787, -1,1259, 1261, 787, -1,787, 1261, 788, -1,788, + 1262, 789, -1,1262, 788, 1261, -1,789, 536, 535, -1,536, 789, 1262, -1,788, 789, + 1263, -1,535, 1263, 789, -1,788, 1263, 1260, -1,1264, 537, 1265, -1,1265, 1266, 1264, -1, + 1267, 1268, 790, -1,1269, 790, 1270, -1,791, 1270, 790, -1,790, 1269, 1267, -1,790, + 1268, 791, -1,792, 791, 1271, -1,1271, 791, 1268, -1,792, 1271, 1272, -1,1273, 792, + 1274, -1,792, 1273, 791, -1,1274, 792, 1272, -1,791, 1273, 1270, -1,1275, 1276, 539, -1, + 539, 538, 1275, -1,540, 793, 1277, -1,793, 540, 1278, -1,1277, 794, 1279, -1,794, + 1277, 793, -1,794, 793, 1280, -1,793, 1278, 1280, -1,1281, 795, 794, -1,795, 1282, + 1283, -1,1282, 795, 1281, -1,795, 1279, 794, -1,1279, 795, 1283, -1,794, 1280, 1281, -1, + 542, 1284, 1285, -1,1284, 542, 541, -1,1286, 796, 1287, -1,1288, 796, 1289, -1,797, + 1289, 796, -1,796, 1288, 1287, -1,796, 1286, 797, -1,798, 797, 1290, -1,1290, 797, + 1286, -1,798, 1290, 1291, -1,1292, 798, 1293, -1,798, 1292, 797, -1,1293, 798, 1291, -1, + 797, 1292, 1289, -1,799, 1294, 800, -1,1294, 799, 1295, -1,799, 800, 543, -1,1295, + 799, 1296, -1,543, 1296, 799, -1,800, 544, 543, -1,801, 1297, 1298, -1,800, 801, + 544, -1,800, 1294, 1297, -1,801, 1299, 544, -1,1299, 801, 1298, -1,1297, 801, 800, -1, + 1300, 1301, 1302, -1,1301, 1303, 1304, -1,545, 1301, 1305, -1,1302, 1306, 1300, -1, + 545, 547, 546, -1,545, 548, 547, -1,1305, 548, 545, -1,1301, 1307, 1305, -1,1301, + 1304, 1307, -1,1306, 1308, 1309, -1,1310, 1311, 1312, -1,1312, 1303, 1301, -1,1301, + 1300, 1312, -1,1300, 1306, 1313, -1,1310, 1314, 1315, -1,1312, 1316, 1317, -1,1317, + 1303, 1312, -1,1310, 1299, 1311, -1,1311, 1316, 1312, -1,1310, 1315, 1299, -1,1313, + 1306, 1309, -1,1318, 1319, 802, -1,1320, 802, 803, -1,1318, 802, 1321, -1,1320, 1321, + 802, -1,802, 1319, 803, -1,1322, 1323, 804, -1,803, 1324, 1320, -1,1324, 803, 804, -1, + 804, 1325, 1324, -1,1325, 804, 1323, -1,803, 1322, 804, -1,1322, 803, 1319, -1,1326, + 1327, 1328, -1,1326, 1329, 1327, -1,1330, 1331, 1328, -1,1332, 1333, 1330, -1,1333, + 1334, 1330, -1,1328, 1327, 1330, -1,1335, 1336, 1330, -1,1337, 1327, 1338, -1,1327, + 1337, 1339, -1,1339, 1335, 1327, -1,1335, 1339, 1340, -1,1335, 1341, 1342, -1,1327, + 1335, 1330, -1,1342, 1343, 1335, -1,1333, 1332, 1344, -1,1336, 1345, 1332, -1,1335, + 1343, 1336, -1,1346, 1336, 1347, -1,1348, 1349, 1347, -1,1349, 1348, 1350, -1,1336, + 1348, 1347, -1,1348, 1336, 1343, -1,1351, 1352, 1343, -1,1351, 1342, 1353, -1,1342, + 1351, 1343, -1,1348, 1354, 1355, -1,1354, 1343, 1356, -1,1343, 1354, 1348, -1,1348, + 1355, 1357, -1,1332, 1330, 1336, -1,805, 1358, 1359, -1,808, 1359, 1360, -1,808, + 811, 809, -1,1358, 805, 1361, -1,808, 806, 805, -1,1359, 808, 805, -1,811, 808, 1360, -1, + 893, 811, 1360, -1,1362, 811, 893, -1,1363, 812, 1364, -1,1364, 812, 811, -1,1362, + 1364, 811, -1,806, 1361, 805, -1,1365, 806, 807, -1,1361, 806, 1365, -1,1366, 1365, + 807, -1,1367, 1368, 807, -1,1366, 807, 1368, -1,1369, 1367, 807, -1,810, 807, 806, -1, + 1370, 813, 812, -1,809, 812, 810, -1,1363, 1370, 812, -1,811, 812, 809, -1,813, 1369, + 810, -1,806, 809, 810, -1,1370, 1371, 813, -1,1369, 813, 1371, -1,812, 813, 810, -1, + 810, 1369, 807, -1,808, 809, 806, -1,551, 550, 1372, -1,1372, 549, 1373, -1,549, + 1372, 550, -1,1374, 552, 1375, -1,1376, 552, 1374, -1,554, 553, 1376, -1,552, 1376, + 553, -1,1377, 1378, 1379, -1,1379, 1380, 1381, -1,1380, 1379, 1378, -1,1382, 1381, + 1383, -1,1383, 556, 555, -1,1382, 1383, 555, -1,1384, 563, 564, -1,1385, 564, 563, -1, + 561, 1385, 562, -1,563, 562, 1385, -1,1385, 1386, 564, -1,557, 1386, 560, -1,1385, + 560, 1386, -1,1387, 1386, 557, -1,558, 557, 560, -1,559, 558, 560, -1,814, 569, 815, -1, + 570, 569, 814, -1,1388, 814, 1389, -1,814, 1388, 570, -1,815, 1389, 814, -1,815, + 569, 568, -1,816, 815, 567, -1,567, 815, 568, -1,816, 567, 566, -1,1390, 815, 1391, -1, + 816, 565, 1391, -1,565, 816, 566, -1,815, 816, 1391, -1,815, 1390, 1389, -1,572, + 571, 1392, -1,1392, 1393, 573, -1,1392, 573, 572, -1,817, 578, 818, -1,579, 578, + 817, -1,1394, 817, 1395, -1,817, 1394, 579, -1,818, 1395, 817, -1,818, 578, 577, -1, + 819, 818, 576, -1,576, 818, 577, -1,819, 576, 575, -1,1396, 818, 1397, -1,819, 574, + 1397, -1,574, 819, 575, -1,818, 819, 1397, -1,818, 1396, 1395, -1,581, 580, 1398, -1, + 1398, 582, 581, -1,588, 587, 820, -1,821, 1399, 820, -1,588, 820, 1400, -1,820, 1399, + 1400, -1,1401, 1399, 821, -1,820, 587, 821, -1,585, 584, 822, -1,586, 585, 821, -1, + 821, 1402, 1401, -1,1402, 821, 822, -1,822, 583, 1402, -1,583, 822, 584, -1,821, + 585, 822, -1,586, 821, 587, -1,589, 1403, 1404, -1,1404, 1405, 1406, -1,1404, 1406, + 589, -1,593, 592, 823, -1,824, 1407, 823, -1,593, 823, 1408, -1,823, 1407, 1408, -1, + 1409, 1407, 824, -1,823, 592, 824, -1,590, 1410, 825, -1,591, 590, 824, -1,824, 1411, + 1409, -1,1411, 824, 825, -1,825, 1412, 1411, -1,1412, 825, 1410, -1,824, 590, 825, -1, + 591, 824, 592, -1,1413, 1414, 1415, -1,1416, 1417, 1418, -1,1416, 1418, 1415, -1, + 1413, 1419, 1414, -1,1420, 1421, 1422, -1,1423, 1420, 1424, -1,1420, 1423, 1421, -1, + 1425, 1421, 1419, -1,1426, 1415, 1418, -1,1426, 1427, 1428, -1,1413, 1415, 1429, -1, + 1429, 1426, 1428, -1,1413, 1425, 1419, -1,1430, 1422, 1431, -1,1422, 1432, 1431, -1, + 1422, 1421, 1432, -1,1425, 1432, 1421, -1,1426, 1429, 1415, -1,826, 598, 827, -1, + 599, 598, 826, -1,1433, 826, 1434, -1,826, 1433, 599, -1,827, 1434, 826, -1,827, + 598, 597, -1,828, 827, 596, -1,596, 827, 597, -1,828, 596, 595, -1,1435, 827, 1436, -1, + 828, 594, 1436, -1,594, 828, 595, -1,827, 828, 1436, -1,827, 1435, 1434, -1,600, + 1437, 1438, -1,1438, 1439, 1440, -1,1438, 1440, 600, -1,829, 605, 830, -1,606, 605, + 829, -1,1441, 829, 1442, -1,829, 1441, 606, -1,830, 1442, 829, -1,830, 605, 604, -1, + 831, 830, 603, -1,603, 830, 604, -1,831, 603, 602, -1,1443, 830, 1444, -1,831, 601, + 1444, -1,601, 831, 602, -1,830, 831, 1444, -1,830, 1443, 1442, -1,608, 607, 1445, -1, + 1445, 609, 608, -1,615, 614, 832, -1,833, 1446, 832, -1,615, 832, 1447, -1,832, 1446, + 1447, -1,1448, 1446, 833, -1,832, 614, 833, -1,612, 611, 834, -1,613, 612, 833, -1, + 833, 1449, 1448, -1,1449, 833, 834, -1,834, 610, 1449, -1,610, 834, 611, -1,833, + 612, 834, -1,613, 833, 614, -1,617, 616, 1450, -1,1450, 1451, 618, -1,1450, 618, + 617, -1,622, 621, 835, -1,836, 1452, 835, -1,622, 835, 1453, -1,835, 1452, 1453, -1, + 1454, 1452, 836, -1,835, 621, 836, -1,619, 1455, 837, -1,620, 619, 836, -1,836, 1456, + 1454, -1,1456, 836, 837, -1,837, 1457, 1456, -1,1457, 837, 1455, -1,836, 619, 837, -1, + 620, 836, 621, -1,1458, 1459, 1460, -1,1461, 1462, 1463, -1,1461, 1463, 1460, -1, + 1458, 1464, 1459, -1,1465, 1466, 1467, -1,1468, 1465, 1469, -1,1465, 1468, 1466, -1, + 1470, 1466, 1464, -1,1471, 1460, 1463, -1,1471, 1472, 1473, -1,1458, 1460, 1474, -1, + 1474, 1471, 1473, -1,1458, 1470, 1464, -1,1475, 1467, 1476, -1,1467, 1477, 1476, -1, + 1467, 1466, 1477, -1,1470, 1477, 1466, -1,1471, 1474, 1460, -1,1478, 1479, 1480, -1, + 1478, 1481, 1482, -1,1479, 1478, 1482, -1,1489, 1488, 1490, -1,1491, 1490, 1832, -1, + 1494, 1493, 1834, -1,1493, 1492, 1834, -1,1491, 1833, 1492, -1,1832, 1490, 1488, -1, + 1832, 1833, 1491, -1,1833, 1832, 1486, -1,1487, 1486, 1832, -1,1832, 1488, 1487, -1, + 1833, 1486, 1485, -1,1834, 1483, 1494, -1,1483, 1834, 1484, -1,1484, 1834, 1833, -1, + 1833, 1485, 1484, -1,1833, 1834, 1492, -1,2025, 2026, 1504, -1,1504, 1503, 1835, -1, + 2025, 1835, 1838, -1,1836, 1835, 1503, -1,1503, 1837, 1836, -1,1504, 1835, 2025, -1, + 1838, 1835, 1836, -1,2027, 2028, 1841, -1,1841, 2029, 2027, -1,1841, 1838, 1839, -1, + 1495, 2029, 1841, -1,1841, 1842, 1495, -1,1841, 2028, 1838, -1,2028, 2025, 1838, -1, + 1839, 1838, 1836, -1,1840, 1837, 1501, -1,1837, 1839, 1836, -1,1843, 1839, 1840, -1, + 1840, 1839, 1837, -1,1837, 1502, 1501, -1,1837, 1503, 1502, -1,1501, 1500, 1840, -1, + 1843, 1840, 1500, -1,1842, 1843, 1497, -1,1843, 1842, 1839, -1,1497, 1496, 1842, -1, + 1843, 1499, 1497, -1,1842, 1496, 1495, -1,1499, 1498, 1497, -1,1843, 1500, 1499, -1, + 1839, 1842, 1841, -1,2029, 2030, 1844, -1,1845, 1507, 1844, -1,1844, 1505, 2029, -1, + 1507, 1506, 1844, -1,1508, 1507, 1845, -1,1844, 1506, 1505, -1,1844, 2030, 1845, -1, + 1845, 2031, 2032, -1,2031, 1845, 2030, -1,1846, 1845, 2032, -1,1846, 2032, 2033, -1, + 1509, 1846, 1510, -1,1846, 1509, 1845, -1,1510, 1846, 1511, -1,1846, 2033, 1511, -1, + 1845, 1509, 1508, -1,2034, 2035, 1517, -1,1847, 2034, 1517, -1,2034, 2036, 2035, -1, + 1518, 2037, 2034, -1,1847, 1517, 1516, -1,1849, 1515, 1514, -1,1513, 1512, 1521, -1, + 1513, 1521, 1514, -1,1849, 1514, 1521, -1,1518, 1847, 1519, -1,1847, 1518, 2034, -1, + 1519, 1847, 1848, -1,1849, 1520, 1519, -1,1849, 1848, 1515, -1,1520, 1849, 1521, -1, + 1849, 1519, 1848, -1,1847, 1515, 1848, -1,1515, 1847, 1516, -1,2038, 1530, 2039, -1, + 1850, 1530, 1851, -1,2040, 1850, 1522, -1,1850, 2040, 2039, -1,1851, 1522, 1850, -1, + 2039, 1530, 1850, -1,1851, 1530, 1529, -1,1528, 1852, 1851, -1,1528, 1851, 1529, -1, + 1527, 1852, 1528, -1,1526, 1852, 1527, -1,1523, 1852, 1524, -1,1852, 1523, 1851, -1, + 1524, 1852, 1525, -1,1852, 1526, 1525, -1,1851, 1523, 1522, -1,1532, 1531, 1853, -1, + 2041, 2042, 1853, -1,1853, 1856, 1532, -1,1854, 1856, 1853, -1,1859, 1856, 1857, -1, + 2041, 1853, 1531, -1,1532, 1856, 1533, -1,1534, 1533, 1859, -1,1535, 1859, 1536, -1, + 1859, 1535, 1534, -1,1860, 1537, 1536, -1,1860, 1536, 1859, -1,1533, 1856, 1859, -1, + 1854, 1853, 2042, -1,1854, 2043, 1855, -1,2043, 1854, 2042, -1,1858, 1857, 1855, -1, + 1855, 1857, 1854, -1,2043, 1543, 1855, -1,1854, 1857, 1856, -1,1543, 1542, 1855, -1, + 1858, 1855, 1542, -1,1860, 1858, 1861, -1,1858, 1860, 1857, -1,1538, 1861, 1539, -1, + 1861, 1538, 1860, -1,1858, 1541, 1861, -1,1860, 1538, 1537, -1,1540, 1539, 1861, -1, + 1540, 1861, 1541, -1,1858, 1542, 1541, -1,1857, 1860, 1859, -1,1863, 2044, 2045, -1, + 2046, 1862, 2045, -1,1862, 2046, 1547, -1,1863, 2045, 1862, -1,2047, 2048, 2049, -1, + 1863, 1864, 2044, -1,2048, 1864, 2049, -1,1864, 2048, 2044, -1,1862, 1547, 2010, -1, + 1862, 1545, 1863, -1,1545, 1862, 2010, -1,1863, 1544, 1864, -1,1863, 1545, 1544, -1, + 1544, 2050, 1864, -1,1864, 2050, 2049, -1,1547, 1546, 2010, -1,2050, 2051, 1865, -1, + 1551, 1550, 1865, -1,1865, 1550, 2050, -1,1866, 1865, 2051, -1,1551, 1865, 1866, -1, + 2051, 2052, 1866, -1,2052, 1549, 1867, -1,1867, 1549, 1548, -1,1552, 1866, 1867, -1, + 1551, 1866, 1552, -1,1548, 1552, 1867, -1,1867, 1866, 2052, -1,1555, 1868, 1556, -1, + 1869, 1868, 1554, -1,1868, 1557, 1556, -1,1557, 1868, 1869, -1,1557, 1869, 1558, -1, + 1868, 1555, 1554, -1,1553, 2053, 1870, -1,1553, 1870, 1869, -1,1558, 1870, 2054, -1, + 1558, 1869, 1870, -1,2054, 1870, 2053, -1,1869, 1554, 1553, -1,1566, 1565, 1564, -1, + 1566, 1564, 1871, -1,1872, 1871, 1563, -1,1563, 1871, 1564, -1,1872, 1563, 1562, -1, + 1566, 1871, 1568, -1,1871, 1569, 1568, -1,1568, 1567, 1566, -1,1872, 1873, 1570, -1, + 1873, 1872, 1562, -1,1570, 1873, 1571, -1,1872, 1570, 1569, -1,1872, 1569, 1871, -1, + 1562, 1561, 1873, -1,2055, 1561, 1560, -1,2055, 1560, 1559, -1,2056, 1873, 2057, -1, + 2057, 1561, 2055, -1,2056, 2058, 1873, -1,1572, 2059, 1573, -1,2059, 1572, 1571, -1, + 2060, 1571, 1873, -1,2059, 1571, 2060, -1,2061, 2060, 1873, -1,2058, 2061, 1873, -1, + 1561, 2057, 1873, -1,2062, 2063, 1874, -1,1874, 2063, 1875, -1,2062, 1874, 2064, -1, + 2065, 1874, 1875, -1,1874, 2065, 2064, -1,2063, 2066, 1875, -1,1876, 2066, 2067, -1, + 1875, 2068, 2065, -1,1875, 1876, 2068, -1,2069, 2068, 1876, -1,1876, 2067, 2069, -1, + 1876, 1875, 2066, -1,2070, 2071, 2072, -1,2073, 2071, 2074, -1,2073, 2074, 1574, -1, + 2074, 2071, 2070, -1,2011, 1877, 2075, -1,2076, 1877, 2011, -1,2076, 2077, 2078, -1, + 2076, 2078, 1877, -1,2075, 1877, 2078, -1,2070, 2011, 2075, -1,2011, 2070, 2072, -1, + 1575, 2079, 2080, -1,2080, 1576, 1575, -1,1578, 1577, 1878, -1,1878, 1577, 2081, -1, + 1878, 2082, 1580, -1,2082, 1878, 2081, -1,1580, 1579, 1878, -1,1878, 1579, 1578, -1, + 1879, 1583, 1880, -1,1583, 1879, 2083, -1,1879, 1880, 2084, -1,2083, 1879, 2085, -1, + 2084, 2085, 1879, -1,1880, 2086, 2084, -1,1582, 1881, 1880, -1,1582, 1581, 1881, -1, + 2086, 1881, 2087, -1,2086, 1880, 1881, -1,2087, 1881, 1581, -1,1880, 1583, 1582, -1, + 1585, 1584, 2088, -1,2087, 2088, 1584, -1,1882, 1590, 1589, -1,1883, 1589, 1588, -1, + 2089, 1882, 2090, -1,1882, 2089, 1590, -1,2091, 1882, 1883, -1,1882, 2091, 2090, -1, + 1882, 1589, 1883, -1,1588, 1587, 1883, -1,2092, 1883, 1884, -1,1884, 1587, 1586, -1, + 1884, 1586, 2093, -1,2093, 1586, 2094, -1,1883, 2092, 2091, -1,2093, 2092, 1884, -1, + 2095, 2093, 2094, -1,1884, 1883, 1587, -1,1598, 1597, 1885, -1,1591, 1885, 1592, -1, + 1885, 1591, 1598, -1,1592, 1885, 1886, -1,1597, 1596, 1885, -1,1886, 1596, 1887, -1, + 1887, 1596, 1595, -1,1596, 1886, 1885, -1,1593, 1887, 1594, -1,1887, 1593, 1886, -1, + 1594, 1887, 1595, -1,1886, 1593, 1592, -1,1888, 2096, 1889, -1,2097, 1888, 2098, -1, + 1888, 2097, 2096, -1,1888, 1889, 1891, -1,2098, 1888, 2099, -1,2099, 1891, 2012, -1, + 2012, 1894, 2100, -1,2100, 2101, 2012, -1,2102, 1894, 1895, -1,2102, 2100, 1894, -1, + 1892, 1894, 1891, -1,2012, 1891, 1894, -1,2099, 1888, 1891, -1,2103, 1889, 2096, -1, + 1889, 2104, 1890, -1,2104, 1889, 2103, -1,1889, 1890, 1893, -1,2105, 2106, 1890, -1, + 1890, 2104, 2107, -1,1893, 1890, 2106, -1,2107, 2105, 1890, -1,1892, 1893, 1895, -1, + 1893, 1892, 1889, -1,1895, 2108, 2102, -1,1896, 2108, 1895, -1,1895, 1893, 1896, -1, + 1892, 1895, 1894, -1,1896, 2109, 2108, -1,1893, 2106, 1896, -1,2106, 2109, 1896, -1, + 1889, 1892, 1891, -1,1600, 1599, 1601, -1,1601, 1599, 1602, -1,1899, 1611, 1900, -1, + 1613, 1612, 1898, -1,1897, 1599, 1613, -1,1899, 1612, 1611, -1,1599, 1897, 1602, -1, + 1897, 1603, 1602, -1,1898, 1899, 1604, -1,1899, 1898, 1612, -1,1898, 1604, 1603, -1, + 1604, 1899, 1605, -1,1605, 1899, 1900, -1,1898, 1603, 1897, -1,1897, 1613, 1898, -1, + 1900, 1611, 2110, -1,1901, 2111, 2112, -1,1901, 1900, 2111, -1,2111, 1900, 2110, -1, + 1902, 2112, 2113, -1,2114, 2115, 2109, -1,2109, 1610, 2114, -1,2113, 2114, 1903, -1, + 1901, 1902, 1608, -1,1902, 1901, 2112, -1,1606, 1900, 1607, -1,1608, 1607, 1901, -1, + 1902, 1609, 1608, -1,1607, 1900, 1901, -1,1610, 1609, 1903, -1,1610, 1903, 2114, -1, + 1903, 1609, 1902, -1,1902, 2113, 1903, -1,1900, 1606, 1605, -1,1614, 1623, 1904, -1, + 1905, 1617, 1904, -1,1904, 1615, 1614, -1,1904, 1617, 1615, -1,1618, 1617, 1905, -1, + 1615, 1617, 1616, -1,1904, 1623, 1905, -1,1906, 1905, 1622, -1,1622, 1905, 1623, -1, + 1621, 1906, 1622, -1,1906, 1621, 2116, -1,1619, 1906, 1620, -1,1906, 1619, 1905, -1, + 1620, 1906, 2117, -1,1906, 2116, 2117, -1,1905, 1619, 1618, -1,1633, 1624, 1635, -1, + 1635, 1634, 1633, -1,1633, 1632, 1631, -1,1907, 1624, 1633, -1,1625, 1908, 1626, -1, + 1626, 1909, 1627, -1,1628, 2118, 2119, -1,1627, 1628, 2119, -1,1627, 1909, 1628, -1, + 1630, 1907, 1631, -1,1633, 1631, 1907, -1,1908, 1907, 1630, -1,1630, 1629, 1909, -1, + 1626, 1908, 1909, -1,1628, 1909, 1629, -1,1908, 1630, 1909, -1,1908, 1625, 1907, -1, + 1624, 1907, 1625, -1,2120, 2121, 1910, -1,1910, 1911, 1913, -1,1911, 1910, 2121, -1, + 2121, 2122, 1911, -1,2123, 2120, 2124, -1,2120, 1910, 2124, -1,2125, 2124, 1913, -1, + 1916, 2126, 2125, -1,1916, 1913, 1914, -1,1636, 2126, 1916, -1,1916, 1917, 1636, -1, + 1916, 2125, 1913, -1,2124, 1910, 1913, -1,1914, 1913, 1911, -1,1912, 1914, 1911, -1, + 1912, 2122, 1642, -1,1914, 1915, 1918, -1,1915, 1914, 1912, -1,1912, 1641, 1915, -1, + 1912, 1911, 2122, -1,1642, 1641, 1912, -1,1915, 1641, 1640, -1,1917, 1918, 1638, -1, + 1917, 1914, 1918, -1,1638, 1637, 1917, -1,1918, 1639, 1638, -1,1917, 1637, 1636, -1, + 1640, 1639, 1918, -1,1915, 1640, 1918, -1,1914, 1917, 1916, -1,2126, 2127, 1919, -1, + 1919, 2127, 1920, -1,2128, 1919, 1643, -1,1919, 2128, 2129, -1,1920, 1643, 1919, -1, + 2129, 2126, 1919, -1,1920, 2127, 2130, -1,2131, 1921, 1920, -1,2131, 1920, 2130, -1, + 2132, 1921, 2131, -1,1647, 1921, 2132, -1,1920, 1645, 1644, -1,1645, 1920, 1921, -1, + 1645, 1921, 1646, -1,1646, 1921, 1647, -1,1920, 1644, 1643, -1,1922, 1650, 1649, -1, + 1648, 2133, 1922, -1,1650, 1922, 1925, -1,1923, 1922, 2133, -1,2133, 2134, 1923, -1, + 1648, 1922, 1649, -1,1925, 1922, 1923, -1,1651, 1653, 1652, -1,1928, 1653, 1651, -1, + 1928, 1925, 1926, -1,1654, 1653, 1928, -1,1928, 1929, 1654, -1,1928, 1651, 1925, -1, + 1651, 1650, 1925, -1,1926, 1925, 1923, -1,2135, 1924, 1923, -1,1924, 1926, 1923, -1, + 1658, 1657, 1924, -1,1924, 2135, 1658, -1,1927, 1924, 1657, -1,1659, 1658, 2135, -1, + 1926, 1927, 1930, -1,1927, 1926, 1924, -1,1930, 1655, 1654, -1,1930, 1929, 1926, -1, + 1927, 1656, 1930, -1,1926, 1929, 1928, -1,1656, 1655, 1930, -1,1927, 1657, 1656, -1, + 1930, 1654, 1929, -1,1923, 2134, 2135, -1,1662, 1664, 1663, -1,1931, 1662, 1661, -1, + 1660, 2136, 1933, -1,2136, 2137, 1933, -1,1661, 1660, 1932, -1,1664, 1662, 1931, -1, + 1661, 1932, 1931, -1,2138, 1931, 1932, -1,1931, 2138, 2139, -1,2139, 1664, 1931, -1, + 2140, 2138, 1932, -1,2137, 2141, 1933, -1,2142, 1933, 2141, -1,1932, 1933, 2142, -1, + 2142, 2140, 1932, -1,1660, 1933, 1932, -1,2143, 2144, 2145, -1,2146, 2145, 2147, -1, + 2146, 2143, 2145, -1,1934, 2148, 2013, -1,2146, 2147, 2149, -1,2013, 2149, 2147, -1, + 2013, 2147, 2150, -1,2013, 2150, 1934, -1,2148, 1934, 1665, -1,1665, 2151, 2148, -1, + 1934, 2150, 1665, -1,2151, 1935, 2152, -1,1935, 2151, 2153, -1,2152, 1936, 2154, -1, + 1936, 2152, 1935, -1,1936, 1935, 2155, -1,1935, 2153, 2155, -1,1937, 2154, 1936, -1, + 1936, 2156, 1937, -1,2156, 2157, 1937, -1,1937, 2157, 2158, -1,2154, 1937, 2158, -1, + 1936, 2155, 2156, -1,2159, 2160, 1667, -1,1667, 1666, 2159, -1,2161, 2162, 1668, -1, + 2163, 2164, 2161, -1,1668, 2163, 2161, -1,1674, 2165, 2166, -1,1673, 2167, 2165, -1, + 2168, 2167, 1672, -1,2166, 2169, 1674, -1,2165, 1674, 1673, -1,1673, 1672, 2167, -1, + 1672, 1671, 2168, -1,2170, 2171, 1670, -1,2172, 2170, 1669, -1,2173, 2172, 1675, -1, + 1670, 2171, 1671, -1,1669, 2170, 1670, -1,1669, 1675, 2172, -1,2168, 1671, 2171, -1, + 1676, 1938, 2174, -1,1938, 1676, 2175, -1,2175, 2176, 1938, -1,2176, 2177, 1939, -1, + 1940, 2177, 2178, -1,2177, 1940, 1939, -1,1939, 2174, 1938, -1,2174, 1939, 2179, -1, + 1940, 2180, 2179, -1,2180, 1940, 2178, -1,1939, 1940, 2179, -1,1939, 1938, 2176, -1, + 2181, 2182, 1941, -1,1941, 2182, 2183, -1,1941, 2184, 2185, -1,2184, 1941, 2183, -1, + 2185, 2186, 1941, -1,1941, 2186, 2181, -1,2187, 1677, 2188, -1,1677, 2187, 2189, -1, + 2190, 1689, 2191, -1,1689, 2190, 1690, -1,2192, 2191, 1688, -1,1688, 2191, 1689, -1, + 2192, 1688, 1687, -1,1692, 2193, 2194, -1,1692, 2195, 2193, -1,2190, 1691, 1690, -1, + 1691, 2190, 2195, -1,1692, 1691, 2195, -1,2196, 1687, 2197, -1,1687, 2196, 2192, -1, + 2197, 1687, 1686, -1,2198, 2199, 1685, -1,1686, 2199, 2197, -1,1686, 1685, 2199, -1, + 1704, 2200, 2198, -1,1704, 2198, 1705, -1,2200, 1703, 1678, -1,1679, 1678, 1703, -1, + 1704, 1703, 2200, -1,1705, 2198, 1685, -1,2194, 2201, 1692, -1,2202, 2203, 1694, -1, + 1693, 1692, 2201, -1,1694, 1693, 2202, -1,2203, 1695, 1694, -1,2202, 1693, 2201, -1, + 1697, 2204, 2205, -1,1697, 2205, 2206, -1,1696, 1695, 2204, -1,1697, 1696, 2204, -1, + 2206, 2207, 1697, -1,2204, 1695, 2203, -1,1680, 1703, 1702, -1,1680, 1679, 1703, -1, + 1680, 1702, 1681, -1,1681, 1701, 1682, -1,1701, 1681, 1702, -1,1682, 1701, 1700, -1, + 1699, 1698, 1683, -1,1700, 1699, 1683, -1,1698, 1684, 1683, -1,1684, 1698, 2207, -1, + 1698, 1697, 2207, -1,1700, 1683, 1682, -1,2208, 1942, 1706, -1,1942, 2208, 2209, -1, + 1942, 2210, 1706, -1,2210, 1942, 2211, -1,1942, 1943, 2211, -1,2212, 2213, 1944, -1, + 2209, 2212, 1944, -1,1944, 2214, 2211, -1,1944, 1943, 2209, -1,2214, 1944, 2213, -1, + 1944, 2211, 1943, -1,2209, 1943, 1942, -1,2215, 2216, 1945, -1,1946, 1945, 2217, -1, + 2215, 1945, 2218, -1,2218, 1945, 2219, -1,1946, 2220, 2219, -1,2220, 1946, 2221, -1, + 1945, 1946, 2219, -1,1945, 2216, 2217, -1,1946, 2222, 1947, -1,2222, 2223, 1947, -1, + 2224, 2225, 2223, -1,2221, 1947, 2226, -1,2221, 1946, 1947, -1,2226, 1947, 2223, -1, + 2223, 2225, 2226, -1,1946, 2217, 2222, -1,1948, 1708, 1707, -1,1949, 1708, 1948, -1, + 2227, 1948, 2228, -1,1948, 2227, 1949, -1,1707, 2228, 1948, -1,1709, 1708, 1949, -1, + 1710, 1949, 1950, -1,1709, 1949, 1710, -1,1711, 1710, 1950, -1,2229, 2230, 1949, -1, + 1950, 1949, 2230, -1,1712, 1950, 2230, -1,1950, 1712, 1711, -1,2227, 2229, 1949, -1, + 1717, 1716, 1719, -1,1720, 1719, 1716, -1,1719, 1718, 1717, -1,1714, 1713, 1721, -1, + 1714, 1720, 1715, -1,1716, 1715, 1720, -1,1721, 1720, 1714, -1,1729, 1722, 1730, -1, + 1728, 1723, 1729, -1,1722, 1729, 1723, -1,1723, 1728, 1724, -1,1725, 1724, 1728, -1, + 1727, 1726, 1725, -1,1728, 1727, 1725, -1,1734, 1733, 2231, -1,2232, 2231, 1733, -1, + 2233, 1734, 2231, -1,1736, 1735, 2233, -1,1734, 2233, 1735, -1,1736, 2234, 1737, -1, + 2233, 2234, 1736, -1,2014, 1731, 2232, -1,2234, 2235, 1737, -1,2235, 2015, 1737, -1, + 1738, 2015, 1739, -1,2015, 2235, 1739, -1,2232, 1733, 2014, -1,1732, 1731, 2014, -1, + 1744, 1743, 1951, -1,1742, 1741, 1951, -1,1952, 1951, 2236, -1,1742, 1951, 1743, -1, + 1744, 1951, 1952, -1,1746, 1745, 1747, -1,1745, 1953, 1747, -1,1953, 1745, 1952, -1, + 2237, 1953, 1952, -1,1953, 2238, 2016, -1,1745, 1744, 1952, -1,2238, 2017, 2016, -1, + 1751, 1951, 1741, -1,2236, 2237, 1952, -1,1951, 2239, 2236, -1,2239, 1951, 1751, -1, + 2237, 2238, 1953, -1,2017, 1750, 2018, -1,1747, 1953, 2016, -1,1749, 2018, 1750, -1, + 1749, 1748, 2019, -1,2019, 2018, 1749, -1,2238, 1750, 2017, -1,1751, 1741, 1740, -1, + 1753, 1752, 2240, -1,2241, 1754, 1753, -1,1755, 1754, 1757, -1,2242, 1752, 2243, -1, + 2240, 2241, 1753, -1,1757, 1754, 2241, -1,1757, 1756, 1755, -1,1752, 2242, 2240, -1, + 1954, 2244, 2243, -1,1955, 1954, 2245, -1,1758, 1954, 2243, -1,1758, 2243, 1759, -1, + 1954, 2246, 2245, -1,1758, 2246, 1954, -1,1955, 2244, 1954, -1,1956, 2247, 2248, -1, + 1955, 2248, 2249, -1,2245, 2250, 1955, -1,1956, 1955, 2250, -1,2250, 2251, 1956, -1, + 2247, 1956, 2251, -1,1956, 2248, 1955, -1,2244, 1955, 2249, -1,1957, 1766, 1765, -1, + 1957, 2252, 2253, -1,2254, 1957, 1958, -1,1766, 1957, 2253, -1,1958, 1957, 1765, -1, + 1762, 1764, 1763, -1,1762, 1959, 1764, -1,1958, 1764, 1959, -1,1958, 1959, 2255, -1, + 2256, 1959, 1762, -1,1958, 1765, 1764, -1,2252, 1957, 2257, -1,1958, 2255, 2254, -1, + 2254, 2258, 1957, -1,2257, 1957, 2258, -1,1959, 2256, 2255, -1,2259, 2256, 1760, -1, + 1761, 1760, 2256, -1,1761, 2256, 1762, -1,2260, 2252, 2257, -1,2261, 2262, 1960, -1, + 1960, 1770, 1961, -1,1960, 2262, 2263, -1,2262, 2264, 2263, -1,1960, 2263, 2265, -1, + 2266, 1770, 1960, -1,1960, 2265, 2266, -1,1770, 1769, 1961, -1,1961, 2261, 1960, -1, + 1962, 1961, 1767, -1,2267, 1961, 2268, -1,2269, 1962, 1767, -1,2261, 1961, 2267, -1, + 1962, 2270, 2268, -1,2271, 1962, 2269, -1,1961, 1962, 2268, -1,2270, 1962, 2271, -1, + 1961, 1768, 1767, -1,2272, 2270, 2271, -1,1769, 1768, 1961, -1,1963, 2273, 2274, -1, + 1963, 1772, 2273, -1,1771, 2273, 1772, -1,1964, 1963, 2274, -1,2020, 1772, 1963, -1, + 2275, 2276, 1777, -1,1777, 2276, 1778, -1,1965, 2274, 2275, -1,1775, 1964, 1965, -1, + 2275, 1777, 1965, -1,1965, 1964, 2274, -1,1964, 1774, 1963, -1,1774, 1964, 1775, -1, + 1963, 1774, 2020, -1,1776, 1965, 1777, -1,1965, 1776, 1775, -1,2020, 1773, 1772, -1, + 2277, 2278, 1966, -1,2278, 2279, 1966, -1,2279, 2278, 2280, -1,2277, 1966, 1967, -1, + 1966, 2279, 2021, -1,1781, 1779, 2281, -1,1780, 1779, 1781, -1,2281, 2277, 1968, -1, + 1968, 1967, 1783, -1,1968, 1781, 2281, -1,2277, 1967, 1968, -1,1966, 1784, 1967, -1, + 1783, 1967, 1784, -1,2021, 1784, 1966, -1,1781, 1968, 1782, -1,1783, 1782, 1968, -1, + 2279, 2282, 2021, -1,2283, 2284, 1969, -1,2283, 1969, 1970, -1,2285, 2286, 2287, -1, + 1969, 2285, 2287, -1,1969, 2284, 2288, -1,2285, 1969, 2288, -1,1970, 1969, 2289, -1, + 2287, 2289, 1969, -1,1785, 2283, 1970, -1,1971, 2290, 2291, -1,1970, 2291, 1786, -1, + 2292, 2293, 2294, -1,1971, 2294, 2290, -1,2295, 2296, 1970, -1,1971, 1970, 2296, -1, + 2289, 2295, 1970, -1,1971, 2292, 2294, -1,2291, 1970, 1971, -1,2296, 2292, 1971, -1, + 1785, 1970, 1786, -1,1787, 2297, 2298, -1,2299, 1972, 2298, -1,1972, 2299, 2300, -1, + 1788, 2298, 1972, -1,1788, 1787, 2298, -1,1790, 1789, 1972, -1,1788, 1972, 1789, -1, + 1972, 1973, 1790, -1,1974, 1973, 2300, -1,2300, 1973, 1972, -1,2300, 2301, 1974, -1, + 2302, 1974, 2301, -1,1791, 1790, 1974, -1,1974, 2302, 1791, -1,1791, 2302, 1792, -1, + 2302, 1793, 1792, -1,1974, 1790, 1973, -1,2303, 1795, 1794, -1,2304, 1795, 2303, -1, + 2022, 1975, 1797, -1,2022, 1797, 1796, -1,2304, 2305, 1796, -1,1796, 1795, 2304, -1, + 1975, 2022, 2306, -1,1798, 1797, 1975, -1,2305, 2022, 1796, -1,1798, 1975, 2306, -1, + 1798, 2307, 2308, -1,2308, 1799, 1798, -1,1798, 2306, 2307, -1,1976, 1800, 2309, -1, + 1801, 1800, 1976, -1,2310, 1976, 2309, -1,1802, 1801, 1977, -1,1976, 1977, 1801, -1, + 1803, 1802, 1978, -1,2311, 2312, 1976, -1,1976, 2310, 2311, -1,2313, 1978, 1977, -1, + 1802, 1977, 1978, -1,1978, 2313, 1815, -1,2312, 2313, 1977, -1,1976, 2312, 1977, -1, + 1807, 1803, 1978, -1,1806, 1805, 1804, -1,1803, 1807, 1806, -1,1808, 1978, 1809, -1, + 1808, 1807, 1978, -1,1978, 1810, 1809, -1,1813, 1812, 1814, -1,1815, 1814, 1812, -1, + 1812, 1811, 1815, -1,1811, 1978, 1815, -1,1978, 1811, 1810, -1,1803, 1806, 1804, -1, + 2314, 2023, 2315, -1,2314, 2315, 2316, -1,2317, 2318, 2319, -1,2318, 2317, 2316, -1, + 2314, 2316, 2317, -1,2023, 2320, 1979, -1,2321, 1816, 2322, -1,1816, 2321, 1817, -1, + 2323, 2321, 2322, -1,2023, 1979, 2323, -1,2321, 1979, 2320, -1,2320, 2023, 2314, -1, + 1979, 2321, 2323, -1,2324, 2325, 2326, -1,2324, 1980, 2327, -1,2328, 2327, 1980, -1, + 1980, 2324, 1822, -1,2324, 2326, 1822, -1,1980, 1821, 1820, -1,1821, 1980, 1822, -1, + 1820, 1981, 1980, -1,2328, 1981, 1982, -1,1980, 1981, 2328, -1,1982, 2329, 2328, -1, + 2329, 1982, 2330, -1,1982, 1820, 1819, -1,1819, 2330, 1982, -1,1818, 2330, 1819, -1, + 1818, 2331, 2330, -1,1981, 1820, 1982, -1,2332, 2333, 1825, -1,1983, 2331, 2332, -1, + 2333, 2332, 2331, -1,2334, 2331, 1983, -1,2335, 1983, 2332, -1,1983, 1984, 2334, -1, + 2336, 1984, 1985, -1,2334, 1984, 2336, -1,1823, 2336, 1985, -1,2335, 2337, 1984, -1, + 1985, 1984, 2337, -1,1985, 2337, 1824, -1,1824, 1823, 1985, -1,1983, 2335, 1984, -1, + 2338, 1986, 1826, -1,2339, 1826, 1986, -1,2340, 1986, 2338, -1,2341, 2338, 1826, -1, + 1826, 2342, 2341, -1,2340, 1987, 1986, -1,1988, 2343, 2344, -1,1987, 2344, 2339, -1, + 2340, 2345, 1987, -1,1988, 1987, 2345, -1,2345, 2346, 1988, -1,2343, 1988, 2346, -1, + 1988, 2344, 1987, -1,1986, 1987, 2339, -1,1989, 2347, 2348, -1,1990, 2347, 1989, -1, + 2349, 1989, 2348, -1,2349, 2350, 1989, -1,1990, 1989, 2350, -1,2351, 1990, 2350, -1, + 1990, 2352, 2347, -1,2353, 2352, 1991, -1,1990, 2351, 1991, -1,2354, 2353, 1991, -1, + 1991, 2351, 2354, -1,2352, 1990, 1991, -1,1992, 2355, 2356, -1,1993, 2355, 1992, -1, + 2357, 1992, 2356, -1,2357, 2358, 1992, -1,1993, 1992, 2358, -1,2359, 1993, 2358, -1, + 1993, 2360, 2355, -1,1994, 2361, 2360, -1,1994, 1993, 2359, -1,2362, 1994, 2359, -1, + 2361, 1994, 2362, -1,2360, 1993, 1994, -1,2363, 2364, 2365, -1,2366, 2363, 1995, -1, + 2367, 1995, 2365, -1,1995, 2363, 2365, -1,2368, 1995, 1996, -1,2367, 1996, 1995, -1, + 1995, 2368, 2366, -1,2369, 1996, 1997, -1,2368, 1996, 2369, -1,2370, 2369, 1997, -1, + 2371, 1996, 2372, -1,2371, 2373, 1997, -1,2370, 1997, 2373, -1,2371, 1997, 1996, -1, + 2367, 2372, 1996, -1,1830, 1829, 1999, -1,1830, 1998, 1831, -1,2374, 1831, 1998, -1, + 1998, 1830, 1999, -1,2375, 1828, 1827, -1,1829, 2000, 1999, -1,2375, 2000, 1828, -1, + 1829, 1828, 2000, -1,2024, 2374, 1998, -1,1999, 2376, 1998, -1,2376, 2024, 1998, -1, + 2000, 2377, 1999, -1,2377, 2376, 1999, -1,2000, 2378, 2377, -1,2375, 2378, 2000, -1, + 2024, 2379, 2374, -1,2001, 2380, 2381, -1,2382, 2383, 2001, -1,2380, 2001, 2004, -1, + 2002, 2001, 2383, -1,2383, 2384, 2002, -1,2382, 2001, 2381, -1,2004, 2001, 2002, -1, + 2385, 2007, 2386, -1,2004, 2007, 2385, -1,2007, 2004, 2005, -1,2387, 2388, 2007, -1, + 2007, 2008, 2387, -1,2007, 2388, 2386, -1,2385, 2380, 2004, -1,2005, 2004, 2002, -1, + 2389, 2003, 2002, -1,2003, 2005, 2002, -1,2390, 2391, 2003, -1,2003, 2389, 2392, -1, + 2006, 2003, 2391, -1,2392, 2390, 2003, -1,2005, 2006, 2008, -1,2006, 2005, 2003, -1, + 2008, 2393, 2387, -1,2009, 2393, 2008, -1,2008, 2006, 2009, -1,2005, 2008, 2007, -1, + 2009, 2394, 2395, -1,2394, 2009, 2006, -1,2009, 2395, 2393, -1,2006, 2391, 2394, -1, + 2002, 2384, 2389, -1,2414, 2413, 2412, -1,2412, 2411, 2410, -1,2410, 2414, 2412, -1, + 2397, 2992, 2401, -1,2414, 2410, 2415, -1,2398, 2397, 2401, -1,2402, 2401, 2992, -1, + 2402, 2404, 2403, -1,2401, 2399, 2398, -1,2992, 2404, 2402, -1,2399, 2401, 2400, -1, + 2991, 2397, 3264, -1,2416, 2415, 2409, -1,2418, 2417, 2408, -1,2416, 2408, 2417, -1, + 2419, 2418, 2408, -1,2420, 2419, 2407, -1,2408, 2407, 2419, -1,2408, 2416, 2409, -1, + 2415, 2410, 2409, -1,3263, 2396, 2407, -1,2991, 2992, 2397, -1,2992, 2991, 3263, -1, + 3264, 3263, 2991, -1,2396, 2421, 2407, -1,2406, 2405, 2992, -1,2406, 2992, 3263, -1, + 2421, 2420, 2407, -1,2407, 2406, 3263, -1,2992, 2405, 2404, -1,2427, 2425, 2428, -1, + 2425, 2427, 2426, -1,2424, 2423, 2428, -1,2422, 2428, 2423, -1,2428, 2425, 2424, -1, + 3299, 2430, 2429, -1,2430, 3299, 2432, -1,3300, 2433, 2432, -1,2431, 2430, 2432, -1, + 2432, 3299, 3300, -1,2993, 2436, 2994, -1,2438, 2993, 2439, -1,2993, 2438, 2437, -1, + 2993, 2437, 2436, -1,2435, 2994, 2436, -1,2994, 2439, 2993, -1,2441, 2440, 2995, -1, + 2435, 2434, 2995, -1,2440, 2994, 2995, -1,2995, 2434, 3301, -1,2442, 2995, 3301, -1, + 2442, 2441, 2995, -1,2994, 2435, 2995, -1,2439, 2994, 2440, -1,2459, 2461, 2460, -1, + 2458, 2443, 2459, -1,2461, 2459, 2443, -1,2444, 2443, 2458, -1,2444, 2457, 3265, -1, + 2455, 2996, 2456, -1,2996, 2444, 3265, -1,2445, 2444, 2996, -1,2454, 2996, 2455, -1, + 2444, 2458, 2457, -1,3265, 2456, 2996, -1,2446, 2445, 2997, -1,2449, 2448, 2447, -1, + 2446, 2449, 2447, -1,2449, 2446, 2997, -1,2453, 2997, 2454, -1,2997, 2996, 2454, -1, + 2450, 2997, 2453, -1,2453, 2452, 2451, -1,2450, 2453, 2451, -1,2450, 2449, 2997, -1, + 2445, 2996, 2997, -1,2465, 2468, 2466, -1,2468, 2467, 2466, -1,2465, 2469, 2468, -1, + 2469, 2465, 2470, -1,3302, 2998, 3303, -1,3302, 2480, 2476, -1,3303, 2998, 3304, -1, + 2484, 2483, 2482, -1,2484, 2482, 2481, -1,2480, 3305, 2481, -1,3302, 3305, 2480, -1, + 2470, 2465, 2464, -1,2472, 2464, 2463, -1,3268, 2473, 2463, -1,2463, 2473, 2472, -1, + 3270, 2474, 3306, -1,3268, 3269, 2473, -1,2472, 2470, 2464, -1,2472, 2471, 2470, -1, + 2998, 2475, 3266, -1,2480, 2479, 2476, -1,2998, 3302, 2476, -1,2475, 3307, 3267, -1, + 2476, 2479, 2478, -1,2477, 2476, 2478, -1,3267, 3266, 2475, -1,2475, 2998, 2476, -1, + 2475, 3272, 3307, -1,2462, 3269, 3271, -1,3266, 3304, 2998, -1,3306, 3271, 3270, -1, + 2462, 3271, 3306, -1,3272, 3306, 2474, -1,3273, 2481, 3305, -1,3273, 2484, 2481, -1, + 3308, 2485, 3309, -1,3309, 3310, 3311, -1,3310, 3309, 2485, -1,2486, 3312, 2488, -1, + 2488, 2487, 2486, -1,3312, 3313, 2488, -1,3313, 2492, 2489, -1,2489, 2491, 2490, -1, + 2491, 2489, 2492, -1,3313, 2489, 2488, -1,3314, 2498, 2494, -1,2494, 2497, 2496, -1, + 2497, 2494, 2498, -1,2494, 2493, 3314, -1,2496, 2495, 3315, -1,2495, 3316, 3317, -1, + 3315, 2495, 3317, -1,2494, 2496, 3315, -1,3318, 3319, 3320, -1,3321, 2500, 3322, -1, + 2501, 3321, 3323, -1,3322, 2500, 3324, -1,2500, 3321, 2501, -1,2500, 2499, 3324, -1, + 2999, 2506, 2505, -1,3325, 2506, 2999, -1,2503, 2502, 2999, -1,3325, 2999, 2502, -1, + 2999, 2504, 2503, -1,2505, 2504, 2999, -1,3326, 3327, 3000, -1,3327, 2510, 3000, -1, + 3000, 3328, 3326, -1,2509, 2508, 2507, -1,2509, 3329, 3000, -1,3328, 3000, 3329, -1, + 2507, 3329, 2509, -1,2510, 2509, 3000, -1,2512, 3330, 3331, -1,3332, 2512, 3333, -1, + 2512, 3331, 2513, -1,3332, 3330, 2512, -1,3333, 2511, 3332, -1,3334, 3335, 3336, -1, + 3335, 3337, 3336, -1,3337, 3335, 3338, -1,2520, 3339, 2522, -1,2520, 2522, 2521, -1, + 2522, 3339, 2514, -1,3339, 3340, 2514, -1,2515, 3340, 2519, -1,3340, 2515, 2514, -1, + 2515, 2519, 2517, -1,2515, 2517, 2516, -1,2517, 2519, 2518, -1,2528, 2527, 3001, -1, + 3001, 2527, 3002, -1,3341, 3001, 2529, -1,3002, 2529, 3001, -1,3001, 3341, 2528, -1, + 3002, 2527, 2526, -1,3003, 3002, 2525, -1,2525, 3002, 2526, -1,3003, 2525, 2524, -1, + 2530, 3003, 2531, -1,3003, 2530, 3002, -1,2531, 3003, 2523, -1,2523, 3003, 2524, -1, + 3002, 2530, 2529, -1,2532, 3342, 2533, -1,3343, 2533, 3342, -1,2546, 2548, 2547, -1, + 3344, 3345, 2546, -1,3346, 3344, 2546, -1,2546, 3347, 3346, -1,3345, 2548, 2546, -1, + 3348, 3349, 3350, -1,3350, 3347, 3348, -1,3350, 3346, 3347, -1,2548, 2545, 2549, -1, + 2548, 3345, 2545, -1,2549, 2544, 2543, -1,2544, 2549, 2545, -1,2549, 2543, 2542, -1, + 2551, 3276, 2540, -1,2550, 2549, 2541, -1,3274, 2551, 2540, -1,2541, 2549, 2542, -1, + 2561, 2534, 2566, -1,2565, 2562, 2566, -1,2565, 2564, 2562, -1,2562, 2561, 2566, -1, + 2534, 2561, 2535, -1,2535, 2560, 2559, -1,2560, 2535, 2561, -1,2562, 2564, 2563, -1, + 2535, 2559, 2558, -1,2553, 2538, 2537, -1,2553, 2552, 2539, -1,2552, 3274, 3275, -1, + 2538, 2553, 2539, -1,2537, 2536, 2553, -1,2535, 2557, 2556, -1,2535, 2556, 2555, -1, + 2535, 2554, 2553, -1,2554, 2535, 2555, -1,2550, 2541, 3277, -1,3277, 3276, 2550, -1, + 2535, 2553, 2536, -1,2558, 2557, 2535, -1,2551, 2550, 3276, -1,2551, 3274, 2552, -1, + 2539, 2552, 3275, -1,2567, 3351, 3004, -1,3351, 3352, 3004, -1,3004, 2568, 2567, -1, + 2571, 2569, 3004, -1,2568, 3004, 2569, -1,2571, 2570, 2569, -1,3353, 2569, 2570, -1, + 3352, 2571, 3004, -1,3354, 3005, 3355, -1,3005, 3354, 3356, -1,3355, 3005, 3357, -1, + 3005, 2572, 3357, -1,2572, 3005, 3356, -1,2572, 3356, 2573, -1,3279, 3278, 2573, -1, + 3356, 3280, 2573, -1,2573, 3280, 3279, -1,2574, 2573, 3278, -1,2575, 3358, 2576, -1, + 3358, 3006, 2576, -1,3006, 3358, 3359, -1,2577, 3006, 3007, -1,3360, 3006, 3359, -1, + 3007, 3006, 3360, -1,3006, 2577, 2576, -1,3007, 3361, 3008, -1,3361, 3007, 3360, -1, + 3008, 2581, 2580, -1,2581, 3008, 3361, -1,3007, 3008, 2579, -1,2579, 2578, 3007, -1, + 2579, 3008, 2580, -1,3007, 2578, 2577, -1,3362, 3363, 3364, -1,3365, 3366, 3362, -1, + 3364, 3365, 3362, -1,2582, 3367, 3009, -1,3009, 3367, 3368, -1,3009, 3366, 2584, -1, + 3366, 3009, 3368, -1,2584, 2583, 3009, -1,3009, 2583, 2582, -1,3369, 3370, 3010, -1, + 3010, 3370, 3371, -1,3372, 3010, 2585, -1,3011, 2585, 3010, -1,3010, 3372, 3369, -1, + 3010, 3371, 3011, -1,3011, 3373, 3374, -1,3373, 3011, 3371, -1,3012, 3374, 2590, -1, + 3011, 3374, 3012, -1,2589, 3012, 2590, -1,3011, 2587, 2586, -1,2587, 3011, 3012, -1, + 2587, 3012, 2588, -1,2588, 3012, 2589, -1,3011, 2586, 2585, -1,3375, 3376, 3013, -1, + 2593, 3013, 2594, -1,2593, 3375, 3013, -1,3377, 3014, 3376, -1,3013, 3014, 2594, -1, + 3013, 3376, 3014, -1,3014, 3378, 3015, -1,3378, 3014, 3377, -1,3015, 2592, 2591, -1, + 2592, 3015, 3378, -1,3014, 3015, 2595, -1,2596, 2595, 3015, -1,2591, 2596, 3015, -1, + 3014, 2595, 2594, -1,3379, 3380, 2597, -1,2597, 3381, 2598, -1,3381, 2597, 3380, -1, + 3382, 3383, 3384, -1,3385, 3382, 3384, -1,3382, 3385, 3386, -1,3387, 3385, 3384, -1, + 2608, 2599, 3387, -1,2599, 2608, 2600, -1,2609, 3387, 3384, -1,2601, 2607, 2606, -1, + 2601, 2600, 2607, -1,2607, 2600, 2608, -1,3387, 2609, 2608, -1,2602, 2601, 2603, -1, + 2604, 2606, 2605, -1,2604, 2603, 2601, -1,2606, 2604, 2601, -1,2626, 3388, 3389, -1, + 3389, 3388, 3390, -1,2624, 3388, 2625, -1,2626, 2625, 3388, -1,3281, 2624, 2623, -1, + 3391, 2622, 3283, -1,2622, 3392, 3283, -1,3391, 2623, 2622, -1,2622, 2621, 3392, -1, + 3281, 3282, 2624, -1,3391, 3281, 2623, -1,3282, 3388, 2624, -1,3392, 2614, 3393, -1, + 3394, 3395, 2612, -1,2610, 3394, 2612, -1,3395, 2613, 2612, -1,2614, 2613, 3393, -1, + 2612, 2611, 2610, -1,3392, 2615, 2614, -1,2619, 2618, 2620, -1,2621, 2620, 2618, -1, + 2617, 3392, 2618, -1,2618, 3392, 2621, -1,2616, 3392, 2617, -1,3392, 2616, 2615, -1, + 3395, 3393, 2613, -1,3016, 2627, 3396, -1,3017, 2627, 3016, -1,3397, 3016, 3396, -1, + 3397, 3398, 3016, -1,3017, 3016, 3398, -1,3399, 3017, 3398, -1,3017, 2628, 2627, -1, + 3018, 2629, 2628, -1,3018, 3017, 3399, -1,3400, 3018, 3399, -1,2629, 3018, 3400, -1, + 2628, 3017, 3018, -1,3401, 3402, 3403, -1,3401, 3019, 3404, -1,2630, 3404, 3019, -1, + 3019, 3401, 3405, -1,3401, 3403, 3405, -1,3019, 3406, 3407, -1,3406, 3019, 3405, -1, + 3407, 3020, 3019, -1,2630, 3020, 3021, -1,3019, 3020, 2630, -1,3021, 2631, 2630, -1, + 2631, 3021, 2632, -1,3021, 3407, 2635, -1,2635, 2632, 3021, -1,2634, 2632, 2635, -1, + 2634, 2633, 2632, -1,3020, 3407, 3021, -1,2640, 2639, 3022, -1,3022, 3408, 3023, -1, + 3022, 2639, 2637, -1,2639, 2638, 2637, -1,3022, 2637, 2636, -1,3409, 3408, 3022, -1, + 3022, 2636, 3409, -1,3408, 3410, 3023, -1,3023, 2640, 3022, -1,3024, 3023, 2647, -1, + 2641, 3023, 2642, -1,2646, 3024, 2647, -1,2640, 3023, 2641, -1,3024, 2643, 2642, -1, + 2645, 3024, 2646, -1,3023, 3024, 2642, -1,2643, 3024, 2645, -1,3023, 2648, 2647, -1, + 2644, 2643, 2645, -1,3410, 2648, 3023, -1,2653, 2652, 2655, -1,2656, 2655, 2652, -1, + 2655, 2654, 2653, -1,2650, 2649, 2657, -1,2650, 2656, 2651, -1,2652, 2651, 2656, -1, + 2657, 2656, 2650, -1,2660, 3411, 3412, -1,2659, 3413, 2660, -1,3411, 2660, 3413, -1, + 3413, 2659, 3414, -1,3415, 3414, 2659, -1,2658, 3416, 3415, -1,2659, 2658, 3415, -1, + 2669, 2668, 2664, -1,2665, 2664, 2668, -1,2663, 2669, 2664, -1,2671, 2670, 2663, -1, + 2669, 2663, 2670, -1,2671, 2662, 2672, -1,2663, 2662, 2671, -1,3284, 2666, 2665, -1, + 2662, 2661, 2672, -1,2661, 3285, 2672, -1,2673, 3285, 3417, -1,3285, 2661, 3417, -1, + 2665, 2668, 3284, -1,2667, 2666, 3284, -1,2678, 2677, 3025, -1,2676, 2675, 3025, -1, + 3026, 3025, 3418, -1,2676, 3025, 2677, -1,2678, 3025, 3026, -1,2680, 2679, 2681, -1, + 2679, 3027, 2681, -1,3027, 2679, 3026, -1,3419, 3027, 3026, -1,3027, 3420, 3286, -1, + 2679, 2678, 3026, -1,3420, 3287, 3286, -1,2685, 3025, 2675, -1,3418, 3419, 3026, -1, + 3025, 3421, 3418, -1,3421, 3025, 2685, -1,3419, 3420, 3027, -1,3287, 2684, 3288, -1, + 2681, 3027, 3286, -1,2683, 3288, 2684, -1,2683, 2682, 3289, -1,3289, 3288, 2683, -1, + 3420, 2684, 3287, -1,2685, 2675, 2674, -1,3422, 2688, 3423, -1,3424, 3425, 3422, -1, + 3426, 3425, 2689, -1,2686, 2688, 2687, -1,3423, 3424, 3422, -1,2689, 3425, 3424, -1, + 2689, 3427, 3426, -1,2688, 2686, 3423, -1,2700, 2719, 2701, -1,2719, 2700, 3428, -1, + 2702, 2701, 2718, -1,2718, 2701, 2719, -1,2702, 2718, 2717, -1,3429, 2698, 2697, -1, + 3429, 2699, 2698, -1,2700, 3430, 3428, -1,3430, 2700, 2699, -1,3429, 3430, 2699, -1, + 2703, 2717, 2704, -1,2717, 2703, 2702, -1,2704, 2717, 2716, -1,2706, 2705, 2715, -1, + 2716, 2705, 2704, -1,2716, 2715, 2705, -1,2729, 2707, 2706, -1,2729, 2706, 2730, -1, + 2707, 2728, 2708, -1,2709, 2708, 2728, -1,2729, 2728, 2707, -1,2730, 2706, 2715, -1, + 2697, 2696, 3429, -1,2695, 2694, 2720, -1,3431, 3429, 2696, -1,2720, 3431, 2695, -1, + 2694, 2721, 2720, -1,2695, 3431, 2696, -1,2723, 2693, 2692, -1,2723, 2692, 2691, -1, + 2722, 2721, 2693, -1,2723, 2722, 2693, -1,2691, 2690, 2723, -1,2693, 2721, 2694, -1, + 2710, 2728, 2727, -1,2710, 2709, 2728, -1,2710, 2727, 2711, -1,2711, 2726, 2712, -1, + 2726, 2711, 2727, -1,2712, 2726, 2725, -1,2724, 3432, 2713, -1,2725, 2724, 2713, -1, + 3432, 2714, 2713, -1,2714, 3432, 2690, -1,3432, 2723, 2690, -1,2725, 2713, 2712, -1, + 2736, 2739, 2738, -1,2735, 2740, 2739, -1,2741, 2740, 2734, -1,2738, 2737, 2736, -1, + 2739, 2736, 2735, -1,2735, 2734, 2740, -1,2734, 2733, 2741, -1,2743, 2742, 2732, -1, + 2744, 2743, 2731, -1,2745, 2744, 3433, -1,2732, 2742, 2733, -1,2731, 2743, 2732, -1, + 2731, 3433, 2744, -1,2741, 2733, 2742, -1,2750, 3028, 3434, -1,3028, 2750, 2749, -1, + 2749, 2748, 3028, -1,2748, 2747, 3029, -1,3030, 2747, 2746, -1,2747, 3030, 3029, -1, + 3029, 3434, 3028, -1,3434, 3029, 3435, -1,3030, 3436, 3435, -1,3436, 3030, 2746, -1, + 3029, 3030, 3435, -1,3029, 3028, 2748, -1,3031, 2753, 2752, -1,2751, 2762, 3031, -1, + 2753, 3031, 3034, -1,3032, 3031, 2762, -1,2762, 2761, 3032, -1,2751, 3031, 2752, -1, + 3034, 3031, 3032, -1,2754, 3437, 2755, -1,3037, 3437, 2754, -1,3037, 3034, 3035, -1, + 3438, 3437, 3037, -1,3037, 3038, 3438, -1,3037, 2754, 3034, -1,2754, 2753, 3034, -1, + 3035, 3034, 3032, -1,2760, 3033, 3032, -1,3033, 3035, 3032, -1,2758, 2757, 3033, -1, + 3033, 2760, 2758, -1,3036, 3033, 2757, -1,2759, 2758, 2760, -1,3035, 3036, 3039, -1, + 3036, 3035, 3033, -1,3039, 3439, 3438, -1,3039, 3038, 3035, -1,3036, 2756, 3039, -1, + 3035, 3038, 3037, -1,2756, 3439, 3039, -1,3036, 2757, 2756, -1,3039, 3438, 3038, -1, + 3032, 2761, 2760, -1,2767, 2769, 2768, -1,3040, 2767, 2766, -1,2765, 2764, 3042, -1, + 2764, 2763, 3042, -1,2766, 2765, 3041, -1,2769, 2767, 3040, -1,2766, 3041, 3040, -1, + 3440, 3040, 3041, -1,3040, 3440, 3441, -1,3441, 2769, 3040, -1,3442, 3440, 3041, -1, + 2763, 3443, 3042, -1,3444, 3042, 3443, -1,3041, 3042, 3444, -1,3444, 3442, 3041, -1, + 2765, 3042, 3041, -1,3445, 2770, 2781, -1,2781, 3446, 3445, -1,3445, 2780, 2779, -1, + 3043, 2770, 3445, -1,2771, 3044, 2772, -1,2772, 3045, 2773, -1,2776, 2775, 2774, -1, + 2773, 2776, 2774, -1,2773, 3045, 2776, -1,2778, 3043, 2779, -1,3445, 2779, 3043, -1, + 3044, 3043, 2778, -1,2778, 2777, 3045, -1,2772, 3044, 3045, -1,2776, 3045, 2777, -1, + 3044, 2778, 3045, -1,3044, 2771, 3043, -1,2770, 3043, 2771, -1,2791, 2790, 3046, -1, + 3046, 3047, 3049, -1,3047, 3046, 2790, -1,2790, 2789, 3047, -1,3447, 2791, 3448, -1, + 2791, 3046, 3448, -1,3449, 3448, 3049, -1,3052, 3450, 3449, -1,3052, 3049, 3050, -1, + 2782, 3450, 3052, -1,3052, 3053, 2782, -1,3052, 3449, 3049, -1,3448, 3046, 3049, -1, + 3050, 3049, 3047, -1,3048, 3050, 3047, -1,3048, 2789, 2788, -1,3050, 3051, 3054, -1, + 3051, 3050, 3048, -1,3048, 2787, 3051, -1,3048, 3047, 2789, -1,2788, 2787, 3048, -1, + 3051, 2787, 2786, -1,3053, 3054, 2784, -1,3053, 3050, 3054, -1,2784, 2783, 3053, -1, + 3054, 2785, 2784, -1,3053, 2783, 2782, -1,2786, 2785, 3054, -1,3051, 2786, 3054, -1, + 3050, 3053, 3052, -1,3450, 3451, 3055, -1,3055, 3451, 3056, -1,3452, 3055, 3453, -1, + 3055, 3452, 3454, -1,3056, 3453, 3055, -1,3454, 3450, 3055, -1,3056, 3451, 3455, -1, + 3456, 3057, 3056, -1,3456, 3056, 3455, -1,3457, 3057, 3456, -1,2792, 3057, 3457, -1, + 3056, 3458, 3459, -1,3458, 3056, 3057, -1,3458, 3057, 3460, -1,3460, 3057, 2792, -1, + 3056, 3459, 3453, -1,3461, 3462, 3058, -1,3059, 3058, 3463, -1,3461, 3058, 2793, -1, + 2793, 3058, 3464, -1,3059, 3465, 3464, -1,3465, 3059, 3466, -1,3058, 3059, 3464, -1, + 3058, 3462, 3463, -1,3059, 3467, 3060, -1,3467, 3460, 3060, -1,3468, 2794, 3460, -1, + 3466, 3060, 3469, -1,3466, 3059, 3060, -1,3469, 3060, 3460, -1,3460, 2794, 3469, -1, + 3059, 3463, 3467, -1,3470, 3471, 3472, -1,3471, 3470, 3473, -1,3474, 3061, 3475, -1, + 3061, 3474, 3476, -1,3477, 3475, 3061, -1,3478, 3477, 3061, -1,3061, 3062, 3478, -1, + 3479, 3480, 3063, -1,3476, 3479, 3063, -1,3063, 3481, 3478, -1,3063, 3062, 3476, -1, + 3481, 3063, 3480, -1,3063, 3478, 3062, -1,3476, 3062, 3061, -1,2796, 2795, 2797, -1, + 2797, 2795, 3481, -1,3066, 2805, 3067, -1,2807, 2806, 3065, -1,3064, 2795, 2807, -1, + 3066, 2806, 2805, -1,2795, 3064, 3481, -1,3064, 3482, 3481, -1,3065, 3066, 3483, -1, + 3066, 3065, 2806, -1,3483, 3482, 3065, -1,3484, 3483, 3066, -1,3484, 3066, 3067, -1, + 3065, 3482, 3064, -1,3064, 2807, 3065, -1,3067, 2805, 2804, -1,3068, 2803, 2802, -1, + 3068, 3067, 2803, -1,2803, 3067, 2804, -1,3069, 2802, 2801, -1,2800, 2799, 2798, -1, + 2798, 3485, 2800, -1,2801, 2800, 3070, -1,3068, 3069, 3486, -1,3069, 3068, 2802, -1, + 3487, 3067, 3488, -1,3486, 3488, 3068, -1,3069, 3489, 3486, -1,3488, 3067, 3068, -1, + 3070, 3485, 3489, -1,3070, 2800, 3485, -1,3070, 3489, 3069, -1,3069, 2801, 3070, -1, + 3067, 3487, 3484, -1,3490, 2810, 3071, -1,3072, 3491, 3071, -1,3071, 3492, 3490, -1, + 3071, 3491, 3492, -1,3493, 3491, 3072, -1,3492, 3491, 3494, -1,3071, 2810, 3072, -1, + 3073, 3072, 2809, -1,2809, 3072, 2810, -1,2808, 3073, 2809, -1,3073, 2808, 3495, -1, + 3496, 3073, 3497, -1,3073, 3496, 3072, -1,3497, 3073, 3498, -1,3073, 3495, 3498, -1, + 3072, 3496, 3493, -1,3074, 2813, 2812, -1,2811, 2818, 3074, -1,2813, 3074, 3077, -1, + 3075, 3074, 2818, -1,2818, 2817, 3075, -1,2811, 3074, 2812, -1,3077, 3074, 3075, -1, + 2814, 3080, 2815, -1,3077, 3080, 2814, -1,3080, 3077, 3078, -1,3499, 3500, 3080, -1, + 3080, 3081, 3499, -1,3080, 3500, 2815, -1,2814, 2813, 3077, -1,3078, 3077, 3075, -1, + 2816, 3076, 3075, -1,3076, 3078, 3075, -1,3501, 3502, 3076, -1,3076, 2816, 3503, -1, + 3079, 3076, 3502, -1,3503, 3501, 3076, -1,3078, 3079, 3081, -1,3079, 3078, 3076, -1, + 3081, 3504, 3499, -1,3082, 3504, 3081, -1,3081, 3079, 3082, -1,3078, 3081, 3080, -1, + 3082, 3505, 3506, -1,3505, 3082, 3079, -1,3082, 3506, 3504, -1,3079, 3502, 3505, -1, + 3075, 2817, 2816, -1,3507, 3508, 3084, -1,3507, 3083, 3509, -1,2819, 3509, 3083, -1, + 3083, 3507, 3084, -1,3510, 3511, 3512, -1,3508, 3085, 3084, -1,3510, 3085, 3511, -1, + 3508, 3511, 3085, -1,3290, 2819, 3083, -1,3084, 2821, 3083, -1,3083, 2821, 3290, -1, + 3085, 2822, 3084, -1,2822, 2821, 3084, -1,3085, 2823, 2822, -1,3510, 2823, 3085, -1, + 3290, 2820, 2819, -1,3087, 2826, 2825, -1,2824, 3086, 2825, -1,3086, 2824, 3513, -1, + 3087, 2825, 3086, -1,2828, 2827, 2829, -1,3087, 3088, 2826, -1,2827, 3088, 2829, -1, + 3088, 2827, 2826, -1,3086, 3513, 3291, -1,3086, 2832, 3087, -1,2832, 3086, 3291, -1, + 3087, 2831, 3088, -1,3087, 2832, 2831, -1,2831, 2830, 3088, -1,3088, 2830, 2829, -1, + 3513, 2833, 3291, -1,3514, 3515, 3089, -1,2836, 2835, 3089, -1,3089, 3092, 3514, -1, + 3090, 3092, 3089, -1,3095, 3092, 3093, -1,2836, 3089, 3515, -1,3514, 3092, 3516, -1, + 3517, 3516, 3095, -1,3518, 3095, 3519, -1,3095, 3518, 3517, -1,3096, 3520, 3519, -1, + 3096, 3519, 3095, -1,3516, 3092, 3095, -1,3090, 3089, 2835, -1,3090, 2834, 3091, -1, + 2834, 3090, 2835, -1,3094, 3093, 3091, -1,3091, 3093, 3090, -1,2834, 3521, 3091, -1, + 3090, 3093, 3092, -1,3521, 3522, 3091, -1,3094, 3091, 3522, -1,3096, 3094, 3097, -1, + 3094, 3096, 3093, -1,3523, 3097, 3524, -1,3097, 3523, 3096, -1,3094, 3525, 3097, -1, + 3096, 3523, 3520, -1,3526, 3524, 3097, -1,3526, 3097, 3525, -1,3094, 3522, 3525, -1, + 3093, 3096, 3095, -1,2837, 2842, 2838, -1,3098, 2842, 3099, -1,2839, 3098, 3527, -1, + 3098, 2839, 2838, -1,3099, 3527, 3098, -1,2838, 2842, 3098, -1,3099, 2842, 2841, -1, + 2840, 3100, 3099, -1,2840, 3099, 2841, -1,3528, 3100, 2840, -1,3529, 3100, 3528, -1, + 3530, 3100, 3531, -1,3100, 3530, 3099, -1,3531, 3100, 3532, -1,3100, 3529, 3532, -1, + 3099, 3530, 3527, -1,3533, 2846, 2845, -1,3101, 3533, 2845, -1,3533, 2847, 2846, -1, + 2848, 3534, 3533, -1,3101, 2845, 2844, -1,3103, 2843, 3535, -1,3536, 3537, 3538, -1, + 3536, 3538, 3535, -1,3103, 3535, 3538, -1,2848, 3101, 2849, -1,3101, 2848, 3533, -1, + 2849, 3101, 3102, -1,3103, 2850, 2849, -1,3103, 3102, 2843, -1,2850, 3103, 3538, -1, + 3103, 2849, 3102, -1,3101, 2843, 3102, -1,2843, 3101, 2844, -1,3104, 2856, 3105, -1, + 3539, 3104, 3540, -1,3104, 3539, 2856, -1,3104, 3105, 3107, -1,3540, 3104, 3541, -1, + 3541, 3107, 3292, -1,3292, 3110, 3542, -1,3542, 3543, 3292, -1,3544, 3110, 3111, -1, + 3544, 3542, 3110, -1,3108, 3110, 3107, -1,3292, 3107, 3110, -1,3541, 3104, 3107, -1, + 2855, 3105, 2856, -1,3105, 2854, 3106, -1,2854, 3105, 2855, -1,3105, 3106, 3109, -1, + 2852, 2851, 3106, -1,3106, 2854, 2853, -1,3109, 3106, 2851, -1,2853, 2852, 3106, -1, + 3108, 3109, 3111, -1,3109, 3108, 3105, -1,3111, 3545, 3544, -1,3112, 3545, 3111, -1, + 3111, 3109, 3112, -1,3108, 3111, 3110, -1,3112, 3546, 3545, -1,3109, 2851, 3112, -1, + 2851, 3546, 3112, -1,3105, 3108, 3107, -1,3547, 3548, 3113, -1,3549, 3113, 3550, -1, + 3113, 3549, 3547, -1,3550, 3113, 3114, -1,3548, 3551, 3113, -1,3114, 3551, 3115, -1, + 3115, 3551, 3552, -1,3551, 3114, 3113, -1,3553, 3115, 3546, -1,3115, 3553, 3114, -1, + 3546, 3115, 3552, -1,3114, 3553, 3550, -1,3116, 3554, 3555, -1,3117, 3555, 3556, -1, + 2857, 3116, 2858, -1,3116, 2857, 3554, -1,2859, 3116, 3117, -1,3116, 2859, 2858, -1, + 3116, 3555, 3117, -1,3556, 3557, 3117, -1,2860, 3117, 3118, -1,3118, 3557, 3558, -1, + 3118, 3558, 2861, -1,2861, 3558, 2863, -1,3117, 2860, 2859, -1,2861, 2860, 3118, -1, + 2862, 2861, 2863, -1,3118, 3117, 3557, -1,3559, 3560, 2869, -1,2869, 2868, 3119, -1, + 3559, 3119, 3122, -1,3120, 3119, 2868, -1,2868, 3121, 3120, -1,2869, 3119, 3559, -1, + 3122, 3119, 3120, -1,3561, 3562, 3125, -1,3125, 3563, 3561, -1,3125, 3122, 3123, -1, + 2864, 3563, 3125, -1,3125, 3126, 2864, -1,3125, 3562, 3122, -1,3562, 3559, 3122, -1, + 3123, 3122, 3120, -1,3124, 3121, 3564, -1,3121, 3123, 3120, -1,3127, 3123, 3124, -1, + 3124, 3123, 3121, -1,3121, 3565, 3564, -1,3121, 2868, 3565, -1,3564, 3566, 3124, -1, + 3127, 3124, 3566, -1,3126, 3127, 2866, -1,3127, 3126, 3123, -1,2866, 2865, 3126, -1, + 3127, 3567, 2866, -1,3126, 2865, 2864, -1,3567, 2867, 2866, -1,3127, 3566, 3567, -1, + 3123, 3126, 3125, -1,3568, 3569, 3128, -1,3129, 3570, 3128, -1,3128, 3571, 3568, -1, + 3570, 3572, 3128, -1,3573, 3570, 3129, -1,3128, 3572, 3571, -1,3128, 3569, 3129, -1, + 3129, 3574, 3575, -1,3574, 3129, 3569, -1,3130, 3129, 3575, -1,3130, 3575, 3576, -1, + 3577, 3130, 3578, -1,3130, 3577, 3129, -1,3578, 3130, 3579, -1,3130, 3576, 3579, -1, + 3129, 3577, 3573, -1,3131, 3580, 3132, -1,3580, 3131, 2870, -1,3131, 3132, 3581, -1, + 2870, 3131, 2871, -1,3581, 2871, 3131, -1,3132, 3582, 3581, -1,3583, 3133, 3132, -1, + 3583, 2872, 3133, -1,3582, 3133, 3584, -1,3582, 3132, 3133, -1,3584, 3133, 2872, -1, + 3132, 3580, 3583, -1,3585, 3586, 3134, -1,3134, 3586, 3587, -1,3134, 2873, 3588, -1, + 2873, 3134, 3587, -1,3588, 3589, 3134, -1,3134, 3589, 3585, -1,3590, 2875, 2874, -1, + 2874, 3591, 3590, -1,3135, 3592, 3593, -1,3135, 3594, 3592, -1,3593, 3595, 3135, -1, + 3596, 3135, 3595, -1,3135, 3597, 3594, -1,3597, 3135, 3596, -1,3596, 3595, 3598, -1, + 3599, 3600, 3136, -1,3136, 3600, 3601, -1,3601, 3137, 3602, -1,3137, 3601, 3603, -1, + 3602, 3137, 3138, -1,3601, 3602, 3136, -1,3599, 3136, 3602, -1,2877, 2876, 3604, -1, + 2876, 3605, 3604, -1,3605, 2876, 3599, -1,2876, 3600, 3599, -1,3606, 3607, 3608, -1, + 3607, 3138, 3603, -1,3609, 3607, 3610, -1,3607, 3609, 3608, -1,3138, 3611, 3602, -1, + 3138, 3607, 3611, -1,3611, 3607, 3612, -1,3612, 3607, 3606, -1,3608, 3613, 3606, -1, + 3603, 3138, 3137, -1,3614, 3615, 3616, -1,3616, 3617, 3139, -1,3618, 3139, 3617, -1, + 3614, 3139, 2878, -1,3140, 2878, 3139, -1,3139, 3614, 3616, -1,3139, 3618, 3619, -1, + 3140, 3619, 3620, -1,3141, 3620, 2881, -1,2879, 2878, 3140, -1,2879, 3140, 3141, -1, + 2881, 2880, 3141, -1,3141, 3140, 3620, -1,3141, 2880, 2879, -1,3140, 3139, 3619, -1, + 3621, 3142, 3622, -1,3142, 3623, 3143, -1,3623, 3142, 3621, -1,3621, 3622, 3624, -1, + 3622, 3142, 3625, -1,3148, 3626, 3625, -1,3148, 3145, 3146, -1,3145, 3625, 3142, -1, + 3148, 2882, 3626, -1,3149, 2882, 3148, -1,3146, 3145, 3143, -1,3145, 3148, 3625, -1, + 3142, 3143, 3145, -1,3623, 2888, 3143, -1,3143, 3144, 3146, -1,3144, 3143, 2888, -1, + 3144, 2888, 2887, -1,3147, 3146, 3144, -1,2887, 2886, 3144, -1,3147, 3144, 2886, -1, + 2884, 3149, 3150, -1,3147, 3149, 3146, -1,2884, 2883, 3149, -1,3149, 3147, 3150, -1, + 3149, 2883, 2882, -1,3150, 2885, 2884, -1,3147, 2886, 3150, -1,2886, 2885, 3150, -1, + 3146, 3149, 3148, -1,3151, 2890, 3293, -1,3627, 3151, 3293, -1,2890, 3151, 3154, -1, + 3152, 3151, 3627, -1,3627, 3628, 3152, -1,3293, 2889, 3627, -1,3154, 3151, 3152, -1, + 3157, 3294, 2891, -1,3154, 3157, 2891, -1,3157, 3154, 3155, -1,3158, 2894, 2893, -1, + 2893, 3157, 3158, -1,2893, 2892, 3294, -1,2891, 2890, 3154, -1,3157, 2893, 3294, -1, + 3155, 3154, 3152, -1,3628, 3629, 3153, -1,3156, 3155, 3153, -1,3155, 3152, 3153, -1, + 3629, 2898, 3153, -1,3153, 3152, 3628, -1,2899, 2898, 3629, -1,3156, 3153, 2898, -1, + 3158, 3156, 3159, -1,3156, 3158, 3155, -1,2895, 3159, 2896, -1,3159, 2895, 3158, -1, + 3156, 2897, 3159, -1,3158, 2895, 2894, -1,2897, 2896, 3159, -1,3156, 2898, 2897, -1, + 3155, 3158, 3157, -1,3160, 3630, 3631, -1,3161, 3631, 3632, -1,3633, 3160, 3634, -1, + 3160, 3633, 3630, -1,3634, 3161, 3635, -1,3161, 3634, 3160, -1,3160, 3631, 3161, -1, + 3632, 3162, 3161, -1,3636, 3162, 3637, -1,3637, 3162, 3632, -1,3635, 3162, 3636, -1, + 3162, 3635, 3161, -1,3163, 3637, 3638, -1,3164, 3163, 3638, -1,3639, 3640, 3163, -1, + 2900, 3164, 2901, -1,3163, 3164, 2900, -1,3163, 2900, 3639, -1,3640, 3637, 3163, -1, + 3164, 3638, 3641, -1,3165, 3164, 3642, -1,3642, 3164, 3641, -1,3165, 3642, 2905, -1, + 2902, 3165, 2903, -1,3165, 2902, 3164, -1,2903, 3165, 2904, -1,3165, 2905, 2904, -1, + 3164, 2902, 2901, -1,3643, 3644, 3166, -1,3645, 3166, 2906, -1,3166, 3645, 3643, -1, + 3646, 3167, 3644, -1,3166, 3167, 2906, -1,3167, 3166, 3644, -1,3167, 3647, 3168, -1, + 3647, 3167, 3646, -1,3168, 2910, 2909, -1,2910, 3168, 3647, -1,3167, 3168, 2908, -1, + 2908, 2907, 3167, -1,2908, 3168, 2909, -1,3167, 2907, 2906, -1,3169, 3648, 3649, -1, + 3170, 3649, 3650, -1,3651, 3652, 3169, -1,3169, 3170, 2911, -1,3169, 3652, 3648, -1, + 2911, 3170, 2912, -1,3169, 2911, 3651, -1,3649, 3170, 3169, -1,3650, 3653, 3170, -1, + 3171, 3653, 2916, -1,3171, 2916, 2915, -1,3170, 2913, 2912, -1,3170, 3171, 2913, -1, + 2913, 3171, 2914, -1,2914, 3171, 2915, -1,3171, 3170, 3653, -1,2918, 2917, 3654, -1, + 3172, 3654, 3173, -1,2919, 3172, 2920, -1,3172, 2919, 2918, -1,3173, 2920, 3172, -1, + 2918, 3654, 3172, -1,3173, 3654, 3655, -1,3174, 3173, 3656, -1,3656, 3173, 3655, -1, + 2925, 3174, 3656, -1,2924, 3174, 2925, -1,2921, 3174, 2922, -1,3174, 2921, 3173, -1, + 3174, 2924, 2922, -1,2922, 2924, 2923, -1,3173, 2921, 2920, -1,3175, 3657, 3658, -1, + 3175, 3659, 3657, -1,3658, 3660, 3175, -1,3661, 3662, 3175, -1,3175, 3662, 3659, -1, + 3661, 3175, 3660, -1,3663, 3664, 3176, -1,3665, 3176, 3179, -1,3177, 3176, 3664, -1, + 3664, 3666, 3177, -1,3663, 3176, 3665, -1,3179, 3176, 3177, -1,3667, 3182, 3668, -1, + 3182, 3669, 3668, -1,3182, 3179, 3180, -1,3670, 3669, 3182, -1,3182, 3183, 3670, -1, + 3182, 3667, 3179, -1,3667, 3665, 3179, -1,3180, 3179, 3177, -1,3671, 3178, 3177, -1, + 3181, 3180, 3178, -1,3180, 3177, 3178, -1,3671, 2927, 3178, -1,3177, 3666, 3671, -1, + 2928, 2927, 3671, -1,2926, 3178, 2927, -1,3183, 3181, 3184, -1,3181, 3183, 3180, -1, + 3672, 3184, 3673, -1,3184, 3672, 3183, -1,3181, 2926, 3184, -1,3183, 3672, 3670, -1, + 3184, 2926, 3673, -1,3181, 3178, 2926, -1,3180, 3183, 3182, -1,3673, 3674, 3185, -1, + 3675, 3676, 3186, -1,3674, 3675, 3186, -1,3677, 3185, 2929, -1,3185, 3677, 3673, -1, + 2929, 3186, 2930, -1,3186, 2929, 3185, -1,2931, 2930, 3186, -1,3185, 3674, 3186, -1, + 3186, 3676, 3187, -1,3678, 3679, 3187, -1,3679, 2933, 2932, -1,3187, 3676, 3680, -1, + 3186, 3187, 2931, -1,3679, 2932, 3187, -1,3187, 3680, 3678, -1,3187, 2932, 2931, -1, + 3681, 3682, 3188, -1,3188, 2940, 3189, -1,3188, 3191, 3681, -1,3189, 3191, 3188, -1, + 3194, 3191, 3192, -1,2940, 3188, 3682, -1,3681, 3191, 3683, -1,3684, 3683, 3194, -1, + 3684, 2934, 3685, -1,2934, 3684, 3194, -1,2935, 2934, 3194, -1,2935, 3194, 3195, -1, + 3683, 3191, 3194, -1,2939, 3189, 2940, -1,3189, 2938, 3190, -1,2938, 3189, 2939, -1, + 3193, 3192, 3190, -1,3190, 3192, 3189, -1,2938, 3686, 3190, -1,3189, 3192, 3191, -1, + 3687, 3686, 2938, -1,3688, 3190, 3686, -1,3195, 3193, 3196, -1,3193, 3195, 3192, -1, + 2936, 3196, 2937, -1,3196, 2936, 3195, -1,3193, 3689, 3196, -1,3195, 2936, 2935, -1, + 3688, 3689, 3193, -1,3689, 2937, 3196, -1,3193, 3190, 3688, -1,3192, 3195, 3194, -1, + 3690, 3691, 3197, -1,3692, 3197, 2941, -1,3197, 3692, 3690, -1,3693, 3198, 3691, -1, + 3197, 3198, 2941, -1,3198, 3197, 3691, -1,3198, 3694, 3199, -1,3694, 3198, 3693, -1, + 3199, 2945, 2944, -1,2945, 3199, 3694, -1,3198, 3199, 2943, -1,2943, 2942, 3198, -1, + 2943, 3199, 2944, -1,3198, 2942, 2941, -1,3695, 3200, 3696, -1,3697, 3698, 3200, -1, + 3200, 3201, 3203, -1,3201, 3200, 3698, -1,3698, 3699, 3201, -1,3697, 3200, 3695, -1, + 3696, 3200, 3700, -1,3701, 3206, 3702, -1,3203, 3206, 3701, -1,3203, 3700, 3200, -1, + 2946, 3702, 3206, -1,3204, 3206, 3203, -1,3206, 3207, 2946, -1,3701, 3700, 3203, -1, + 3204, 3203, 3201, -1,3202, 2953, 2952, -1,2953, 3202, 3699, -1,3202, 3205, 3204, -1, + 3204, 3201, 3202, -1,3205, 3202, 2952, -1,3202, 3201, 3699, -1,2951, 3205, 2952, -1, + 2948, 3207, 3208, -1,3205, 3207, 3204, -1,2948, 2947, 3207, -1,3207, 3205, 3208, -1, + 3207, 2947, 2946, -1,2950, 2949, 2948, -1,3208, 3205, 2951, -1,2950, 2948, 3208, -1, + 2951, 2950, 3208, -1,3204, 3207, 3206, -1,3702, 3703, 3209, -1,3704, 3209, 3210, -1, + 3209, 3705, 3702, -1,3704, 3706, 3209, -1,3706, 3705, 3209, -1,3209, 3703, 3210, -1, + 3707, 3210, 3703, -1,3210, 3707, 3708, -1,3708, 2956, 3211, -1,3211, 2956, 3709, -1, + 3708, 3211, 3210, -1,3210, 3211, 3710, -1,3709, 3710, 3211, -1,3709, 2956, 2954, -1, + 2956, 2955, 2954, -1,3210, 3710, 3704, -1,3711, 3712, 3713, -1,2957, 3712, 3711, -1, + 3712, 2957, 3714, -1,3711, 3715, 3716, -1,3711, 3716, 2957, -1,3717, 3718, 2958, -1, + 3718, 3717, 3719, -1,2958, 3718, 3720, -1,3721, 3719, 3717, -1,3722, 3723, 3212, -1, + 3724, 3722, 3212, -1,2959, 3212, 3725, -1,2959, 3724, 3212, -1,3725, 3212, 3213, -1, + 3726, 3213, 3212, -1,3727, 3213, 3726, -1,3723, 3726, 3212, -1,3728, 3729, 3214, -1, + 3730, 3731, 3732, -1,3729, 3730, 3214, -1,3733, 3213, 3734, -1,3213, 3733, 3725, -1, + 3734, 3213, 3214, -1,3730, 3732, 3214, -1,3214, 3213, 3728, -1,3214, 3732, 3734, -1, + 3728, 3213, 3727, -1,3735, 3736, 3737, -1,3738, 3737, 3736, -1,3739, 3740, 3215, -1, + 3215, 3740, 3216, -1,3739, 3215, 3741, -1,3215, 3742, 3741, -1,3742, 3215, 3216, -1, + 3742, 3216, 3743, -1,3740, 3744, 3216, -1,3217, 3744, 3745, -1,3217, 3745, 3746, -1, + 3743, 3216, 3747, -1,3217, 3748, 3747, -1,3748, 3217, 3746, -1,3217, 3747, 3216, -1, + 3217, 3216, 3744, -1,3749, 3750, 3218, -1,3218, 3750, 3219, -1,3749, 3218, 3751, -1, + 3752, 3218, 3219, -1,3218, 3752, 3751, -1,3750, 3753, 3219, -1,3220, 3753, 2960, -1, + 3219, 3754, 3752, -1,3219, 3220, 3754, -1,3755, 3754, 3220, -1,3220, 2960, 3755, -1, + 3220, 3219, 3753, -1,3756, 3757, 3221, -1,3758, 3755, 3221, -1,3221, 3755, 3756, -1, + 3222, 3221, 3757, -1,3758, 3221, 3222, -1,3757, 3759, 3222, -1,3759, 2962, 3223, -1, + 3223, 2962, 2961, -1,3760, 3222, 3223, -1,3758, 3222, 3760, -1,2961, 3760, 3223, -1, + 3223, 3222, 3759, -1,3761, 3224, 2963, -1,3225, 3224, 3762, -1,3224, 3763, 2963, -1, + 3763, 3224, 3225, -1,3763, 3225, 3764, -1,3224, 3761, 3762, -1,3765, 3766, 3226, -1, + 3765, 3226, 3225, -1,3764, 3226, 3767, -1,3764, 3225, 3226, -1,3767, 3226, 3766, -1, + 3225, 3762, 3765, -1,2964, 3227, 3768, -1,3227, 2964, 3769, -1,3768, 3228, 3770, -1, + 3228, 3768, 3227, -1,3228, 3227, 3771, -1,3227, 3769, 3771, -1,3229, 3770, 3228, -1, + 3228, 3772, 3229, -1,3772, 3773, 3229, -1,3229, 3773, 3774, -1,3770, 3229, 3774, -1, + 3228, 3771, 3772, -1,3775, 3776, 3777, -1,3778, 3777, 3779, -1,3778, 3775, 3777, -1, + 3778, 3779, 3780, -1,3230, 3781, 3295, -1,3295, 3780, 3779, -1,3295, 3779, 3782, -1, + 3295, 3782, 3230, -1,3781, 3230, 3783, -1,3783, 3784, 3781, -1,3230, 3782, 3783, -1, + 3785, 3786, 3787, -1,3787, 2965, 3785, -1,3788, 3789, 3790, -1,3791, 3792, 3788, -1, + 3790, 3791, 3788, -1,3793, 3794, 3231, -1,3231, 3794, 3795, -1,3231, 3796, 3797, -1, + 3796, 3231, 3795, -1,3797, 3798, 3231, -1,3231, 3798, 3793, -1,3799, 3800, 3801, -1, + 3802, 3801, 3800, -1,3232, 3803, 3804, -1,3233, 3803, 3232, -1,3805, 3232, 3806, -1, + 3232, 3805, 3233, -1,3804, 3806, 3232, -1,3807, 3803, 3233, -1,3808, 3233, 3234, -1, + 3807, 3233, 3808, -1,3809, 3808, 3234, -1,3810, 3811, 3233, -1,3234, 3233, 3811, -1, + 3812, 3234, 3811, -1,3234, 3812, 3809, -1,3805, 3810, 3233, -1,3813, 3814, 3235, -1, + 3813, 3235, 3236, -1,3815, 3816, 3817, -1,3235, 3815, 3817, -1,3235, 3814, 3818, -1, + 3815, 3235, 3818, -1,3236, 3235, 3819, -1,3817, 3819, 3235, -1,2966, 3813, 3236, -1, + 3237, 2969, 2968, -1,3236, 2968, 2967, -1,3820, 3821, 3822, -1,3237, 3822, 2969, -1, + 3823, 3824, 3236, -1,3237, 3236, 3824, -1,3819, 3823, 3236, -1,3237, 3820, 3822, -1, + 2968, 3236, 3237, -1,3824, 3820, 3237, -1,2966, 3236, 2967, -1,2970, 3825, 3826, -1, + 3827, 3238, 3826, -1,3238, 3827, 3828, -1,2971, 3826, 3238, -1,2971, 2970, 3826, -1, + 2973, 2972, 3238, -1,2971, 3238, 2972, -1,3238, 3239, 2973, -1,3240, 3239, 3828, -1, + 3828, 3239, 3238, -1,3828, 2978, 3240, -1,2977, 3240, 2978, -1,2974, 2973, 3240, -1, + 3240, 2977, 2974, -1,2974, 2977, 2975, -1,2977, 2976, 2975, -1,3240, 2973, 3239, -1, + 3829, 3830, 3831, -1,3832, 3830, 3829, -1,3296, 3241, 3833, -1,3296, 3833, 3834, -1, + 3832, 3835, 3834, -1,3834, 3830, 3832, -1,3241, 3296, 3836, -1,3837, 3833, 3241, -1, + 3835, 3296, 3834, -1,3837, 3241, 3836, -1,3837, 3838, 3839, -1,3839, 2979, 3837, -1, + 3837, 3836, 3838, -1,3242, 3840, 3841, -1,3243, 3840, 3242, -1,3842, 3242, 3841, -1, + 3842, 3843, 3242, -1,3243, 3242, 3843, -1,3844, 3243, 3843, -1,3243, 3845, 3840, -1, + 3846, 3845, 3244, -1,3243, 3844, 3244, -1,2980, 3846, 3244, -1,3244, 3844, 2980, -1, + 3845, 3243, 3244, -1,2985, 3245, 3846, -1,3847, 3846, 3245, -1,2984, 3245, 2985, -1, + 3848, 2985, 3846, -1,3846, 3849, 3848, -1,2984, 3246, 3245, -1,3247, 2981, 3850, -1, + 3246, 3850, 3847, -1,2984, 2983, 3246, -1,3247, 3246, 2983, -1,2983, 2982, 3247, -1, + 2981, 3247, 2982, -1,3247, 3850, 3246, -1,3245, 3246, 3847, -1,3851, 3852, 3853, -1, + 3248, 3854, 3851, -1,3852, 3851, 3854, -1,2986, 3854, 3248, -1,3855, 3248, 3851, -1, + 3248, 3249, 2986, -1,2987, 3249, 3250, -1,2986, 3249, 2987, -1,3856, 2987, 3250, -1, + 3855, 3857, 3249, -1,3250, 3249, 3857, -1,3250, 3857, 3858, -1,3858, 3856, 3250, -1, + 3248, 3855, 3249, -1,3251, 3859, 3860, -1,3251, 2989, 3859, -1,2988, 3859, 2989, -1, + 3252, 3251, 3860, -1,3297, 2989, 3251, -1,3861, 3862, 3863, -1,3863, 3862, 3864, -1, + 3253, 3860, 3861, -1,3865, 3252, 3253, -1,3861, 3863, 3253, -1,3253, 3252, 3860, -1, + 3252, 3866, 3251, -1,3866, 3252, 3865, -1,3251, 3866, 3297, -1,3867, 3253, 3863, -1, + 3253, 3867, 3865, -1,3297, 2990, 2989, -1,3868, 3869, 3254, -1,3869, 3870, 3254, -1, + 3870, 3869, 3871, -1,3868, 3254, 3255, -1,3254, 3870, 3298, -1,3872, 3873, 3874, -1, + 3875, 3873, 3872, -1,3874, 3868, 3256, -1,3256, 3255, 3876, -1,3256, 3872, 3874, -1, + 3868, 3255, 3256, -1,3254, 3877, 3255, -1,3876, 3255, 3877, -1,3298, 3877, 3254, -1, + 3872, 3256, 3878, -1,3876, 3878, 3256, -1,3870, 3879, 3298, -1,3880, 3881, 3882, -1, + 3883, 3880, 3257, -1,3884, 3257, 3882, -1,3257, 3880, 3882, -1,3885, 3257, 3258, -1, + 3884, 3258, 3257, -1,3257, 3885, 3883, -1,3886, 3258, 3259, -1,3885, 3258, 3886, -1, + 3887, 3886, 3259, -1,3888, 3258, 3889, -1,3888, 3890, 3259, -1,3887, 3259, 3890, -1, + 3888, 3259, 3258, -1,3884, 3889, 3258, -1,3260, 3891, 3892, -1,3261, 3260, 3893, -1, + 3894, 3260, 3892, -1,3894, 3892, 3895, -1,3260, 3896, 3893, -1,3894, 3896, 3260, -1, + 3261, 3891, 3260, -1,3897, 3898, 3261, -1,3899, 3897, 3262, -1,3893, 3900, 3261, -1, + 3262, 3261, 3900, -1,3900, 3901, 3262, -1,3899, 3262, 3901, -1,3262, 3897, 3261, -1, + 3891, 3261, 3898, -1,3913, 3912, 3911, -1,3958, 3911, 3910, -1,3960, 3909, 3961, -1, + 3909, 3930, 3961, -1,3910, 3909, 3959, -1,3908, 3930, 3909, -1,3913, 3911, 3914, -1, + 3911, 3957, 3915, -1,3915, 3956, 3955, -1,3955, 3954, 3915, -1,3956, 3915, 3957, -1, + 3959, 3909, 3960, -1,3957, 3911, 3958, -1,3959, 3958, 3910, -1,3911, 3915, 3914, -1, + 3933, 3908, 3907, -1,3930, 3908, 3931, -1,3907, 3906, 3934, -1,3904, 3906, 3905, -1, + 3906, 3904, 3903, -1,3902, 3906, 3903, -1,3931, 3908, 3932, -1,3933, 3907, 3934, -1, + 3906, 3902, 3935, -1,3934, 3906, 3935, -1,3937, 3936, 3902, -1,3935, 3902, 3936, -1, + 3902, 3938, 3937, -1,3929, 3938, 3902, -1,3932, 3908, 3933, -1,3916, 3954, 3953, -1, + 3916, 3953, 3952, -1,3916, 3951, 3950, -1,3921, 3949, 3948, -1,3949, 3921, 3950, -1, + 3951, 3916, 3952, -1,3917, 3916, 3920, -1,3920, 3918, 3917, -1,3918, 3920, 3919, -1, + 3921, 3948, 3922, -1,3920, 3916, 3921, -1,3948, 3947, 3922, -1,3946, 3922, 3947, -1, + 3916, 3950, 3921, -1,3916, 3915, 3954, -1,3923, 3945, 3944, -1,3924, 3944, 3943, -1, + 3929, 3940, 3939, -1,3929, 3942, 3941, -1,3929, 3941, 3940, -1,3942, 3924, 3943, -1, + 3925, 3924, 3929, -1,3924, 3942, 3929, -1,3923, 3944, 3924, -1,3923, 3922, 3946, -1, + 3928, 3925, 3929, -1,3925, 3928, 3927, -1,3925, 3927, 3926, -1,3923, 3946, 3945, -1, + 3938, 3929, 3939, -1,3962, 4099, 4100, -1,4061, 4101, 4062, -1,4101, 4061, 4100, -1, + 4062, 4101, 4102, -1,4061, 4062, 3964, -1,3963, 4100, 4061, -1,4064, 4103, 4104, -1, + 4063, 4103, 4064, -1,4103, 4063, 4102, -1,4105, 4065, 4104, -1,4066, 4105, 4106, -1, + 4102, 4063, 4062, -1,4062, 4063, 3965, -1,4100, 3963, 3962, -1,3966, 4063, 4064, -1, + 4061, 3964, 3963, -1,3964, 4062, 3965, -1,3965, 4063, 3966, -1,4064, 3967, 3966, -1, + 4065, 4066, 3968, -1,4066, 4065, 4105, -1,4067, 4066, 4106, -1,4066, 4067, 3969, -1, + 3968, 3967, 4065, -1,3969, 3968, 4066, -1,4067, 3970, 3969, -1,4065, 3967, 4064, -1, + 4064, 4104, 4065, -1,4106, 4107, 4067, -1,4108, 4068, 4067, -1,4068, 4109, 4069, -1, + 4109, 4068, 4108, -1,4069, 4109, 4110, -1,4068, 4069, 3972, -1,4110, 4070, 4069, -1, + 3971, 4067, 4068, -1,4071, 4070, 4111, -1,4112, 4071, 4111, -1,4113, 4073, 4114, -1, + 4112, 4114, 4072, -1,3977, 4113, 4115, -1,4111, 4070, 4110, -1,4069, 4070, 3973, -1, + 3971, 3970, 4067, -1,3974, 4070, 4071, -1,4068, 3972, 3971, -1,3972, 4069, 3973, -1, + 3973, 4070, 3974, -1,4071, 3975, 3974, -1,3976, 3975, 4072, -1,4072, 3975, 4071, -1, + 4073, 4072, 4114, -1,3976, 4072, 4073, -1,3977, 3976, 4073, -1,3977, 4073, 4113, -1, + 4115, 3978, 3977, -1,4071, 4112, 4072, -1,4067, 4107, 4108, -1,4116, 4115, 4117, -1, + 4074, 4118, 4075, -1,4118, 4074, 4117, -1,4075, 4118, 4119, -1,4074, 4075, 3980, -1, + 3979, 4117, 4074, -1,4120, 4078, 4121, -1,4077, 4076, 4122, -1,4122, 4076, 4119, -1, + 4121, 4077, 4122, -1,4120, 4123, 4079, -1,4119, 4076, 4075, -1,4075, 4076, 3981, -1, + 4117, 3979, 4116, -1,3982, 4076, 4077, -1,4074, 3980, 3979, -1,3980, 4075, 3981, -1, + 3981, 4076, 3982, -1,4077, 3983, 3982, -1,4078, 4079, 3984, -1,4079, 4078, 4120, -1, + 4080, 4079, 4123, -1,4079, 4080, 3985, -1,3984, 3983, 4078, -1,3985, 3984, 4079, -1, + 4080, 3986, 3985, -1,4078, 3983, 4077, -1,4077, 4121, 4078, -1,4123, 4124, 4080, -1, + 4081, 4125, 4126, -1,4082, 4126, 4127, -1,4081, 4080, 4125, -1,4081, 4126, 4082, -1, + 4081, 4082, 3988, -1,3987, 4080, 4081, -1,4127, 4083, 4082, -1,4083, 4128, 4084, -1, + 4084, 4128, 4129, -1,4130, 4086, 4131, -1,4129, 4131, 4085, -1,3993, 4130, 4132, -1, + 4128, 4083, 4127, -1,4082, 4083, 3989, -1,3987, 3986, 4080, -1,3990, 4083, 4084, -1, + 4081, 3988, 3987, -1,3988, 4082, 3989, -1,3989, 4083, 3990, -1,4084, 3991, 3990, -1, + 3992, 3991, 4085, -1,4085, 3991, 4084, -1,4086, 4085, 4131, -1,3992, 4085, 4086, -1, + 3993, 3992, 4086, -1,3993, 4086, 4130, -1,4132, 3994, 3993, -1,4084, 4129, 4085, -1, + 4080, 4124, 4125, -1,4133, 4134, 4135, -1,4136, 4137, 4134, -1,4135, 4138, 4133, -1, + 4139, 4140, 4137, -1,4136, 4139, 4137, -1,4133, 4136, 4134, -1,4141, 4140, 4139, -1, + 4140, 4142, 4143, -1,4144, 4145, 4142, -1,4146, 4137, 4143, -1,4147, 4145, 4148, -1, + 4144, 4148, 4145, -1,4140, 4144, 4142, -1,4137, 4140, 4143, -1,4139, 4149, 4141, -1, + 4150, 4141, 4151, -1,4152, 4151, 4153, -1,4152, 4153, 4154, -1,4150, 4155, 4141, -1, + 4155, 4156, 4141, -1,4151, 4152, 4150, -1,4156, 4155, 4157, -1,4158, 4159, 4160, -1, + 4156, 4160, 4161, -1,4162, 4140, 4161, -1,4158, 4163, 4159, -1,4164, 4159, 4163, -1, + 4160, 4156, 4158, -1,4141, 4156, 4161, -1,4161, 4140, 4141, -1,4165, 4166, 4087, -1, + 4087, 4166, 4088, -1,3997, 4087, 3998, -1,4088, 3998, 4087, -1,4087, 3997, 4165, -1, + 4088, 4166, 4167, -1,4089, 4088, 4168, -1,4168, 4088, 4167, -1,4089, 4168, 3996, -1, + 4088, 4000, 3999, -1,4000, 4088, 4089, -1,4000, 4089, 3995, -1,3995, 4089, 3996, -1, + 4088, 3999, 3998, -1,4169, 4002, 4001, -1,4002, 4169, 4170, -1,4017, 4015, 4014, -1, + 4013, 4006, 4014, -1,4006, 4013, 4007, -1,4005, 4014, 4006, -1,4016, 4015, 4017, -1, + 4005, 4004, 4171, -1,4172, 4171, 4004, -1,4005, 4171, 4017, -1,4014, 4005, 4017, -1, + 4013, 4012, 4007, -1,4011, 4010, 4007, -1,4009, 4008, 4007, -1,4009, 4007, 4010, -1, + 4173, 4174, 4004, -1,4175, 4004, 4003, -1,4004, 4175, 4173, -1,4172, 4004, 4174, -1, + 4012, 4011, 4007, -1,4018, 4032, 4031, -1,4031, 4030, 4019, -1,4029, 4020, 4030, -1, + 4033, 4032, 4018, -1,4019, 4018, 4031, -1,4020, 4019, 4030, -1,4029, 4028, 4020, -1, + 4022, 4028, 4027, -1,4026, 4025, 4024, -1,4023, 4027, 4026, -1,4021, 4028, 4022, -1, + 4024, 4023, 4026, -1,4027, 4023, 4022, -1,4028, 4021, 4020, -1,4034, 4176, 4177, -1, + 4035, 4177, 4037, -1,4176, 4178, 4177, -1,4037, 4178, 4175, -1,4178, 4037, 4177, -1, + 4037, 4036, 4035, -1,4179, 4180, 4090, -1,4090, 4180, 4091, -1,4181, 4090, 4182, -1, + 4091, 4182, 4090, -1,4090, 4181, 4179, -1,4091, 4180, 4183, -1,4092, 4091, 4184, -1, + 4184, 4091, 4183, -1,4092, 4184, 4039, -1,4091, 4185, 4186, -1,4185, 4091, 4092, -1, + 4185, 4092, 4038, -1,4038, 4092, 4039, -1,4091, 4186, 4182, -1,4187, 4188, 4189, -1, + 4189, 4040, 4187, -1,4190, 4191, 4192, -1,4192, 4193, 4190, -1,4194, 4195, 4193, -1, + 4196, 4193, 4195, -1,4197, 4198, 4199, -1,4199, 4200, 4197, -1,4041, 4201, 4200, -1, + 4200, 4042, 4041, -1,4202, 4203, 4093, -1,4093, 4203, 4094, -1,4043, 4093, 4204, -1, + 4094, 4204, 4093, -1,4093, 4043, 4202, -1,4094, 4203, 4205, -1,4095, 4094, 4206, -1, + 4206, 4094, 4205, -1,4095, 4206, 4207, -1,4094, 4208, 4209, -1,4208, 4094, 4095, -1, + 4208, 4095, 4210, -1,4210, 4095, 4207, -1,4094, 4209, 4204, -1,4044, 4211, 4212, -1, + 4045, 4212, 4047, -1,4211, 4213, 4212, -1,4047, 4213, 4214, -1,4213, 4047, 4212, -1, + 4047, 4046, 4045, -1,4215, 4216, 4096, -1,4096, 4216, 4097, -1,4217, 4096, 4218, -1, + 4097, 4218, 4096, -1,4096, 4217, 4215, -1,4097, 4216, 4219, -1,4098, 4097, 4220, -1, + 4220, 4097, 4219, -1,4098, 4220, 4049, -1,4097, 4221, 4222, -1,4221, 4097, 4098, -1, + 4221, 4098, 4048, -1,4048, 4098, 4049, -1,4097, 4222, 4218, -1,4223, 4224, 4225, -1, + 4225, 4050, 4223, -1,4226, 4227, 4228, -1,4228, 4229, 4226, -1,4230, 4231, 4229, -1, + 4232, 4229, 4231, -1,4233, 4234, 4235, -1,4235, 4236, 4233, -1,4237, 4052, 4051, -1, + 4051, 4238, 4237, -1,4054, 4239, 4055, -1,4239, 4054, 4053, -1,4240, 4241, 4242, -1, + 4242, 4056, 4240, -1,4058, 4243, 4244, -1,4243, 4058, 4057, -1,4245, 4059, 4243, -1, + 4244, 4059, 4246, -1,4059, 4244, 4243, -1,4246, 4247, 4244, -1,4060, 4248, 4249, -1, + 4250, 4249, 4248, -1,4251, 4252, 4253, -1,4253, 4254, 4251, -1,4255, 4256, 4257, -1, + 4256, 4255, 4258, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,1, 2, 3, -1, + 2, 1, 4, -1,5, 6, 7, -1,8, 5, 4, -1,5, 7, 9, -1,3, 10, 1, -1,11, 9, 7, -1,12, 13, + 14, -1,15, 16, 12, -1,17, 18, 19, -1,20, 8, 4, -1,6, 5, 8, -1,21, 15, 12, -1,15, + 22, 23, -1,22, 15, 21, -1,23, 22, 24, -1,24, 22, 25, -1,26, 24, 25, -1,15, 27, 16, -1, + 4, 28, 20, -1,16, 27, 16, -1,29, 30, 31, -1,31, 32, 33, -1,32, 31, 30, -1,34, 35, + 36, -1,37, 38, 33, -1,39, 40, 11, -1,33, 38, 41, -1,39, 38, 40, -1,42, 43, 44, -1, + 43, 42, 45, -1,46, 47, 43, -1,45, 46, 43, -1,43, 48, 49, -1,39, 50, 38, -1,33, 41, + 51, -1,52, 44, 53, -1,50, 41, 38, -1,43, 47, 48, -1,52, 53, 54, -1,42, 44, 52, -1, + 51, 41, 55, -1,56, 57, 25, -1,58, 28, 59, -1,60, 59, 18, -1,60, 18, 17, -1,28, 18, + 59, -1,61, 62, 63, -1,61, 64, 62, -1,63, 65, 66, -1,66, 65, 67, -1,68, 69, 70, -1, + 68, 71, 69, -1,72, 18, 73, -1,65, 63, 62, -1,73, 18, 74, -1,17, 69, 71, -1,17, 71, + 60, -1,70, 69, 75, -1,75, 69, 76, -1,69, 66, 76, -1,77, 73, 74, -1,76, 66, 67, -1, + 78, 49, 48, -1,79, 34, 80, -1,81, 82, 83, -1,82, 78, 83, -1,51, 84, 85, -1,84, 51, + 86, -1,51, 85, 87, -1,88, 89, 90, -1,85, 88, 87, -1,34, 36, 80, -1,91, 92, 93, -1, + 91, 94, 92, -1,83, 34, 79, -1,35, 91, 93, -1,93, 36, 35, -1,91, 90, 89, -1,91, 95, + 94, -1,90, 87, 88, -1,87, 96, 97, -1,96, 87, 90, -1,97, 96, 98, -1,89, 95, 91, -1, + 49, 78, 82, -1,61, 99, 100, -1,99, 56, 100, -1,72, 19, 18, -1,2, 4, 101, -1,5, 101, + 4, -1,20, 28, 102, -1,28, 58, 102, -1,61, 100, 64, -1,99, 57, 56, -1,57, 26, 25, -1, + 27, 42, 103, -1,104, 21, 12, -1,104, 12, 14, -1,16, 27, 103, -1,52, 103, 42, -1,11, + 52, 54, -1,79, 81, 83, -1,51, 55, 86, -1,33, 32, 37, -1,105, 106, 107, -1,106, 107, + 107, -1,108, 106, 105, -1,109, 105, 110, -1,111, 111, 111, -1,112, 113, 110, -1,106, + 108, 114, -1,110, 113, 109, -1,115, 116, 117, -1,113, 117, 109, -1,115, 117, 113, -1, + 115, 118, 119, -1,115, 119, 116, -1,108, 105, 109, -1,120, 121, 122, -1,123, 121, + 124, -1,121, 123, 125, -1,121, 125, 126, -1,126, 122, 121, -1,120, 124, 121, -1,124, + 120, 127, -1,128, 127, 120, -1,129, 128, 120, -1,130, 128, 129, -1,129, 131, 132, -1, + 132, 133, 129, -1,130, 129, 133, -1,129, 120, 131, -1,122, 131, 120, -1,134, 135, + 136, -1,137, 136, 135, -1,135, 134, 138, -1,139, 135, 140, -1,135, 139, 137, -1,141, + 140, 142, -1,140, 135, 138, -1,140, 138, 143, -1,144, 142, 145, -1,142, 144, 146, -1, + 143, 142, 140, -1,139, 147, 137, -1,145, 142, 143, -1,148, 139, 141, -1,147, 139, + 149, -1,149, 139, 148, -1,140, 141, 139, -1,150, 151, 148, -1,149, 148, 151, -1,152, + 148, 141, -1,150, 148, 152, -1,153, 154, 155, -1,146, 155, 154, -1,144, 155, 146, -1, + 154, 156, 152, -1,150, 152, 156, -1,153, 157, 154, -1,156, 154, 157, -1,146, 154, + 152, -1,152, 141, 146, -1,142, 146, 141, -1,158, 159, 160, -1,160, 159, 161, -1,162, + 160, 163, -1,161, 163, 160, -1,160, 162, 158, -1,164, 159, 158, -1,165, 158, 166, -1, + 164, 158, 165, -1,167, 165, 166, -1,168, 158, 169, -1,168, 170, 166, -1,167, 166, + 170, -1,168, 166, 158, -1,162, 169, 158, -1,171, 172, 171, -1,171, 173, 171, -1,174, + 175, 176, -1,177, 175, 174, -1,178, 174, 179, -1,176, 179, 174, -1,174, 178, 177, -1, + 180, 175, 177, -1,181, 177, 182, -1,180, 177, 181, -1,183, 181, 182, -1,184, 177, + 185, -1,184, 186, 182, -1,183, 182, 186, -1,184, 182, 177, -1,178, 185, 177, -1,187, + 188, 189, -1,187, 190, 188, -1,189, 188, 191, -1,192, 189, 193, -1,194, 195, 192, -1, + 192, 196, 194, -1,197, 191, 188, -1,193, 196, 192, -1,198, 199, 200, -1,193, 198, + 200, -1,196, 193, 200, -1,201, 202, 200, -1,199, 201, 200, -1,193, 189, 191, -1,203, + 204, 205, -1,205, 206, 207, -1,207, 208, 205, -1,205, 208, 209, -1,205, 204, 206, -1, + 209, 203, 205, -1,210, 209, 211, -1,203, 209, 210, -1,212, 210, 211, -1,213, 212, + 211, -1,214, 209, 215, -1,214, 216, 211, -1,213, 211, 216, -1,214, 211, 209, -1,208, + 215, 209, -1,217, 218, 217, -1,217, 219, 217, -1,220, 221, 222, -1,223, 224, 222, -1, + 225, 222, 221, -1,223, 222, 225, -1,222, 224, 220, -1,221, 226, 225, -1,227, 225, + 228, -1,228, 226, 229, -1,228, 229, 230, -1,225, 227, 223, -1,230, 227, 228, -1,228, + 225, 226, -1,231, 232, 233, -1,231, 234, 232, -1,234, 231, 235, -1,236, 234, 235, -1, + 237, 238, 239, -1,240, 238, 241, -1,237, 239, 242, -1,238, 237, 243, -1,241, 238, + 243, -1,244, 243, 237, -1,244, 242, 236, -1,245, 234, 236, -1,237, 242, 244, -1,235, + 246, 244, -1,245, 236, 242, -1,246, 243, 244, -1,236, 235, 244, -1,240, 241, 247, -1, + 248, 249, 250, -1,249, 251, 250, -1,252, 253, 251, -1,252, 254, 253, -1,255, 256, + 257, -1,258, 259, 254, -1,252, 260, 254, -1,250, 251, 253, -1,252, 251, 261, -1,256, + 258, 254, -1,257, 260, 262, -1,257, 254, 260, -1,257, 256, 254, -1,262, 255, 257, -1, + 259, 253, 254, -1,261, 260, 252, -1,256, 255, 263, -1,264, 265, 266, -1,267, 268, + 265, -1,264, 269, 265, -1,270, 269, 264, -1,265, 268, 266, -1,269, 271, 272, -1,269, + 270, 271, -1,271, 273, 274, -1,270, 273, 271, -1,267, 269, 272, -1,271, 274, 272, -1, + 269, 267, 265, -1,275, 276, 277, -1,278, 277, 279, -1,278, 280, 281, -1,276, 275, + 282, -1,278, 283, 275, -1,277, 278, 275, -1,280, 278, 279, -1,284, 280, 279, -1,285, + 280, 284, -1,286, 287, 288, -1,288, 287, 280, -1,285, 288, 280, -1,283, 282, 275, -1, + 289, 283, 290, -1,282, 283, 289, -1,291, 289, 290, -1,292, 293, 290, -1,291, 290, + 293, -1,294, 292, 290, -1,295, 290, 283, -1,296, 297, 287, -1,281, 287, 295, -1,286, + 296, 287, -1,280, 287, 281, -1,297, 294, 295, -1,283, 281, 295, -1,296, 298, 297, -1, + 294, 297, 298, -1,287, 297, 295, -1,295, 294, 290, -1,278, 281, 283, -1,299, 300, + 301, -1,302, 302, 302, -1,303, 304, 299, -1,301, 305, 299, -1,306, 306, 306, -1,307, + 301, 300, -1,303, 308, 309, -1,310, 309, 311, -1,312, 313, 311, -1,314, 311, 313, -1, + 300, 299, 304, -1,314, 310, 311, -1,304, 309, 310, -1,304, 303, 309, -1,315, 316, + 317, -1,318, 316, 319, -1,316, 318, 320, -1,316, 320, 321, -1,321, 317, 316, -1,315, + 319, 316, -1,319, 315, 322, -1,323, 322, 315, -1,324, 323, 315, -1,325, 323, 324, -1, + 324, 326, 327, -1,327, 328, 324, -1,325, 324, 328, -1,324, 315, 326, -1,317, 326, + 315, -1,329, 330, 331, -1,332, 331, 330, -1,330, 329, 333, -1,334, 330, 335, -1,330, + 334, 332, -1,336, 335, 337, -1,335, 330, 333, -1,335, 333, 338, -1,339, 337, 340, -1, + 337, 339, 341, -1,338, 337, 335, -1,334, 342, 332, -1,340, 337, 338, -1,343, 334, + 336, -1,342, 334, 344, -1,344, 334, 343, -1,335, 336, 334, -1,345, 346, 343, -1,344, + 343, 346, -1,347, 343, 336, -1,345, 343, 348, -1,349, 350, 351, -1,341, 351, 350, -1, + 339, 351, 341, -1,350, 348, 347, -1,343, 347, 348, -1,349, 352, 350, -1,348, 350, + 352, -1,341, 350, 347, -1,347, 336, 341, -1,337, 341, 336, -1,353, 354, 355, -1,356, + 357, 355, -1,358, 355, 354, -1,356, 355, 358, -1,355, 357, 353, -1,354, 359, 358, -1, + 360, 358, 361, -1,361, 359, 362, -1,361, 362, 363, -1,358, 360, 356, -1,363, 360, + 361, -1,361, 358, 359, -1,364, 364, 365, -1,364, 364, 366, -1,367, 368, 369, -1,369, + 368, 370, -1,371, 369, 372, -1,370, 372, 369, -1,369, 371, 367, -1,373, 368, 367, -1, + 374, 367, 375, -1,373, 367, 374, -1,376, 374, 375, -1,377, 367, 378, -1,377, 379, + 375, -1,376, 375, 379, -1,377, 375, 367, -1,371, 378, 367, -1,380, 381, 382, -1,383, + 381, 380, -1,384, 380, 385, -1,382, 385, 380, -1,380, 384, 383, -1,386, 381, 383, -1, + 387, 383, 388, -1,386, 383, 387, -1,389, 387, 388, -1,390, 383, 391, -1,390, 392, + 388, -1,389, 388, 392, -1,390, 388, 383, -1,384, 391, 383, -1,393, 394, 395, -1,396, + 397, 398, -1,395, 399, 396, -1,395, 107, 393, -1,393, 107, 107, -1,394, 393, 400, -1, + 401, 397, 396, -1,402, 401, 399, -1,402, 403, 404, -1,403, 402, 405, -1,399, 395, + 394, -1,402, 406, 405, -1,406, 402, 399, -1,401, 396, 399, -1,407, 408, 409, -1,409, + 410, 411, -1,411, 412, 409, -1,409, 412, 413, -1,409, 408, 410, -1,413, 407, 409, -1, + 414, 413, 415, -1,407, 413, 414, -1,416, 414, 415, -1,417, 416, 415, -1,418, 413, + 419, -1,418, 420, 415, -1,417, 415, 420, -1,418, 415, 413, -1,412, 419, 413, -1,421, + 421, 422, -1,421, 421, 423, -1,424, 425, 426, -1,427, 428, 426, -1,429, 426, 425, -1, + 427, 426, 429, -1,426, 428, 424, -1,425, 430, 429, -1,431, 429, 432, -1,432, 430, + 433, -1,432, 433, 434, -1,429, 431, 427, -1,434, 431, 432, -1,432, 429, 430, -1,435, + 436, 437, -1,436, 438, 437, -1,439, 440, 438, -1,439, 441, 440, -1,442, 443, 444, -1, + 445, 446, 441, -1,439, 447, 441, -1,437, 438, 440, -1,439, 438, 448, -1,443, 445, + 441, -1,444, 447, 449, -1,444, 441, 447, -1,444, 443, 441, -1,449, 442, 444, -1,446, + 440, 441, -1,448, 447, 439, -1,443, 442, 450, -1,451, 452, 453, -1,453, 454, 451, -1, + 452, 455, 453, -1,456, 457, 452, -1,458, 459, 456, -1,456, 460, 458, -1,452, 460, + 456, -1,461, 462, 463, -1,464, 462, 465, -1,462, 464, 463, -1,466, 464, 465, -1,467, + 464, 466, -1,467, 468, 469, -1,467, 469, 470, -1,464, 467, 470, -1,471, 472, 473, -1, + 450, 473, 472, -1,474, 460, 475, -1,460, 476, 475, -1,474, 458, 460, -1,450, 477, + 473, -1,476, 460, 478, -1,478, 460, 450, -1,460, 477, 450, -1,473, 477, 479, -1,480, + 481, 470, -1,470, 482, 480, -1,470, 469, 482, -1,481, 483, 470, -1,471, 473, 484, -1, + 484, 470, 471, -1,484, 473, 485, -1,452, 457, 455, -1,471, 470, 483, -1,473, 479, + 485, -1,486, 487, 488, -1,486, 489, 487, -1,489, 486, 490, -1,491, 489, 490, -1,492, + 493, 494, -1,495, 493, 496, -1,492, 494, 497, -1,493, 492, 498, -1,496, 493, 498, -1, + 499, 498, 492, -1,499, 497, 491, -1,500, 489, 491, -1,492, 497, 499, -1,490, 501, + 499, -1,500, 491, 497, -1,501, 498, 499, -1,491, 490, 499, -1,495, 496, 502, -1,503, + 504, 505, -1,506, 504, 507, -1,508, 507, 504, -1,504, 506, 505, -1,504, 503, 508, -1, + 509, 508, 510, -1,510, 508, 503, -1,509, 510, 511, -1,512, 509, 513, -1,509, 512, + 508, -1,513, 509, 511, -1,508, 512, 507, -1,514, 514, 514, -1,514, 514, 514, -1,515, + 516, 517, -1,516, 515, 518, -1,517, 519, 520, -1,519, 517, 516, -1,519, 516, 521, -1, + 516, 518, 521, -1,522, 523, 519, -1,523, 524, 525, -1,524, 523, 522, -1,523, 520, + 519, -1,520, 523, 525, -1,519, 521, 522, -1,526, 526, 526, -1,526, 526, 526, -1,527, + 527, 527, -1,527, 527, 527, -1,524, 528, 529, -1,529, 530, 524, -1,531, 530, 529, -1, + 528, 532, 529, -1,529, 532, 531, -1,531, 533, 534, -1,533, 531, 532, -1,534, 535, + 536, -1,535, 534, 533, -1,531, 534, 537, -1,536, 537, 534, -1,531, 537, 530, -1,538, + 538, 538, -1,538, 538, 538, -1,539, 540, 541, -1,542, 541, 543, -1,544, 543, 541, -1, + 541, 542, 539, -1,541, 540, 544, -1,545, 544, 546, -1,546, 544, 540, -1,545, 546, + 547, -1,548, 545, 549, -1,545, 548, 544, -1,549, 545, 547, -1,544, 548, 543, -1,550, + 551, 552, -1,553, 554, 552, -1,550, 552, 554, -1,555, 556, 557, -1,558, 552, 551, -1, + 558, 551, 557, -1,553, 552, 559, -1,560, 561, 562, -1,563, 563, 563, -1,560, 562, + 564, -1,559, 565, 566, -1,562, 566, 567, -1,566, 562, 559, -1,559, 562, 561, -1,553, + 559, 561, -1,557, 556, 558, -1,568, 569, 570, -1,569, 568, 571, -1,570, 569, 572, -1, + 573, 574, 575, -1,571, 575, 569, -1,575, 571, 573, -1,576, 567, 577, -1,577, 567, + 578, -1,577, 579, 576, -1,578, 567, 580, -1,581, 572, 582, -1,572, 581, 570, -1,581, + 583, 576, -1,583, 581, 582, -1,581, 576, 579, -1,580, 567, 566, -1,584, 585, 586, -1, + 585, 584, 587, -1,584, 586, 588, -1,587, 584, 589, -1,588, 589, 584, -1,586, 590, + 588, -1,591, 592, 593, -1,586, 591, 590, -1,586, 585, 592, -1,591, 594, 590, -1,594, + 591, 593, -1,592, 591, 586, -1,595, 596, 597, -1,598, 595, 597, -1,595, 598, 599, -1, + 597, 596, 600, -1,596, 601, 600, -1,602, 603, 604, -1,603, 600, 601, -1,605, 602, + 604, -1,598, 597, 606, -1,600, 602, 607, -1,602, 600, 603, -1,608, 607, 602, -1,608, + 602, 605, -1,600, 607, 606, -1,606, 597, 600, -1,605, 604, 609, -1,610, 611, 612, -1, + 605, 610, 613, -1,610, 605, 611, -1,611, 605, 609, -1,614, 612, 615, -1,615, 612, + 616, -1,615, 617, 614, -1,614, 610, 612, -1,618, 617, 619, -1,605, 613, 524, -1,610, + 614, 620, -1,613, 610, 620, -1,614, 621, 620, -1,621, 618, 622, -1,618, 621, 614, -1, + 622, 618, 619, -1,614, 617, 618, -1,605, 524, 608, -1,623, 624, 625, -1,626, 627, + 628, -1,624, 627, 626, -1,629, 623, 630, -1,629, 631, 632, -1,631, 629, 630, -1,633, + 631, 630, -1,630, 625, 633, -1,625, 626, 634, -1,626, 625, 624, -1,635, 634, 626, -1, + 635, 626, 628, -1,625, 634, 633, -1,630, 623, 625, -1,628, 627, 524, -1,636, 637, + 638, -1,628, 638, 639, -1,638, 628, 636, -1,638, 637, 640, -1,636, 628, 524, -1,640, + 637, 641, -1,642, 641, 643, -1,628, 639, 644, -1,638, 640, 645, -1,639, 638, 645, -1, + 640, 646, 645, -1,642, 647, 648, -1,647, 642, 643, -1,646, 640, 648, -1,648, 640, + 642, -1,640, 641, 642, -1,628, 644, 635, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 650, 651, 652, -1,653, 652, 654, -1,650, 652, 655, -1,653, 655, 652, -1,652, 651, + 654, -1,656, 657, 658, -1,654, 659, 653, -1,659, 654, 658, -1,658, 660, 659, -1,660, + 658, 657, -1,654, 656, 658, -1,656, 654, 651, -1,661, 662, 663, -1,664, 665, 663, -1, + 661, 663, 665, -1,666, 663, 667, -1,666, 668, 664, -1,669, 668, 666, -1,666, 664, + 663, -1,670, 664, 668, -1,671, 670, 672, -1,673, 674, 672, -1,671, 672, 674, -1,675, + 676, 673, -1,672, 675, 673, -1,677, 676, 675, -1,670, 668, 672, -1,678, 679, 680, -1, + 679, 678, 681, -1,679, 682, 680, -1,681, 667, 663, -1,683, 682, 684, -1,683, 684, + 685, -1,682, 683, 680, -1,686, 683, 685, -1,687, 688, 689, -1,686, 688, 683, -1,690, + 689, 691, -1,689, 690, 687, -1,692, 691, 693, -1,691, 692, 690, -1,686, 689, 688, -1, + 681, 663, 679, -1,694, 676, 677, -1,695, 696, 697, -1,695, 698, 696, -1,695, 698, + 698, -1,698, 695, 698, -1,699, 700, 699, -1,701, 699, 700, -1,701, 700, 702, -1,703, + 704, 705, -1,706, 703, 707, -1,704, 703, 706, -1,708, 706, 709, -1,710, 710, 710, -1, + 709, 706, 707, -1,709, 711, 708, -1,712, 713, 714, -1,713, 715, 715, -1,713, 716, + 717, -1,708, 711, 713, -1,718, 708, 713, -1,719, 720, 721, -1,717, 722, 718, -1,720, + 723, 721, -1,723, 724, 721, -1,725, 719, 722, -1,717, 726, 722, -1,726, 725, 722, -1, + 727, 727, 727, -1,712, 726, 717, -1,719, 728, 729, -1,719, 725, 728, -1,720, 719, + 729, -1,713, 717, 718, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,730, 731, 732, -1,733, 734, 735, -1,730, 735, 734, -1,736, 734, 733, -1, + 737, 733, 735, -1,735, 730, 732, -1,738, 739, 733, -1,740, 736, 741, -1,742, 743, + 744, -1,745, 742, 746, -1,743, 740, 747, -1,745, 748, 749, -1,750, 751, 733, -1,735, + 732, 750, -1,752, 738, 751, -1,731, 753, 732, -1,754, 747, 741, -1,733, 755, 741, -1, + 747, 756, 743, -1,744, 743, 756, -1,746, 742, 757, -1,744, 757, 742, -1,758, 756, + 759, -1,760, 759, 760, -1,748, 745, 746, -1,752, 756, 747, -1,747, 761, 738, -1,749, + 762, 745, -1,763, 764, 765, -1,766, 767, 764, -1,763, 765, 768, -1,749, 768, 765, -1, + 763, 769, 764, -1,766, 764, 769, -1,770, 767, 766, -1,762, 749, 765, -1,771, 772, + 773, -1,774, 775, 776, -1,777, 778, 779, -1,780, 777, 774, -1,781, 779, 782, -1,767, + 783, 775, -1,783, 767, 770, -1,784, 768, 749, -1,776, 783, 785, -1,786, 787, 786, -1, + 788, 789, 787, -1,790, 773, 788, -1,790, 791, 771, -1,778, 780, 792, -1,777, 793, + 778, -1,794, 781, 782, -1,782, 779, 778, -1,791, 795, 793, -1,782, 778, 795, -1,776, + 796, 780, -1,793, 797, 771, -1,748, 784, 749, -1,798, 799, 800, -1,801, 802, 803, -1, + 798, 803, 804, -1,805, 804, 806, -1,807, 806, 803, -1,803, 798, 800, -1,808, 809, + 801, -1,810, 805, 811, -1,812, 813, 814, -1,815, 812, 816, -1,813, 810, 817, -1,815, + 818, 819, -1,820, 800, 799, -1,806, 821, 811, -1,800, 822, 803, -1,823, 801, 822, -1, + 808, 823, 824, -1,825, 817, 811, -1,817, 826, 813, -1,814, 813, 826, -1,816, 812, + 827, -1,814, 827, 812, -1,828, 829, 830, -1,831, 830, 831, -1,818, 815, 816, -1,824, + 829, 817, -1,817, 832, 808, -1,819, 833, 815, -1,834, 835, 836, -1,837, 838, 835, -1, + 834, 836, 839, -1,819, 839, 836, -1,834, 840, 835, -1,837, 835, 840, -1,841, 838, + 837, -1,833, 819, 836, -1,842, 843, 844, -1,845, 846, 847, -1,848, 849, 850, -1,851, + 848, 845, -1,852, 850, 853, -1,838, 854, 846, -1,854, 838, 841, -1,855, 839, 819, -1, + 847, 854, 856, -1,857, 858, 857, -1,859, 860, 858, -1,861, 844, 859, -1,861, 862, + 842, -1,849, 851, 863, -1,864, 865, 849, -1,866, 852, 853, -1,853, 850, 849, -1,862, + 867, 865, -1,853, 849, 867, -1,847, 868, 851, -1,865, 869, 842, -1,818, 855, 819, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,870, 871, 871, -1,871, 871, 870, -1,870, 872, + 870, -1,871, 870, 870, -1,873, 874, 875, -1,876, 877, 873, -1,875, 874, 878, -1,875, + 879, 873, -1,880, 881, 877, -1,876, 880, 877, -1,879, 876, 873, -1,877, 881, 882, -1, + 883, 884, 885, -1,886, 887, 884, -1,882, 881, 885, -1,883, 888, 886, -1,888, 889, + 886, -1,889, 888, 890, -1,889, 890, 891, -1,883, 886, 884, -1,881, 883, 885, -1,892, + 893, 894, -1,895, 896, 897, -1,892, 897, 896, -1,894, 897, 892, -1,649, 898, 895, -1, + 649, 649, 895, -1,897, 649, 895, -1,895, 898, 899, -1,900, 901, 902, -1,891, 902, + 889, -1,902, 891, 900, -1,901, 903, 902, -1,903, 904, 902, -1,898, 903, 901, -1,905, + 906, 902, -1,905, 902, 904, -1,899, 898, 901, -1,907, 908, 909, -1,910, 911, 912, -1, + 911, 910, 909, -1,912, 911, 913, -1,910, 912, 914, -1,907, 909, 910, -1,912, 913, + 915, -1,915, 913, 916, -1,917, 918, 919, -1,920, 919, 921, -1,922, 916, 918, -1,923, + 920, 921, -1,908, 907, 924, -1,915, 925, 912, -1,910, 914, 907, -1,925, 914, 912, -1, + 925, 915, 926, -1,915, 922, 926, -1,922, 917, 927, -1,917, 922, 918, -1,920, 917, + 919, -1,917, 920, 928, -1,917, 928, 927, -1,928, 920, 929, -1,929, 920, 923, -1,922, + 927, 926, -1,915, 916, 922, -1,923, 921, 930, -1,931, 932, 933, -1,932, 934, 935, -1, + 923, 933, 936, -1,933, 923, 931, -1,935, 933, 932, -1,933, 935, 937, -1,934, 938, + 935, -1,931, 923, 930, -1,938, 939, 940, -1,940, 939, 941, -1,942, 943, 944, -1,941, + 944, 945, -1,946, 942, 947, -1,939, 938, 934, -1,935, 938, 948, -1,938, 949, 948, -1, + 948, 937, 935, -1,949, 940, 950, -1,936, 833, 923, -1,933, 937, 936, -1,949, 938, + 940, -1,951, 945, 943, -1,943, 945, 944, -1,946, 947, 952, -1,943, 942, 946, -1,951, + 950, 945, -1,946, 951, 943, -1,945, 950, 940, -1,940, 941, 945, -1,923, 833, 929, -1, + 953, 954, 955, -1,956, 957, 958, -1,957, 956, 955, -1,958, 957, 959, -1,956, 958, + 960, -1,953, 955, 956, -1,958, 959, 961, -1,961, 959, 962, -1,963, 964, 965, -1,966, + 965, 967, -1,968, 962, 964, -1,969, 966, 967, -1,954, 953, 970, -1,961, 971, 958, -1, + 956, 960, 953, -1,971, 960, 958, -1,971, 961, 972, -1,961, 968, 972, -1,968, 963, + 973, -1,963, 968, 964, -1,966, 963, 965, -1,963, 966, 974, -1,963, 974, 973, -1,974, + 966, 975, -1,975, 966, 969, -1,968, 973, 972, -1,961, 962, 968, -1,969, 967, 976, -1, + 977, 978, 979, -1,978, 980, 981, -1,969, 979, 982, -1,979, 969, 977, -1,981, 979, + 978, -1,979, 981, 983, -1,980, 984, 981, -1,977, 969, 976, -1,984, 985, 986, -1,986, + 985, 987, -1,988, 989, 990, -1,987, 990, 991, -1,992, 988, 993, -1,985, 984, 980, -1, + 981, 984, 994, -1,984, 995, 994, -1,994, 983, 981, -1,995, 986, 996, -1,982, 997, + 969, -1,979, 983, 982, -1,995, 984, 986, -1,998, 991, 989, -1,989, 991, 990, -1,992, + 993, 999, -1,989, 988, 992, -1,998, 996, 991, -1,992, 998, 989, -1,991, 996, 986, -1, + 986, 987, 991, -1,969, 997, 975, -1,1000, 1001, 1002, -1,1003, 1004, 1002, -1,1002, + 1001, 1003, -1,1005, 1006, 1001, -1,1003, 1007, 1004, -1,1008, 1005, 1009, -1,1006, + 1003, 1001, -1,1005, 1001, 1009, -1,1004, 1007, 1010, -1,1011, 1012, 1013, -1,1014, + 1015, 1012, -1,1013, 1010, 1016, -1,1016, 1011, 1013, -1,1014, 1017, 1015, -1,1018, + 1014, 1012, -1,1011, 1018, 1012, -1,1010, 1007, 1016, -1,1019, 1009, 1020, -1,1009, + 1019, 1008, -1,1020, 1021, 1022, -1,1020, 1009, 1023, -1,1024, 1025, 1023, -1,1023, + 1026, 1027, -1,1026, 1023, 1025, -1,1021, 1020, 1023, -1,1023, 1027, 1021, -1,1028, + 1029, 1030, -1,1031, 1032, 1033, -1,1028, 1030, 1032, -1,1021, 649, 1029, -1,1030, + 1033, 1032, -1,649, 1030, 1029, -1,649, 649, 1029, -1,1029, 1022, 1021, -1,1034, + 1034, 1035, -1,1034, 1034, 1036, -1,1037, 1038, 1039, -1,1039, 1040, 1037, -1,1041, + 1040, 1039, -1,1038, 1042, 1039, -1,1039, 1042, 1041, -1,1041, 517, 1043, -1,517, + 1041, 1042, -1,1043, 1044, 1045, -1,1044, 1043, 517, -1,1041, 1043, 1046, -1,1045, + 1046, 1043, -1,1041, 1046, 1040, -1,1047, 1048, 1047, -1,1047, 1049, 1047, -1,1050, + 1051, 1052, -1,1053, 1052, 1054, -1,1055, 1054, 1052, -1,1052, 1053, 1050, -1,1052, + 1051, 1055, -1,1056, 1055, 510, -1,510, 1055, 1051, -1,1056, 510, 1057, -1,1058, + 1056, 1059, -1,1056, 1058, 1055, -1,1059, 1056, 1057, -1,1055, 1058, 1054, -1,1060, + 1061, 1060, -1,1060, 1062, 1060, -1,1063, 1064, 1065, -1,1064, 1063, 1066, -1,1065, + 1067, 1068, -1,1067, 1065, 1064, -1,1067, 1064, 1069, -1,1064, 1066, 1069, -1,530, + 1070, 1067, -1,1070, 1071, 1072, -1,1071, 1070, 530, -1,1070, 1068, 1067, -1,1068, + 1070, 1072, -1,1067, 1069, 530, -1,1073, 1073, 1074, -1,1073, 1073, 1075, -1,1076, + 1077, 1078, -1,1079, 1077, 1080, -1,1081, 1080, 1077, -1,1077, 1079, 1078, -1,1077, + 1076, 1081, -1,1082, 1081, 1083, -1,1083, 1081, 1076, -1,1082, 1083, 1084, -1,1085, + 1082, 1086, -1,1082, 1085, 1081, -1,1086, 1082, 1084, -1,1081, 1085, 1080, -1,1087, + 1088, 1089, -1,1088, 1087, 1090, -1,1087, 1089, 1091, -1,1090, 1087, 1092, -1,1091, + 1092, 1087, -1,1089, 1093, 1091, -1,1094, 1095, 1096, -1,1089, 1094, 1093, -1,1089, + 1088, 1095, -1,1094, 1097, 1093, -1,1097, 1094, 1096, -1,1095, 1094, 1089, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,1098, 1099, 1100, -1,1101, 1100, 1102, -1,1098, + 1100, 1103, -1,1101, 1103, 1100, -1,1100, 1099, 1102, -1,1104, 1105, 1106, -1,1102, + 1107, 1101, -1,1107, 1102, 1106, -1,1106, 1108, 1107, -1,1108, 1106, 1105, -1,1102, + 1104, 1106, -1,1104, 1102, 1099, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,1109, 1110, + 1111, -1,1112, 1111, 1113, -1,1112, 1114, 1115, -1,1110, 1109, 1116, -1,1112, 1117, + 1109, -1,1111, 1112, 1109, -1,1114, 1112, 1113, -1,1118, 1114, 1113, -1,1119, 1114, + 1118, -1,1120, 1121, 1122, -1,1122, 1121, 1114, -1,1119, 1122, 1114, -1,1117, 1116, + 1109, -1,1123, 1117, 1124, -1,1116, 1117, 1123, -1,1125, 1123, 1124, -1,1126, 1127, + 1124, -1,1125, 1124, 1127, -1,1128, 1126, 1124, -1,1129, 1124, 1117, -1,1130, 1131, + 1121, -1,1115, 1121, 1129, -1,1120, 1130, 1121, -1,1114, 1121, 1115, -1,1131, 1128, + 1129, -1,1117, 1115, 1129, -1,1130, 1132, 1131, -1,1128, 1131, 1132, -1,1121, 1131, + 1129, -1,1129, 1128, 1124, -1,1112, 1115, 1117, -1,1133, 1134, 1135, -1,1135, 1136, + 1137, -1,1136, 1135, 1134, -1,1138, 1139, 1140, -1,1141, 1139, 1138, -1,833, 833, + 1141, -1,1139, 1141, 833, -1,1142, 1143, 1144, -1,1144, 1145, 1146, -1,1145, 1144, + 1143, -1,107, 1146, 107, -1,107, 107, 107, -1,107, 107, 107, -1,0, 1147, 0, -1,1148, + 0, 1147, -1,649, 649, 649, -1,1147, 1149, 1148, -1,1148, 0, 0, -1,1147, 0, 1150, -1, + 1148, 1150, 0, -1,0, 0, 1147, -1,1149, 1147, 1150, -1,1149, 1149, 1150, -1,1151, + 1152, 1153, -1,1154, 1152, 1151, -1,1155, 1151, 1156, -1,1151, 1155, 1154, -1,1153, + 1156, 1151, -1,1153, 1152, 1157, -1,1158, 1153, 1159, -1,1159, 1153, 1157, -1,1158, + 1159, 1160, -1,1161, 1153, 1162, -1,1158, 1163, 1162, -1,1163, 1158, 1160, -1,1153, + 1158, 1162, -1,1153, 1161, 1156, -1,1164, 1165, 1166, -1,1166, 1167, 1168, -1,1166, + 1168, 1164, -1,1169, 1170, 1171, -1,1172, 1170, 1169, -1,1173, 1169, 1174, -1,1169, + 1173, 1172, -1,1171, 1174, 1169, -1,1171, 1170, 1175, -1,1176, 1171, 1177, -1,1177, + 1171, 1175, -1,1176, 1177, 1178, -1,1179, 1171, 1180, -1,1176, 1181, 1180, -1,1181, + 1176, 1178, -1,1171, 1176, 1180, -1,1171, 1179, 1174, -1,1182, 1182, 1182, -1,1182, + 1182, 1182, -1,1183, 1184, 1185, -1,1186, 1187, 1185, -1,1183, 1185, 1188, -1,1185, + 1187, 1188, -1,1189, 1187, 1186, -1,1185, 1184, 1186, -1,1190, 1191, 1192, -1,1193, + 1190, 1186, -1,1186, 1194, 1189, -1,1194, 1186, 1192, -1,1192, 1195, 1194, -1,1195, + 1192, 1191, -1,1186, 1190, 1192, -1,1193, 1186, 1184, -1,1196, 1197, 1198, -1,1198, + 1199, 1200, -1,1198, 1200, 1196, -1,1201, 1202, 1203, -1,1204, 1205, 1203, -1,1201, + 1203, 1206, -1,1203, 1205, 1206, -1,1207, 1205, 1204, -1,1203, 1202, 1204, -1,1208, + 1209, 1210, -1,1211, 1208, 1204, -1,1204, 1212, 1207, -1,1212, 1204, 1210, -1,1210, + 1213, 1212, -1,1213, 1210, 1209, -1,1204, 1208, 1210, -1,1211, 1204, 1202, -1,833, + 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1, + 833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, + 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, + 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,1214, 1215, 1216, -1, + 1217, 1215, 1214, -1,1218, 1214, 1219, -1,1214, 1218, 1217, -1,1216, 1219, 1214, -1, + 1216, 1215, 1220, -1,1221, 1216, 1222, -1,1222, 1216, 1220, -1,1221, 1222, 1223, -1, + 1224, 1216, 1225, -1,1221, 1226, 1225, -1,1226, 1221, 1223, -1,1216, 1221, 1225, -1, + 1216, 1224, 1219, -1,1227, 1228, 1229, -1,1229, 1230, 1231, -1,1229, 1231, 1227, -1, + 1232, 1233, 1234, -1,1235, 1233, 1232, -1,1236, 1232, 1237, -1,1232, 1236, 1235, -1, + 1234, 1237, 1232, -1,1234, 1233, 1238, -1,1239, 1234, 1240, -1,1240, 1234, 1238, -1, + 1239, 1240, 1241, -1,1242, 1234, 1243, -1,1239, 1244, 1243, -1,1244, 1239, 1241, -1, + 1234, 1239, 1243, -1,1234, 1242, 1237, -1,1182, 1182, 1182, -1,649, 649, 649, -1, + 1245, 1246, 1247, -1,1248, 1249, 1247, -1,1245, 1247, 1250, -1,1247, 1249, 1250, -1, + 1251, 1249, 1248, -1,1247, 1246, 1248, -1,1252, 1253, 1254, -1,1255, 1252, 1248, -1, + 1248, 1256, 1251, -1,1256, 1248, 1254, -1,1254, 1257, 1256, -1,1257, 1254, 1253, -1, + 1248, 1252, 1254, -1,1255, 1248, 1246, -1,1258, 1259, 1260, -1,1260, 1261, 1262, -1, + 1260, 1262, 1258, -1,1263, 1264, 1265, -1,1266, 1267, 1265, -1,1263, 1265, 1268, -1, + 1265, 1267, 1268, -1,1269, 1267, 1266, -1,1265, 1264, 1266, -1,1270, 1271, 1272, -1, + 1273, 1270, 1266, -1,1266, 1274, 1269, -1,1274, 1266, 1272, -1,1272, 1275, 1274, -1, + 1275, 1272, 1271, -1,1266, 1270, 1272, -1,1273, 1266, 1264, -1,833, 833, 833, -1, + 833, 833, 833, -1,833, 833, 833, -1,649, 649, 649, -1,833, 833, 833, -1,833, 833, + 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,833, + 833, 833, -1,833, 833, 833, -1,649, 649, 649, -1,833, 833, 833, -1,833, 833, 833, -1, + 833, 833, 833, -1,833, 833, 833, -1,833, 833, 833, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,1276, 1277, 1278, -1,1279, 1278, 1280, -1,1281, 1282, 1283, -1, + 1282, 1284, 1283, -1,1279, 1285, 1284, -1,1280, 1278, 1277, -1,1280, 1285, 1279, -1, + 1285, 1280, 1286, -1,1287, 1286, 1280, -1,1280, 1277, 1287, -1,1285, 1286, 1288, -1, + 1283, 1289, 1281, -1,1289, 1283, 1290, -1,1290, 1283, 1285, -1,1285, 1288, 1290, -1, + 1285, 1283, 1284, -1,1291, 1292, 1293, -1,1293, 1294, 1295, -1,1291, 1295, 1296, -1, + 1297, 1295, 1294, -1,1294, 1298, 1297, -1,1293, 1295, 1291, -1,1296, 1295, 1297, -1, + 1299, 1300, 1301, -1,1301, 1302, 1299, -1,1301, 1296, 1303, -1,1304, 1302, 1301, -1, + 1301, 1305, 1304, -1,1301, 1300, 1296, -1,1300, 1291, 1296, -1,1303, 1296, 1297, -1, + 1306, 1298, 1307, -1,1298, 1303, 1297, -1,1308, 1303, 1306, -1,1306, 1303, 1298, -1, + 1298, 1309, 1307, -1,1298, 1294, 1309, -1,1307, 1310, 1306, -1,1308, 1306, 1310, -1, + 1305, 1308, 1311, -1,1308, 1305, 1303, -1,1311, 1312, 1305, -1,1308, 1313, 1311, -1, + 1305, 1312, 1304, -1,1313, 1314, 1311, -1,1308, 1310, 1313, -1,1303, 1305, 1301, -1, + 1302, 1315, 1316, -1,1317, 1315, 1316, -1,1316, 1318, 1302, -1,1315, 1318, 1316, -1, + 1319, 1315, 1317, -1,1316, 1318, 1318, -1,1316, 1315, 1317, -1,1317, 1319, 1320, -1, + 1319, 1317, 1315, -1,1321, 1317, 1320, -1,1321, 1320, 1322, -1,1323, 1321, 1324, -1, + 1321, 1323, 1317, -1,1325, 1325, 1325, -1,1321, 1322, 1322, -1,1317, 1323, 1319, -1, + 1326, 1327, 1328, -1,1329, 1326, 1328, -1,1326, 1327, 1327, -1,1330, 1331, 1326, -1, + 1329, 1328, 1332, -1,1333, 1334, 1335, -1,1336, 1336, 1337, -1,1336, 1337, 1335, -1, + 1333, 1335, 1337, -1,1330, 1329, 1338, -1,1329, 1330, 1326, -1,1338, 1329, 1339, -1, + 1333, 1340, 1338, -1,1333, 1339, 1334, -1,1340, 1333, 1337, -1,1333, 1338, 1339, -1, + 1329, 1334, 1339, -1,1334, 1329, 1332, -1,1341, 1342, 1343, -1,1344, 1342, 1345, -1, + 1346, 1344, 1347, -1,1344, 1346, 1343, -1,1345, 1347, 1344, -1,1343, 1342, 1344, -1, + 1345, 1342, 1348, -1,1349, 1350, 1345, -1,1349, 1345, 1348, -1,1351, 1350, 1349, -1, + 1352, 1350, 1351, -1,1353, 1350, 1354, -1,1350, 1353, 1345, -1,1354, 1350, 1355, -1, + 1350, 1352, 1355, -1,1345, 1353, 1347, -1,1356, 1357, 1358, -1,1359, 1360, 1358, -1, + 1358, 1361, 1356, -1,1362, 1361, 1358, -1,1363, 1361, 1364, -1,1359, 1358, 1357, -1, + 1356, 1361, 1365, -1,1366, 1365, 1363, -1,1367, 1363, 1368, -1,1363, 1367, 1366, -1, + 1369, 1370, 1368, -1,1369, 1368, 1363, -1,1365, 1361, 1363, -1,1362, 1358, 1360, -1, + 1362, 1371, 1372, -1,1371, 1362, 1360, -1,1373, 1364, 1372, -1,1372, 1364, 1362, -1, + 1371, 1374, 1372, -1,1362, 1364, 1361, -1,1374, 1375, 1372, -1,1373, 1372, 1375, -1, + 1369, 1373, 1376, -1,1373, 1369, 1364, -1,1377, 1376, 1378, -1,1376, 1377, 1369, -1, + 1373, 1379, 1376, -1,1369, 1377, 1370, -1,1380, 1378, 1376, -1,1380, 1376, 1379, -1, + 1373, 1375, 1379, -1,1364, 1369, 1363, -1,1381, 1382, 1383, -1,1384, 1385, 1383, -1, + 1385, 1384, 1386, -1,1381, 1383, 1385, -1,1387, 1388, 1389, -1,1381, 1390, 1382, -1, + 1388, 1390, 1389, -1,1390, 1388, 1382, -1,1385, 1386, 1391, -1,1385, 1392, 1381, -1, + 1392, 1385, 1391, -1,1381, 1393, 1390, -1,1381, 1392, 1393, -1,1393, 1394, 1390, -1, + 1390, 1394, 1389, -1,1386, 1395, 1391, -1,1396, 1397, 1398, -1,1399, 1400, 1398, -1, + 1398, 1400, 1396, -1,1401, 1398, 1397, -1,1399, 1398, 1401, -1,1397, 1402, 1401, -1, + 1403, 1403, 1403, -1,1404, 1405, 1405, -1,1406, 1401, 1404, -1,1399, 1401, 1406, -1, + 1405, 1406, 1404, -1,1404, 1401, 1402, -1,1407, 1408, 1409, -1,1410, 1408, 1411, -1, + 1408, 1412, 1409, -1,1412, 1408, 1410, -1,1412, 1410, 1413, -1,1408, 1407, 1411, -1, + 1414, 1415, 1416, -1,1414, 1416, 1410, -1,1417, 1417, 1417, -1,1413, 1410, 1416, -1, + 1415, 1416, 1415, -1,1410, 1411, 1414, -1,1418, 1419, 1420, -1,1418, 1420, 1421, -1, + 1422, 1421, 1423, -1,1423, 1421, 1420, -1,1422, 1423, 1424, -1,1418, 1421, 1425, -1, + 1421, 1426, 1425, -1,1425, 1419, 1418, -1,1422, 1427, 1428, -1,1427, 1422, 1424, -1, + 1428, 1427, 1429, -1,1422, 1428, 1426, -1,1422, 1426, 1421, -1,1424, 1430, 1427, -1, + 1431, 1430, 1432, -1,1431, 1432, 649, -1,1433, 1427, 1434, -1,1434, 1430, 1431, -1, + 1433, 1435, 1427, -1,1436, 1437, 649, -1,1437, 1436, 1429, -1,1438, 1429, 1427, -1, + 1437, 1429, 1438, -1,1439, 1438, 1427, -1,1435, 1439, 1427, -1,1430, 1434, 1427, -1, + 1440, 1441, 1442, -1,1442, 1441, 1443, -1,1440, 1442, 1444, -1,1445, 1442, 1443, -1, + 1442, 1445, 1444, -1,1441, 1446, 1443, -1,1447, 1446, 1448, -1,1443, 1449, 1445, -1, + 1443, 1447, 1449, -1,1450, 1449, 1447, -1,1447, 1448, 1450, -1,1447, 1443, 1446, -1, + 1451, 1452, 1453, -1,1454, 1452, 1455, -1,1454, 1455, 1454, -1,1455, 1452, 1451, -1, + 1456, 1457, 1458, -1,1459, 1457, 1456, -1,1459, 1460, 1460, -1,1459, 1460, 1457, -1, + 1458, 1457, 1460, -1,1451, 1456, 1458, -1,1456, 1451, 1453, -1,833, 833, 833, -1, + 833, 833, 833, -1,1461, 1461, 1462, -1,1462, 1461, 1463, -1,1462, 1464, 1464, -1, + 1464, 1462, 1463, -1,1464, 1463, 1462, -1,1462, 1463, 1461, -1,1465, 1466, 1467, -1, + 1466, 1465, 1468, -1,1465, 1467, 1469, -1,1468, 1465, 1470, -1,1469, 1470, 1465, -1, + 1467, 1471, 1469, -1,1472, 1473, 1467, -1,1472, 1474, 1473, -1,1471, 1473, 1475, -1, + 1471, 1467, 1473, -1,1475, 1473, 1474, -1,1467, 1466, 1472, -1,833, 833, 833, -1, + 1475, 833, 833, -1,1476, 1477, 1478, -1,1479, 1478, 1480, -1,1481, 1476, 1482, -1, + 1476, 1481, 1477, -1,1483, 1476, 1479, -1,1476, 1483, 1482, -1,1476, 1478, 1479, -1, + 1480, 1484, 1479, -1,1485, 1479, 1486, -1,1486, 1484, 1487, -1,1486, 1487, 1488, -1, + 1488, 1487, 1489, -1,1479, 1485, 1483, -1,1488, 1485, 1486, -1,107, 107, 107, -1, + 1486, 1479, 1484, -1,589, 1490, 1491, -1,589, 1491, 588, -1,1491, 589, 589, -1,588, + 1491, 1492, -1,1490, 1493, 1491, -1,1492, 1493, 1494, -1,1494, 1493, 1495, -1,1493, + 1492, 1491, -1,1496, 1494, 1497, -1,1494, 1496, 1492, -1,1497, 1494, 1495, -1,1492, + 1496, 588, -1,1498, 1499, 1500, -1,1501, 1498, 1502, -1,1498, 1501, 1499, -1,1498, + 1500, 1503, -1,1502, 1498, 1504, -1,1504, 1503, 1505, -1,1505, 1506, 1507, -1,1507, + 1508, 1505, -1,1509, 1506, 1510, -1,1509, 1507, 1506, -1,1511, 1506, 1503, -1,1505, + 1503, 1506, -1,1504, 1498, 1503, -1,1512, 1500, 1499, -1,1500, 1513, 1514, -1,1513, + 1500, 1512, -1,1500, 1514, 1515, -1,1516, 1517, 1514, -1,1514, 1513, 1518, -1,1515, + 1514, 1517, -1,1518, 1516, 1514, -1,1511, 1515, 1510, -1,1515, 1511, 1500, -1,1510, + 1519, 1509, -1,1520, 1519, 1510, -1,1510, 1515, 1520, -1,1511, 1510, 1506, -1,1520, + 1521, 1519, -1,1515, 1517, 1520, -1,1517, 1521, 1520, -1,1500, 1511, 1503, -1,649, + 649, 649, -1,1522, 1523, 1524, -1,1525, 1526, 1527, -1,1528, 1529, 1530, -1,1531, + 1523, 1528, -1,1525, 1529, 1526, -1,1523, 1531, 1524, -1,1531, 1532, 1524, -1,1530, + 1525, 1533, -1,1525, 1530, 1529, -1,1530, 1533, 1532, -1,1533, 1525, 1534, -1,1534, + 1525, 1527, -1,1530, 1532, 1531, -1,1531, 1528, 1530, -1,1527, 1526, 524, -1,1535, + 1536, 1537, -1,1535, 1527, 1536, -1,1536, 1527, 524, -1,1538, 1537, 1539, -1,649, + 649, 649, -1,1521, 1540, 1541, -1,1539, 1541, 1542, -1,1535, 1538, 1543, -1,1538, + 1535, 1537, -1,524, 1527, 1544, -1,1543, 1544, 1535, -1,1538, 1545, 1543, -1,1544, + 1527, 1535, -1,1540, 1545, 1542, -1,1540, 1542, 1541, -1,1542, 1545, 1538, -1,1538, + 1539, 1542, -1,1527, 524, 1534, -1,1546, 1547, 1548, -1,1549, 1550, 1548, -1,1548, + 1551, 1546, -1,1548, 1550, 1551, -1,1552, 1550, 1549, -1,1551, 1550, 1553, -1,1548, + 1547, 1549, -1,1554, 1549, 1555, -1,1555, 1549, 1547, -1,1556, 1554, 1555, -1,1554, + 1556, 1557, -1,1558, 1554, 1559, -1,1554, 1558, 1549, -1,1559, 1554, 1560, -1,1554, + 1557, 1560, -1,1549, 1558, 1552, -1,1561, 1562, 1563, -1,1563, 1564, 1561, -1,1561, + 1565, 1566, -1,1567, 1562, 1561, -1,1568, 1569, 1570, -1,1570, 1571, 1572, -1,1573, + 1574, 1575, -1,1572, 1573, 1575, -1,1572, 1571, 1573, -1,1576, 1567, 1566, -1,1561, + 1566, 1567, -1,1569, 1567, 1576, -1,1576, 1577, 1571, -1,1570, 1569, 1571, -1,1573, + 1571, 1577, -1,1569, 1576, 1571, -1,1569, 1568, 1567, -1,1562, 1567, 1568, -1,1578, + 1579, 1580, -1,1580, 1581, 1582, -1,1581, 1580, 1579, -1,1579, 1583, 1581, -1,1584, + 1578, 1585, -1,1578, 1580, 1585, -1,1586, 1585, 1582, -1,1587, 1588, 1586, -1,1587, + 1582, 1589, -1,1590, 1588, 1587, -1,1587, 1591, 1590, -1,1587, 1586, 1582, -1,1585, + 1580, 1582, -1,1589, 1582, 1581, -1,1592, 1589, 1581, -1,1592, 1583, 1593, -1,1589, + 1594, 1595, -1,1594, 1589, 1592, -1,1592, 1596, 1594, -1,1592, 1581, 1583, -1,1593, + 1596, 1592, -1,1594, 1596, 1597, -1,1591, 1595, 1598, -1,1591, 1589, 1595, -1,1598, + 1599, 1591, -1,1595, 1600, 1598, -1,1591, 1599, 1590, -1,1597, 1600, 1595, -1,1594, + 1597, 1595, -1,1589, 1591, 1587, -1,1588, 1601, 1602, -1,1602, 1601, 1603, -1,1604, + 1602, 1605, -1,1602, 1604, 1606, -1,1607, 1605, 1602, -1,1606, 1588, 1602, -1,1603, + 1601, 1608, -1,1609, 1610, 1603, -1,1609, 1603, 1608, -1,1611, 1610, 1609, -1,1611, + 1610, 1611, -1,1603, 1609, 1612, -1,1609, 1603, 1610, -1,1609, 1610, 1611, -1,1611, + 1610, 1611, -1,1603, 1612, 1605, -1,1613, 1614, 1615, -1,1616, 1617, 1613, -1,1614, + 1613, 1618, -1,1619, 1613, 1617, -1,1617, 1620, 1619, -1,1616, 1613, 1615, -1,1618, + 1613, 1619, -1,1621, 1622, 1623, -1,1624, 1622, 1621, -1,1624, 1618, 1625, -1,1626, + 1622, 1624, -1,1624, 1627, 1626, -1,1624, 1621, 1618, -1,1621, 1614, 1618, -1,1625, + 1618, 1619, -1,1628, 1629, 1619, -1,1629, 1625, 1619, -1,1630, 1631, 1629, -1,1629, + 1628, 1630, -1,1632, 1629, 1631, -1,1633, 1630, 1628, -1,1625, 1632, 1634, -1,1632, + 1625, 1629, -1,1634, 1635, 1626, -1,1634, 1627, 1625, -1,1632, 1636, 1634, -1,1625, + 1627, 1624, -1,1636, 1635, 1634, -1,1632, 1631, 1636, -1,1634, 1626, 1627, -1,1619, + 1620, 1628, -1,1637, 1638, 1639, -1,1640, 1637, 1641, -1,1642, 1643, 1644, -1,1643, + 1645, 1644, -1,1641, 1642, 1646, -1,1638, 1637, 1640, -1,1641, 1646, 1640, -1,1647, + 1640, 1646, -1,1640, 1647, 1648, -1,1648, 1638, 1640, -1,1649, 1647, 1646, -1,1645, + 1650, 1644, -1,1651, 1644, 1650, -1,1646, 1644, 1651, -1,1651, 1649, 1646, -1,1642, + 1644, 1646, -1,1652, 1652, 1653, -1,1654, 1653, 1655, -1,1654, 1652, 1653, -1,1656, + 1657, 1658, -1,1654, 1655, 1659, -1,1658, 1659, 1655, -1,1658, 1655, 1660, -1,1658, + 1660, 1656, -1,1657, 1656, 1661, -1,1661, 1662, 1657, -1,1656, 1660, 1661, -1,1662, + 1663, 1664, -1,1663, 1662, 1665, -1,1664, 1666, 1667, -1,1666, 1664, 1663, -1,1666, + 1663, 1668, -1,1663, 1665, 1668, -1,1669, 1667, 1666, -1,1666, 1670, 1669, -1,1670, + 1671, 1669, -1,1669, 1671, 1672, -1,1667, 1669, 1672, -1,1666, 1668, 1670, -1,784, + 784, 784, -1,784, 784, 784, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 1673, 1674, 1675, -1,1674, 1673, 1673, -1,1673, 1675, 1674, -1,1675, 1676, 1677, -1, + 1678, 1676, 1679, -1,1676, 1678, 1677, -1,1677, 1675, 1674, -1,1675, 1677, 1680, -1, + 1678, 1681, 1680, -1,1681, 1678, 1679, -1,1677, 1678, 1680, -1,1677, 1674, 1675, -1, + 1682, 1682, 1683, -1,1683, 1682, 1683, -1,1683, 1684, 1684, -1,1684, 1683, 1683, -1, + 1684, 1683, 1683, -1,1683, 1683, 1682, -1,784, 784, 784, -1,784, 784, 784, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,1685, 1686, 1092, -1, + 1686, 1685, 1687, -1,1686, 1688, 1092, -1,1688, 1686, 1689, -1,1686, 1690, 1689, -1, + 1691, 657, 1692, -1,1687, 1691, 1692, -1,1692, 1693, 1689, -1,1692, 1690, 1687, -1, + 1693, 1692, 657, -1,1692, 1689, 1690, -1,1687, 1690, 1686, -1,1694, 1695, 1696, -1, + 1697, 1696, 1698, -1,1694, 1696, 1699, -1,1699, 1696, 1700, -1,1697, 1701, 1700, -1, + 1701, 1697, 1702, -1,1696, 1697, 1700, -1,1696, 1695, 1698, -1,1697, 1703, 1704, -1, + 1703, 1705, 1704, -1,649, 649, 649, -1,1702, 1704, 1706, -1,1702, 1697, 1704, -1, + 1706, 1704, 1705, -1,1705, 784, 1706, -1,1697, 1698, 1703, -1,1707, 1708, 1709, -1, + 1710, 1708, 1707, -1,1711, 1707, 1712, -1,1707, 1711, 1710, -1,1709, 1712, 1707, -1, + 1713, 1708, 1710, -1,1714, 1710, 1715, -1,1713, 1710, 1714, -1,1716, 1714, 1715, -1, + 1713, 1717, 1710, -1,1715, 1710, 1717, -1,1718, 1715, 1717, -1,1715, 1718, 1716, -1, + 1711, 1713, 1710, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, + 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 107, 107, 107, -1,1719, 1720, 1721, -1,1722, 1723, 1721, -1,1724, 1721, 1725, -1, + 1722, 1721, 1720, -1,1719, 1721, 1724, -1,1726, 1727, 1728, -1,1727, 1729, 1728, -1, + 1729, 1727, 1724, -1,1730, 1729, 1724, -1,1729, 1731, 1732, -1,1727, 1719, 1724, -1, + 1731, 1733, 1732, -1,1734, 1721, 1723, -1,1725, 1730, 1724, -1,1721, 1735, 1725, -1, + 1735, 1721, 1734, -1,1730, 1731, 1729, -1,1733, 1736, 1737, -1,1728, 1729, 1732, -1, + 1738, 1737, 1736, -1,1738, 1739, 1740, -1,1740, 1737, 1738, -1,1731, 1736, 1733, -1, + 1734, 1723, 1741, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, + 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,1742, + 1743, 1744, -1,1745, 1742, 1746, -1,1747, 1742, 1744, -1,1747, 1744, 1748, -1,1742, + 1749, 1746, -1,1747, 1749, 1742, -1,1745, 1743, 1742, -1,1750, 1751, 1752, -1,1745, + 1752, 1753, -1,1746, 1754, 1745, -1,1750, 1745, 1754, -1,1754, 1755, 1750, -1,1751, + 1750, 1755, -1,1750, 1752, 1745, -1,1743, 1745, 1753, -1,1756, 1757, 1758, -1,1756, + 1759, 1760, -1,1761, 1756, 1762, -1,1757, 1756, 1760, -1,1762, 1756, 1758, -1,1763, + 1764, 1765, -1,1763, 1766, 1764, -1,1762, 1764, 1766, -1,1762, 1766, 1767, -1,1768, + 1766, 1763, -1,1762, 1758, 1764, -1,1759, 1756, 1769, -1,1762, 1767, 1761, -1,1761, + 1770, 1756, -1,1769, 1756, 1770, -1,1766, 1768, 1767, -1,1771, 1768, 1772, -1,1773, + 1772, 1768, -1,1773, 1768, 1763, -1,1774, 1759, 1769, -1,1775, 1776, 1777, -1,1777, + 1778, 1779, -1,1777, 1776, 1780, -1,1776, 1781, 1780, -1,1777, 1780, 1782, -1,1783, + 1778, 1777, -1,1777, 1782, 1783, -1,1778, 1784, 1779, -1,1779, 1775, 1777, -1,1785, + 1779, 1786, -1,1787, 1779, 1788, -1,1789, 1785, 1786, -1,1775, 1779, 1787, -1,1785, + 1790, 1788, -1,1791, 1785, 1789, -1,1779, 1785, 1788, -1,1790, 1785, 1791, -1,1779, + 1792, 1786, -1,1793, 1790, 1791, -1,1784, 1792, 1779, -1,1794, 1795, 1796, -1,1794, + 1797, 1795, -1,1798, 1795, 1797, -1,1799, 1794, 1796, -1,1800, 1797, 1794, -1,1801, + 1802, 1803, -1,1803, 1802, 1804, -1,1805, 1796, 1801, -1,1806, 1799, 1805, -1,1801, + 1803, 1805, -1,1805, 1799, 1796, -1,1799, 1807, 1794, -1,1807, 1799, 1806, -1,1794, + 1807, 1800, -1,1808, 1805, 1803, -1,1805, 1808, 1806, -1,1800, 1809, 1797, -1,1810, + 1811, 1812, -1,1811, 1813, 1812, -1,1813, 1811, 1814, -1,1810, 1812, 1815, -1,1812, + 1813, 1816, -1,1817, 1818, 1819, -1,1820, 1818, 1817, -1,1819, 1810, 1821, -1,1821, + 1815, 1822, -1,1821, 1817, 1819, -1,1810, 1815, 1821, -1,1812, 1823, 1815, -1,1822, + 1815, 1823, -1,1816, 1823, 1812, -1,1817, 1821, 1824, -1,1822, 1824, 1821, -1,1813, + 1825, 1816, -1,1826, 1827, 1828, -1,1826, 1828, 1829, -1,1830, 1831, 1832, -1,1828, + 1830, 1832, -1,1828, 1827, 1833, -1,1830, 1828, 1833, -1,1829, 1828, 1834, -1,1832, + 1834, 1828, -1,1835, 1826, 1829, -1,1836, 1837, 1838, -1,1829, 1838, 1839, -1,1840, + 1841, 1842, -1,1836, 1842, 1837, -1,1843, 1844, 1829, -1,1836, 1829, 1844, -1,1834, + 1843, 1829, -1,1836, 1840, 1842, -1,1838, 1829, 1836, -1,1844, 1840, 1836, -1,1835, + 1829, 1839, -1,1845, 1846, 1847, -1,1848, 1849, 1847, -1,1849, 1848, 1850, -1,1851, + 1847, 1849, -1,1851, 1845, 1847, -1,1852, 1853, 1849, -1,1851, 1849, 1853, -1,1849, + 1854, 1852, -1,1855, 1854, 1850, -1,1850, 1854, 1849, -1,1850, 1856, 1855, -1,1857, + 1855, 1856, -1,1858, 1852, 1855, -1,1855, 1857, 1858, -1,1858, 1857, 1859, -1,1857, + 1860, 1859, -1,1855, 1852, 1854, -1,1861, 1862, 1863, -1,1864, 1862, 1861, -1,1865, + 1866, 1867, -1,1865, 1867, 1868, -1,1864, 1869, 1868, -1,1868, 1862, 1864, -1,1866, + 1865, 1870, -1,1871, 1867, 1866, -1,1869, 1865, 1868, -1,1871, 1866, 1870, -1,1871, + 1872, 1873, -1,1873, 1874, 1871, -1,1871, 1870, 1872, -1,1875, 1876, 1877, -1,1878, + 1876, 1875, -1,1879, 1875, 1877, -1,1880, 1878, 1881, -1,1875, 1881, 1878, -1,1882, + 1880, 1883, -1,1884, 1885, 1875, -1,1875, 1879, 1884, -1,1886, 1883, 1881, -1,1880, + 1881, 1883, -1,1883, 1886, 1887, -1,1885, 1886, 1881, -1,1875, 1885, 1881, -1,1888, + 1882, 1883, -1,1889, 1890, 1891, -1,1882, 1888, 1889, -1,1892, 1883, 1893, -1,1892, + 1888, 1883, -1,1883, 1894, 1893, -1,1895, 1896, 1897, -1,1887, 1897, 1896, -1,1896, + 1898, 1887, -1,1898, 1883, 1887, -1,1883, 1898, 1894, -1,1882, 1889, 1891, -1,1899, + 1900, 1901, -1,1899, 1901, 1902, -1,1903, 1904, 1905, -1,1904, 1903, 1902, -1,1899, + 1902, 1903, -1,1900, 1906, 1907, -1,1908, 784, 1909, -1,784, 1908, 784, -1,1910, + 1908, 1909, -1,1900, 1907, 1910, -1,1908, 1907, 1906, -1,1906, 1900, 1899, -1,1907, + 1908, 1910, -1,1911, 1912, 1912, -1,1911, 1913, 1914, -1,1915, 1914, 1913, -1,1913, + 1911, 1916, -1,1911, 1912, 1916, -1,1913, 1917, 1918, -1,1917, 1913, 1916, -1,1918, + 1919, 1913, -1,1915, 1919, 1920, -1,1913, 1919, 1915, -1,1920, 1921, 1915, -1,1921, + 1920, 1922, -1,1920, 1918, 1923, -1,1923, 1922, 1920, -1,1924, 1922, 1923, -1,1924, + 1925, 1922, -1,1919, 1918, 1920, -1,1926, 1927, 1928, -1,1929, 1930, 1926, -1,1927, + 1926, 1930, -1,1931, 1930, 1929, -1,1932, 1932, 1932, -1,1929, 1933, 1931, -1,1934, + 1933, 1935, -1,1931, 1933, 1934, -1,1936, 1936, 1936, -1,1937, 1938, 1933, -1,1935, + 1933, 1938, -1,1935, 1938, 1939, -1,1939, 1939, 1935, -1,1929, 1937, 1933, -1,1940, + 1941, 1942, -1,1943, 1943, 1943, -1,1944, 1941, 1940, -1,1945, 1940, 1942, -1,1942, + 1946, 1945, -1,1944, 1947, 1941, -1,1948, 1949, 1950, -1,1947, 1950, 1951, -1,1944, + 1952, 1947, -1,1948, 1947, 1952, -1,1953, 1953, 1953, -1,1949, 1948, 1949, -1,1948, + 1950, 1947, -1,1941, 1947, 1951, -1,1954, 1954, 1954, -1,1955, 1956, 1957, -1,1958, + 1957, 1958, -1,1958, 1959, 1957, -1,1955, 1957, 1959, -1,1960, 1955, 1959, -1,1955, + 1961, 1956, -1,1962, 1961, 1963, -1,1955, 1960, 1963, -1,1964, 1962, 1963, -1,1963, + 1960, 1964, -1,1961, 1955, 1963, -1,1965, 1966, 1967, -1,1968, 1966, 1965, -1,1969, + 1965, 1967, -1,1969, 1970, 1965, -1,1968, 1965, 1970, -1,1971, 1968, 1970, -1,1968, + 1972, 1966, -1,1973, 1974, 1972, -1,1973, 1968, 1971, -1,1975, 1973, 1971, -1,1974, + 1973, 1975, -1,1972, 1968, 1973, -1,1976, 1977, 1978, -1,1979, 1976, 1980, -1,1981, + 1980, 1978, -1,1980, 1976, 1978, -1,1982, 1980, 1983, -1,1981, 1983, 1980, -1,1980, + 1982, 1979, -1,1984, 1983, 1985, -1,1982, 1983, 1984, -1,1986, 1984, 1985, -1,1987, + 1983, 1988, -1,1987, 1989, 1985, -1,1986, 1985, 1989, -1,1987, 1985, 1983, -1,1981, + 1988, 1983, -1,1990, 1991, 1992, -1,1990, 1993, 1994, -1,1995, 1994, 1993, -1,1993, + 1990, 1992, -1,1996, 1997, 1998, -1,1991, 1999, 1992, -1,1996, 1999, 1997, -1,1991, + 1997, 1999, -1,2000, 1995, 1993, -1,1992, 2001, 1993, -1,2001, 2000, 1993, -1,1999, + 2002, 1992, -1,2002, 2001, 1992, -1,1999, 2003, 2002, -1,1996, 2003, 1999, -1,2000, + 2004, 1995, -1,2005, 2006, 2007, -1,2008, 2009, 2005, -1,2006, 2005, 2010, -1,2011, + 2005, 2009, -1,2009, 2012, 2011, -1,2008, 2005, 2007, -1,2010, 2005, 2011, -1,2013, + 2014, 2015, -1,2010, 2014, 2013, -1,2014, 2010, 2016, -1,2017, 2018, 2014, -1,2014, + 2019, 2017, -1,2014, 2018, 2015, -1,2013, 2006, 2010, -1,2016, 2010, 2011, -1,2020, + 2021, 2011, -1,2021, 2016, 2011, -1,2022, 2023, 2021, -1,2021, 2020, 2024, -1,2025, + 2021, 2023, -1,2024, 2022, 2021, -1,2016, 2025, 2019, -1,2025, 2016, 2021, -1,2019, + 2026, 2017, -1,2027, 2026, 2019, -1,2019, 2025, 2027, -1,2016, 2019, 2014, -1,2027, + 2028, 2029, -1,2028, 2027, 2025, -1,2027, 2029, 2026, -1,2025, 2023, 2028, -1,2011, + 2012, 2020, -1,2030, 2031, 2032, -1,2032, 2033, 2034, -1,2034, 2030, 2032, -1,2035, + 2036, 2037, -1,2030, 2034, 2038, -1,2039, 2035, 2037, -1,2040, 2037, 2036, -1,2040, + 2041, 2042, -1,2037, 2043, 2039, -1,2036, 2041, 2040, -1,2043, 2037, 2044, -1,2045, + 2035, 2046, -1,2047, 2038, 2048, -1,2049, 2050, 2051, -1,2047, 2051, 2050, -1,2052, + 2049, 2051, -1,2053, 2052, 2054, -1,2051, 2054, 2052, -1,2051, 2047, 2048, -1,2038, + 2034, 2048, -1,2055, 2056, 2054, -1,2045, 2036, 2035, -1,2036, 2045, 2055, -1,2046, + 2055, 2045, -1,2056, 2057, 2054, -1,2058, 2059, 2036, -1,2058, 2036, 2055, -1,2057, + 2053, 2054, -1,2054, 2058, 2055, -1,2036, 2059, 2041, -1,2060, 2061, 2062, -1,2061, + 2060, 2063, -1,2064, 2065, 2062, -1,2065, 2062, 2065, -1,2062, 2061, 2064, -1,2066, + 2067, 2068, -1,2067, 2066, 2069, -1,2070, 2071, 2069, -1,2072, 2067, 2069, -1,2069, + 2066, 2070, -1,2073, 2074, 2075, -1,2076, 2073, 2077, -1,2073, 2076, 2078, -1,2073, + 2078, 2074, -1,2079, 2075, 2074, -1,2075, 2077, 2073, -1,2080, 2081, 2082, -1,2079, + 2083, 2082, -1,2081, 2075, 2082, -1,2082, 2083, 2080, -1,2080, 2082, 2080, -1,2080, + 2080, 2082, -1,2075, 2079, 2082, -1,2077, 2075, 2081, -1,2084, 2084, 2084, -1,2085, + 2086, 2087, -1,2088, 2087, 2086, -1,2089, 2086, 2085, -1,2089, 2090, 2091, -1,2092, + 2093, 2094, -1,2093, 2089, 2091, -1,2095, 2089, 2093, -1,2096, 2093, 2092, -1,2089, + 2085, 2090, -1,2091, 2094, 2093, -1,2097, 2095, 2098, -1,2099, 2100, 2100, -1,2097, + 2099, 2100, -1,2099, 2097, 2098, -1,2101, 2098, 2096, -1,2098, 2093, 2096, -1,2102, + 2098, 2101, -1,2101, 2103, 2104, -1,2102, 2101, 2104, -1,2102, 2099, 2098, -1,2095, + 2093, 2098, -1,2105, 2106, 2107, -1,2106, 2108, 2107, -1,2105, 2109, 2106, -1,2109, + 2105, 2110, -1,2111, 2112, 2113, -1,2111, 2114, 2115, -1,2113, 2112, 2116, -1,2117, + 2118, 2119, -1,2117, 2119, 2120, -1,2114, 2121, 2120, -1,2111, 2121, 2114, -1,2110, + 2105, 2122, -1,2123, 2122, 2124, -1,2125, 2126, 2124, -1,2124, 2126, 2123, -1,2127, + 2128, 2129, -1,2125, 2130, 2126, -1,2123, 2110, 2122, -1,2123, 2131, 2110, -1,2112, + 2132, 2133, -1,2114, 2134, 2115, -1,2112, 2111, 2115, -1,2132, 2135, 2136, -1,2115, + 2134, 2137, -1,2138, 2115, 2137, -1,2136, 2133, 2132, -1,2132, 2112, 2115, -1,2132, + 2139, 2135, -1,2140, 2130, 2141, -1,2133, 2116, 2112, -1,2129, 2141, 2127, -1,2140, + 2141, 2129, -1,2139, 2129, 2128, -1,2142, 2120, 2121, -1,2142, 2117, 2120, -1,2143, + 2144, 2145, -1,2145, 2146, 2147, -1,2146, 2145, 2144, -1,2148, 2149, 2150, -1,2150, + 2151, 2148, -1,2149, 2152, 2150, -1,2152, 2153, 2154, -1,2154, 2155, 2156, -1,2155, + 2154, 2153, -1,2152, 2154, 2150, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1, + 524, 524, 524, -1,524, 524, 524, -1,2157, 2158, 2158, -1,2159, 2158, 2157, -1,2160, + 2160, 2157, -1,2159, 2157, 2160, -1,2157, 2159, 2160, -1,2158, 2159, 2157, -1,2161, + 2162, 2163, -1,2162, 2164, 2163, -1,2163, 2165, 2161, -1,2166, 1874, 2167, -1,2166, + 2168, 2163, -1,2165, 2163, 2168, -1,2167, 2168, 2166, -1,2164, 2166, 2163, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,2169, 2170, 2171, -1,2170, + 2172, 2171, -1,2172, 2170, 2173, -1,2174, 2175, 2176, -1,2174, 2176, 2177, -1,2176, + 2175, 2178, -1,2175, 2179, 2178, -1,2180, 2179, 2181, -1,2179, 2180, 2178, -1,2180, + 2181, 2182, -1,2180, 2182, 2183, -1,2182, 2181, 2184, -1,2185, 2186, 2187, -1,2187, + 2186, 2188, -1,2189, 2187, 2190, -1,2188, 2190, 2187, -1,2187, 2189, 2185, -1,2188, + 2186, 2191, -1,2192, 2188, 2193, -1,2193, 2188, 2191, -1,2192, 2193, 2194, -1,2195, + 2192, 2196, -1,2192, 2195, 2188, -1,2196, 2192, 2197, -1,2197, 2192, 2194, -1,2188, + 2195, 2190, -1,2198, 2198, 2198, -1,2198, 2198, 2198, -1,2199, 2200, 107, -1,2201, + 2202, 2199, -1,2203, 2201, 2199, -1,2199, 2204, 2203, -1,2202, 2200, 2199, -1,107, + 107, 107, -1,107, 2204, 107, -1,107, 2203, 2204, -1,2200, 2205, 2206, -1,2200, 2202, + 2205, -1,2206, 2207, 2208, -1,2207, 2206, 2205, -1,2206, 2208, 2209, -1,2210, 2211, + 2212, -1,2213, 2206, 2214, -1,2215, 2210, 2212, -1,2214, 2206, 2209, -1,2216, 2217, + 2218, -1,2219, 2220, 2218, -1,2219, 2221, 2220, -1,2220, 2216, 2218, -1,2217, 2216, + 2222, -1,2222, 2223, 2224, -1,2223, 2222, 2216, -1,2220, 2221, 2225, -1,2222, 2224, + 2226, -1,2227, 2228, 2229, -1,2227, 2230, 2231, -1,2230, 2215, 2232, -1,2228, 2227, + 2231, -1,2229, 2233, 2227, -1,2222, 2234, 2235, -1,2222, 2235, 2236, -1,2222, 2237, + 2227, -1,2237, 2222, 2236, -1,2213, 2214, 2238, -1,2238, 2211, 2213, -1,2222, 2227, + 2233, -1,2226, 2234, 2222, -1,2210, 2213, 2211, -1,2210, 2215, 2230, -1,2231, 2230, + 2232, -1,2239, 2239, 2240, -1,2239, 2241, 2240, -1,2240, 2241, 2239, -1,2242, 2242, + 2240, -1,2241, 2240, 2242, -1,649, 649, 649, -1,649, 649, 649, -1,2241, 2242, 2240, -1, + 2243, 2244, 2241, -1,2244, 2243, 2245, -1,2241, 2244, 2239, -1,2244, 2246, 2239, -1, + 2246, 2244, 2245, -1,2246, 2245, 2247, -1,2248, 2249, 2247, -1,2245, 2250, 2247, -1, + 2247, 2250, 2248, -1,2251, 2247, 2249, -1,2252, 2253, 2254, -1,2253, 2255, 2254, -1, + 2255, 2253, 2256, -1,2257, 2255, 2258, -1,2259, 2255, 2256, -1,2258, 2255, 2259, -1, + 2255, 2257, 2254, -1,2258, 2260, 2261, -1,2260, 2258, 2259, -1,2261, 2262, 2263, -1, + 2262, 2261, 2260, -1,2258, 2261, 2264, -1,2264, 2265, 2258, -1,2264, 2261, 2263, -1, + 2258, 2265, 2257, -1,2266, 2267, 2268, -1,2269, 2270, 2266, -1,2268, 2269, 2266, -1, + 2271, 2271, 2272, -1,2272, 2271, 2273, -1,2272, 2270, 2274, -1,2270, 2272, 2273, -1, + 2274, 2273, 2272, -1,2272, 2273, 2271, -1,2275, 2276, 2277, -1,2277, 2276, 2278, -1, + 2279, 2277, 2280, -1,2281, 2280, 2277, -1,2277, 2279, 2275, -1,2277, 2278, 2281, -1, + 2281, 2282, 2283, -1,2282, 2281, 2278, -1,2284, 2283, 2285, -1,2281, 2283, 2284, -1, + 2286, 2284, 2285, -1,2281, 2287, 2288, -1,2287, 2281, 2284, -1,2287, 2284, 2289, -1, + 2289, 2284, 2286, -1,2281, 2288, 2280, -1,2290, 2291, 2292, -1,2293, 2292, 2294, -1, + 2293, 2290, 2292, -1,2295, 2296, 2291, -1,2292, 2296, 2294, -1,2292, 2291, 2296, -1, + 2296, 2297, 2298, -1,2297, 2296, 2295, -1,2298, 2299, 2300, -1,2299, 2298, 2297, -1, + 2296, 2298, 2301, -1,2302, 2301, 2298, -1,2300, 2302, 2298, -1,2296, 2301, 2294, -1, + 2303, 2304, 2305, -1,2305, 2306, 2307, -1,2306, 2305, 2304, -1,2308, 2309, 2310, -1, + 2311, 2308, 2310, -1,2308, 2311, 2312, -1,2313, 2311, 2310, -1,2314, 2315, 2313, -1, + 2315, 2314, 2316, -1,2317, 2313, 2310, -1,2318, 2319, 2320, -1,2318, 2316, 2319, -1, + 2319, 2316, 2314, -1,2313, 2317, 2314, -1,2321, 2318, 2322, -1,2323, 2320, 2324, -1, + 2323, 2322, 2318, -1,2320, 2323, 2318, -1,649, 2325, 649, -1,649, 2325, 649, -1,2326, + 2325, 2327, -1,649, 2327, 2325, -1,2328, 2326, 2329, -1,2330, 2331, 2332, -1,2331, + 2333, 2332, -1,2330, 2329, 2331, -1,2331, 2334, 2333, -1,2328, 2335, 2326, -1,2330, + 2328, 2329, -1,2335, 2325, 2326, -1,2333, 2336, 2337, -1,2338, 2339, 2340, -1,2341, + 2338, 2340, -1,2339, 2342, 2340, -1,2336, 2342, 2337, -1,2340, 649, 2341, -1,2333, + 2343, 2336, -1,649, 2344, 2345, -1,2334, 2345, 2344, -1,2346, 2333, 2344, -1,2344, + 2333, 2334, -1,2347, 2333, 2346, -1,2333, 2347, 2343, -1,2339, 2337, 2342, -1,1957, + 1959, 1958, -1,1956, 1959, 1957, -1,1958, 1957, 1958, -1,2348, 2348, 2348, -1,1956, + 1957, 1956, -1,1961, 1956, 1956, -1,1956, 2349, 1959, -1,2350, 2351, 2349, -1,2350, + 1956, 1961, -1,1962, 2350, 1961, -1,2351, 2350, 1962, -1,2349, 1956, 2350, -1,2352, + 2353, 2354, -1,2352, 2355, 2356, -1,2357, 2356, 2355, -1,2355, 2352, 2358, -1,2352, + 2354, 2358, -1,2355, 2359, 2360, -1,2359, 2355, 2358, -1,2360, 2361, 2355, -1,2357, + 2361, 2362, -1,2355, 2361, 2357, -1,2362, 2363, 2357, -1,2363, 2362, 2364, -1,2362, + 2360, 2365, -1,2365, 2364, 2362, -1,2366, 2364, 2365, -1,2366, 2367, 2364, -1,2361, + 2360, 2362, -1,2368, 2369, 2370, -1,2370, 2371, 2372, -1,2370, 2369, 2373, -1,2369, + 1831, 2373, -1,2370, 2373, 2374, -1,2375, 2371, 2370, -1,2370, 2374, 2375, -1,2371, + 2376, 2372, -1,2372, 2368, 2370, -1,2377, 2372, 2378, -1,1843, 2372, 2379, -1,2380, + 2377, 2378, -1,2368, 2372, 1843, -1,2377, 2381, 2379, -1,2382, 2377, 2380, -1,2372, + 2377, 2379, -1,2381, 2377, 2382, -1,2372, 2383, 2378, -1,1841, 2381, 2382, -1,2376, + 2383, 2372, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,2384, 2385, 2386, -1,2387, 2388, 2386, -1,2389, 2386, 2390, -1,2387, + 2386, 2385, -1,2384, 2386, 2389, -1,2391, 2392, 2393, -1,2392, 2394, 2393, -1,2394, + 2392, 2389, -1,2395, 2394, 2389, -1,2394, 2396, 2397, -1,2392, 2384, 2389, -1,2396, + 2398, 2397, -1,2399, 2386, 2388, -1,2390, 2395, 2389, -1,2386, 2400, 2390, -1,2400, + 2386, 2399, -1,2395, 2396, 2394, -1,2398, 2401, 2402, -1,2393, 2394, 2397, -1,2403, + 2402, 2401, -1,2403, 2404, 2405, -1,2405, 2402, 2403, -1,2396, 2401, 2398, -1,2399, + 2388, 2406, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1, + 524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, + 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1, + 649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, + 649, -1,649, 649, 649, -1,649, 649, 649, -1,649, 649, 649, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,2407, 2408, 2409, -1, + 2408, 2407, 2407, -1,2407, 2409, 2408, -1,2409, 2410, 2411, -1,2412, 2410, 2413, -1, + 2410, 2412, 2411, -1,2411, 2409, 2408, -1,2409, 2411, 2414, -1,2412, 2415, 2414, -1, + 2415, 2412, 2413, -1,2411, 2412, 2414, -1,2411, 2408, 2409, -1,2416, 2417, 2418, -1, + 2419, 2420, 2416, -1,2417, 2416, 2421, -1,2422, 2416, 2420, -1,2420, 2423, 2422, -1, + 2419, 2416, 2418, -1,2421, 2416, 2422, -1,2424, 2425, 2426, -1,2427, 2425, 2424, -1, + 2427, 2421, 2428, -1,2429, 2425, 2427, -1,2427, 2430, 2429, -1,2427, 2424, 2421, -1, + 2424, 2417, 2421, -1,2428, 2421, 2422, -1,2431, 2432, 2422, -1,2432, 2428, 2422, -1, + 2433, 2434, 2432, -1,2432, 2431, 2433, -1,2435, 2432, 2434, -1,2436, 2433, 2431, -1, + 2428, 2435, 2437, -1,2435, 2428, 2432, -1,2437, 2438, 2429, -1,2437, 2430, 2428, -1, + 2435, 2439, 2437, -1,2428, 2430, 2427, -1,2439, 2438, 2437, -1,2435, 2434, 2439, -1, + 2437, 2429, 2430, -1,2422, 2423, 2431, -1,2440, 2441, 2442, -1,2443, 2440, 2444, -1, + 2445, 2446, 2447, -1,2446, 2448, 2447, -1,2444, 2445, 2449, -1,2441, 2440, 2443, -1, + 2444, 2449, 2443, -1,2450, 2443, 2449, -1,2443, 2450, 2451, -1,2451, 2441, 2443, -1, + 2452, 2450, 2449, -1,2448, 2453, 2447, -1,2454, 2447, 2453, -1,2449, 2447, 2454, -1, + 2454, 2452, 2449, -1,2445, 2447, 2449, -1,2455, 2456, 2457, -1,2457, 2457, 2455, -1, + 2455, 2458, 2459, -1,2460, 2456, 2455, -1,2461, 2462, 2463, -1,2463, 2464, 2465, -1, + 2466, 2467, 2467, -1,2465, 2466, 2467, -1,2465, 2464, 2466, -1,2468, 2460, 2459, -1, + 2455, 2459, 2460, -1,2462, 2460, 2468, -1,2468, 2469, 2464, -1,2463, 2462, 2464, -1, + 2466, 2464, 2469, -1,2462, 2468, 2464, -1,2462, 2461, 2460, -1,2456, 2460, 2461, -1, + 2470, 2471, 2472, -1,2472, 2473, 2474, -1,2473, 2472, 2471, -1,2471, 2475, 2473, -1, + 2476, 2470, 2477, -1,2470, 2472, 2477, -1,2478, 2477, 2474, -1,2479, 2480, 2478, -1, + 2479, 2474, 2481, -1,2482, 2480, 2479, -1,2479, 2483, 2482, -1,2479, 2478, 2474, -1, + 2477, 2472, 2474, -1,2481, 2474, 2473, -1,2484, 2481, 2473, -1,2484, 2475, 2485, -1, + 2481, 2486, 2487, -1,2486, 2481, 2484, -1,2484, 2488, 2486, -1,2484, 2473, 2475, -1, + 2485, 2488, 2484, -1,2486, 2488, 2489, -1,2483, 2487, 2490, -1,2483, 2481, 2487, -1, + 2490, 2491, 2483, -1,2487, 2492, 2490, -1,2483, 2491, 2482, -1,2489, 2492, 2487, -1, + 2486, 2489, 2487, -1,2481, 2483, 2479, -1,2480, 2493, 2494, -1,2494, 2493, 2495, -1, + 2496, 2494, 2493, -1,2494, 2496, 2496, -1,2495, 2493, 2494, -1,2496, 2480, 2494, -1, + 2495, 2493, 2497, -1,2498, 2499, 2495, -1,2498, 2495, 2497, -1,2500, 2499, 2498, -1, + 2501, 2501, 2501, -1,2495, 2502, 2497, -1,2502, 2495, 2499, -1,2502, 2499, 2503, -1, + 2503, 2499, 2504, -1,2495, 2497, 2493, -1,2505, 2506, 2507, -1,2508, 2507, 2509, -1, + 2505, 2507, 1477, -1,1477, 2507, 1478, -1,2508, 1480, 1478, -1,1480, 2508, 1484, -1, + 2507, 2508, 1478, -1,2507, 2506, 2509, -1,2508, 2510, 2511, -1,2510, 2503, 2511, -1, + 649, 649, 649, -1,1484, 2511, 2512, -1,1484, 2508, 2511, -1,2512, 2511, 2503, -1, + 2503, 1489, 2512, -1,2508, 2509, 2510, -1,833, 833, 833, -1,833, 833, 833, -1,2513, + 2514, 589, -1,2514, 2513, 2515, -1,1490, 589, 2514, -1,2516, 1490, 2514, -1,2514, + 2517, 2516, -1,2518, 2519, 2520, -1,2515, 2518, 2520, -1,2520, 2521, 2516, -1,2520, + 2517, 2515, -1,2521, 2520, 2519, -1,2520, 2516, 2517, -1,2515, 2517, 2514, -1,107, + 107, 107, -1,2522, 2523, 2521, -1,2524, 2525, 2526, -1,2527, 2528, 2529, -1,2530, + 2523, 2527, -1,2524, 2528, 2525, -1,2523, 2530, 2521, -1,2530, 2531, 2521, -1,2529, + 2524, 2532, -1,2524, 2529, 2528, -1,2532, 2531, 2529, -1,2533, 2532, 2524, -1,2533, + 2524, 2526, -1,2529, 2531, 2530, -1,2530, 2527, 2529, -1,2526, 2525, 524, -1,2534, + 2535, 2536, -1,2534, 2526, 2535, -1,2535, 2526, 524, -1,2537, 2536, 2538, -1,107, + 107, 107, -1,1522, 2539, 2540, -1,2538, 2540, 2541, -1,2534, 2537, 2542, -1,2537, + 2534, 2536, -1,524, 2526, 2543, -1,2542, 2543, 2534, -1,2537, 2544, 2542, -1,2543, + 2526, 2534, -1,2541, 2539, 2544, -1,2541, 2540, 2539, -1,2541, 2544, 2537, -1,2537, + 2538, 2541, -1,2526, 524, 2533, -1,2545, 2546, 2547, -1,2548, 2549, 2547, -1,2547, + 2550, 2545, -1,2547, 2549, 2550, -1,2551, 2549, 2548, -1,2550, 2549, 2552, -1,2547, + 2546, 2548, -1,2553, 2548, 2554, -1,2554, 2548, 2546, -1,2555, 2553, 2554, -1,2553, + 2555, 2556, -1,2557, 2553, 2558, -1,2553, 2557, 2548, -1,2558, 2553, 2559, -1,2553, + 2556, 2559, -1,2548, 2557, 2551, -1,2560, 2561, 2562, -1,2563, 2564, 2560, -1,2561, + 2560, 2565, -1,2566, 2560, 2564, -1,2564, 2567, 2566, -1,2563, 2560, 2562, -1,2565, + 2560, 2566, -1,2568, 2569, 2570, -1,2565, 2569, 2568, -1,2569, 2565, 2571, -1,2572, + 2573, 2569, -1,2569, 2574, 2572, -1,2569, 2573, 2570, -1,2568, 2561, 2565, -1,2571, + 2565, 2566, -1,2575, 2576, 2566, -1,2576, 2571, 2566, -1,2577, 2578, 2576, -1,2576, + 2575, 2579, -1,2580, 2576, 2578, -1,2579, 2577, 2576, -1,2571, 2580, 2574, -1,2580, + 2571, 2576, -1,2574, 2581, 2572, -1,2582, 2581, 2574, -1,2574, 2580, 2582, -1,2571, + 2574, 2569, -1,2582, 2583, 2584, -1,2583, 2582, 2580, -1,2582, 2584, 2581, -1,2580, + 2578, 2583, -1,2566, 2567, 2575, -1,2585, 2586, 2587, -1,2585, 2588, 2589, -1,2590, + 2589, 2588, -1,2588, 2585, 2587, -1,2591, 2592, 2593, -1,2586, 2594, 2587, -1,2591, + 2594, 2592, -1,2586, 2592, 2594, -1,2595, 2590, 2588, -1,2587, 2596, 2588, -1,2588, + 2596, 2595, -1,2594, 2597, 2587, -1,2597, 2596, 2587, -1,2594, 2598, 2597, -1,2591, + 2598, 2594, -1,2595, 2599, 2590, -1,2600, 2601, 2602, -1,2603, 2604, 2602, -1,2604, + 2603, 2605, -1,2600, 2602, 2604, -1,2606, 2607, 2608, -1,2600, 2609, 2601, -1,2607, + 2609, 2608, -1,2609, 2607, 2601, -1,2604, 2605, 2610, -1,2604, 2611, 2600, -1,2611, + 2604, 2610, -1,2600, 2612, 2609, -1,2600, 2611, 2612, -1,2612, 2613, 2609, -1,2609, + 2613, 2608, -1,2605, 2614, 2610, -1,2615, 2616, 2617, -1,2618, 2619, 2617, -1,2617, + 2620, 2615, -1,2621, 2620, 2617, -1,2622, 2620, 2623, -1,2618, 2617, 2616, -1,2615, + 2620, 2624, -1,2625, 2624, 2622, -1,2626, 2622, 2627, -1,2622, 2626, 2625, -1,2628, + 2629, 2627, -1,2628, 2627, 2622, -1,2624, 2620, 2622, -1,2621, 2617, 2619, -1,2621, + 2630, 2631, -1,2630, 2621, 2619, -1,2632, 2623, 2631, -1,2631, 2623, 2621, -1,2630, + 2633, 2631, -1,2621, 2623, 2620, -1,2633, 2634, 2631, -1,2632, 2631, 2634, -1,2628, + 2632, 2635, -1,2632, 2628, 2623, -1,2636, 2635, 2637, -1,2635, 2636, 2628, -1,2632, + 2638, 2635, -1,2628, 2636, 2629, -1,2639, 2637, 2635, -1,2639, 2635, 2638, -1,2632, + 2634, 2638, -1,2623, 2628, 2622, -1,2640, 2641, 2642, -1,2643, 2641, 2644, -1,2645, + 2643, 2646, -1,2643, 2645, 2642, -1,2644, 2646, 2643, -1,2642, 2641, 2643, -1,2644, + 2641, 2647, -1,2648, 2649, 2644, -1,2648, 2644, 2647, -1,2650, 2649, 2648, -1,2651, + 2649, 2650, -1,2652, 2649, 2653, -1,2649, 2652, 2644, -1,2653, 2649, 2654, -1,2649, + 2651, 2654, -1,2644, 2652, 2646, -1,2655, 2656, 2657, -1,2658, 2655, 2657, -1,2655, + 2659, 2656, -1,2660, 2661, 2655, -1,2658, 2657, 2662, -1,2663, 2664, 2665, -1,2666, + 2667, 2668, -1,2666, 2668, 2665, -1,2663, 2665, 2668, -1,2660, 2658, 2669, -1,2658, + 2660, 2655, -1,2669, 2658, 2670, -1,2663, 2671, 2669, -1,2663, 2670, 2664, -1,2671, + 2663, 2668, -1,2663, 2669, 2670, -1,2658, 2664, 2670, -1,2664, 2658, 2662, -1,2672, + 2673, 2674, -1,2675, 2672, 2676, -1,2672, 2675, 2673, -1,2672, 2674, 2677, -1,2676, + 2672, 2678, -1,2678, 2677, 2679, -1,2679, 2680, 2681, -1,2681, 2682, 2679, -1,2683, + 2680, 2684, -1,2683, 2681, 2680, -1,2685, 2680, 2677, -1,2679, 2677, 2680, -1,2678, + 2672, 2677, -1,2686, 2674, 2673, -1,2674, 2687, 2688, -1,2687, 2674, 2686, -1,2674, + 2688, 2689, -1,2690, 2691, 2688, -1,2688, 2687, 2692, -1,2689, 2688, 2691, -1,2692, + 2690, 2688, -1,2685, 2689, 2684, -1,2689, 2685, 2674, -1,2684, 2693, 2683, -1,2694, + 2693, 2684, -1,2684, 2689, 2694, -1,2685, 2684, 2680, -1,2694, 2695, 2693, -1,2689, + 2691, 2694, -1,2691, 2695, 2694, -1,2674, 2685, 2677, -1,1092, 1688, 1688, -1,1092, + 1688, 1091, -1,1688, 1092, 1092, -1,1091, 1688, 2696, -1,1688, 2697, 1688, -1,2696, + 2697, 2698, -1,2698, 2697, 2699, -1,2697, 2696, 1688, -1,2700, 2698, 2695, -1,2698, + 2700, 2696, -1,2695, 2698, 2699, -1,2696, 2700, 1091, -1,2701, 1699, 1700, -1,2702, + 1700, 1701, -1,2703, 2701, 2704, -1,2701, 2703, 1699, -1,2705, 2701, 2702, -1,2701, + 2705, 2704, -1,2701, 1700, 2702, -1,1701, 1702, 2702, -1,2706, 2702, 2707, -1,2707, + 1702, 2708, -1,2707, 2708, 2709, -1,2709, 2708, 784, -1,2702, 2706, 2705, -1,2709, + 2706, 2707, -1,649, 649, 649, -1,2707, 2702, 1702, -1,2710, 2711, 2712, -1,2712, + 2713, 2714, -1,2710, 2714, 2715, -1,2716, 2714, 2713, -1,2713, 2717, 2716, -1,2712, + 2714, 2710, -1,2715, 2714, 2716, -1,2718, 2719, 2720, -1,2720, 2721, 2718, -1,2720, + 2715, 2722, -1,2723, 2721, 2720, -1,2720, 2724, 2723, -1,2720, 2719, 2715, -1,2719, + 2710, 2715, -1,2722, 2715, 2716, -1,2725, 2717, 2726, -1,2717, 2722, 2716, -1,2727, + 2722, 2725, -1,2725, 2722, 2717, -1,2717, 2728, 2726, -1,2717, 2713, 2728, -1,2726, + 2729, 2725, -1,2727, 2725, 2729, -1,2724, 2727, 2730, -1,2727, 2724, 2722, -1,2730, + 2731, 2724, -1,2727, 2732, 2730, -1,2724, 2731, 2723, -1,2732, 2733, 2730, -1,2727, + 2729, 2732, -1,2722, 2724, 2720, -1,2734, 2735, 2736, -1,2737, 2738, 2736, -1,2736, + 2739, 2734, -1,2738, 2740, 2736, -1,2741, 2738, 2737, -1,2736, 2740, 2739, -1,2736, + 2735, 2742, -1,2737, 2743, 2744, -1,2743, 2737, 2735, -1,2745, 2737, 2744, -1,2745, + 2744, 2746, -1,2744, 2745, 2746, -1,2745, 2744, 2737, -1,2746, 2745, 2746, -1,2745, + 2746, 2746, -1,2737, 2744, 2741, -1,2747, 2748, 2749, -1,2748, 2747, 2750, -1,2747, + 2749, 2751, -1,2750, 2747, 2752, -1,2751, 2752, 2747, -1,2749, 2753, 2751, -1,2754, + 2755, 2749, -1,2754, 2756, 2755, -1,2753, 2755, 2757, -1,2753, 2749, 2755, -1,2757, + 2755, 2756, -1,2749, 2748, 2754, -1,2758, 2758, 2759, -1,2759, 2758, 2759, -1,2759, + 2760, 2760, -1,2760, 2759, 2759, -1,2760, 2759, 2759, -1,2759, 2759, 2758, -1,784, + 784, 784, -1,784, 784, 784, -1,2761, 2762, 2763, -1,2761, 2764, 2762, -1,2763, 2765, + 2761, -1,2766, 2761, 2765, -1,2761, 2767, 2764, -1,2767, 2761, 2766, -1,2766, 2765, + 2768, -1,2769, 2770, 2771, -1,2771, 2770, 2772, -1,2772, 2773, 2774, -1,2773, 2772, + 2775, -1,2774, 2773, 2776, -1,2772, 2774, 2771, -1,2769, 2771, 2774, -1,784, 2777, + 784, -1,2777, 2778, 784, -1,2778, 2777, 2769, -1,2777, 2770, 2769, -1,649, 649, 649, -1, + 2779, 2776, 2775, -1,2780, 2779, 2781, -1,2779, 2780, 2782, -1,2783, 2783, 2783, -1, + 2776, 2779, 2784, -1,2784, 2779, 2785, -1,2785, 2779, 2786, -1,649, 649, 649, -1, + 2775, 2776, 2773, -1,2787, 2788, 2789, -1,2789, 2790, 2791, -1,2792, 2791, 2790, -1, + 2787, 2791, 2793, -1,2794, 2793, 2791, -1,2791, 2787, 2789, -1,2791, 2792, 2795, -1, + 2794, 2795, 2796, -1,2797, 2796, 2798, -1,2799, 2793, 2794, -1,2799, 2794, 2797, -1, + 2798, 2800, 2797, -1,2797, 2794, 2796, -1,2797, 2800, 2799, -1,2794, 2791, 2795, -1, + 2801, 2802, 2803, -1,2802, 2804, 2805, -1,2804, 2802, 2801, -1,2801, 2803, 2806, -1, + 2803, 2802, 2807, -1,2808, 2809, 2807, -1,2808, 2810, 2811, -1,2810, 2807, 2802, -1, + 2808, 2812, 2809, -1,2813, 2812, 2808, -1,2811, 2810, 2805, -1,2810, 2808, 2807, -1, + 2802, 2805, 2810, -1,2804, 2814, 2805, -1,2805, 2815, 2811, -1,2815, 2805, 2814, -1, + 2815, 2814, 2816, -1,2817, 2811, 2815, -1,2816, 2818, 2815, -1,2817, 2815, 2818, -1, + 2819, 2813, 2820, -1,2817, 2813, 2811, -1,2819, 2821, 2813, -1,2813, 2817, 2820, -1, + 2813, 2821, 2812, -1,2820, 2822, 2819, -1,2817, 2818, 2820, -1,2818, 2822, 2820, -1, + 2811, 2813, 2808, -1,2823, 2824, 2825, -1,2826, 2823, 2825, -1,2824, 2823, 2827, -1, + 2828, 2823, 2826, -1,2826, 2829, 2828, -1,2825, 2830, 2826, -1,2827, 2823, 2828, -1, + 2831, 2832, 2833, -1,2827, 2831, 2833, -1,2831, 2827, 2834, -1,2835, 2836, 2837, -1, + 2837, 2831, 2835, -1,2837, 2838, 2832, -1,2833, 2824, 2827, -1,2831, 2837, 2832, -1, + 2834, 2827, 2828, -1,2829, 2839, 2840, -1,2841, 2834, 2840, -1,2834, 2828, 2840, -1, + 2839, 2842, 2840, -1,2840, 2828, 2829, -1,2843, 2842, 2839, -1,2841, 2840, 2842, -1, + 2835, 2841, 2844, -1,2841, 2835, 2834, -1,2845, 2844, 2846, -1,2844, 2845, 2835, -1, + 2841, 2847, 2844, -1,2835, 2845, 2836, -1,2847, 2846, 2844, -1,2841, 2842, 2847, -1, + 2834, 2835, 2831, -1,2848, 2849, 2850, -1,2851, 2850, 2852, -1,2853, 2848, 2854, -1, + 2848, 2853, 2849, -1,2854, 2851, 2855, -1,2851, 2854, 2848, -1,2848, 2850, 2851, -1, + 2852, 2856, 2851, -1,2857, 2856, 2858, -1,2858, 2856, 2852, -1,2855, 2856, 2857, -1, + 2856, 2855, 2851, -1,2859, 2858, 2860, -1,2861, 2859, 2860, -1,2862, 2863, 2859, -1, + 2864, 2861, 2865, -1,2859, 2861, 2864, -1,2859, 2864, 2862, -1,2863, 2858, 2859, -1, + 2861, 2860, 2866, -1,2867, 2861, 2868, -1,2868, 2861, 2866, -1,2867, 2868, 2869, -1, + 2870, 2867, 2871, -1,2867, 2870, 2861, -1,2871, 2867, 2872, -1,2867, 2869, 2872, -1, + 2861, 2870, 2865, -1,2873, 2874, 2875, -1,2876, 2875, 2877, -1,2875, 2876, 2873, -1, + 2878, 2879, 2874, -1,2875, 2879, 2877, -1,2879, 2875, 2874, -1,2879, 2880, 2881, -1, + 2880, 2879, 2878, -1,2881, 2882, 2882, -1,2882, 2881, 2880, -1,2879, 2881, 2880, -1, + 2880, 2878, 2879, -1,2880, 2881, 2882, -1,2879, 2878, 2877, -1,2883, 2884, 2885, -1, + 2886, 2885, 2887, -1,2888, 2889, 2883, -1,2883, 2886, 2890, -1,2883, 2889, 2884, -1, + 2890, 2886, 2891, -1,2883, 2890, 2888, -1,2885, 2886, 2883, -1,2887, 2892, 2886, -1, + 2893, 2892, 2894, -1,2893, 2894, 2895, -1,2886, 2896, 2891, -1,2886, 2893, 2896, -1, + 2896, 2893, 2897, -1,2897, 2893, 2895, -1,2893, 2886, 2892, -1,2898, 2899, 2900, -1, + 2901, 2900, 2902, -1,2903, 2901, 2904, -1,2901, 2903, 2898, -1,2902, 2904, 2901, -1, + 2898, 2900, 2901, -1,2902, 2900, 2905, -1,2906, 2902, 2907, -1,2907, 2902, 2905, -1, + 2908, 2906, 2907, -1,2909, 2906, 2908, -1,2910, 2906, 2911, -1,2906, 2910, 2902, -1, + 2906, 2909, 2911, -1,2911, 2909, 2912, -1,2902, 2910, 2904, -1,2913, 2914, 2915, -1, + 2913, 2916, 2914, -1,2915, 2917, 2913, -1,2918, 2919, 2913, -1,2913, 2919, 2916, -1, + 2918, 2913, 2917, -1,2920, 2921, 2922, -1,2923, 2922, 2924, -1,2925, 2922, 2921, -1, + 2921, 2926, 2925, -1,2920, 2922, 2923, -1,2924, 2922, 2925, -1,2927, 2928, 2929, -1, + 2928, 2930, 2929, -1,2928, 2924, 2931, -1,2932, 2930, 2928, -1,2928, 2933, 2932, -1, + 2928, 2927, 2924, -1,2927, 2923, 2924, -1,2931, 2924, 2925, -1,2934, 2935, 2925, -1, + 2936, 2931, 2935, -1,2931, 2925, 2935, -1,2934, 2937, 2935, -1,2925, 2926, 2934, -1, + 2938, 2937, 2934, -1,2939, 2935, 2937, -1,2933, 2936, 2940, -1,2936, 2933, 2931, -1, + 2941, 2940, 2942, -1,2940, 2941, 2933, -1,2936, 2939, 2940, -1,2933, 2941, 2932, -1, + 2943, 2943, 2942, -1,2936, 2935, 2939, -1,2931, 2933, 2928, -1,2942, 2944, 2945, -1, + 2946, 2947, 2948, -1,2944, 2946, 2948, -1,2949, 2945, 2950, -1,2945, 2949, 2942, -1, + 2950, 2948, 2951, -1,2948, 2950, 2945, -1,2952, 2951, 2948, -1,2945, 2944, 2948, -1, + 2948, 2947, 2953, -1,2954, 2955, 2953, -1,2955, 2956, 2957, -1,2953, 2947, 2958, -1, + 2948, 2953, 2952, -1,2955, 2957, 2953, -1,2953, 2958, 2954, -1,2953, 2957, 2952, -1, + 2959, 2960, 2961, -1,2961, 2962, 2963, -1,2961, 2964, 2959, -1,2963, 2964, 2961, -1, + 2965, 2964, 2966, -1,2962, 2961, 2960, -1,2959, 2964, 2967, -1,2968, 2967, 2965, -1, + 2968, 2969, 2970, -1,2969, 2968, 2965, -1,2971, 2969, 2965, -1,2971, 2965, 2972, -1, + 2967, 2964, 2965, -1,2973, 2963, 2962, -1,2963, 2974, 2975, -1,2974, 2963, 2973, -1, + 2976, 2966, 2975, -1,2975, 2966, 2963, -1,2974, 2977, 2975, -1,2963, 2966, 2964, -1, + 2978, 2977, 2974, -1,2979, 2975, 2977, -1,2972, 2976, 2980, -1,2976, 2972, 2966, -1, + 2981, 2980, 2982, -1,2980, 2981, 2972, -1,2976, 2983, 2980, -1,2972, 2981, 2971, -1, + 2979, 2983, 2976, -1,2983, 2982, 2980, -1,2976, 2975, 2979, -1,2966, 2972, 2965, -1, + 2984, 2985, 2986, -1,2987, 2986, 2988, -1,2986, 2987, 2984, -1,2989, 2990, 2985, -1, + 2986, 2990, 2988, -1,2990, 2986, 2985, -1,2990, 2991, 2992, -1,2991, 2990, 2989, -1, + 2992, 2993, 2994, -1,2993, 2992, 2991, -1,2990, 2992, 2995, -1,2995, 2996, 2990, -1, + 2995, 2992, 2994, -1,2990, 2996, 2988, -1,2997, 2998, 2999, -1,3000, 3001, 2998, -1, + 2998, 3002, 3003, -1,3002, 2998, 3001, -1,3001, 3004, 3002, -1,3000, 2998, 2997, -1, + 2999, 2998, 3005, -1,3006, 3007, 3008, -1,3003, 3007, 3006, -1,3003, 3005, 2998, -1, + 3009, 3008, 3007, -1,3010, 3007, 3003, -1,3007, 3011, 3009, -1,3006, 3005, 3003, -1, + 3010, 3003, 3002, -1,3012, 3013, 3014, -1,3013, 3012, 3004, -1,3012, 3015, 3010, -1, + 3010, 3002, 3012, -1,3015, 3012, 3014, -1,3012, 3002, 3004, -1,3016, 3015, 3014, -1, + 3017, 3011, 3018, -1,3015, 3011, 3010, -1,3017, 3019, 3011, -1,3011, 3015, 3018, -1, + 3011, 3019, 3009, -1,3020, 3021, 3017, -1,3018, 3015, 3016, -1,3020, 3017, 3018, -1, + 3016, 3020, 3018, -1,3010, 3011, 3007, -1,3008, 3022, 3023, -1,3024, 3023, 3025, -1, + 3023, 3026, 3008, -1,3024, 3027, 3023, -1,3027, 3026, 3023, -1,3023, 3022, 3025, -1, + 3028, 3025, 3022, -1,3025, 3028, 3029, -1,3029, 3030, 3031, -1,3031, 3030, 3032, -1, + 3029, 3031, 3025, -1,3025, 3031, 3033, -1,3032, 3033, 3031, -1,649, 649, 649, -1, + 3030, 3034, 3034, -1,3025, 3033, 3024, -1,3035, 3036, 3037, -1,3038, 3036, 3035, -1, + 3036, 3038, 3039, -1,649, 649, 649, -1,3035, 3040, 3038, -1,3041, 3042, 3034, -1, + 3042, 3041, 3043, -1,3034, 3042, 3034, -1,3044, 3043, 3041, -1,3045, 3046, 3047, -1, + 3048, 3045, 3047, -1,3049, 3047, 3050, -1,3049, 3048, 3047, -1,3050, 3047, 3051, -1, + 3052, 3051, 3047, -1,3053, 3051, 3052, -1,3046, 3052, 3047, -1,3054, 3055, 3056, -1, + 3057, 3058, 3059, -1,3055, 3057, 3056, -1,3060, 3051, 3061, -1,3051, 3060, 3050, -1, + 3061, 3051, 3056, -1,3057, 3059, 3056, -1,3056, 3051, 3054, -1,3056, 3059, 3061, -1, + 3054, 3051, 3053, -1,107, 107, 107, -1,107, 107, 107, -1,3062, 3063, 3064, -1,3064, + 3063, 3065, -1,3062, 3064, 3066, -1,3064, 3067, 3066, -1,3067, 3064, 3065, -1,3067, + 3065, 3068, -1,3063, 3069, 3065, -1,3070, 3069, 3071, -1,3070, 3071, 3072, -1,3068, + 3065, 3073, -1,3070, 3074, 3073, -1,3074, 3070, 3072, -1,3070, 3073, 3065, -1,3070, + 3065, 3069, -1,3075, 1664, 3076, -1,3076, 1664, 1666, -1,3075, 3076, 3077, -1,3078, + 3076, 1666, -1,3076, 3078, 3077, -1,1664, 3079, 1666, -1,3080, 3079, 3081, -1,1666, + 1670, 3078, -1,1666, 3080, 1670, -1,3082, 1670, 3080, -1,3080, 3081, 3082, -1,3080, + 1666, 3079, -1,1409, 1412, 3083, -1,3084, 3084, 3084, -1,3083, 3082, 1409, -1,1410, + 3083, 1412, -1,1413, 3083, 1410, -1,1412, 1413, 1410, -1,3085, 3085, 3085, -1,3086, + 1415, 1415, -1,3087, 1410, 3086, -1,1413, 1410, 3087, -1,1415, 3087, 3086, -1,3086, + 1410, 1413, -1,1396, 3088, 1396, -1,1401, 3088, 1402, -1,3088, 1397, 1396, -1,1397, + 3088, 1401, -1,1397, 1401, 1402, -1,3089, 3089, 3089, -1,1406, 1405, 3090, -1,1406, + 3090, 1401, -1,3091, 3091, 3091, -1,1402, 1401, 3090, -1,1405, 3090, 1405, -1,1401, + 1402, 1406, -1,1440, 3092, 1441, -1,3092, 1440, 3093, -1,1441, 1443, 3094, -1,1443, + 1441, 3092, -1,1443, 3092, 3095, -1,3092, 3093, 3095, -1,3096, 3094, 1443, -1,1443, + 1449, 3096, -1,1449, 1450, 3096, -1,3096, 1450, 3097, -1,3094, 3096, 3097, -1,1443, + 3095, 1449, -1,1454, 1454, 1455, -1,1452, 1455, 3098, -1,1452, 1454, 1455, -1,1452, + 3098, 1453, -1,1457, 1459, 3099, -1,3099, 1453, 3098, -1,3099, 3098, 3100, -1,3099, + 3100, 1457, -1,1459, 1457, 1460, -1,1460, 1460, 1459, -1,1457, 3100, 1460, -1,833, + 833, 833, -1,833, 833, 833, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1, + 3101, 3101, 3102, -1,3102, 3101, 3103, -1,3102, 3104, 3104, -1,3104, 3102, 3103, -1, + 3104, 3103, 3102, -1,3102, 3103, 3101, -1,784, 784, 784, -1,784, 784, 784, -1,3105, + 3106, 3107, -1,3108, 3106, 3105, -1,3109, 3105, 3110, -1,3105, 3109, 3108, -1,3107, + 3110, 3105, -1,1713, 3106, 3108, -1,3111, 3108, 3112, -1,1713, 3108, 3111, -1,3113, + 3111, 3112, -1,1713, 3114, 3108, -1,3112, 3108, 3114, -1,3115, 3112, 3114, -1,3112, + 3115, 3113, -1,3109, 1713, 3108, -1,3116, 3117, 3118, -1,3116, 3118, 3119, -1,3120, + 1781, 3121, -1,3118, 3120, 3121, -1,3118, 3117, 3122, -1,3120, 3118, 3122, -1,3119, + 3118, 3123, -1,3121, 3123, 3118, -1,3124, 3116, 3119, -1,3125, 3126, 3127, -1,3119, + 3127, 3128, -1,3129, 1793, 3130, -1,3125, 3130, 3126, -1,1787, 3131, 3119, -1,3125, + 3119, 3131, -1,3123, 1787, 3119, -1,3125, 3129, 3130, -1,3127, 3119, 3125, -1,3131, + 3129, 3125, -1,3124, 3119, 3128, -1,3132, 3132, 3133, -1,3134, 3135, 3133, -1,3135, + 3134, 3136, -1,3137, 3133, 3135, -1,3137, 3132, 3133, -1,3138, 3139, 3135, -1,3137, + 3135, 3139, -1,3135, 3140, 3138, -1,3141, 3140, 3136, -1,3136, 3140, 3135, -1,3136, + 3142, 3141, -1,3143, 3141, 3142, -1,3144, 3138, 3141, -1,3141, 3143, 3144, -1,3144, + 3143, 3145, -1,3143, 3146, 3145, -1,3141, 3138, 3140, -1,3147, 3148, 1905, -1,3149, + 3148, 3147, -1,3150, 3151, 3152, -1,3150, 3152, 3153, -1,3149, 3154, 3153, -1,3153, + 3148, 3149, -1,3151, 3150, 3155, -1,3156, 3152, 3151, -1,3154, 3150, 3153, -1,3156, + 3151, 3155, -1,3156, 3157, 784, -1,784, 784, 3156, -1,3156, 3155, 3157, -1,3158, + 3159, 3160, -1,1968, 3159, 3158, -1,1967, 3158, 3160, -1,1967, 1966, 3158, -1,1968, + 3158, 1966, -1,3161, 1968, 1966, -1,1968, 1971, 3159, -1,3162, 1971, 3163, -1,1968, + 3161, 3163, -1,3164, 3162, 3163, -1,3163, 3161, 3164, -1,1971, 1968, 3163, -1,3165, + 3166, 3162, -1,3167, 3167, 3167, -1,3168, 3166, 3165, -1,3169, 3165, 3162, -1,3162, + 1928, 3169, -1,3168, 3170, 3166, -1,3171, 1939, 1938, -1,3170, 1938, 1937, -1,3168, + 3172, 3170, -1,3171, 3170, 3172, -1,3173, 3173, 3173, -1,1939, 3171, 1939, -1,3171, + 1938, 3170, -1,3166, 3170, 1937, -1,3174, 3175, 1946, -1,3176, 3177, 3174, -1,3175, + 3174, 3177, -1,3178, 3177, 3176, -1,3179, 3179, 3179, -1,3176, 3180, 3178, -1,3181, + 3180, 3182, -1,3178, 3180, 3181, -1,3183, 3183, 3183, -1,1951, 1950, 3180, -1,3182, + 3180, 1950, -1,3182, 1950, 1949, -1,1949, 1949, 3182, -1,3176, 1951, 3180, -1,3184, + 3185, 3186, -1,3184, 3187, 3185, -1,3188, 3185, 3187, -1,3189, 3184, 3186, -1,3190, + 3187, 3184, -1,3191, 3192, 3193, -1,3193, 3192, 3194, -1,3195, 3186, 3191, -1,3196, + 3189, 3195, -1,3191, 3193, 3195, -1,3195, 3189, 3186, -1,3189, 3197, 3184, -1,3197, + 3189, 3196, -1,3184, 3197, 3190, -1,3198, 3195, 3193, -1,3195, 3198, 3196, -1,3190, + 3199, 3187, -1,3200, 3201, 3202, -1,3201, 3203, 3202, -1,3203, 3201, 3204, -1,3200, + 3202, 3205, -1,3202, 3203, 3206, -1,3207, 3208, 3209, -1,3210, 3208, 3207, -1,3209, + 3200, 3211, -1,3211, 3205, 3212, -1,3211, 3207, 3209, -1,3200, 3205, 3211, -1,3202, + 3213, 3205, -1,3212, 3205, 3213, -1,3206, 3213, 3202, -1,3207, 3211, 3214, -1,3212, + 3214, 3211, -1,3203, 3215, 3206, -1,3216, 1748, 3217, -1,3218, 3216, 3219, -1,3220, + 3219, 3217, -1,3219, 3216, 3217, -1,3221, 3219, 3222, -1,3220, 3222, 3219, -1,3219, + 3221, 3218, -1,3223, 3222, 3224, -1,3221, 3222, 3223, -1,3225, 3223, 3224, -1,1752, + 3222, 1753, -1,1752, 1751, 3224, -1,3225, 3224, 1751, -1,1752, 3224, 3222, -1,3220, + 1753, 3222, -1,3226, 3227, 3228, -1,3229, 3226, 3230, -1,3231, 3226, 3228, -1,3231, + 3228, 1977, -1,3226, 3232, 3230, -1,3231, 3232, 3226, -1,3229, 3227, 3226, -1,1987, + 1988, 3229, -1,1989, 1987, 3233, -1,3230, 3234, 3229, -1,3233, 3229, 3234, -1,3234, + 3235, 3233, -1,1989, 3233, 3235, -1,3233, 1987, 3229, -1,3227, 3229, 1988, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,3236, 3236, 3237, -1,3238, 3239, + 3240, -1,3239, 3238, 3237, -1,3240, 3239, 3241, -1,3238, 3240, 3242, -1,3243, 3237, + 3238, -1,3244, 3245, 3246, -1,3247, 3245, 3244, -1,3245, 3247, 3241, -1,3248, 3249, + 3246, -1,3250, 3248, 3251, -1,3241, 3247, 3240, -1,3240, 3247, 3252, -1,3237, 3243, + 3236, -1,3253, 3247, 3244, -1,3238, 3242, 3243, -1,3242, 3240, 3252, -1,3252, 3247, + 3253, -1,3244, 3254, 3253, -1,3249, 3250, 3255, -1,3250, 3249, 3248, -1,3256, 3250, + 3251, -1,3250, 3256, 3257, -1,3255, 3254, 3249, -1,3257, 3255, 3250, -1,3256, 833, + 3257, -1,3249, 3254, 3244, -1,3244, 3246, 3249, -1,3251, 833, 3256, -1,3258, 3259, + 3256, -1,3259, 3260, 3261, -1,3260, 3259, 3258, -1,3261, 3260, 3262, -1,3259, 3261, + 3263, -1,3262, 3264, 3261, -1,3265, 3256, 3259, -1,3266, 3264, 3267, -1,3268, 3266, + 3267, -1,3269, 3270, 3271, -1,3268, 3271, 3272, -1,3273, 3269, 3274, -1,3267, 3264, + 3262, -1,3261, 3264, 3275, -1,3265, 833, 3256, -1,3276, 3264, 3266, -1,3259, 3263, + 3265, -1,3263, 3261, 3275, -1,3275, 3264, 3276, -1,3266, 3277, 3276, -1,3278, 3277, + 3272, -1,3272, 3277, 3266, -1,3270, 3272, 3271, -1,3278, 3272, 3270, -1,3273, 3278, + 3270, -1,3273, 3270, 3269, -1,3274, 3279, 3273, -1,3266, 3268, 3272, -1,3256, 833, + 3258, -1,3280, 3274, 3281, -1,3282, 3283, 3284, -1,3283, 3282, 3281, -1,3284, 3283, + 3285, -1,3282, 3284, 3286, -1,3287, 3281, 3282, -1,3288, 3289, 3290, -1,3291, 3292, + 3293, -1,3293, 3292, 3285, -1,3290, 3291, 3293, -1,3288, 3294, 3295, -1,3285, 3292, + 3284, -1,3284, 3292, 3296, -1,3281, 3287, 3280, -1,3297, 3292, 3291, -1,3282, 3286, + 3287, -1,3286, 3284, 3296, -1,3296, 3292, 3297, -1,3291, 3298, 3297, -1,3289, 3295, + 3299, -1,3295, 3289, 3288, -1,3300, 3295, 3294, -1,3295, 3300, 3301, -1,3299, 3298, + 3289, -1,3301, 3299, 3295, -1,3300, 784, 3301, -1,3289, 3298, 3291, -1,3291, 3290, + 3289, -1,3294, 784, 3300, -1,3302, 3303, 3304, -1,3305, 3304, 3306, -1,3302, 3300, + 3303, -1,3302, 3304, 3305, -1,3302, 3305, 3307, -1,3308, 3300, 3302, -1,3306, 3309, + 3305, -1,3309, 3310, 3311, -1,3311, 3310, 3312, -1,3313, 3314, 3315, -1,3312, 3315, + 3316, -1,3317, 3313, 3318, -1,3310, 3309, 3306, -1,3305, 3309, 3319, -1,3308, 784, + 3300, -1,3320, 3309, 3311, -1,3302, 3307, 3308, -1,3307, 3305, 3319, -1,3319, 3309, + 3320, -1,3311, 3321, 3320, -1,3322, 3321, 3316, -1,3316, 3321, 3311, -1,3314, 3316, + 3315, -1,3322, 3316, 3314, -1,3317, 3322, 3314, -1,3317, 3314, 3313, -1,3318, 3318, + 3317, -1,3311, 3312, 3316, -1,3300, 784, 3303, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,3323, 3324, + 3325, -1,3325, 3324, 3326, -1,3327, 3325, 3328, -1,3326, 3328, 3325, -1,3325, 3327, + 3323, -1,3326, 3324, 3329, -1,3330, 3326, 3331, -1,3331, 3326, 3329, -1,3330, 3331, + 3332, -1,3326, 3333, 3334, -1,3333, 3326, 3330, -1,3333, 3330, 3335, -1,3335, 3330, + 3332, -1,3326, 3334, 3328, -1,3336, 3336, 3337, -1,3336, 3336, 3338, -1,524, 524, + 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, + 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1, + 524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, + 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, + 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1, + 524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, + 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,3339, 3339, 3340, -1, + 833, 3340, 3341, -1,3339, 3339, 3340, -1,3341, 3339, 3339, -1,3339, 3341, 3340, -1, + 3341, 833, 833, -1,3342, 3343, 3344, -1,3344, 3343, 3345, -1,3346, 3344, 3347, -1, + 3345, 3347, 3344, -1,3344, 3346, 3342, -1,3345, 3343, 3348, -1,3349, 3345, 3350, -1, + 3350, 3345, 3348, -1,3349, 3350, 3351, -1,3345, 3352, 3353, -1,3352, 3345, 3349, -1, + 3352, 3349, 3354, -1,3354, 3349, 3351, -1,3345, 3353, 3347, -1,3355, 3356, 3355, -1, + 3355, 3357, 3355, -1,833, 833, 833, -1,833, 833, 833, -1,649, 649, 649, -1,649, 649, + 649, -1,784, 784, 784, -1,784, 784, 784, -1,3358, 3358, 3358, -1,3358, 3358, 3358, -1, + 3359, 3360, 3361, -1,3361, 3360, 3362, -1,3363, 3361, 3364, -1,3362, 3364, 3361, -1, + 3361, 3363, 3359, -1,3362, 3360, 3365, -1,3366, 3362, 3367, -1,3367, 3362, 3365, -1, + 3366, 3367, 3368, -1,3362, 3369, 3370, -1,3369, 3362, 3366, -1,3369, 3366, 3371, -1, + 3371, 3366, 3368, -1,3362, 3370, 3364, -1,3372, 3372, 3373, -1,784, 3373, 3374, -1, + 3372, 3372, 3373, -1,3374, 3372, 3372, -1,3372, 3374, 3373, -1,3374, 784, 784, -1, + 3375, 3376, 3377, -1,3377, 3376, 3378, -1,3379, 3377, 3380, -1,3378, 3380, 3377, -1, + 3377, 3379, 3375, -1,3378, 3376, 3381, -1,3382, 3378, 3383, -1,3383, 3378, 3381, -1, + 3382, 3383, 3384, -1,3378, 3385, 3386, -1,3385, 3378, 3382, -1,3385, 3382, 3387, -1, + 3387, 3382, 3384, -1,3378, 3386, 3380, -1,3388, 3388, 3388, -1,3388, 3388, 3388, -1, + 784, 784, 784, -1,784, 784, 784, -1,107, 107, 107, -1,107, 107, 107, -1,833, 833, + 833, -1,833, 833, 833, -1,107, 107, 107, -1,107, 107, 107, -1,107, 107, 107, -1,107, + 107, 107, -1,833, 833, 833, -1,833, 833, 833, -1,524, 524, 524, -1,524, 524, 524, -1, + 524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,524, 524, 524, -1,784, 784, + 784, -1,784, 784, 784, -1,107, 107, 107, -1,107, 107, 107, -1,649, 649, 649, -1,649, + 649, 649, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link5.wrl b/examples/rlsg/mitsubishi-rv6sl/link5.wrl new file mode 100644 index 00000000..09f0953e --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link5.wrl @@ -0,0 +1,1487 @@ +#VRML V2.0 utf8 + +DEF link5a Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.749020 0.749020 0.698039 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 1442 + 0.045149 0.026245 0.057007, 0.046736 0.025635 0.057007, 0.047956 0.024536 0.057007, 0.048811 0.023071 0.057007, + 0.049116 0.021423 0.057007, 0.049299 0.010742 0.057007, 0.049482 0 0.057007, 0.049299 -0.010742 0.057007, + 0.049116 -0.021423 0.057007, 0.048811 -0.023071 0.057007, 0.047956 -0.024536 0.057007, 0.046736 -0.025635 0.057007, + 0.045149 -0.026245 0.057007, 0.007248 -0.034241 0.057007, 0.003647 -0.03479 0.057007, -1.5e-005 -0.034973 0.057007, + -0.007217 -0.034241 0.057007, -0.045183 -0.026245 0.057007, -0.046709 -0.025635 0.057007, -0.047991 -0.024536 0.057007, + -0.048845 -0.023071 0.057007, -0.04915 -0.021423 0.057007, -0.049334 -0.010742 0.057007, -0.049517 0 0.057007, + -0.049333 0.010742 0.057007, -0.04915 0.021423 0.057007, -0.048845 0.023071 0.057007, -0.047991 0.024536 0.057007, + -0.046709 0.025635 0.057007, -0.045183 0.026245 0.057007, -0.007217 0.034241 0.057007, -0.003616 0.03479 0.057007, + -1.5e-005 0.034973 0.057007, 0.007248 0.034241 0.057007, 0.045149 0.026245 0.057007, 0.046156 0.026001 -0.001312, + 0.045881 0.026062 -0.030457, 0.045057 0.026245 -0.059601, 0.046614 0.025635 -0.059662, 0.047895 0.024536 -0.059723, + 0.048719 0.023071 -0.059784, 0.049025 0.021423 -0.059784, 0.049849 0.021301 -0.030609, 0.050123 0.02124 -0.001404, + 0.049116 0.021423 0.057007, 0.007248 0.034241 0.05603, 0.030012 0.029419 0.05603, 0.030012 0.029419 0.033569, + 0.035383 0.02832 0.027832, 0.039351 0.027466 0.02179, 0.042219 0.026855 0.015564, 0.04405 0.026489 0.009094, + 0.044935 0.026306 0.002441, 0.044783 0.026306 -0.004456, 0.04347 0.026611 -0.011597, 0.040785 0.027161 -0.019012, + 0.044447 0.026367 -0.063293, 0.044874 0.026306 -0.061462, -0.007217 0.034241 0.05603, -1.5e-005 0.034973 0.05603, + 0.003647 0.03479 0.05603, 0.007248 0.034241 0.05603, -0.007217 0.034241 0.05603, -0.029985 0.029419 0.05603, + -0.029984 0.041016 0.05603, 0.030014 0.041016 0.05603, 0.030012 0.029419 0.05603, -0.045061 0.026245 -0.059601, + -0.044878 0.026306 -0.061462, -0.044451 0.026367 -0.063293, -0.040789 0.027161 -0.019012, -0.043474 0.026611 -0.011597, + -0.044786 0.026306 -0.004456, -0.044939 0.026306 0.002441, -0.044085 0.026489 0.009094, -0.042253 0.026855 0.015564, + -0.039385 0.027466 0.02179, -0.035357 0.02832 0.027832, -0.029985 0.029419 0.033569, -0.029985 0.029419 0.05603, + -0.045916 0.026062 0.027832, -0.04616 0.026001 -0.001312, -0.048754 0.02301 -0.059784, -0.048723 0.02301 -0.060394, + -0.048662 0.02301 -0.061005, -0.048479 0.022705 -0.062897, -0.048357 0.0224 -0.063843, -0.048174 0.021912 -0.064728, + -0.048113 0.022461 -0.064667, -0.047991 0.02301 -0.064606, -0.047472 0.02417 -0.064362, -0.046679 0.025208 -0.064056, + -0.045641 0.02594 -0.06369, -0.044451 0.026367 -0.063293, -0.047319 0.025085 -0.059692, -0.048174 0.02417 -0.059753, + -0.051012 0.02301 -0.061005, -0.048662 0.02301 -0.061005, -0.049761 0.02301 -0.00473, -0.049639 0.02301 0.023315, + -0.048967 0.02301 0.054016, -0.055986 0.02301 0.054016, -0.055986 0.02301 0.04248, -0.050982 0.02301 0.04248, + -0.051012 0.015991 -0.067993, -0.046984 0.015991 -0.067993, -0.047045 0.017517 -0.067841, -0.047289 0.019043 -0.067322, + -0.048052 0.021606 -0.065186, -0.048113 0.02179 -0.064972, -0.048174 0.021912 -0.064728, -0.051012 0.022461 -0.06369, + -0.051012 0.020935 -0.065948, -0.051012 0.018677 -0.067474, -0.051012 -0.015991 -0.067993, -0.046984 -0.015991 -0.067993, + -0.047167 -0.008057 -0.067993, -0.047319 0 -0.067993, -0.047167 0.008057 -0.067993, -0.046984 0.015991 -0.067993, + -0.051012 -0.02301 -0.061005, -0.048571 -0.02301 -0.061005, -0.048449 -0.022888 -0.062256, -0.048326 -0.022522 -0.063507, + -0.047899 -0.021179 -0.065704, -0.047533 -0.020081 -0.066711, -0.047228 -0.018738 -0.067444, -0.046984 -0.015991 -0.067993, + -0.051012 -0.018677 -0.067474, -0.051012 -0.020935 -0.065948, -0.051012 -0.022461 -0.06369, -0.050982 -0.02301 0.04248, + -0.055986 -0.02301 0.04248, -0.055986 -0.02301 0.054016, -0.048967 -0.02301 0.054016, -0.0497 -0.02301 0.014954, + -0.049608 -0.02301 -0.024597, -0.049242 -0.02301 -0.042206, -0.048662 -0.02301 -0.059784, -0.048632 -0.02301 -0.060394, + -0.050982 0.022827 0.041748, -0.050982 0.0224 0.041077, -0.050982 0.02179 0.040649, -0.050982 0.020996 0.040527, + -0.050982 -0.020996 0.040527, -0.050982 -0.02179 0.040649, -0.050982 -0.0224 0.041077, -0.050982 -0.022827 0.041748, + -0.050982 -0.02301 0.04248, -0.051012 0.015991 -0.06601, -0.051012 -0.015991 -0.06601, -0.051012 -0.018127 -0.065582, + -0.051012 -0.019897 -0.064392, -0.051012 -0.021057 -0.062592, -0.051012 -0.021484 -0.060486, -0.050982 -0.021484 0.034485, + -0.050982 -0.021057 0.036621, -0.050982 -0.019897 0.038391, -0.050982 -0.018127 0.039612, -0.050982 -0.015991 0.039978, + -0.050982 0.015991 0.039978, -0.050982 0.018127 0.039612, -0.050982 0.019897 0.038391, -0.050982 0.021057 0.036621, + -0.050982 0.021484 0.034485, -0.051012 0.021484 -0.060486, -0.051012 0.021057 -0.062592, -0.051012 0.019897 -0.064392, + -0.051012 0.018127 -0.065582, -0.051012 0.015991 -0.06601, -0.050493 0.015991 -0.06601, -0.050493 -0.015991 -0.06601, + -0.051012 -0.015991 -0.06601, -0.050493 0.021484 -0.060486, -0.050493 0.021057 -0.062592, -0.050493 0.019897 -0.064392, + -0.050493 0.018127 -0.065582, -0.050493 0.021484 0.034485, -0.050493 0.015991 0.039978, -0.050493 0.018127 0.039612, + -0.050493 0.019897 0.038391, -0.050493 0.021057 0.036621, -0.050982 -0.015991 0.039978, -0.050493 -0.015991 0.039978, + -0.050493 0.015991 0.039978, -0.050493 -0.021484 0.034485, -0.050493 -0.021057 0.036621, -0.050493 -0.019897 0.038391, + -0.050493 -0.018127 0.039612, -0.051012 -0.021484 -0.060486, -0.050493 -0.021484 -0.060486, -0.050493 -0.021484 0.034485, + -0.050493 -0.018127 -0.065582, -0.050493 -0.019897 -0.064392, -0.050493 -0.021057 -0.062592, -0.055986 0.022827 0.041748, + -0.055986 0.0224 0.041077, -0.055986 0.02179 0.040649, -0.055986 0.020996 0.040527, -0.055986 0.02301 0.054016, + -0.055986 0.022827 0.054749, -0.055986 0.0224 0.05542, -0.055986 0.02179 0.055847, -0.055986 0.020996 0.05603, + -0.055986 -0.020996 0.05603, -0.055986 -0.02179 0.055847, -0.055986 -0.0224 0.05542, -0.055986 -0.022827 0.054749, + -0.055986 -0.02301 0.054016, -0.055986 -0.022827 0.041748, -0.055986 -0.0224 0.041077, -0.055986 -0.02179 0.040649, + -0.055986 -0.020996 0.040527, -0.055986 0.020996 0.040527, -0.04915 0.021423 0.055969, -0.04915 0.02124 0.055969, + -0.04915 0.020996 0.05603, -0.055986 0.020996 0.05603, -0.048967 0.022888 0.054626, -0.049028 0.022583 0.055237, + -0.04915 0.022034 0.055725, -0.049517 0 0.05603, -0.049334 0.010498 0.05603, -0.04915 0.020996 0.05603, + -0.04915 0.021423 0.056458, -0.04915 0.021423 0.057007, -0.049517 0 0.056519, -0.04915 -0.020996 0.05603, + -0.055986 -0.020996 0.05603, -0.049334 -0.010498 0.05603, -0.04915 -0.02124 0.055969, -0.04915 -0.021423 0.055969, + -0.04915 -0.022034 0.055725, -0.049028 -0.022583 0.055237, -0.048967 -0.022888 0.054626, -0.048967 -0.02301 0.054016, + -0.04915 -0.021423 0.057007, -0.04915 -0.021423 0.056458, -0.04915 -0.021423 0.055969, -0.046099 -0.026062 0.016235, + -0.04616 -0.026001 -0.00415, -0.045977 -0.026062 -0.024536, -0.048174 -0.024963 -0.024567, -0.048998 -0.024109 -0.024597, + -0.007217 -0.034241 0.046265, -0.015518 -0.032471 0.044495, -0.015518 -0.032471 0.039978, -0.024675 -0.030579 0.039978, + -0.032671 -0.02887 0.033813, -0.036089 -0.028137 0.03009, -0.039141 -0.027527 0.026001, -0.039141 -0.027527 0.029419, + -0.040911 -0.027161 0.026978, -0.042498 -0.026794 0.024414, -0.042498 -0.026794 0.017517, -0.045977 -0.026062 -0.024536, + 0.007248 -0.034241 0.046265, 0.015488 -0.032471 0.044495, -0.015518 -0.032471 0.044495, -1.5e-005 -0.034973 0.046997, + 0.003647 -0.03479 0.046814, 0.007248 -0.034241 0.057007, 0.045759 -0.026123 0.036621, 0.046064 -0.026062 0.016235, + 0.045973 -0.026062 -0.024536, 0.042524 -0.026794 0.017517, 0.042524 -0.026794 0.024414, 0.040937 -0.027161 0.026978, + 0.039167 -0.027527 0.029419, 0.039167 -0.027527 0.026001, 0.032637 -0.02887 0.033813, 0.028852 -0.029663 0.037109, + 0.024702 -0.030579 0.039978, 0.015488 -0.032471 0.039978, 0.049116 -0.021423 0.057007, 0.049726 -0.021301 0.036621, + 0.050032 -0.02124 0.016174, 0.04994 -0.02124 -0.024597, 0.049635 -0.022888 -0.024597, 0.048811 -0.024353 -0.024567, + 0.047529 -0.025452 -0.024567, 0.045973 -0.026062 -0.024536, 0.049025 -0.021179 -0.059784, 0.049574 -0.021301 -0.042511, + 0.04994 -0.02124 -0.024597, 0.050276 0 0.027771, 0.05049 0 -0.001404, 0.049391 0 -0.059814, 0.048658 -0.02301 -0.059784, + 0.047682 -0.024536 -0.059784, 0.046186 -0.025635 -0.059723, 0.044447 -0.026123 -0.059662, 0.045301 -0.026123 -0.042389, + 0.045973 -0.026062 -0.024536, 0.049025 -0.021179 -0.059784, 0.048811 -0.021179 -0.062073, 0.048323 -0.021179 -0.064362, + 0.046492 -0.021179 -0.068726, 0.046125 -0.023071 -0.068573, 0.045179 -0.024658 -0.068054, 0.043776 -0.025696 -0.067291, + 0.042158 -0.026062 -0.066376, 0.043776 -0.026123 -0.06308, 0.044233 -0.026062 -0.061371, 0.044447 -0.026123 -0.059662, + 0.0352 -0.021057 -0.07785, 0.041731 -0.021118 -0.074371, 0.044386 -0.021118 -0.071777, 0.046492 -0.021179 -0.068726, + 0.048231 0 -0.065857, 0.045271 0 -0.071259, 0.040815 0 -0.0755, 0.035292 0 -0.078186, 0.035048 -0.022949 -0.077454, + 0.034742 -0.024536 -0.076447, 0.034254 -0.025574 -0.074921, 0.033705 -0.026001 -0.073151, 0.038588 -0.026001 -0.070557, + 0.040571 -0.026062 -0.068634, 0.042158 -0.026062 -0.066376, 0.0352 -0.021057 -0.07785, 0.017805 -0.020996 -0.081818, + 1.3e-005 -0.020996 -0.08313, -0.017778 -0.020996 -0.081818, -0.035173 -0.021057 -0.07785, -0.035051 -0.022949 -0.077454, + -0.034746 -0.024536 -0.076447, -0.034258 -0.025574 -0.074921, -0.033709 -0.026001 -0.073151, -0.017046 -0.025879 -0.076935, + 1.3e-005 -0.025879 -0.078217, 0.017042 -0.025879 -0.076935, 0.033705 -0.026001 -0.073151, 0.017836 0 -0.082153, + 1.3e-005 0 -0.083496, -0.017839 0 -0.082153, -0.035295 0 -0.078186, 0.03517 0.022034 -0.07782, 0.017775 0.021973 -0.081787, + 1.3e-005 0.021973 -0.08313, -0.017778 0.021973 -0.081787, -0.035173 0.022034 -0.07782, -0.035295 0 -0.078186, + 0.035048 0.023926 -0.077454, 0.034742 0.025513 -0.076416, 0.034254 0.02655 -0.074921, 0.033705 0.026978 -0.07312, + 0.017042 0.026917 -0.076935, 1.3e-005 0.026855 -0.078217, -0.017046 0.026917 -0.076935, -0.033709 0.026978 -0.07312, + -0.034258 0.02655 -0.074921, -0.034746 0.025513 -0.076416, -0.035051 0.023926 -0.077454, 0.03517 0.022034 -0.07782, + 0.038038 0.022095 -0.076691, 0.040693 0.022095 -0.075134, 0.040449 0.023987 -0.074829, 0.039808 0.025574 -0.073944, + 0.038893 0.026611 -0.072662, 0.037825 0.027039 -0.071136, 0.035841 0.026978 -0.072296, 0.033705 0.026978 -0.07312, + 0.049025 0.021423 -0.059784, 0.04878 0.021484 -0.062286, 0.048201 0.021606 -0.064758, 0.045301 0.021912 -0.070587, + 0.043165 0.022034 -0.073059, 0.040693 0.022095 -0.075134, 0.045942 0.025757 -0.063782, 0.047132 0.024658 -0.06424, + 0.047926 0.023254 -0.064545, 0.041853 0.026794 -0.067688, 0.039991 0.026978 -0.06955, 0.037825 0.027039 -0.071136, + 0.037794 0.027588 -0.024414, 0.034346 0.027771 -0.029083, 1.3e-005 0.027466 -0.045013, 0.009901 0.027466 -0.043884, + 0.018934 0.027527 -0.040833, 0.027082 0.027649 -0.03595, 0.034346 0.027771 -0.029083, 0.030014 0.041016 0.033569, + 0.023422 0.041016 0.038452, 0.016037 0.041016 0.042053, 0.008163 0.041016 0.04425, -1.5e-005 0.041016 0.044983, + -1.5e-005 0.04248 0.044983, 0.008774 0.04248 0.044128, 0.017197 0.04248 0.041565, 0.025009 0.04248 0.037415, + 0.031845 0.04248 0.031799, 0.037399 0.04248 0.025024, 0.04155 0.04248 0.017212, 0.044113 0.04248 0.008789, 0.044998 0.04248 0, + 0.044144 0.04248 -0.008789, 0.04158 0.04248 -0.017212, 0.03743 0.04248 -0.024994, 0.031815 0.04248 -0.03183, + 0.025009 0.04248 -0.037415, 0.017227 0.04248 -0.041565, 0.008774 0.04248 -0.044128, 1.5e-005 0.04248 -0.045013, + -0.009905 0.027466 -0.043884, -0.018908 0.027527 -0.040833, -0.027086 0.027649 -0.03595, -0.034349 0.027771 -0.029083, + -0.037798 0.027039 -0.071136, -0.035845 0.026978 -0.072296, -0.033709 0.026978 -0.07312, -0.037798 0.027588 -0.024414, + -0.034349 0.027771 -0.029083, -0.008774 0.04248 -0.044128, -0.017227 0.04248 -0.041565, -0.025009 0.04248 -0.037415, + -0.031815 0.04248 -0.03183, -0.037399 0.04248 -0.024994, -0.04158 0.04248 -0.017212, -0.044144 0.04248 -0.008789, + -0.044998 0.04248 0, -0.044144 0.04248 0.008789, -0.04158 0.04248 0.017212, -0.03743 0.04248 0.025024, + -0.031815 0.04248 0.031799, -0.024979 0.04248 0.037415, -0.017227 0.04248 0.041565, -0.008804 0.04248 0.044128, + -1.5e-005 0.04248 0.044983, -0.008133 0.041016 0.04425, -0.016068 0.041016 0.042053, -0.023392 0.041016 0.038452, + -0.029984 0.041016 0.033569, -0.044451 0.026367 -0.063293, -0.043383 0.026611 -0.065582, -0.041857 0.026794 -0.067688, + -0.037798 0.027039 -0.071136, -0.046831 0.02179 -0.068115, -0.045153 0.021912 -0.07077, -0.040697 0.022095 -0.075134, + -0.040453 0.023987 -0.074829, -0.039812 0.025574 -0.073944, -0.038897 0.026611 -0.072662, -0.037798 0.027039 -0.071136, + -0.042345 0 -0.074341, -0.039019 0 -0.07663, -0.035295 0 -0.078186, -0.038042 0.022095 -0.076691, + -0.047258 -0.021179 -0.06723, -0.046495 -0.021179 -0.068726, -0.041704 -0.021118 -0.074371, -0.038622 -0.021057 -0.076416, + -0.035173 -0.021057 -0.07785, -0.04796 -0.02417 -0.059784, -0.046984 -0.025146 -0.059753, -0.045763 -0.025818 -0.059723, + -0.044451 -0.026123 -0.059662, -0.043779 -0.026123 -0.06308, -0.043077 -0.026123 -0.064758, -0.042162 -0.026062 -0.066376, + -0.043779 -0.025696 -0.067291, -0.045183 -0.024658 -0.068054, -0.046129 -0.023071 -0.068573, -0.045305 -0.026123 -0.042389, + -0.044451 -0.026123 -0.059662, -0.042498 -0.026733 -0.003418, -0.042498 -0.026611 -0.024384, -0.04088 -0.026733 -0.027008, + -0.03911 -0.026733 -0.02951, -0.042162 -0.026062 -0.066376, -0.042498 -0.027527 -0.024384, -0.042498 -0.026611 -0.024384, + -0.042498 -0.027527 0.024414, -0.024401 -0.026489 -0.042511, -0.032396 -0.026611 -0.036743, -0.035906 -0.026672 -0.033325, + -0.03911 -0.026733 -0.02951, -0.038927 -0.027527 -0.029785, -0.034655 -0.027527 -0.034637, -0.024401 -0.027527 -0.042511, + -0.033709 -0.026001 -0.073151, -0.036272 -0.026001 -0.072083, -0.038591 -0.026001 -0.070557, -0.042162 -0.026062 -0.066376, + 0.024397 -0.026489 -0.042511, 0.028547 -0.02655 -0.039825, 0.032393 -0.026611 -0.036743, 0.039106 -0.026733 -0.02951, + 0.042158 -0.026062 -0.066376, 0.024397 -0.027527 -0.042511, 0.024702 -0.027527 0.039978, 0.028852 -0.027527 0.037109, + 0.032698 -0.027527 0.033752, 0.039167 -0.027527 0.026001, 0.040937 -0.027527 0.026978, 0.042524 -0.027527 0.024414, + 0.042494 -0.027527 -0.024384, 0.034651 -0.027527 -0.034637, 0.029768 -0.027527 -0.03891, 0.024397 -0.027527 -0.042511, + -0.040911 -0.027527 0.026978, -0.039141 -0.027527 0.029419, -0.03615 -0.027527 0.030029, -0.032671 -0.027527 0.033752, + -0.024675 -0.027527 0.039978, -0.015518 -0.032471 0.039978, 0.015488 -0.032471 0.039978, -0.024675 -0.030579 0.039978, + 0.042524 -0.027527 0.024414, 0.042494 -0.026733 -0.003418, 0.042494 -0.026611 -0.024384, 0.042494 -0.027527 -0.024384, + 0.040876 -0.026733 -0.027008, 0.042494 -0.026611 -0.024384, -1.5e-005 0.04248 0.041992, 0.008224 0.04248 0.041199, + 0.016098 0.04248 0.038818, 0.023361 0.04248 0.034912, 0.029709 0.04248 0.029724, 0.034897 0.04248 0.023315, + 0.038803 0.04248 0.016052, 0.041183 0.04248 0.008179, 0.042007 0.04248 0, 0.041183 0.04248 -0.008209, + 0.038803 0.04248 -0.016083, 0.034927 0.04248 -0.023346, 0.029709 0.04248 -0.029694, 0.023331 0.04248 -0.034912, + 0.016068 0.04248 -0.038818, 0.008194 0.04248 -0.041199, 1.5e-005 0.04248 -0.041992, -0.008194 0.04248 -0.041199, + -0.016068 0.04248 -0.038818, -0.023331 0.04248 -0.034912, -0.029709 0.04248 -0.029694, -0.034927 0.04248 -0.023346, + -0.038803 0.04248 -0.016083, -0.041183 0.04248 -0.008209, -0.042007 0.04248 0, -0.041214 0.04248 0.008179, + -0.038773 0.04248 0.016052, -0.034927 0.04248 0.023315, -0.029678 0.04248 0.029724, -0.023331 0.04248 0.034912, + -0.016068 0.04248 0.038818, -0.008194 0.04248 0.041199, -1.5e-005 0.043518 0.041992, 0.008224 0.043518 0.041199, + 0.016098 0.043518 0.038818, 0.023361 0.043518 0.034912, 0.029709 0.043518 0.029724, 0.034897 0.043518 0.023315, + 0.038803 0.043518 0.016052, 0.041183 0.043518 0.008179, 0.042007 0.043518 0, 0.041183 0.043518 -0.008209, + 0.038803 0.043518 -0.016083, 0.034927 0.043518 -0.023346, 0.029709 0.043518 -0.029694, 0.023331 0.043518 -0.034912, + 0.016068 0.043518 -0.038818, 0.008194 0.043518 -0.041199, 1.5e-005 0.043518 -0.041992, 1.5e-005 0.04248 -0.041992, + -0.008194 0.043518 0.041199, -0.016068 0.043518 0.038818, -0.023331 0.043518 0.034912, -0.029678 0.043518 0.029724, + -0.034927 0.043518 0.023315, -0.038773 0.043518 0.016052, -0.041214 0.043518 0.008179, -0.042007 0.043518 0, + -0.041183 0.043518 -0.008209, -0.038803 0.043518 -0.016083, -0.034927 0.043518 -0.023346, -0.029709 0.043518 -0.029694, + -0.023331 0.043518 -0.034912, -0.016068 0.043518 -0.038818, -0.008194 0.043518 -0.041199, 0.030014 0.041016 0.033569, + 0.030014 0.041016 0.05603, -0.029984 0.041016 0.033569, -0.055986 -0.020996 0.040527, 0.049543 0.022888 -0.030548, + 0.048689 0.024353 -0.030518, 0.047377 0.025513 -0.030487, 0.049849 0.022827 -0.001312, 0.048994 0.024292 -0.001312, + 0.047682 0.025452 -0.001312, 0.049604 0.022888 0.027954, 0.04875 0.024353 0.027893, 0.047468 0.025513 0.027893, + 0.003647 0.03479 0.056519, -1.5e-005 0.034973 0.056519, -0.003616 0.03479 0.056519, -0.048418 0.023315 -0.062164, + -0.047564 0.024719 -0.061981, -0.046312 0.025757 -0.061737, -0.048998 0.022522 -0.063568, -0.048998 0.020935 -0.065948, + -0.048998 0.018555 -0.067505, -0.048998 -0.018555 -0.067505, -0.048998 -0.020935 -0.065948, -0.048998 -0.022522 -0.063568, + -0.050737 0.018005 -0.065613, -0.050737 0.019897 -0.064392, -0.050737 0.021118 -0.062531, -0.050737 0.021118 0.036499, + -0.050737 0.019897 0.038391, -0.050737 0.018005 0.039612, -0.050737 -0.018005 0.039612, -0.050737 -0.019897 0.038391, + -0.050737 -0.021118 0.036499, -0.050737 -0.021118 -0.062531, -0.050737 -0.019897 -0.064392, -0.050737 -0.018005 -0.065613, + -0.053484 0.021729 0.040649, -0.053484 0.0224 0.041077, -0.053484 0.022888 0.041748, -0.052446 0.022888 0.054749, + -0.052446 0.0224 0.05542, -0.052446 0.021729 0.055847, -0.049334 0.010742 0.056458, -0.052446 -0.022888 0.054749, + -0.052446 -0.0224 0.05542, -0.052446 -0.021729 0.055847, -0.049334 -0.010742 0.056458, -0.048967 -0.024292 -0.00415, + -0.047686 -0.025452 -0.00415, -0.048906 -0.024353 0.016296, -0.047625 -0.025452 0.016235, -0.04854 -0.024414 0.036682, + -0.047258 -0.025513 0.036682, -0.003616 -0.03479 0.051636, -1.5e-005 -0.034973 0.051636, 0.003647 -0.03479 0.051636, + 0.049421 -0.022888 0.036743, 0.048567 -0.024414 0.036682, 0.047285 -0.025513 0.036682, 0.049726 -0.022827 0.016296, + 0.048933 -0.024353 0.016296, 0.04759 -0.025452 0.016235, 0.049818 -0.022827 -0.00415, 0.048994 -0.024292 -0.00415, + 0.047682 -0.025452 -0.00415, 0.050093 -0.010742 0.027832, 0.050306 -0.010742 -0.001404, 0.050032 -0.010742 -0.030609, + 0.04936 -0.022705 -0.042206, 0.048445 -0.024353 -0.042175, 0.04698 -0.025574 -0.042145, 0.048536 -0.022705 -0.062103, + 0.04756 -0.024414 -0.061951, 0.045973 -0.025635 -0.061707, 0.048018 -0.022766 -0.064362, 0.047041 -0.024475 -0.064056, + 0.045485 -0.025635 -0.063629, 0.047224 -0.022888 -0.066528, 0.046247 -0.024597 -0.066101, 0.044722 -0.025696 -0.065491, + 0.048109 -0.01062 -0.065643, 0.045118 -0.01062 -0.071136, 0.040602 -0.01062 -0.075439, 0.044081 -0.022949 -0.071564, + 0.043226 -0.024597 -0.070862, 0.041945 -0.025696 -0.069794, 0.041487 -0.022888 -0.074097, 0.040785 -0.024536 -0.073242, + 0.039717 -0.025635 -0.07196, 0.038435 -0.022827 -0.076111, 0.037916 -0.024536 -0.075134, 0.037123 -0.025635 -0.073669, + 0.017744 -0.022766 -0.081451, 0.017561 -0.024414 -0.080353, 0.017317 -0.025513 -0.078735, 1.3e-005 -0.022766 -0.082764, + 1.3e-005 -0.024414 -0.081665, 1.3e-005 -0.025513 -0.080017, -0.017717 -0.022766 -0.081451, -0.017565 -0.024414 -0.080353, + -0.017321 -0.025513 -0.078735, 0.017927 -0.010559 -0.08197, 1.3e-005 -0.010559 -0.083313, -0.017931 -0.010559 -0.08197, + 0.017927 0.011047 -0.08197, 1.3e-005 0.011047 -0.083313, -0.017931 0.011047 -0.08197, -0.017717 0.023804 -0.081421, + -0.017565 0.025452 -0.080353, -0.017321 0.02655 -0.078705, 1.3e-005 0.023743 -0.082733, 1.3e-005 0.025391 -0.081665, + 1.3e-005 0.026489 -0.080017, 0.017744 0.023804 -0.081421, 0.017561 0.025452 -0.080353, 0.017317 0.02655 -0.078705, + 0.037855 0.023865 -0.076355, 0.037367 0.025513 -0.075378, 0.036634 0.026611 -0.073914, 0.048109 0.011047 -0.065643, + 0.045118 0.011047 -0.071136, 0.040602 0.011047 -0.075439, 0.048506 0.023071 -0.062195, 0.047651 0.024597 -0.062012, + 0.04637 0.025696 -0.061737, 0.043013 0.023682 -0.072815, 0.042311 0.025391 -0.072021, 0.041212 0.02655 -0.070831, + 0.045149 0.023315 -0.070404, 0.044477 0.025024 -0.069733, 0.043257 0.026306 -0.068756, 0.046888 0.022888 -0.067657, + 0.046186 0.024658 -0.067169, 0.044905 0.026001 -0.066406, 0.03932 0.027283 -0.045074, 0.03392 0.034363 0.029602, + 0.039719 0.034363 0.021179, 0.043625 0.034363 0.011047, 0.044998 0.034363 0, 0.043625 0.034363 -0.011078, + 0.039719 0.034363 -0.021179, 0.03392 0.034363 -0.029602, 0.026993 0.034363 -0.036011, 0.01973 0.034363 -0.040436, + 0.012589 0.034363 -0.043213, -0.012589 0.034363 -0.043213, -0.01973 0.034363 -0.040436, -0.026993 0.034363 -0.036011, + -0.03389 0.034363 -0.029602, -0.039719 0.034363 -0.021179, -0.043625 0.034363 -0.011078, -0.044998 0.034363 0, + -0.043594 0.034363 0.011047, -0.039688 0.034363 0.021179, -0.03389 0.034363 0.029602, -0.039324 0.027283 -0.045074, + -0.046892 0.022888 -0.067657, -0.04619 0.024658 -0.067169, -0.044878 0.026001 -0.066406, -0.045153 0.023315 -0.070404, + -0.044481 0.025024 -0.069733, -0.043261 0.026306 -0.068756, -0.042986 0.023682 -0.072815, -0.042315 0.025391 -0.072021, + -0.041216 0.02655 -0.070831, -0.039476 0.011047 -0.076141, -0.043291 0.011047 -0.073212, -0.046282 0.011047 -0.069458, + -0.039385 -0.01062 -0.076202, -0.043108 -0.01062 -0.073395, -0.046068 -0.01062 -0.069824, -0.047228 -0.022888 -0.066528, + -0.046251 -0.024597 -0.066101, -0.044725 -0.025696 -0.065491, -0.048021 -0.022766 -0.064362, -0.047014 -0.024475 -0.064056, + -0.045488 -0.025635 -0.063629, -0.047564 -0.024414 -0.061951, -0.045977 -0.025635 -0.061707, -0.048723 -0.023987 -0.042175, + -0.047808 -0.025024 -0.042175, -0.046618 -0.025757 -0.042145, -0.038927 -0.026978 -0.029755, -0.034655 -0.026978 -0.034637, + -0.029741 -0.026978 -0.03894, -0.038439 -0.022827 -0.076111, -0.03792 -0.024536 -0.075134, -0.037127 -0.025635 -0.073669, + -0.041491 -0.022888 -0.074097, -0.040758 -0.024536 -0.073242, -0.039721 -0.025635 -0.07196, -0.044085 -0.022949 -0.071564, + -0.04323 -0.024597 -0.070862, -0.041948 -0.025696 -0.069794, 0.028852 -0.029053 0.037109, -0.028826 -0.029053 0.037109, + 0.040937 -0.027161 0.026978, 0.029768 -0.026978 -0.03894, 0.034651 -0.026978 -0.034637, 0.038923 -0.026978 -0.029755, + -0.040911 -0.027161 0.026978, -0.037859 0.023865 -0.076355, -0.037371 0.025513 -0.075378, -0.036638 0.026611 -0.073914, + 0.011765 0.04303 -0.040314, 0.018417 0.04303 -0.03775, 0.025192 0.04303 -0.0336, 0.031631 0.04303 -0.027618, + 0.037064 0.04303 -0.019775, 0.040695 0.04303 -0.010345, 0.042007 0.04303 0, 0.040695 0.04303 0.010315, + 0.037033 0.04303 0.019775, 0.031662 0.04303 0.027588, 0.025192 0.04303 0.033569, 0.018417 0.04303 0.037781, + 0.011765 0.04303 0.040344, -0.011734 0.04303 0.040344, -0.018387 0.04303 0.037781, -0.025223 0.04303 0.033569, + -0.031631 0.04303 0.027588, -0.037064 0.04303 0.019775, -0.040726 0.04303 0.010315, -0.042007 0.04303 0, + -0.040695 0.04303 -0.010345, -0.037064 0.04303 -0.019775, -0.031631 0.04303 -0.027618, -0.025192 0.04303 -0.0336, + -0.018417 0.04303 -0.03775, -0.011765 0.04303 -0.040314, 0.050093 0.010742 0.027832, 0.050306 0.010742 -0.001404, + 0.050032 0.010742 -0.030609, -0.048723 0.024353 0.027893, -0.047441 0.025513 0.027893, -0.048998 0.024292 -0.001312, + -0.047686 0.025452 -0.001312, -0.048693 0.024353 -0.030518, -0.04738 0.025513 -0.030487, -0.053484 -0.022888 0.041748, + -0.053484 -0.0224 0.041077, -0.053484 -0.021729 0.040649, -0.051012 0.02301 -0.009247, -0.051012 -0.02301 -0.009247, + -0.050981 0 0.040527, -0.050982 0.010498 0.040527, -0.050982 0.015747 0.040527, -0.050982 -0.010498 0.040527, + -0.050982 -0.015747 0.040527, -0.050981 0 0.039978, -0.050982 -0.007996 0.039978, -0.050982 -0.012024 0.039978, + -0.050982 0.007996 0.039978, -0.050982 0.012024 0.039978, -0.049639 -0.02301 -0.004822, -0.049334 -0.02301 0.034485, + -0.04915 -0.02301 0.04425, -0.044237 -0.026428 -0.003479, 0.047407 -0.021179 -0.066559, 0.042952 -0.026123 -0.064728, + 0.038465 -0.021057 -0.076111, 0.026718 0.041016 0.036011, 0.01976 0.041016 0.040222, 0.012131 0.041016 0.043152, + -0.0121 0.041016 0.043152, -0.01973 0.041016 0.040222, -0.026688 0.041016 0.036011, -0.039843 0.026917 -0.069397, + -0.047655 0.020325 -0.066254, -0.044878 -0.026123 -0.051025, -0.041704 -0.026672 -0.025696, -0.042101 -0.026672 -0.025055, + -0.042284 -0.026611 -0.024719, -0.044115 -0.021118 -0.071564, 0.030745 -0.029297 0.035461, 0.035933 -0.028198 0.029907, + -0.028643 -0.029724 0.036926, -0.030657 -0.029297 0.035339, 0.0417 -0.026672 -0.025696, 0.042097 -0.026672 -0.025055, + -0.049273 0.02301 0.038696, -0.049242 0.02301 -0.032257, -0.049517 0.02301 -0.018494, 0.048811 0.023071 0.057007, + 0.047956 0.024536 0.057007, 0.046736 0.025635 0.057007, 0.045881 0.026062 -0.030457, 0.045149 0.026245 0.057007, + 0.007248 0.034241 0.057007, 0.045057 0.026245 -0.059601, 0.046156 0.026001 -0.001312, -1.5e-005 0.034973 0.057007, + 0.007248 0.034241 0.057007, -0.003616 0.03479 0.057007, -0.007217 0.034241 0.057007, 0.003647 0.03479 0.05603, + 0.007248 0.034241 0.05603, -1.5e-005 0.034973 0.05603, -0.045183 0.026245 0.057007, -0.007217 0.034241 0.057007, + -0.007217 0.034241 0.05603, -0.045061 0.026245 -0.059601, -0.044878 0.026306 -0.061462, -0.048754 0.02301 -0.059784, + -0.048723 0.02301 -0.060394, -0.048357 0.0224 -0.063843, -0.051012 0.02301 -0.061005, -0.048662 0.02301 -0.061005, + -0.048479 0.022705 -0.062897, -0.051012 0.015991 -0.067993, -0.051012 -0.015991 -0.067993, -0.051012 -0.02301 -0.061005, + -0.048571 -0.02301 -0.061005, -0.051012 0.018677 -0.067474, -0.051012 0.015991 -0.067993, -0.051012 0.020935 -0.065948, + -0.051012 0.02301 -0.061005, -0.051012 0.022461 -0.06369, -0.051012 -0.015991 -0.067993, -0.051012 -0.018677 -0.067474, + -0.051012 -0.020935 -0.065948, -0.051012 -0.022461 -0.06369, -0.051012 -0.02301 -0.061005, -0.050982 0.02301 0.04248, + -0.051012 0.018127 -0.065582, -0.051012 0.015991 -0.06601, -0.050493 0.015991 -0.06601, -0.051012 0.019897 -0.064392, + -0.051012 0.021057 -0.062592, -0.051012 0.021484 -0.060486, -0.050493 0.021484 -0.060486, -0.050982 0.021484 0.034485, + -0.050982 0.021057 0.036621, -0.050493 0.021484 0.034485, -0.050982 0.019897 0.038391, -0.050982 0.018127 0.039612, + -0.050982 0.015991 0.039978, -0.050982 -0.018127 0.039612, -0.050982 -0.015991 0.039978, -0.050493 -0.015991 0.039978, + -0.050982 -0.019897 0.038391, -0.050982 -0.021057 0.036621, -0.050982 -0.021484 0.034485, -0.051012 -0.021057 -0.062592, + -0.051012 -0.021484 -0.060486, -0.050493 -0.021484 -0.060486, -0.051012 -0.019897 -0.064392, -0.051012 -0.018127 -0.065582, + -0.051012 -0.015991 -0.06601, -0.050493 -0.015991 -0.06601, -0.050493 -0.018127 -0.065582, -0.050493 -0.021484 -0.060486, + -0.050493 -0.019897 -0.064392, -0.050493 -0.021057 -0.062592, -0.050493 -0.015991 0.039978, -0.050493 0.015991 -0.06601, + -0.050493 0.018127 -0.065582, -0.050493 0.021484 -0.060486, -0.050493 0.019897 -0.064392, -0.050493 0.021057 -0.062592, + -0.050493 0.015991 0.039978, -0.050493 -0.021484 0.034485, -0.050493 -0.021057 0.036621, -0.050493 -0.019897 0.038391, + -0.050493 -0.018127 0.039612, -0.050493 0.021057 0.036621, -0.050493 0.021484 0.034485, -0.050493 0.019897 0.038391, + -0.050493 0.018127 0.039612, -0.050982 0.020996 0.040527, -0.050982 0.02179 0.040649, -0.055986 0.02301 0.04248, + -0.050982 0.0224 0.041077, -0.050982 0.022827 0.041748, -0.050982 0.02301 0.04248, -0.055986 0.02301 0.04248, + -0.055986 0.022827 0.041748, -0.055986 0.0224 0.041077, -0.055986 0.02179 0.040649, -0.055986 -0.02301 0.04248, + -0.055986 0.02301 0.054016, -0.048967 0.02301 0.054016, -0.055986 0.022827 0.054749, -0.055986 0.0224 0.05542, + -0.055986 0.02179 0.055847, -0.04915 0.02124 0.055969, -0.04915 0.021423 0.055969, -0.049517 0 0.057007, + -0.049333 0.010742 0.057007, -0.055986 0.020996 0.05603, -0.049334 0.010498 0.05603, -0.04915 0.020996 0.05603, + -0.049517 0 0.05603, -0.055986 -0.02301 0.054016, -0.055986 -0.022827 0.054749, -0.055986 -0.0224 0.05542, + -0.055986 -0.020996 0.05603, -0.04915 -0.020996 0.05603, -0.055986 -0.02179 0.055847, -0.04915 -0.02124 0.055969, + -0.049517 0 0.056519, -0.049517 0 0.05603, -0.049334 -0.010498 0.05603, -0.04915 -0.020996 0.05603, + -0.049334 -0.010742 0.057007, -0.049517 0 0.057007, -0.048967 -0.022888 0.054626, -0.048967 -0.02301 0.054016, + -0.048845 -0.023071 0.057007, -0.047991 -0.024536 0.057007, -0.04915 -0.021423 0.056458, -0.04915 -0.022034 0.055725, + -0.04915 -0.021423 0.057007, -0.049028 -0.022583 0.055237, -0.04915 -0.021423 0.055969, -0.049608 -0.02301 -0.024597, + -0.0497 -0.02301 0.014954, -0.046709 -0.025635 0.057007, -0.045183 -0.026245 0.057007, -0.007217 -0.034241 0.057007, + -0.046099 -0.026062 0.016235, -0.04616 -0.026001 -0.00415, -0.007217 -0.034241 0.046265, 0.045149 -0.026245 0.057007, + 0.015488 -0.032471 0.044495, 0.007248 -0.034241 0.046265, -0.007217 -0.034241 0.057007, -1.5e-005 -0.034973 0.057007, + -0.007217 -0.034241 0.046265, -1.5e-005 -0.034973 0.046997, 0.003647 -0.03479 0.046814, 0.003647 -0.03479 0.057007, + 0.007248 -0.034241 0.057007, 0.048811 -0.023071 0.057007, 0.047956 -0.024536 0.057007, 0.046736 -0.025635 0.057007, + 0.045149 -0.026245 0.057007, 0.045759 -0.026123 0.036621, 0.046064 -0.026062 0.016235, 0.049726 -0.021301 0.036621, + 0.050032 -0.02124 0.016174, 0.049116 -0.021423 0.057007, 0.049299 -0.010742 0.057007, 0.049482 0 0.057007, + 0.04994 -0.02124 -0.024597, 0.049635 -0.022888 -0.024597, 0.049025 -0.021179 -0.059784, 0.049574 -0.021301 -0.042511, + 0.048811 -0.024353 -0.024567, 0.047529 -0.025452 -0.024567, 0.048658 -0.02301 -0.059784, 0.047682 -0.024536 -0.059784, + 0.046186 -0.025635 -0.059723, 0.049391 0 -0.059814, 0.048811 -0.021179 -0.062073, 0.049025 -0.021179 -0.059784, + 0.048323 -0.021179 -0.064362, 0.046492 -0.021179 -0.068726, 0.044386 -0.021118 -0.071777, 0.046125 -0.023071 -0.068573, + 0.041731 -0.021118 -0.074371, 0.0352 -0.021057 -0.07785, 0.045179 -0.024658 -0.068054, 0.043776 -0.025696 -0.067291, + 0.035048 -0.022949 -0.077454, 0.034742 -0.024536 -0.076447, 0.034254 -0.025574 -0.074921, 0.0352 -0.021057 -0.07785, + 0.017805 -0.020996 -0.081818, 0.035292 0 -0.078186, 1.3e-005 -0.020996 -0.08313, -0.017778 -0.020996 -0.081818, + -0.035173 -0.021057 -0.07785, 0.035292 0 -0.078186, 0.017836 0 -0.082153, 1.3e-005 0 -0.083496, -0.017839 0 -0.082153, + -0.017778 0.021973 -0.081787, -0.035173 0.022034 -0.07782, 1.3e-005 0.021973 -0.08313, 0.017775 0.021973 -0.081787, + 0.03517 0.022034 -0.07782, 0.035048 0.023926 -0.077454, 0.034742 0.025513 -0.076416, 0.034254 0.02655 -0.074921, + 0.048231 0 -0.065857, 0.049391 0 -0.059814, 0.045271 0 -0.071259, 0.040815 0 -0.0755, 0.035292 0 -0.078186, + 0.038038 0.022095 -0.076691, 0.03517 0.022034 -0.07782, 0.048201 0.021606 -0.064758, 0.049025 0.021423 -0.059784, + 0.04878 0.021484 -0.062286, 0.048719 0.023071 -0.059784, 0.044447 0.026367 -0.063293, 0.044874 0.026306 -0.061462, + 0.046614 0.025635 -0.059662, 0.047895 0.024536 -0.059723, 0.045057 0.026245 -0.059601, 0.043165 0.022034 -0.073059, + 0.040449 0.023987 -0.074829, 0.040693 0.022095 -0.075134, 0.045301 0.021912 -0.070587, 0.039808 0.025574 -0.073944, + 0.038893 0.026611 -0.072662, 0.048201 0.021606 -0.064758, 0.047926 0.023254 -0.064545, 0.047132 0.024658 -0.06424, + 0.045942 0.025757 -0.063782, 0.044447 0.026367 -0.063293, 0.037825 0.027039 -0.071136, 0.039991 0.026978 -0.06955, + 0.041853 0.026794 -0.067688, 0.040785 0.027161 -0.019012, 0.030012 0.029419 0.033569, 0.035383 0.02832 0.027832, + 0.042219 0.026855 0.015564, 0.04405 0.026489 0.009094, 0.044935 0.026306 0.002441, 0.039351 0.027466 0.02179, + 0.044783 0.026306 -0.004456, 0.04347 0.026611 -0.011597, 0.037794 0.027588 -0.024414, -0.017046 0.026917 -0.076935, + 1.3e-005 0.027466 -0.045013, 1.3e-005 0.026855 -0.078217, 0.009901 0.027466 -0.043884, 0.017042 0.026917 -0.076935, + 0.033705 0.026978 -0.07312, 0.037825 0.027039 -0.071136, 0.035841 0.026978 -0.072296, 0.018934 0.027527 -0.040833, + 0.034346 0.027771 -0.029083, 0.027082 0.027649 -0.03595, -0.009905 0.027466 -0.043884, 1.3e-005 0.027466 -0.045013, + -0.018908 0.027527 -0.040833, -0.027086 0.027649 -0.03595, -0.040789 0.027161 -0.019012, -0.043474 0.026611 -0.011597, + -0.044786 0.026306 -0.004456, 1.5e-005 0.04248 -0.045013, -0.044939 0.026306 0.002441, -0.044085 0.026489 0.009094, + -0.042253 0.026855 0.015564, -0.039385 0.027466 0.02179, -0.035357 0.02832 0.027832, -0.029985 0.029419 0.033569, + -1.5e-005 0.041016 0.044983, -0.034349 0.027771 -0.029083, -0.037798 0.027588 -0.024414, -0.040789 0.027161 -0.019012, + -0.048174 0.021912 -0.064728, -0.048113 0.022461 -0.064667, -0.048113 0.02179 -0.064972, -0.048052 0.021606 -0.065186, + -0.047991 0.02301 -0.064606, -0.047472 0.02417 -0.064362, -0.046679 0.025208 -0.064056, -0.045641 0.02594 -0.06369, + -0.043383 0.026611 -0.065582, -0.041857 0.026794 -0.067688, -0.044451 0.026367 -0.063293, -0.035173 0.022034 -0.07782, + -0.040697 0.022095 -0.075134, -0.045153 0.021912 -0.07077, -0.047167 0.008057 -0.067993, -0.046984 0.015991 -0.067993, + -0.047319 0 -0.067993, -0.046831 0.02179 -0.068115, -0.047045 0.017517 -0.067841, -0.047289 0.019043 -0.067322, + -0.048052 0.021606 -0.065186, -0.039019 0 -0.07663, -0.042345 0 -0.074341, -0.035295 0 -0.078186, + -0.047228 -0.018738 -0.067444, -0.046984 -0.015991 -0.067993, -0.047899 -0.021179 -0.065704, -0.047533 -0.020081 -0.066711, + -0.047319 0 -0.067993, -0.047167 -0.008057 -0.067993, -0.047258 -0.021179 -0.06723, -0.046495 -0.021179 -0.068726, + -0.047899 -0.021179 -0.065704, -0.048326 -0.022522 -0.063507, -0.048449 -0.022888 -0.062256, -0.048632 -0.02301 -0.060394, + -0.048571 -0.02301 -0.061005, -0.048662 -0.02301 -0.059784, -0.049242 -0.02301 -0.042206, -0.04796 -0.02417 -0.059784, + -0.048998 -0.024109 -0.024597, -0.049608 -0.02301 -0.024597, -0.046984 -0.025146 -0.059753, -0.045763 -0.025818 -0.059723, + -0.048174 -0.024963 -0.024567, -0.045977 -0.026062 -0.024536, -0.043077 -0.026123 -0.064758, -0.044451 -0.026123 -0.059662, + -0.043779 -0.026123 -0.06308, -0.045305 -0.026123 -0.042389, -0.042498 -0.026794 0.017517, -0.042498 -0.026794 0.024414, + -0.042498 -0.026733 -0.003418, -0.042498 -0.026611 -0.024384, -0.04088 -0.026733 -0.027008, -0.042498 -0.027527 -0.024384, + 0.033705 -0.026001 -0.073151, 0.038588 -0.026001 -0.070557, 0.040571 -0.026062 -0.068634, 0.017042 -0.025879 -0.076935, + 1.3e-005 -0.025879 -0.078217, -0.017046 -0.025879 -0.076935, -0.024401 -0.026489 -0.042511, -0.032396 -0.026611 -0.036743, + -0.03911 -0.026733 -0.02951, -0.035906 -0.026672 -0.033325, -0.035173 -0.021057 -0.07785, -0.035051 -0.022949 -0.077454, + -0.038622 -0.021057 -0.076416, -0.041704 -0.021118 -0.074371, -0.046495 -0.021179 -0.068726, -0.046129 -0.023071 -0.068573, + -0.034746 -0.024536 -0.076447, -0.034258 -0.025574 -0.074921, -0.033709 -0.026001 -0.073151, -0.036272 -0.026001 -0.072083, + -0.038591 -0.026001 -0.070557, -0.045183 -0.024658 -0.068054, -0.043779 -0.025696 -0.067291, -0.042162 -0.026062 -0.066376, + -0.024401 -0.027527 -0.042511, -0.024401 -0.026489 -0.042511, 0.024397 -0.026489 -0.042511, 0.039167 -0.027527 0.029419, + -0.039141 -0.027527 0.026001, -0.034655 -0.027527 -0.034637, -0.038927 -0.027527 -0.029785, -0.024401 -0.027527 -0.042511, + -0.042498 -0.027527 0.024414, -0.042498 -0.027527 -0.024384, 0.028852 -0.029663 0.037109, 0.024702 -0.030579 0.039978, + 0.028852 -0.027527 0.037109, 0.024702 -0.027527 0.039978, 0.032698 -0.027527 0.033752, 0.032637 -0.02887 0.033813, + 0.039167 -0.027527 0.026001, 0.024702 -0.030579 0.039978, -0.024675 -0.027527 0.039978, 0.024702 -0.027527 0.039978, + 0.015488 -0.032471 0.039978, 0.015488 -0.032471 0.044495, -0.015518 -0.032471 0.044495, -0.015518 -0.032471 0.039978, + -0.036089 -0.028137 0.03009, -0.039141 -0.027527 0.026001, -0.03615 -0.027527 0.030029, -0.032671 -0.027527 0.033752, + -0.032671 -0.02887 0.033813, -0.024675 -0.030579 0.039978, -0.024675 -0.027527 0.039978, 0.042524 -0.026794 0.024414, + 0.040937 -0.027161 0.026978, 0.040937 -0.027527 0.026978, 0.039167 -0.027527 0.029419, 0.042524 -0.027527 0.024414, + 0.042524 -0.026794 0.017517, 0.042524 -0.026794 0.024414, 0.039106 -0.026733 -0.02951, 0.042158 -0.026062 -0.066376, + 0.043776 -0.026123 -0.06308, 0.044233 -0.026062 -0.061371, 0.044447 -0.026123 -0.059662, 0.045301 -0.026123 -0.042389, + 0.042494 -0.026733 -0.003418, 0.045973 -0.026062 -0.024536, 0.042524 -0.026794 0.017517, 0.024397 -0.026489 -0.042511, + 0.028547 -0.02655 -0.039825, 0.032393 -0.026611 -0.036743, 0.024397 -0.027527 -0.042511, 0.029768 -0.027527 -0.03891, + 0.034651 -0.027527 -0.034637, 0.039106 -0.026733 -0.02951, 0.040876 -0.026733 -0.027008, 0.042494 -0.027527 -0.024384, + 0.042494 -0.026611 -0.024384, -0.039141 -0.027527 0.029419, -0.040911 -0.027161 0.026978, -0.042498 -0.026794 0.024414, + -0.040911 -0.027527 0.026978, -0.042498 -0.027527 0.024414, -0.040697 0.022095 -0.075134, -0.040453 0.023987 -0.074829, + -0.035173 0.022034 -0.07782, -0.038042 0.022095 -0.076691, -0.035051 0.023926 -0.077454, -0.039812 0.025574 -0.073944, + -0.038897 0.026611 -0.072662, -0.037798 0.027039 -0.071136, -0.035845 0.026978 -0.072296, -0.034258 0.02655 -0.074921, + -0.034746 0.025513 -0.076416, -0.033709 0.026978 -0.07312, 0.025009 0.04248 -0.037415, 0.017227 0.04248 -0.041565, + 0.031815 0.04248 -0.03183, 0.008774 0.04248 -0.044128, 1.5e-005 0.04248 -0.045013, 0.044144 0.04248 -0.008789, + 0.04158 0.04248 -0.017212, 0.044998 0.04248 0, 0.03743 0.04248 -0.024994, -0.008774 0.04248 -0.044128, + -0.017227 0.04248 -0.041565, -0.025009 0.04248 -0.037415, -0.031815 0.04248 -0.03183, -0.037399 0.04248 -0.024994, + -0.04158 0.04248 -0.017212, -0.044144 0.04248 -0.008789, -0.044998 0.04248 0, 0.044113 0.04248 0.008789, + 0.04155 0.04248 0.017212, 0.037399 0.04248 0.025024, 0.031845 0.04248 0.031799, 0.025009 0.04248 0.037415, + 0.017197 0.04248 0.041565, 0.008774 0.04248 0.044128, -1.5e-005 0.04248 0.044983, -0.03743 0.04248 0.025024, + -0.031815 0.04248 0.031799, -0.04158 0.04248 0.017212, -0.044144 0.04248 0.008789, -0.008804 0.04248 0.044128, + -0.017227 0.04248 0.041565, -0.024979 0.04248 0.037415, 0.016068 0.04248 -0.038818, 0.008194 0.04248 -0.041199, + 0.023331 0.04248 -0.034912, 0.029709 0.04248 -0.029694, 0.034927 0.04248 -0.023346, 0.038803 0.04248 -0.016083, + 0.041183 0.04248 -0.008209, 0.042007 0.04248 0, 0.038803 0.04248 0.016052, 0.041183 0.04248 0.008179, + 0.008224 0.04248 0.041199, 0.034897 0.04248 0.023315, 0.029709 0.04248 0.029724, 0.023361 0.04248 0.034912, + 0.016098 0.04248 0.038818, -1.5e-005 0.04248 0.041992, -1.5e-005 0.043518 0.041992, 0.008224 0.043518 0.041199, + 0.023361 0.043518 0.034912, 0.016098 0.043518 0.038818, 0.029709 0.043518 0.029724, 0.034897 0.043518 0.023315, + 0.041183 0.043518 0.008179, 0.042007 0.043518 0, 0.038803 0.043518 0.016052, 0.034927 0.043518 -0.023346, + 0.041183 0.043518 -0.008209, 0.038803 0.043518 -0.016083, 0.023331 0.043518 -0.034912, 0.029709 0.043518 -0.029694, + 0.016068 0.043518 -0.038818, 0.008194 0.043518 -0.041199, 1.5e-005 0.043518 -0.041992, -1.5e-005 0.04248 0.041992, + -1.5e-005 0.043518 0.041992, -0.008194 0.043518 0.041199, -0.016068 0.043518 0.038818, -0.023331 0.043518 0.034912, + -0.016068 0.04248 0.038818, -0.008194 0.04248 0.041199, -0.029678 0.043518 0.029724, -0.038773 0.043518 0.016052, + -0.034927 0.043518 0.023315, -0.041214 0.043518 0.008179, -0.023331 0.04248 0.034912, -0.029678 0.04248 0.029724, + -0.034927 0.04248 0.023315, -0.038773 0.04248 0.016052, -0.041214 0.04248 0.008179, -0.042007 0.04248 0, -0.042007 0.043518 0, + -0.041183 0.043518 -0.008209, -0.038803 0.043518 -0.016083, -0.034927 0.043518 -0.023346, -0.038803 0.04248 -0.016083, + -0.041183 0.04248 -0.008209, -0.029709 0.043518 -0.029694, -0.023331 0.043518 -0.034912, -0.008194 0.043518 -0.041199, + -0.016068 0.043518 -0.038818, -0.008194 0.04248 -0.041199, -0.034927 0.04248 -0.023346, -0.029709 0.04248 -0.029694, + -0.023331 0.04248 -0.034912, -0.016068 0.04248 -0.038818, 1.5e-005 0.04248 -0.041992, -1.5e-005 0.041016 0.044983, + -0.008133 0.041016 0.04425, -0.029984 0.041016 0.05603, -0.016068 0.041016 0.042053, 0.008163 0.041016 0.04425, + 0.016037 0.041016 0.042053, -0.023392 0.041016 0.038452, 0.023422 0.041016 0.038452, 0.030012 0.029419 0.033569, + 0.030014 0.041016 0.033569, 0.030014 0.041016 0.05603, 0.030012 0.029419 0.05603, -0.029985 0.029419 0.05603, + -0.029984 0.041016 0.05603, -0.029985 0.029419 0.033569, -0.029984 0.041016 0.033569, 0.049299 0.010742 0.057007, + 0.049482 0 0.057007, 0.050276 0 0.027771, 0.049116 0.021423 0.057007, 0.050123 0.02124 -0.001404, 0.05049 0 -0.001404, + 0.049391 0 -0.059814, 0.049849 0.021301 -0.030609, 0.049025 0.021423 -0.059784, -0.04915 0.021423 0.056458, + -0.04915 0.021423 0.057007, -0.04915 0.022034 0.055725, -0.04915 0.021423 0.055969, -0.048845 0.023071 0.057007, + -0.049028 0.022583 0.055237, -0.048967 0.022888 0.054626, -0.049639 0.02301 0.023315, -0.048754 0.02301 -0.059784, + -0.048174 0.02417 -0.059753, -0.048967 0.02301 0.054016, -0.047991 0.024536 0.057007, -0.046709 0.025635 0.057007, + -0.045183 0.026245 0.057007, -0.045916 0.026062 0.027832, -0.04616 0.026001 -0.001312, -0.049761 0.02301 -0.00473, + -0.047319 0.025085 -0.059692, -0.045061 0.026245 -0.059601, -0.055986 -0.02301 0.04248, -0.055986 -0.022827 0.041748, + -0.050982 -0.02301 0.04248, -0.050982 -0.022827 0.041748, -0.055986 -0.0224 0.041077, -0.055986 -0.02179 0.040649, + -0.050982 -0.0224 0.041077, -0.050982 -0.02179 0.040649, -0.050982 -0.020996 0.040527, -0.055986 0.020996 0.040527, + -0.050982 0.020996 0.040527, -0.055986 -0.020996 0.040527] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 1137 + 0 0 1, 0.982114 0.186377 -0.0267403, 0.955662 0.293966 -0.0171294, 0.981629 0.189961 -0.0178691, 0.917367 0.397373 -0.0230738, + 0.772741 0.634606 -0.0121081, 0.926541 0.376187 -0.0024042, 0.990851 0.134948 0.00158831, 0.94762 0.319083 0.0142381, + 0.9952 0.0954616 0.0215299, 0.915373 0.401981 0.0224486, 0.760999 0.648646 0.0117987, 0.775621 0.630965 0.0171867, + 0.792817 0.609459 0.000606293, 0.772623 0.634637 -0.0170287, 0.566538 0.823961 -0.0110638, 0.483306 0.875429 -0.00623223, + 0.354534 0.935031 -0.00474267, 0.342485 0.939521 -0.00223561, 0.535051 0.844819 -0.000831893, 0.480301 0.87709 0.00494758, + 0.574893 0.818155 0.0109814, 0.331854 0.943331 0.00027443, 0.338698 0.940889 0.00332183, 0.212635 0.977132 0.000329364, + 0.213035 0.977044 -0.000665765, 0.206283 0.978492 -0.000951634, 0.208649 0.977991 -0.000443469, 0.205056 0.97875 0.000112342, + 0.208554 0.978006 -0.00319627, 0.204819 0.978789 -0.00463897, 0.207228 0.978293 0, 0.206817 0.978331 -0.00974465, + 0.200464 0.979701 0, 0.202671 0.979247 8.47935e-005, 0.13951 0.990164 0.0105929, 0.00397925 0.999468 0.0323693, + 0.103212 0.994534 0.0158108, 0.230742 0.973014 0.00144201, 0.230646 0.973032 0.0031972, 0.218892 0.975749 -0.000933987, + 0.248566 0.968613 0.00215117, 0.150717 0.988577 0, 0.0836076 0.996499 0, 0.100152 0.99238 0.0717671, -0.000422184 1 0, + 0.0314896 0.992248 0.120218, 0.124312 0.975712 0.180369, -0.0323861 0.992462 -0.118196, -0.100659 0.992415 -0.0705686, + -0.124753 0.976214 -0.177322, -0.0841688 0.996451 0, -0.150717 0.988577 0, -0.103212 0.994534 0.0158107, + -0.00397931 0.999468 0.0323692, -0.158128 0.987389 0.00768047, -0.211386 0.977402 0.000795489, -0.230195 0.973144 0.00104739, + -0.218665 0.9758 -0.000899714, -0.231942 0.972724 0.00317209, -0.213223 0.977004 0.000507399, -0.209228 0.977867 -0.000135275, + -0.207127 0.978291 -0.00677712, -0.245545 0.969385 0.00110563, -0.206805 0.978381 0.00149401, -0.202049 0.979375 -0.000836504, + -0.203985 0.978974 0.000200442, -0.20452 0.978841 -0.00652294, -0.200428 0.979708 0, -0.206622 0.978329 -0.0134389, + -0.207193 0.9783 0, -0.919017 0.325929 -0.221762, -0.937648 0.294968 -0.183877, -0.893385 0.424966 -0.145834, + -0.942653 0.222009 -0.249234, -0.914499 0.392645 -0.0975748, -0.887121 0.456696 -0.066674, -0.85286 0.517766 -0.0674435, + -0.945659 0.18673 -0.266199, -0.952625 0.136072 -0.272012, -0.744727 0.659632 -0.101326, -0.893021 0.447722 -0.0453802, + -0.500309 0.865035 -0.0374945, -0.612862 0.790156 -0.00732763, -0.408317 0.912323 0.0307076, -0.344385 0.938432 -0.0272818, + -0.826484 0.533575 -0.179506, -0.648495 0.751059 -0.123958, -0.410384 0.909742 -0.0628901, -0.324326 0.944914 -0.044155, + 0 1 0, 0.00415498 0.917627 -0.397422, -0.0949951 0.853378 -0.512564, -0.00110436 0.925237 -0.379388, + -0.0331597 0.70617 -0.707265, -0.142257 0.804896 -0.576112, -0.0219601 0.906456 -0.42173, -0.0158276 0.983585 -0.179749, + 0 0.987254 -0.159151, 0.00170874 0.973512 -0.22863, 0.0607991 0.710467 -0.7011, -0.0273915 0.320751 -0.946767, + 0.0250062 0.517581 -0.855269, -0.0561262 0.210334 -0.976017, -0.0603084 0.140712 -0.988212, 0 0.707107 -0.707107, + 0.00565023 0.439996 -0.897982, -0.00181074 0.188343 -0.982102, 0 0 -1, 0.00670432 -0.192046 -0.981363, + -0.017765 -0.363112 -0.931576, -0.00181074 -0.188343 -0.982102, -0.0027623 -0.340196 -0.94035, -0.041015 -0.569771 -0.820779, + -0.0197946 -0.701159 -0.712731, 0.00565023 -0.439996 -0.897982, 0 -0.707107 -0.707107, -0.0142135 -0.915901 -0.401153, + -0.00072157 -0.795246 -0.606287, 0.0362901 -0.915906 -0.399749, 0.00115194 -0.898982 -0.437983, + -0.00979263 -0.977565 -0.210405, 0 -0.995278 -0.0970626, -0.025581 -0.988534 -0.148814, 0 -1 0, -1 0 0, + -1 3.17006e-005 0.000144472, -1 0 0.000216707, -1 7.33205e-005 0.000144472, -1 3.58112e-005 0.000105294, + -1 -0.000654002 0.000223738, -1 -0.000364109 0.000151264, -1 -7.33205e-005 0.000144472, -1 0.000654002 0.000223738, + -1 -3.58112e-005 0.000105294, -1 0.000364109 0.000151264, -1 -3.17006e-005 0.000144472, -1 -0.000907814 0.000193023, + -0.999999 -0.00115957 0.000289895, -1 0.000907814 0.000193023, -0.999999 0.00115957 0.000289895, + 0.00304778 -0.338915 0.940812, -0.0410991 -0.4387 0.897693, 0.011686 -0.19492 0.98075, 0.00125955 -0.709582 0.704622, + 0.0461997 -0.438508 0.897539, -0.0131697 -0.194916 0.980732, 0 -0.713948 0.700199, 0.0795749 -0.896342 0.436164, + -0.00594883 -0.940037 0.341021, 0.0573397 -0.990512 0.124893, -0.0894687 -0.895454 0.43607, -0.09631 -0.977727 0.186478, + 0.0364813 -0.994923 -0.0937917, -6.79204e-005 -0.94137 -0.337376, 0.0286553 -0.899342 -0.436305, + 0.000159262 -0.712588 -0.701583, -0.0287691 -0.899337 -0.43631, -0.0729805 -0.979669 -0.186875, 0 -0.715446 -0.698668, + -0.117801 -0.430746 -0.894752, 0.000275203 -0.323444 -0.946247, -0.0280519 -0.116183 -0.992832, 0.118261 -0.430714 -0.894706, + 0.0421095 -0.173701 -0.983898, 0.000275203 0.323444 -0.946247, -0.117801 0.430746 -0.894752, -0.0419395 0.173702 -0.983905, + 0.000159263 0.712588 -0.701583, 0.118261 0.430714 -0.894706, 0.0421095 0.173701 -0.983898, 0 0.715446 -0.698668, + 0.0286553 0.899342 -0.436305, -6.79204e-005 0.94137 -0.337376, 0.048636 0.990959 -0.125041, -0.0287691 0.899337 -0.43631, + -0.0729805 0.979669 -0.186875, -0.00594883 0.940037 0.341021, 0.0795749 0.896342 0.436164, 0.0857076 0.978675 0.186682, + 0.00125955 0.709582 0.704622, -0.0894687 0.895454 0.43607, -0.09631 0.977727 0.186478, 0 0.713948 0.700199, + -0.0410991 0.4387 0.897693, 0.00304778 0.338915 0.940812, 0.011686 0.19492 0.98075, 0.0461997 0.438508 0.897539, + -0.0131697 0.194916 0.980732, 0.00185135 0.158028 -0.987433, 0.00572622 0.430493 -0.902576, 5.32322e-009 0.315054 -0.949074, + -1.42364e-009 0.704269 -0.709933, -0.00185135 0.158028 -0.987433, -0.00572621 0.430493 -0.902576, 0 0.722869 -0.690985, + -1.25538e-008 0.927903 -0.372823, -0.0146605 0.88658 -0.462342, -0.0118332 0.97898 -0.203611, 0.0146605 0.88658 -0.462342, + 0.0118332 0.97898 -0.203611, -0.00836498 0.979069 0.203356, -0.00334561 0.925679 0.378294, 0.00346733 0.983629 0.180173, + -0.0103635 0.88668 0.462268, 0 0.72249 0.691382, -0.00441905 0.692767 0.721148, 0.00443884 0.451603 0.892208, + 0.0028776 0.798533 0.601944, 0.0114859 0.945689 0.324869, -0.00467725 0.529118 0.848535, -0.00718578 0.325081 0.945659, + 0.00129491 0.23644 0.971645, -0.0124092 0.162673 0.986602, 0 0.242543 0.970141, -0.0188079 0.188861 0.981824, + -0.999892 0.0115824 -0.00905774, -0.999829 0.0173102 -0.00655636, -0.99983 0.0171986 -0.00664024, + -0.999942 0.0103159 -0.00307148, -0.999848 0.017429 0, -0.999851 0.0171443 -0.00196345, -0.999853 0.0171265 0, + -0.999853 0.0171312 0.000912527, -0.999853 0.0171305 0, 0.0114859 -0.945689 0.324869, -0.00334561 -0.925679 0.378294, + 0.00346733 -0.983629 0.180173, -0.00836498 -0.979069 0.203356, -0.0103635 -0.88668 0.462268, -0.00441905 -0.692767 0.721148, + 0.0028776 -0.798533 0.601944, -0.00467725 -0.529118 0.848535, 0 -0.72249 0.691382, -0.0188079 -0.188861 0.981824, + -0.00718578 -0.325081 0.945659, -0.0124092 -0.162673 0.986602, 0.00129491 -0.23644 0.971645, 0 -0.242543 0.970141, + 0.00443884 -0.451603 0.892208, -0.999941 -0.0103347 -0.00343651, -0.999851 -0.0171184 -0.00241972, -0.999848 -0.017429 0, + -0.999829 -0.0173102 -0.00655636, -0.999825 -0.0171964 -0.00737024, -0.999892 -0.0115824 -0.00905774, -0.999853 -0.0171287 0, + -0.999852 -0.0172243 0, -0.999855 -0.0170332 0, -0.975413 -0.217865 0.0332341, -0.913451 -0.406107 0.0261529, + -0.960435 -0.275248 0.0424718, -0.819213 -0.573179 0.0188562, -0.993789 -0.107162 0.0299981, -0.994893 -0.0911165 0.043426, + -0.967984 -0.249039 0.0314186, -0.833204 -0.552957 -0.00313213, -0.88156 -0.472066 -0.0023083, + -0.874343 -0.485306 -0.00137073, -0.61932 -0.785116 -0.00591852, -0.773815 -0.63341 -0.00139677, + -0.568171 -0.822899 0.00430709, -0.479955 -0.877291 -0.00191907, -0.393571 -0.919278 -0.00548669, + -0.338524 -0.940957 -0.00101299, -0.869908 -0.492894 0.0177553, -0.876335 -0.481445 0.0157479, -0.760192 -0.649548 0.0140042, + -0.362293 -0.932062 0.00182455, -0.793599 -0.608385 0.00827535, -0.871585 -0.490221 0.00486264, -0.564329 -0.825486 0.0102882, + -0.488771 -0.872383 0.00706785, -0.243216 -0.969972 0.000889306, -0.198731 -0.980053 0.00113737, -0.195992 -0.980605 0, + -0.200201 -0.979755 0.000325239, -0.208002 -0.978127 -0.00150633, -0.203403 -0.979093 -0.00212897, -0.208539 -0.978014 0, + -0.204651 -0.978833 -0.00184506, -0.203922 -0.978986 -0.00175025, -0.202344 -0.979315 0, -0.210707 -0.977549 -0.000634866, + -0.1991 -0.979979 -0.000300648, -0.203403 -0.979095 -0.000698899, -0.207005 -0.97834 -0.00060587, + -0.213044 -0.977042 -0.000504545, -0.216551 -0.976271 -0.000651617, -0.217091 -0.976151 0.000972089, + -2.41115e-007 -0.707107 -0.707107, -4.8223e-007 -0.707109 -0.707104, -1.20558e-007 -0.707107 -0.707107, 0 -0.707106 -0.707108, + 0.202417 -0.979299 -0.000225811, 0.202339 -0.979316 -0.000451622, 0.202519 -0.979278 -0.000116242, + 0.207974 -0.978133 -0.00140439, 0.208774 -0.977964 -0.000347024, 0.206764 -0.978391 -0.000475719, + 0.204402 -0.978886 0.00110669, 0.212219 -0.977222 -0.000929543, 0.208488 -0.978021 -0.00275698, + 0.203026 -0.979173 0.000568305, 0.20145 -0.979499 0, 0.204448 -0.978874 -0.00262004, 0.204076 -0.978949 -0.00336933, + 0.202687 -0.979239 -0.00300855, 0.201143 -0.979562 0, 0.170552 -0.985349 0, -0.125946 -0.991892 0.0169469, + -0.0902205 -0.995922 -0.00049799, -0.0340392 -0.999356 0.0113166, -0.12412 -0.9921 -0.0181925, + -0.0121078 -0.999885 -0.00911139, 0.100442 -0.994943 0, 0.00965637 -0.999953 0, 0.0836076 -0.996499 0, 0.150717 -0.988577 0, + 0.79258 -0.609564 0.0158003, 0.950288 -0.310662 0.0210039, 0.917678 -0.396566 0.0245464, 0.98248 -0.184236 0.0281071, + 0.775586 -0.63094 0.019528, 0.982084 -0.187501 0.0188315, 0.986939 -0.161005 0.00544095, 0.942845 -0.333065 0.0105765, + 0.989596 -0.143775 -0.00525462, 0.945879 -0.324517 -0.00123351, 0.775119 -0.631786 0.00608216, 0.919843 -0.392222 -0.00706564, + 0.757469 -0.652866 -0.00253851, 0.567504 -0.823296 0.0110772, 0.512709 -0.858533 0.00708804, 0.364889 -0.931039 0.00481598, + 0.513566 -0.858045 0.00285616, 0.371083 -0.928592 0.00369441, 0.566766 -0.82387 -0.00380408, 0.772959 -0.634436 -0.00503266, + 0.48844 -0.872597 -0.000772147, 0.362248 -0.932081 0.00122732, 0.354631 -0.935005 -0.00175168, 0.999565 -0.0171904 0.023967, + 0.999735 -0.0220383 0.00664123, 0.999692 -0.0165404 0.0185027, 0.999409 -0.0171232 0.0298022, 0.999487 -0.0154164 0.0280688, + 0.999487 -0.0169501 0.0271727, 0.999759 -0.0169977 0.0139215, 0.999835 -0.0181911 0.000147768, 0.999742 -0.0113271 -0.0196764, + 0.999713 -0.0214727 -0.0106636, 0.999562 -0.0139512 -0.0260873, 0.999471 -0.012399 -0.0300621, + 0.999939 -0.00857964 -0.00695345, 0.999713 -0.00439829 -0.0235597, 0.985545 -0.168405 -0.018451, + 0.920371 -0.390621 -0.0182329, 0.954437 -0.297439 -0.0240813, 0.979979 -0.196424 -0.0325347, 0.985015 -0.169904 -0.0296215, + 0.936009 -0.350502 -0.0321663, 0.775195 -0.63134 -0.0219446, 0.480201 -0.877048 -0.0139462, 0.730987 -0.682211 -0.0157113, + 0.44895 -0.893504 -0.00972147, 0.329707 -0.944033 -0.00971594, 0.364784 -0.931032 -0.0105495, 0.729131 -0.683936 -0.0244857, + 0.509115 -0.860515 -0.0177489, 0.291408 -0.956522 -0.01216, 0.979026 -0.185417 -0.0844318, 0.904517 -0.416874 -0.0898039, + 0.944828 -0.29172 -0.148997, 0.775908 -0.617454 -0.129293, 0.891282 -0.383974 -0.241205, 0.686434 -0.723396 -0.0742083, + 0.973696 -0.172544 -0.148814, 0.945323 -0.159912 -0.28424, 0.872266 -0.334271 -0.356952, 0.901549 -0.205663 -0.380673, + 0.901629 -0.138124 -0.409861, 0.839919 -0.358327 -0.407601, 0.709351 -0.67587 -0.20005, 0.637449 -0.719717 -0.275074, + 0.447201 -0.891144 -0.0766412, 0.369332 -0.927791 -0.0528915, 0.398753 -0.90849 -0.125065, 0.267358 -0.96121 -0.0677871, + 0.244828 -0.968733 -0.0401931, 0.241897 -0.967747 -0.0703693, 0.391321 -0.898188 -0.200314, 0.322318 -0.935347 -0.14573, + 0.623196 -0.714278 -0.318487, 0.176559 -0.978472 -0.106866, 0.210481 -0.972558 -0.0991427, 0.986565 -0.0124104 -0.162898, + 0.985467 -0.00920664 -0.169615, 0.944799 -0.0114635 -0.327451, 0.995509 -0.0173356 -0.0930704, 0.922125 -0.0178563 -0.38648, + 0.786102 -0.0121606 -0.617977, 0.954119 -0.0169307 -0.29895, 0.877412 -0.0153102 -0.479493, 0.76426 -0.0139214 -0.644759, + 0.624857 -0.0147163 -0.780601, 0.451651 -0.0277645 -0.891763, 0.54992 -0.0175709 -0.835032, 0.792493 -0.0184778 -0.609602, + 0.611887 -0.0169268 -0.790764, 0.435435 -0.0151033 -0.900093, 0.80476 -0.200191 -0.558824, 0.719253 -0.325043 -0.614022, + 0.748204 -0.198288 -0.633145, 0.730515 -0.446627 -0.516596, 0.566679 -0.357582 -0.742301, 0.548834 -0.690589 -0.471029, + 0.613698 -0.200368 -0.763694, 0.495411 -0.0719006 -0.865678, 0.454367 -0.324194 -0.829728, 0.421216 -0.114142 -0.899749, + 0.342213 -0.443446 -0.8284, 0.311484 -0.726963 -0.611966, 0.432465 -0.707918 -0.558414, 0.5693 -0.711782 -0.411417, + 0.353619 -0.898689 -0.259446, 0.278666 -0.924716 -0.259317, 0.160376 -0.980338 -0.114969, 0.227413 -0.923974 -0.307499, + 0.1378 -0.979993 -0.143616, 0.164548 -0.894491 -0.415703, 0.269356 -0.709561 -0.65113, 0.15775 -0.938426 -0.307363, + 0.104814 -0.981605 -0.159582, 0.077103 -0.979964 -0.183647, 0.144868 -0.20567 -0.967839, 0.21726 -0.211015 -0.953032, + 0.139462 -0.330561 -0.933424, 0.196215 -0.449292 -0.871571, 0.151393 -0.70966 -0.688087, 0.111152 -0.688203 -0.716953, + -2.02625e-006 -0.203954 -0.97898, 0.0951105 -0.893279 -0.439324, 0.0126232 -0.422313 -0.906362, -0.14487 -0.205669 -0.967839, + -0.128733 -0.363522 -0.922648, -0.217178 -0.209365 -0.953415, -0.196221 -0.447429 -0.872528, -0.0089017 -0.726809 -0.686782, + -0.119238 -0.70834 -0.695728, 0.0509784 -0.921401 -0.385254, 0.0415064 -0.977411 -0.207232, 2.0741e-005 -0.946607 -0.32239, + -0.0509502 -0.921402 -0.385257, 0.0221392 -0.980216 -0.196691, 1.31871e-005 -0.979948 -0.199255, + -0.0951105 -0.893279 -0.439324, -0.151401 -0.709626 -0.688119, -0.0415064 -0.977411 -0.207232, -0.0221221 -0.980216 -0.196692, + 0.222389 -0.016661 -0.974816, 0.12384 -0.0165995 -0.992163, 0.163609 -0.0161114 -0.986394, 4.58815e-005 -0.0167719 -0.999859, + 0.222025 -0.0157577 -0.974914, 0.124123 -0.0163413 -0.992132, 6.08492e-005 -0.017328 -0.99985, + -2.06194e-006 -0.0175312 -0.999846, -0.123799 -0.0168937 -0.992164, -0.222484 -0.0171497 -0.974786, + -0.163598 -0.0163463 -0.986392, -0.124042 -0.0163325 -0.992143, -0.222122 -0.0159058 -0.974889, 0.222518 0.015876 -0.974799, + 0.124125 0.0156196 -0.992144, 0.163794 0.017008 -0.986348, 6.16855e-005 0.0167612 -0.99986, 0.222845 0.018422 -0.97468, + 0.124431 0.0179969 -0.992065, 6.08492e-005 0.0165627 -0.999863, -0.163747 0.017008 -0.986356, -0.124043 0.0156112 -0.992154, + -0.222524 0.015866 -0.974798, 6.12651e-005 0.0167468 -0.99986, -0.124349 0.0180055 -0.992075, -0.222851 0.0184321 -0.974678, + -0.145912 0.198585 -0.969161, -0.217286 0.19858 -0.955695, -0.139623 0.323556 -0.935851, -0.197708 0.443342 -0.874276, + -0.154558 0.711467 -0.685512, -0.111738 0.686237 -0.718745, 3.34445e-005 0.208342 -0.978056, -0.09781 0.893836 -0.437597, + -0.0122999 0.421034 -0.906962, 0.146063 0.196286 -0.969607, 0.128799 0.356679 -0.925306, 0.217547 0.196872 -0.955989, + 0.197827 0.444239 -0.873794, 0.00877516 0.724849 -0.688852, 0.120105 0.708569 -0.695346, -0.0507621 0.922314 -0.383092, + -0.0449565 0.977347 -0.206813, 1.82776e-005 0.94619 -0.323612, 0.050788 0.922314 -0.383089, -0.021549 0.979747 -0.199077, + 1.0052e-005 0.979948 -0.199255, 0.0978099 0.893836 -0.437597, 0.15455 0.711501 -0.685479, 0.0449564 0.977347 -0.206813, + 0.0215625 0.979747 -0.199076, 0.410322 0.326503 -0.851488, 0.425672 0.211046 -0.879922, 0.357654 0.20457 -0.911172, + 0.332158 0.445006 -0.831649, 0.492144 0.205577 -0.845891, 0.441023 0.446512 -0.778541, 0.301865 0.708909 -0.637437, + 0.342235 0.712233 -0.612862, 0.258353 0.711609 -0.65335, 0.158013 0.89282 -0.421787, 0.0684089 0.977514 -0.199467, + 0.134397 0.943412 -0.303169, 0.0748402 0.97978 -0.185556, 0.217691 0.892229 -0.395648, 0.0933687 0.97722 -0.190588, + 0.788147 0.0139884 -0.615328, 0.940076 0.0145992 -0.340652, 0.922136 0.0171664 -0.386485, 0.986288 0.0118654 -0.164609, + 0.848798 0.019799 -0.528346, 0.984023 0.0105663 -0.17773, 0.940919 0.0201338 -0.338033, 0.995134 0.0171373 -0.0970263, + 0.792503 0.0177638 -0.609609, 0.698187 0.0106896 -0.715835, 0.574759 0.011119 -0.818247, 0.611894 0.0162727 -0.790773, + 0.419049 0.0116532 -0.907889, 0.57646 0.0178044 -0.816931, 0.442421 0.0137536 -0.896702, 0.365917 0.0174818 -0.930483, + 0.95842 0.183215 -0.218778, 0.893569 0.404921 -0.19384, 0.945851 0.289897 -0.146033, 0.979948 0.178202 -0.0891401, + 0.972113 0.176682 -0.154209, 0.915483 0.393954 -0.0818039, 0.761061 0.639639 -0.107929, 0.751162 0.641072 -0.157427, + 0.554399 0.826562 -0.0971495, 0.366033 0.929166 -0.0516778, 0.463772 0.884618 -0.0486466, 0.372529 0.927508 -0.0308264, + 0.559134 0.828126 -0.0397001, 0.769898 0.634832 -0.0651507, 0.370376 0.928816 -0.0110563, 0.670295 0.179493 -0.72006, + 0.597652 0.373708 -0.709333, 0.686974 0.31598 -0.654387, 0.632577 0.202108 -0.747662, 0.818437 0.0974807 -0.566267, + 0.459266 0.712906 -0.529943, 0.537901 0.665544 -0.51741, 0.305872 0.887437 -0.344816, 0.758216 0.366022 -0.53957, + 0.863285 0.270356 -0.4262, 0.917703 0.0481794 -0.394335, 0.640037 0.654157 -0.403027, 0.869139 0.384019 -0.311652, + 0.749771 0.581113 -0.316467, 0.323101 0.904862 -0.277184, 0.155803 0.973023 -0.170154, 0.367932 0.906551 -0.206861, + 0.204544 0.968752 -0.14029, 0.491271 0.853795 -0.172299, 0.263165 0.960257 -0.0930137, 0.703533 0.676122 -0.218862, + 0.502916 0.856084 -0.119146, 0.24295 0.969448 -0.033862, 0.0617981 0.998025 -0.0112346, 0.106287 0.994305 -0.00773651, + 0.0469275 0.998826 -0.0120432, 0.107147 0.99422 -0.00676342, 0.0721473 0.997339 -0.0104502, 0.137288 0.990513 -0.00604091, + 0.154255 0.988023 -0.00404596, 0.762599 -0.0021097 0.646868, 0.720036 -0.0124386 0.693825, 0.798224 0.00418924 0.602346, + 0.662239 0.0124199 0.749189, 0.881403 0.00429352 0.472346, 0.971088 0.00572029 0.238652, 0.936202 0.00485397 0.35143, + 0.979227 0.00256576 0.202749, 0.996903 0.0120459 0.0777144, 0.874367 -0.00366494 0.485252, 0.927196 0.00632697 0.374523, + 0.999997 0.000360825 -0.00256006, 0.985064 -0.000630962 0.172189, 0.829408 0.00770281 0.55859, 0.0892728 0 0.996007, + 0.151452 0.00385511 0.988457, 0.0930261 0.0212519 0.995437, 0.276073 0.0348607 0.960504, 0.357624 0.0277861 0.933452, + 0.36978 0.0241644 0.928805, 0.219055 0.0138046 0.975615, 0.548065 0.032862 0.83579, 0.593529 -0.0755655 0.801258, + 0.517346 0.0445412 0.854617, 0.704548 0.0506219 0.707848, 0.448283 0.0416602 0.89292, 0.966761 0.00317702 -0.255662, + 0.994025 0.00650944 -0.108961, 0.965183 -0.00178679 -0.261568, 0.918057 0.00563272 -0.396409, 0.985273 -0.00261341 -0.170967, + 0.882277 0.000917537 -0.470729, 0.926879 0.00370061 -0.375343, 0.835384 0.00844996 -0.549601, 0.45976 -0.00251396 -0.88804, + 0.603436 -0.00537648 -0.797393, 0.400624 -0.0102936 -0.916185, 0.314896 -0.00161041 -0.949125, 0.224465 -0.0127879 -0.974398, + 0.75638 -0.00027778 -0.654132, 0.748742 -0.00380101 -0.66285, 0.185975 0.00573716 -0.982538, 0.106986 -0.00382231 -0.994253, + 0.999999 0 0.00174658, 0.82896 0.00655603 -0.55927, 0.697734 0.00741083 -0.716318, 0.60913 -0.00463572 -0.793057, + 0.543583 0.00774941 -0.83932, 0.37558 0.0110337 -0.926724, 0.100527 -1.33911e-005 -0.994934, -0.0175032 0.997927 -0.0619317, + -0.0571417 0.987316 -0.148125, -0.00941298 0.998971 -0.0443755, 0.000998691 0.999845 -0.0175591, + 9.01513e-005 0.999854 -0.0170624, 0.000315367 0.999848 -0.0174298, 0.00208944 0.999836 -0.0179697, + 0.00247585 0.999841 -0.0176448, 3.74393e-007 0.99985 -0.0173038, -1.98302e-006 0.999831 -0.0183983, + -0.000989973 0.999845 -0.017553, -8.96522e-005 0.999854 -0.017062, 0.0180781 0.997825 -0.0633944, + 0.0097557 0.998928 -0.0452527, 0.0588277 0.986552 -0.152496, -0.0024795 0.999841 -0.0176472, -0.00031513 0.999848 -0.01743, + -0.00209447 0.999836 -0.0179731, -0.224733 -0.0128351 -0.974336, -0.185845 0.00576384 -0.982562, + -0.106646 -0.0038069 -0.99429, -0.315117 -0.00191517 -0.949051, -0.400441 -0.0114106 -0.916251, + -0.459522 -0.00298391 -0.888161, -0.37558 0.0110337 -0.926724, -0.603558 -0.00476137 -0.797305, + -0.609815 -0.00482669 -0.792529, -0.543583 0.00774941 -0.83932, -0.966767 0.0034451 -0.255636, -0.918063 0.00613315 -0.396388, + -0.965209 -0.00129529 -0.261477, -0.881656 0.00197605 -0.471889, -0.83493 0.0105677 -0.550255, -0.75659 0.00087162 -0.653889, + -0.748751 -5.24191e-005 -0.662851, -0.994022 0.00694963 -0.108956, -0.100187 1.33458e-005 -0.994969, + -0.698905 0.00622804 -0.715187, -0.548648 0.0302339 0.835507, -0.45131 0.035536 0.891659, -0.371163 0.0174207 0.928404, + -0.828433 0.00710541 -0.560044, -0.274853 0.0283743 0.961067, -0.219089 0.00476001 0.975693, -0.92649 0.00425885 -0.376295, + -0.999997 -0.000306304 -0.00229709, -0.985273 -0.00261341 -0.170967, -0.985084 -0.00533612 0.171992, + -0.66228 0.0124662 0.749152, -0.593529 -0.0755655 0.801258, -0.996908 0.0158248 0.0769656, -0.971067 0.00658155 0.238716, + -0.979682 0.0114266 0.200231, -0.936257 0.0130972 0.351073, -0.881065 0.005106 0.472967, -0.87311 0.00482949 0.487499, + -0.797029 0.00736705 0.603896, -0.927212 -0.000682385 0.374537, -0.720106 -0.0121109 0.693758, -0.762052 -0.00327952 0.647507, + -0.828468 0.00271564 0.56003, -0.703306 0.0499469 0.709131, -0.358813 0.0269452 0.93302, -0.151673 -0.00113006 0.98843, + -0.0933573 0.0192714 0.995446, -0.0899273 0 0.995948, -0.517346 0.0445406 0.854617, -0.0644147 0.997837 -0.0131137, + -0.119807 0.992778 -0.00609912, -0.0616926 0.998032 -0.0112637, -0.100206 0.994914 -0.0102897, -0.107138 0.994221 -0.00676407, + -0.154255 0.988023 -0.00404596, -0.183011 0.983109 0.00207299, -0.167075 0.985944 0.000760743, -0.942263 0.13857 -0.304858, + -0.925853 0.179884 -0.332323, -0.928905 0.140894 -0.342467, -0.889259 0.238753 -0.390149, -0.920809 0.114682 -0.372772, + -0.870536 0.37041 -0.323982, -0.736172 0.593926 -0.324503, -0.766916 0.113346 -0.631659, -0.680774 0.327612 -0.655146, + -0.665163 0.118005 -0.737315, -0.87111 0.136563 -0.471719, -0.791074 0.315002 -0.524382, -0.654368 0.612801 -0.443032, + -0.582848 0.436101 -0.685641, -0.508785 0.704077 -0.495392, -0.413714 0.878761 -0.237948, -0.181203 0.976498 -0.116694, + -0.272046 0.933158 -0.234962, -0.796678 0.540828 -0.269831, -0.640688 0.741696 -0.198506, -0.403801 0.910759 -0.0863912, + -0.455268 0.875514 -0.161882, -0.323738 0.942008 -0.0883968, -0.264386 0.955997 -0.127161, -0.322576 0.945235 -0.0497477, + -0.305429 0.887814 -0.344239, -0.459266 0.712906 -0.529943, -0.152132 0.979077 -0.135147, -0.478714 0.0190505 -0.877764, + -0.692857 0.00775445 -0.721033, -0.495189 0.016269 -0.868633, -0.700606 0.0154798 -0.713381, -0.393606 0.0211606 -0.919036, + -0.384047 0.00931899 -0.923266, -0.60801 0.0227861 -0.793602, -0.437297 0.0119932 -0.899237, -0.801473 0.0215086 -0.597644, + -0.828492 0.00995737 -0.559913, -0.871878 0.0182826 -0.489382, -0.864303 0.018098 -0.502645, -0.831107 0.00427045 -0.556096, + -0.893883 0.0237771 -0.44767, -0.881788 0.0139307 -0.471441, -0.908046 0.030804 -0.417735, -0.924885 0.0398335 -0.378155, + -0.923243 0.0330172 -0.382795, -0.470321 -0.0162911 -0.882345, -0.643409 -0.0239421 -0.765148, -0.502057 -0.0174017 -0.864659, + -0.392185 -0.0130364 -0.919794, -0.478714 -0.0188771 -0.877768, -0.687765 -0.00742884 -0.725895, + -0.392944 -0.0204164 -0.919336, -0.705444 -0.0226642 -0.708403, -0.840274 -0.0274746 -0.541465, + -0.892423 -0.0237365 -0.450574, -0.875653 -0.0169664 -0.482643, -0.905944 -0.0342688 -0.422008, + -0.826356 -0.0124041 -0.563011, -0.920911 -0.0478015 -0.386831, -0.913248 -0.0369518 -0.405724, + -0.829386 -0.00137722 -0.558674, -0.86831 -0.0182068 -0.495688, -0.88415 -0.19259 -0.425662, -0.871973 -0.204646 -0.444728, + -0.824878 -0.380696 -0.417908, -0.925345 -0.182936 -0.33207, -0.870013 -0.332675 -0.363876, -0.879001 -0.396677 -0.264585, + -0.711259 -0.67706 -0.188946, -0.886898 -0.403143 -0.225582, -0.837928 -0.512513 -0.187636, -0.677642 -0.678761 -0.282992, + -0.848819 -0.524906 -0.0630857, -0.842095 -0.52937 -0.103166, -0.81419 -0.576684 -0.0673101, -0.745343 -0.655596 -0.12107, + -0.855006 -0.517427 -0.0351287, -0.623117 -0.714368 -0.31844, -0.39121 -0.89825 -0.200253, -0.36924 -0.916497 -0.153934, + -0.179729 -0.976788 -0.116541, -0.21888 -0.970432 -0.101755, -0.376829 -0.918886 -0.116825, -0.247604 -0.966216 -0.0715447, + -0.430879 -0.898289 -0.0861364, -0.598494 -0.798689 -0.0624565, -0.355694 -0.933383 -0.0477269, + -0.234088 -0.970548 -0.0569237, -0.873688 -0.485756 -0.0266462, -0.804365 -0.593424 -0.0290609, + -0.786205 -0.617773 -0.0154038, -0.83292 -0.552944 -0.0222724, -0.643065 -0.765583 -0.0187155, -0.878513 -0.477391 -0.0176966, + -0.600046 -0.799647 -0.0225783, -0.414799 -0.909777 -0.0157089, -0.248511 -0.968572 -0.0105055, + -0.380553 -0.924708 -0.00968105, -0.569551 -0.821929 -0.00663501, -0.270246 -0.962738 -0.010125, + -0.267118 -0.963659 -0.00302592, -0.00831156 -0.999828 -0.0165994, 0.00448147 -0.999831 -0.0178074, + -0.0510064 -0.99862 -0.0125197, -0.0801331 -0.996723 -0.0110358, -0.0907171 -0.995836 -0.00901822, + -0.0474155 -0.99879 -0.0130795, -0.121655 -0.992547 -0.00704771, -0.162645 -0.986682 -0.00226564, + -0.0972171 -0.995218 -0.0094452, 0.0300583 -0.999334 -0.0206773, -0.145836 -0.989296 -0.00510662, + -0.159737 -0.987152 -0.00390641, -0.172556 -0.984996 -0.00287005, -0.164594 -0.986356 -0.00325115, -0.85119 0 -0.524858, + -0.828246 -0.0758739 -0.555204, -0.835209 -0.0550671 -0.547169, -0.791892 0.0188689 -0.610369, -0.740204 0.008445 -0.672329, + -0.790973 -0.0565265 -0.609235, -0.780502 0.0220766 -0.624763, -0.712803 -0.0444331 -0.699955, -0.706148 0 -0.708064, + -0.645312 0.152243 -0.748595, -0.614052 -0.0805938 -0.78514, -0.553817 0.251612 -0.793712, -0.483719 -0.607623 -0.629928, + -0.555885 0 -0.831259, 0.00442537 -0.999802 -0.019396, 0.0371488 -0.99686 -0.0699297, 0.0103258 -0.99952 -0.0291936, + -0.00421578 -0.999937 -0.0103829, -0.00194272 -0.999928 -0.0118603, 0.000258583 -0.99983 -0.0184383, + 0.00131937 -0.999836 -0.0180888, -0.00145318 -0.999816 -0.0191213, -0.000142229 -0.999837 -0.0180748, + 8.07651e-007 -0.999843 -0.0176983, 0.00194352 -0.999928 -0.0118601, -8.48818e-007 -0.999839 -0.0179678, + -0.00709422 -0.999886 -0.0133516, -0.00227483 -0.999958 -0.00883996, -0.00139536 -0.999861 -0.0166105, + 0.000514108 -0.999825 -0.0186928, -0.00239665 -0.999835 -0.0179996, -0.00144893 -0.999834 -0.018179, + -0.37162 -0.2041 -0.905672, -0.342414 -0.441724 -0.829236, -0.420818 -0.344653 -0.839122, -0.553411 -0.383204 -0.73952, + -0.330863 -0.707608 -0.624356, -0.486416 -0.1953 -0.851621, -0.667448 -0.133215 -0.732644, -0.714189 -0.309347 -0.627885, + -0.762294 -0.0124897 -0.64711, -0.789863 -0.107302 -0.603823, -0.730568 -0.446505 -0.516627, -0.518833 -0.730645 -0.443814, + -0.465642 -0.681797 -0.564208, -0.269378 -0.709502 -0.651185, -0.164548 -0.894491 -0.415703, -0.148936 -0.945669 -0.289014, + -0.0745293 -0.977224 -0.198693, -0.0933998 -0.979985 -0.175799, -0.270466 -0.896831 -0.350062, -0.114918 -0.981892 -0.150608, + -0.569231 -0.711864 -0.411371, -0.353527 -0.898744 -0.259381, -0.247953 -0.941612 -0.227785, -0.136204 -0.984111 -0.113907, + -0.604744 0 -0.79642, -0.61359 0 -0.789625, -0.568664 0 -0.82257, -0.628498 -0.000612889 -0.777811, + -0.656762 -0.00157494 -0.754096, -0.713724 -0.00765156 -0.700385, -0.766179 -0.0121071 -0.642513, + -0.712614 0.000504234 -0.701556, -0.767404 -0.0296795 -0.640477, 0.756732 -0.00180055 -0.653723, 0.80269 0.0206675 -0.596039, + 0.767908 0.0127498 -0.640433, 0.674711 -0.0240986 -0.737688, 0.668679 -0.0337367 -0.742785, 0.619892 0.35931 -0.697589, + 0.633911 0.135584 -0.761429, 0.603608 0.182981 -0.776, 0.643763 0.15242 -0.749892, 0.588961 -0.0927019 -0.802827, + 0.8503 0 0.526298, 0.83722 0 0.546866, 0.830489 0 0.557035, 0.809568 0 0.587027, 1 0 0, 0.999999 0.000789767 -0.000696033, + 0.999967 0.00811591 -0.000307357, 0.999976 -0.00693125 -0.000736642, 0.0104626 -0.999806 -0.016712, + -0.000533588 -0.999833 -0.0182422, 0.0569491 -0.998296 -0.0127348, 0.0468431 -0.998806 -0.0138952, + 0.03886 -0.999121 -0.0157133, 0.0433238 -0.998961 -0.0141498, 0.0555852 -0.998386 -0.0116417, 0.104504 -0.994494 -0.00780554, + 0.149138 -0.988806 -0.00448372, 0.145609 -0.989334 -0.00411383, 0.159254 -0.98723 -0.00398836, 0.171211 -0.985229 -0.00309899, + 0.171111 -0.985247 -0.00311598, 0.600327 -0.0560682 -0.797787, 0.545055 -0.0957843 -0.832911, 0.58506 -0.00779151 -0.810953, + 0.662651 0.178481 -0.727351, 0.555126 -0.0226762 -0.831457, 0.626448 -0.0288279 -0.77893, 0.703076 0.0662306 -0.708024, + 0.707112 0 -0.707102, 0.753969 0.216052 -0.620365, 0.778925 -0.154582 -0.607766, 0.828246 -0.0758753 -0.555204, + 0.792648 -0.28032 -0.541415, 0.851191 0 -0.524857, 0.626989 -0.613886 -0.479613, -0.809567 0 0.587028, -0.83722 0 0.546866, + -0.830489 0 0.557035, -0.8503 0 0.526298, -0.492144 0.205577 -0.845891, -0.441023 0.446512 -0.77854, + -0.41027 0.326504 -0.851513, -0.301859 0.708895 -0.637456, -0.357544 0.20457 -0.911215, -0.42562 0.211045 -0.879947, + -0.332096 0.444958 -0.8317, -0.342235 0.712233 -0.612862, -0.217441 0.892491 -0.395195, -0.134422 0.943512 -0.302845, + -0.0934273 0.977407 -0.189599, -0.0753177 0.979787 -0.185324, -0.158013 0.89282 -0.421787, -0.258374 0.711553 -0.653403, + -0.0684089 0.977514 -0.199467, 0.0965034 0 -0.995333, 0.178872 0.0907073 -0.979682, 0.307692 0.00102163 -0.951486, + 0.343443 -0.29686 -0.891022, 0.453166 -0.00475102 -0.891414, 0.360156 0.346228 -0.866264, 0.525854 0.325908 -0.78566, + 0.372841 -0.1229 -0.91972, 0.206877 -0.108693 -0.972311, 0.668784 0.321225 -0.670479, 0.613202 -0.00642813 -0.7899, + 0.623909 -0.399659 -0.671573, 0.69792 -0.397186 -0.595946, 0.868935 0.34244 -0.357332, 0.793623 0.438509 -0.421748, + 0.776284 0.356073 -0.520188, 0.703609 0.379658 -0.600662, 0.966143 -0.00968617 -0.257824, 0.984418 -0.0378694 -0.171717, + 0.500222 -0.287919 -0.816628, 0.541432 -0.112435 -0.833192, 0.634788 0.360787 -0.683284, 0.676263 -0.288194 -0.677948, + 0.787078 -0.320352 -0.527146, 0.821634 0.474161 -0.316368, 0.785569 -0.456601 -0.417609, 0.797755 -0.518875 -0.307174, + 0.999948 -0.01023 0.000198401, 0.984513 0.0346659 -0.171848, 0.87982 -0.307839 -0.362149, 1 0 0.000182251, + 0.734297 0.449522 -0.508662, 0.715033 -0.493345 -0.495317, 0.984394 -0.0373804 0.17196, 0.966046 -0.00976322 0.258184, + 0.868203 0.342934 0.358636, 0.789618 -0.532046 0.305664, 0.78936 -0.446314 0.421561, 0.796985 0.428948 0.425228, + 0.775409 0.362737 0.516878, 0.736337 -0.448975 0.506191, 0.699396 -0.401195 0.591513, 0.814527 0.486958 0.315306, + 0.984486 0.0342146 0.172093, 0.60776 -0.445407 0.65745, 0.614276 -0.00893851 0.789041, 0.677648 0.288003 0.676644, + 0.545454 0.0896475 0.833333, 0.203305 0.132705 0.970081, 0.306727 0.00211987 0.951795, 0.356303 0.373844 0.856323, + 0.454408 -0.00466512 0.890782, 0.177105 -0.089283 0.980134, 0.0958071 0 0.9954, 0.70488 0.383928 0.596442, + 0.752654 0.407187 0.517407, 0.621007 0.403809 0.67178, 0.683897 -0.257961 0.682452, 0.786581 -0.326493 0.524112, + 0.879107 -0.308296 0.363489, 0.545709 -0.0794464 0.8342, 0.371402 -0.150723 0.916157, 0.346718 -0.264608 0.899872, + -0.0965034 0 0.995333, -0.176872 0.0991526 0.979227, -0.306718 0.00210862 0.951798, -0.34665 -0.264844 0.899829, + -0.453519 -0.00406173 0.891238, -0.35633 0.373609 0.856414, -0.524872 0.332403 0.783593, -0.371395 -0.150497 0.916197, + -0.204356 -0.119124 0.971621, -0.672268 0.308611 0.672915, -0.614201 -0.00698484 0.789119, -0.61774 -0.424691 0.661842, + -0.699242 -0.396085 0.595128, -0.855683 0.37807 0.353369, -0.798507 0.427956 0.423368, -0.772171 0.370609 0.51614, + -0.705107 0.377686 0.600147, -0.896133 0.371726 0.242416, -0.984632 -0.0315361 0.171774, -0.501156 -0.295423 0.813368, + -0.542178 -0.114371 0.832444, -0.629945 0.384258 0.674918, -0.679185 -0.276637 0.679838, -0.783882 -0.334022 0.52341, + -0.84912 0.413464 0.328697, -0.889301 -0.388799 0.240788, -0.792019 -0.443232 0.419823, -0.83016 -0.455592 0.321358, + -0.999945 -0.0103228 -0.00162236, -0.984677 0.0289628 0.171968, -0.868778 -0.340887 0.359194, -0.999999 0 -0.00169462, + -0.738827 0.436097 0.513765, -0.720542 -0.479342 0.50105, -0.984418 -0.0378694 -0.171717, -0.966143 -0.00968616 -0.257824, + -0.868935 0.34244 -0.357332, -0.797755 -0.518875 -0.307174, -0.785569 -0.456601 -0.417609, -0.793623 0.438509 -0.421748, + -0.776284 0.356073 -0.520188, -0.715033 -0.493345 -0.495317, -0.69792 -0.397186 -0.595946, -0.821634 0.474161 -0.316368, + -0.984513 0.0346659 -0.171848, -0.623909 -0.399659 -0.671573, -0.613202 -0.00642813 -0.7899, -0.668784 0.321225 -0.670479, + -0.525854 0.325908 -0.78566, -0.2061 0.121189 -0.970998, -0.307692 0.00102163 -0.951486, -0.360156 0.346228 -0.866264, + -0.453166 -0.00475102 -0.891414, -0.179206 -0.0813956 -0.980439, -0.096154 0 -0.995367, -0.703609 0.379658 -0.600662, + -0.734297 0.449522 -0.508662, -0.787078 -0.320352 -0.527146, -0.87982 -0.307839 -0.362149, -0.676263 -0.288194 -0.677948, + -0.541432 -0.112435 -0.833192, -0.634788 0.360787 -0.683284, -0.372841 -0.1229 -0.91972, -0.343443 -0.29686 -0.891022, + -0.500222 -0.287919 -0.816628, 1 -0.0001725 0, -1 8.62499e-005 0, 0.999486 0.0170081 0.0271821, 0.999487 0.0170269 0.0271444, + 0.999707 0.0170052 0.0172417, 0.999596 0.0226283 0.0172119, 0.999277 0.0309216 0.0221429, 0.999705 0.0242276 0.00141027, + 0.999852 0.0172208 0.000628449, 0.999768 0.0129682 -0.0172184, 0.999939 0.00857964 -0.00695345, + 0.999714 0.00429968 -0.0235235, 0.999674 0.0173256 -0.0187505, 0.999454 0.0172183 -0.0281934, -0.994893 0.0911165 0.043426, + -0.993789 0.107162 0.0299981, -0.960435 0.275248 0.0424718, -0.967984 0.249039 0.0314186, -0.975413 0.217865 0.0332341, + -0.852658 0.522368 0.0102971, -0.859408 0.510948 0.0186919, -0.752809 0.658138 0.0115234, -0.894146 0.447495 -0.0158515, + -0.909572 0.415172 -0.0176542, -0.856573 0.515729 -0.017483, -0.791317 0.611279 -0.0124774, -0.913685 0.405557 0.0265145, + -0.817254 0.575989 0.0182444, -0.571718 0.820384 0.0103995, -0.800296 0.599601 -0.00224952, -0.486435 0.8737 0.00544643, + -0.354955 0.934875 0.00402416, -0.338613 0.940925 0.00144886, -0.534265 0.845317 -0.000264599, + -0.334314 0.942461 -0.000968355, -0.882501 0.470106 -0.013858, -0.852698 0.522374 -0.0055796, -0.622654 0.78236 -0.0146856, + -0.496418 0.868054 -0.00720919, -0.392166 0.919859 -0.00810943, -0.0118332 -0.97898 -0.203611, -0.0146605 -0.88658 -0.462342, + -1.25538e-008 -0.927903 -0.372823, -1.30501e-009 -0.704269 -0.709933, 0.0118332 -0.97898 -0.203611, + 0.0146605 -0.88658 -0.462342, 0 -0.722869 -0.690985, 5.32322e-009 -0.315054 -0.949074, 0.00572622 -0.430493 -0.902576, + 0.00185135 -0.158028 -0.987433, -0.00572621 -0.430493 -0.902576, -0.000928586 -0.0792625 -0.996853] + } + coordIndex [ + 21, 20, 17, -1,17, 22, 21, -1,17, 20, 19, -1,16, 23, 22, -1,17, 16, 22, -1,18, 17, + 19, -1,13, 30, 16, -1,29, 25, 24, -1,29, 26, 25, -1,24, 23, 30, -1,28, 27, 29, -1, + 26, 29, 27, -1,24, 30, 29, -1,16, 30, 23, -1,30, 33, 31, -1,14, 16, 15, -1,30, 13, + 33, -1,13, 12, 7, -1,11, 10, 12, -1,9, 8, 12, -1,7, 12, 8, -1,12, 10, 9, -1,6, 13, + 7, -1,2, 1, 0, -1,5, 0, 33, -1,32, 31, 33, -1,4, 0, 5, -1,0, 3, 2, -1,0, 4, 3, -1, + 5, 33, 6, -1,13, 6, 33, -1,13, 16, 14, -1,41, 583, 42, -1,583, 41, 40, -1,584, 586, + 583, -1,42, 583, 43, -1,589, 44, 43, -1,586, 43, 583, -1,589, 43, 586, -1,863, 590, + 864, -1,589, 590, 863, -1,589, 863, 44, -1,587, 589, 586, -1,583, 40, 584, -1,39, + 38, 584, -1,584, 38, 585, -1,584, 587, 586, -1,585, 37, 36, -1,37, 585, 38, -1,584, + 585, 588, -1,588, 585, 36, -1,590, 591, 865, -1,588, 590, 587, -1,590, 865, 864, -1, + 590, 589, 587, -1,588, 35, 591, -1,35, 588, 36, -1,591, 34, 865, -1,34, 591, 35, -1, + 588, 591, 590, -1,587, 584, 588, -1,40, 39, 584, -1,54, 866, 55, -1,49, 48, 867, -1, + 46, 45, 868, -1,46, 48, 47, -1,48, 46, 867, -1,867, 46, 868, -1,867, 50, 49, -1,869, + 57, 56, -1,869, 55, 866, -1,866, 54, 870, -1,51, 867, 870, -1,53, 52, 870, -1,52, + 51, 870, -1,53, 870, 54, -1,50, 867, 51, -1,55, 869, 56, -1,61, 60, 592, -1,592, + 60, 593, -1,871, 872, 592, -1,592, 872, 61, -1,593, 60, 59, -1,593, 59, 594, -1,594, + 59, 58, -1,871, 593, 873, -1,594, 874, 873, -1,874, 594, 58, -1,593, 594, 873, -1, + 593, 871, 592, -1,65, 875, 876, -1,875, 65, 877, -1,876, 66, 65, -1,877, 64, 62, -1, + 64, 877, 65, -1,63, 62, 64, -1,69, 68, 67, -1,71, 67, 81, -1,72, 71, 81, -1,74, 81, + 80, -1,76, 80, 878, -1,73, 81, 74, -1,74, 80, 75, -1,73, 72, 81, -1,69, 67, 70, -1, + 70, 67, 71, -1,76, 878, 77, -1,79, 78, 77, -1,879, 880, 79, -1,878, 879, 79, -1,77, + 878, 79, -1,75, 80, 76, -1,89, 85, 595, -1,86, 85, 89, -1,84, 83, 95, -1,88, 86, + 89, -1,88, 87, 86, -1,85, 84, 595, -1,95, 595, 84, -1,595, 95, 596, -1,95, 83, 82, -1, + 597, 94, 881, -1,882, 597, 881, -1,94, 597, 596, -1,94, 596, 95, -1,595, 596, 90, -1, + 596, 91, 90, -1,91, 596, 597, -1,91, 597, 92, -1,92, 597, 882, -1,882, 93, 92, -1, + 595, 90, 89, -1,96, 98, 883, -1,884, 97, 96, -1,883, 884, 96, -1,102, 101, 103, -1, + 99, 103, 100, -1,98, 822, 99, -1,100, 103, 101, -1,822, 103, 99, -1,98, 96, 822, -1, + 885, 110, 598, -1,599, 110, 109, -1,111, 110, 599, -1,886, 887, 888, -1,888, 598, + 111, -1,598, 888, 885, -1,111, 598, 110, -1,888, 111, 886, -1,109, 108, 599, -1,600, + 107, 106, -1,600, 106, 105, -1,599, 112, 111, -1,112, 599, 113, -1,113, 600, 104, -1, + 600, 113, 599, -1,104, 600, 105, -1,599, 107, 600, -1,107, 599, 108, -1,114, 116, + 115, -1,116, 114, 117, -1,117, 889, 118, -1,889, 117, 114, -1,119, 118, 889, -1,127, + 601, 890, -1,601, 127, 126, -1,126, 125, 601, -1,601, 125, 602, -1,890, 601, 128, -1, + 602, 129, 128, -1,129, 602, 130, -1,601, 602, 128, -1,125, 124, 602, -1,124, 123, + 603, -1,122, 121, 120, -1,123, 122, 603, -1,603, 122, 130, -1,130, 602, 603, -1,130, + 122, 120, -1,603, 602, 124, -1,133, 132, 131, -1,134, 131, 135, -1,131, 134, 133, -1, + 823, 135, 131, -1,136, 891, 137, -1,136, 823, 891, -1,137, 891, 138, -1,139, 138, + 891, -1,892, 139, 891, -1,136, 135, 823, -1,167, 893, 168, -1,827, 824, 830, -1,149, + 168, 894, -1,893, 894, 168, -1,150, 149, 894, -1,167, 895, 893, -1,165, 896, 897, -1, + 166, 895, 167, -1,897, 166, 165, -1,165, 164, 896, -1,897, 895, 166, -1,159, 828, + 831, -1,151, 150, 898, -1,894, 898, 150, -1,152, 899, 900, -1,898, 899, 151, -1,151, + 899, 152, -1,832, 829, 824, -1,900, 901, 153, -1,902, 154, 901, -1,153, 901, 154, -1, + 155, 154, 902, -1,825, 826, 833, -1,152, 900, 153, -1,141, 164, 163, -1,143, 162, + 161, -1,161, 826, 143, -1,162, 143, 163, -1,832, 824, 825, -1,896, 164, 140, -1,163, + 143, 142, -1,163, 142, 141, -1,164, 141, 140, -1,140, 903, 896, -1,158, 828, 159, -1, + 144, 157, 156, -1,146, 156, 155, -1,157, 144, 158, -1,156, 145, 144, -1,147, 902, + 148, -1,155, 147, 146, -1,144, 828, 158, -1,156, 146, 145, -1,824, 829, 830, -1,155, + 902, 147, -1,833, 832, 825, -1,160, 826, 161, -1,831, 827, 830, -1,827, 831, 828, -1, + 160, 833, 826, -1,171, 170, 169, -1,169, 172, 171, -1,604, 904, 905, -1,605, 904, + 604, -1,176, 604, 906, -1,905, 906, 604, -1,604, 176, 605, -1,907, 904, 605, -1,908, + 605, 606, -1,907, 605, 908, -1,909, 908, 606, -1,174, 605, 175, -1,174, 173, 606, -1, + 909, 606, 173, -1,174, 606, 605, -1,176, 175, 605, -1,910, 177, 911, -1,911, 909, + 910, -1,607, 912, 911, -1,608, 912, 607, -1,181, 607, 913, -1,911, 913, 607, -1,607, + 181, 608, -1,914, 912, 608, -1,915, 608, 609, -1,914, 608, 915, -1,916, 915, 609, -1, + 179, 608, 180, -1,179, 178, 609, -1,916, 609, 178, -1,179, 609, 608, -1,181, 180, + 608, -1,184, 183, 182, -1,182, 916, 184, -1,610, 917, 918, -1,611, 917, 610, -1,188, + 610, 919, -1,918, 919, 610, -1,610, 188, 611, -1,920, 917, 611, -1,921, 611, 612, -1, + 920, 611, 921, -1,922, 921, 612, -1,186, 611, 187, -1,186, 185, 612, -1,922, 612, + 185, -1,186, 612, 611, -1,188, 187, 611, -1,191, 190, 189, -1,189, 922, 191, -1,613, + 923, 924, -1,614, 923, 613, -1,194, 613, 925, -1,924, 925, 613, -1,613, 194, 614, -1, + 926, 923, 614, -1,927, 614, 615, -1,926, 614, 927, -1,928, 927, 615, -1,192, 614, + 193, -1,192, 929, 615, -1,928, 615, 929, -1,192, 615, 614, -1,194, 193, 614, -1,929, + 930, 931, -1,932, 933, 931, -1,932, 931, 930, -1,934, 935, 929, -1,936, 935, 937, -1, + 938, 937, 939, -1,937, 938, 936, -1,937, 935, 940, -1,929, 931, 934, -1,941, 942, + 943, -1,944, 934, 941, -1,944, 941, 943, -1,934, 940, 935, -1,945, 946, 947, -1,946, + 948, 947, -1,948, 946, 940, -1,937, 940, 946, -1,931, 941, 934, -1,198, 197, 616, -1, + 616, 197, 617, -1,949, 616, 950, -1,616, 949, 198, -1,617, 950, 616, -1,617, 197, + 196, -1,618, 617, 195, -1,195, 617, 196, -1,618, 195, 951, -1,952, 617, 953, -1,618, + 954, 953, -1,954, 618, 951, -1,617, 618, 953, -1,617, 952, 950, -1,203, 202, 201, -1, + 200, 199, 203, -1,200, 203, 201, -1,203, 199, 208, -1,205, 204, 206, -1,204, 207, + 206, -1,207, 204, 208, -1,204, 203, 208, -1,199, 955, 208, -1,955, 956, 213, -1,957, + 958, 213, -1,957, 213, 956, -1,955, 213, 212, -1,209, 959, 212, -1,210, 212, 211, -1, + 212, 210, 209, -1,959, 955, 212, -1,955, 959, 208, -1,960, 619, 961, -1,619, 960, + 962, -1,962, 963, 620, -1,620, 963, 964, -1,962, 620, 619, -1,619, 620, 219, -1,619, + 218, 961, -1,218, 619, 219, -1,620, 220, 219, -1,621, 220, 620, -1,621, 964, 217, -1, + 621, 217, 215, -1,215, 217, 216, -1,214, 220, 621, -1,215, 214, 621, -1,621, 620, + 964, -1,223, 222, 622, -1,965, 223, 224, -1,966, 965, 224, -1,222, 221, 226, -1,226, + 967, 968, -1,226, 968, 622, -1,968, 224, 622, -1,224, 968, 225, -1,622, 224, 223, -1, + 226, 622, 222, -1,969, 970, 971, -1,970, 969, 972, -1,972, 228, 229, -1,228, 972, + 969, -1,227, 229, 228, -1,234, 623, 235, -1,973, 623, 974, -1,973, 235, 623, -1,623, + 624, 974, -1,624, 623, 233, -1,624, 233, 232, -1,974, 624, 975, -1,234, 233, 623, -1, + 232, 231, 625, -1,231, 230, 625, -1,976, 230, 977, -1,975, 624, 978, -1,230, 976, + 625, -1,625, 976, 978, -1,625, 978, 624, -1,625, 624, 232, -1,979, 238, 237, -1,980, + 981, 982, -1,626, 982, 983, -1,979, 237, 983, -1,984, 626, 237, -1,237, 626, 983, -1, + 984, 237, 236, -1,980, 984, 985, -1,984, 980, 626, -1,626, 980, 982, -1,986, 987, + 988, -1,988, 987, 989, -1,990, 991, 992, -1,991, 993, 988, -1,991, 990, 994, -1,992, + 991, 988, -1,993, 986, 988, -1,243, 834, 995, -1,243, 242, 627, -1,630, 627, 628, -1, + 628, 627, 242, -1,242, 241, 628, -1,240, 628, 241, -1,836, 835, 631, -1,989, 836, + 631, -1,239, 628, 240, -1,629, 631, 835, -1,996, 627, 629, -1,989, 631, 997, -1,987, + 836, 989, -1,629, 630, 631, -1,630, 239, 632, -1,629, 627, 630, -1,997, 632, 998, -1, + 997, 631, 632, -1,998, 632, 239, -1,243, 627, 834, -1,632, 631, 630, -1,628, 239, + 630, -1,629, 835, 996, -1,996, 834, 627, -1,251, 250, 249, -1,998, 249, 248, -1,245, + 244, 999, -1,999, 247, 245, -1,245, 247, 246, -1,247, 999, 998, -1,998, 248, 247, -1, + 837, 254, 1000, -1,253, 1000, 254, -1,998, 252, 251, -1,252, 998, 253, -1,1000, 253, + 998, -1,249, 998, 251, -1,837, 1000, 1001, -1,837, 1001, 255, -1,260, 259, 1002, -1, + 256, 260, 1002, -1,258, 257, 1002, -1,256, 1002, 257, -1,265, 264, 263, -1,263, 266, + 265, -1,262, 266, 263, -1,262, 1003, 268, -1,268, 267, 262, -1,267, 266, 262, -1, + 1003, 271, 270, -1,270, 269, 268, -1,1003, 261, 272, -1,271, 1003, 272, -1,272, 1004, + 273, -1,1004, 261, 1005, -1,272, 261, 1004, -1,270, 268, 1003, -1,1006, 633, 1007, -1, + 633, 1006, 1008, -1,1008, 1009, 633, -1,635, 634, 1009, -1,1009, 634, 633, -1,635, + 1009, 1010, -1,635, 1010, 1005, -1,1007, 634, 1011, -1,635, 1012, 1011, -1,1012, + 635, 1005, -1,634, 635, 1011, -1,634, 1007, 633, -1,637, 636, 1013, -1,1013, 636, + 274, -1,637, 1013, 1014, -1,275, 274, 636, -1,276, 275, 639, -1,277, 276, 642, -1, + 642, 639, 640, -1,639, 275, 636, -1,642, 278, 277, -1,643, 278, 642, -1,640, 639, + 637, -1,639, 642, 276, -1,636, 637, 639, -1,1014, 1015, 637, -1,637, 638, 640, -1, + 638, 637, 1015, -1,638, 1015, 1016, -1,641, 640, 638, -1,1016, 1017, 638, -1,641, + 638, 1017, -1,643, 280, 279, -1,280, 643, 644, -1,643, 279, 278, -1,641, 1018, 644, -1, + 1018, 641, 1017, -1,644, 281, 280, -1,281, 644, 1018, -1,641, 644, 643, -1,643, 640, + 641, -1,640, 643, 642, -1,1019, 1020, 645, -1,1021, 1019, 1022, -1,1023, 1022, 645, -1, + 645, 285, 1023, -1,646, 285, 645, -1,1022, 1019, 645, -1,645, 1020, 646, -1,647, + 284, 283, -1,647, 283, 282, -1,646, 286, 285, -1,286, 646, 647, -1,647, 287, 286, -1, + 287, 647, 282, -1,646, 284, 647, -1,284, 646, 1020, -1,1024, 1025, 648, -1,1026, + 1027, 288, -1,648, 288, 1027, -1,649, 288, 648, -1,1027, 1024, 648, -1,648, 1025, + 649, -1,650, 649, 1028, -1,1028, 649, 1025, -1,650, 1028, 1029, -1,292, 1029, 293, -1, + 289, 649, 290, -1,650, 292, 291, -1,292, 650, 1029, -1,650, 291, 290, -1,649, 650, + 290, -1,649, 289, 288, -1,294, 1030, 651, -1,651, 652, 654, -1,652, 651, 1030, -1, + 1030, 1031, 652, -1,294, 651, 295, -1,295, 651, 296, -1,296, 654, 657, -1,654, 296, + 651, -1,297, 838, 298, -1,655, 657, 654, -1,657, 658, 298, -1,655, 654, 652, -1,652, + 653, 655, -1,653, 652, 1031, -1,653, 1031, 1032, -1,656, 655, 653, -1,1032, 304, + 303, -1,302, 653, 303, -1,303, 653, 1032, -1,656, 653, 302, -1,300, 658, 659, -1, + 656, 658, 655, -1,300, 299, 658, -1,658, 656, 659, -1,658, 299, 298, -1,659, 301, + 300, -1,659, 839, 301, -1,302, 839, 656, -1,839, 659, 656, -1,838, 657, 298, -1,655, + 658, 657, -1,296, 657, 838, -1,1033, 1034, 660, -1,1034, 1033, 1035, -1,660, 309, + 1033, -1,309, 660, 661, -1,1034, 1036, 660, -1,1036, 308, 660, -1,308, 307, 661, -1, + 306, 305, 662, -1,307, 306, 661, -1,310, 309, 661, -1,310, 661, 311, -1,311, 662, + 312, -1,662, 311, 661, -1,312, 662, 305, -1,661, 306, 662, -1,661, 660, 308, -1,1037, + 663, 1038, -1,663, 1037, 1039, -1,666, 663, 664, -1,1038, 663, 1040, -1,840, 669, + 1041, -1,313, 669, 670, -1,313, 1041, 669, -1,667, 669, 666, -1,840, 666, 669, -1, + 1040, 663, 666, -1,664, 663, 1039, -1,666, 840, 1040, -1,664, 667, 666, -1,664, 1042, + 1043, -1,667, 664, 665, -1,667, 670, 669, -1,1043, 319, 665, -1,667, 665, 668, -1, + 318, 665, 319, -1,1043, 665, 664, -1,668, 665, 318, -1,670, 315, 314, -1,315, 670, + 671, -1,670, 314, 313, -1,668, 317, 671, -1,317, 668, 318, -1,671, 316, 315, -1,316, + 671, 317, -1,668, 671, 670, -1,670, 667, 668, -1,1039, 1042, 664, -1,321, 320, 672, -1, + 1044, 1045, 673, -1,321, 672, 322, -1,673, 672, 1044, -1,1045, 1046, 673, -1,1044, + 672, 320, -1,675, 672, 673, -1,323, 678, 324, -1,322, 675, 678, -1,675, 322, 672, -1, + 325, 324, 678, -1,676, 678, 675, -1,678, 679, 325, -1,678, 323, 322, -1,676, 675, + 673, -1,674, 676, 673, -1,674, 1046, 332, -1,676, 677, 680, -1,677, 676, 674, -1, + 674, 331, 677, -1,674, 673, 1046, -1,332, 331, 674, -1,677, 331, 330, -1,679, 680, + 327, -1,679, 676, 680, -1,327, 326, 679, -1,680, 328, 327, -1,679, 326, 325, -1,329, + 680, 677, -1,329, 328, 680, -1,330, 329, 677, -1,676, 679, 678, -1,1047, 1048, 681, -1, + 681, 1048, 682, -1,1047, 681, 1049, -1,681, 333, 1049, -1,333, 681, 682, -1,333, + 682, 334, -1,1048, 1050, 682, -1,1051, 1052, 683, -1,1051, 683, 682, -1,334, 682, + 335, -1,683, 336, 335, -1,336, 683, 1052, -1,683, 335, 682, -1,682, 1050, 1051, -1, + 1053, 1054, 684, -1,684, 1054, 685, -1,337, 684, 338, -1,684, 337, 1053, -1,685, + 338, 684, -1,685, 1054, 1055, -1,686, 685, 1056, -1,1056, 685, 1055, -1,686, 1056, + 342, -1,339, 685, 340, -1,686, 341, 340, -1,341, 686, 342, -1,685, 686, 340, -1,685, + 339, 338, -1,1057, 1058, 687, -1,353, 352, 688, -1,1057, 687, 1059, -1,688, 687, + 353, -1,352, 351, 688, -1,353, 687, 1058, -1,690, 687, 688, -1,1060, 693, 1061, -1, + 1059, 690, 693, -1,690, 1059, 687, -1,343, 1061, 693, -1,691, 693, 690, -1,693, 694, + 343, -1,693, 1060, 1059, -1,691, 690, 688, -1,689, 691, 688, -1,689, 351, 350, -1, + 691, 692, 695, -1,692, 691, 689, -1,689, 349, 692, -1,689, 688, 351, -1,350, 349, + 689, -1,692, 349, 348, -1,694, 695, 345, -1,694, 691, 695, -1,345, 344, 694, -1,695, + 346, 345, -1,694, 344, 343, -1,347, 695, 692, -1,347, 346, 695, -1,348, 347, 692, -1, + 691, 694, 693, -1,696, 355, 354, -1,696, 354, 1062, -1,356, 696, 357, -1,696, 356, + 355, -1,697, 358, 357, -1,697, 357, 696, -1,696, 1062, 697, -1,697, 1063, 1064, -1, + 1064, 362, 698, -1,361, 698, 362, -1,697, 359, 358, -1,359, 697, 698, -1,698, 360, + 359, -1,360, 698, 361, -1,697, 1064, 698, -1,1063, 697, 1062, -1,700, 699, 1065, -1, + 1065, 699, 1066, -1,366, 699, 700, -1,364, 1066, 699, -1,365, 364, 699, -1,366, 365, + 699, -1,363, 1066, 364, -1,700, 1065, 1067, -1,700, 367, 366, -1,367, 700, 701, -1, + 1068, 1069, 701, -1,367, 701, 368, -1,1068, 701, 700, -1,700, 1067, 1068, -1,1070, + 701, 1069, -1,1070, 368, 701, -1,1070, 1069, 1071, -1,1072, 371, 702, -1,1073, 1074, + 702, -1,1073, 702, 1075, -1,1074, 1072, 702, -1,371, 703, 702, -1,703, 1075, 702, -1, + 703, 370, 369, -1,369, 1076, 704, -1,704, 1076, 1077, -1,369, 704, 703, -1,703, 704, + 1078, -1,1075, 703, 1079, -1,704, 1080, 1078, -1,1078, 1079, 703, -1,1080, 704, 1077, -1, + 703, 371, 370, -1,1081, 1082, 705, -1,1082, 1081, 1083, -1,1084, 1081, 705, -1,1082, + 1085, 706, -1,706, 1085, 1086, -1,1082, 706, 705, -1,708, 705, 706, -1,711, 1087, + 1084, -1,711, 708, 709, -1,1088, 1087, 711, -1,711, 712, 1088, -1,711, 1084, 708, -1, + 1084, 705, 708, -1,709, 708, 706, -1,706, 707, 709, -1,707, 706, 1086, -1,707, 1086, + 374, -1,709, 707, 710, -1,373, 710, 707, -1,709, 710, 713, -1,372, 710, 373, -1,373, + 707, 374, -1,713, 710, 372, -1,712, 713, 1089, -1,713, 712, 709, -1,1089, 713, 1090, -1, + 712, 1089, 1088, -1,1091, 1090, 713, -1,713, 372, 1091, -1,709, 712, 711, -1,376, + 714, 1092, -1,714, 376, 375, -1,1093, 1092, 714, -1,714, 1094, 1093, -1,1095, 1091, + 714, -1,1094, 714, 1091, -1,714, 375, 1095, -1,715, 1096, 1097, -1,382, 1096, 715, -1, + 1097, 716, 715, -1,717, 1098, 1099, -1,717, 1099, 1100, -1,1098, 716, 1101, -1,716, + 1098, 717, -1,716, 717, 393, -1,1101, 716, 1097, -1,717, 718, 394, -1,715, 716, 392, -1, + 386, 385, 387, -1,843, 384, 389, -1,388, 387, 385, -1,388, 843, 389, -1,382, 390, + 841, -1,383, 841, 390, -1,390, 382, 391, -1,390, 389, 842, -1,385, 843, 388, -1,391, + 382, 715, -1,392, 716, 393, -1,715, 392, 391, -1,717, 394, 393, -1,390, 842, 383, -1, + 842, 389, 384, -1,717, 1100, 718, -1,719, 1102, 1103, -1,719, 1103, 1095, -1,718, + 719, 396, -1,719, 718, 1102, -1,720, 719, 1095, -1,719, 720, 397, -1,1095, 1104, + 720, -1,1102, 718, 1100, -1,723, 380, 379, -1,724, 379, 378, -1,721, 381, 380, -1, + 720, 1104, 721, -1,1104, 381, 721, -1,402, 378, 377, -1,718, 396, 395, -1,721, 398, + 720, -1,719, 397, 396, -1,397, 720, 398, -1,399, 398, 721, -1,721, 722, 399, -1,722, + 723, 400, -1,723, 722, 380, -1,724, 723, 379, -1,723, 724, 401, -1,401, 400, 723, -1, + 402, 724, 378, -1,401, 724, 402, -1,377, 403, 402, -1,722, 400, 399, -1,721, 380, + 722, -1,718, 395, 394, -1,410, 409, 408, -1,404, 410, 408, -1,1105, 410, 404, -1, + 408, 407, 406, -1,408, 405, 404, -1,1105, 404, 1106, -1,405, 408, 406, -1,1106, 1107, + 1105, -1,1108, 1109, 1106, -1,1108, 1110, 1109, -1,1110, 1111, 1112, -1,1111, 1108, + 1113, -1,1114, 1111, 1115, -1,1113, 1115, 1111, -1,1111, 1110, 1108, -1,1107, 1106, + 1109, -1,1116, 413, 1117, -1,725, 1116, 1118, -1,725, 726, 414, -1,726, 725, 1118, -1, + 1119, 727, 726, -1,726, 727, 415, -1,726, 1118, 1119, -1,413, 1116, 725, -1,730, + 1120, 1121, -1,1120, 729, 411, -1,728, 1119, 412, -1,727, 1119, 728, -1,411, 728, + 412, -1,730, 1121, 1122, -1,1117, 413, 1123, -1,416, 727, 728, -1,725, 414, 413, -1, + 425, 845, 426, -1,414, 726, 415, -1,415, 727, 416, -1,728, 417, 416, -1,426, 844, + 427, -1,729, 730, 418, -1,730, 729, 1120, -1,731, 730, 1122, -1,730, 731, 419, -1, + 418, 417, 729, -1,420, 419, 731, -1,418, 730, 419, -1,731, 421, 420, -1,729, 417, + 728, -1,728, 411, 729, -1,425, 432, 846, -1,1122, 1124, 731, -1,732, 1124, 1125, -1, + 732, 1125, 1126, -1,1126, 733, 732, -1,733, 1126, 1127, -1,733, 1127, 1128, -1,732, + 733, 422, -1,732, 421, 731, -1,1128, 1129, 734, -1,432, 734, 1129, -1,1128, 734, + 733, -1,733, 734, 423, -1,732, 422, 421, -1,432, 424, 734, -1,733, 423, 422, -1,423, + 734, 424, -1,425, 424, 432, -1,845, 430, 426, -1,844, 429, 427, -1,430, 844, 426, -1, + 428, 427, 429, -1,1130, 428, 429, -1,845, 425, 431, -1,431, 425, 846, -1,732, 731, + 1124, -1,436, 735, 1131, -1,735, 436, 435, -1,1132, 1131, 735, -1,735, 1133, 1132, -1, + 433, 735, 434, -1,1133, 735, 433, -1,434, 735, 435, -1,1134, 1135, 1136, -1,736, + 1137, 1136, -1,736, 1136, 1135, -1,1135, 1138, 736, -1,737, 736, 1138, -1,438, 742, + 439, -1,437, 736, 739, -1,736, 437, 1137, -1,739, 740, 742, -1,737, 739, 736, -1, + 440, 439, 742, -1,742, 438, 739, -1,743, 440, 742, -1,438, 437, 739, -1,741, 847, + 744, -1,1138, 1139, 737, -1,1140, 1141, 738, -1,741, 737, 738, -1,738, 737, 1140, -1, + 1141, 1142, 738, -1,1140, 737, 1139, -1,738, 1142, 1143, -1,1142, 1141, 1144, -1, + 741, 738, 1143, -1,740, 743, 742, -1,442, 743, 744, -1,442, 441, 743, -1,743, 740, + 741, -1,743, 441, 440, -1,741, 744, 743, -1,1143, 847, 741, -1,443, 744, 847, -1, + 744, 443, 442, -1,740, 737, 741, -1,737, 740, 739, -1,445, 444, 745, -1,745, 444, + 746, -1,445, 745, 446, -1,745, 1145, 446, -1,745, 1146, 447, -1,447, 1145, 745, -1, + 1146, 746, 1147, -1,745, 746, 1146, -1,444, 747, 746, -1,747, 1148, 1149, -1,1148, + 747, 1150, -1,747, 1149, 1147, -1,747, 444, 1150, -1,1149, 1151, 1147, -1,1151, 1149, + 1152, -1,1151, 1152, 1153, -1,848, 1151, 1153, -1,848, 1154, 1151, -1,747, 1147, + 746, -1,451, 450, 748, -1,452, 451, 748, -1,1155, 748, 1156, -1,748, 1155, 1157, -1, + 749, 1156, 748, -1,748, 1157, 452, -1,748, 450, 749, -1,449, 1158, 1159, -1,1158, + 449, 448, -1,449, 1159, 750, -1,448, 1160, 1161, -1,448, 1161, 1158, -1,1156, 750, + 1162, -1,750, 749, 449, -1,1163, 750, 1159, -1,1162, 750, 1163, -1,750, 1156, 749, -1, + 449, 749, 450, -1,1164, 1165, 462, -1,1166, 1164, 751, -1,754, 755, 1167, -1,754, + 1166, 751, -1,1168, 1167, 755, -1,1167, 1166, 754, -1,752, 754, 751, -1,751, 1164, + 462, -1,1169, 1170, 453, -1,1170, 757, 453, -1,453, 1171, 1169, -1,757, 1170, 1168, -1, + 751, 462, 752, -1,461, 460, 752, -1,752, 755, 754, -1,753, 755, 752, -1,752, 460, + 753, -1,461, 752, 462, -1,753, 459, 458, -1,459, 753, 460, -1,756, 458, 457, -1,458, + 756, 753, -1,753, 756, 755, -1,755, 756, 758, -1,757, 758, 454, -1,757, 755, 758, -1, + 455, 454, 758, -1,758, 456, 455, -1,757, 454, 453, -1,457, 456, 758, -1,756, 457, + 758, -1,755, 757, 1168, -1,1172, 1171, 1173, -1,1174, 759, 760, -1,1173, 759, 1172, -1, + 1172, 759, 1175, -1,759, 1174, 1175, -1,759, 1173, 760, -1,760, 1176, 1177, -1,1177, + 464, 761, -1,760, 1178, 1174, -1,1178, 760, 761, -1,761, 463, 1179, -1,761, 760, + 1177, -1,761, 1179, 1178, -1,464, 463, 761, -1,1176, 760, 1173, -1,1180, 468, 467, -1, + 850, 1181, 467, -1,1182, 467, 1181, -1,849, 852, 466, -1,469, 468, 1180, -1,1182, + 1180, 467, -1,1183, 466, 465, -1,1179, 465, 1184, -1,849, 850, 851, -1,849, 466, + 1183, -1,465, 1179, 1183, -1,849, 851, 852, -1,1181, 850, 849, -1,472, 1185, 1184, -1, + 472, 1184, 1186, -1,1186, 471, 470, -1,1186, 470, 472, -1,1187, 1188, 1189, -1,476, + 475, 762, -1,1188, 476, 762, -1,1189, 762, 477, -1,762, 1189, 1188, -1,477, 763, + 478, -1,763, 477, 762, -1,762, 475, 763, -1,475, 474, 763, -1,764, 474, 473, -1,478, + 764, 479, -1,478, 763, 764, -1,479, 764, 473, -1,764, 763, 474, -1,1190, 1191, 1192, -1, + 488, 1190, 1192, -1,1193, 1190, 488, -1,486, 488, 487, -1,488, 486, 485, -1,488, + 485, 484, -1,484, 1193, 488, -1,484, 1194, 1193, -1,1195, 1194, 1196, -1,482, 481, + 480, -1,483, 480, 1195, -1,480, 483, 482, -1,483, 1196, 1197, -1,1198, 483, 1199, -1, + 1197, 1199, 483, -1,483, 1195, 1196, -1,484, 1196, 1194, -1,1200, 1201, 765, -1,768, + 765, 766, -1,1200, 765, 1202, -1,1202, 765, 768, -1,1203, 771, 853, -1,853, 771, + 1204, -1,1203, 768, 771, -1,768, 1203, 1202, -1,1205, 1204, 771, -1,772, 1205, 771, -1, + 769, 771, 768, -1,766, 765, 1201, -1,766, 1206, 1207, -1,1206, 766, 1201, -1,766, + 1207, 767, -1,1208, 1209, 767, -1,766, 767, 770, -1,1210, 767, 1209, -1,1208, 767, + 1207, -1,770, 767, 1210, -1,769, 772, 771, -1,772, 769, 770, -1,1211, 772, 1212, -1, + 772, 1211, 1205, -1,773, 1212, 772, -1,770, 1210, 773, -1,1213, 1212, 773, -1,1210, + 1213, 773, -1,773, 772, 770, -1,769, 766, 770, -1,766, 769, 768, -1,1214, 1215, 1216, -1, + 1216, 489, 1214, -1,492, 491, 503, -1,493, 494, 1217, -1,495, 494, 493, -1,493, 492, + 502, -1,490, 504, 491, -1,504, 503, 491, -1,500, 1218, 501, -1,502, 492, 503, -1, + 1218, 493, 502, -1,493, 497, 496, -1,498, 497, 1219, -1,497, 493, 1220, -1,1221, + 499, 498, -1,1222, 1223, 1218, -1,1220, 1218, 1223, -1,500, 1222, 1218, -1,493, 1218, + 1220, -1,1220, 1219, 497, -1,1219, 1221, 498, -1,495, 493, 496, -1,774, 1224, 1225, -1, + 1226, 774, 1227, -1,1225, 1227, 774, -1,854, 774, 1226, -1,854, 1224, 774, -1,1228, + 855, 1229, -1,854, 1226, 1228, -1,1228, 1229, 854, -1,855, 1228, 1230, -1,1231, 507, + 1232, -1,505, 507, 1231, -1,1232, 1233, 1231, -1,506, 505, 1231, -1,1234, 1235, 1236, -1, + 1236, 1237, 1234, -1,1238, 1239, 1240, -1,1240, 1241, 1238, -1,1242, 1238, 1241, -1, + 856, 775, 1243, -1,1242, 1241, 857, -1,1241, 1244, 775, -1,1244, 1243, 775, -1,857, + 775, 856, -1,1241, 775, 857, -1,508, 1245, 776, -1,776, 1245, 1246, -1,508, 776, + 1247, -1,776, 1248, 1247, -1,1248, 776, 1246, -1,510, 509, 511, -1,511, 509, 1249, -1, + 1250, 1251, 1249, -1,1250, 1249, 509, -1,1252, 1253, 1254, -1,512, 1254, 1255, -1, + 1254, 512, 1252, -1,512, 1255, 1256, -1,512, 1256, 858, -1,859, 1257, 513, -1,1257, + 859, 1256, -1,1258, 1257, 1259, -1,1257, 1258, 513, -1,1258, 1259, 1260, -1,1256, + 859, 858, -1,777, 1261, 1262, -1,777, 1262, 1263, -1,1264, 777, 1265, -1,777, 1264, + 1261, -1,1265, 778, 1266, -1,778, 1265, 777, -1,777, 1263, 778, -1,1263, 1267, 778, -1, + 779, 1267, 1268, -1,779, 1266, 778, -1,779, 1268, 1269, -1,1269, 1268, 1270, -1,1269, + 1266, 779, -1,779, 778, 1267, -1,1271, 1272, 780, -1,780, 1272, 1273, -1,1271, 780, + 1274, -1,780, 1275, 1274, -1,1275, 780, 1273, -1,1276, 1277, 781, -1,781, 1277, 782, -1, + 1278, 1279, 781, -1,781, 1280, 1278, -1,782, 1280, 781, -1,1279, 1276, 781, -1,782, + 1277, 1281, -1,782, 1282, 783, -1,1282, 782, 1281, -1,783, 1283, 1284, -1,1283, 783, + 1282, -1,782, 783, 1285, -1,1286, 782, 1285, -1,1287, 1285, 783, -1,1284, 1287, 783, -1, + 782, 1286, 1280, -1,1288, 1289, 528, -1,526, 1290, 527, -1,1288, 527, 1290, -1,527, + 1288, 528, -1,1291, 1292, 530, -1,1291, 529, 528, -1,528, 1289, 1291, -1,1291, 530, + 529, -1,1293, 1294, 524, -1,1293, 523, 522, -1,522, 1295, 1293, -1,523, 1293, 524, -1, + 526, 525, 1290, -1,1296, 1290, 525, -1,1296, 525, 524, -1,524, 1294, 1296, -1,531, + 530, 1297, -1,1292, 1297, 530, -1,1297, 532, 531, -1,1298, 532, 1297, -1,1299, 532, + 1298, -1,1299, 1300, 533, -1,533, 1300, 534, -1,1299, 533, 532, -1,534, 1300, 535, -1, + 1301, 535, 1300, -1,1301, 536, 535, -1,1302, 536, 1301, -1,1303, 536, 1302, -1,1303, + 538, 537, -1,1303, 537, 536, -1,1304, 538, 1303, -1,521, 1305, 522, -1,520, 1305, + 521, -1,1306, 1305, 520, -1,1307, 520, 519, -1,518, 1308, 519, -1,1307, 519, 1308, -1, + 1307, 1306, 520, -1,1309, 1308, 517, -1,516, 1309, 517, -1,1310, 1309, 516, -1,1311, + 516, 515, -1,1312, 1311, 514, -1,515, 514, 1311, -1,1311, 1310, 516, -1,1308, 518, + 517, -1,1313, 541, 540, -1,542, 541, 1314, -1,1313, 1314, 541, -1,1315, 1313, 540, -1, + 1304, 1316, 538, -1,540, 539, 1316, -1,1316, 1315, 540, -1,1316, 539, 538, -1,1317, + 545, 544, -1,514, 545, 1317, -1,1318, 1317, 544, -1,1319, 543, 1314, -1,542, 1314, + 543, -1,544, 543, 1319, -1,1319, 1318, 544, -1,514, 1317, 1312, -1,1305, 1295, 522, -1, + 563, 562, 561, -1,784, 560, 785, -1,560, 784, 561, -1,785, 560, 559, -1,784, 785, + 1320, -1,1321, 561, 784, -1,559, 558, 786, -1,786, 558, 787, -1,556, 788, 557, -1, + 558, 557, 787, -1,789, 556, 555, -1,559, 786, 785, -1,785, 786, 1322, -1,561, 1321, + 563, -1,1323, 786, 787, -1,784, 1320, 1321, -1,1320, 785, 1322, -1,1322, 786, 1323, -1, + 787, 1324, 1323, -1,788, 789, 1325, -1,789, 788, 556, -1,790, 789, 555, -1,789, 790, + 1326, -1,788, 1325, 1324, -1,1325, 789, 1326, -1,790, 1327, 1326, -1,788, 1324, 787, -1, + 787, 557, 788, -1,555, 554, 790, -1,553, 791, 790, -1,553, 552, 791, -1,552, 792, + 791, -1,792, 552, 551, -1,792, 551, 793, -1,791, 792, 1328, -1,1329, 790, 791, -1, + 793, 550, 794, -1,794, 550, 549, -1,547, 796, 548, -1,549, 548, 795, -1,1330, 547, + 546, -1,550, 793, 551, -1,792, 793, 1331, -1,790, 1329, 1327, -1,1332, 793, 794, -1, + 793, 1332, 1331, -1,792, 1331, 1328, -1,1329, 791, 1328, -1,794, 1333, 1332, -1,795, + 796, 1334, -1,796, 795, 548, -1,1334, 796, 1330, -1,795, 1334, 1333, -1,796, 547, + 1330, -1,546, 1335, 1330, -1,795, 1333, 794, -1,794, 549, 795, -1,790, 554, 553, -1, + 1336, 1337, 1338, -1,1337, 1339, 1338, -1,1338, 1340, 1341, -1,1342, 1343, 1341, -1, + 1341, 1344, 1342, -1,1341, 568, 1338, -1,1341, 1345, 568, -1,564, 1336, 566, -1,566, + 565, 564, -1,1338, 566, 1336, -1,567, 566, 568, -1,570, 569, 568, -1,568, 566, 1338, -1, + 568, 571, 570, -1,1345, 1341, 1343, -1,1346, 1347, 1345, -1,1345, 574, 568, -1,1348, + 1345, 1349, -1,1348, 1350, 1351, -1,1351, 1352, 1348, -1,1345, 1348, 576, -1,1352, + 576, 1348, -1,574, 573, 572, -1,572, 571, 574, -1,568, 574, 571, -1,578, 577, 576, -1, + 575, 574, 576, -1,1345, 576, 574, -1,1352, 578, 576, -1,1345, 1343, 1346, -1,1353, + 1354, 1355, -1,797, 1356, 798, -1,1356, 797, 1355, -1,798, 1356, 1357, -1,797, 798, + 1358, -1,1359, 1355, 797, -1,1357, 1360, 799, -1,799, 1360, 800, -1,1361, 801, 1362, -1, + 1360, 1362, 800, -1,802, 1361, 1363, -1,1357, 799, 798, -1,798, 799, 1364, -1,1353, + 1355, 1359, -1,1365, 799, 800, -1,1365, 800, 1366, -1,799, 1365, 1364, -1,1358, 1359, + 797, -1,798, 1364, 1358, -1,801, 802, 1367, -1,802, 801, 1361, -1,803, 802, 1363, -1, + 802, 803, 1368, -1,801, 1367, 1366, -1,1367, 802, 1368, -1,803, 1369, 1368, -1,801, + 1366, 800, -1,800, 1362, 801, -1,1363, 1370, 803, -1,1371, 804, 803, -1,1371, 1372, + 804, -1,1372, 805, 804, -1,805, 1372, 1373, -1,805, 1373, 806, -1,804, 805, 1374, -1, + 1375, 803, 804, -1,806, 1376, 807, -1,807, 1376, 1377, -1,1378, 809, 1379, -1,1377, + 1379, 808, -1,1380, 1378, 1352, -1,1376, 806, 1373, -1,805, 806, 1381, -1,805, 1381, + 1374, -1,1374, 1375, 804, -1,806, 1382, 1381, -1,1369, 803, 1375, -1,807, 1383, 1382, -1, + 1382, 806, 807, -1,1384, 808, 809, -1,809, 808, 1379, -1,809, 1378, 1380, -1,1384, + 809, 1380, -1,808, 1384, 1383, -1,1352, 1385, 1380, -1,808, 1383, 807, -1,807, 1377, + 808, -1,803, 1370, 1371, -1,1386, 1387, 1388, -1,1389, 1388, 1387, -1,1390, 1386, + 580, -1,1388, 580, 1386, -1,1391, 1390, 580, -1,1388, 1389, 1392, -1,1388, 1392, + 581, -1,580, 579, 1393, -1,580, 1393, 1391, -1,1394, 1395, 1396, -1,1396, 1397, 1394, -1, + 1398, 1399, 1400, -1,1401, 1400, 1399, -1,1402, 1403, 1404, -1,1402, 1404, 810, -1, + 1405, 810, 1406, -1,810, 1405, 1402, -1,811, 1406, 810, -1,810, 1404, 811, -1,812, + 811, 1407, -1,1407, 811, 1404, -1,812, 1407, 1408, -1,1409, 812, 1410, -1,1409, 1406, + 812, -1,1410, 812, 1408, -1,812, 1406, 811, -1,1411, 1412, 1413, -1,1411, 1413, 1414, -1, + 1413, 1412, 1415, -1,1416, 1413, 1415, -1,1415, 1417, 1416, -1,1418, 860, 813, -1, + 1419, 861, 1420, -1,817, 1420, 861, -1,860, 1421, 1422, -1,1417, 1415, 1421, -1,1415, + 1422, 1421, -1,1422, 1423, 813, -1,815, 1418, 813, -1,1423, 814, 813, -1,860, 1422, + 813, -1,814, 1424, 1425, -1,1424, 814, 1423, -1,814, 1425, 816, -1,813, 814, 816, -1, + 1425, 1426, 816, -1,815, 817, 862, -1,815, 1427, 1418, -1,1420, 817, 1428, -1,815, + 816, 817, -1,861, 862, 817, -1,818, 1428, 817, -1,816, 1426, 818, -1,1429, 1428, + 818, -1,1426, 1429, 818, -1,818, 817, 816, -1,815, 813, 816, -1,815, 862, 1427, -1, + 1430, 1431, 819, -1,819, 1431, 820, -1,1432, 819, 1433, -1,819, 1432, 1430, -1,820, + 1433, 819, -1,820, 1431, 1434, -1,821, 820, 1435, -1,1435, 820, 1434, -1,821, 1435, + 582, -1,1436, 820, 1437, -1,821, 1438, 1437, -1,1438, 821, 582, -1,820, 821, 1437, -1, + 820, 1436, 1433, -1,1439, 1440, 1438, -1,1438, 1441, 1439, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,1, 2, 3, -1,2, 1, 4, -1,5, 6, 2, -1, + 3, 2, 7, -1,8, 9, 7, -1,6, 7, 2, -1,8, 7, 6, -1,10, 11, 12, -1,8, 11, 10, -1,8, 10, + 9, -1,13, 8, 6, -1,2, 4, 5, -1,14, 15, 5, -1,5, 15, 16, -1,5, 13, 6, -1,16, 17, 18, -1, + 17, 16, 15, -1,5, 16, 19, -1,19, 16, 18, -1,11, 20, 21, -1,19, 11, 13, -1,11, 21, + 12, -1,11, 8, 13, -1,19, 22, 20, -1,22, 19, 18, -1,20, 23, 21, -1,23, 20, 22, -1, + 19, 20, 11, -1,13, 5, 19, -1,4, 14, 5, -1,24, 25, 26, -1,27, 28, 29, -1,30, 31, 32, -1, + 30, 28, 33, -1,28, 30, 29, -1,29, 30, 32, -1,29, 34, 27, -1,35, 36, 37, -1,35, 26, + 25, -1,25, 24, 38, -1,39, 29, 38, -1,40, 41, 38, -1,41, 39, 38, -1,40, 38, 24, -1, + 34, 29, 39, -1,26, 35, 37, -1,42, 43, 44, -1,44, 43, 45, -1,46, 47, 44, -1,44, 47, + 42, -1,45, 43, 48, -1,45, 48, 49, -1,49, 48, 50, -1,46, 45, 51, -1,49, 52, 51, -1, + 52, 49, 50, -1,45, 49, 51, -1,45, 46, 44, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,53, 54, 55, -1,56, 55, 57, -1,58, 56, 57, -1, + 59, 57, 60, -1,61, 60, 62, -1,63, 57, 59, -1,59, 60, 64, -1,63, 58, 57, -1,53, 55, + 65, -1,65, 55, 56, -1,61, 62, 66, -1,67, 68, 66, -1,69, 70, 67, -1,62, 69, 67, -1, + 66, 62, 67, -1,64, 60, 61, -1,71, 72, 73, -1,74, 72, 71, -1,75, 76, 77, -1,78, 74, + 71, -1,78, 79, 74, -1,72, 75, 73, -1,77, 73, 75, -1,73, 77, 80, -1,77, 76, 81, -1, + 82, 83, 84, -1,85, 82, 84, -1,83, 82, 80, -1,83, 80, 77, -1,73, 80, 86, -1,80, 87, + 86, -1,87, 80, 82, -1,87, 82, 88, -1,88, 82, 85, -1,85, 89, 88, -1,73, 86, 71, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,91, 92, 93, -1,94, 92, 95, -1, + 96, 92, 94, -1,97, 98, 99, -1,99, 93, 96, -1,93, 99, 91, -1,96, 93, 92, -1,99, 96, + 97, -1,95, 100, 94, -1,101, 102, 103, -1,101, 103, 104, -1,94, 105, 96, -1,105, 94, + 106, -1,106, 101, 107, -1,101, 106, 94, -1,107, 101, 104, -1,94, 102, 101, -1,102, + 94, 100, -1,108, 108, 108, -1,108, 108, 108, -1,108, 108, 108, -1,108, 108, 108, -1, + 108, 108, 108, -1,109, 110, 111, -1,110, 109, 112, -1,112, 113, 110, -1,110, 113, + 114, -1,111, 110, 115, -1,114, 116, 115, -1,116, 114, 117, -1,110, 114, 115, -1,113, + 118, 114, -1,118, 119, 120, -1,121, 122, 123, -1,119, 121, 120, -1,120, 121, 117, -1, + 117, 114, 120, -1,117, 121, 123, -1,120, 114, 118, -1,124, 124, 124, -1,124, 124, + 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, + 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,125, 125, 125, -1, + 126, 127, 128, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, + 125, -1,129, 130, 125, -1,125, 125, 125, -1,125, 125, 129, -1,129, 131, 130, -1,125, + 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1, + 125, 125, 125, -1,125, 125, 125, -1,132, 125, 127, -1,125, 125, 125, -1,133, 134, + 125, -1,125, 125, 134, -1,135, 134, 133, -1,136, 125, 125, -1,125, 125, 125, -1,125, + 131, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,132, 127, 136, -1, + 130, 131, 137, -1,125, 125, 125, -1,125, 125, 125, -1,131, 125, 137, -1,137, 138, + 130, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 135, -1,125, 125, 125, -1,125, + 125, 125, -1,139, 133, 140, -1,135, 139, 125, -1,125, 125, 125, -1,125, 125, 125, -1, + 127, 125, 128, -1,135, 133, 139, -1,125, 132, 136, -1,125, 125, 125, -1,125, 126, + 128, -1,126, 125, 125, -1,125, 125, 125, -1,0, 0, 0, -1,0, 0, 0, -1,141, 142, 143, -1, + 144, 142, 141, -1,145, 141, 146, -1,143, 146, 141, -1,141, 145, 144, -1,147, 142, + 144, -1,148, 144, 149, -1,147, 144, 148, -1,150, 148, 149, -1,151, 144, 147, -1,151, + 152, 149, -1,150, 149, 152, -1,151, 149, 144, -1,145, 147, 144, -1,124, 124, 153, -1, + 153, 150, 124, -1,154, 155, 153, -1,156, 155, 154, -1,157, 154, 158, -1,153, 158, + 154, -1,154, 157, 156, -1,159, 155, 156, -1,160, 156, 161, -1,159, 156, 160, -1,162, + 160, 161, -1,163, 156, 159, -1,163, 164, 161, -1,162, 161, 164, -1,163, 161, 156, -1, + 157, 159, 156, -1,108, 108, 108, -1,108, 162, 108, -1,165, 166, 167, -1,168, 166, + 165, -1,169, 165, 170, -1,167, 170, 165, -1,165, 169, 168, -1,171, 166, 168, -1,172, + 168, 173, -1,171, 168, 172, -1,174, 172, 173, -1,175, 168, 171, -1,175, 176, 173, -1, + 174, 173, 176, -1,175, 173, 168, -1,169, 171, 168, -1,90, 90, 90, -1,90, 174, 90, -1, + 177, 178, 179, -1,180, 178, 177, -1,181, 177, 182, -1,179, 182, 177, -1,177, 181, + 180, -1,183, 178, 180, -1,184, 180, 185, -1,183, 180, 184, -1,186, 184, 185, -1,187, + 180, 183, -1,187, 188, 185, -1,186, 185, 188, -1,187, 185, 180, -1,181, 183, 180, -1, + 125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, + 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, + 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1, + 125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,189, 190, + 191, -1,191, 190, 192, -1,193, 191, 194, -1,191, 193, 189, -1,192, 194, 191, -1,192, + 190, 195, -1,196, 192, 197, -1,197, 192, 195, -1,196, 197, 198, -1,195, 192, 199, -1, + 196, 200, 199, -1,200, 196, 198, -1,192, 196, 199, -1,192, 195, 194, -1,125, 125, + 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, + 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1, + 125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, + 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,201, 202, 203, -1,202, + 201, 204, -1,204, 205, 206, -1,206, 205, 207, -1,204, 206, 202, -1,202, 206, 208, -1, + 202, 209, 203, -1,209, 202, 208, -1,206, 210, 208, -1,211, 210, 206, -1,211, 207, + 212, -1,211, 212, 213, -1,213, 212, 214, -1,215, 210, 211, -1,213, 215, 211, -1,211, + 206, 207, -1,216, 217, 218, -1,125, 216, 219, -1,125, 125, 219, -1,217, 220, 221, -1, + 221, 222, 223, -1,221, 223, 218, -1,223, 219, 218, -1,219, 223, 224, -1,218, 219, + 216, -1,221, 218, 217, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 225, 226, 227, -1,228, 226, 229, -1,228, 227, 226, -1,226, 230, 229, -1,230, 226, + 231, -1,230, 231, 232, -1,229, 230, 233, -1,225, 231, 226, -1,232, 234, 235, -1,234, + 236, 235, -1,237, 236, 238, -1,233, 230, 239, -1,236, 237, 235, -1,235, 237, 239, -1, + 235, 239, 230, -1,235, 230, 232, -1,125, 125, 240, -1,241, 242, 243, -1,244, 243, + 245, -1,125, 240, 245, -1,246, 244, 240, -1,240, 244, 245, -1,246, 240, 247, -1,241, + 246, 248, -1,246, 241, 244, -1,244, 241, 243, -1,249, 250, 251, -1,251, 250, 252, -1, + 125, 253, 254, -1,253, 255, 251, -1,253, 125, 125, -1,254, 253, 251, -1,255, 249, + 251, -1,256, 257, 258, -1,256, 259, 260, -1,261, 260, 262, -1,262, 260, 259, -1,259, + 263, 262, -1,264, 262, 263, -1,265, 266, 267, -1,252, 265, 267, -1,268, 262, 264, -1, + 269, 267, 266, -1,270, 260, 269, -1,252, 267, 271, -1,250, 265, 252, -1,269, 261, + 267, -1,261, 268, 272, -1,269, 260, 261, -1,271, 272, 273, -1,271, 267, 272, -1,273, + 272, 268, -1,256, 260, 257, -1,272, 267, 261, -1,262, 268, 261, -1,269, 266, 270, -1, + 270, 257, 260, -1,274, 275, 276, -1,273, 276, 277, -1,278, 279, 280, -1,280, 281, + 278, -1,278, 281, 282, -1,281, 280, 273, -1,273, 277, 281, -1,283, 284, 285, -1,286, + 285, 284, -1,273, 287, 274, -1,287, 273, 286, -1,285, 286, 273, -1,276, 273, 274, -1, + 283, 285, 288, -1,283, 288, 289, -1,290, 291, 292, -1,293, 290, 292, -1,116, 116, + 292, -1,293, 292, 116, -1,294, 295, 296, -1,296, 297, 294, -1,298, 297, 296, -1,298, + 299, 300, -1,300, 301, 298, -1,301, 297, 298, -1,299, 302, 303, -1,303, 304, 300, -1, + 299, 305, 306, -1,302, 299, 306, -1,306, 307, 308, -1,307, 305, 309, -1,306, 305, + 307, -1,303, 300, 299, -1,310, 311, 312, -1,311, 310, 313, -1,313, 314, 311, -1,315, + 316, 314, -1,314, 316, 311, -1,315, 314, 315, -1,315, 315, 309, -1,312, 316, 317, -1, + 315, 318, 317, -1,318, 315, 309, -1,316, 315, 317, -1,316, 312, 311, -1,319, 320, + 321, -1,321, 320, 322, -1,319, 321, 323, -1,324, 322, 320, -1,325, 324, 326, -1,327, + 325, 328, -1,328, 326, 329, -1,326, 324, 320, -1,328, 330, 327, -1,331, 330, 328, -1, + 329, 326, 319, -1,326, 328, 325, -1,320, 319, 326, -1,323, 332, 319, -1,319, 333, + 329, -1,333, 319, 332, -1,333, 332, 334, -1,335, 329, 333, -1,334, 336, 333, -1,335, + 333, 336, -1,331, 337, 338, -1,337, 331, 339, -1,331, 338, 330, -1,335, 340, 339, -1, + 340, 335, 336, -1,339, 341, 337, -1,341, 339, 340, -1,335, 339, 331, -1,331, 329, + 335, -1,329, 331, 328, -1,342, 343, 344, -1,345, 342, 346, -1,347, 346, 344, -1,344, + 348, 347, -1,349, 348, 344, -1,346, 342, 344, -1,344, 343, 349, -1,350, 351, 352, -1, + 350, 352, 353, -1,349, 354, 348, -1,354, 349, 350, -1,350, 355, 354, -1,355, 350, + 353, -1,349, 351, 350, -1,351, 349, 343, -1,356, 357, 358, -1,359, 360, 361, -1,358, + 361, 360, -1,362, 361, 358, -1,360, 356, 358, -1,358, 357, 362, -1,363, 362, 364, -1, + 364, 362, 357, -1,363, 364, 365, -1,366, 365, 367, -1,368, 362, 369, -1,363, 366, + 370, -1,366, 363, 365, -1,363, 370, 369, -1,362, 363, 369, -1,362, 368, 361, -1,371, + 372, 373, -1,373, 374, 375, -1,374, 373, 372, -1,372, 376, 374, -1,371, 373, 377, -1, + 377, 373, 378, -1,378, 375, 379, -1,375, 378, 373, -1,380, 381, 382, -1,383, 379, + 375, -1,379, 384, 382, -1,383, 375, 374, -1,374, 385, 383, -1,385, 374, 376, -1,385, + 376, 386, -1,387, 383, 385, -1,386, 388, 389, -1,390, 385, 389, -1,389, 385, 386, -1, + 387, 385, 390, -1,391, 384, 392, -1,387, 384, 383, -1,391, 393, 384, -1,384, 387, + 392, -1,384, 393, 382, -1,392, 394, 391, -1,392, 395, 394, -1,390, 395, 387, -1,395, + 392, 387, -1,381, 379, 382, -1,383, 384, 379, -1,378, 379, 381, -1,396, 397, 398, -1, + 397, 396, 399, -1,398, 400, 396, -1,400, 398, 401, -1,397, 402, 398, -1,402, 403, + 398, -1,403, 404, 401, -1,405, 406, 407, -1,404, 405, 401, -1,408, 400, 401, -1,408, + 401, 409, -1,409, 407, 410, -1,407, 409, 401, -1,410, 407, 406, -1,401, 405, 407, -1, + 401, 398, 403, -1,411, 412, 413, -1,412, 411, 414, -1,415, 412, 416, -1,413, 412, + 417, -1,418, 419, 420, -1,421, 419, 422, -1,421, 420, 419, -1,423, 419, 415, -1,418, + 415, 419, -1,417, 412, 415, -1,416, 412, 414, -1,415, 418, 417, -1,416, 423, 415, -1, + 416, 424, 425, -1,423, 416, 426, -1,423, 422, 419, -1,425, 427, 426, -1,423, 426, + 428, -1,429, 426, 427, -1,425, 426, 416, -1,428, 426, 429, -1,422, 430, 431, -1,430, + 422, 432, -1,422, 431, 421, -1,428, 433, 432, -1,433, 428, 429, -1,432, 434, 430, -1, + 434, 432, 433, -1,428, 432, 422, -1,422, 423, 428, -1,414, 424, 416, -1,435, 436, + 437, -1,438, 439, 440, -1,435, 437, 441, -1,440, 437, 438, -1,439, 442, 440, -1,438, + 437, 436, -1,443, 437, 440, -1,444, 445, 446, -1,441, 443, 445, -1,443, 441, 437, -1, + 447, 446, 445, -1,448, 445, 443, -1,445, 449, 447, -1,445, 444, 441, -1,448, 443, + 440, -1,450, 448, 440, -1,450, 442, 451, -1,448, 452, 453, -1,452, 448, 450, -1,450, + 454, 452, -1,450, 440, 442, -1,451, 454, 450, -1,452, 454, 455, -1,449, 453, 456, -1, + 449, 448, 453, -1,456, 457, 449, -1,453, 458, 456, -1,449, 457, 447, -1,459, 453, + 452, -1,459, 458, 453, -1,455, 459, 452, -1,448, 449, 445, -1,460, 461, 462, -1,462, + 461, 463, -1,460, 462, 464, -1,462, 465, 464, -1,465, 462, 463, -1,465, 463, 466, -1, + 461, 467, 463, -1,468, 469, 470, -1,468, 470, 463, -1,466, 463, 471, -1,470, 472, + 471, -1,472, 470, 469, -1,470, 471, 463, -1,463, 467, 468, -1,473, 474, 475, -1,475, + 474, 476, -1,477, 475, 478, -1,475, 477, 473, -1,476, 478, 475, -1,476, 474, 479, -1, + 480, 476, 481, -1,481, 476, 479, -1,480, 481, 482, -1,483, 476, 484, -1,480, 485, + 484, -1,485, 480, 482, -1,476, 480, 484, -1,476, 483, 478, -1,486, 487, 488, -1,489, + 490, 491, -1,486, 488, 492, -1,491, 488, 489, -1,490, 493, 491, -1,489, 488, 487, -1, + 494, 488, 491, -1,495, 496, 497, -1,492, 494, 496, -1,494, 492, 488, -1,498, 497, + 496, -1,499, 496, 494, -1,496, 500, 498, -1,496, 495, 492, -1,499, 494, 491, -1,501, + 499, 491, -1,501, 493, 502, -1,499, 503, 504, -1,503, 499, 501, -1,501, 505, 503, -1, + 501, 491, 493, -1,502, 505, 501, -1,503, 505, 506, -1,500, 504, 507, -1,500, 499, + 504, -1,507, 508, 500, -1,504, 509, 507, -1,500, 508, 498, -1,510, 504, 503, -1,510, + 509, 504, -1,506, 510, 503, -1,499, 500, 496, -1,511, 512, 513, -1,511, 513, 514, -1, + 515, 511, 516, -1,511, 515, 512, -1,517, 518, 516, -1,517, 516, 511, -1,511, 514, + 517, -1,517, 519, 520, -1,520, 521, 522, -1,523, 522, 521, -1,517, 524, 518, -1,524, + 517, 522, -1,522, 525, 524, -1,525, 522, 523, -1,517, 520, 522, -1,519, 517, 514, -1, + 526, 527, 528, -1,528, 527, 529, -1,530, 527, 526, -1,531, 529, 527, -1,532, 531, + 527, -1,530, 532, 527, -1,533, 529, 531, -1,526, 528, 534, -1,526, 535, 530, -1,535, + 526, 536, -1,537, 538, 536, -1,535, 536, 539, -1,537, 536, 526, -1,526, 534, 537, -1, + 540, 536, 538, -1,540, 539, 536, -1,540, 538, 541, -1,542, 543, 544, -1,545, 546, + 544, -1,545, 544, 547, -1,546, 542, 544, -1,543, 548, 544, -1,548, 547, 544, -1,548, + 549, 550, -1,550, 551, 552, -1,552, 551, 553, -1,550, 552, 548, -1,548, 552, 554, -1, + 547, 548, 555, -1,552, 556, 554, -1,554, 555, 548, -1,556, 552, 553, -1,548, 543, + 549, -1,557, 558, 559, -1,558, 557, 560, -1,561, 557, 559, -1,558, 562, 563, -1,563, + 562, 564, -1,558, 563, 559, -1,565, 559, 563, -1,566, 567, 561, -1,566, 565, 568, -1, + 569, 567, 566, -1,566, 570, 569, -1,566, 561, 565, -1,561, 559, 565, -1,568, 565, + 563, -1,563, 571, 568, -1,571, 563, 564, -1,571, 564, 572, -1,568, 571, 573, -1,574, + 573, 571, -1,568, 573, 575, -1,576, 573, 574, -1,574, 571, 572, -1,575, 573, 576, -1, + 570, 575, 577, -1,575, 570, 568, -1,577, 575, 578, -1,570, 577, 569, -1,579, 578, + 575, -1,575, 576, 579, -1,568, 570, 566, -1,580, 581, 582, -1,581, 580, 583, -1,584, + 582, 581, -1,581, 585, 584, -1,586, 579, 581, -1,585, 581, 579, -1,581, 583, 586, -1, + 587, 588, 589, -1,590, 588, 587, -1,589, 591, 587, -1,592, 593, 594, -1,592, 594, + 595, -1,593, 591, 596, -1,591, 593, 592, -1,591, 592, 597, -1,596, 591, 589, -1,592, + 598, 599, -1,587, 591, 600, -1,601, 602, 603, -1,604, 605, 606, -1,607, 603, 602, -1, + 607, 604, 606, -1,590, 608, 609, -1,610, 609, 608, -1,608, 590, 611, -1,608, 606, + 612, -1,602, 604, 607, -1,611, 590, 587, -1,600, 591, 597, -1,587, 600, 611, -1,592, + 599, 597, -1,608, 612, 610, -1,612, 606, 605, -1,592, 595, 598, -1,613, 614, 615, -1, + 613, 615, 616, -1,598, 613, 617, -1,613, 598, 614, -1,618, 613, 616, -1,613, 618, + 619, -1,616, 620, 618, -1,614, 598, 595, -1,621, 622, 623, -1,624, 623, 625, -1,626, + 627, 622, -1,618, 620, 626, -1,620, 627, 626, -1,628, 625, 629, -1,598, 617, 630, -1, + 626, 631, 618, -1,613, 619, 617, -1,619, 618, 631, -1,632, 631, 626, -1,626, 633, + 632, -1,633, 621, 634, -1,621, 633, 622, -1,624, 621, 623, -1,621, 624, 635, -1,635, + 634, 621, -1,628, 624, 625, -1,635, 624, 628, -1,629, 636, 628, -1,633, 634, 632, -1, + 626, 622, 633, -1,598, 630, 599, -1,637, 638, 639, -1,640, 637, 639, -1,641, 637, + 640, -1,639, 642, 643, -1,639, 644, 640, -1,641, 640, 645, -1,644, 639, 643, -1,645, + 646, 641, -1,647, 648, 645, -1,647, 649, 648, -1,649, 650, 651, -1,650, 647, 652, -1, + 653, 650, 654, -1,652, 654, 650, -1,650, 649, 647, -1,646, 645, 648, -1,655, 656, + 657, -1,658, 655, 659, -1,658, 660, 661, -1,660, 658, 659, -1,662, 663, 660, -1,660, + 663, 664, -1,660, 659, 662, -1,656, 655, 658, -1,665, 666, 667, -1,666, 668, 669, -1, + 670, 662, 671, -1,663, 662, 670, -1,669, 670, 671, -1,665, 667, 672, -1,657, 656, + 673, -1,674, 663, 670, -1,658, 661, 656, -1,675, 676, 677, -1,661, 660, 664, -1,664, + 663, 674, -1,670, 678, 674, -1,677, 679, 680, -1,668, 665, 681, -1,665, 668, 666, -1, + 682, 665, 672, -1,665, 682, 683, -1,681, 678, 668, -1,125, 683, 682, -1,681, 665, + 683, -1,682, 684, 125, -1,668, 678, 670, -1,670, 669, 668, -1,675, 685, 686, -1,672, + 687, 682, -1,688, 687, 689, -1,688, 689, 690, -1,690, 691, 688, -1,691, 690, 692, -1, + 691, 692, 693, -1,688, 691, 694, -1,688, 684, 682, -1,693, 695, 696, -1,685, 696, + 695, -1,693, 696, 691, -1,691, 696, 697, -1,688, 694, 684, -1,685, 698, 696, -1,691, + 697, 694, -1,697, 696, 698, -1,675, 698, 685, -1,676, 699, 677, -1,679, 700, 680, -1, + 699, 679, 677, -1,701, 680, 700, -1,702, 701, 700, -1,676, 675, 703, -1,703, 675, + 686, -1,688, 682, 687, -1,704, 705, 706, -1,705, 704, 707, -1,708, 706, 705, -1,705, + 709, 708, -1,710, 705, 711, -1,709, 705, 710, -1,711, 705, 707, -1,712, 713, 714, -1, + 715, 716, 714, -1,715, 714, 713, -1,713, 717, 715, -1,718, 715, 717, -1,719, 720, + 721, -1,722, 715, 723, -1,715, 722, 716, -1,723, 724, 720, -1,718, 723, 715, -1,725, + 721, 720, -1,720, 719, 723, -1,726, 725, 720, -1,719, 722, 723, -1,727, 728, 729, -1, + 717, 730, 718, -1,731, 732, 733, -1,727, 718, 733, -1,733, 718, 731, -1,732, 734, + 733, -1,731, 718, 730, -1,733, 734, 735, -1,734, 732, 736, -1,727, 733, 735, -1,724, + 726, 720, -1,737, 726, 729, -1,737, 738, 726, -1,726, 724, 727, -1,726, 738, 725, -1, + 727, 729, 726, -1,735, 728, 727, -1,739, 729, 728, -1,729, 739, 737, -1,724, 718, + 727, -1,718, 724, 723, -1,740, 741, 742, -1,742, 741, 743, -1,740, 742, 744, -1,742, + 745, 744, -1,742, 746, 747, -1,747, 745, 742, -1,746, 743, 748, -1,742, 743, 746, -1, + 741, 749, 743, -1,749, 750, 751, -1,750, 749, 752, -1,749, 751, 748, -1,749, 741, + 752, -1,751, 753, 748, -1,753, 751, 754, -1,753, 754, 755, -1,756, 753, 755, -1,756, + 757, 753, -1,749, 748, 743, -1,758, 759, 760, -1,761, 758, 760, -1,762, 760, 763, -1, + 760, 762, 764, -1,765, 763, 760, -1,760, 764, 761, -1,760, 759, 765, -1,766, 767, + 768, -1,767, 766, 769, -1,766, 768, 770, -1,769, 771, 772, -1,769, 772, 767, -1,763, + 770, 773, -1,770, 765, 766, -1,774, 770, 768, -1,773, 770, 774, -1,770, 763, 765, -1, + 766, 765, 759, -1,775, 776, 777, -1,778, 775, 779, -1,780, 781, 782, -1,780, 778, + 779, -1,783, 782, 781, -1,782, 778, 780, -1,784, 780, 779, -1,779, 775, 777, -1,785, + 786, 787, -1,786, 788, 787, -1,787, 789, 785, -1,788, 786, 783, -1,779, 777, 784, -1, + 790, 791, 784, -1,784, 781, 780, -1,792, 781, 784, -1,784, 791, 792, -1,790, 784, + 777, -1,792, 793, 794, -1,793, 792, 791, -1,795, 794, 796, -1,794, 795, 792, -1,792, + 795, 781, -1,781, 795, 797, -1,788, 797, 798, -1,788, 781, 797, -1,799, 798, 797, -1, + 797, 800, 799, -1,788, 798, 787, -1,796, 800, 797, -1,795, 796, 797, -1,781, 788, + 783, -1,801, 789, 802, -1,803, 804, 805, -1,802, 804, 801, -1,801, 804, 806, -1,804, + 803, 806, -1,804, 802, 805, -1,805, 807, 808, -1,808, 809, 810, -1,805, 811, 803, -1, + 811, 805, 810, -1,810, 812, 813, -1,810, 805, 808, -1,810, 813, 811, -1,809, 812, + 810, -1,807, 805, 802, -1,814, 815, 816, -1,817, 818, 816, -1,819, 816, 818, -1,820, + 821, 822, -1,823, 815, 814, -1,819, 814, 816, -1,824, 822, 825, -1,813, 825, 826, -1, + 820, 817, 827, -1,820, 822, 824, -1,825, 813, 824, -1,820, 827, 821, -1,818, 817, + 820, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,125, 125, 125, -1,828, + 829, 830, -1,831, 832, 833, -1,829, 831, 833, -1,830, 833, 834, -1,833, 830, 829, -1, + 834, 835, 836, -1,835, 834, 833, -1,833, 832, 835, -1,832, 837, 835, -1,838, 837, + 839, -1,840, 838, 840, -1,836, 835, 838, -1,841, 838, 839, -1,838, 835, 837, -1,842, + 843, 844, -1,845, 842, 844, -1,846, 842, 845, -1,847, 845, 848, -1,845, 847, 849, -1, + 845, 849, 850, -1,850, 846, 845, -1,850, 851, 846, -1,852, 851, 853, -1,854, 124, + 855, -1,856, 855, 852, -1,855, 856, 854, -1,856, 853, 857, -1,858, 856, 859, -1,857, + 859, 856, -1,856, 852, 853, -1,850, 853, 851, -1,860, 861, 862, -1,863, 862, 864, -1, + 860, 862, 865, -1,865, 862, 863, -1,866, 867, 868, -1,868, 867, 869, -1,866, 863, + 867, -1,863, 866, 865, -1,870, 869, 867, -1,871, 870, 867, -1,872, 867, 863, -1,864, + 862, 861, -1,864, 873, 874, -1,873, 864, 861, -1,864, 874, 875, -1,876, 877, 875, -1, + 864, 875, 878, -1,879, 875, 877, -1,876, 875, 874, -1,878, 875, 879, -1,872, 871, + 867, -1,871, 872, 878, -1,880, 871, 881, -1,871, 880, 870, -1,882, 881, 871, -1,878, + 879, 882, -1,883, 881, 882, -1,879, 883, 882, -1,882, 871, 878, -1,872, 864, 878, -1, + 864, 872, 863, -1,108, 108, 108, -1,108, 108, 108, -1,124, 124, 124, -1,124, 124, + 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, + 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1, + 124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, + 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,124, 124, 124, -1,884, + 885, 886, -1,887, 884, 886, -1,886, 886, 884, -1,888, 884, 887, -1,888, 885, 884, -1, + 889, 890, 891, -1,888, 887, 889, -1,889, 891, 888, -1,890, 889, 892, -1,108, 108, + 108, -1,108, 108, 108, -1,108, 108, 108, -1,108, 108, 108, -1,124, 124, 124, -1,124, + 124, 124, -1,893, 894, 895, -1,895, 896, 893, -1,897, 893, 896, -1,898, 899, 900, -1, + 897, 896, 901, -1,896, 902, 899, -1,902, 900, 899, -1,901, 899, 898, -1,896, 899, + 901, -1,903, 903, 904, -1,0, 0, 0, -1,903, 904, 905, -1,904, 906, 905, -1,0, 0, 0, -1, + 907, 908, 909, -1,909, 908, 908, -1,910, 907, 908, -1,910, 908, 908, -1,911, 912, + 913, -1,914, 913, 915, -1,913, 914, 911, -1,914, 915, 916, -1,914, 916, 917, -1,918, + 919, 920, -1,919, 918, 916, -1,921, 919, 922, -1,919, 921, 920, -1,921, 922, 923, -1, + 916, 918, 917, -1,924, 925, 926, -1,924, 926, 927, -1,928, 924, 929, -1,924, 928, + 925, -1,929, 930, 931, -1,930, 929, 924, -1,924, 927, 930, -1,927, 932, 930, -1,933, + 932, 934, -1,933, 931, 930, -1,933, 934, 935, -1,935, 934, 936, -1,935, 937, 933, -1, + 933, 930, 932, -1,0, 0, 0, -1,0, 0, 0, -1,938, 939, 940, -1,939, 941, 940, -1,941, + 939, 941, -1,942, 943, 944, -1,944, 943, 945, -1,946, 947, 944, -1,944, 948, 946, -1, + 945, 948, 944, -1,947, 942, 944, -1,945, 943, 949, -1,945, 950, 951, -1,950, 945, + 949, -1,951, 952, 953, -1,952, 951, 950, -1,945, 951, 954, -1,955, 945, 954, -1,956, + 954, 951, -1,953, 956, 951, -1,945, 955, 948, -1,90, 90, 90, -1,90, 90, 90, -1,90, + 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,957, 957, 958, -1,959, 960, 961, -1,962, 959, 958, -1,961, 962, 963, -1, + 959, 961, 964, -1,965, 958, 959, -1,963, 966, 967, -1,967, 968, 969, -1,970, 971, + 972, -1,966, 972, 973, -1,974, 970, 975, -1,976, 967, 961, -1,961, 967, 977, -1,958, + 965, 957, -1,978, 967, 973, -1,959, 964, 965, -1,964, 961, 977, -1,977, 967, 979, -1, + 969, 980, 979, -1,971, 974, 981, -1,974, 982, 983, -1,984, 974, 975, -1,974, 984, + 985, -1,982, 986, 980, -1,986, 974, 985, -1,984, 987, 985, -1,971, 988, 973, -1,969, + 989, 982, -1,975, 987, 984, -1,990, 991, 984, -1,990, 992, 991, -1,993, 994, 991, -1, + 995, 992, 996, -1,994, 997, 998, -1,991, 995, 999, -1,1000, 984, 991, -1,998, 1001, + 1002, -1,1002, 1003, 1004, -1,1005, 1006, 1007, -1,1004, 1007, 1008, -1,1009, 1005, + 1010, -1,1003, 1011, 996, -1,995, 1011, 1012, -1,984, 1000, 987, -1,1013, 1011, 1002, -1, + 998, 1014, 1015, -1,994, 1015, 1016, -1,1000, 991, 1016, -1,1002, 1017, 1014, -1, + 1008, 1006, 1018, -1,1006, 1008, 1019, -1,1018, 1006, 1009, -1,1008, 1018, 1017, -1, + 1006, 1005, 1009, -1,1010, 1010, 1009, -1,1008, 1017, 1002, -1,1002, 1004, 1008, -1, + 984, 987, 990, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, + 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, + 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,1020, 1020, 1021, -1,1022, 1023, + 1024, -1,1025, 1022, 1021, -1,1024, 1025, 1026, -1,1022, 1024, 1027, -1,1028, 1021, + 1022, -1,1026, 1029, 1030, -1,1030, 1031, 1032, -1,1033, 1034, 1035, -1,1029, 1035, + 1036, -1,1037, 1033, 1038, -1,1039, 1030, 1024, -1,1024, 1030, 1040, -1,1020, 1021, + 1028, -1,1041, 1030, 1036, -1,1042, 1032, 1043, -1,1030, 1042, 1040, -1,1027, 1028, + 1022, -1,1024, 1040, 1027, -1,1034, 1037, 1044, -1,1045, 1046, 1047, -1,1048, 1045, + 1038, -1,1037, 1048, 1049, -1,1046, 1050, 1043, -1,1050, 1045, 1049, -1,1048, 1051, + 1049, -1,1034, 1052, 1036, -1,1032, 1053, 1046, -1,1038, 1051, 1048, -1,1054, 1055, + 1048, -1,1054, 1056, 1055, -1,1057, 1058, 1055, -1,1059, 1056, 1060, -1,1058, 1061, + 1062, -1,1055, 1059, 1063, -1,1064, 1048, 1055, -1,1062, 1065, 1066, -1,1066, 1067, + 1068, -1,1069, 1070, 1071, -1,1068, 1071, 1072, -1,1073, 1069, 1074, -1,1067, 1075, + 1060, -1,1059, 1075, 1076, -1,1058, 1077, 1078, -1,1078, 1064, 1055, -1,1062, 1079, + 1077, -1,1051, 1048, 1064, -1,1066, 1080, 1079, -1,1081, 1075, 1066, -1,1082, 1072, + 1070, -1,1070, 1072, 1083, -1,1070, 1069, 1073, -1,1082, 1070, 1073, -1,1072, 1082, + 1080, -1,1074, 1074, 1073, -1,1072, 1080, 1066, -1,1066, 1084, 1072, -1,1048, 1051, + 1054, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1, + 90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,90, 90, 90, -1,1085, 1085, 1085, -1, + 1085, 1085, 1085, -1,1086, 1086, 1086, -1,1086, 1086, 1086, -1,1087, 1088, 1089, -1, + 1087, 1089, 1090, -1,1091, 1090, 1092, -1,1090, 1091, 1087, -1,1093, 1092, 1090, -1, + 1090, 1089, 1093, -1,1094, 1093, 1095, -1,1095, 1093, 1089, -1,1094, 1095, 1096, -1, + 1097, 1094, 1098, -1,1097, 1092, 1094, -1,1098, 1094, 1096, -1,1094, 1092, 1093, -1, + 125, 1099, 1100, -1,125, 1100, 125, -1,1100, 1099, 1101, -1,1102, 1100, 1101, -1, + 1101, 1103, 1102, -1,1104, 1105, 1106, -1,1107, 1108, 1109, -1,1110, 1109, 1108, -1, + 1105, 1111, 1112, -1,1103, 1101, 1111, -1,1101, 1112, 1111, -1,1112, 1113, 1106, -1, + 1114, 1104, 1106, -1,1113, 1115, 1106, -1,1105, 1112, 1106, -1,1115, 1116, 1117, -1, + 1116, 1115, 1113, -1,1115, 1117, 1118, -1,1106, 1115, 1118, -1,1117, 1119, 1118, -1, + 1114, 1110, 1120, -1,1114, 1121, 1104, -1,1109, 1110, 1122, -1,1114, 1118, 1110, -1, + 1108, 1120, 1110, -1,1123, 1122, 1110, -1,1118, 1119, 1123, -1,1124, 1122, 1123, -1, + 1119, 1124, 1123, -1,1123, 1110, 1118, -1,1114, 1106, 1118, -1,1114, 1120, 1121, -1, + 1125, 1126, 1127, -1,1127, 1126, 1128, -1,1129, 1127, 1130, -1,1127, 1129, 1125, -1, + 1128, 1130, 1127, -1,1128, 1126, 1131, -1,1132, 1128, 1133, -1,1133, 1128, 1131, -1, + 1132, 1133, 1134, -1,1131, 1128, 1135, -1,1132, 1136, 1135, -1,1136, 1132, 1134, -1, + 1128, 1132, 1135, -1,1128, 1131, 1130, -1,108, 108, 1136, -1,1136, 108, 108, -1 + ] + } + } + ] +} +DEF link5b Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.800000 0.800000 0.800000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 154 + 0.045088 -0.025879 0.057007, 0.046614 -0.025208 0.057007, 0.047895 -0.024109 0.057007, 0.048689 -0.022644 0.057007, + 0.048994 -0.020996 0.057007, 0.048994 0.020996 0.057007, 0.048689 0.022644 0.057007, 0.047895 0.024109 0.057007, + 0.046614 0.025208 0.057007, 0.045088 0.025879 0.057007, 0.007553 0.03418 0.057007, 0.00383 0.03479 0.057007, + -1.5e-005 0.034973 0.057007, -0.007584 0.03418 0.057007, -0.045061 0.025879 0.057007, -0.046648 0.025208 0.057007, + -0.047869 0.024109 0.057007, -0.048723 0.022644 0.057007, -0.049028 0.020996 0.057007, -0.049028 -0.020996 0.057007, + -0.048723 -0.022644 0.057007, -0.047869 -0.024109 0.057007, -0.046648 -0.025208 0.057007, -0.045061 -0.025879 0.057007, + -0.007584 -0.03418 0.057007, -0.003799 -0.03479 0.057007, -1.5e-005 -0.034973 0.057007, 0.007553 -0.03418 0.057007, + 0.045088 -0.025879 0.057007, 0.045088 -0.025879 0.062012, 0.046614 -0.025208 0.062012, 0.047895 -0.024109 0.062012, + 0.048689 -0.022644 0.062012, 0.048994 -0.020996 0.062012, 0.048994 -0.020996 0.057007, 0.007553 -0.03418 0.062012, + -0.007584 -0.03418 0.062012, -1.5e-005 -0.034973 0.062012, 0.00383 -0.03479 0.062012, 0.007553 -0.03418 0.062012, + -0.045061 -0.025879 0.057007, -0.045061 -0.025879 0.062012, -0.007584 -0.03418 0.062012, -0.049028 -0.020996 0.062012, + -0.048723 -0.022644 0.062012, -0.047869 -0.024109 0.062012, -0.046648 -0.025208 0.062012, -0.049028 0.020996 0.057007, + -0.049028 0.020996 0.062012, -0.049028 -0.020996 0.062012, -0.045061 0.025879 0.057007, -0.045061 0.025879 0.062012, + -0.046648 0.025208 0.062012, -0.047869 0.024109 0.062012, -0.048723 0.022644 0.062012, -0.049028 0.020996 0.062012, + -0.007584 0.03418 0.062012, 0.007553 0.03418 0.062012, -1.5e-005 0.034973 0.062012, -0.003799 0.03479 0.062012, + -0.007584 0.03418 0.062012, 0.045088 0.025879 0.057007, 0.045088 0.025879 0.062012, 0.007553 0.03418 0.062012, + 0.048994 0.020996 0.062012, 0.048689 0.022644 0.062012, 0.047895 0.024109 0.062012, 0.046614 0.025208 0.062012, + 0.048994 0.020996 0.062012, 0.04875 -0.022583 0.059509, 0.047895 -0.024109 0.059509, 0.046614 -0.025269 0.059509, + -0.003799 -0.03479 0.059509, -1.5e-005 -0.034973 0.059509, 0.00383 -0.03479 0.059509, -0.048723 -0.022583 0.059509, + -0.047869 -0.024109 0.059509, -0.046587 -0.025269 0.059509, -0.048723 0.022583 0.059509, -0.047869 0.024109 0.059509, + -0.046587 0.025269 0.059509, 0.00383 0.03479 0.059509, -1.5e-005 0.034973 0.059509, -0.003799 0.03479 0.059509, + 0.04875 0.022583 0.059509, 0.047895 0.024109 0.059509, 0.046614 0.025269 0.059509, 0.048689 -0.022644 0.057007, + 0.047895 -0.024109 0.057007, 0.046614 -0.025208 0.057007, 0.007553 -0.03418 0.057007, 0.045088 -0.025879 0.057007, + 0.045088 -0.025879 0.062012, -0.007584 -0.03418 0.057007, -0.003799 -0.03479 0.057007, -1.5e-005 -0.034973 0.057007, + 0.007553 -0.03418 0.057007, -0.007584 -0.03418 0.057007, -0.049028 -0.020996 0.057007, -0.048723 -0.022644 0.057007, + -0.047869 -0.024109 0.057007, -0.046648 -0.025208 0.057007, -0.045061 -0.025879 0.057007, -0.045061 -0.025879 0.062012, + -0.049028 -0.020996 0.057007, -0.049028 0.020996 0.057007, -0.048723 0.022644 0.057007, -0.047869 0.024109 0.057007, + -0.046648 0.025208 0.057007, -0.007584 0.03418 0.057007, -0.045061 0.025879 0.057007, -0.045061 0.025879 0.062012, + 0.007553 0.03418 0.057007, 0.00383 0.03479 0.057007, -1.5e-005 0.034973 0.057007, -0.007584 0.03418 0.057007, + 0.007553 0.03418 0.057007, 0.048994 0.020996 0.057007, 0.048689 0.022644 0.057007, 0.047895 0.024109 0.057007, + 0.046614 0.025208 0.057007, 0.045088 0.025879 0.057007, 0.045088 0.025879 0.062012, 0.048994 -0.020996 0.062012, + 0.048994 -0.020996 0.057007, 0.048994 0.020996 0.057007, -0.007584 0.03418 0.062012, 0.007553 0.03418 0.062012, + -0.003799 0.03479 0.062012, -0.049028 0.020996 0.062012, -0.045061 0.025879 0.062012, -0.048723 0.022644 0.062012, + -0.047869 0.024109 0.062012, -0.046648 0.025208 0.062012, -0.007584 -0.03418 0.062012, 0.048994 0.020996 0.062012, + 0.045088 0.025879 0.062012, -1.5e-005 0.034973 0.062012, 0.046614 0.025208 0.062012, 0.047895 0.024109 0.062012, + 0.048689 0.022644 0.062012, 0.007553 -0.03418 0.062012, -0.049028 -0.020996 0.062012, -0.045061 -0.025879 0.062012, + -0.048723 -0.022644 0.062012, -0.047869 -0.024109 0.062012, -0.046648 -0.025208 0.062012, 0.00383 -0.03479 0.062012, + -1.5e-005 -0.034973 0.062012, 0.048689 -0.022644 0.062012, 0.045088 -0.025879 0.062012, 0.047895 -0.024109 0.062012, + 0.048994 -0.020996 0.062012, 0.046614 -0.025208 0.062012] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 78 + 0 0 -1, 0.985911 -0.166984 0.00976372, 0.922099 -0.386831 0.00973534, 0.953033 -0.302866 -2.32749e-006, + 0.780085 -0.625674 -1.38221e-006, 0.985911 -0.166984 -0.0097676, 0.922099 -0.386831 -0.00973921, 0.77808 -0.628165 0, + 0.510547 -0.85985 -3.25139e-006, 0.581067 -0.813742 0.0135997, 0.386879 -0.922063 0.0111541, 0.581067 -0.813742 -0.0136051, + 0.386879 -0.922063 -0.0111586, 0.215936 -0.976408 0, -0.103919 -0.994442 0.0169327, -0.15911 -0.987261 0, + -0.0853573 -0.99635 0, -0.000382735 -1 0, -0.0349601 -0.998989 0.0282479, -0.131636 -0.990395 0.042309, + 0.0344481 -0.998983 -0.0291078, 0.104657 -0.994355 -0.0174489, 0.132936 -0.990165 -0.043598, 0.0857157 -0.99632 0, + 0.161691 -0.986841 0, -0.216255 -0.976337 0, -0.982668 -0.185359 0.0022184, -0.918115 -0.396277 0.00551663, + -0.950803 -0.309795 1.31512e-006, -0.778944 -0.627093 5.12261e-007, -0.982668 -0.185359 -0.00221752, + -0.918115 -0.396277 -0.00551443, -0.775773 -0.631012 0, -0.50548 -0.862838 -1.18333e-006, -0.583675 -0.811972 -0.00495513, + -0.380316 -0.924834 -0.00648065, -0.583675 -0.811972 0.00495316, -0.380316 -0.924834 0.00647808, -1 0 0, + -0.982668 0.185359 -0.00221752, -0.918115 0.396277 -0.00551443, -0.950803 0.309795 1.3153e-006, + -0.778944 0.627093 5.12261e-007, -0.982668 0.185359 0.0022184, -0.918115 0.396277 0.00551663, -0.775773 0.631012 0, + -0.50548 0.862838 -1.18333e-006, -0.583675 0.811972 0.00495316, -0.380316 0.924834 0.00647808, -0.583675 0.811972 -0.00495513, + -0.380316 0.924834 -0.00648065, -0.216255 0.976337 0, 0.104657 0.994355 0.017442, 0.161691 0.986841 0, 0.0857157 0.99632 0, + -0.000382735 1 0, 0.0344481 0.998983 0.0290963, 0.132936 0.990166 0.0435808, -0.03496 0.998989 -0.0282591, + -0.103919 0.994442 -0.0169394, -0.131636 0.990394 -0.0423258, -0.0853573 0.99635 0, -0.15911 0.987261 0, 0.215936 0.976408 0, + 0.985911 0.166984 -0.0097676, 0.922099 0.386831 -0.00973921, 0.953033 0.302866 -2.32749e-006, 0.780085 0.625674 -1.38221e-006, + 0.985911 0.166984 0.00976372, 0.922099 0.386831 0.00973534, 0.77808 0.628165 0, 0.510547 0.85985 -3.25139e-006, + 0.581067 0.813742 -0.0136051, 0.386879 0.922063 -0.0111586, 0.581067 0.813742 0.0135997, 0.386879 0.922063 0.0111541, 1 0 0, + 0 0 1] + } + coordIndex [ + 12, 11, 13, -1,14, 13, 18, -1,17, 14, 18, -1,14, 17, 16, -1,14, 16, 15, -1,10, 24, + 13, -1,9, 5, 10, -1,13, 11, 10, -1,7, 9, 8, -1,6, 9, 7, -1,6, 5, 9, -1,5, 27, 10, -1, + 19, 18, 13, -1,20, 19, 23, -1,21, 20, 23, -1,19, 24, 23, -1,24, 10, 27, -1,23, 22, + 21, -1,25, 24, 27, -1,2, 0, 3, -1,4, 3, 0, -1,27, 4, 0, -1,0, 2, 1, -1,4, 27, 5, -1, + 27, 26, 25, -1,24, 19, 13, -1,33, 32, 69, -1,69, 32, 70, -1,34, 69, 87, -1,69, 34, + 33, -1,70, 87, 69, -1,70, 32, 31, -1,71, 70, 30, -1,30, 70, 31, -1,71, 30, 29, -1, + 88, 70, 89, -1,71, 28, 89, -1,28, 71, 29, -1,70, 71, 89, -1,70, 88, 87, -1,90, 91, + 92, -1,92, 35, 90, -1,72, 93, 94, -1,73, 72, 94, -1,37, 36, 72, -1,72, 36, 93, -1, + 73, 94, 95, -1,73, 95, 74, -1,74, 95, 96, -1,37, 73, 38, -1,74, 39, 38, -1,39, 74, + 96, -1,73, 74, 38, -1,73, 37, 72, -1,40, 97, 42, -1,42, 41, 40, -1,98, 99, 75, -1, + 75, 99, 76, -1,43, 75, 44, -1,75, 43, 98, -1,76, 44, 75, -1,76, 99, 100, -1,77, 76, + 101, -1,101, 76, 100, -1,77, 101, 102, -1,45, 76, 46, -1,77, 103, 46, -1,103, 77, + 102, -1,76, 77, 46, -1,76, 45, 44, -1,48, 47, 49, -1,104, 49, 47, -1,55, 54, 78, -1, + 78, 54, 79, -1,105, 78, 106, -1,78, 105, 55, -1,79, 106, 78, -1,79, 54, 53, -1,80, + 79, 52, -1,52, 79, 53, -1,80, 52, 51, -1,107, 79, 108, -1,80, 50, 108, -1,50, 80, + 51, -1,79, 80, 108, -1,79, 107, 106, -1,109, 110, 111, -1,111, 56, 109, -1,81, 112, + 113, -1,82, 81, 113, -1,58, 57, 81, -1,81, 57, 112, -1,82, 113, 114, -1,82, 114, + 83, -1,83, 114, 115, -1,58, 82, 59, -1,83, 60, 59, -1,60, 83, 115, -1,82, 83, 59, -1, + 82, 58, 81, -1,61, 116, 63, -1,63, 62, 61, -1,117, 118, 84, -1,84, 118, 85, -1,64, + 84, 65, -1,84, 64, 117, -1,85, 65, 84, -1,85, 118, 119, -1,86, 85, 120, -1,120, 85, + 119, -1,86, 120, 121, -1,66, 85, 67, -1,86, 122, 67, -1,122, 86, 121, -1,85, 86, + 67, -1,85, 66, 65, -1,123, 124, 68, -1,125, 68, 124, -1,126, 127, 128, -1,129, 126, + 130, -1,129, 130, 131, -1,132, 131, 130, -1,133, 132, 130, -1,126, 134, 127, -1,127, + 135, 136, -1,127, 137, 128, -1,138, 136, 139, -1,139, 136, 140, -1,136, 135, 140, -1, + 127, 141, 135, -1,126, 129, 142, -1,143, 142, 144, -1,143, 144, 145, -1,143, 134, + 142, -1,141, 127, 134, -1,145, 146, 143, -1,147, 134, 148, -1,149, 150, 151, -1,150, + 149, 152, -1,150, 152, 141, -1,153, 151, 150, -1,135, 141, 152, -1,134, 147, 141, -1, + 126, 142, 134, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,1, 2, 3, -1,3, 2, 4, -1, + 5, 3, 6, -1,3, 5, 1, -1,4, 6, 3, -1,4, 2, 7, -1,8, 4, 9, -1,9, 4, 7, -1,8, 9, 10, -1, + 7, 4, 11, -1,8, 12, 11, -1,12, 8, 10, -1,4, 8, 11, -1,4, 7, 6, -1,13, 13, 13, -1, + 13, 13, 13, -1,14, 15, 16, -1,17, 14, 16, -1,18, 19, 14, -1,14, 19, 15, -1,17, 16, + 20, -1,17, 20, 21, -1,21, 20, 22, -1,18, 17, 23, -1,21, 24, 23, -1,24, 21, 22, -1, + 17, 21, 23, -1,17, 18, 14, -1,25, 25, 25, -1,25, 25, 25, -1,26, 27, 28, -1,28, 27, + 29, -1,30, 28, 31, -1,28, 30, 26, -1,29, 31, 28, -1,29, 27, 32, -1,33, 29, 34, -1, + 34, 29, 32, -1,33, 34, 35, -1,32, 29, 36, -1,33, 37, 36, -1,37, 33, 35, -1,29, 33, + 36, -1,29, 32, 31, -1,38, 38, 38, -1,38, 38, 38, -1,39, 40, 41, -1,41, 40, 42, -1, + 43, 41, 44, -1,41, 43, 39, -1,42, 44, 41, -1,42, 40, 45, -1,46, 42, 47, -1,47, 42, + 45, -1,46, 47, 48, -1,45, 42, 49, -1,46, 50, 49, -1,50, 46, 48, -1,42, 46, 49, -1, + 42, 45, 44, -1,51, 51, 51, -1,51, 51, 51, -1,52, 53, 54, -1,55, 52, 54, -1,56, 57, + 52, -1,52, 57, 53, -1,55, 54, 58, -1,55, 58, 59, -1,59, 58, 60, -1,56, 55, 61, -1, + 59, 62, 61, -1,62, 59, 60, -1,55, 59, 61, -1,55, 56, 52, -1,63, 63, 63, -1,63, 63, + 63, -1,64, 65, 66, -1,66, 65, 67, -1,68, 66, 69, -1,66, 68, 64, -1,67, 69, 66, -1, + 67, 65, 70, -1,71, 67, 72, -1,72, 67, 70, -1,71, 72, 73, -1,70, 67, 74, -1,71, 75, + 74, -1,75, 71, 73, -1,67, 71, 74, -1,67, 70, 69, -1,76, 76, 76, -1,76, 76, 76, -1, + 77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, + 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1, + 77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, + 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1, + 77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1,77, 77, 77, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/link6.wrl b/examples/rlsg/mitsubishi-rv6sl/link6.wrl new file mode 100644 index 00000000..d4346226 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/link6.wrl @@ -0,0 +1,835 @@ +#VRML V2.0 utf8 + +DEF link6 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.800000 0.800000 0.800000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.000000 0.000000 0.000000 + ambientIntensity 0.200000 + shininess 0.015625 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 890 + -1.5e-005 -0.03302 -0.007996, -0.006424 -0.032349 -0.007996, -0.012651 -0.030518 -0.007996, -0.018328 -0.027466 -0.007996, + -0.023333 -0.023315 -0.007996, -0.027422 -0.018311 -0.007996, -0.030474 -0.012634 -0.007996, -0.032366 -0.006409 -0.007996, + -0.032976 0 -0.007996, -0.032366 0.006409 -0.007996, -0.030474 0.012634 -0.007996, -0.027422 0.018311 -0.007996, + -0.023333 0.023315 -0.007996, -0.018328 0.027466 -0.007996, -0.012651 0.030518 -0.007996, -0.006424 0.032349 -0.007996, + -1.5e-005 0.03302 -0.007996, 0.006454 0.032349 -0.007996, 0.012617 0.030518 -0.007996, 0.018354 0.027466 -0.007996, + 0.023359 0.023315 -0.007996, 0.027449 0.018311 -0.007996, 0.0305 0.012634 -0.007996, 0.032393 0.006409 -0.007996, + 0.033003 0 -0.007996, 0.032393 -0.006409 -0.007996, 0.0305 -0.012634 -0.007996, 0.027449 -0.018311 -0.007996, + 0.023359 -0.023315 -0.007996, 0.018354 -0.027466 -0.007996, 0.012617 -0.030518 -0.007996, 0.006454 -0.032349 -0.007996, + -1.5e-005 -0.033752 -0.008179, -1.5e-005 -0.034424 -0.008606, -1.5e-005 -0.034851 -0.009216, -1.5e-005 -0.034973 -0.01001, + -0.006851 -0.034302 -0.01001, -0.013382 -0.032349 -0.01001, -0.019426 -0.029114 -0.01001, -0.024736 -0.024719 -0.01001, + -0.029131 -0.01947 -0.01001, -0.032366 -0.013367 -0.01001, -0.034319 -0.006836 -0.01001, -0.03499 0 -0.01001, + -0.034319 0.006836 -0.01001, -0.032366 0.013367 -0.01001, -0.029131 0.01947 -0.01001, -0.024736 0.024719 -0.01001, + -0.019426 0.029114 -0.01001, -0.013382 0.032349 -0.01001, -0.006851 0.034302 -0.01001, -1.5e-005 0.034973 -0.01001, + -1.5e-005 0.034851 -0.009216, -1.5e-005 0.034424 -0.008606, -1.5e-005 0.033752 -0.008179, 0.006821 0.034302 -0.01001, + 0.013412 0.032349 -0.01001, 0.019453 0.029114 -0.01001, 0.024763 0.024719 -0.01001, 0.029097 0.01947 -0.01001, + 0.032332 0.013367 -0.01001, 0.034346 0.006836 -0.01001, 0.035017 0 -0.01001, 0.034346 -0.006836 -0.01001, + 0.032331 -0.013367 -0.01001, 0.029097 -0.01947 -0.01001, 0.024763 -0.024719 -0.01001, 0.019453 -0.029114 -0.01001, + 0.013412 -0.032349 -0.01001, 0.006821 -0.034302 -0.01001, -1.5e-005 -0.034973 -0.01001, -1.5e-005 0.034973 -0.02301, + 0.006821 0.034302 -0.02301, 0.013412 0.032349 -0.02301, 0.019453 0.029114 -0.02301, 0.024763 0.024719 -0.02301, + 0.029097 0.01947 -0.02301, 0.032332 0.013367 -0.02301, 0.034346 0.006836 -0.02301, 0.035017 0 -0.02301, + 0.034346 -0.006836 -0.02301, 0.032331 -0.013367 -0.02301, 0.029097 -0.01947 -0.02301, 0.024763 -0.024719 -0.02301, + 0.019453 -0.029114 -0.02301, 0.013412 -0.032349 -0.02301, 0.006821 -0.034302 -0.02301, -1.5e-005 -0.034973 -0.02301, + -0.006851 -0.034302 -0.02301, -0.013382 -0.032349 -0.02301, -0.019426 -0.029114 -0.02301, -0.024736 -0.024719 -0.02301, + -0.029131 -0.01947 -0.02301, -0.032366 -0.013367 -0.02301, -0.034319 -0.006836 -0.02301, -0.03499 0 -0.02301, + -0.034319 0.006836 -0.02301, -0.032366 0.013367 -0.02301, -0.029131 0.01947 -0.02301, -0.024736 0.024719 -0.02301, + -0.019426 0.029114 -0.02301, -0.013382 0.032349 -0.02301, -0.006851 0.034302 -0.02301, -1.5e-005 0.034973 -0.02301, + -0.009415 -0.03241 -0.008118, -0.009659 -0.03302 -0.008606, -0.009781 -0.033447 -0.009277, -0.014788 -0.030334 -0.008118, + -0.015093 -0.030945 -0.008606, -0.015276 -0.031311 -0.009277, -0.02022 -0.026978 -0.008118, -0.020647 -0.027527 -0.008606, + -0.020891 -0.027893 -0.009277, -0.025408 -0.022156 -0.008118, -0.025957 -0.022644 -0.008606, -0.026262 -0.022949 -0.009277, + -0.029741 -0.015869 -0.008118, -0.030352 -0.016174 -0.008606, -0.030779 -0.016418 -0.009277, -0.032671 -0.008301 -0.008118, + -0.033342 -0.008484 -0.008606, -0.03377 -0.008606 -0.009277, -0.033709 0 -0.008118, -0.034441 0 -0.008606, + -0.034868 0 -0.009277, -0.032671 0.008301 -0.008118, -0.033342 0.008484 -0.008606, -0.03377 0.008606 -0.009277, + -0.029741 0.015869 -0.008118, -0.030352 0.016174 -0.008606, -0.030779 0.016418 -0.009277, -0.025408 0.022156 -0.008118, + -0.025957 0.022644 -0.008606, -0.026262 0.022949 -0.009277, -0.02022 0.026978 -0.008118, -0.020647 0.027527 -0.008606, + -0.020891 0.027893 -0.009277, -0.014788 0.030334 -0.008118, -0.015093 0.030945 -0.008606, -0.015276 0.031311 -0.009277, + -0.009415 0.03241 -0.008118, -0.009659 0.03302 -0.008606, -0.009781 0.033447 -0.009277, 0.009445 0.03241 -0.008118, + 0.009628 0.03302 -0.008606, 0.00975 0.033447 -0.009277, 0.014753 0.030334 -0.008118, 0.015059 0.030945 -0.008606, + 0.015303 0.031311 -0.009277, 0.020247 0.026978 -0.008118, 0.020674 0.027527 -0.008606, 0.020918 0.027893 -0.009277, + 0.025434 0.022156 -0.008118, 0.025923 0.022644 -0.008606, 0.026289 0.022949 -0.009277, 0.029768 0.015869 -0.008118, + 0.030378 0.016174 -0.008606, 0.030745 0.016418 -0.009277, 0.032698 0.008301 -0.008118, 0.033369 0.008484 -0.008606, + 0.033796 0.008606 -0.009277, 0.033735 0 -0.008118, 0.034407 0 -0.008606, 0.034834 0 -0.009277, 0.032698 -0.008301 -0.008118, + 0.033369 -0.008484 -0.008606, 0.033796 -0.008606 -0.009277, 0.029768 -0.015869 -0.008118, 0.030378 -0.016174 -0.008606, + 0.030745 -0.016418 -0.009277, 0.025434 -0.022156 -0.008118, 0.025923 -0.022644 -0.008606, 0.026289 -0.022949 -0.009277, + 0.020247 -0.026978 -0.008118, 0.020674 -0.027527 -0.008606, 0.020918 -0.027893 -0.009277, 0.014753 -0.030334 -0.008118, + 0.015059 -0.030945 -0.008606, 0.015303 -0.031311 -0.009277, 0.009445 -0.03241 -0.008118, 0.009628 -0.03302 -0.008606, + 0.00975 -0.033447 -0.009277, 0.009811 0.03363 -0.016479, 0.015364 0.031433 -0.016479, 0.020979 0.028015 -0.016479, + 0.02635 0.02301 -0.016479, 0.030867 0.016479 -0.016479, 0.033918 0.008606 -0.016479, 0.035017 0 -0.016479, + 0.033918 -0.008606 -0.016479, 0.030867 -0.016479 -0.016479, 0.02635 -0.02301 -0.016479, 0.020979 -0.028015 -0.016479, + 0.015364 -0.031433 -0.016479, 0.009811 -0.03363 -0.016479, -0.009781 -0.03363 -0.016479, -0.015337 -0.031433 -0.016479, + -0.021013 -0.028015 -0.016479, -0.026384 -0.02301 -0.016479, -0.030901 -0.016479 -0.016479, -0.033953 -0.008606 -0.016479, + -0.03499 0 -0.016479, -0.033953 0.008606 -0.016479, -0.030901 0.016479 -0.016479, -0.026384 0.02301 -0.016479, + -0.021013 0.028015 -0.016479, -0.015337 0.031433 -0.016479, -0.009781 0.03363 -0.016479, -1.5e-005 -0.03302 -0.007996, + -0.006424 -0.032349 -0.007996, -0.012651 -0.030518 -0.007996, -0.018328 -0.027466 -0.007996, -0.023333 -0.023315 -0.007996, + -0.027422 -0.018311 -0.007996, -0.030474 -0.012634 -0.007996, -0.032366 -0.006409 -0.007996, -0.032976 0 -0.007996, + -0.032366 0.006409 -0.007996, -0.030474 0.012634 -0.007996, -0.027422 0.018311 -0.007996, -0.023333 0.023315 -0.007996, + -0.018328 0.027466 -0.007996, -0.012651 0.030518 -0.007996, -0.006424 0.032349 -0.007996, -1.5e-005 0.03302 -0.007996, + -1.5e-005 0.033752 -0.008179, 0.006454 0.032349 -0.007996, 0.012617 0.030518 -0.007996, -1.5e-005 0.034424 -0.008606, + -1.5e-005 0.034851 -0.009216, 0.018354 0.027466 -0.007996, 0.023359 0.023315 -0.007996, 0.027449 0.018311 -0.007996, + 0.0305 0.012634 -0.007996, 0.032393 0.006409 -0.007996, 0.033003 0 -0.007996, -1.5e-005 0.034973 -0.01001, + 0.032393 -0.006409 -0.007996, 0.0305 -0.012634 -0.007996, 0.027449 -0.018311 -0.007996, 0.023359 -0.023315 -0.007996, + 0.018354 -0.027466 -0.007996, 0.012617 -0.030518 -0.007996, 0.006454 -0.032349 -0.007996, -1.5e-005 -0.03302 -0.007996, + -1.5e-005 -0.033752 -0.008179, -1.5e-005 -0.034424 -0.008606, -1.5e-005 -0.034851 -0.009216, -1.5e-005 0.034973 -0.01001, + 0.006821 0.034302 -0.01001, 0.013412 0.032349 -0.01001, 0.019453 0.029114 -0.01001, 0.024763 0.024719 -0.01001, + 0.032332 0.013367 -0.01001, 0.029097 0.01947 -0.01001, 0.034346 0.006836 -0.01001, 0.035017 0 -0.01001, + 0.034346 -0.006836 -0.01001, 0.032331 -0.013367 -0.01001, 0.029097 -0.01947 -0.01001, 0.024763 -0.024719 -0.01001, + 0.019453 -0.029114 -0.01001, 0.006821 -0.034302 -0.01001, 0.013412 -0.032349 -0.01001, -1.5e-005 -0.034973 -0.01001, + -1.5e-005 -0.034973 -0.02301, -0.006851 -0.034302 -0.01001, -0.013382 -0.032349 -0.01001, -0.019426 -0.029114 -0.01001, + -0.024736 -0.024719 -0.01001, -0.032366 -0.013367 -0.01001, -0.029131 -0.01947 -0.01001, -0.034319 -0.006836 -0.01001, + -0.03499 0 -0.01001, -0.034319 0.006836 -0.01001, -0.032366 0.013367 -0.01001, -0.029131 0.01947 -0.01001, + -0.024736 0.024719 -0.01001, -0.019426 0.029114 -0.01001, -0.006851 0.034302 -0.01001, -0.013382 0.032349 -0.01001, + -1.5e-005 0.034973 -0.01001, 0.013412 0.032349 -0.02301, 0.019453 0.029114 -0.02301, 0.006821 0.034302 -0.02301, + -0.006851 0.034302 -0.02301, -1.5e-005 0.034973 -0.02301, 0.024763 0.024719 -0.02301, 0.032332 0.013367 -0.02301, + 0.034346 0.006836 -0.02301, 0.029097 0.01947 -0.02301, -0.034319 0.006836 -0.02301, -0.013382 0.032349 -0.02301, + -0.019426 0.029114 -0.02301, -0.024736 0.024719 -0.02301, -0.032366 0.013367 -0.02301, -0.029131 0.01947 -0.02301, + -0.034319 -0.006836 -0.02301, -0.03499 0 -0.02301, 0.034346 -0.006836 -0.02301, 0.032331 -0.013367 -0.02301, + 0.029097 -0.01947 -0.02301, 0.024763 -0.024719 -0.02301, 0.019453 -0.029114 -0.02301, 0.006821 -0.034302 -0.02301, + 0.013412 -0.032349 -0.02301, -0.006851 -0.034302 -0.02301, -0.024736 -0.024719 -0.02301, -0.029131 -0.01947 -0.02301, + -0.032366 -0.013367 -0.02301, -0.019426 -0.029114 -0.02301, -0.013382 -0.032349 -0.02301, -1.5e-005 -0.034973 -0.02301, + 0.035017 0 -0.02301, -1.7e-005 0.02002 -0.007996, -0.007647 0.018494 -0.007996, -0.014116 0.01416 -0.007996, + -0.01845 0.007629 -0.007996, -0.019976 0 -0.007996, -0.01845 -0.007629 -0.007996, -0.014116 -0.01416 -0.007996, + -0.007647 -0.018494 -0.007996, -1.7e-005 -0.02002 -0.007996, 0.007673 -0.018494 -0.007996, 0.014143 -0.01416 -0.007996, + 0.018476 -0.007629 -0.007996, 0.020002 0 -0.007996, 0.018476 0.007629 -0.007996, 0.014143 0.01416 -0.007996, + 0.007673 0.018494 -0.007996, -0.015764 -0.002502 -0.007996, -0.01668 -0.002319 -0.007996, -0.017534 -0.00177 -0.007996, + -0.018084 -0.000977 -0.007996, -0.018267 0 -0.007996, -0.018084 0.000977 -0.007996, -0.017534 0.00177 -0.007996, + -0.01668 0.002319 -0.007996, -0.015764 0.002502 -0.007996, -0.014788 0.002319 -0.007996, -0.013994 0.00177 -0.007996, + -0.013445 0.000977 -0.007996, -0.013262 0 -0.007996, -0.013445 -0.000977 -0.007996, -0.013994 -0.00177 -0.007996, + -0.014788 -0.002319 -0.007996, -0.011126 0.013245 -0.007996, -0.010332 0.013062 -0.007996, -0.009661 0.012634 -0.007996, + -0.009172 0.011963 -0.007996, -0.00905 0.011108 -0.007996, -0.009172 0.010315 -0.007996, -0.009661 0.009644 -0.007996, + -0.010332 0.009216 -0.007996, -0.011126 0.009033 -0.007996, -0.011919 0.009216 -0.007996, -0.012651 0.009644 -0.007996, + -0.013079 0.010315 -0.007996, -0.013262 0.011108 -0.007996, -0.013079 0.011963 -0.007996, -0.012651 0.012634 -0.007996, + -0.011919 0.013062 -0.007996, 0.011152 0.013245 -0.007996, 0.011946 0.013062 -0.007996, 0.012617 0.012634 -0.007996, + 0.013105 0.011963 -0.007996, 0.013227 0.011108 -0.007996, 0.013105 0.010315 -0.007996, 0.012617 0.009644 -0.007996, + 0.011946 0.009216 -0.007996, 0.011152 0.009033 -0.007996, 0.010359 0.009216 -0.007996, 0.009626 0.009644 -0.007996, + 0.009199 0.010315 -0.007996, 0.009016 0.011108 -0.007996, 0.009199 0.011963 -0.007996, 0.009626 0.012634 -0.007996, + 0.010359 0.013062 -0.007996, 0.011152 -0.009033 -0.007996, 0.011946 -0.009216 -0.007996, 0.012617 -0.009644 -0.007996, + 0.013105 -0.010315 -0.007996, 0.013227 -0.011108 -0.007996, 0.013105 -0.011963 -0.007996, 0.012617 -0.012634 -0.007996, + 0.011946 -0.013062 -0.007996, 0.011152 -0.013245 -0.007996, 0.010359 -0.013062 -0.007996, 0.009626 -0.012634 -0.007996, + 0.009199 -0.011963 -0.007996, 0.009016 -0.011108 -0.007996, 0.009199 -0.010315 -0.007996, 0.009626 -0.009644 -0.007996, + 0.010359 -0.009216 -0.007996, -0.011126 -0.009033 -0.007996, -0.010332 -0.009216 -0.007996, -0.009661 -0.009644 -0.007996, + -0.009172 -0.010315 -0.007996, -0.00905 -0.011108 -0.007996, -0.009172 -0.011963 -0.007996, -0.009661 -0.012634 -0.007996, + -0.010332 -0.013062 -0.007996, -0.011126 -0.013245 -0.007996, -0.011919 -0.013062 -0.007996, -0.012651 -0.012634 -0.007996, + -0.013079 -0.011963 -0.007996, -0.013262 -0.011108 -0.007996, -0.013079 -0.010315 -0.007996, -0.012651 -0.009644 -0.007996, + -0.011919 -0.009216 -0.007996, -1.7e-005 0.02002 0, -0.007647 0.018494 0, -0.014116 0.01416 0, -0.01845 0.007629 0, + -0.019976 0 0, -0.01845 -0.007629 0, -0.014116 -0.01416 0, -0.007647 -0.018494 0, -1.7e-005 -0.02002 0, 0.007673 -0.018494 0, + 0.014143 -0.01416 0, 0.018476 -0.007629 0, 0.020002 0 0, 0.018476 0.007629 0, 0.014143 0.01416 0, 0.007673 0.018494 0, + -1.7e-005 0.02002 0, -1.7e-005 0.01001 0, -0.003801 0.009216 0, -0.007097 0.00708 0, -0.009233 0.003845 0, -0.010027 0 0, + -0.009233 -0.003845 0, -0.007097 -0.00708 0, -0.003801 -0.009216 0, -1.7e-005 -0.01001 0, 0.003828 -0.009216 0, + 0.007063 -0.00708 0, 0.00926 -0.003845 0, 0.009993 0 0, 0.00926 0.003845 0, 0.007063 0.00708 0, 0.003828 0.009216 0, + -0.015764 0.002502 0, -0.01668 0.002319 0, -0.017534 0.00177 0, -0.018084 0.000977 0, -0.018267 0 0, -0.018084 -0.000977 0, + -0.017534 -0.00177 0, -0.01668 -0.002319 0, -0.015764 -0.002502 0, -0.014788 -0.002319 0, -0.013994 -0.00177 0, + -0.013445 -0.000977 0, -0.013262 0 0, -0.013445 0.000977 0, -0.013994 0.00177 0, -0.014788 0.002319 0, -0.011126 0.009033 0, + -0.010332 0.009216 0, -0.009661 0.009644 0, -0.009172 0.010315 0, -0.00905 0.011108 0, -0.009172 0.011963 0, + -0.009661 0.012634 0, -0.010332 0.013062 0, -0.011126 0.013245 0, -0.011919 0.013062 0, -0.012651 0.012634 0, + -0.013079 0.011963 0, -0.013262 0.011108 0, -0.013079 0.010315 0, -0.012651 0.009644 0, -0.011919 0.009216 0, + 0.011152 0.009033 0, 0.011946 0.009216 0, 0.012617 0.009644 0, 0.013105 0.010315 0, 0.013227 0.011108 0, 0.013105 0.011963 0, + 0.012617 0.012634 0, 0.011946 0.013062 0, 0.011152 0.013245 0, 0.010359 0.013062 0, 0.009626 0.012634 0, 0.009199 0.011963 0, + 0.009016 0.011108 0, 0.009199 0.010315 0, 0.009626 0.009644 0, 0.010359 0.009216 0, 0.011152 -0.013245 0, + 0.011946 -0.013062 0, 0.012617 -0.012634 0, 0.013105 -0.011963 0, 0.013227 -0.011108 0, 0.013105 -0.010315 0, + 0.012617 -0.009644 0, 0.011946 -0.009216 0, 0.011152 -0.009033 0, 0.010359 -0.009216 0, 0.009626 -0.009644 0, + 0.009199 -0.010315 0, 0.009016 -0.011108 0, 0.009199 -0.011963 0, 0.009626 -0.012634 0, 0.010359 -0.013062 0, + -0.011126 -0.013245 0, -0.010332 -0.013062 0, -0.009661 -0.012634 0, -0.009172 -0.011963 0, -0.00905 -0.011108 0, + -0.009172 -0.010315 0, -0.009661 -0.009644 0, -0.010332 -0.009216 0, -0.011126 -0.009033 0, -0.011919 -0.009216 0, + -0.012651 -0.009644 0, -0.013079 -0.010315 0, -0.013262 -0.011108 0, -0.013079 -0.011963 0, -0.012651 -0.012634 0, + -0.011919 -0.013062 0, -1.7e-005 0.01001 -0.005981, -0.003801 0.009216 -0.005981, -0.007097 0.00708 -0.005981, + -0.009233 0.003845 -0.005981, -0.010027 0 -0.005981, -0.009233 -0.003845 -0.005981, -0.007097 -0.00708 -0.005981, + -0.003801 -0.009216 -0.005981, -1.7e-005 -0.01001 -0.005981, 0.003828 -0.009216 -0.005981, 0.007063 -0.00708 -0.005981, + 0.00926 -0.003845 -0.005981, 0.009993 0 -0.005981, 0.00926 0.003845 -0.005981, 0.007063 0.00708 -0.005981, + 0.003828 0.009216 -0.005981, -1.7e-005 0.01001 -0.005981, -0.015764 0.002502 -0.007996, -0.011126 0.013245 0, + 0.011152 0.013245 0, 0.011152 -0.009033 0, -0.011126 -0.009033 0, -0.005571 0.019226 -0.004028, -0.01198 0.015991 -0.004028, + -0.017656 0.009399 -0.004028, -0.019365 0.004944 -0.004028, -0.019976 0 -0.004028, -0.019365 -0.004944 -0.004028, + -0.017656 -0.009399 -0.004028, -0.01198 -0.015991 -0.004028, -0.005571 -0.019226 -0.004028, 0.005598 -0.019226 -0.004028, + 0.012007 -0.015991 -0.004028, 0.017622 -0.009399 -0.004028, 0.019392 -0.004944 -0.004028, 0.020002 0 -0.004028, + 0.019392 0.004944 -0.004028, 0.017622 0.009399 -0.004028, 0.012007 0.015991 -0.004028, 0.005598 0.019226 -0.004028, + -0.002825 0.009583 -0.002991, -0.005999 0.007996 -0.002991, -0.008806 0.0047 -0.002991, -0.010027 0 -0.002991, + -0.008806 -0.0047 -0.002991, -0.005999 -0.007996 -0.002991, -0.002825 -0.009583 -0.002991, 0.00279 -0.009583 -0.002991, + 0.006025 -0.007996 -0.002991, 0.008833 -0.0047 -0.002991, 0.009993 0 -0.002991, 0.008833 0.0047 -0.002991, + 0.006025 0.007996 -0.002991, 0.00279 0.009583 -0.002991, -0.016436 -0.00238 -0.004028, -0.017229 -0.002014 -0.004028, + -0.017961 -0.00116 -0.004028, -0.018267 0 -0.004028, -0.017961 0.00116 -0.004028, -0.017229 0.002014 -0.004028, + -0.016436 0.00238 -0.004028, -0.015032 0.00238 -0.004028, -0.014238 0.002014 -0.004028, -0.013567 0.00116 -0.004028, + -0.013262 0 -0.004028, -0.013567 -0.00116 -0.004028, -0.014238 -0.002014 -0.004028, -0.015032 -0.00238 -0.004028, + -0.010576 0.009094 -0.004028, -0.009905 0.00946 -0.004028, -0.009295 0.010132 -0.004028, -0.00905 0.011108 -0.004028, + -0.009295 0.012146 -0.004028, -0.009905 0.012817 -0.004028, -0.010576 0.013123 -0.004028, -0.011736 0.013123 -0.004028, + -0.012407 0.012817 -0.004028, -0.013018 0.012146 -0.004028, -0.013262 0.011108 -0.004028, -0.013018 0.010132 -0.004028, + -0.012407 0.00946 -0.004028, -0.011736 0.009094 -0.004028, 0.011702 0.009094 -0.004028, 0.012373 0.00946 -0.004028, + 0.012983 0.010132 -0.004028, 0.013227 0.011108 -0.004028, 0.012983 0.012146 -0.004028, 0.012373 0.012817 -0.004028, + 0.011702 0.013123 -0.004028, 0.010542 0.013123 -0.004028, 0.009871 0.012817 -0.004028, 0.00926 0.012146 -0.004028, + 0.009016 0.011108 -0.004028, 0.00926 0.010132 -0.004028, 0.009871 0.00946 -0.004028, 0.010542 0.009094 -0.004028, + 0.011702 -0.013123 -0.004028, 0.012373 -0.012817 -0.004028, 0.012983 -0.012146 -0.004028, 0.013227 -0.011108 -0.004028, + 0.012983 -0.010132 -0.004028, 0.012373 -0.00946 -0.004028, 0.011702 -0.009094 -0.004028, 0.010542 -0.009094 -0.004028, + 0.009871 -0.00946 -0.004028, 0.00926 -0.010132 -0.004028, 0.009016 -0.011108 -0.004028, 0.00926 -0.012146 -0.004028, + 0.009871 -0.012817 -0.004028, 0.010542 -0.013123 -0.004028, -0.010576 -0.013123 -0.004028, -0.009905 -0.012817 -0.004028, + -0.009295 -0.012146 -0.004028, -0.00905 -0.011108 -0.004028, -0.009295 -0.010132 -0.004028, -0.009905 -0.00946 -0.004028, + -0.010576 -0.009094 -0.004028, -0.011736 -0.009094 -0.004028, -0.012407 -0.00946 -0.004028, -0.013018 -0.010132 -0.004028, + -0.013262 -0.011108 -0.004028, -0.013018 -0.012146 -0.004028, -0.012407 -0.012817 -0.004028, -0.011736 -0.013123 -0.004028, + -1.7e-005 0.02002 -0.007996, -0.007647 0.018494 -0.007996, -0.014116 0.01416 -0.007996, -0.01845 0.007629 -0.007996, + -0.019976 0 -0.007996, -0.01845 -0.007629 -0.007996, -0.014116 -0.01416 -0.007996, -0.007647 -0.018494 -0.007996, + -1.7e-005 -0.02002 -0.007996, -1.7e-005 -0.02002 0, 0.007673 -0.018494 -0.007996, 0.014143 -0.01416 -0.007996, + 0.018476 -0.007629 -0.007996, 0.020002 0 -0.007996, 0.018476 0.007629 -0.007996, 0.014143 0.01416 -0.007996, + -1.7e-005 0.02002 -0.007996, 0.007673 0.018494 -0.007996, 0.014143 -0.01416 0, 0.007673 -0.018494 0, 0.018476 -0.007629 0, + -1.7e-005 -0.02002 0, 0.020002 0 0, -0.007647 -0.018494 0, -0.014116 -0.01416 0, -0.01845 -0.007629 0, -0.019976 0 0, + 0.018476 0.007629 0, -1.7e-005 0.02002 0, 0.014143 0.01416 0, 0.007673 0.018494 0, -0.007647 0.018494 0, -0.01845 0.007629 0, + -0.014116 0.01416 0, -1.7e-005 0.01001 0, -0.003801 0.009216 0, -0.007097 0.00708 0, -0.009233 0.003845 0, + -0.009233 -0.003845 0, -0.007097 -0.00708 0, -0.010027 0 0, -0.003801 -0.009216 0, -1.7e-005 -0.01001 0, + -1.7e-005 -0.01001 -0.005981, 0.003828 -0.009216 0, 0.007063 -0.00708 0, 0.00926 -0.003845 0, 0.00926 0.003845 0, + 0.009993 0 0, 0.007063 0.00708 0, 0.003828 0.009216 0, -1.7e-005 0.01001 0, -1.7e-005 -0.01001 -0.005981, + 0.003828 -0.009216 -0.005981, 0.007063 -0.00708 -0.005981, 0.00926 -0.003845 -0.005981, 0.009993 0 -0.005981, + 0.007063 0.00708 -0.005981, -0.007097 -0.00708 -0.005981, -0.003801 -0.009216 -0.005981, -0.010027 0 -0.005981, + -0.009233 -0.003845 -0.005981, -0.007097 0.00708 -0.005981, 0.003828 0.009216 -0.005981, -1.7e-005 0.01001 -0.005981, + -0.009233 0.003845 -0.005981, -0.003801 0.009216 -0.005981, 0.00926 0.003845 -0.005981, -0.01668 -0.002319 0, + -0.015764 -0.002502 0, -0.015764 -0.002502 -0.007996, -0.017534 -0.00177 0, -0.018084 -0.000977 0, + -0.01668 -0.002319 -0.007996, -0.017534 -0.00177 -0.007996, -0.018084 -0.000977 -0.007996, -0.018267 0 0, -0.017534 0.00177 0, + -0.018084 0.000977 0, -0.018084 0.000977 -0.007996, -0.01668 0.002319 0, -0.015764 0.002502 0, -0.018267 0 -0.007996, + -0.017534 0.00177 -0.007996, -0.01668 0.002319 -0.007996, -0.014788 0.002319 0, -0.015764 0.002502 0, + -0.015764 0.002502 -0.007996, -0.013994 0.00177 0, -0.013445 0.000977 0, -0.014788 0.002319 -0.007996, + -0.013994 0.00177 -0.007996, -0.013445 0.000977 -0.007996, -0.013262 0 0, -0.013994 -0.00177 0, -0.013445 -0.000977 0, + -0.013445 -0.000977 -0.007996, -0.015764 -0.002502 0, -0.014788 -0.002319 0, -0.013262 0 -0.007996, + -0.013994 -0.00177 -0.007996, -0.014788 -0.002319 -0.007996, -0.015764 -0.002502 -0.007996, -0.010332 0.009216 -0.007996, + -0.011126 0.009033 -0.007996, -0.011126 0.009033 0, -0.009172 0.010315 -0.007996, -0.009661 0.009644 -0.007996, + -0.010332 0.009216 0, -0.009661 0.009644 0, -0.009172 0.010315 0, -0.00905 0.011108 -0.007996, -0.009661 0.012634 -0.007996, + -0.009172 0.011963 -0.007996, -0.009172 0.011963 0, -0.010332 0.013062 -0.007996, -0.011126 0.013245 -0.007996, + -0.00905 0.011108 0, -0.009661 0.012634 0, -0.010332 0.013062 0, -0.011919 0.013062 -0.007996, -0.011126 0.013245 -0.007996, + -0.011126 0.013245 0, -0.013079 0.011963 -0.007996, -0.012651 0.012634 -0.007996, -0.011919 0.013062 0, -0.012651 0.012634 0, + -0.013079 0.011963 0, -0.013262 0.011108 -0.007996, -0.012651 0.009644 -0.007996, -0.013079 0.010315 -0.007996, + -0.013079 0.010315 0, -0.011919 0.009216 -0.007996, -0.011126 0.009033 -0.007996, -0.013262 0.011108 0, -0.012651 0.009644 0, + -0.011919 0.009216 0, -0.011126 0.009033 0, 0.011946 0.009216 -0.007996, 0.011152 0.009033 -0.007996, 0.011152 0.009033 0, + 0.013105 0.010315 -0.007996, 0.012617 0.009644 -0.007996, 0.011946 0.009216 0, 0.012617 0.009644 0, 0.013105 0.010315 0, + 0.013227 0.011108 -0.007996, 0.012617 0.012634 -0.007996, 0.013105 0.011963 -0.007996, 0.013105 0.011963 0, + 0.011946 0.013062 -0.007996, 0.011152 0.013245 -0.007996, 0.013227 0.011108 0, 0.012617 0.012634 0, 0.011946 0.013062 0, + 0.010359 0.013062 -0.007996, 0.011152 0.013245 -0.007996, 0.011152 0.013245 0, 0.009199 0.011963 -0.007996, + 0.009626 0.012634 -0.007996, 0.010359 0.013062 0, 0.009626 0.012634 0, 0.009199 0.011963 0, 0.009016 0.011108 -0.007996, + 0.009626 0.009644 -0.007996, 0.009199 0.010315 -0.007996, 0.009199 0.010315 0, 0.010359 0.009216 -0.007996, + 0.011152 0.009033 -0.007996, 0.009016 0.011108 0, 0.009626 0.009644 0, 0.010359 0.009216 0, 0.011152 0.009033 0, + 0.011946 -0.013062 -0.007996, 0.011152 -0.013245 -0.007996, 0.011152 -0.013245 0, 0.013105 -0.011963 -0.007996, + 0.012617 -0.012634 -0.007996, 0.011946 -0.013062 0, 0.012617 -0.012634 0, 0.013105 -0.011963 0, 0.013227 -0.011108 -0.007996, + 0.012617 -0.009644 -0.007996, 0.013105 -0.010315 -0.007996, 0.013105 -0.010315 0, 0.011946 -0.009216 -0.007996, + 0.011152 -0.009033 -0.007996, 0.013227 -0.011108 0, 0.012617 -0.009644 0, 0.011946 -0.009216 0, 0.010359 -0.009216 -0.007996, + 0.011152 -0.009033 -0.007996, 0.011152 -0.009033 0, 0.009199 -0.010315 -0.007996, 0.009626 -0.009644 -0.007996, + 0.010359 -0.009216 0, 0.009626 -0.009644 0, 0.009199 -0.010315 0, 0.009016 -0.011108 -0.007996, 0.009626 -0.012634 -0.007996, + 0.009199 -0.011963 -0.007996, 0.009199 -0.011963 0, 0.010359 -0.013062 -0.007996, 0.011152 -0.013245 -0.007996, + 0.009016 -0.011108 0, 0.009626 -0.012634 0, 0.010359 -0.013062 0, 0.011152 -0.013245 0, -0.010332 -0.013062 -0.007996, + -0.011126 -0.013245 -0.007996, -0.011126 -0.013245 0, -0.009172 -0.011963 -0.007996, -0.009661 -0.012634 -0.007996, + -0.010332 -0.013062 0, -0.009661 -0.012634 0, -0.009172 -0.011963 0, -0.00905 -0.011108 -0.007996, + -0.009661 -0.009644 -0.007996, -0.009172 -0.010315 -0.007996, -0.009172 -0.010315 0, -0.010332 -0.009216 -0.007996, + -0.011126 -0.009033 -0.007996, -0.00905 -0.011108 0, -0.009661 -0.009644 0, -0.010332 -0.009216 0, + -0.011919 -0.009216 -0.007996, -0.011126 -0.009033 -0.007996, -0.011126 -0.009033 0, -0.013079 -0.010315 -0.007996, + -0.012651 -0.009644 -0.007996, -0.011919 -0.009216 0, -0.012651 -0.009644 0, -0.013079 -0.010315 0, + -0.013262 -0.011108 -0.007996, -0.012651 -0.012634 -0.007996, -0.013079 -0.011963 -0.007996, -0.013079 -0.011963 0, + -0.011919 -0.013062 -0.007996, -0.011126 -0.013245 -0.007996, -0.013262 -0.011108 0, -0.012651 -0.012634 0, + -0.011919 -0.013062 0, -0.011126 -0.013245 0] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 556 + 0 0 1, -0.0552602 -0.421052 0.905352, -0.0253843 -0.242456 0.96983, -0.032291 -0.216852 0.97567, + -0.0900782 -0.359423 0.928817, -0.0590524 -0.146744 0.98741, -0.100071 -0.687381 0.71937, -0.163142 -0.678461 0.716293, + -0.187348 -0.377124 0.907016, -0.320392 -0.683208 0.656183, -0.11797 -0.885784 0.448854, -0.089448 -0.137449 0.986462, + -0.241357 -0.300558 0.92272, -0.114648 -0.118114 0.986359, -0.357858 -0.176243 0.916993, -0.13816 -0.0937175 0.985966, + -0.161906 -0.0649041 0.984669, -0.383118 -0.0867017 0.919621, -0.173792 -0.028283 0.984376, -0.299599 -0.242434 0.922749, + -0.416915 -0.590822 0.690733, -0.638534 -0.347079 0.686885, -0.318271 -1.58137e-010 0.948, -0.665411 -0.184345 0.723356, + -0.523088 -0.487198 0.699298, -0.16418 0 0.98643, -0.696103 -0.0154725 0.717775, -0.253688 -0.871957 0.418729, + -0.174915 -0.961346 0.212648, -0.423263 -0.814553 0.396675, -0.568767 -0.718678 0.400008, -0.372316 -0.920031 0.122168, + -0.0965648 -0.983781 0.15116, -0.540721 -0.830405 0.134344, -0.692464 -0.713872 0.104309, -0.698271 -0.582377 0.416239, + -0.798754 -0.421866 0.428977, -0.861703 -0.222893 0.455836, -0.820399 -0.556691 0.130541, -0.916301 -0.367907 0.158229, + -0.965141 -0.168987 0.199867, -0.916423 0.0156596 0.399903, -0.383118 0.0867017 0.919621, -0.173792 0.028283 0.984376, + -0.357858 0.176243 0.916993, -0.161906 0.0649041 0.98467, -0.13816 0.0937175 0.985966, -0.70803 0.18952 0.680277, + -0.612024 0.353915 0.707228, -0.299599 0.242434 0.922749, -0.511018 0.457927 0.727436, -0.251572 0.330234 0.909757, + -0.680665 0.588845 0.435841, -0.796795 0.402184 0.450961, -0.114648 0.118114 0.986359, -0.089448 0.137449 0.986462, + -0.167072 0.356356 0.919292, -0.0590524 0.146744 0.98741, -0.336522 0.663848 0.667877, -0.0900782 0.359423 0.928817, + -0.163142 0.678461 0.716293, -0.032291 0.216852 0.97567, -0.000117682 0.242534 0.970143, -0.0552602 0.421052 0.905352, + -0.462833 0.584407 0.666524, -0.882561 0.230324 0.409923, -0.965141 0.168987 0.199867, -0.692464 0.713872 0.104309, + -0.547742 0.736865 0.396242, -0.820399 0.556691 0.130541, -0.916301 0.367907 0.158229, -0.98643 0 0.164185, + -0.418399 0.832046 0.364199, -0.100071 0.687381 0.71937, -0.11797 0.885784 0.448854, -0.253688 0.871957 0.418729, + -0.540721 0.830405 0.134344, -0.372316 0.920031 0.122168, -0.174915 0.961346 0.212648, -0.0965648 0.983781 0.15116, + 0.0552639 0.422745 0.904562, 0.0322119 0.216864 0.97567, 0.0916706 0.362742 0.92737, 0.0590574 0.145978 0.987523, + 0.100081 0.68738 0.71937, 0.164178 0.680565 0.714057, 0.187824 0.379615 0.905878, 0.31514 0.677199 0.664897, + 0.117978 0.885771 0.448877, 0.0897218 0.139029 0.986215, 0.244287 0.304035 0.920808, 0.114618 0.118075 0.986367, + 0.357958 0.176333 0.916937, 0.138187 0.0937496 0.985959, 0.161735 0.0648369 0.984702, 0.389338 0.0867998 0.916996, + 0.173879 0.0282874 0.984361, 0.306288 0.248842 0.918839, 0.414526 0.587587 0.694917, 0.645591 0.352216 0.677611, + 0.330719 -3.17479e-010 0.943729, 0.666297 0.182511 0.723006, 0.52015 0.484629 0.703263, 0.164398 0 0.986394, + 0.704752 0.0146227 0.709303, 0.251185 0.869453 0.425391, 0.173952 0.960733 0.216176, 0.41965 0.811164 0.407317, + 0.567409 0.716114 0.406482, 0.370217 0.919865 0.129566, 0.0965648 0.983781 0.15116, 0.540748 0.830316 0.134785, + 0.694607 0.712814 0.0970446, 0.699994 0.580128 0.416486, 0.810372 0.428015 0.400126, 0.866736 0.225396 0.444934, + 0.82436 0.554157 0.115503, 0.916557 0.37329 0.14345, 0.959615 0.169325 0.224652, 0.905462 -0.0147349 0.424172, + 0.389338 -0.0867998 0.916996, 0.173879 -0.0282874 0.984361, 0.357958 -0.176333 0.916937, 0.161735 -0.0648369 0.984702, + 0.138187 -0.0937495 0.985959, 0.713774 -0.190078 0.67409, 0.620836 -0.359193 0.696809, 0.306288 -0.248842 0.918839, + 0.507347 -0.454847 0.731925, 0.253668 -0.33335 0.908036, 0.682567 -0.586427 0.436126, 0.807253 -0.407761 0.426701, + 0.114618 -0.118075 0.986367, 0.0897218 -0.139029 0.986215, 0.168025 -0.359009 0.918085, 0.0590574 -0.145978 0.987523, + 0.332384 -0.659768 0.673963, 0.0916706 -0.362742 0.92737, 0.164178 -0.680565 0.714057, 0.0322119 -0.216864 0.97567, + 0.025149 -0.242458 0.969836, 0.0552639 -0.422745 0.904562, 0.459122 -0.579917 0.672981, 0.884496 -0.233028 0.404184, + 0.959632 -0.169376 0.224539, 0.694607 -0.712814 0.0970446, 0.546056 -0.735282 0.401476, 0.824404 -0.554134 0.1153, + 0.916644 -0.373326 0.142802, 0.970221 0 0.242221, 0.415001 -0.828 0.377081, 0.100081 -0.68738 0.71937, + 0.117978 -0.885771 0.448877, 0.251185 -0.869453 0.425391, 0.540748 -0.830316 0.134785, 0.370217 -0.919865 0.129566, + 0.173952 -0.960733 0.216176, 0.0965648 -0.983781 0.15116, 0.0976873 0.995217 0, 0.175257 0.984491 0.00795186, + 0.305196 0.95229 2.09711e-005, 0.37599 0.926574 0.00959038, 0.454453 0.890771 -4.0411e-005, 0.545144 0.838328 0.00491762, + 0.37599 0.926575 -0.00949938, 0.200955 0.979544 -0.0104995, 0.698998 0.715107 0.00484213, 0.615349 0.788255 -4.59342e-005, + 0.761418 0.648261 -6.82266e-005, 0.926651 0.375918 0.00177104, 0.883554 0.46833 -7.94592e-005, 0.828564 0.559888 0.0027516, + 0.964998 0.262256 -8.08061e-005, 0.984789 0.173698 -0.00453608, 0.545145 0.838328 -0.00487093, 0.698998 0.715108 -0.00479614, + 0.828564 0.559888 -0.00272537, 0.926651 0.375918 -0.00175412, 1 3.75025e-009 -7.38864e-005, 0.984789 0.173698 0.00449308, + 1 0 0, 0.984781 -0.173744 -0.00452299, 0.964986 -0.262302 -8.05161e-005, 0.92665 -0.375922 0.00185507, + 0.883574 -0.468292 -7.9123e-005, 0.828587 -0.559853 0.00277453, 0.761418 -0.648261 -6.82275e-005, + 0.92665 -0.375922 -0.00183736, 0.984781 -0.173744 0.00448011, 0.698998 -0.715107 0.00484213, 0.615349 -0.788255 -4.59342e-005, + 0.545144 -0.838328 0.00491762, 0.200954 -0.979543 0.0106, 0.305196 -0.95229 2.09711e-005, 0.37599 -0.926574 0.00959038, + 0.454453 -0.890771 -4.0411e-005, 0.175257 -0.984491 -0.00787643, 0.0327014 -0.999465 0, 0.828588 -0.559853 -0.00274808, + 0.698998 -0.715108 -0.00479614, 0.545145 -0.838328 -0.00487093, 0.37599 -0.926575 -0.00949938, 0.0976873 -0.995217 0, + -0.0976873 -0.995217 0, -0.176952 -0.98419 0.00758312, -0.306911 -0.951738 1.83816e-005, -0.37664 -0.926314 0.00918321, + -0.452916 -0.891553 -3.44897e-005, -0.543728 -0.839222 0.00814103, -0.376641 -0.926315 -0.00909607, + -0.203206 -0.979085 -0.0100124, -0.69733 -0.716672 0.0105866, -0.614094 -0.789233 -2.07095e-005, + -0.759922 -0.650014 -5.04939e-005, -0.927697 -0.373312 0.0040577, -0.883537 -0.468362 -7.93664e-005, + -0.827278 -0.561776 0.00434295, -0.966347 -0.257241 -5.80167e-005, -0.985692 -0.168557 0.00024949, + -0.543728 -0.839223 -0.00806377, -0.697331 -0.716672 -0.0104861, -0.827278 -0.561776 -0.00430162, + -0.927697 -0.373312 -0.00401908, -1 0 -5.5922e-005, -0.985692 -0.168557 -0.000247125, -1 0 0, -0.985692 0.168557 0.00024949, + -0.966347 0.257241 -5.8017e-005, -0.927697 0.373312 0.0040577, -0.883537 0.468362 -7.93664e-005, + -0.827278 0.561776 0.00434295, -0.759922 0.650014 -5.04945e-005, -0.927697 0.373312 -0.00401908, + -0.985692 0.168557 -0.000247125, -0.69733 0.716672 0.0105866, -0.614094 0.789233 -2.07095e-005, -0.543728 0.839222 0.00814103, + -0.203206 0.979084 0.0101083, -0.306911 0.951738 1.83816e-005, -0.37664 0.926314 0.00918321, -0.452916 0.891553 -3.44897e-005, + -0.176952 0.984191 -0.00751118, -0.0976873 0.995217 0, -0.827278 0.561776 -0.00430162, -0.697331 0.716672 -0.0104861, + -0.543728 0.839223 -0.00806377, -0.376641 0.926315 -0.00909607, 0 0 -1, -0.21718 0.976131 -0.000290123, + -0.168718 0.984913 0.03849, -0.168713 0.984891 -0.0390694, -0.400818 0.915245 -0.0408935, -0.719506 0.693255 -0.0413447, + -0.926368 0.37339 -0.0492228, -0.873352 0.48709 -0.000156629, -0.400828 0.915267 0.0402873, -0.56733 0.823491 -0.000309852, + -0.973929 0.226854 -0.000162893, -0.998886 0 -0.0471796, -0.719523 0.693273 0.0407319, -0.926401 0.373402 0.0484939, + -0.998919 0 0.0464814, -0.973929 -0.226854 -0.000162892, -0.926368 -0.37339 -0.0492228, -0.873352 -0.48709 -0.000156629, + -0.926401 -0.373402 0.0484939, -0.719506 -0.693255 -0.0413447, -0.400818 -0.915245 -0.0408935, + -0.000758618 -0.999205 -0.0398525, -0.21718 -0.976131 -0.000290123, -0.56733 -0.823491 -0.000309852, + -0.719523 -0.693273 0.0407319, -0.400828 -0.915267 0.0402873, -0.168718 -0.984913 0.03849, 0.216112 -0.976368 -0.000293325, + 0.167225 -0.98515 0.0389174, 0.400474 -0.915385 -0.0411285, 0.400484 -0.915408 0.0405189, 0.721078 -0.691801 -0.0381832, + 0.56728 -0.823525 -0.000310037, 0.925143 -0.377258 -0.0422795, 0.871847 -0.489778 -9.47391e-005, + 0.973044 -0.23062 -0.000143046, 0.998881 0 -0.0473031, 0.721092 -0.691818 0.037617, 0.925169 -0.377264 0.0416531, + 0.998913 0 0.046603, 0.973044 0.23062 -0.000143047, 0.925143 0.377258 -0.0422795, 0.871847 0.489778 -9.47391e-005, + 0.925169 0.377264 0.0416531, 0.721078 0.691801 -0.0381832, 0.16722 0.985128 -0.0395032, 0.216112 0.976368 -0.000293325, + 0.400474 0.915385 -0.0411285, 0.56728 0.823525 -0.000310037, 0.721092 0.691818 0.037617, 0.400484 0.915408 0.0405189, + 0.167225 0.98515 0.0389174, 0.40346 -0.914655 0.0250288, 0.177836 -0.983703 0.0265288, 0.293836 -0.955856 1.13126e-006, + 0.177836 -0.983703 -0.0265199, 0.592445 -0.805611 -3.35084e-006, 0.94049 -0.33969 -0.00941409, 0.724012 -0.689768 0.00507178, + 0.870323 -0.492482 -6.12582e-006, 1 7.66091e-009 -5.66142e-006, 0.40346 -0.914655 -0.0250205, 0.724012 -0.689768 -0.00507005, + 0.94049 -0.33969 0.00941096, 0.870323 0.492482 -6.12582e-006, 0.724012 0.689768 0.00507178, 0.94049 0.33969 -0.00941409, + 0.94049 0.33969 0.00941096, 0.592445 0.805611 -3.35148e-006, 0.40346 0.914655 0.0250288, 0.177836 0.983703 0.0265288, + 0.293836 0.955856 1.13126e-006, 0.724012 0.689768 -0.00507005, 0.40346 0.914655 -0.0250205, 0.000771433 0.999657 -0.0261615, + -0.402739 0.914996 0.0241633, -0.176302 0.984019 0.0249847, -0.289714 0.957113 4.88315e-007, -0.592781 0.805364 -2.4797e-006, + -0.942161 0.335031 -0.0093227, -0.722889 0.690823 0.0139659, -0.870042 0.492978 -5.25776e-006, -1 3.81925e-009 -5.96375e-006, + -0.402739 0.914996 -0.0241553, -0.722889 0.690823 -0.0139612, -0.942161 0.335032 0.00931961, + -0.870042 -0.492978 -5.25902e-006, -0.722889 -0.690823 0.0139659, -0.942161 -0.335031 -0.0093227, + -0.942161 -0.335032 0.00931961, -0.592781 -0.805364 -2.4797e-006, -0.402739 -0.914996 0.0241633, + -0.176302 -0.984019 0.0249847, -0.289714 -0.957113 4.88315e-007, -0.722889 -0.690823 -0.0139612, + -0.402739 -0.914996 -0.0241553, -0.176302 -0.984019 -0.0249763, 0.389874 0.920868 -0.000457961, 0.187276 0.982306 -0.00149157, + 0.283691 0.958916 -2.63423e-005, 0.187276 0.982306 0.00151412, 0.582316 0.812962 -5.04179e-005, 0.717146 0.696919 0.00245317, + 0.865324 0.501212 -9.03659e-005, 0.939639 0.342117 0.0058098, 1 1.91073e-009 -6.95271e-005, 0.389873 0.920868 0.000464889, + 0.717146 0.696919 -0.00249025, 0.939639 0.342117 -0.00589763, 0.865324 -0.501212 -9.03658e-005, 0.717146 -0.696919 0.00245317, + 0.939639 -0.342117 0.0058098, 0.939639 -0.342117 -0.00589763, 0.582316 -0.812962 -5.04181e-005, + 0.389874 -0.920868 -0.000457961, 0.187276 -0.982306 -0.00149157, 0.283691 -0.958916 -2.63421e-005, + 0.717146 -0.696919 -0.00249025, 0.389873 -0.920868 0.000464889, 0.187276 -0.982306 0.00151412, + -0.396391 -0.918078 -0.00253394, -0.174352 -0.984682 -0.00186066, -0.276172 -0.961108 -2.40221e-005, + -0.174352 -0.984681 0.0018888, -0.60267 -0.797991 -1.65437e-005, -0.73484 -0.678237 -0.00206705, + -0.872651 -0.488345 -6.91112e-005, -0.939829 -0.341599 0.00568859, -1 0 -6.87497e-005, -0.396391 -0.918078 0.00257225, + -0.73484 -0.678237 0.00209829, -0.939828 -0.341599 -0.00577458, -0.872651 0.488345 -6.91115e-005, + -0.73484 0.678237 -0.00206705, -0.939829 0.341599 0.00568859, -0.939828 0.341599 -0.00577458, -0.60267 0.797991 -1.65436e-005, + -0.276172 0.961108 -2.40221e-005, -0.174352 0.984682 -0.00186066, -0.396391 0.918078 -0.00253394, + -0.73484 0.678237 0.00209829, -0.396391 0.918078 0.00257225, -0.174352 0.984681 0.0018888, -0.418268 0.908299 0.00664574, + -0.167685 0.985807 0.00808787, -0.307271 0.951622 4.13036e-005, -0.167685 0.985808 -0.00796742, + -0.591821 0.80607 -2.70618e-005, -0.942105 0.33527 -0.00569511, -0.704094 0.710104 -0.00210096, + -0.858471 0.512862 -7.88988e-005, -0.99998 0.006261 -7.29165e-005, -0.418268 0.9083 -0.00654676, + -0.704094 0.710104 0.00206968, -0.942105 0.33527 0.00561031, -0.999985 0.00545797 0, -0.860703 -0.509108 -8.11763e-005, + -0.703916 -0.710279 -0.00221086, -0.944903 -0.327296 -0.00595337, -0.944904 -0.327296 0.00586472, + -0.572257 -0.820074 -5.08274e-005, -0.396305 -0.918118 -0.00152935, -0.220574 -0.97537 0.000584874, + -0.300617 -0.953745 -3.1006e-005, -0.703917 -0.710279 0.00217794, -0.396305 -0.918118 0.00150658, + -0.220574 -0.97537 -0.000576162, 0.384538 -0.923105 0.00276671, 0.210509 -0.977589 0.00230472, + 0.296735 -0.95496 -1.61693e-006, 0.210509 -0.977589 -0.00227039, 0.561268 -0.827634 -2.7179e-005, + 0.944083 -0.329698 0.00250965, 0.709296 -0.704908 0.00210704, 0.871266 -0.490811 -1.77339e-005, + 0.999972 0.00751311 -1.55607e-005, 0.384538 -0.923105 -0.0027255, 0.709296 -0.704908 -0.00207565, + 0.944083 -0.329698 -0.00247228, 0.999968 0.0079725 0, 0.86911 0.494618 -1.56901e-005, 0.709473 0.704729 0.00221952, + 0.940711 0.339197 0.00273732, 0.940711 0.339197 -0.00269655, 0.581074 0.81385 -1.00296e-006, 0.406558 0.913556 0.0112656, + 0.162496 0.98666 0.0098126, 0.305342 0.952243 7.39053e-005, 0.709473 0.704729 -0.00218646, 0.406558 0.913557 -0.0110978, + 0.162496 0.986662 -0.00966648, -0.591821 0.806069 -2.7062e-005, -0.942322 0.334663 -0.0055778, -0.704324 0.709875 -0.00205061, + -0.858802 0.512307 -7.8032e-005, -0.999981 0.00624836 -7.21653e-005, -0.704325 0.709875 0.00202008, + -0.942322 0.334663 0.00549474, -0.861023 -0.508566 -8.02992e-005, -0.704147 -0.710051 -0.00216051, + -0.945109 -0.326703 -0.0058346, -0.945109 -0.326703 0.00574772, -0.572257 -0.820074 -5.08277e-005, + -0.704147 -0.710051 0.00212834, 0.384356 -0.923181 0.00273923, 0.210509 -0.977589 0.00230475, 0.296736 -0.95496 -1.61665e-006, + 0.210509 -0.977589 -0.00227042, 0.561101 -0.827747 -2.78539e-005, 0.944198 -0.329369 0.00249257, + 0.709406 -0.704797 0.00199926, 0.871443 -0.490497 -1.83325e-005, 0.384356 -0.923181 -0.00269843, + 0.709406 -0.704797 -0.00196948, 0.944198 -0.329369 -0.00245545, 0.869288 0.494305 -1.62886e-005, 0.709583 0.704619 0.00211175, + 0.94083 0.338869 0.00272025, 0.94083 0.338869 -0.00267974, 0.580912 0.813967 -1.67513e-006, 0.406376 0.913637 0.0112379, + 0.162496 0.98666 0.00981263, 0.305342 0.952243 7.39061e-005, 0.709583 0.704619 -0.00208028, 0.406377 0.913638 -0.0110706, + 0.162496 0.986662 -0.00966651, -0.396305 0.918118 -0.00152935, -0.220574 0.97537 0.000584874, + -0.300617 0.953745 -3.10062e-005, -0.220574 0.97537 -0.000576162, -0.572257 0.820074 -5.08278e-005, + -0.945109 0.326703 -0.0058346, -0.704147 0.710051 -0.00216051, -0.861023 0.508566 -8.02992e-005, + -0.999981 -0.00624836 -7.21653e-005, -0.396305 0.918118 0.00150658, -0.704147 0.710051 0.00212834, + -0.945109 0.326703 0.00574772, -0.999985 -0.00545797 0, -0.858802 -0.512307 -7.80321e-005, -0.704324 -0.709875 -0.00205061, + -0.942322 -0.334663 -0.0055778, -0.942322 -0.334663 0.00549474, -0.591821 -0.806069 -2.70621e-005, + -0.418268 -0.908299 0.00664574, -0.167685 -0.985807 0.00808787, -0.307271 -0.951622 4.13035e-005, + -0.704325 -0.709875 0.00202008, -0.418268 -0.9083 -0.00654676, -0.167685 -0.985808 -0.00796742, 0.406376 -0.913637 0.0112379, + 0.162496 -0.98666 0.00981263, 0.305342 -0.952243 7.39059e-005, 0.162496 -0.986662 -0.00966651, + 0.580912 -0.813967 -1.67513e-006, 0.94083 -0.338869 0.00272025, 0.709583 -0.704619 0.00211175, + 0.869288 -0.494305 -1.62884e-005, 0.999972 -0.00751311 -1.55607e-005, 0.406377 -0.913638 -0.0110706, + 0.709583 -0.704619 -0.00208028, 0.94083 -0.338869 -0.00267974, 0.999968 -0.0079725 0, 0.871443 0.490497 -1.83325e-005, + 0.709406 0.704797 0.00199926, 0.944198 0.329369 0.00249257, 0.944198 0.329369 -0.00245545, 0.561101 0.827747 -2.78539e-005, + 0.384356 0.923181 0.00273923, 0.210509 0.977589 0.00230475, 0.296736 0.95496 -1.61665e-006, 0.709406 0.704797 -0.00196948, + 0.384356 0.923181 -0.00269843, 0.210509 0.977589 -0.00227042, -0.572257 0.820074 -5.08275e-005, + -0.944903 0.327296 -0.00595337, -0.703916 0.710279 -0.00221086, -0.860703 0.509108 -8.11764e-005, + -0.99998 -0.00626099 -7.29165e-005, -0.703917 0.710279 0.00217794, -0.944904 0.327296 0.00586472, + -0.858471 -0.512862 -7.88985e-005, -0.704094 -0.710104 -0.00210096, -0.942105 -0.33527 -0.00569511, + -0.942105 -0.33527 0.00561031, -0.591821 -0.80607 -2.70619e-005, -0.704094 -0.710104 0.00206968, 0.406558 -0.913556 0.0112656, + 0.162496 -0.98666 0.0098126, 0.305342 -0.952243 7.39052e-005, 0.162496 -0.986662 -0.00966648, 0.581074 -0.81385 -1.00288e-006, + 0.940711 -0.339197 0.00273732, 0.709473 -0.704729 0.00221952, 0.86911 -0.494618 -1.56903e-005, 0.406558 -0.913557 -0.0110978, + 0.709473 -0.704729 -0.00218646, 0.940711 -0.339197 -0.00269655, 0.871266 0.490811 -1.77339e-005, 0.709296 0.704908 0.00210704, + 0.944083 0.329698 0.00250965, 0.944083 0.329698 -0.00247228, 0.561268 0.827634 -2.71789e-005, 0.384538 0.923105 0.00276671, + 0.210509 0.977589 0.00230472, 0.296735 0.95496 -1.61693e-006, 0.709296 0.704908 -0.00207565, 0.384538 0.923105 -0.0027255, + 0.210509 0.977589 -0.00227039] + } + coordIndex [ + 18, 17, 22, -1,16, 15, 17, -1,20, 19, 18, -1,22, 17, 23, -1,22, 21, 20, -1,22, 20, + 18, -1,23, 17, 9, -1,10, 14, 12, -1,14, 13, 12, -1,9, 15, 14, -1,10, 12, 11, -1,14, + 10, 9, -1,17, 15, 9, -1,8, 7, 9, -1,25, 23, 9, -1,25, 9, 7, -1,26, 25, 30, -1,27, + 26, 28, -1,30, 29, 28, -1,30, 25, 31, -1,28, 26, 30, -1,31, 25, 1, -1,6, 5, 4, -1, + 2, 6, 4, -1,7, 6, 1, -1,6, 2, 1, -1,2, 4, 3, -1,7, 1, 25, -1,1, 0, 31, -1,24, 23, + 25, -1,32, 208, 209, -1,104, 209, 210, -1,33, 32, 105, -1,104, 107, 105, -1,107, + 104, 210, -1,108, 105, 107, -1,104, 105, 32, -1,32, 209, 104, -1,33, 105, 34, -1, + 210, 211, 107, -1,110, 211, 212, -1,116, 213, 214, -1,119, 214, 215, -1,113, 212, + 213, -1,111, 107, 110, -1,113, 110, 212, -1,117, 113, 116, -1,119, 116, 214, -1,122, + 119, 215, -1,120, 116, 119, -1,113, 213, 116, -1,114, 110, 113, -1,215, 216, 122, -1, + 211, 110, 107, -1,123, 119, 122, -1,34, 106, 36, -1,34, 105, 106, -1,108, 111, 109, -1, + 111, 108, 107, -1,109, 111, 112, -1,108, 109, 106, -1,105, 108, 106, -1,106, 109, + 37, -1,35, 34, 36, -1,109, 38, 37, -1,37, 36, 106, -1,38, 112, 39, -1,38, 109, 112, -1, + 111, 114, 112, -1,115, 39, 112, -1,115, 114, 117, -1,115, 117, 118, -1,120, 117, + 116, -1,123, 120, 119, -1,121, 117, 120, -1,114, 113, 117, -1,121, 120, 123, -1,115, + 40, 39, -1,40, 115, 118, -1,40, 118, 41, -1,41, 121, 42, -1,121, 41, 118, -1,124, + 42, 121, -1,118, 117, 121, -1,121, 123, 124, -1,115, 112, 114, -1,111, 110, 114, -1, + 122, 125, 123, -1,217, 125, 122, -1,128, 125, 218, -1,218, 125, 217, -1,128, 218, + 219, -1,125, 126, 123, -1,126, 128, 129, -1,128, 126, 125, -1,129, 131, 132, -1,131, + 129, 128, -1,132, 131, 134, -1,129, 132, 133, -1,128, 219, 131, -1,126, 129, 130, -1, + 219, 220, 131, -1,123, 126, 124, -1,134, 220, 221, -1,137, 221, 222, -1,134, 137, + 138, -1,134, 221, 137, -1,137, 222, 140, -1,141, 137, 140, -1,223, 224, 54, -1,223, + 54, 140, -1,223, 140, 222, -1,134, 135, 132, -1,220, 134, 131, -1,141, 140, 54, -1, + 124, 127, 44, -1,124, 126, 127, -1,129, 133, 130, -1,130, 127, 126, -1,47, 133, 136, -1, + 130, 133, 46, -1,133, 132, 135, -1,127, 130, 45, -1,44, 43, 124, -1,46, 45, 130, -1, + 47, 46, 133, -1,44, 127, 45, -1,133, 135, 136, -1,124, 43, 42, -1,139, 136, 138, -1, + 138, 136, 135, -1,141, 53, 52, -1,53, 141, 54, -1,142, 138, 141, -1,138, 137, 141, -1, + 142, 141, 52, -1,48, 139, 49, -1,139, 48, 136, -1,49, 139, 142, -1,52, 50, 142, -1, + 50, 52, 51, -1,142, 50, 49, -1,139, 138, 142, -1,136, 48, 47, -1,135, 134, 138, -1, + 122, 216, 217, -1,225, 224, 226, -1,143, 226, 227, -1,228, 225, 144, -1,143, 146, + 144, -1,146, 143, 227, -1,147, 144, 146, -1,143, 144, 225, -1,225, 226, 143, -1,228, + 144, 229, -1,227, 230, 146, -1,149, 230, 231, -1,155, 232, 233, -1,158, 233, 234, -1, + 152, 231, 232, -1,150, 146, 149, -1,152, 149, 231, -1,156, 152, 155, -1,158, 155, + 233, -1,161, 158, 234, -1,159, 155, 158, -1,152, 232, 155, -1,153, 149, 152, -1,234, + 235, 161, -1,230, 149, 146, -1,162, 158, 161, -1,229, 145, 55, -1,229, 144, 145, -1, + 147, 150, 148, -1,150, 147, 146, -1,148, 150, 151, -1,147, 148, 145, -1,144, 147, + 145, -1,145, 148, 56, -1,236, 229, 55, -1,148, 57, 56, -1,56, 55, 145, -1,57, 151, + 58, -1,57, 148, 151, -1,150, 153, 151, -1,154, 58, 151, -1,154, 153, 156, -1,154, + 156, 157, -1,159, 156, 155, -1,162, 159, 158, -1,160, 156, 159, -1,153, 152, 156, -1, + 160, 159, 162, -1,154, 59, 58, -1,59, 154, 157, -1,59, 157, 60, -1,60, 160, 61, -1, + 160, 60, 157, -1,163, 61, 160, -1,157, 156, 160, -1,160, 162, 163, -1,154, 151, 153, -1, + 150, 149, 153, -1,161, 164, 162, -1,237, 164, 161, -1,167, 164, 238, -1,238, 164, + 237, -1,167, 238, 239, -1,164, 165, 162, -1,165, 167, 168, -1,167, 165, 164, -1,168, + 170, 171, -1,170, 168, 167, -1,171, 170, 173, -1,168, 171, 172, -1,167, 239, 170, -1, + 165, 168, 169, -1,239, 240, 170, -1,162, 165, 163, -1,173, 240, 241, -1,176, 241, + 242, -1,173, 176, 177, -1,173, 241, 176, -1,176, 242, 179, -1,180, 176, 179, -1,243, + 244, 245, -1,243, 245, 179, -1,243, 179, 242, -1,173, 174, 171, -1,240, 173, 170, -1, + 180, 179, 245, -1,163, 166, 63, -1,163, 165, 166, -1,168, 172, 169, -1,169, 166, + 165, -1,66, 172, 175, -1,169, 172, 65, -1,172, 171, 174, -1,166, 169, 64, -1,63, + 62, 163, -1,65, 64, 169, -1,66, 65, 172, -1,63, 166, 64, -1,172, 174, 175, -1,163, + 62, 61, -1,178, 175, 177, -1,177, 175, 174, -1,180, 246, 247, -1,246, 180, 245, -1, + 181, 177, 180, -1,177, 176, 180, -1,181, 180, 247, -1,67, 178, 68, -1,178, 67, 175, -1, + 68, 178, 181, -1,247, 69, 181, -1,69, 247, 70, -1,181, 69, 68, -1,178, 177, 181, -1, + 175, 67, 66, -1,174, 173, 177, -1,161, 235, 237, -1,71, 248, 249, -1,182, 250, 183, -1, + 250, 182, 249, -1,183, 250, 251, -1,182, 183, 73, -1,72, 249, 182, -1,251, 252, 184, -1, + 184, 252, 185, -1,253, 186, 254, -1,252, 254, 185, -1,187, 253, 255, -1,251, 184, + 183, -1,183, 184, 74, -1,249, 72, 71, -1,75, 184, 185, -1,182, 73, 72, -1,73, 183, + 74, -1,74, 184, 75, -1,185, 76, 75, -1,186, 187, 77, -1,187, 186, 253, -1,188, 187, + 255, -1,187, 188, 78, -1,77, 76, 186, -1,78, 77, 187, -1,188, 79, 78, -1,186, 76, + 185, -1,185, 254, 186, -1,255, 256, 188, -1,257, 189, 188, -1,257, 258, 189, -1,258, + 190, 189, -1,190, 258, 259, -1,190, 259, 191, -1,189, 190, 81, -1,80, 188, 189, -1, + 191, 260, 192, -1,192, 260, 261, -1,262, 194, 263, -1,261, 263, 193, -1,86, 262, + 264, -1,260, 191, 259, -1,190, 191, 82, -1,80, 79, 188, -1,83, 191, 192, -1,189, + 81, 80, -1,81, 190, 82, -1,82, 191, 83, -1,192, 84, 83, -1,85, 84, 193, -1,193, 84, + 192, -1,194, 193, 263, -1,85, 193, 194, -1,86, 85, 194, -1,86, 194, 262, -1,264, + 87, 86, -1,192, 261, 193, -1,188, 256, 257, -1,265, 264, 266, -1,195, 267, 196, -1, + 267, 195, 266, -1,196, 267, 268, -1,195, 196, 89, -1,88, 266, 195, -1,268, 269, 197, -1, + 197, 269, 198, -1,270, 199, 271, -1,269, 271, 198, -1,200, 270, 272, -1,268, 197, + 196, -1,196, 197, 90, -1,266, 88, 265, -1,91, 197, 198, -1,195, 89, 88, -1,89, 196, + 90, -1,90, 197, 91, -1,198, 92, 91, -1,199, 200, 93, -1,200, 199, 270, -1,201, 200, + 272, -1,200, 201, 94, -1,93, 92, 199, -1,94, 93, 200, -1,201, 95, 94, -1,199, 92, + 198, -1,198, 271, 199, -1,272, 273, 201, -1,274, 202, 201, -1,274, 275, 202, -1,275, + 203, 202, -1,203, 275, 276, -1,203, 276, 204, -1,202, 203, 97, -1,96, 201, 202, -1, + 204, 277, 205, -1,205, 277, 278, -1,279, 207, 280, -1,278, 280, 206, -1,102, 279, + 281, -1,277, 204, 276, -1,203, 204, 98, -1,96, 95, 201, -1,99, 204, 205, -1,202, + 97, 96, -1,97, 203, 98, -1,98, 204, 99, -1,205, 100, 99, -1,101, 100, 206, -1,206, + 100, 205, -1,207, 206, 280, -1,101, 206, 207, -1,102, 101, 207, -1,102, 207, 279, -1, + 281, 103, 102, -1,205, 278, 206, -1,201, 273, 274, -1,282, 283, 284, -1,284, 285, + 286, -1,284, 283, 287, -1,288, 289, 290, -1,287, 290, 289, -1,289, 284, 287, -1,291, + 284, 289, -1,292, 285, 293, -1,294, 293, 285, -1,285, 291, 294, -1,295, 296, 291, -1, + 291, 296, 294, -1,284, 291, 285, -1,291, 297, 298, -1,291, 289, 299, -1,297, 291, + 299, -1,300, 301, 299, -1,302, 299, 301, -1,302, 303, 304, -1,305, 304, 303, -1,302, + 304, 299, -1,306, 299, 304, -1,307, 308, 297, -1,309, 297, 308, -1,307, 297, 306, -1, + 306, 310, 307, -1,311, 310, 306, -1,297, 299, 306, -1,304, 312, 306, -1,299, 289, + 313, -1,386, 385, 324, -1,384, 324, 385, -1,386, 324, 323, -1,324, 384, 383, -1,383, + 382, 324, -1,387, 386, 323, -1,399, 322, 321, -1,323, 322, 389, -1,399, 398, 322, -1, + 389, 322, 390, -1,388, 323, 389, -1,388, 387, 323, -1,400, 399, 321, -1,325, 382, + 381, -1,325, 381, 380, -1,326, 379, 378, -1,380, 379, 325, -1,392, 371, 393, -1,325, + 324, 382, -1,398, 391, 390, -1,397, 391, 398, -1,322, 398, 390, -1,392, 397, 396, -1, + 391, 397, 392, -1,342, 392, 396, -1,378, 393, 370, -1,321, 320, 402, -1,320, 403, + 402, -1,343, 396, 395, -1,400, 321, 401, -1,405, 404, 320, -1,403, 320, 404, -1,406, + 405, 320, -1,319, 408, 407, -1,319, 406, 320, -1,407, 406, 319, -1,401, 321, 402, -1, + 330, 345, 408, -1,394, 409, 345, -1,408, 319, 330, -1,394, 345, 344, -1,395, 394, + 344, -1,344, 343, 395, -1,332, 331, 319, -1,330, 319, 331, -1,318, 332, 319, -1,318, + 334, 333, -1,335, 334, 318, -1,332, 318, 333, -1,345, 409, 408, -1,342, 396, 343, -1, + 325, 379, 326, -1,369, 327, 326, -1,368, 327, 369, -1,370, 369, 326, -1,327, 368, + 367, -1,327, 367, 366, -1,366, 328, 327, -1,342, 372, 392, -1,371, 392, 372, -1,351, + 374, 373, -1,350, 374, 351, -1,372, 351, 373, -1,371, 370, 393, -1,372, 352, 351, -1, + 328, 365, 364, -1,328, 364, 363, -1,362, 377, 329, -1,363, 362, 328, -1,328, 362, + 329, -1,328, 366, 365, -1,314, 374, 350, -1,314, 375, 374, -1,376, 375, 329, -1,349, + 314, 350, -1,329, 375, 314, -1,329, 377, 376, -1,314, 349, 315, -1,352, 341, 353, -1, + 353, 341, 340, -1,340, 354, 353, -1,339, 354, 340, -1,352, 342, 341, -1,355, 354, + 339, -1,318, 317, 336, -1,317, 338, 337, -1,339, 338, 356, -1,336, 317, 337, -1,317, + 356, 338, -1,335, 318, 336, -1,355, 339, 356, -1,315, 349, 348, -1,346, 315, 347, -1, + 316, 346, 361, -1,347, 315, 348, -1,317, 316, 358, -1,317, 357, 356, -1,316, 360, + 359, -1,361, 360, 316, -1,358, 316, 359, -1,357, 317, 358, -1,346, 316, 315, -1,352, + 372, 342, -1,370, 326, 378, -1,545, 410, 647, -1,647, 648, 545, -1,649, 650, 547, -1, + 545, 648, 411, -1,649, 546, 648, -1,548, 650, 651, -1,410, 545, 411, -1,649, 412, + 546, -1,412, 649, 547, -1,547, 413, 412, -1,413, 547, 548, -1,414, 413, 548, -1,547, + 650, 548, -1,546, 412, 411, -1,411, 648, 546, -1,548, 651, 549, -1,651, 550, 549, -1, + 550, 651, 652, -1,550, 551, 415, -1,551, 550, 652, -1,652, 653, 551, -1,549, 550, + 414, -1,654, 655, 553, -1,653, 654, 552, -1,653, 416, 551, -1,550, 415, 414, -1,653, + 552, 416, -1,415, 551, 416, -1,552, 417, 416, -1,417, 553, 418, -1,417, 552, 654, -1, + 418, 553, 655, -1,654, 553, 417, -1,549, 414, 548, -1,554, 656, 655, -1,655, 657, + 554, -1,657, 419, 554, -1,658, 555, 657, -1,658, 659, 556, -1,557, 659, 660, -1,656, + 554, 419, -1,658, 420, 555, -1,420, 658, 556, -1,556, 421, 420, -1,421, 556, 557, -1, + 422, 421, 557, -1,556, 659, 557, -1,555, 420, 419, -1,419, 657, 555, -1,557, 660, + 558, -1,660, 559, 558, -1,559, 660, 661, -1,559, 560, 423, -1,560, 559, 661, -1,661, + 662, 560, -1,558, 559, 422, -1,663, 562, 664, -1,664, 561, 662, -1,560, 662, 424, -1, + 559, 423, 422, -1,662, 561, 424, -1,423, 560, 424, -1,561, 425, 424, -1,425, 562, + 426, -1,425, 561, 664, -1,426, 562, 663, -1,664, 562, 425, -1,558, 422, 557, -1,665, + 492, 491, -1,492, 665, 493, -1,665, 491, 666, -1,495, 494, 665, -1,496, 495, 667, -1, + 494, 493, 665, -1,495, 665, 667, -1,666, 436, 668, -1,506, 666, 491, -1,505, 666, + 506, -1,505, 504, 666, -1,436, 504, 503, -1,436, 666, 504, -1,436, 503, 502, -1,498, + 497, 667, -1,438, 667, 669, -1,500, 499, 438, -1,438, 499, 498, -1,669, 440, 439, -1, + 667, 438, 498, -1,497, 496, 667, -1,438, 669, 439, -1,668, 436, 435, -1,501, 437, + 502, -1,502, 437, 436, -1,437, 501, 500, -1,668, 434, 670, -1,500, 438, 437, -1,435, + 434, 668, -1,512, 434, 433, -1,670, 509, 508, -1,509, 670, 510, -1,670, 508, 507, -1, + 510, 670, 434, -1,512, 433, 513, -1,434, 512, 511, -1,511, 510, 434, -1,671, 507, + 522, -1,507, 671, 670, -1,671, 522, 521, -1,521, 520, 671, -1,671, 519, 672, -1,520, + 519, 671, -1,672, 519, 518, -1,452, 517, 516, -1,516, 432, 452, -1,432, 515, 514, -1, + 431, 455, 454, -1,431, 454, 432, -1,432, 516, 515, -1,513, 433, 514, -1,454, 453, + 432, -1,517, 451, 672, -1,517, 452, 451, -1,672, 451, 450, -1,672, 449, 673, -1,450, + 449, 672, -1,432, 453, 452, -1,673, 449, 448, -1,517, 672, 518, -1,433, 432, 514, -1, + 440, 674, 476, -1,476, 674, 477, -1,440, 476, 475, -1,478, 477, 674, -1,490, 489, + 441, -1,674, 479, 478, -1,475, 490, 440, -1,440, 490, 441, -1,427, 442, 675, -1,488, + 442, 441, -1,428, 427, 675, -1,442, 488, 487, -1,489, 488, 441, -1,462, 429, 428, -1, + 674, 440, 669, -1,480, 479, 676, -1,481, 480, 676, -1,482, 676, 483, -1,676, 482, + 481, -1,677, 484, 483, -1,483, 676, 677, -1,479, 674, 676, -1,675, 678, 428, -1,486, + 677, 442, -1,442, 487, 486, -1,675, 442, 677, -1,677, 485, 484, -1,464, 463, 428, -1, + 486, 485, 677, -1,464, 428, 678, -1,462, 428, 463, -1,456, 430, 457, -1,430, 456, + 431, -1,430, 460, 459, -1,430, 429, 460, -1,473, 443, 458, -1,430, 474, 458, -1,474, + 430, 459, -1,430, 458, 457, -1,673, 447, 446, -1,673, 448, 447, -1,673, 446, 445, -1, + 444, 443, 679, -1,445, 679, 673, -1,679, 445, 444, -1,679, 443, 473, -1,455, 431, + 456, -1,460, 429, 461, -1,465, 464, 678, -1,466, 678, 467, -1,465, 678, 466, -1,471, + 680, 679, -1,473, 472, 679, -1,469, 468, 680, -1,470, 680, 471, -1,680, 470, 469, -1, + 468, 467, 680, -1,471, 679, 472, -1,678, 680, 467, -1,474, 473, 458, -1,429, 462, + 461, -1,524, 523, 563, -1,523, 681, 563, -1,564, 524, 563, -1,526, 525, 565, -1,525, + 524, 564, -1,526, 565, 566, -1,682, 563, 681, -1,683, 565, 564, -1,525, 564, 565, -1, + 565, 683, 684, -1,566, 565, 684, -1,682, 683, 564, -1,564, 563, 682, -1,527, 526, + 566, -1,567, 529, 528, -1,685, 567, 566, -1,528, 566, 567, -1,568, 529, 567, -1,527, + 566, 528, -1,530, 529, 568, -1,531, 530, 569, -1,685, 686, 567, -1,566, 687, 685, -1, + 686, 688, 568, -1,686, 568, 567, -1,689, 569, 688, -1,568, 688, 569, -1,531, 569, + 689, -1,569, 530, 568, -1,684, 687, 566, -1,532, 690, 570, -1,690, 689, 570, -1,571, + 532, 570, -1,534, 533, 572, -1,533, 532, 571, -1,534, 572, 573, -1,689, 691, 570, -1, + 692, 572, 571, -1,533, 571, 572, -1,572, 692, 693, -1,573, 572, 693, -1,691, 692, + 571, -1,571, 570, 691, -1,535, 534, 573, -1,574, 537, 536, -1,694, 574, 573, -1,536, + 573, 574, -1,575, 537, 574, -1,535, 573, 536, -1,538, 537, 575, -1,539, 538, 576, -1, + 695, 694, 573, -1,696, 575, 574, -1,696, 574, 694, -1,696, 697, 575, -1,576, 698, + 539, -1,697, 698, 576, -1,575, 697, 576, -1,576, 538, 575, -1,693, 695, 573, -1,699, + 700, 701, -1,702, 703, 701, -1,704, 705, 701, -1,706, 699, 705, -1,705, 699, 701, -1, + 705, 707, 708, -1,704, 701, 703, -1,704, 709, 705, -1,710, 711, 704, -1,709, 704, + 711, -1,712, 707, 709, -1,707, 705, 709, -1,711, 713, 709, -1,704, 703, 714, -1,715, + 716, 577, -1,716, 717, 577, -1,578, 718, 715, -1,718, 579, 719, -1,578, 715, 577, -1, + 719, 579, 580, -1,720, 577, 717, -1,721, 579, 578, -1,718, 578, 579, -1,579, 721, + 722, -1,580, 579, 722, -1,720, 721, 578, -1,578, 577, 720, -1,723, 719, 580, -1,581, + 724, 725, -1,726, 581, 580, -1,725, 580, 581, -1,582, 724, 581, -1,723, 580, 725, -1, + 582, 727, 724, -1,728, 727, 583, -1,729, 726, 580, -1,730, 582, 581, -1,730, 581, + 726, -1,730, 731, 582, -1,540, 583, 731, -1,582, 731, 583, -1,728, 583, 540, -1,583, + 727, 582, -1,722, 729, 580, -1,732, 733, 584, -1,733, 734, 584, -1,585, 735, 732, -1, + 735, 586, 736, -1,585, 732, 584, -1,736, 586, 587, -1,737, 584, 734, -1,738, 586, + 585, -1,735, 585, 586, -1,586, 738, 739, -1,587, 586, 739, -1,737, 738, 585, -1,585, + 584, 737, -1,740, 736, 587, -1,588, 741, 742, -1,743, 588, 587, -1,742, 587, 588, -1, + 589, 741, 588, -1,740, 587, 742, -1,590, 744, 745, -1,589, 745, 741, -1,746, 743, + 587, -1,747, 589, 588, -1,747, 588, 743, -1,747, 748, 589, -1,749, 590, 748, -1,589, + 748, 590, -1,744, 590, 749, -1,590, 745, 589, -1,739, 746, 587, -1,750, 751, 591, -1, + 751, 752, 591, -1,592, 750, 591, -1,753, 754, 593, -1,754, 750, 592, -1,753, 593, + 594, -1,755, 591, 752, -1,756, 593, 592, -1,754, 592, 593, -1,593, 756, 757, -1,594, + 593, 757, -1,755, 756, 592, -1,592, 591, 755, -1,758, 753, 594, -1,595, 759, 760, -1, + 761, 595, 594, -1,760, 594, 595, -1,596, 759, 595, -1,758, 594, 760, -1,762, 759, + 596, -1,763, 762, 597, -1,764, 761, 594, -1,765, 596, 595, -1,765, 595, 761, -1,765, + 766, 596, -1,541, 597, 766, -1,596, 766, 597, -1,763, 597, 541, -1,597, 762, 596, -1, + 757, 764, 594, -1,767, 768, 598, -1,768, 769, 598, -1,599, 767, 598, -1,770, 771, + 600, -1,771, 767, 599, -1,770, 600, 601, -1,772, 598, 769, -1,773, 600, 599, -1,771, + 599, 600, -1,600, 773, 774, -1,601, 600, 774, -1,772, 773, 599, -1,599, 598, 772, -1, + 775, 770, 601, -1,602, 776, 777, -1,778, 602, 601, -1,777, 601, 602, -1,603, 776, + 602, -1,775, 601, 777, -1,779, 776, 603, -1,780, 779, 604, -1,781, 778, 601, -1,782, + 603, 602, -1,782, 602, 778, -1,782, 783, 603, -1,784, 604, 783, -1,603, 783, 604, -1, + 780, 604, 784, -1,604, 779, 603, -1,774, 781, 601, -1,785, 786, 605, -1,786, 787, + 605, -1,606, 785, 605, -1,788, 789, 607, -1,789, 785, 606, -1,788, 607, 608, -1,790, + 605, 787, -1,791, 607, 606, -1,789, 606, 607, -1,607, 791, 792, -1,608, 607, 792, -1, + 790, 791, 606, -1,606, 605, 790, -1,793, 788, 608, -1,609, 794, 795, -1,796, 609, + 608, -1,795, 608, 609, -1,610, 794, 609, -1,793, 608, 795, -1,797, 794, 610, -1,798, + 797, 611, -1,799, 796, 608, -1,800, 610, 609, -1,800, 609, 796, -1,800, 801, 610, -1, + 542, 611, 801, -1,610, 801, 611, -1,798, 611, 542, -1,611, 797, 610, -1,792, 799, + 608, -1,802, 803, 612, -1,803, 804, 612, -1,613, 802, 612, -1,805, 806, 614, -1,806, + 802, 613, -1,805, 614, 615, -1,807, 612, 804, -1,808, 614, 613, -1,806, 613, 614, -1, + 614, 808, 809, -1,615, 614, 809, -1,807, 808, 613, -1,613, 612, 807, -1,810, 805, + 615, -1,616, 811, 812, -1,813, 616, 615, -1,812, 615, 616, -1,617, 811, 616, -1,810, + 615, 812, -1,814, 811, 617, -1,815, 814, 618, -1,816, 813, 615, -1,817, 617, 616, -1, + 817, 616, 813, -1,817, 818, 617, -1,819, 618, 818, -1,617, 818, 618, -1,815, 618, + 819, -1,618, 814, 617, -1,809, 816, 615, -1,820, 821, 619, -1,821, 822, 619, -1,620, + 820, 619, -1,823, 824, 621, -1,824, 820, 620, -1,823, 621, 622, -1,825, 619, 822, -1, + 826, 621, 620, -1,824, 620, 621, -1,621, 826, 827, -1,622, 621, 827, -1,825, 826, + 620, -1,620, 619, 825, -1,828, 823, 622, -1,623, 829, 830, -1,831, 623, 622, -1,830, + 622, 623, -1,624, 829, 623, -1,828, 622, 830, -1,832, 829, 624, -1,833, 832, 625, -1, + 834, 831, 622, -1,835, 624, 623, -1,835, 623, 831, -1,835, 836, 624, -1,543, 625, + 836, -1,624, 836, 625, -1,833, 625, 543, -1,625, 832, 624, -1,827, 834, 622, -1,837, + 838, 626, -1,838, 839, 626, -1,627, 837, 626, -1,840, 841, 628, -1,841, 837, 627, -1, + 840, 628, 629, -1,842, 626, 839, -1,843, 628, 627, -1,841, 627, 628, -1,628, 843, + 844, -1,629, 628, 844, -1,842, 843, 627, -1,627, 626, 842, -1,845, 840, 629, -1,630, + 846, 847, -1,848, 630, 629, -1,847, 629, 630, -1,631, 846, 630, -1,845, 629, 847, -1, + 849, 846, 631, -1,850, 849, 632, -1,851, 848, 629, -1,852, 631, 630, -1,852, 630, + 848, -1,852, 853, 631, -1,854, 632, 853, -1,631, 853, 632, -1,850, 632, 854, -1,632, + 849, 631, -1,844, 851, 629, -1,855, 856, 633, -1,856, 857, 633, -1,634, 855, 633, -1, + 858, 859, 635, -1,859, 855, 634, -1,858, 635, 636, -1,860, 633, 857, -1,861, 635, + 634, -1,859, 634, 635, -1,635, 861, 862, -1,636, 635, 862, -1,860, 861, 634, -1,634, + 633, 860, -1,863, 858, 636, -1,637, 864, 865, -1,866, 637, 636, -1,865, 636, 637, -1, + 638, 864, 637, -1,863, 636, 865, -1,867, 864, 638, -1,868, 867, 639, -1,869, 866, + 636, -1,870, 638, 637, -1,870, 637, 866, -1,870, 871, 638, -1,544, 639, 871, -1,638, + 871, 639, -1,868, 639, 544, -1,639, 867, 638, -1,862, 869, 636, -1,872, 873, 640, -1, + 873, 874, 640, -1,641, 872, 640, -1,875, 876, 642, -1,876, 872, 641, -1,875, 642, + 643, -1,877, 640, 874, -1,878, 642, 641, -1,876, 641, 642, -1,642, 878, 879, -1,643, + 642, 879, -1,877, 878, 641, -1,641, 640, 877, -1,880, 875, 643, -1,644, 881, 882, -1, + 883, 644, 643, -1,882, 643, 644, -1,645, 881, 644, -1,880, 643, 882, -1,884, 881, + 645, -1,885, 884, 646, -1,886, 883, 643, -1,887, 645, 644, -1,887, 644, 883, -1,887, + 888, 645, -1,889, 646, 888, -1,645, 888, 646, -1,885, 646, 889, -1,646, 884, 645, -1, + 879, 886, 643, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,1, 2, 3, -1,4, 3, 5, -1,6, 1, 7, -1,4, 8, 7, -1,8, 4, 5, -1, + 9, 7, 8, -1,4, 7, 1, -1,1, 3, 4, -1,6, 7, 10, -1,5, 11, 8, -1,12, 11, 13, -1,14, + 15, 16, -1,17, 16, 18, -1,19, 13, 15, -1,20, 8, 12, -1,19, 12, 13, -1,21, 19, 14, -1, + 17, 14, 16, -1,22, 17, 18, -1,23, 14, 17, -1,19, 15, 14, -1,24, 12, 19, -1,18, 25, + 22, -1,11, 12, 8, -1,26, 17, 22, -1,10, 27, 28, -1,10, 7, 27, -1,9, 20, 29, -1,20, + 9, 8, -1,29, 20, 30, -1,9, 29, 27, -1,7, 9, 27, -1,27, 29, 31, -1,32, 10, 28, -1, + 29, 33, 31, -1,31, 28, 27, -1,33, 30, 34, -1,33, 29, 30, -1,20, 24, 30, -1,35, 34, + 30, -1,35, 24, 21, -1,35, 21, 36, -1,23, 21, 14, -1,26, 23, 17, -1,37, 21, 23, -1, + 24, 19, 21, -1,37, 23, 26, -1,35, 38, 34, -1,38, 35, 36, -1,38, 36, 39, -1,39, 37, + 40, -1,37, 39, 36, -1,41, 40, 37, -1,36, 21, 37, -1,37, 26, 41, -1,35, 30, 24, -1, + 20, 12, 24, -1,22, 42, 26, -1,43, 42, 22, -1,44, 42, 45, -1,45, 42, 43, -1,44, 45, + 46, -1,42, 47, 26, -1,47, 44, 48, -1,44, 47, 42, -1,48, 49, 50, -1,49, 48, 44, -1, + 50, 49, 51, -1,48, 50, 52, -1,44, 46, 49, -1,47, 48, 53, -1,46, 54, 49, -1,26, 47, + 41, -1,51, 54, 55, -1,56, 55, 57, -1,51, 56, 58, -1,51, 55, 56, -1,56, 57, 59, -1, + 60, 56, 59, -1,61, 62, 63, -1,61, 63, 59, -1,61, 59, 57, -1,51, 64, 50, -1,54, 51, + 49, -1,60, 59, 63, -1,41, 65, 66, -1,41, 47, 65, -1,48, 52, 53, -1,53, 65, 47, -1, + 67, 52, 68, -1,53, 52, 69, -1,52, 50, 64, -1,65, 53, 70, -1,66, 71, 41, -1,69, 70, + 53, -1,67, 69, 52, -1,66, 65, 70, -1,52, 64, 68, -1,41, 71, 40, -1,72, 68, 58, -1, + 58, 68, 64, -1,60, 73, 74, -1,73, 60, 63, -1,75, 58, 60, -1,58, 56, 60, -1,75, 60, + 74, -1,76, 72, 77, -1,72, 76, 68, -1,77, 72, 75, -1,74, 78, 75, -1,78, 74, 79, -1, + 75, 78, 77, -1,72, 58, 75, -1,68, 76, 67, -1,64, 51, 58, -1,22, 25, 43, -1,80, 62, + 81, -1,82, 81, 83, -1,84, 80, 85, -1,82, 86, 85, -1,86, 82, 83, -1,87, 85, 86, -1, + 82, 85, 80, -1,80, 81, 82, -1,84, 85, 88, -1,83, 89, 86, -1,90, 89, 91, -1,92, 93, + 94, -1,95, 94, 96, -1,97, 91, 93, -1,98, 86, 90, -1,97, 90, 91, -1,99, 97, 92, -1, + 95, 92, 94, -1,100, 95, 96, -1,101, 92, 95, -1,97, 93, 92, -1,102, 90, 97, -1,96, + 103, 100, -1,89, 90, 86, -1,104, 95, 100, -1,88, 105, 106, -1,88, 85, 105, -1,87, + 98, 107, -1,98, 87, 86, -1,107, 98, 108, -1,87, 107, 105, -1,85, 87, 105, -1,105, + 107, 109, -1,110, 88, 106, -1,107, 111, 109, -1,109, 106, 105, -1,111, 108, 112, -1, + 111, 107, 108, -1,98, 102, 108, -1,113, 112, 108, -1,113, 102, 99, -1,113, 99, 114, -1, + 101, 99, 92, -1,104, 101, 95, -1,115, 99, 101, -1,102, 97, 99, -1,115, 101, 104, -1, + 113, 116, 112, -1,116, 113, 114, -1,116, 114, 117, -1,117, 115, 118, -1,115, 117, + 114, -1,119, 118, 115, -1,114, 99, 115, -1,115, 104, 119, -1,113, 108, 102, -1,98, + 90, 102, -1,100, 120, 104, -1,121, 120, 100, -1,122, 120, 123, -1,123, 120, 121, -1, + 122, 123, 124, -1,120, 125, 104, -1,125, 122, 126, -1,122, 125, 120, -1,126, 127, + 128, -1,127, 126, 122, -1,128, 127, 129, -1,126, 128, 130, -1,122, 124, 127, -1,125, + 126, 131, -1,124, 132, 127, -1,104, 125, 119, -1,129, 132, 133, -1,134, 133, 135, -1, + 129, 134, 136, -1,129, 133, 134, -1,134, 135, 137, -1,138, 134, 137, -1,139, 140, + 141, -1,139, 141, 137, -1,139, 137, 135, -1,129, 142, 128, -1,132, 129, 127, -1,138, + 137, 141, -1,119, 143, 144, -1,119, 125, 143, -1,126, 130, 131, -1,131, 143, 125, -1, + 145, 130, 146, -1,131, 130, 147, -1,130, 128, 142, -1,143, 131, 148, -1,144, 149, + 119, -1,147, 148, 131, -1,145, 147, 130, -1,144, 143, 148, -1,130, 142, 146, -1,119, + 149, 118, -1,150, 146, 136, -1,136, 146, 142, -1,138, 151, 152, -1,151, 138, 141, -1, + 153, 136, 138, -1,136, 134, 138, -1,153, 138, 152, -1,154, 150, 155, -1,150, 154, + 146, -1,155, 150, 153, -1,152, 156, 153, -1,156, 152, 157, -1,153, 156, 155, -1,150, + 136, 153, -1,146, 154, 145, -1,142, 129, 136, -1,100, 103, 121, -1,158, 158, 159, -1, + 160, 161, 162, -1,161, 160, 159, -1,162, 161, 163, -1,160, 162, 164, -1,165, 159, + 160, -1,163, 166, 167, -1,167, 166, 168, -1,169, 170, 171, -1,166, 171, 168, -1,172, + 169, 173, -1,163, 167, 162, -1,162, 167, 174, -1,159, 165, 158, -1,175, 167, 168, -1, + 160, 164, 165, -1,164, 162, 174, -1,174, 167, 175, -1,168, 176, 175, -1,170, 172, + 177, -1,172, 170, 169, -1,178, 172, 173, -1,172, 178, 179, -1,177, 176, 170, -1,179, + 177, 172, -1,178, 180, 179, -1,170, 176, 168, -1,168, 171, 170, -1,173, 180, 178, -1, + 181, 182, 178, -1,181, 183, 182, -1,183, 184, 182, -1,184, 183, 185, -1,184, 185, + 186, -1,182, 184, 187, -1,188, 178, 182, -1,186, 189, 190, -1,190, 189, 191, -1,192, + 193, 194, -1,191, 194, 195, -1,196, 192, 197, -1,189, 186, 185, -1,184, 186, 198, -1, + 188, 180, 178, -1,199, 186, 190, -1,182, 187, 188, -1,187, 184, 198, -1,198, 186, + 199, -1,190, 200, 199, -1,201, 200, 195, -1,195, 200, 190, -1,193, 195, 194, -1,201, + 195, 193, -1,196, 201, 193, -1,196, 193, 192, -1,197, 202, 196, -1,190, 191, 195, -1, + 178, 180, 181, -1,203, 197, 204, -1,205, 206, 207, -1,206, 205, 204, -1,207, 206, + 208, -1,205, 207, 209, -1,210, 204, 205, -1,208, 211, 212, -1,212, 211, 213, -1,214, + 215, 216, -1,211, 216, 213, -1,217, 214, 218, -1,208, 212, 207, -1,207, 212, 219, -1, + 204, 210, 203, -1,220, 212, 213, -1,205, 209, 210, -1,209, 207, 219, -1,219, 212, + 220, -1,213, 221, 220, -1,215, 217, 222, -1,217, 215, 214, -1,223, 217, 218, -1,217, + 223, 224, -1,222, 221, 215, -1,224, 222, 217, -1,223, 225, 224, -1,215, 221, 213, -1, + 213, 216, 215, -1,218, 225, 223, -1,226, 227, 223, -1,226, 228, 227, -1,228, 229, + 227, -1,229, 228, 230, -1,229, 230, 231, -1,227, 229, 232, -1,233, 223, 227, -1,231, + 234, 235, -1,235, 234, 236, -1,237, 238, 239, -1,236, 239, 240, -1,241, 237, 242, -1, + 234, 231, 230, -1,229, 231, 243, -1,233, 225, 223, -1,244, 231, 235, -1,227, 232, + 233, -1,232, 229, 243, -1,243, 231, 244, -1,235, 245, 244, -1,246, 245, 240, -1,240, + 245, 235, -1,238, 240, 239, -1,246, 240, 238, -1,241, 246, 238, -1,241, 238, 237, -1, + 242, 242, 241, -1,235, 236, 240, -1,223, 225, 226, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1, + 247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, + 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, 247, 247, -1,247, + 247, 247, -1,247, 247, 247, -1,248, 249, 250, -1,250, 251, 248, -1,252, 253, 254, -1, + 248, 251, 255, -1,252, 256, 251, -1,257, 253, 258, -1,249, 248, 255, -1,252, 259, + 256, -1,259, 252, 254, -1,254, 260, 259, -1,260, 254, 257, -1,261, 260, 257, -1,254, + 253, 257, -1,256, 259, 255, -1,255, 251, 256, -1,257, 258, 225, -1,258, 262, 225, -1, + 262, 258, 263, -1,262, 264, 265, -1,264, 262, 263, -1,263, 266, 264, -1,225, 262, + 261, -1,267, 268, 269, -1,266, 267, 270, -1,266, 271, 264, -1,262, 265, 261, -1,266, + 270, 271, -1,265, 264, 271, -1,270, 272, 271, -1,272, 269, 273, -1,272, 270, 267, -1, + 273, 269, 268, -1,267, 269, 272, -1,225, 261, 257, -1,274, 275, 268, -1,268, 276, + 274, -1,276, 277, 274, -1,278, 279, 276, -1,278, 280, 281, -1,282, 280, 283, -1,275, + 274, 277, -1,278, 284, 279, -1,284, 278, 281, -1,281, 285, 284, -1,285, 281, 282, -1, + 286, 285, 282, -1,281, 280, 282, -1,279, 284, 277, -1,277, 276, 279, -1,282, 283, + 180, -1,283, 287, 180, -1,287, 283, 288, -1,287, 289, 290, -1,289, 287, 288, -1,288, + 291, 289, -1,180, 287, 286, -1,292, 293, 294, -1,294, 295, 291, -1,289, 291, 296, -1, + 287, 290, 286, -1,291, 295, 296, -1,290, 289, 296, -1,295, 297, 296, -1,297, 293, + 298, -1,297, 295, 294, -1,298, 293, 292, -1,294, 293, 297, -1,180, 286, 282, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,299, 300, 301, -1,300, 302, 301, -1,303, 299, + 301, -1,304, 305, 306, -1,305, 299, 303, -1,304, 306, 307, -1,308, 301, 302, -1,309, + 306, 303, -1,305, 303, 306, -1,306, 309, 310, -1,307, 306, 310, -1,308, 309, 303, -1, + 303, 301, 308, -1,180, 304, 307, -1,311, 312, 313, -1,314, 311, 307, -1,313, 307, + 311, -1,315, 312, 311, -1,180, 307, 313, -1,316, 312, 315, -1,317, 316, 318, -1,314, + 319, 311, -1,307, 180, 314, -1,319, 320, 315, -1,319, 315, 311, -1,321, 318, 320, -1, + 315, 320, 318, -1,317, 318, 321, -1,318, 316, 315, -1,310, 180, 307, -1,322, 323, + 324, -1,323, 321, 324, -1,325, 322, 324, -1,326, 327, 328, -1,327, 322, 325, -1,326, + 328, 329, -1,321, 330, 324, -1,331, 328, 325, -1,327, 325, 328, -1,328, 331, 332, -1, + 329, 328, 332, -1,330, 331, 325, -1,325, 324, 330, -1,225, 326, 329, -1,333, 334, + 335, -1,336, 333, 329, -1,335, 329, 333, -1,337, 334, 333, -1,225, 329, 335, -1,338, + 334, 337, -1,339, 338, 340, -1,225, 336, 329, -1,341, 337, 333, -1,341, 333, 336, -1, + 341, 342, 337, -1,340, 343, 339, -1,342, 343, 340, -1,337, 342, 340, -1,340, 338, + 337, -1,332, 225, 329, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,344, 345, 346, -1,345, 347, 346, -1,348, 349, 344, -1,349, + 350, 351, -1,348, 344, 346, -1,351, 350, 352, -1,353, 346, 347, -1,354, 350, 348, -1, + 349, 348, 350, -1,350, 354, 355, -1,352, 350, 355, -1,353, 354, 348, -1,348, 346, + 353, -1,180, 351, 352, -1,356, 357, 358, -1,359, 356, 352, -1,358, 352, 356, -1,360, + 357, 356, -1,180, 352, 358, -1,360, 361, 357, -1,362, 361, 363, -1,180, 359, 352, -1, + 364, 360, 356, -1,364, 356, 359, -1,364, 365, 360, -1,366, 363, 365, -1,360, 365, + 363, -1,362, 363, 366, -1,363, 361, 360, -1,355, 180, 352, -1,367, 368, 369, -1,368, + 370, 369, -1,371, 372, 367, -1,372, 373, 374, -1,371, 367, 369, -1,374, 373, 375, -1, + 376, 369, 370, -1,377, 373, 371, -1,372, 371, 373, -1,373, 377, 378, -1,375, 373, + 378, -1,376, 377, 371, -1,371, 369, 376, -1,225, 374, 375, -1,379, 380, 381, -1,382, + 379, 375, -1,381, 375, 379, -1,383, 380, 379, -1,225, 375, 381, -1,384, 385, 386, -1, + 383, 386, 380, -1,225, 382, 375, -1,387, 383, 379, -1,387, 379, 382, -1,387, 388, + 383, -1,389, 384, 388, -1,383, 388, 384, -1,385, 384, 389, -1,384, 386, 383, -1,378, + 225, 375, -1,390, 391, 392, -1,391, 393, 392, -1,394, 390, 392, -1,395, 396, 397, -1, + 396, 390, 394, -1,395, 397, 398, -1,399, 392, 393, -1,400, 397, 394, -1,396, 394, + 397, -1,397, 400, 401, -1,398, 397, 401, -1,399, 400, 394, -1,394, 392, 399, -1,402, + 395, 398, -1,403, 404, 405, -1,406, 403, 398, -1,405, 398, 403, -1,407, 404, 403, -1, + 402, 398, 405, -1,408, 404, 407, -1,409, 408, 410, -1,402, 406, 398, -1,411, 407, + 403, -1,411, 403, 406, -1,411, 412, 407, -1,413, 410, 412, -1,407, 412, 410, -1,409, + 410, 413, -1,410, 408, 407, -1,401, 402, 398, -1,414, 415, 416, -1,415, 417, 416, -1, + 418, 414, 416, -1,419, 420, 421, -1,420, 414, 418, -1,419, 421, 422, -1,423, 416, + 417, -1,424, 421, 418, -1,420, 418, 421, -1,421, 424, 425, -1,422, 421, 425, -1,423, + 424, 418, -1,418, 416, 423, -1,426, 419, 422, -1,427, 428, 429, -1,430, 427, 422, -1, + 429, 422, 427, -1,431, 428, 427, -1,426, 422, 429, -1,432, 428, 431, -1,433, 432, + 434, -1,426, 430, 422, -1,435, 431, 427, -1,435, 427, 430, -1,435, 436, 431, -1,437, + 434, 436, -1,431, 436, 434, -1,433, 434, 437, -1,434, 432, 431, -1,425, 426, 422, -1, + 390, 391, 392, -1,391, 393, 392, -1,438, 390, 392, -1,439, 440, 441, -1,440, 390, + 438, -1,439, 441, 442, -1,399, 392, 393, -1,443, 441, 438, -1,440, 438, 441, -1,441, + 443, 444, -1,442, 441, 444, -1,399, 443, 438, -1,438, 392, 399, -1,402, 439, 442, -1, + 445, 446, 447, -1,448, 445, 442, -1,447, 442, 445, -1,449, 446, 445, -1,402, 442, + 447, -1,408, 446, 449, -1,409, 408, 410, -1,402, 448, 442, -1,450, 449, 445, -1,450, + 445, 448, -1,450, 412, 449, -1,413, 410, 412, -1,449, 412, 410, -1,409, 410, 413, -1, + 410, 408, 449, -1,444, 402, 442, -1,451, 452, 453, -1,452, 454, 453, -1,455, 451, + 453, -1,456, 457, 458, -1,457, 451, 455, -1,456, 458, 422, -1,459, 453, 454, -1,460, + 458, 455, -1,457, 455, 458, -1,458, 460, 461, -1,422, 458, 461, -1,459, 460, 455, -1, + 455, 453, 459, -1,426, 456, 422, -1,462, 463, 464, -1,465, 462, 422, -1,464, 422, + 462, -1,466, 463, 462, -1,426, 422, 464, -1,467, 463, 466, -1,468, 467, 469, -1,426, + 465, 422, -1,470, 466, 462, -1,470, 462, 465, -1,470, 471, 466, -1,472, 469, 471, -1, + 466, 471, 469, -1,468, 469, 472, -1,469, 467, 466, -1,461, 426, 422, -1,473, 474, + 475, -1,474, 476, 475, -1,477, 473, 475, -1,478, 479, 480, -1,479, 473, 477, -1,478, + 480, 481, -1,482, 475, 476, -1,483, 480, 477, -1,479, 477, 480, -1,480, 483, 484, -1, + 481, 480, 484, -1,482, 483, 477, -1,477, 475, 482, -1,485, 478, 481, -1,486, 487, + 488, -1,489, 486, 481, -1,488, 481, 486, -1,490, 487, 486, -1,485, 481, 488, -1,491, + 487, 490, -1,492, 491, 493, -1,485, 489, 481, -1,494, 490, 486, -1,494, 486, 489, -1, + 494, 495, 490, -1,496, 493, 495, -1,490, 495, 493, -1,492, 493, 496, -1,493, 491, + 490, -1,484, 485, 481, -1,497, 498, 499, -1,498, 500, 499, -1,501, 497, 499, -1,502, + 503, 504, -1,503, 497, 501, -1,502, 504, 505, -1,506, 499, 500, -1,507, 504, 501, -1, + 503, 501, 504, -1,504, 507, 508, -1,505, 504, 508, -1,506, 507, 501, -1,501, 499, + 506, -1,509, 502, 505, -1,510, 511, 512, -1,513, 510, 505, -1,512, 505, 510, -1,514, + 511, 510, -1,509, 505, 512, -1,515, 511, 514, -1,516, 515, 517, -1,509, 513, 505, -1, + 518, 514, 510, -1,518, 510, 513, -1,518, 519, 514, -1,520, 517, 519, -1,514, 519, + 517, -1,516, 517, 520, -1,517, 515, 514, -1,508, 509, 505, -1,473, 474, 475, -1,474, + 476, 475, -1,521, 473, 475, -1,522, 523, 524, -1,523, 473, 521, -1,522, 524, 525, -1, + 482, 475, 476, -1,526, 524, 521, -1,523, 521, 524, -1,524, 526, 527, -1,525, 524, + 527, -1,482, 526, 521, -1,521, 475, 482, -1,485, 522, 525, -1,528, 529, 530, -1,531, + 528, 525, -1,530, 525, 528, -1,532, 529, 528, -1,485, 525, 530, -1,491, 529, 532, -1, + 492, 491, 493, -1,485, 531, 525, -1,533, 532, 528, -1,533, 528, 531, -1,533, 495, + 532, -1,496, 493, 495, -1,532, 495, 493, -1,492, 493, 496, -1,493, 491, 532, -1,527, + 485, 525, -1,534, 535, 536, -1,535, 537, 536, -1,538, 534, 536, -1,539, 540, 541, -1, + 540, 534, 538, -1,539, 541, 505, -1,542, 536, 537, -1,543, 541, 538, -1,540, 538, + 541, -1,541, 543, 544, -1,505, 541, 544, -1,542, 543, 538, -1,538, 536, 542, -1,509, + 539, 505, -1,545, 546, 547, -1,548, 545, 505, -1,547, 505, 545, -1,549, 546, 545, -1, + 509, 505, 547, -1,550, 546, 549, -1,551, 550, 552, -1,509, 548, 505, -1,553, 549, + 545, -1,553, 545, 548, -1,553, 554, 549, -1,555, 552, 554, -1,549, 554, 552, -1,551, + 552, 555, -1,552, 550, 549, -1,544, 509, 505, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl/mitsubishi-rv6sl.wrl b/examples/rlsg/mitsubishi-rv6sl/mitsubishi-rv6sl.wrl new file mode 100644 index 00000000..2a651c5d --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl/mitsubishi-rv6sl.wrl @@ -0,0 +1,63 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF link0 Transform { + children [ + Inline { + url "link0.wrl" + } + ] + } + DEF link1 Transform { + rotation 1 0 0 -1.570796 + translation 0.085 0 0.35 + children [ + Inline { + url "link1.wrl" + } + ] + } + DEF link2 Transform { + rotation 0.577350 0.577350 0.577350 -2.094395 + translation 0.085 0 0.73 + children [ + Inline { + url "link2.wrl" + } + ] + } + DEF link3 Transform { + rotation 0 0 1 3.141593 + translation -0.015 0 0.73 + children [ + Inline { + url "link3.wrl" + } + ] + } + DEF link4 Transform { + rotation 0 0.70710677 0.70710677 3.1415927 + translation -0.015 0 1.155 + children [ + Inline { + url "link4.wrl" + } + ] + } + DEF link5 Transform { + translation -0.015 0 1.155 + children [ + Inline { + url "link5.wrl" + } + ] + } + DEF link6 Transform { + translation -0.015 0 1.24 + children [ + Inline { + url "link6.wrl" + } + ] + } ] +} diff --git a/examples/rlsg/mitsubishi-rv6sl_boxes.convex.wrl b/examples/rlsg/mitsubishi-rv6sl_boxes.convex.wrl new file mode 100644 index 00000000..4cf9bb98 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl_boxes.convex.wrl @@ -0,0 +1,14 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF mitsubishi-rv6sl Transform { + children [ + Inline { + url "mitsubishi-rv6sl.convex/mitsubishi-rv6sl.wrl" + } ] + } + DEF boxes Inline { + url "boxes.wrl" + } ] +} + diff --git a/examples/rlsg/mitsubishi-rv6sl_boxes.convex.xml b/examples/rlsg/mitsubishi-rv6sl_boxes.convex.xml new file mode 100644 index 00000000..e706d2d3 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl_boxes.convex.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/mitsubishi-rv6sl_boxes.wrl b/examples/rlsg/mitsubishi-rv6sl_boxes.wrl new file mode 100644 index 00000000..145d55aa --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl_boxes.wrl @@ -0,0 +1,14 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF mitsubishi-rv6sl Transform { + children [ + Inline { + url "mitsubishi-rv6sl/mitsubishi-rv6sl.wrl" + } ] + } + DEF boxes Inline { + url "boxes.wrl" + } ] +} + diff --git a/examples/rlsg/mitsubishi-rv6sl_boxes.xml b/examples/rlsg/mitsubishi-rv6sl_boxes.xml new file mode 100644 index 00000000..e03f8bc9 --- /dev/null +++ b/examples/rlsg/mitsubishi-rv6sl_boxes.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/rlsg.xsd b/examples/rlsg/rlsg.xsd new file mode 100644 index 00000000..996825f2 --- /dev/null +++ b/examples/rlsg/rlsg.xsd @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/scene.wrl b/examples/rlsg/scene.wrl new file mode 100644 index 00000000..afbbb07a --- /dev/null +++ b/examples/rlsg/scene.wrl @@ -0,0 +1,44 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF model1 Transform { + children [ + DEF body1 Transform { + translation -1 0 0 + children [ + DEF shape1 Shape { + appearance Appearance { + material Material { + diffuseColor 1.0 1.0 0.0 + } + } + geometry Box { + size 1.5 1.5 1.5 + } + } + ] + } + ] + } + DEF model2 Transform { + children [ + DEF body2 Transform { + translation 1 0 0 + children [ + DEF shape2 Shape { + appearance Appearance { + material Material { + diffuseColor 1.0 1.0 0.0 + } + } + geometry Box { + size 1.5 1.5 1.5 + } + } + ] + } + ] + } + ] +} + diff --git a/examples/rlsg/scene.xml b/examples/rlsg/scene.xml new file mode 100644 index 00000000..c1257e3b --- /dev/null +++ b/examples/rlsg/scene.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/examples/rlsg/staeubli-tx60l.convex/link0.wrl b/examples/rlsg/staeubli-tx60l.convex/link0.wrl new file mode 100644 index 00000000..b74d95cc --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link0.wrl @@ -0,0 +1,489 @@ +#VRML V2.0 utf8 + + +DEF link0 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.022263 -0.097946003 1.9748923e-12, + -0.082503997 0.095215 -2.8174305e-12, + -0.082503997 -0.095215 -2.2418322e-12, + -0.072356999 -0.048351001 0.18649299, + 0.049679 -0.074348003 0.095252998, + 0.049885001 -0.077072002 0.0040000002, + 0.048351001 -0.072356999 0.18649299, + 0.034217998 -0.082611002 0.095252998, + 0.038341999 -0.083420001 0.0040000002, + -0.055008002 -0.113434 0.029294999, + -0.062103 0.100082 -7.6836437e-12, + -0.065498002 0.095000997 -7.9504623e-12, + -0.086654998 -0.012335 0.16734301, + -0.082092002 -0.095650002 0.028864, + -6.0115606e-12 -0.087029003 0.18649299, + -0.016581999 -0.083365999 0.18949901, + -2.7413321e-12 -0.036922 0.195999, + -2.4587533e-12 -0.084999003 0.18949901, + 0.105003 -0.0055 -6.5193896e-12, + 0.084174998 -0.0092390003 -8.0440767e-12, + 0.115402 0.019920001 0.028820001, + 0.034217998 0.082611002 0.095252998, + 0.049679 0.074348003 0.095252998, + 0.060401998 0.069137998 0.0040000002, + 0.049885001 0.077072002 0.0040000002, + 0.048351001 0.072356999 0.18649299, + -0.053490002 0.113853 1.4376873e-12, + 0.038341999 0.083420001 0.0040000002, + 0.026007 0.088042997 0.0040000002, + -0.054512002 0.114235 -6.8537693e-12, + 0.033302002 0.080406003 0.18649299, + -0.081009001 0.097534001 0.029129, + -0.081084996 0.097617999 0.028376, + -0.081726 0.096686997 0.029049, + -0.087448001 0.003543 0.167633, + -0.087265 -0.0067050001 0.167557, + -0.081726 -0.096686997 0.029049, + -0.075416997 -0.101913 0.029129, + -0.069595002 -0.10598 0.029129, + -0.081084996 -0.097617999 0.028376, + -0.075484999 -0.102005 0.028376, + -0.081505001 -0.098236002 -8.1049568e-12, + -0.061539002 -0.061539002 0.18649299, + -0.055594999 -0.113617 0.028431, + -0.0546 -0.113869 0.014295, + -0.055588 -0.113617 0.028433001, + -0.053828999 -0.11319 0.028589001, + -0.055594999 -0.113991 0.014295, + -0.055592 -0.114365 -1.9117988e-12, + 0.026007 -0.088042997 0.0040000002, + -0.053490002 -0.113853 -6.1191252e-12, + -0.075705998 -0.10231 0.014188, + -0.069862001 -0.106384 0.014188, + -0.069656 -0.106071 0.028376, + -0.055794001 -0.113487 0.029205, + -0.016976999 -0.085358001 0.18649299, + -0.057308 -0.113091 0.029129, + -0.063552998 -0.109711 0.029129, + -0.056572001 -0.113373 0.029147999, + -0.033302002 -0.080406003 0.18649299, + -0.048351001 -0.072356999 0.18649299, + 0.016976999 -0.085358001 0.18649299, + 0.033302002 -0.080406003 0.18649299, + 0.016581999 -0.083365999 0.18949901, + 0.115852 0.020529 -1.5165169e-12, + 0.118713 0.0086049996 -2.0756775e-12, + 0.107101 0.0050809998 -6.3200981e-12, + 0.095000997 0.028723 -6.5447526e-12, + -0.022263 0.097946003 -5.9496535e-12, + 0.061539002 0.061539002 0.18649299, + -0.082001001 0.097075999 0.014179, + -0.081786998 0.096763998 0.028365999, + -0.082351997 0.096015997 0.014162, + -0.082565002 0.096321002 4.1869299e-12, + -0.081505001 0.098236002 2.594998e-12, + -0.075889997 0.102631 -3.5846456e-12, + -0.081298999 0.097930998 0.014188, + -0.082213998 0.097382002 -3.8375319e-12, + 0.083365999 -0.016581999 0.18949901, + 0.047222 -0.070679002 0.18949901, + -0.085358001 -0.016976999 0.18649299, + -0.080406003 -0.033302002 0.18649299, + -0.070679002 -0.047222 0.18949901, + -0.083365999 -0.016581999 0.18949901, + -0.078529 -0.032528002 0.18949901, + -0.087029003 -5.8405234e-12 0.18649299, + -0.086448997 0.013738 0.16726699, + -0.087448001 0.0036569999 0.167633, + -0.082138002 0.095711 0.028348999, + -0.082092002 0.095650002 0.028864, + -0.082001001 -0.097075999 0.014179, + -0.081298999 -0.097930998 0.014188, + -0.082213998 -0.097382002 7.6730532e-12, + -0.081786998 -0.096763998 0.028365999, + -0.082138002 -0.095711 0.028348999, + -0.082351997 -0.096015997 0.014162, + -0.082565002 -0.096321002 5.5744047e-12, + -0.057362001 -0.113197 0.028376, + -0.056499001 -0.113518 0.028388999, + -0.056674998 -0.114235 -4.3583475e-12, + -0.063969001 -0.110458 5.3161108e-12, + -0.057697002 -0.113861 -2.2501428e-12, + -0.070037998 -0.106712 -2.7828256e-12, + -0.063796997 -0.11013 0.014188, + -0.057528999 -0.113533 0.014187, + 0.083365999 0.016581999 0.18949901, + 0.11834 0.0085789999 0.014328, + 0.117844 0.0085490001 0.029398, + 0.085358001 0.016976999 0.18649299, + 0.117966 0.0085540004 0.028643001, + 0.116806 0.019602001 -3.239185e-12, + 0.116211 0.019145999 0.028704001, + 0.047222 0.070679002 0.18949901, + -0.072356999 0.048351001 0.18649299, + -0.080406003 0.033302002 0.18649299, + -0.048351001 0.072356999 0.18649299, + -0.075416997 0.101913 0.029129, + -0.075705998 0.10231 0.014188, + -0.057697002 0.113861 3.1925582e-12, + -0.057308 0.113091 0.029129, + 0.034111001 -0.01413 0.195999, + 0.026108 -0.026108 0.195999, + 0.060104001 -0.060104001 0.18949901, + 0.01413 -0.034111001 0.195999, + 0.032528002 -0.078529 0.18949901, + 0.0072030001 -0.036212999 0.195999, + 0.020514 -0.030701 0.195999, + -0.01413 -0.034111001 0.195999, + -0.0072030001 -0.036212999 0.195999, + -0.047222 -0.070679002 0.18949901, + -0.032528002 -0.078529 0.18949901, + -0.036922 4.3024577e-12 0.195999, + -0.036212999 -0.0072030001 0.195999, + -0.083365999 0.016581999 0.18949901, + -0.084999003 -1.2502346e-12 0.18949901, + -0.036212999 0.0072030001 0.195999, + -0.085358001 0.016976999 0.18649299, + 0.036922 -6.101297e-12 0.195999, + 0.084999003 3.0118109e-12 0.18949901, + 0.070679002 0.047222 0.18949901, + 0.060104001 0.060104001 0.18949901, + 0.116249 0.018887 0.029479999, + 0.072356999 0.048351001 0.18649299, + 0.080406003 0.033302002 0.18649299, + 0.116219 0.019136 0.028702, + 0.114677 -0.021167999 -4.034465e-12, + 0.078529 -0.032528002 0.18949901, + 0.070679002 -0.047222 0.18949901, + -0.055592 0.114365 -5.3648045e-12, + -0.054680001 0.11351 0.0285, + -0.033302002 0.080406003 0.18649299, + 9.1603938e-13 0.087029003 0.18649299, + -0.016976999 0.085358001 0.18649299, + -0.016581999 0.083365999 0.18949901, + 0.030701 -0.020514 0.195999, + 0.036212999 -0.0072030001 0.195999, + 0.036212999 0.0072030001 0.195999, + 0.030701 0.020514 0.195999, + 0.078529 0.032528002 0.18949901, + -0.061539002 0.061539002 0.18649299, + -0.078529 0.032528002 0.18949901, + -0.070679002 0.047222 0.18949901, + -0.063610002 0.10981 0.028376, + -0.057362001 0.113197 0.028376, + -0.063552998 0.109711 0.029129, + -0.063796997 0.11013 0.014188, + -0.057528999 0.113533 0.014187, + -0.069595002 0.10598 0.029129, + -0.069656 0.106071 0.028376, + -0.069862001 0.106384 0.014188, + -0.070037998 0.106712 3.0362984e-12, + -0.026108 -0.026108 0.195999, + -0.030701 -0.020514 0.195999, + -0.020514 -0.030701 0.195999, + -0.060104001 -0.060104001 0.18949901, + 0.117104 0.017070999 0.028604999, + 0.116982 0.017059 0.02936, + 0.11673 0.018019 0.029387999, + 0.116798 0.018170999 0.028628999, + 0.117264 0.015799001 0.028612001, + 0.117844 0.017170001 6.5667918e-12, + 0.117493 0.018456001 4.5386121e-12, + 0.117844 -0.017170001 -4.4284333e-12, + 0.11834 -0.0085789999 0.014328, + 0.119003 5.0039213e-12 -4.3099426e-12, + 0.118248 3.0561387e-12 0.028656, + 0.115402 -0.019920001 0.028820001, + 0.115852 -0.020529 6.2579612e-12, + 0.061539002 -0.061539002 0.18649299, + 0.060401998 -0.069137998 0.0040000002, + 0.116806 -0.019602001 4.4229052e-12, + 0.116211 -0.019145999 0.028702, + -0.055594999 0.113617 0.028431, + -0.055594999 0.113991 0.014295, + -0.056586999 0.113869 0.014295, + -0.055588 0.113617 0.028433001, + -0.056572001 0.113373 0.029147999, + -0.055794001 0.113487 0.029205, + -0.020514 0.030701 0.195999, + -0.0072030001 0.036212999 0.195999, + -0.01413 0.034111001 0.195999, + -0.032528002 0.078529 0.18949901, + -0.047222 0.070679002 0.18949901, + -0.060104001 0.060104001 0.18949901, + -0.026108 0.026108 0.195999, + -0.030701 0.020514 0.195999, + -0.034111001 0.01413 0.195999, + -3.5211578e-12 0.036922 0.195999, + -0.034111001 -0.01413 0.195999, + 0.034111001 0.01413 0.195999, + 0.01413 0.034111001 0.195999, + 0.020514 0.030701 0.195999, + 0.026108 0.026108 0.195999, + 0.016581999 0.083365999 0.18949901, + 0.0072030001 0.036212999 0.195999, + 0.032528002 0.078529 0.18949901, + -6.7415075e-12 0.084999003 0.18949901, + 0.016976999 0.085358001 0.18649299, + 0.117493 -0.018456001 8.0725471e-13, + 0.080406003 -0.033302002 0.18649299, + 0.116982 -0.017059 0.02936, + 0.11673 -0.018019 0.029387999, + 0.117104 -0.017070999 0.028604999, + 0.117844 -0.0085490001 0.029398, + 0.117966 -0.0085540004 0.028643001, + 0.117264 -0.015799001 0.028612001, + 0.087029003 4.8092489e-12 0.18649299, + 0.085358001 -0.016976999 0.18649299, + 0.118134 -5.8596565e-12 0.029409001, + 0.116249 -0.018887 0.029479999, + 0.116219 -0.019136 0.028702, + 0.072356999 -0.048351001 0.18649299, + 0.116798 -0.018170999 0.028628999 ] + + } + coordIndex [ 73, 96, 87, -1, 0, 187, 5, -1, + 2, 41, 96, -1, 2, 96, 73, -1, + 102, 41, 99, -1, 11, 19, 41, -1, + 11, 41, 77, -1, 36, 3, 81, -1, + 82, 81, 3, -1, 145, 187, 0, -1, + 189, 5, 187, -1, 6, 189, 188, -1, + 6, 79, 62, -1, 6, 188, 79, -1, + 50, 48, 99, -1, 50, 145, 0, -1, + 50, 99, 41, -1, 50, 41, 19, -1, + 8, 5, 6, -1, 8, 6, 62, -1, + 8, 49, 50, -1, 8, 0, 5, -1, + 8, 50, 0, -1, 98, 99, 48, -1, + 67, 19, 11, -1, 68, 24, 64, -1, + 1, 77, 41, -1, 1, 41, 2, -1, + 1, 73, 77, -1, 1, 2, 73, -1, + 10, 67, 11, -1, 34, 87, 96, -1, + 34, 96, 35, -1, 92, 96, 41, -1, + 42, 3, 36, -1, 42, 82, 3, -1, + 4, 5, 189, -1, 4, 6, 5, -1, + 4, 189, 6, -1, 46, 62, 61, -1, + 46, 61, 9, -1, 7, 62, 49, -1, + 7, 8, 62, -1, 7, 49, 8, -1, + 45, 46, 9, -1, 45, 61, 14, -1, + 45, 9, 61, -1, 17, 14, 61, -1, + 17, 55, 14, -1, 66, 18, 19, -1, + 66, 19, 67, -1, 23, 64, 24, -1, + 27, 24, 68, -1, 112, 30, 215, -1, + 25, 69, 23, -1, 25, 24, 27, -1, + 25, 27, 30, -1, 25, 112, 69, -1, + 25, 30, 112, -1, 29, 68, 67, -1, + 29, 67, 10, -1, 29, 11, 77, -1, + 29, 10, 11, -1, 122, 79, 188, -1, + 122, 188, 147, -1, 118, 148, 170, -1, + 75, 117, 170, -1, 75, 170, 148, -1, + 75, 148, 29, -1, 75, 29, 77, -1, + 32, 116, 117, -1, 72, 73, 87, -1, + 72, 87, 88, -1, 89, 114, 33, -1, + 89, 33, 88, -1, 86, 88, 87, -1, + 39, 60, 42, -1, 39, 42, 36, -1, + 51, 41, 102, -1, 129, 42, 60, -1, + 95, 35, 96, -1, 95, 94, 35, -1, + 12, 80, 35, -1, 12, 94, 80, -1, + 12, 35, 94, -1, 13, 81, 80, -1, + 13, 80, 94, -1, 13, 36, 81, -1, + 13, 94, 36, -1, 47, 98, 48, -1, + 53, 38, 40, -1, 53, 40, 51, -1, + 57, 60, 38, -1, 57, 38, 53, -1, + 101, 102, 99, -1, 54, 45, 14, -1, + 54, 14, 55, -1, 59, 55, 130, -1, + 59, 129, 60, -1, 59, 130, 129, -1, + 63, 17, 61, -1, 63, 125, 17, -1, + 15, 130, 55, -1, 15, 55, 17, -1, + 15, 128, 130, -1, 15, 17, 128, -1, + 16, 125, 128, -1, 16, 128, 17, -1, + 16, 17, 125, -1, 105, 138, 108, -1, + 179, 65, 180, -1, 182, 66, 184, -1, + 182, 18, 66, -1, 182, 19, 18, -1, + 182, 50, 19, -1, 182, 145, 50, -1, + 20, 111, 64, -1, 20, 69, 111, -1, + 20, 64, 23, -1, 20, 23, 69, -1, + 142, 69, 139, -1, 142, 111, 69, -1, + 21, 28, 30, -1, 21, 27, 28, -1, + 21, 30, 27, -1, 22, 23, 24, -1, + 22, 24, 25, -1, 22, 25, 23, -1, + 26, 28, 27, -1, 26, 29, 28, -1, + 26, 27, 68, -1, 26, 68, 29, -1, + 149, 30, 28, -1, 149, 28, 29, -1, + 149, 29, 148, -1, 217, 215, 30, -1, + 217, 30, 149, -1, 202, 115, 159, -1, + 194, 148, 118, -1, 168, 117, 116, -1, + 71, 33, 32, -1, 71, 88, 33, -1, + 76, 71, 32, -1, 76, 32, 117, -1, + 113, 33, 114, -1, 31, 32, 33, -1, + 31, 33, 113, -1, 31, 113, 159, -1, + 31, 159, 115, -1, 31, 115, 116, -1, + 31, 116, 32, -1, 78, 138, 155, -1, + 78, 227, 138, -1, 154, 122, 147, -1, + 83, 134, 80, -1, 85, 80, 134, -1, + 85, 87, 34, -1, 85, 35, 80, -1, + 85, 34, 35, -1, 93, 39, 36, -1, + 93, 36, 94, -1, 37, 60, 39, -1, + 37, 39, 40, -1, 37, 38, 60, -1, + 37, 40, 38, -1, 91, 40, 39, -1, + 91, 51, 40, -1, 91, 41, 51, -1, + 91, 92, 41, -1, 91, 39, 93, -1, + 174, 82, 42, -1, 174, 42, 129, -1, + 174, 172, 82, -1, 127, 130, 128, -1, + 43, 98, 47, -1, 43, 47, 45, -1, + 43, 54, 98, -1, 43, 45, 54, -1, + 44, 46, 45, -1, 44, 45, 47, -1, + 44, 47, 48, -1, 44, 49, 62, -1, + 44, 62, 46, -1, 44, 50, 49, -1, + 44, 48, 50, -1, 52, 51, 102, -1, + 52, 53, 51, -1, 103, 97, 57, -1, + 103, 52, 102, -1, 103, 57, 53, -1, + 103, 53, 52, -1, 58, 98, 54, -1, + 58, 54, 55, -1, 58, 55, 59, -1, + 58, 97, 98, -1, 56, 57, 97, -1, + 56, 97, 58, -1, 56, 58, 59, -1, + 56, 60, 57, -1, 56, 59, 60, -1, + 124, 61, 62, -1, 124, 63, 61, -1, + 124, 62, 79, -1, 124, 125, 63, -1, + 158, 105, 108, -1, 106, 184, 65, -1, + 106, 65, 179, -1, 107, 179, 108, -1, + 183, 182, 184, -1, 190, 187, 145, -1, + 226, 138, 227, -1, 226, 108, 138, -1, + 226, 107, 108, -1, 226, 228, 107, -1, + 110, 64, 111, -1, 110, 65, 184, -1, + 110, 180, 65, -1, 110, 181, 180, -1, + 110, 184, 66, -1, 110, 66, 67, -1, + 110, 68, 64, -1, 110, 67, 68, -1, + 197, 196, 152, -1, 140, 139, 69, -1, + 140, 69, 112, -1, 150, 115, 202, -1, + 150, 119, 115, -1, 150, 152, 196, -1, + 150, 196, 119, -1, 164, 115, 119, -1, + 166, 194, 118, -1, 70, 88, 71, -1, + 70, 72, 88, -1, 70, 76, 77, -1, + 70, 71, 76, -1, 70, 77, 73, -1, + 70, 73, 72, -1, 74, 117, 75, -1, + 74, 76, 117, -1, 74, 75, 77, -1, + 74, 77, 76, -1, 146, 78, 155, -1, + 146, 154, 147, -1, 146, 227, 78, -1, + 126, 124, 79, -1, 126, 79, 122, -1, + 208, 128, 125, -1, 208, 125, 154, -1, + 160, 135, 206, -1, 84, 80, 81, -1, + 84, 83, 80, -1, 84, 81, 82, -1, + 84, 82, 172, -1, 84, 172, 208, -1, + 132, 134, 83, -1, 132, 83, 84, -1, + 132, 84, 208, -1, 136, 85, 134, -1, + 136, 160, 114, -1, 136, 86, 87, -1, + 136, 87, 85, -1, 136, 88, 86, -1, + 136, 114, 89, -1, 136, 89, 88, -1, + 90, 92, 91, -1, 90, 91, 93, -1, + 90, 93, 94, -1, 90, 94, 95, -1, + 90, 96, 92, -1, 90, 95, 96, -1, + 104, 97, 103, -1, 104, 98, 97, -1, + 104, 99, 98, -1, 104, 101, 99, -1, + 100, 102, 101, -1, 100, 103, 102, -1, + 100, 101, 104, -1, 100, 104, 103, -1, + 156, 105, 158, -1, 156, 138, 105, -1, + 109, 106, 179, -1, 109, 179, 107, -1, + 109, 107, 228, -1, 109, 184, 106, -1, + 176, 108, 179, -1, 176, 177, 108, -1, + 143, 142, 139, -1, 143, 139, 158, -1, + 143, 158, 108, -1, 143, 108, 177, -1, + 185, 109, 228, -1, 185, 184, 109, -1, + 144, 110, 111, -1, 144, 181, 110, -1, + 144, 111, 142, -1, 144, 142, 141, -1, + 195, 217, 149, -1, 151, 197, 152, -1, + 151, 217, 195, -1, 151, 195, 197, -1, + 211, 112, 215, -1, 211, 140, 112, -1, + 211, 212, 140, -1, 161, 159, 113, -1, + 161, 113, 114, -1, 161, 114, 160, -1, + 167, 115, 164, -1, 167, 116, 115, -1, + 167, 168, 116, -1, 169, 170, 117, -1, + 169, 117, 168, -1, 165, 166, 118, -1, + 165, 118, 170, -1, 163, 164, 119, -1, + 163, 119, 196, -1, 163, 196, 194, -1, + 163, 194, 166, -1, 120, 155, 154, -1, + 120, 146, 155, -1, 120, 154, 146, -1, + 121, 154, 125, -1, 121, 125, 126, -1, + 121, 122, 154, -1, 121, 126, 122, -1, + 123, 125, 124, -1, 123, 126, 125, -1, + 123, 124, 126, -1, 173, 127, 128, -1, + 173, 128, 208, -1, 173, 174, 129, -1, + 173, 129, 130, -1, 173, 130, 127, -1, + 131, 206, 135, -1, 131, 208, 206, -1, + 131, 132, 208, -1, 131, 135, 134, -1, + 131, 134, 132, -1, 133, 134, 135, -1, + 133, 135, 160, -1, 133, 136, 134, -1, + 133, 160, 136, -1, 137, 155, 138, -1, + 137, 138, 156, -1, 137, 156, 155, -1, + 157, 158, 139, -1, 157, 139, 140, -1, + 157, 140, 212, -1, 178, 141, 142, -1, + 178, 142, 143, -1, 178, 143, 177, -1, + 178, 144, 141, -1, 178, 181, 144, -1, + 225, 182, 183, -1, 218, 145, 182, -1, + 218, 190, 145, -1, 219, 146, 147, -1, + 219, 227, 146, -1, 219, 221, 227, -1, + 231, 147, 188, -1, 231, 219, 147, -1, + 191, 187, 190, -1, 191, 231, 188, -1, + 193, 148, 194, -1, 193, 149, 148, -1, + 193, 195, 149, -1, 201, 152, 150, -1, + 201, 153, 152, -1, 201, 150, 202, -1, + 216, 151, 152, -1, 216, 152, 153, -1, + 216, 217, 151, -1, 199, 201, 200, -1, + 199, 153, 201, -1, 199, 216, 153, -1, + 199, 207, 216, -1, 214, 216, 207, -1, + 209, 208, 154, -1, 209, 154, 155, -1, + 209, 155, 156, -1, 209, 157, 212, -1, + 209, 156, 158, -1, 209, 158, 157, -1, + 203, 202, 159, -1, 203, 159, 161, -1, + 205, 160, 206, -1, 205, 161, 160, -1, + 205, 204, 203, -1, 205, 203, 161, -1, + 162, 164, 163, -1, 162, 166, 165, -1, + 162, 163, 166, -1, 162, 168, 167, -1, + 162, 167, 164, -1, 162, 169, 168, -1, + 162, 170, 169, -1, 162, 165, 170, -1, + 171, 208, 172, -1, 171, 173, 208, -1, + 171, 172, 174, -1, 171, 174, 173, -1, + 175, 177, 176, -1, 175, 178, 177, -1, + 175, 176, 179, -1, 175, 179, 180, -1, + 175, 180, 181, -1, 175, 181, 178, -1, + 222, 182, 225, -1, 222, 218, 182, -1, + 224, 225, 183, -1, 224, 183, 184, -1, + 224, 184, 185, -1, 224, 185, 228, -1, + 186, 187, 191, -1, 186, 191, 188, -1, + 186, 189, 187, -1, 186, 188, 189, -1, + 230, 190, 218, -1, 230, 191, 190, -1, + 230, 231, 191, -1, 192, 193, 194, -1, + 192, 195, 193, -1, 192, 194, 196, -1, + 192, 196, 197, -1, 192, 197, 195, -1, + 198, 199, 200, -1, 198, 201, 202, -1, + 198, 200, 201, -1, 198, 202, 203, -1, + 198, 203, 204, -1, 198, 205, 206, -1, + 198, 204, 205, -1, 198, 207, 199, -1, + 198, 206, 208, -1, 198, 208, 209, -1, + 198, 214, 207, -1, 198, 212, 214, -1, + 198, 209, 212, -1, 210, 212, 211, -1, + 210, 214, 212, -1, 210, 211, 215, -1, + 210, 215, 214, -1, 213, 214, 215, -1, + 213, 216, 214, -1, 213, 215, 217, -1, + 213, 217, 216, -1, 232, 222, 221, -1, + 232, 218, 222, -1, 232, 230, 218, -1, + 232, 221, 219, -1, 232, 219, 231, -1, + 220, 227, 221, -1, 220, 221, 222, -1, + 220, 225, 227, -1, 220, 222, 225, -1, + 223, 225, 224, -1, 223, 226, 227, -1, + 223, 227, 225, -1, 223, 228, 226, -1, + 223, 224, 228, -1, 229, 231, 230, -1, + 229, 232, 231, -1, 229, 230, 232, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/link1.wrl b/examples/rlsg/staeubli-tx60l.convex/link1.wrl new file mode 100644 index 00000000..ce3f91d9 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link1.wrl @@ -0,0 +1,1337 @@ +#VRML V2.0 utf8 + + +DEF link1 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.016973 0.085326999 0.133499, + 0.048335999 0.184494 0.072334103, + 0.072333999 0.04834 0.133499, + 0.061519999 0.061523002 0.133499, + 0.033295002 0.184494 0.080376104, + -0.081306003 -0.029877 0.029882099, + -0.072333999 0.184494 0.0483361, + -0.080375999 0.184494 0.033295099, + -0.085326999 0.184494 0.016973101, + -0.084030002 -0.021759 0.097954102, + -0.080375999 -0.033295002 0.115898, + -0.085326999 -0.016968001 0.115898, + -0.085303999 -0.01709 0.098297097, + 0.016973 0.184494 0.085327096, + 5.2447755e-12 0.184494 0.086998098, + -0.033295002 0.184494 0.080376104, + -0.016973 0.085326999 0.133499, + -0.033295002 0.080383003 0.133499, + -0.016973 0.184494 0.085327096, + -9.765667e-13 0.087006003 0.133499, + 0.033295002 0.080383003 0.133499, + -0.072333999 0.04834 0.133499, + -0.080375999 0.033295002 0.133499, + -0.048335999 0.184494 0.072334103, + -0.061519999 0.061523002 0.133499, + -0.085326999 0.016968099 0.133499, + -0.048335999 0.072327003 0.133499, + -0.061519999 0.184494 0.0615201, + -0.086014003 0.013031 -0.0130409, + -0.086998001 0.092254996 8.8765638e-08, + -0.086998001 0.184494 5.9801685e-08, + -0.086998001 -0.000152974 0.098297097, + -0.086243004 -0.011047 0.098213099, + -0.086998001 -0.000152974 0.098503098, + -0.086998001 -4.3760516e-12 1.177146e-07, + -0.086998001 3.0919903e-08 0.098503098, + -0.086998001 4.1901334e-08 0.133499, + 0.072333999 0.184494 0.0483361, + 0.080375999 0.033295002 0.133499, + 0.061519999 0.184494 0.0615201, + 0.080375999 0.184494 0.033295099, + -0.085326999 -0.016968001 0.133499, + 0.087844998 0.173492 0.0155001, + 0.085326999 0.184494 0.016973101, + 0.087661996 0.173492 0.0165001, + 0.088821001 0.169754 0.0088230604, + 0.054497 0.038818002 -0.069823898, + 0.061519999 0.184494 -0.061519898, + -0.078002997 -0.02121 -0.0211959, + -0.085326999 0.184494 -0.016972899, + -0.080375999 0.184494 -0.033294901, + -0.077308998 -0.032379001 -0.0121489, + -0.086052001 -0.01236 0.0123561, + 0.080375999 0.184494 -0.033294901, + 0.086014003 0.013031 -0.0130409, + 0.070831001 0.050507002 -0.050521899, + 0.072333999 0.04834 -0.048335899, + 0.072333999 0.184494 -0.048335899, + 0.048335999 0.184494 -0.072333902, + 0.033295002 0.184494 -0.080375902, + -0.045527998 0.046936002 -0.076384902, + -0.037613001 0.052306999 -0.080741897, + -0.033295002 0.184494 -0.080375902, + -0.048335999 0.184494 -0.072333902, + -0.061519999 0.184494 -0.061519898, + -0.053383 0.039978001 -0.070754901, + -0.059234999 0.033386 -0.0654139, + -0.042732 0.0030819899 -0.062072899, + -0.059707999 0.032776002 -0.064925902, + -0.080375999 0.033295002 -0.033294901, + -0.076553002 -0.0051270202 -0.034213901, + -0.083045997 0.025939999 -0.025935899, + -0.085326999 0.016968001 -0.016972899, + -0.067261003 -0.014618 -0.036006901, + -0.067855999 0.020172 -0.0547099, + -0.085587002 -0.015076 0.0150771, + 0.062942997 -0.065125003 0.0143641, + 0.085541002 -0.01532 0.0153251, + 0.048335999 0.072327003 0.133499, + 0.085326999 0.016968099 0.133499, + 0.087638997 0.015503 0.122498, + 0.089249 0.170807 6.4097712e-08, + 0.089126997 0.169495 -0.0050079399, + 0.089134 0.169006 -0.0050079399, + 0.080375999 0.033295002 -0.033294901, + 0.087012999 0.167496 -0.019999901, + 0.083045997 0.025939999 -0.025935899, + 0.078018002 0.038513001 -0.038497899, + 0.072304003 0.010254 -0.046691898, + 0.062706001 -0.00036601699 -0.0480459, + 0.067619003 0.02063 -0.055076901, + 0.072182 0.01059 -0.0469549, + 0.055980999 0.01178 -0.058284901, + 0.057755001 0.035186999 -0.0668789, + 0.065009996 0.025146 -0.058749899, + 0.048335999 -0.072326899 0.133499, + 0.061519999 -0.061522901 0.133499, + -0.016973 0.184494 -0.085326903, + -0.040920001 0.0048829699 -0.063674897, + -0.045616001 0.023743 -0.0683899, + -0.046021 0.046539001 -0.076072901, + -0.039177001 0.028991999 -0.072829902, + -0.052891001 0.040465999 -0.071151897, + -0.063885003 -0.00323503 -0.045623899, + -0.072173998 0.01062 -0.046969902, + -0.073540002 0.0067439801 -0.0438499, + -0.066657998 0.022368999 -0.0564989, + -0.083168 -0.024658 0.0246541, + 0.086723 -0.019989001 0.123001, + 0.080375999 -0.033295002 0.133499, + 0.072333999 -0.04834 0.133499, + 0.085326999 -0.016968001 0.133499, + 0.088859998 -0.0050049601 0.117996, + 0.086998001 3.9476217e-12 1.1771841e-07, + 0.088996999 3.6528668e-08 0.116371, + 0.066932999 -0.013123 -0.037257899, + 0.076583996 -0.0053100102 -0.034072898, + 0.076553002 -0.0051569999 -0.0342099, + 0.068542004 -0.058350001 0.0088741397, + 0.088996999 3.7867849e-08 0.120628, + 0.089279003 0.169006 6.4668008e-08, + 0.089272 0.169495 6.4516129e-08, + 0.088996999 -0.00057997601 0.1185, + 0.089302003 0.167374 6.5175314e-08, + 0.086998001 4.1908059e-08 0.133499, + 0.088890001 0.0044250302 0.11969, + 0.089142002 0.17068499 0.0044170599, + 0.089263998 0.16999801 6.435419e-08, + 0.088859998 -0.0050049601 0.119003, + 0.087181002 0.1745 -0.018767901, + 0.085326999 0.016968001 -0.016972899, + 0.087439999 0.164505 -0.0182689, + 0.053116001 -0.010986 -0.0493889, + -0.031906001 0.033569001 -0.076697901, + 0.023588 0.058777001 -0.085982896, + 0.014372 0.061278999 -0.0879969, + 0.016973 0.184494 -0.085326903, + -1.4011224e-12 0.184494 -0.086997896, + 0.0029770001 0.041687001 -0.083533898, + 0.0035369999 0.062622003 -0.089095898, + -0.072333999 0.092254996 -0.048335899, + -0.070831001 0.050507002 -0.050521899, + -0.072333999 0.184494 -0.048335899, + -0.072333999 0.04834 -0.048335899, + -0.078018002 0.038513001 -0.038497899, + -0.074623004 -0.045653999 -0.00140887, + -0.075211003 -0.043457001 -0.0031868699, + -0.060097001 -0.043334998 -0.0202519, + -0.076141 -0.039429002 -0.00644487, + -0.059528001 -0.031219 -0.031184901, + -0.060112 -0.037200999 -0.025777901, + -0.068764001 -0.026215 -0.0261919, + -0.076889001 -0.0071110199 -0.032611899, + -5.6586866e-12 -0.087006003 0.133499, + 0.074920997 -0.044555999 -0.0022928701, + 0.075080998 -0.043976001 -0.00277587, + 0.082680002 -0.026154 0.0261501, + 0.073601 -0.048705999 0.00106313, + 0.088440001 -0.01001 0.117996, + 0.033295002 -0.080383003 0.133499, + 0.087387003 0.16824301 -0.0182689, + 0.087188996 0.173996 -0.018767901, + 0.087233998 0.16599999 -0.0191349, + 0.087608002 0.173492 -0.0167679, + 0.087577999 0.169006 -0.017266899, + 0.087546997 0.164505 -0.017768901, + 0.087646 0.164505 -0.017266899, + 0.087592997 0.1745 -0.0167679, + 0.088692002 0.16999801 -0.0099999402, + 0.088715002 0.169006 -0.0099999402, + 0.087600999 0.173996 -0.0167679, + 0.089119002 0.16999801 -0.0050079399, + 0.089233004 0.17163099 6.3839501e-08, + 0.086998001 0.184494 5.9808926e-08, + 0.087394997 0.1745 -0.017768901, + 0.085326999 0.184494 -0.016972899, + -0.022511 0.016449001 -0.074088901, + -0.032551002 0.055054002 -0.082961902, + -0.028200001 0.057037 -0.084563904, + 0.012112 0.040649001 -0.082648903, + 0.009381 0.062103 -0.088668898, + 0.0221 0.037964001 -0.0803909, + -0.015284 0.039978001 -0.082084902, + -0.016516 0.060821999 -0.087623902, + -0.010054 0.019958001 -0.077270903, + -0.0062560001 0.041473001 -0.083343901, + -0.0078959996 0.020293999 -0.077544898, + -0.003663 0.062622003 -0.089087903, + -0.007429 0.062316999 -0.088851899, + -0.080338001 -0.033386 0.098297097, + -0.080375999 -0.033295002 0.133499, + -0.056072 -0.017548 -0.043483902, + -0.058231 -0.024323 -0.0373949, + -0.034145001 -0.081817999 0.027874099, + -0.033295002 -0.080383003 0.133499, + -0.034343999 -0.081757002 0.027826101, + -0.016973 -0.085326999 0.133499, + 0.012533 -0.085876003 0.0311701, + 0.016956 -0.085326999 0.098297097, + 0.016973 -0.085326999 0.115898, + 0.086944997 -0.019012 0.117058, + 0.087341003 -0.01709 0.122498, + 0.087173 -0.017944001 0.114502, + 0.087090001 -0.018340999 0.113503, + 0.086723 -0.019989001 0.123497, + 0.086944997 -0.019012 0.11557, + 0.086723 -0.019989001 0.115143, + 0.039089002 -0.077393003 0.0172961, + 0.034855001 -0.076324001 0.0094261402, + 0.04332 -0.078460999 0.0251661, + 0.042507 -0.072082996 0.0056161401, + 0.035107002 -0.076201998 0.0093271397, + 0.046532001 -0.076964997 0.023937101, + 0.056030001 -0.071135998 0.0192241, + 0.018227 -0.081573002 0.0141521, + 0.023848001 -0.084259003 0.029850099, + 0.014294 -0.085693002 0.031019101, + 0.053103998 -0.011017 -0.049373899, + 0.0098519996 0.020020001 -0.077300899, + 0.026155001 0.057861 -0.085227899, + 0.036430001 0.053009 -0.081290901, + -0.023367001 0.016083 -0.073775902, + -0.029083 0.013367 -0.071311899, + -0.066353001 -0.049286 -0.0065808701, + -0.074150003 -0.047150001 -0.000187867, + -0.058552001 -0.051422 -0.0129739, + -0.050147999 -0.075011998 0.022352099, + -0.048335999 -0.072326899 0.133499, + -0.064018004 -0.055144999 -0.00162386, + -0.071364999 -0.053679999 0.0050951298, + -0.02142 -0.019501001 -0.052707899, + -0.027166 -0.083587997 0.029299101, + -0.017975001 -0.081603996 0.0141901, + 0.088019997 -0.013184 0.12043, + 0.088019997 -0.013184 0.123497, + 0.088019997 -0.013184 0.115204, + 0.088440001 -0.01001 0.119003, + 0.087439999 -0.016602 0.1185, + 0.076599002 -0.037078999 -0.0083648702, + 0.075874001 -0.040679999 -0.0054398701, + 0.056664001 -0.065398999 0.00710314, + 0.061581001 -0.059326001 0.00193114, + 0.034595001 -0.072052002 0.0021981399, + 0.033447001 -0.082030997 0.028038099, + 0.026949 -0.079346001 0.0121671, + 0.034499999 -0.081726 0.027790099, + 0.028467 -0.083282001 0.0290621, + 0.016973 -0.085326999 0.133499, + 7.6093836e-12 0.0047909701 -0.0700069, + 0.000162 0.020812999 -0.0780259, + 0.0081909997 0.020233 -0.0775069, + -0.000158 0.020812999 -0.0780259, + -0.008227 0.020233 -0.0775069, + 0.031277001 0.033904999 -0.076980896, + 0.036880001 0.052733999 -0.0810849, + 0.045520999 0.046936002 -0.076392896, + -0.016027 0.018616 -0.076049902, + -0.019485001 0.017578 -0.075126901, + -0.015405 0.018798999 -0.076201901, + -0.024788 0.058350001 -0.085639901, + -0.018123999 0.060424998 -0.087302901, + -0.010278 0.0038759799 -0.069190897, + -0.027119 -0.00256302 -0.063361898, + -0.036876999 0.0082699703 -0.066718899, + -0.030122999 0.012787 -0.070792899, + -0.022203 0.0086359801 -0.0704799, + -0.019425999 0.00134299 -0.066886902, + -0.017111 -0.015961001 -0.055911899, + -0.011986 -0.013123 -0.058467899, + -0.0061869998 -0.01123 -0.0601619, + -0.041294001 -0.047545999 -0.027148901, + -0.059188999 -0.049438 -0.0147579, + -0.058594 -0.051238999 -0.0131549, + -0.062527001 -0.065552004 0.0147071, + -0.061519999 -0.061522901 0.133499, + -0.067466997 -0.059845001 0.0100901, + -0.060646001 -0.060669001 0.0030751401, + -0.070023 -0.056061 0.0070131398, + -0.065948002 -0.061797999 0.0116571, + -0.072333999 -0.04834 0.133499, + -0.037944999 -0.013397 -0.0535849, + -0.041115001 -0.047516 -0.027236899, + -0.041340001 -0.019897001 -0.0477289, + -0.024866 -0.023529001 -0.049064901, + -0.033264 -0.0075680199 -0.0588529, + -0.049191002 -0.0046080202 -0.0551489, + -0.045368001 0.00030497799 -0.059546899, + -0.056090999 -0.017517 -0.0434989, + -0.034644999 -0.076416001 0.0095081404, + -0.026579 -0.079467997 0.0122621, + -0.042992 -0.078612998 0.0252821, + -0.045733999 -0.077362001 0.0242601, + -0.022205001 -0.052611999 -0.026444901, + -4.8960601e-12 -0.087006003 0.098297097, + -0.012591 -0.085876003 0.0311641, + -0.011396 -0.084289998 0.0231591, + -0.016539 -0.085418999 0.0308001, + 0.087433003 -0.016632 0.113503, + 0.085922003 -0.013153 0.0131651, + 0.060104001 -0.037140001 -0.025855901, + 0.068764001 -0.026215 -0.0261919, + 0.078002997 -0.02121 -0.0211959, + 0.077468999 -0.030974999 -0.0132899, + 0.060104001 -0.043182001 -0.020410899, + 0.041340001 -0.019897001 -0.0477289, + 0.056107 -0.017578 -0.043464899, + 0.059528001 -0.031219 -0.031184901, + 0.048808999 -0.067107998 0.00112714, + 0.044987001 -0.070464998 0.0041551399, + 0.057888001 -0.069701999 0.0180641, + 0.053799 -0.061370999 -0.0040348601, + 0.054623 -0.060272001 -0.0050128601, + 0.050381001 -0.065673999 -0.00015686201, + 0.066505 -0.061096001 0.0111031, + 0.029028 -0.058959998 -0.0186099, + 0.030716 -0.058807001 -0.0184559, + -0.0092989998 -0.043549001 -0.036895901, + 0.011986 -0.013123 -0.058467899, + 0.039462999 0.028778 -0.072654903, + 0.046349 0.046294998 -0.075858898, + -0.0046859998 -0.043457001 -0.037257899, + -0.009633 -0.042908002 -0.0374979, + -0.005287 -0.043030001 -0.037627898, + -0.0031689999 -0.043090999 -0.037673902, + 0.023327 -0.042174999 -0.036483899, + 0.037944999 -0.013397 -0.0535849, + 0.044441 0.0013119699 -0.060454901, + 0.049240001 -0.0046690302 -0.055083901, + -0.011218 -0.044280998 -0.036044899, + -0.010739 -0.042877 -0.037452899, + -0.024181001 -0.075866997 0.00563914, + -0.020374 -0.052733999 -0.0265669, + -0.022511 -0.057098001 -0.021680901, + -0.020752 -0.055388998 -0.023757899, + -0.005715 -0.086364999 0.031563099, + -2.8999995e-05 -0.086487003 0.0316661, + 0.004311 -0.086425997 0.031607099, + 0.087798998 -0.0145869 0.115204, + 0.087746002 -0.014893 0.113503, + 0.087677002 -0.015289 0.114502, + 0.087860003 -0.014191 0.122498, + 0.087439999 -0.016602 0.123497, + 0.087890998 -0.014038 0.114349, + 0.059241999 -0.049194001 -0.0149929, + 0.026905 -0.045502 -0.032695901, + 0.045867998 -0.042663999 -0.027226901, + 0.043659002 -0.026946999 -0.041377898, + 0.025622999 -0.043182001 -0.035113901, + 0.026657 -0.044952001 -0.033271901, + 0.045077998 -0.034545999 -0.0345309, + 0.010948 -0.042847 -0.037448902, + -0.0022110001 -0.043761998 -0.037074901, + -0.0040859999 -0.043884002 -0.036883902, + 0.022203 0.0086359801 -0.0704799, + 0.029997 0.012848 -0.070853896, + 0.019425999 0.00134299 -0.066886902, + 0.023264 0.016144 -0.0738139, + 0.020448999 0.017242 -0.074820898, + 0.015954001 0.018646 -0.076072901, + 0.010278 0.0038759799 -0.069190897, + 0.038704 0.0067749699 -0.065398902, + 0.052028999 0.041320998 -0.071830899, + 0.046599999 0.022797 -0.067611903, + 0.035767 0.0091249701 -0.067496903, + 0.040901002 0.0048829699 -0.063689902, + 0.027117001 -0.00256302 -0.063361898, + 0.02142 -0.019501001 -0.052707899, + 0.033264 -0.0075680199 -0.0588529, + 0.017111 -0.015961001 -0.055911899, + 0.020523001 -0.042236 -0.036879901, + -0.012032 -0.057280999 -0.0226519, + -0.015413 -0.058350001 -0.0211599, + -0.013596 -0.056641001 -0.0232109, + -0.016888 -0.058228001 -0.0211489, + -0.0090079997 -0.048797999 -0.031774901, + -0.0071620001 -0.050018001 -0.0306699, + -0.0065359999 -0.048889 -0.031859901, + -0.0093900003 -0.047699001 -0.0328479, + 0.0091789998 -0.082824998 0.0152941, + -0.010963 -0.073242001 0.000328141, + -0.010202 -0.082672 0.0151541, + -0.013531 -0.061432 -0.0178829, + -0.014009 -0.059905998 -0.0195789, + -0.034591999 -0.072052002 0.0021931401, + -0.033295002 -0.062194999 -0.0141409, + -0.042118002 -0.072327003 0.0058391402, + -0.056637 -0.070679002 0.018858099, + -0.053860001 -0.072662003 0.020468101, + -0.045235001 -0.074280001 0.0146421, + -0.03582 -0.060851999 -0.0150789, + -0.031342998 -0.048278999 -0.029111899, + -0.011931 -0.042815998 -0.037402902, + -0.030146001 -0.048920002 -0.028760901, + -0.032120001 -0.059783999 -0.017117901, + -0.032791 -0.050903 -0.026250901, + -0.022895999 -0.059418 -0.0190809, + -0.018091001 -0.058166999 -0.0210879, + -0.012142 -0.049254999 -0.0310589, + -0.016348001 -0.053619001 -0.026151899, + -0.018643999 -0.052855998 -0.026671899, + -0.012451 -0.048645001 -0.031634901, + -0.01073 -0.048737001 -0.031707902, + -0.011901 -0.053222999 -0.027011899, + -0.0086449999 -0.053344999 -0.0271399, + -0.016435999 -0.061218001 -0.017852901, + -0.016542001 -0.060821999 -0.0182929, + -0.015064 -0.061951 -0.017148901, + -0.01384 -0.060302999 -0.0191459, + -1.2999998e-05 -0.083221003 0.0156541, + -2.7000006e-05 -0.084868997 0.023659101, + -2.5000005e-05 -0.083221003 0.0156541, + -6.0307011e-12 -0.083221003 0.0156541, + 0.057564002 -0.054443002 -0.0102699, + 0.052398998 -0.051238999 -0.0165419, + 0.057349999 -0.055023 -0.0097338697, + 0.058201 -0.052643001 -0.0118799, + 0.065903001 -0.050689999 -0.0054078698, + 0.071769997 -0.052917 0.0044611301, + 0.025373001 -0.052368 -0.0262179, + 0.025185 -0.048705999 -0.0299259, + 0.027037 -0.052216001 -0.026080901, + 0.028256999 -0.054443002 -0.0235769, + 0.001774 -0.043120999 -0.037692901, + 0.0061869998 -0.01123 -0.0601619, + -2.7463919e-12 -0.010559 -0.060775898, + 0.001339 -0.043120999 -0.037700899, + 7.1571785e-12 -0.045288 -0.035678901, + -0.0043600001 -0.050110001 -0.0307579, + -0.013879 -0.061737001 -0.0175039, + -0.048500001 -0.067382999 0.00138614, + -0.035748001 -0.060913 -0.0150319, + -0.052494001 -0.063231997 -0.00234386, + -0.045464002 -0.070099004 0.00382914, + -0.056293 -0.065765001 0.0074261399, + -0.060954999 -0.067078002 0.015928101, + -0.034205999 -0.050322998 -0.0264799, + -0.037147999 -0.059052002 -0.016761901, + -0.037292 -0.058075 -0.0177959, + -0.057213001 -0.055358998 -0.0094358698, + -0.053580999 -0.061675999 -0.00374986, + -0.036617 -0.060028002 -0.0158119, + -0.032547001 -0.059418 -0.017434901, + -0.031975001 -0.053589001 -0.023732901, + -0.031651001 -0.052276999 -0.0251329, + -0.025736 -0.052338 -0.026181901, + -0.023972001 -0.05249 -0.026319901, + -0.027295999 -0.052062999 -0.026196901, + -0.027964 -0.050841998 -0.0272879, + -0.027834 -0.054962002 -0.023089901, + -0.027105 -0.053284001 -0.024974899, + -0.025175 -0.059478998 -0.018681901, + -0.031090001 -0.060210999 -0.0168419, + -0.024761001 -0.060364 -0.0177669, + -0.02861 -0.062927 -0.0142339, + -0.024031 -0.062134001 -0.015877901, + -0.032393999 -0.055755999 -0.021380899, + -0.032883 -0.058623999 -0.0182289, + -0.03249 -0.053986002 -0.0232119, + -0.012753 -0.054839998 -0.025228901, + -0.011901 -0.054047 -0.0261459, + -0.013869 -0.055266999 -0.024671899, + -0.011902 -0.054871 -0.025266901, + -0.01203 -0.056334998 -0.023686901, + 0.023469999 -0.049164001 -0.0297639, + 0.021296 -0.048064999 -0.0311829, + 0.023308 -0.042174999 -0.0364879, + 0.021879001 -0.043365002 -0.035632901, + 0.021879001 -0.042144999 -0.0367659, + 0.02537 -0.046569999 -0.031985901, + 0.024328001 -0.047759999 -0.0310119, + 0.026361 -0.047882002 -0.030534901, + 0.027024999 -0.046661001 -0.031579901, + 0.012518 -0.042785998 -0.037379902, + 0.0048710001 -0.053467002 -0.027257901, + 0.010224 -0.049743999 -0.0307179, + 0.026089 -0.056853998 -0.0213969, + 0.027520999 -0.055633999 -0.022456899, + 0.022709001 -0.059418 -0.0190999, + 0.027338 -0.059113 -0.0187549, + 0.020981001 -0.05954 -0.0192129, + 0.021305 -0.056915 -0.022038899, + 0.023585999 -0.054108001 -0.0246889, + 0.022791 -0.048035 -0.0309909, + 0.007276 -0.043609999 -0.036994901, + 0.0093780002 -0.042908002 -0.0375099, + 0.0034129999 -0.043090999 -0.037669901, + 0.002238 -0.045471001 -0.035441902, + 0.00077400001 -0.044280998 -0.036624901, + 0.002721 -0.044495001 -0.036361899, + 9.799999e-05 -0.045348998 -0.035617899, + 0.0027600001 -0.047088999 -0.033851899, + 0.000432 -0.053955 -0.0268899, + 0.001698 -0.054565001 -0.0262319, + 7.2467071e-12 -0.053833 -0.027011899, + 0.0074109999 -0.050018001 -0.0306629, + 0.005293 -0.050078999 -0.0307329, + -6.9000002e-05 -0.050048999 -0.030976901, + 0.003765 -0.053497002 -0.0272849, + 0.014152 -0.043030001 -0.036971901, + 0.013505 -0.042847 -0.0372159, + -0.014388 -0.061919998 -0.0172459, + -0.039634999 -0.050232001 -0.025121899, + -0.036991 -0.049988002 -0.0260939, + -0.035557002 -0.055663999 -0.0207769, + -0.037052002 -0.057128999 -0.0188559, + -0.039825 -0.050262 -0.025027899, + -0.040562 -0.048920002 -0.026095901, + -0.035179 -0.047302 -0.029141899, + -0.025921 -0.057617001 -0.020587901, + -0.026775001 -0.060180999 -0.0176559, + -0.025490001 -0.058440998 -0.019761899, + -0.030577 -0.056763001 -0.0207079, + -0.022996999 -0.057861 -0.0207939, + -0.024323 -0.055206001 -0.023431901, + -0.028952001 -0.055847 -0.0219629, + 0.024660001 -0.044617001 -0.033973899, + 0.024971001 -0.045318998 -0.0332569, + 0.026272001 -0.044098001 -0.034160901, + 0.022786999 -0.043396 -0.035453901, + 0.024600999 -0.042541999 -0.035918899, + 0.0079730004 -0.054839998 -0.0256139, + 0.010196 -0.053284001 -0.0270839, + 0.010481 -0.044006001 -0.036387902, + 0.024188999 -0.075866997 0.0056451401, + 0.019162999 -0.043976001 -0.035460901, + 0.018913001 -0.042663999 -0.036738899, + 0.021088 -0.043427002 -0.0356979, + 0.014745 -0.049713001 -0.030341901, + 0.015634 -0.053009 -0.026841899, + 0.018389 -0.048156999 -0.031489901, + 0.020195 -0.049102999 -0.030309901, + 0.017588001 -0.048981 -0.030761899, + 0.01322 -0.044006001 -0.036143899, + 0.015129 -0.043701001 -0.036235899, + 0.012519 -0.043915 -0.0362969, + 0.0072980002 -0.047759999 -0.0329399, + 0.0090859998 -0.047302 -0.0332679, + -0.002441 -0.058867998 -0.021432901, + -0.00064300001 -0.047118999 -0.033896901, + -3.748505e-12 -0.047607001 -0.0334129, + -0.00031999999 -0.046478 -0.034526899, + -0.00066999998 -0.047667999 -0.033351898, + -0.0022430001 -0.045166001 -0.035735901, + -0.0033410001 -0.053528 -0.027274899, + -0.00099800003 -0.055695001 -0.025020899, + 0.00042999999 -0.053955 -0.0268899, + -6.4568151e-12 -0.055542 -0.0251939, + -0.0025299999 -0.055144999 -0.025577901, + -0.001993 -0.049743999 -0.031232901, + -0.001081 -0.050170999 -0.0308279, + -0.001391 -0.048583999 -0.032424901, + -0.003124 -0.050140001 -0.030789901, + -0.0033770001 -0.049561001 -0.031365901, + -0.0036309999 -0.048981 -0.031941898, + 0.002873 -0.048553001 -0.032393899, + 0.0037140001 -0.047699001 -0.033206899, + 0.001768 -0.047851998 -0.0331419, + 0.0042110002 -0.049408 -0.0314789, + 0.000612 -0.048705999 -0.032317899, + -0.0090640001 -0.082824998 0.0153021, + -0.011579 -0.059997998 -0.0196799, + -0.0085589997 -0.062103 -0.0174619, + -0.0080249999 -0.062164001 -0.017405899, + -0.0079570003 -0.062164001 -0.0174079, + -0.009087 -0.061889999 -0.0176809, + -0.0096389996 -0.061188001 -0.0184609, + -0.0086730001 -0.062073 -0.017491899, + -0.0073879999 -0.054871 -0.0256199, + -0.010977 -0.056763001 -0.0233119, + -0.0090659996 -0.058959998 -0.0210109, + 0.0087390002 -0.056304999 -0.0239789, + 0.0083550001 -0.055573002 -0.0247989, + 0.012986 -0.053374998 -0.0267509, + 0.01095 -0.047240999 -0.033179902, + 0.0093790004 -0.047302 -0.0332449, + 0.0089659998 -0.046172999 -0.034392901, + 0.010801 -0.048675999 -0.031762902, + 0.014491 -0.048583999 -0.0315089, + 0.020422 -0.054320998 -0.024909901, + 0.019182 -0.052825999 -0.026645901, + 0.019901 -0.054352 -0.024943899, + 0.02025 -0.054993 -0.024222899, + 0.022724001 -0.052581999 -0.0264169, + 0.023153 -0.053344999 -0.0255579, + 0.020597 -0.055633999 -0.023501899, + 0.016156999 -0.059052002 -0.020318899, + 0.019251 -0.059631001 -0.0193159, + 0.017502001 -0.046721999 -0.0330199, + 0.017748 -0.047272 -0.032447901, + 0.015584 -0.044799998 -0.0351259, + 0.016998 -0.044707999 -0.035048898, + 0.018623 -0.044769 -0.034781899, + 0.019727999 -0.047394 -0.0320739, + 0.015253 -0.045837 -0.034148902, + 0.014773 -0.046356 -0.033687901, + 0.007886 -0.045288 -0.035331901, + 0.008374 -0.045959 -0.034644902, + 0.0081780003 -0.044525001 -0.036056899, + 0.006879 -0.046813998 -0.033904899, + 0.006517 -0.044464 -0.0362169, + -0.000279 -0.056701999 -0.023921899, + -0.006914 -0.061859 -0.0178179, + -0.0069149998 -0.061859 -0.0178179, + -0.001502 -0.060454998 -0.0196499, + -0.0039750002 -0.05542 -0.025229899, + -0.003421 -0.055176001 -0.0255199, + -0.0065609999 -0.054138001 -0.026460901, + -0.0076100002 -0.060272001 -0.019643901, + -0.0058820001 -0.059052002 -0.0211049, + -0.0082590003 -0.060180999 -0.019706899, + -0.0081010005 -0.061188001 -0.0185639, + -0.0067540002 -0.060791001 -0.0190889, + -0.0071149999 -0.060486 -0.019425901, + -0.003332 -0.060424998 -0.0196319, + -0.0066379998 -0.061554 -0.0182089, + -0.0039039999 -0.056976002 -0.0235269, + -0.0033799999 -0.057280999 -0.023213901, + -0.0041220002 -0.055755999 -0.024857899, + -0.0059420001 -0.056458 -0.0239999, + 0.011649 -0.054931998 -0.0252319, + 0.012449 -0.055114999 -0.0249629, + 0.010847 -0.054749001 -0.025493899, + 0.015035 -0.054839998 -0.0250089, + 0.01451 -0.056488 -0.023293899, + 0.013362 -0.045837 -0.034343898, + 0.014476 -0.046569999 -0.033507898, + 0.012324 -0.046448 -0.033843901, + 0.013913 -0.045318998 -0.034797899, + 0.013927 -0.044555999 -0.035544898, + -0.00027799999 -0.056701999 -0.023921899, + 0.002687 -0.055603001 -0.025081901, + 0.00090099999 -0.058837999 -0.0215129, + 0.005353 -0.056458 -0.0240309, + 0.014171 -0.056609999 -0.0231969, + 0.010859 -0.057677999 -0.0223199, + 0.0098320004 -0.058288999 -0.021726901, + 0.0097740004 -0.056274001 -0.023944899, + 0.011992 -0.05545 -0.024648899, + 0.016174 -0.057739001 -0.0217569, + 0.015121 -0.055847 -0.0239239, + 0.017445 -0.056366 -0.0231089, + 0.015287 -0.057068001 -0.022580899, + 0.016422 -0.058594 -0.0208019, + 0.001801 -0.060454998 -0.0196479, + -0.0073699998 -0.062073 -0.017537899, + 0.013084 -0.058166999 -0.0215989, + 0.011163 -0.058807001 -0.021045901, + 0.012967 -0.057891998 -0.021914899, + 0.014839 -0.059753001 -0.0196719, + 0.0053340001 -0.060394 -0.019597899, + 5.0896132e-12 -0.077118002 0.0057801399, + 0.010965 -0.073242001 0.000331141, + 0.0035679999 -0.060424998 -0.019628899, + 0.0091329999 -0.060059 -0.0197699, + 0.0073680002 -0.060120001 -0.019822899, + 0.003602 -0.057280999 -0.0232049, + 0.013826 -0.059905998 -0.0195919 ] + + } + coordIndex [ 153, 293, 197, -1, 0, 14, 19, -1, + 20, 0, 19, -1, 57, 47, 39, -1, + 5, 107, 224, -1, 75, 12, 52, -1, + 75, 107, 12, -1, 9, 12, 107, -1, + 8, 25, 7, -1, 8, 36, 25, -1, + 32, 36, 33, -1, 41, 12, 9, -1, + 41, 36, 32, -1, 41, 32, 52, -1, + 41, 25, 36, -1, 41, 194, 25, -1, + 1, 4, 3, -1, 1, 39, 4, -1, + 13, 4, 39, -1, 13, 39, 27, -1, + 13, 14, 0, -1, 13, 0, 20, -1, + 173, 175, 57, -1, 173, 57, 39, -1, + 58, 39, 47, -1, 58, 27, 39, -1, + 58, 59, 136, -1, 22, 7, 25, -1, + 16, 19, 14, -1, 62, 136, 137, -1, + 62, 58, 136, -1, 62, 27, 58, -1, + 187, 137, 139, -1, 187, 188, 137, -1, + 150, 51, 48, -1, 34, 51, 52, -1, + 34, 48, 51, -1, 34, 52, 32, -1, + 34, 35, 29, -1, 2, 79, 38, -1, + 2, 38, 39, -1, 2, 1, 3, -1, + 2, 39, 1, -1, 40, 38, 79, -1, + 77, 156, 155, -1, 77, 238, 298, -1, + 80, 44, 79, -1, 83, 123, 113, -1, + 83, 113, 169, -1, 54, 169, 113, -1, + 54, 113, 301, -1, 94, 93, 47, -1, + 94, 47, 57, -1, 78, 20, 25, -1, + 78, 25, 194, -1, 78, 79, 2, -1, + 78, 2, 3, -1, 78, 3, 4, -1, + 78, 4, 13, -1, 78, 13, 20, -1, + 189, 10, 107, -1, 189, 107, 5, -1, + 189, 5, 224, -1, 6, 8, 7, -1, + 6, 7, 22, -1, 6, 22, 27, -1, + 6, 27, 49, -1, 6, 49, 8, -1, + 30, 36, 8, -1, 30, 29, 35, -1, + 30, 35, 36, -1, 30, 8, 49, -1, + 190, 41, 9, -1, 190, 279, 274, -1, + 190, 10, 189, -1, 190, 107, 10, -1, + 190, 9, 107, -1, 11, 52, 12, -1, + 11, 41, 52, -1, 11, 12, 41, -1, + 18, 14, 13, -1, 18, 13, 27, -1, + 18, 27, 15, -1, 18, 16, 14, -1, + 18, 17, 16, -1, 126, 172, 173, -1, + 361, 319, 58, -1, 361, 58, 47, -1, + 23, 24, 15, -1, 23, 15, 27, -1, + 26, 15, 24, -1, 26, 16, 17, -1, + 26, 17, 18, -1, 26, 18, 15, -1, + 26, 19, 16, -1, 26, 20, 19, -1, + 26, 25, 20, -1, 21, 27, 22, -1, + 21, 24, 23, -1, 21, 23, 27, -1, + 21, 22, 25, -1, 21, 26, 24, -1, + 21, 25, 26, -1, 142, 64, 68, -1, + 142, 50, 49, -1, 142, 62, 64, -1, + 142, 49, 27, -1, 142, 27, 62, -1, + 97, 137, 188, -1, 97, 62, 137, -1, + 60, 101, 100, -1, 259, 62, 97, -1, + 147, 51, 150, -1, 28, 48, 34, -1, + 28, 152, 48, -1, 28, 72, 152, -1, + 28, 34, 29, -1, 28, 29, 30, -1, + 28, 49, 72, -1, 28, 30, 49, -1, + 31, 32, 33, -1, 31, 34, 32, -1, + 31, 35, 34, -1, 31, 36, 35, -1, + 31, 33, 36, -1, 43, 79, 44, -1, + 43, 40, 79, -1, 43, 173, 39, -1, + 43, 39, 40, -1, 37, 39, 38, -1, + 37, 40, 39, -1, 37, 38, 40, -1, + 239, 238, 77, -1, 239, 77, 155, -1, + 206, 156, 77, -1, 302, 301, 113, -1, + 302, 298, 238, -1, 302, 113, 298, -1, + 116, 54, 301, -1, 53, 57, 175, -1, + 55, 57, 56, -1, 255, 319, 318, -1, + 255, 58, 319, -1, 196, 153, 194, -1, + 227, 194, 41, -1, 227, 41, 190, -1, + 227, 190, 274, -1, 45, 125, 126, -1, + 42, 126, 173, -1, 42, 43, 44, -1, + 42, 173, 43, -1, 42, 45, 126, -1, + 42, 125, 45, -1, 42, 44, 80, -1, + 42, 80, 125, -1, 46, 362, 361, -1, + 46, 93, 364, -1, 46, 364, 362, -1, + 46, 47, 93, -1, 46, 361, 47, -1, + 219, 181, 134, -1, 219, 59, 220, -1, + 219, 136, 59, -1, 219, 134, 136, -1, + 63, 60, 100, -1, 63, 64, 62, -1, + 63, 62, 61, -1, 63, 61, 60, -1, + 222, 61, 133, -1, 183, 97, 188, -1, + 177, 133, 61, -1, 177, 61, 62, -1, + 151, 150, 48, -1, 151, 48, 152, -1, + 192, 73, 287, -1, 192, 152, 73, -1, + 286, 68, 67, -1, 71, 50, 69, -1, + 71, 72, 49, -1, 71, 49, 50, -1, + 71, 69, 105, -1, 144, 50, 142, -1, + 144, 69, 50, -1, 148, 51, 147, -1, + 148, 52, 51, -1, 148, 75, 52, -1, + 291, 194, 227, -1, 309, 76, 96, -1, + 309, 96, 95, -1, 309, 95, 213, -1, + 309, 240, 76, -1, 297, 77, 298, -1, + 171, 127, 121, -1, 171, 169, 168, -1, + 130, 54, 116, -1, 88, 305, 89, -1, + 117, 115, 305, -1, 117, 305, 88, -1, + 117, 88, 86, -1, 117, 86, 130, -1, + 117, 130, 116, -1, 129, 53, 175, -1, + 129, 85, 53, -1, 87, 53, 85, -1, + 87, 56, 57, -1, 87, 57, 53, -1, + 162, 86, 85, -1, 162, 130, 86, -1, + 162, 131, 130, -1, 162, 85, 129, -1, + 166, 169, 54, -1, 166, 54, 130, -1, + 90, 55, 56, -1, 90, 94, 57, -1, + 90, 57, 55, -1, 90, 56, 87, -1, + 327, 92, 94, -1, 327, 94, 90, -1, + 254, 253, 220, -1, 254, 58, 255, -1, + 254, 220, 59, -1, 254, 59, 58, -1, + 212, 213, 95, -1, 247, 153, 197, -1, + 184, 183, 188, -1, 284, 286, 67, -1, + 264, 60, 61, -1, 264, 61, 222, -1, + 264, 101, 60, -1, 178, 62, 259, -1, + 178, 177, 62, -1, 135, 136, 134, -1, + 102, 99, 65, -1, 102, 63, 100, -1, + 102, 64, 63, -1, 102, 65, 64, -1, + 66, 67, 68, -1, 66, 68, 64, -1, + 66, 64, 65, -1, 98, 65, 99, -1, + 98, 67, 66, -1, 98, 66, 65, -1, + 98, 284, 67, -1, 106, 68, 286, -1, + 106, 142, 68, -1, 106, 285, 74, -1, + 106, 286, 285, -1, 104, 74, 285, -1, + 104, 144, 74, -1, 104, 105, 69, -1, + 104, 69, 144, -1, 70, 71, 105, -1, + 70, 105, 287, -1, 70, 152, 72, -1, + 70, 72, 71, -1, 70, 287, 73, -1, + 70, 73, 152, -1, 143, 74, 144, -1, + 143, 106, 74, -1, 146, 75, 148, -1, + 146, 107, 75, -1, 313, 76, 240, -1, + 313, 96, 76, -1, 110, 118, 417, -1, + 110, 96, 313, -1, 110, 313, 118, -1, + 110, 194, 96, -1, 110, 78, 194, -1, + 110, 111, 78, -1, 203, 206, 77, -1, + 203, 77, 297, -1, 341, 111, 204, -1, + 341, 234, 111, -1, 124, 111, 234, -1, + 124, 79, 78, -1, 124, 78, 111, -1, + 124, 80, 79, -1, 124, 125, 80, -1, + 158, 298, 113, -1, 308, 309, 213, -1, + 343, 239, 155, -1, 300, 116, 301, -1, + 120, 123, 83, -1, 120, 83, 121, -1, + 81, 171, 172, -1, 81, 127, 171, -1, + 81, 172, 126, -1, 81, 126, 127, -1, + 82, 121, 83, -1, 82, 171, 121, -1, + 82, 83, 169, -1, 82, 169, 171, -1, + 84, 85, 86, -1, 84, 87, 85, -1, + 84, 86, 88, -1, 84, 88, 87, -1, + 174, 129, 175, -1, 91, 87, 88, -1, + 91, 90, 87, -1, 91, 88, 89, -1, + 132, 89, 305, -1, 132, 327, 90, -1, + 132, 91, 89, -1, 132, 90, 91, -1, + 326, 92, 327, -1, 326, 364, 93, -1, + 326, 93, 94, -1, 326, 94, 92, -1, + 159, 212, 95, -1, 159, 247, 245, -1, + 159, 95, 96, -1, 159, 96, 194, -1, + 159, 194, 153, -1, 159, 153, 247, -1, + 257, 178, 259, -1, 260, 259, 97, -1, + 260, 97, 183, -1, 251, 187, 139, -1, + 263, 98, 99, -1, 263, 100, 101, -1, + 263, 102, 100, -1, 263, 99, 102, -1, + 263, 101, 264, -1, 263, 284, 98, -1, + 103, 285, 287, -1, 103, 104, 285, -1, + 103, 287, 105, -1, 103, 105, 104, -1, + 141, 142, 106, -1, 141, 106, 143, -1, + 145, 224, 107, -1, 145, 107, 146, -1, + 270, 147, 150, -1, 336, 197, 293, -1, + 108, 206, 204, -1, 108, 204, 417, -1, + 108, 417, 206, -1, 157, 206, 417, -1, + 157, 156, 206, -1, 109, 417, 204, -1, + 109, 110, 417, -1, 109, 204, 111, -1, + 109, 111, 110, -1, 202, 203, 297, -1, + 114, 113, 123, -1, 114, 123, 122, -1, + 236, 128, 234, -1, 112, 158, 113, -1, + 112, 113, 114, -1, 112, 128, 236, -1, + 112, 236, 158, -1, 112, 122, 128, -1, + 112, 114, 122, -1, 306, 305, 115, -1, + 306, 116, 300, -1, 306, 115, 117, -1, + 306, 117, 116, -1, 241, 118, 313, -1, + 241, 417, 118, -1, 119, 120, 121, -1, + 119, 122, 123, -1, 119, 123, 120, -1, + 119, 125, 124, -1, 119, 126, 125, -1, + 119, 121, 127, -1, 119, 128, 122, -1, + 119, 127, 126, -1, 119, 124, 234, -1, + 119, 234, 128, -1, 161, 162, 129, -1, + 161, 129, 174, -1, 165, 130, 131, -1, + 165, 166, 130, -1, 165, 131, 162, -1, + 170, 165, 174, -1, 217, 132, 305, -1, + 217, 327, 132, -1, 221, 222, 133, -1, + 221, 133, 177, -1, 358, 134, 181, -1, + 358, 135, 134, -1, 358, 179, 135, -1, + 180, 135, 179, -1, 180, 136, 135, -1, + 180, 138, 139, -1, 180, 250, 138, -1, + 180, 139, 137, -1, 180, 137, 136, -1, + 249, 139, 138, -1, 249, 251, 139, -1, + 249, 138, 250, -1, 140, 142, 141, -1, + 140, 141, 143, -1, 140, 144, 142, -1, + 140, 143, 144, -1, 271, 224, 145, -1, + 271, 145, 146, -1, 271, 147, 270, -1, + 271, 148, 147, -1, 271, 146, 148, -1, + 149, 270, 150, -1, 149, 192, 270, -1, + 149, 150, 151, -1, 149, 151, 152, -1, + 149, 152, 192, -1, 294, 293, 153, -1, + 294, 153, 196, -1, 215, 199, 198, -1, + 215, 247, 199, -1, 378, 197, 336, -1, + 154, 343, 155, -1, 154, 157, 343, -1, + 154, 155, 156, -1, 154, 156, 157, -1, + 416, 157, 417, -1, 416, 343, 157, -1, + 205, 206, 203, -1, 340, 234, 341, -1, + 235, 158, 236, -1, 235, 298, 158, -1, + 201, 202, 341, -1, 201, 341, 204, -1, + 315, 308, 242, -1, 209, 159, 245, -1, + 209, 212, 159, -1, 211, 212, 208, -1, + 211, 208, 242, -1, 244, 208, 245, -1, + 244, 523, 242, -1, 244, 242, 208, -1, + 160, 174, 165, -1, 160, 161, 174, -1, + 160, 165, 162, -1, 160, 162, 161, -1, + 163, 169, 166, -1, 163, 170, 169, -1, + 163, 166, 170, -1, 164, 166, 165, -1, + 164, 170, 166, -1, 164, 165, 170, -1, + 167, 168, 169, -1, 167, 169, 170, -1, + 167, 171, 168, -1, 167, 172, 171, -1, + 167, 173, 172, -1, 167, 170, 174, -1, + 167, 175, 173, -1, 167, 174, 175, -1, + 325, 327, 217, -1, 176, 221, 177, -1, + 176, 257, 221, -1, 176, 177, 178, -1, + 176, 178, 257, -1, 218, 179, 358, -1, + 218, 180, 179, -1, 218, 250, 180, -1, + 357, 358, 181, -1, 357, 181, 219, -1, + 182, 184, 258, -1, 182, 258, 260, -1, + 182, 183, 184, -1, 182, 260, 183, -1, + 261, 258, 184, -1, 252, 184, 188, -1, + 252, 261, 184, -1, 252, 186, 251, -1, + 185, 251, 186, -1, 185, 188, 187, -1, + 185, 187, 251, -1, 185, 252, 188, -1, + 185, 186, 252, -1, 424, 425, 323, -1, + 433, 273, 431, -1, 278, 431, 273, -1, + 278, 274, 279, -1, 278, 273, 274, -1, + 229, 224, 438, -1, 229, 189, 224, -1, + 229, 190, 189, -1, 229, 279, 190, -1, + 229, 277, 279, -1, 191, 287, 282, -1, + 191, 282, 270, -1, 191, 192, 287, -1, + 191, 270, 192, -1, 267, 268, 391, -1, + 392, 390, 391, -1, 507, 283, 391, -1, + 507, 391, 390, -1, 193, 289, 231, -1, + 193, 195, 289, -1, 193, 231, 196, -1, + 193, 196, 194, -1, 193, 194, 195, -1, + 290, 194, 291, -1, 290, 195, 194, -1, + 290, 289, 195, -1, 296, 295, 294, -1, + 296, 196, 231, -1, 296, 294, 196, -1, + 334, 293, 294, -1, 216, 197, 378, -1, + 216, 215, 198, -1, 216, 198, 199, -1, + 216, 247, 197, -1, 216, 199, 247, -1, + 237, 202, 297, -1, 237, 341, 202, -1, + 342, 234, 340, -1, 342, 298, 235, -1, + 200, 202, 201, -1, 200, 203, 202, -1, + 200, 201, 204, -1, 200, 205, 203, -1, + 200, 204, 206, -1, 200, 206, 205, -1, + 311, 241, 313, -1, 478, 242, 523, -1, + 207, 208, 212, -1, 207, 212, 209, -1, + 207, 245, 208, -1, 207, 209, 245, -1, + 210, 242, 308, -1, 210, 211, 242, -1, + 210, 212, 211, -1, 210, 213, 212, -1, + 210, 308, 213, -1, 246, 247, 215, -1, + 214, 523, 244, -1, 214, 378, 523, -1, + 214, 246, 215, -1, 214, 244, 246, -1, + 214, 215, 216, -1, 214, 216, 378, -1, + 304, 217, 305, -1, 304, 325, 217, -1, + 304, 519, 325, -1, 351, 323, 425, -1, + 359, 218, 358, -1, 359, 250, 218, -1, + 359, 423, 424, -1, 356, 219, 220, -1, + 356, 357, 219, -1, 356, 220, 253, -1, + 265, 258, 261, -1, 265, 221, 257, -1, + 265, 222, 221, -1, 265, 264, 222, -1, + 269, 424, 323, -1, 269, 261, 424, -1, + 317, 368, 472, -1, 317, 472, 350, -1, + 317, 484, 423, -1, 317, 350, 484, -1, + 223, 224, 271, -1, 223, 271, 225, -1, + 223, 438, 224, -1, 223, 225, 438, -1, + 272, 225, 271, -1, 272, 438, 225, -1, + 386, 227, 274, -1, 386, 387, 227, -1, + 226, 388, 291, -1, 226, 387, 388, -1, + 226, 291, 227, -1, 226, 227, 387, -1, + 276, 439, 431, -1, 276, 431, 278, -1, + 276, 277, 438, -1, 276, 438, 439, -1, + 228, 438, 277, -1, 228, 229, 438, -1, + 228, 277, 229, -1, 230, 391, 283, -1, + 230, 267, 391, -1, 230, 283, 284, -1, + 230, 284, 267, -1, 281, 270, 282, -1, + 232, 289, 330, -1, 232, 231, 289, -1, + 232, 296, 231, -1, 383, 330, 289, -1, + 383, 453, 330, -1, 380, 296, 232, -1, + 380, 232, 330, -1, 233, 234, 342, -1, + 233, 342, 235, -1, 233, 236, 234, -1, + 233, 235, 236, -1, 339, 237, 297, -1, + 339, 341, 237, -1, 303, 302, 238, -1, + 303, 238, 239, -1, 303, 239, 343, -1, + 471, 315, 421, -1, 349, 306, 345, -1, + 312, 240, 309, -1, 312, 313, 240, -1, + 414, 417, 241, -1, 414, 241, 311, -1, + 314, 315, 242, -1, 314, 242, 478, -1, + 243, 244, 245, -1, 243, 246, 244, -1, + 243, 245, 247, -1, 243, 247, 246, -1, + 329, 391, 268, -1, 329, 321, 377, -1, + 329, 268, 269, -1, 329, 269, 321, -1, + 352, 351, 542, -1, 352, 323, 351, -1, + 352, 376, 377, -1, 365, 368, 317, -1, + 248, 249, 250, -1, 248, 250, 359, -1, + 248, 251, 249, -1, 248, 424, 261, -1, + 248, 359, 424, -1, 248, 252, 251, -1, + 248, 261, 252, -1, 354, 356, 253, -1, + 354, 253, 254, -1, 354, 255, 318, -1, + 354, 254, 255, -1, 256, 265, 257, -1, + 256, 258, 265, -1, 256, 257, 259, -1, + 256, 259, 260, -1, 256, 260, 258, -1, + 266, 265, 261, -1, 266, 269, 268, -1, + 266, 261, 269, -1, 262, 263, 264, -1, + 262, 264, 265, -1, 262, 284, 263, -1, + 262, 265, 266, -1, 262, 267, 284, -1, + 262, 268, 267, -1, 262, 266, 268, -1, + 322, 269, 323, -1, 322, 321, 269, -1, + 369, 472, 368, -1, 369, 368, 467, -1, + 506, 270, 281, -1, 506, 271, 270, -1, + 506, 272, 271, -1, 506, 505, 438, -1, + 506, 438, 272, -1, 506, 281, 507, -1, + 434, 273, 433, -1, 434, 274, 273, -1, + 434, 386, 274, -1, 275, 277, 276, -1, + 275, 276, 278, -1, 275, 279, 277, -1, + 275, 278, 279, -1, 372, 373, 460, -1, + 651, 523, 378, -1, 280, 281, 282, -1, + 280, 507, 281, -1, 280, 284, 283, -1, + 280, 283, 507, -1, 280, 285, 286, -1, + 280, 286, 284, -1, 280, 287, 285, -1, + 280, 282, 287, -1, 288, 383, 289, -1, + 288, 385, 383, -1, 288, 289, 290, -1, + 288, 388, 385, -1, 288, 290, 291, -1, + 288, 291, 388, -1, 440, 431, 439, -1, + 398, 460, 333, -1, 396, 512, 333, -1, + 396, 460, 373, -1, 396, 333, 460, -1, + 513, 445, 333, -1, 292, 333, 445, -1, + 292, 331, 333, -1, 292, 400, 331, -1, + 292, 445, 391, -1, 292, 391, 400, -1, + 411, 378, 336, -1, 335, 336, 293, -1, + 335, 293, 334, -1, 559, 410, 334, -1, + 559, 380, 561, -1, 559, 294, 295, -1, + 559, 334, 294, -1, 559, 295, 296, -1, + 559, 296, 380, -1, 338, 339, 297, -1, + 338, 297, 298, -1, 338, 298, 342, -1, + 299, 345, 306, -1, 299, 303, 345, -1, + 299, 306, 300, -1, 299, 300, 301, -1, + 299, 301, 302, -1, 299, 302, 303, -1, + 413, 345, 303, -1, 413, 315, 471, -1, + 413, 471, 345, -1, 413, 303, 343, -1, + 413, 311, 315, -1, 413, 414, 311, -1, + 347, 519, 304, -1, 348, 349, 345, -1, + 346, 304, 305, -1, 346, 305, 306, -1, + 346, 306, 349, -1, 346, 347, 304, -1, + 420, 470, 471, -1, 420, 471, 421, -1, + 307, 308, 315, -1, 307, 315, 312, -1, + 307, 309, 308, -1, 307, 312, 309, -1, + 310, 315, 311, -1, 310, 312, 315, -1, + 310, 311, 313, -1, 310, 313, 312, -1, + 476, 314, 478, -1, 476, 421, 315, -1, + 476, 315, 314, -1, 316, 377, 321, -1, + 316, 352, 377, -1, 316, 321, 352, -1, + 355, 365, 317, -1, 355, 423, 359, -1, + 355, 317, 423, -1, 363, 354, 318, -1, + 363, 365, 354, -1, 363, 318, 319, -1, + 363, 319, 361, -1, 320, 352, 321, -1, + 320, 321, 322, -1, 320, 323, 352, -1, + 320, 322, 323, -1, 324, 325, 519, -1, + 324, 519, 465, -1, 367, 368, 365, -1, + 367, 325, 324, -1, 367, 324, 465, -1, + 367, 364, 326, -1, 367, 326, 327, -1, + 367, 327, 325, -1, 462, 461, 568, -1, + 462, 372, 460, -1, 567, 568, 461, -1, + 328, 329, 377, -1, 328, 377, 401, -1, + 328, 391, 329, -1, 328, 400, 391, -1, + 328, 401, 400, -1, 375, 427, 606, -1, + 375, 376, 427, -1, 403, 375, 606, -1, + 403, 401, 375, -1, 406, 380, 330, -1, + 406, 330, 453, -1, 406, 453, 454, -1, + 430, 440, 441, -1, 394, 390, 392, -1, + 399, 333, 331, -1, 399, 398, 333, -1, + 399, 331, 400, -1, 402, 401, 403, -1, + 402, 460, 398, -1, 405, 396, 373, -1, + 405, 373, 382, -1, 332, 333, 512, -1, + 332, 512, 513, -1, 332, 513, 333, -1, + 409, 334, 410, -1, 409, 335, 334, -1, + 409, 411, 336, -1, 409, 336, 335, -1, + 337, 339, 338, -1, 337, 340, 341, -1, + 337, 341, 339, -1, 337, 342, 340, -1, + 337, 338, 342, -1, 415, 413, 343, -1, + 415, 343, 416, -1, 344, 345, 471, -1, + 344, 348, 345, -1, 344, 471, 348, -1, + 517, 347, 346, -1, 517, 519, 347, -1, + 517, 349, 348, -1, 517, 346, 349, -1, + 517, 348, 471, -1, 419, 470, 420, -1, + 419, 469, 470, -1, 419, 463, 469, -1, + 522, 484, 350, -1, 522, 350, 472, -1, + 485, 423, 484, -1, 599, 488, 485, -1, + 487, 351, 425, -1, 426, 542, 351, -1, + 426, 540, 542, -1, 426, 351, 487, -1, + 492, 630, 546, -1, 543, 606, 427, -1, + 497, 492, 496, -1, 497, 630, 492, -1, + 553, 427, 376, -1, 553, 552, 427, -1, + 553, 352, 542, -1, 553, 376, 352, -1, + 353, 354, 365, -1, 353, 365, 355, -1, + 353, 356, 354, -1, 353, 357, 356, -1, + 353, 358, 357, -1, 353, 359, 358, -1, + 353, 355, 359, -1, 360, 361, 362, -1, + 360, 363, 361, -1, 360, 362, 364, -1, + 360, 364, 367, -1, 360, 365, 363, -1, + 360, 367, 365, -1, 366, 368, 367, -1, + 366, 367, 465, -1, 366, 467, 368, -1, + 366, 465, 467, -1, 525, 472, 369, -1, + 525, 369, 467, -1, 525, 467, 526, -1, + 533, 525, 590, -1, 370, 382, 372, -1, + 370, 462, 568, -1, 370, 372, 462, -1, + 370, 568, 560, -1, 370, 560, 382, -1, + 371, 373, 372, -1, 371, 382, 373, -1, + 371, 372, 382, -1, 374, 376, 375, -1, + 374, 375, 401, -1, 374, 377, 376, -1, + 374, 401, 377, -1, 381, 560, 565, -1, + 381, 565, 428, -1, 650, 651, 378, -1, + 650, 378, 411, -1, 650, 410, 559, -1, + 379, 561, 380, -1, 379, 380, 406, -1, + 379, 406, 561, -1, 500, 561, 406, -1, + 500, 406, 428, -1, 407, 428, 406, -1, + 407, 381, 428, -1, 407, 405, 382, -1, + 407, 382, 560, -1, 407, 560, 381, -1, + 384, 451, 453, -1, 384, 393, 451, -1, + 384, 453, 383, -1, 384, 441, 393, -1, + 384, 430, 441, -1, 384, 383, 385, -1, + 432, 384, 385, -1, 432, 430, 384, -1, + 432, 387, 386, -1, 432, 388, 387, -1, + 432, 385, 388, -1, 432, 386, 434, -1, + 389, 431, 440, -1, 389, 430, 431, -1, + 389, 440, 430, -1, 435, 507, 390, -1, + 435, 390, 394, -1, 437, 438, 505, -1, + 437, 505, 504, -1, 447, 391, 445, -1, + 447, 392, 391, -1, 443, 457, 394, -1, + 443, 447, 446, -1, 443, 394, 392, -1, + 443, 392, 447, -1, 449, 445, 513, -1, + 511, 449, 514, -1, 511, 441, 456, -1, + 511, 393, 441, -1, 511, 451, 393, -1, + 503, 437, 504, -1, 503, 456, 437, -1, + 503, 394, 457, -1, 503, 435, 394, -1, + 395, 454, 452, -1, 395, 405, 454, -1, + 395, 396, 405, -1, 395, 512, 396, -1, + 395, 452, 512, -1, 450, 512, 452, -1, + 450, 510, 512, -1, 397, 402, 398, -1, + 397, 399, 400, -1, 397, 398, 399, -1, + 397, 400, 401, -1, 397, 401, 402, -1, + 459, 460, 402, -1, 459, 402, 403, -1, + 459, 567, 461, -1, 459, 606, 567, -1, + 459, 403, 606, -1, 404, 454, 405, -1, + 404, 406, 454, -1, 404, 407, 406, -1, + 404, 405, 407, -1, 408, 409, 410, -1, + 408, 411, 409, -1, 408, 410, 650, -1, + 408, 650, 411, -1, 412, 414, 413, -1, + 412, 413, 415, -1, 412, 415, 416, -1, + 412, 416, 417, -1, 412, 417, 414, -1, + 418, 582, 463, -1, 418, 463, 419, -1, + 418, 419, 420, -1, 418, 583, 582, -1, + 418, 420, 421, -1, 418, 476, 583, -1, + 418, 421, 476, -1, 482, 463, 464, -1, + 482, 469, 463, -1, 516, 517, 471, -1, + 532, 472, 533, -1, 521, 473, 494, -1, + 576, 494, 535, -1, 475, 476, 478, -1, + 480, 479, 642, -1, 480, 642, 640, -1, + 480, 475, 478, -1, 632, 497, 473, -1, + 632, 630, 497, -1, 592, 482, 464, -1, + 422, 423, 485, -1, 422, 425, 424, -1, + 422, 424, 423, -1, 422, 487, 425, -1, + 422, 485, 488, -1, 422, 488, 487, -1, + 597, 522, 575, -1, 489, 556, 540, -1, + 489, 540, 426, -1, 489, 426, 487, -1, + 541, 496, 550, -1, 541, 558, 496, -1, + 551, 427, 552, -1, 551, 543, 427, -1, + 495, 494, 473, -1, 495, 473, 497, -1, + 499, 472, 525, -1, 499, 533, 472, -1, + 569, 560, 568, -1, 564, 428, 565, -1, + 564, 500, 428, -1, 563, 644, 650, -1, + 429, 431, 430, -1, 429, 430, 432, -1, + 429, 433, 431, -1, 429, 434, 433, -1, + 429, 432, 434, -1, 502, 507, 435, -1, + 502, 435, 503, -1, 436, 438, 437, -1, + 436, 439, 438, -1, 436, 440, 439, -1, + 436, 437, 456, -1, 436, 441, 440, -1, + 436, 456, 441, -1, 442, 457, 443, -1, + 442, 443, 446, -1, 442, 446, 449, -1, + 442, 511, 457, -1, 442, 449, 511, -1, + 444, 445, 449, -1, 444, 449, 446, -1, + 444, 447, 445, -1, 444, 446, 447, -1, + 448, 513, 514, -1, 448, 514, 449, -1, + 448, 449, 513, -1, 509, 510, 450, -1, + 509, 451, 511, -1, 509, 450, 452, -1, + 509, 453, 451, -1, 509, 454, 453, -1, + 509, 452, 454, -1, 455, 511, 456, -1, + 455, 456, 503, -1, 455, 457, 511, -1, + 455, 503, 457, -1, 458, 460, 459, -1, + 458, 459, 461, -1, 458, 462, 460, -1, + 458, 461, 462, -1, 530, 463, 582, -1, + 530, 464, 463, -1, 530, 592, 464, -1, + 518, 467, 465, -1, 518, 465, 519, -1, + 466, 516, 469, -1, 466, 482, 526, -1, + 466, 469, 482, -1, 466, 518, 516, -1, + 466, 526, 467, -1, 466, 467, 518, -1, + 468, 470, 469, -1, 468, 469, 516, -1, + 468, 471, 470, -1, 468, 516, 471, -1, + 534, 522, 472, -1, 534, 472, 532, -1, + 520, 473, 521, -1, 520, 632, 473, -1, + 536, 576, 535, -1, 474, 521, 494, -1, + 474, 494, 576, -1, 474, 572, 521, -1, + 474, 576, 572, -1, 586, 642, 479, -1, + 586, 479, 523, -1, 481, 475, 480, -1, + 481, 583, 476, -1, 481, 476, 475, -1, + 477, 480, 478, -1, 477, 479, 480, -1, + 477, 478, 523, -1, 477, 523, 479, -1, + 579, 530, 582, -1, 579, 531, 530, -1, + 579, 580, 640, -1, 579, 572, 528, -1, + 584, 480, 640, -1, 584, 583, 481, -1, + 584, 481, 480, -1, 622, 620, 572, -1, + 622, 572, 579, -1, 622, 579, 640, -1, + 591, 526, 482, -1, 591, 482, 592, -1, + 591, 590, 525, -1, 588, 531, 577, -1, + 588, 577, 594, -1, 589, 533, 590, -1, + 555, 490, 599, -1, 555, 556, 490, -1, + 596, 597, 575, -1, 483, 597, 599, -1, + 483, 484, 522, -1, 483, 522, 597, -1, + 483, 485, 484, -1, 483, 599, 485, -1, + 486, 487, 488, -1, 486, 489, 487, -1, + 486, 488, 599, -1, 486, 599, 490, -1, + 486, 490, 556, -1, 486, 556, 489, -1, + 629, 546, 630, -1, 629, 600, 546, -1, + 539, 558, 541, -1, 539, 540, 556, -1, + 539, 556, 558, -1, 491, 496, 492, -1, + 491, 545, 496, -1, 491, 492, 546, -1, + 491, 546, 545, -1, 493, 543, 496, -1, + 493, 496, 545, -1, 547, 543, 493, -1, + 547, 493, 545, -1, 549, 496, 543, -1, + 549, 543, 551, -1, 549, 550, 496, -1, + 557, 535, 494, -1, 557, 494, 495, -1, + 557, 496, 558, -1, 557, 497, 496, -1, + 557, 495, 497, -1, 498, 525, 533, -1, + 498, 499, 525, -1, 498, 533, 499, -1, + 612, 608, 616, -1, 612, 616, 613, -1, + 566, 561, 500, -1, 566, 500, 564, -1, + 501, 502, 503, -1, 501, 504, 505, -1, + 501, 503, 504, -1, 501, 505, 506, -1, + 501, 506, 507, -1, 501, 507, 502, -1, + 508, 510, 509, -1, 508, 509, 511, -1, + 508, 512, 510, -1, 508, 513, 512, -1, + 508, 514, 513, -1, 508, 511, 514, -1, + 515, 517, 516, -1, 515, 516, 518, -1, + 515, 519, 517, -1, 515, 518, 519, -1, + 571, 520, 636, -1, 571, 632, 520, -1, + 621, 520, 521, -1, 621, 521, 572, -1, + 621, 636, 520, -1, 574, 536, 575, -1, + 574, 576, 536, -1, 626, 522, 534, -1, + 626, 575, 522, -1, 626, 577, 576, -1, + 585, 642, 586, -1, 581, 640, 580, -1, + 581, 584, 640, -1, 656, 586, 523, -1, + 656, 523, 651, -1, 635, 654, 632, -1, + 639, 622, 640, -1, 524, 525, 526, -1, + 524, 526, 591, -1, 524, 591, 525, -1, + 527, 572, 576, -1, 527, 576, 577, -1, + 527, 528, 572, -1, 527, 579, 528, -1, + 527, 531, 579, -1, 527, 577, 531, -1, + 529, 530, 531, -1, 529, 531, 588, -1, + 529, 592, 530, -1, 529, 588, 592, -1, + 593, 588, 594, -1, 628, 532, 533, -1, + 628, 533, 589, -1, 628, 589, 593, -1, + 628, 534, 532, -1, 628, 626, 534, -1, + 598, 555, 599, -1, 598, 535, 557, -1, + 598, 557, 555, -1, 598, 596, 575, -1, + 598, 575, 536, -1, 598, 536, 535, -1, + 537, 603, 613, -1, 537, 613, 616, -1, + 537, 600, 603, -1, 537, 616, 600, -1, + 538, 540, 539, -1, 538, 539, 541, -1, + 538, 542, 540, -1, 538, 541, 550, -1, + 538, 553, 542, -1, 538, 550, 553, -1, + 605, 543, 547, -1, 605, 606, 543, -1, + 605, 616, 617, -1, 544, 545, 546, -1, + 544, 547, 545, -1, 544, 546, 600, -1, + 544, 600, 616, -1, 544, 616, 605, -1, + 544, 605, 547, -1, 548, 550, 549, -1, + 548, 549, 551, -1, 548, 551, 552, -1, + 548, 553, 550, -1, 548, 552, 553, -1, + 554, 556, 555, -1, 554, 555, 557, -1, + 554, 558, 556, -1, 554, 557, 558, -1, + 562, 559, 561, -1, 562, 650, 559, -1, + 562, 563, 650, -1, 609, 560, 569, -1, + 609, 565, 560, -1, 614, 613, 603, -1, + 614, 603, 602, -1, 614, 561, 566, -1, + 614, 562, 561, -1, 614, 563, 562, -1, + 614, 644, 563, -1, 614, 602, 644, -1, + 610, 564, 565, -1, 610, 565, 609, -1, + 610, 566, 564, -1, 610, 612, 614, -1, + 610, 614, 566, -1, 618, 616, 608, -1, + 618, 567, 606, -1, 618, 568, 567, -1, + 618, 569, 568, -1, 618, 609, 569, -1, + 570, 571, 636, -1, 570, 632, 571, -1, + 570, 636, 635, -1, 570, 635, 632, -1, + 619, 572, 620, -1, 619, 621, 572, -1, + 573, 574, 575, -1, 573, 575, 626, -1, + 573, 576, 574, -1, 573, 626, 576, -1, + 625, 594, 577, -1, 625, 577, 626, -1, + 578, 580, 579, -1, 578, 581, 580, -1, + 578, 582, 583, -1, 578, 579, 582, -1, + 578, 583, 584, -1, 578, 584, 581, -1, + 648, 642, 585, -1, 648, 585, 586, -1, + 648, 586, 656, -1, 653, 654, 635, -1, + 634, 635, 636, -1, 623, 642, 633, -1, + 623, 633, 639, -1, 587, 588, 593, -1, + 587, 593, 589, -1, 587, 589, 590, -1, + 587, 590, 591, -1, 587, 591, 592, -1, + 587, 592, 588, -1, 627, 593, 594, -1, + 627, 628, 593, -1, 627, 594, 625, -1, + 595, 597, 596, -1, 595, 596, 598, -1, + 595, 599, 597, -1, 595, 598, 599, -1, + 631, 643, 603, -1, 631, 603, 600, -1, + 631, 600, 629, -1, 601, 644, 602, -1, + 601, 643, 644, -1, 601, 602, 603, -1, + 601, 603, 643, -1, 604, 606, 605, -1, + 604, 605, 617, -1, 604, 618, 606, -1, + 604, 617, 618, -1, 607, 608, 612, -1, + 607, 618, 608, -1, 607, 609, 618, -1, + 607, 612, 610, -1, 607, 610, 609, -1, + 611, 612, 613, -1, 611, 613, 614, -1, + 611, 614, 612, -1, 615, 617, 616, -1, + 615, 618, 617, -1, 615, 616, 618, -1, + 637, 619, 620, -1, 637, 639, 633, -1, + 637, 636, 621, -1, 637, 621, 619, -1, + 637, 620, 622, -1, 637, 622, 639, -1, + 646, 656, 653, -1, 646, 653, 635, -1, + 641, 642, 623, -1, 641, 623, 639, -1, + 624, 625, 626, -1, 624, 627, 625, -1, + 624, 626, 628, -1, 624, 628, 627, -1, + 655, 629, 630, -1, 655, 631, 629, -1, + 655, 630, 632, -1, 655, 632, 654, -1, + 655, 643, 631, -1, 647, 633, 642, -1, + 647, 642, 648, -1, 647, 635, 634, -1, + 647, 646, 635, -1, 647, 634, 636, -1, + 647, 636, 637, -1, 647, 637, 633, -1, + 638, 639, 640, -1, 638, 641, 639, -1, + 638, 640, 642, -1, 638, 642, 641, -1, + 652, 643, 655, -1, 652, 650, 644, -1, + 652, 644, 643, -1, 645, 656, 646, -1, + 645, 646, 647, -1, 645, 648, 656, -1, + 645, 647, 648, -1, 649, 651, 650, -1, + 649, 650, 652, -1, 649, 654, 653, -1, + 649, 655, 654, -1, 649, 652, 655, -1, + 649, 656, 651, -1, 649, 653, 656, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/link2.wrl b/examples/rlsg/staeubli-tx60l.convex/link2.wrl new file mode 100644 index 00000000..d379792a --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link2.wrl @@ -0,0 +1,1017 @@ +#VRML V2.0 utf8 + + +DEF link2 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.4867 -0.010084 0.17680401, + -0.461981 -0.061974 0.147995, + -0.461981 0.061974 0.147995, + 0.00185499 -0.071274102 0.176788, + -0.484045 -0.019817 0.19210801, + -0.48578501 -0.0099750096 0.19210801, + -0.48209199 -0.029712999 0.17680401, + -0.484961 -0.020033 0.17680401, + -0.4867 0.010084 0.17680401, + -0.44782099 0.036697 0.212936, + -0.43015099 0.0019769899 0.216309, + -0.390356 -0.073181003 0.21066301, + -0.39471999 -0.08625 0.191513, + -0.395697 -0.08625 0.19210801, + -0.39563599 0.087188996 0.17680401, + -0.39471999 0.08625 0.191513, + -0.433539 0.080971003 0.147995, + -0.43332499 0.080429003 0.134506, + -0.434668 0.079094 0.19210801, + -0.40000001 0.087638997 0.147995, + -0.40573701 0.087104999 0.17680401, + -0.41559401 0.084937997 0.19210801, + -0.448706 0.072867997 0.147995, + -0.44837001 0.072379999 0.134506, + -0.48096299 0.033539001 0.147995, + -0.47287601 0.048691001 0.147995, + 0.0018550101 0.071273901 0.176788, + -0.39459801 0.088088997 0.16149899, + 0.01095 0.070449904 0.176788, + -0.39465901 0.087173 0.140503, + 2.4016417e-05 0.071052901 0.134506, + -0.40000001 0.087050997 0.134506, + 0.070276 -0.0139771 0.147995, + 0.069665998 -0.0138621 0.134506, + 0.0017940199 -0.070335098 0.19207799, + 0.01095 -0.070450097 0.176788, + 2.3995415e-05 -0.0578731 0.208435, + 0.00179403 0.070334896 0.19207799, + -0.395697 0.08625 0.19210801, + -0.40567601 0.086173996 0.19210801, + 0.068933003 -0.018158101 0.176788, + -0.486395 0.017874001 0.16149899, + -0.480414 0.033314001 0.134506, + -0.472388 0.048363 0.134506, + -0.46155399 0.061554 0.134506, + -0.47287601 -0.048691001 0.147995, + -0.472388 -0.048363 0.134506, + -0.41709 -0.085960001 0.147995, + -0.41696799 -0.085381001 0.134506, + -0.43973401 0.045322001 0.212936, + -0.44867599 0.024011999 0.21376, + -0.44306001 0.033047002 0.21376, + -0.43830001 0.029398 0.214569, + -0.433539 0.025736 0.21521001, + -0.429968 -0.0039450098 0.216309, + -0.40573701 -0.087104999 0.17680401, + -0.39563599 -0.087188996 0.17680401, + -0.40567601 -0.086173996 0.19210801, + -0.45245999 -0.069778003 0.17680401, + -0.473059 -0.047756001 0.17680401, + -0.47223499 -0.050686002 0.16149899, + -0.47809401 -0.038993999 0.17680401, + -0.48120701 -0.029394001 0.19210801, + -0.40482199 -0.073654003 0.21066301, + -0.434668 -0.079094 0.19210801, + -0.45950899 -0.062572002 0.19210801, + -0.45188001 -0.069031 0.19210801, + -0.444922 -0.058559 0.21066301, + -0.46634501 -0.055279002 0.19210801, + -0.467078 -0.055877998 0.17680401, + -0.46015 -0.063251004 0.17680401, + -0.463934 -0.036906999 0.21066301, + -0.45548099 -0.048668001 0.21066301, + -0.472296 -0.047245 0.19210801, + -0.47727099 -0.038578 0.19210801, + -0.46988499 -0.023726 0.21066301, + -0.44403699 0.075370997 0.17680401, + -0.43503401 0.079956003 0.17680401, + -0.425574 0.083466001 0.17680401, + -0.42529899 0.082572997 0.19210801, + -0.41574699 0.085860997 0.17680401, + -0.41709 0.085960001 0.147995, + -0.42999899 0.082976997 0.16149899, + -0.41696799 0.085381001 0.134506, + -0.41257301 0.087334 0.16149899, + -0.46015 0.063251004 0.17680401, + -0.467078 0.055877998 0.17680401, + -0.45950899 0.062572002 0.19210801, + -0.44357899 0.074561998 0.19210801, + -0.44867599 0.055496 0.21066301, + -0.436896 0.063923001 0.21066301, + -0.48120701 0.029394001 0.19210801, + -0.484961 0.020033 0.17680401, + -0.484045 0.019817 0.19210801, + -0.48209199 0.029712999 0.17680401, + -0.46634501 0.055279002 0.19210801, + -0.458563 0.044932999 0.21066301, + -0.46619299 0.032646 0.21066301, + -0.48099399 0.035004001 0.16149899, + -0.47727099 0.038578 0.19210801, + 0.0052730399 0.0720369 0.16149899, + -0.013892 -0.069687098 0.134506, + -0.013892 0.069686897 0.134506, + 0.066187002 -0.027416101 0.147995, + 0.067224003 -0.026417101 0.16149899, + 0.065637 -0.027191101 0.134506, + 0.010828 -0.069527097 0.19207799, + 2.3996388e-05 -0.047031101 0.21048, + 0.011316 -0.0567591 0.208435, + 0.062036 -0.035118099 0.176788, + 0.062036 0.035117902 0.176788, + 0.059595 0.039802901 0.147995, + 0.059106 0.039473899 0.134506, + -0.48706701 -1.7022645e-08 0.134506, + -0.48538801 0.016983001 0.134506, + -0.48538801 -0.016983001 0.134506, + -0.48596799 -0.017097 0.147995, + -0.48596799 0.017097 0.147995, + -0.488226 -1.3889466e-08 0.16149899, + -0.48096299 -0.033539001 0.147995, + -0.48099399 -0.035004001 0.16149899, + -0.486395 -0.017874001 0.16149899, + -0.480414 -0.033314001 0.134506, + -0.433539 -0.080971003 0.147995, + -0.42999899 -0.082976997 0.16149899, + -0.43332499 -0.080429003 0.134506, + -0.46155399 -0.061554 0.134506, + -0.39465901 -0.087173 0.140503, + 2.4000581e-05 -0.071053103 0.134506, + 0.0052730199 -0.072037101 0.16149899, + -0.40000001 -0.087638997 0.147995, + -0.39459801 -0.088088997 0.16149899, + -0.40000001 -0.087050997 0.134506, + -0.40604201 0.01048 0.217316, + -0.44818699 0.0031589901 0.214569, + -0.45407701 0.026663 0.212936, + -0.452429 0.01405 0.21376, + -0.45416901 0.00355099 0.21376, + -0.47366899 0.00482699 0.21066301, + -0.48578501 0.00997499 0.19210801, + -0.47128901 0.019104 0.21066301, + -0.45822799 0.015602 0.212936, + -0.46015 0.0039429902 0.212936, + -0.45975301 -0.0078680096 0.212936, + -0.47318101 -0.0096340096 0.21066301, + -0.48636499 -1.0686042e-08 0.19210801, + -0.436194 0.0023709901 0.21585099, + -0.4271 0.013368 0.216309, + -0.429205 0.0078229904 0.216309, + -0.43503401 0.0093839904 0.21585099, + -0.443304 0.021358 0.214569, + -0.42337599 0.0062609902 0.216766, + -0.446661 0.012499 0.214569, + -0.41574699 -0.085860997 0.17680401, + -0.425574 -0.083466001 0.17680401, + -0.42529899 -0.082572997 0.19210801, + -0.41559401 -0.084937997 0.19210801, + -0.41257301 -0.087334 0.16149899, + -0.44403699 -0.075370997 0.17680401, + -0.43503401 -0.079956003 0.17680401, + -0.44357899 -0.074561998 0.19210801, + -0.45245999 0.069778003 0.17680401, + -0.460455 0.064262003 0.16149899, + -0.44617301 0.075180002 0.16149899, + -0.45188001 0.069031 0.19210801, + -0.473059 0.047756001 0.17680401, + -0.472296 0.047245 0.19210801, + -0.47223499 0.050686002 0.16149899, + -0.47809401 0.038993999 0.17680401, + 0.039818998 0.059565902 0.147995, + 0.039453 0.0590779 0.134506, + 0.027429 0.066184901 0.147995, + 0.014001 0.070266902 0.147995, + 0.027185 0.065642901 0.134506, + 0.013879 0.069686897 0.134506, + 0.036706999 0.061122902 0.176788, + 0.05105 -0.049763098 0.176788, + 0.050684001 -0.050659101 0.147995, + 0.050255999 -0.050243098 0.134506, + 0.039818998 -0.059566099 0.147995, + 0.059595 -0.039803099 0.147995, + 0.063440003 -0.0345801 0.16149899, + 0.059106 -0.0394741 0.134506, + 0.019678 -0.067558102 0.19207799, + 0.019921999 -0.068459101 0.176788, + 0.014185 -0.070824102 0.16149899, + 0.014001 -0.070267104 0.147995, + 0.027185 -0.065643102 0.134506, + 0.039453 -0.059078101 0.134506, + 0.027429 -0.066185102 0.147995, + 0.013879 -0.069687098 0.134506, + -0.39212599 -0.059765 0.212936, + -0.39291999 -0.053822 0.21376, + 0.017968999 -0.0434491 0.21048, + 2.3997805e-05 -0.032997102 0.212479, + -0.39368299 -0.047878001 0.214569, + 2.3998307e-05 -0.0283051 0.213043, + 0.032129001 -0.048119102 0.208435, + 0.022119001 -0.053467099 0.208435, + 0.050377999 -0.049107101 0.19207799, + 0.052880999 -0.049171101 0.16149899, + 0.057030998 -0.042793099 0.176788, + 0.058618002 -0.0422021 0.16149899, + 0.066064 -0.026859101 0.176788, + 0.071680002 -0.0089910803 0.16149899, + 0.069971003 -0.017843099 0.16149899, + 0.071680002 0.0089909201 0.16149899, + 0.072228998 -7.5995068e-08 0.16149899, + 0.070276 0.0139769 0.147995, + 0.071069002 -7.8880362e-08 0.134506, + 0.069665998 0.0138619 0.134506, + 0.066187002 0.0274159 0.147995, + 0.065637 0.027190899 0.134506, + -0.448706 -0.072867997 0.147995, + -0.44617301 -0.075180002 0.16149899, + -0.460455 -0.064262003 0.16149899, + -0.44837001 -0.072379999 0.134506, + -0.392645 0.0096009802 0.217316, + -0.447882 -0.00630301 0.214569, + -0.45383301 -0.0070860102 0.21376, + -0.42938799 -0.038311001 0.214569, + -0.425726 -0.033539001 0.21521001, + -0.43595001 -0.0047330102 0.21585099, + -0.44003901 -0.013589 0.21521001, + -0.40393701 -0.060153998 0.212936, + -0.43265399 -0.066200003 0.21066301, + -0.41910401 -0.071296997 0.21066301, + -0.40353999 -0.054173 0.21376, + -0.396063 -0.029966 0.216309, + -0.423987 0.0184 0.216309, + -0.43253201 0.016037 0.21585099, + -0.42877799 0.022072 0.21585099, + 0.050684001 0.0506589 0.147995, + 0.050255999 0.050242901 0.134506, + 0.058618002 0.042201899 0.16149899, + 0.057030998 0.042792901 0.176788, + 0.044275001 0.0559039 0.176788, + 0.039147999 0.060718901 0.16149899, + 0.019921999 0.0684589 0.176788, + 0.014185 0.0708239 0.16149899, + 0.028527999 0.0653309 0.176788, + 0.022913 0.068503901 0.16149899, + 0.031273998 0.065116897 0.16149899, + 0.036706999 -0.061123099 0.176788, + 0.036217999 -0.060322098 0.19207799, + 0.044275001 -0.055904102 0.176788, + 0.043664999 -0.055172101 0.19207799, + 0.046349999 -0.055374101 0.16149899, + 0.039147999 -0.060719099 0.16149899, + 0.028527999 -0.065331101 0.176788, + 0.031273998 -0.065117098 0.16149899, + 0.028162001 -0.064476103 0.19207799, + 0.022913 -0.068504103 0.16149899, + 0.028162001 0.064475901 0.19207799, + 0.036217999 0.060321901 0.19207799, + 0.00826398 -0.041546099 0.211197, + 0.0073489901 -0.0369641 0.211914, + 0.0091799898 -0.0461271 0.21048, + 2.3997382e-05 -0.037689101 0.211914, + 0.071313001 -7.4192414e-08 0.176788, + 0.066064 0.0268589 0.176788, + 0.063440003 0.034579899 0.16149899, + 0.065149002 0.026505901 0.19207799, + 0.061243001 0.034656901 0.19207799, + 0.068933003 0.018157899 0.176788, + 0.068017997 0.0179199 0.19207799, + 0.069971003 0.0178429 0.16149899, + 0.067224003 0.0264169 0.16149899, + 0.0043580299 0.00180794 0.214417, + 0.0033200199 0.00334094 0.214417, + 0.0017940199 0.0043649399 0.214417, + 2.4002382e-05 0.0094499402 0.214325, + 0.0047240099 -6.2654145e-08 0.214417, + 0.0066770101 -0.0066820602 0.214325, + 0.0033200199 -0.0033410599 0.214417, + 0.0043580299 -0.00180806 0.214417, + -0.45139199 -0.017449999 0.21376, + -0.457068 -0.019377001 0.212936, + -0.452216 -0.030142 0.212936, + -0.44080201 -0.035792999 0.21376, + -0.445319 -0.039744999 0.212936, + -0.42725199 -0.023907 0.21585099, + -0.41840199 -0.023979001 0.216309, + -0.42206401 -0.028765 0.21585099, + -0.426184 -0.015112 0.216309, + -0.42273599 -0.019928001 0.216309, + -0.43140301 -0.018129 0.21585099, + -0.420935 -0.012095 0.216766, + -0.42862499 -0.0097150104 0.216309, + -0.43433201 -0.011655 0.21585099, + -0.42401701 -0.048691001 0.21376, + -0.43305099 -0.043067999 0.21376, + -0.43671301 -0.047825001 0.212936, + -0.42667201 -0.054065999 0.212936, + -0.414038 -0.052437 0.21376, + -0.41559401 -0.058228001 0.212936, + -0.41870701 -0.037914 0.21521001, + -0.42136201 -0.043311998 0.214569, + -0.416022 -0.03252 0.21585099, + -0.40936899 -0.035023 0.21585099, + -0.423987 -0.0031570101 0.216766, + -0.411688 0.0031319801 0.217316, + -0.393958 -0.01048 0.217316, + 2.4001292e-05 -6.2134674e-08 0.21449301, + 0.0017940199 -0.00436506 0.214417, + -0.39761999 -0.017990001 0.217041, + 2.4000288e-05 -0.0094500603 0.214325, + -0.413367 -0.027107 0.216309, + -0.407812 -0.029193999 0.216309, + -0.40198401 -0.030159 0.216309, + -0.39526999 -0.035950001 0.21585099, + 2.3999786e-05 -0.0141691 0.214081, + 0.0036250199 -0.0087310597 0.214325, + 2.3999291e-05 -0.018888099 0.213837, + 0.05105 0.049762901 0.176788, + 0.046349999 0.0553739 0.16149899, + 0.052880999 0.0491709 0.16149899, + -0.397223 0.042183001 0.21521001, + 0.010828 0.069526903 0.19207799, + 0.019678 0.067557901 0.19207799, + 0.022119001 0.053466901 0.208435, + -0.42371199 0.069893003 0.21066301, + -0.40964401 0.073181003 0.21066301, + 0.014429 -0.034821101 0.211914, + 0.0064329901 -0.0323641 0.212479, + 0.069788001 0.0090339296 0.19207799, + 0.070336998 -7.2390222e-08 0.19207799, + 0.069788001 -0.0090340702 0.19207799, + 0.010034 -0.0100191 0.214081, + 0.0066770101 0.0066819401 0.214325, + 0.02334 -0.023333101 0.212479, + 0.040918 0.0409199 0.208435, + 0.032129001 0.048118901 0.208435, + 0.056299001 0.042232901 0.19207799, + 0.050377999 0.0491069 0.19207799, + 0.043664999 0.055171899 0.19207799, + 0.048119999 0.0321499 0.208435, + 0.053491 0.022145901 0.208435, + 2.4003397e-05 0.0188879 0.213837, + 2.4002897e-05 0.0141689 0.214081, + 0.0036250199 0.0087309396 0.214325, + 0.0046020001 0.023143901 0.21344, + 0.0055180001 0.027760901 0.213043, + -0.441809 -0.024147 0.214569, + -0.44571501 -0.015523 0.214569, + -0.43662101 -0.021136999 0.21521001, + -0.44702801 -0.027143 0.21376, + -0.43631601 -0.031840999 0.214569, + -0.40277699 -0.042183001 0.21521001, + -0.412512 -0.046645999 0.214569, + -0.40314299 -0.048186999 0.214569, + -0.410956 -0.040835999 0.21521001, + -0.40237999 -0.036178999 0.21585099, + -0.41046801 -0.0060510202 0.217316, + -0.411993 -0.0015800199 0.217316, + -0.41571701 -0.00907302 0.217041, + -0.40961301 0.00736698 0.217316, + -0.41919601 0.014727 0.216766, + -0.40906399 0.015714999 0.217041, + -0.41992801 0.022724001 0.216309, + 2.4005118e-05 0.0329969 0.212479, + 2.400461e-05 0.028304899 0.213043, + -0.43579701 0.040817 0.21376, + -0.39646 0.054173 0.21376, + -0.396063 0.060153998 0.212936, + 2.4008305e-05 0.057872899 0.208435, + -0.39517799 0.073654003 0.21066301, + 0.0064329901 0.032363899 0.212479, + 0.00905798 -0.021801099 0.21344, + 0.0072269798 -0.0174501 0.213837, + 0.0046019899 -0.0231441 0.21344, + 0.0055180001 -0.0277611 0.213043, + 0.013086 -0.0196211 0.21344, + 0.065149002 -0.0265061 0.19207799, + 0.068017997 -0.017920099 0.19207799, + 0.0094240103 -6.3169608e-08 0.214325, + 0.0087520303 -0.0036160599 0.214325, + 0.0087520303 0.00361594 0.214325, + 0.039087001 0.026128899 0.21048, + 0.033227999 0.0332569 0.21048, + 0.026636001 0.0266509 0.211914, + -0.42413899 0.041820999 0.214569, + -0.43182999 0.036308002 0.214569, + -0.427863 0.031784002 0.21521001, + -0.423895 0.02726 0.21585099, + -0.39761999 0.036178999 0.21585099, + -0.39685699 0.048186999 0.214569, + 0.02334 0.023332899 0.212479, + 0.020958999 0.031337898 0.211914, + -0.40314299 -0.011688 0.217316, + -0.40735501 -0.0096010203 0.217316, + -0.41474 -0.019192001 0.216766, + -0.40625599 -0.023367001 0.216766, + -0.39685699 -0.023983 0.216766, + -0.398413 -0.011997 0.217316, + -0.40000001 -1.7437801e-08 0.217499, + -0.417456 0.051406998 0.21376, + -0.419379 0.057082999 0.212936, + -0.40787399 0.059765 0.212936, + -0.40707999 0.053822 0.21376, + -0.42713001 0.047015999 0.21376, + -0.406317 0.047878001 0.214569, + -0.43015099 0.052207999 0.212936, + 0.011316 0.056758899 0.208435, + 2.4006888e-05 0.0470309 0.21048, + 0.016199 0.039134901 0.211197, + 0.017968999 0.043448899 0.21048, + 0.026147 0.039103899 0.21048, + 0.018335 -0.0274371 0.212479, + 0.010828 -0.0261501 0.213043, + 0.020958999 -0.031338099 0.211914, + 0.01571 -0.023535101 0.213043, + 0.019617001 -0.0131101 0.21344, + 0.01333 -0.0133561 0.213837, + 0.020044001 -0.0200161 0.213043, + 0.014185 -6.3739996e-08 0.214081, + 0.026636001 -0.026651099 0.211914, + 0.026147 -0.0391041 0.21048, + 0.047021002 -6.7780917e-08 0.21048, + 0.056786999 0.0112899 0.208435, + 0.057886001 -6.9229586e-08 0.208435, + 0.056786999 -0.0112901 0.208435, + 0.031335 0.020938899 0.211914, + 0.027429 0.0183319 0.212479, + 0.035241999 0.0235349 0.211197, + -0.418127 0.031401001 0.21585099, + -0.41553301 0.045731001 0.214569, + -0.42114899 0.03661 0.21521001, + 0.010828 0.026149901 0.213043, + 0.018335 0.027436901 0.212479, + 0.010034 0.0100189 0.214081, + 0.0082639903 0.041545901 0.211197, + 0.014429 0.034820899 0.211914, + 0.0073489998 0.036963899 0.211914, + 0.0091800001 0.046126898 0.21048, + 2.4005698e-05 0.0376889 0.211914, + 0.018883999 -6.4309567e-08 0.213837, + 0.021814 0.0090299398 0.21344, + 0.017480001 -0.0072280602 0.213837, + 0.023584001 -6.4860515e-08 0.21344, + 0.023157001 0.0046029398 0.21344, + 0.030480999 0.0126279 0.212479, + 0.027734 0.0055219298 0.213043, + 0.026147 0.0108319 0.213043, + -0.415106 0.026175 0.216309, + -0.41165799 0.034332 0.21585099, + 0.013086 0.019620899 0.21344, + 0.0072269901 0.017449901 0.213837, + 0.00905798 0.0218009 0.21344, + 0.01571 0.0235349 0.213043, + 0.019617001 0.0131099 0.21344, + 0.017480001 0.00722794 0.213837, + 0.023522999 0.015724899 0.213043, + 0.01333 0.0133559 0.213837, + 0.020044001 0.020015899 0.213043, + 0.053491 -0.0221461 0.208435, + 0.056299001 -0.042233098 0.19207799, + 0.061243001 -0.034657098 0.19207799, + 0.039087001 -0.0261291 0.21048, + 0.033227999 -0.033257101 0.21048, + 0.048119999 -0.032150101 0.208435, + 0.040918 -0.040920101 0.208435, + 0.035241999 -0.023535101 0.211197, + 0.036951002 0.00735293 0.211914, + 0.032373 0.00643693 0.212479, + 0.034814 0.0144229 0.211914, + 0.039147999 0.016210901 0.211197, + 0.043481 0.0179979 0.21048, + 0.046105999 0.0091749299 0.21048, + -0.39374399 0.023367001 0.216766, + -0.40237999 0.017990001 0.217041, + -0.412085 0.020950001 0.216766, + -0.39685699 0.011688 0.217316, + -0.40158701 0.011997 0.217316, + 0.023522999 -0.0157251 0.213043, + 0.021814 -0.0090300599 0.21344, + -0.40393701 0.029966 0.216309, + -0.40970501 0.028620001 0.216309, + -0.40472999 0.035950001 0.21585099, + -0.40314299 0.023983 0.216766, + -0.39801601 0.030159 0.216309, + 0.027429 -0.0183321 0.212479, + 0.031335 -0.020939101 0.211914, + 0.023157001 -0.00460306 0.21344, + 0.042383 -6.7175328e-08 0.211197, + 0.039147999 -0.0162111 0.211197, + 0.046105999 -0.0091750696 0.21048, + 0.043481 -0.017998099 0.21048, + 0.032373 -0.0064370702 0.212479, + 0.027734 -0.00552207 0.213043, + 0.026147 -0.0108321 0.213043, + 0.030480999 -0.0126281 0.212479, + 0.034814 -0.0144231 0.211914, + 0.036951002 -0.0073530702 0.211914, + 0.028284 -6.5431323e-08 0.213043, + 0.032983001 -6.6003977e-08 0.212479, + 0.037682999 -6.6583056e-08 0.211914 ] + + } + coordIndex [ 31, 102, 44, -1, 17, 31, 44, -1, + 29, 31, 27, -1, 0, 118, 121, -1, + 167, 95, 86, -1, 204, 209, 207, -1, + 204, 207, 259, -1, 3, 131, 129, -1, + 3, 129, 34, -1, 5, 118, 0, -1, + 5, 145, 118, -1, 5, 0, 121, -1, + 139, 140, 93, -1, 139, 93, 41, -1, + 139, 118, 145, -1, 117, 118, 41, -1, + 1, 215, 60, -1, 1, 126, 215, -1, + 1, 60, 126, -1, 96, 89, 95, -1, + 144, 145, 5, -1, 11, 63, 13, -1, + 11, 13, 34, -1, 69, 60, 215, -1, + 69, 68, 60, -1, 73, 60, 68, -1, + 19, 27, 31, -1, 83, 31, 17, -1, + 82, 83, 17, -1, 322, 21, 321, -1, + 23, 17, 44, -1, 23, 163, 17, -1, + 2, 44, 167, -1, 162, 167, 86, -1, + 162, 2, 167, -1, 162, 23, 44, -1, + 162, 44, 2, -1, 43, 167, 44, -1, + 92, 41, 93, -1, 98, 43, 42, -1, + 30, 31, 29, -1, 205, 32, 204, -1, + 12, 34, 13, -1, 12, 3, 34, -1, + 12, 131, 3, -1, 185, 129, 186, -1, + 185, 35, 129, -1, 15, 26, 27, -1, + 15, 38, 37, -1, 15, 37, 26, -1, + 374, 203, 104, -1, 365, 318, 37, -1, + 4, 62, 75, -1, 4, 75, 144, -1, + 4, 144, 5, -1, 4, 7, 62, -1, + 4, 121, 7, -1, 4, 5, 121, -1, + 6, 62, 7, -1, 6, 120, 62, -1, + 6, 7, 121, -1, 6, 121, 120, -1, + 46, 126, 60, -1, 8, 41, 118, -1, + 8, 118, 139, -1, 8, 139, 41, -1, + 90, 321, 18, -1, 90, 18, 88, -1, + 97, 140, 135, -1, 97, 135, 96, -1, + 9, 135, 51, -1, 9, 96, 135, -1, + 9, 49, 89, -1, 9, 89, 96, -1, + 218, 134, 219, -1, 146, 218, 222, -1, + 146, 134, 218, -1, 146, 149, 152, -1, + 146, 152, 134, -1, 383, 231, 384, -1, + 362, 51, 52, -1, 362, 9, 51, -1, + 362, 49, 9, -1, 50, 51, 135, -1, + 50, 136, 152, -1, 50, 135, 136, -1, + 300, 10, 146, -1, 151, 146, 10, -1, + 151, 10, 300, -1, 151, 300, 301, -1, + 36, 11, 34, -1, 107, 191, 11, -1, + 107, 11, 36, -1, 107, 36, 108, -1, + 224, 63, 11, -1, 224, 11, 191, -1, + 56, 131, 12, -1, 56, 12, 13, -1, + 57, 56, 13, -1, 57, 13, 63, -1, + 155, 64, 124, -1, 159, 124, 64, -1, + 159, 214, 124, -1, 61, 120, 60, -1, + 72, 73, 68, -1, 39, 21, 322, -1, + 14, 27, 20, -1, 14, 15, 27, -1, + 14, 38, 15, -1, 14, 39, 38, -1, + 14, 20, 39, -1, 77, 18, 82, -1, + 77, 82, 163, -1, 77, 88, 18, -1, + 16, 17, 163, -1, 16, 82, 17, -1, + 16, 163, 82, -1, 79, 82, 18, -1, + 79, 18, 321, -1, 79, 321, 21, -1, + 79, 21, 80, -1, 84, 19, 31, -1, + 84, 31, 83, -1, 84, 39, 20, -1, + 84, 27, 19, -1, 84, 20, 27, -1, + 84, 80, 21, -1, 84, 21, 39, -1, + 87, 86, 95, -1, 87, 95, 89, -1, + 22, 163, 23, -1, 22, 162, 163, -1, + 22, 23, 162, -1, 24, 42, 41, -1, + 24, 98, 42, -1, 24, 41, 98, -1, + 25, 167, 43, -1, 25, 98, 167, -1, + 25, 43, 98, -1, 94, 41, 92, -1, + 94, 98, 41, -1, 28, 318, 239, -1, + 100, 27, 26, -1, 100, 28, 239, -1, + 100, 29, 27, -1, 100, 30, 29, -1, + 100, 318, 28, -1, 100, 37, 318, -1, + 100, 26, 37, -1, 319, 239, 318, -1, + 174, 30, 100, -1, 174, 233, 102, -1, + 174, 173, 233, -1, 174, 102, 31, -1, + 174, 31, 30, -1, 190, 128, 101, -1, + 190, 186, 129, -1, 190, 129, 128, -1, + 33, 209, 204, -1, 33, 204, 32, -1, + 33, 32, 205, -1, 105, 126, 102, -1, + 105, 101, 126, -1, 105, 209, 33, -1, + 105, 33, 205, -1, 105, 205, 104, -1, + 105, 104, 103, -1, 106, 34, 129, -1, + 106, 129, 35, -1, 106, 35, 185, -1, + 106, 108, 36, -1, 106, 36, 34, -1, + 250, 244, 251, -1, 366, 37, 38, -1, + 366, 38, 39, -1, 366, 39, 322, -1, + 366, 365, 37, -1, 258, 191, 107, -1, + 350, 195, 310, -1, 40, 104, 205, -1, + 40, 374, 104, -1, 40, 205, 374, -1, + 116, 121, 118, -1, 116, 115, 121, -1, + 114, 41, 42, -1, 114, 117, 41, -1, + 114, 43, 44, -1, 114, 42, 43, -1, + 114, 126, 115, -1, 114, 44, 102, -1, + 114, 102, 126, -1, 45, 60, 120, -1, + 45, 46, 60, -1, 45, 120, 46, -1, + 122, 46, 120, -1, 122, 121, 115, -1, + 122, 115, 126, -1, 122, 126, 46, -1, + 125, 48, 124, -1, 125, 126, 48, -1, + 132, 126, 101, -1, 132, 48, 126, -1, + 132, 101, 128, -1, 132, 157, 48, -1, + 47, 157, 124, -1, 47, 124, 48, -1, + 47, 48, 157, -1, 402, 321, 90, -1, + 402, 89, 49, -1, 402, 90, 89, -1, + 402, 49, 362, -1, 356, 151, 301, -1, + 356, 357, 151, -1, 356, 301, 395, -1, + 356, 395, 133, -1, 473, 395, 472, -1, + 473, 133, 395, -1, 217, 472, 395, -1, + 217, 395, 303, -1, 277, 75, 278, -1, + 277, 144, 75, -1, 150, 50, 152, -1, + 150, 52, 51, -1, 150, 51, 50, -1, + 53, 52, 150, -1, 53, 150, 231, -1, + 382, 362, 52, -1, 382, 52, 53, -1, + 382, 231, 383, -1, 382, 53, 231, -1, + 54, 222, 288, -1, 54, 288, 300, -1, + 54, 146, 222, -1, 54, 300, 146, -1, + 147, 151, 357, -1, 55, 157, 131, -1, + 55, 57, 157, -1, 55, 131, 56, -1, + 55, 56, 57, -1, 154, 124, 157, -1, + 154, 155, 124, -1, 156, 157, 57, -1, + 156, 57, 63, -1, 160, 66, 214, -1, + 160, 159, 64, -1, 160, 64, 225, -1, + 160, 67, 66, -1, 160, 225, 67, -1, + 70, 69, 215, -1, 58, 215, 214, -1, + 58, 66, 215, -1, 58, 214, 66, -1, + 59, 60, 73, -1, 59, 61, 60, -1, + 59, 73, 61, -1, 74, 61, 73, -1, + 74, 75, 62, -1, 74, 62, 120, -1, + 74, 120, 61, -1, 226, 156, 63, -1, + 226, 155, 156, -1, 226, 63, 224, -1, + 226, 64, 155, -1, 226, 225, 64, -1, + 292, 67, 225, -1, 292, 291, 279, -1, + 292, 279, 280, -1, 292, 280, 72, -1, + 292, 72, 67, -1, 65, 66, 67, -1, + 65, 67, 72, -1, 65, 72, 68, -1, + 65, 68, 69, -1, 65, 69, 70, -1, + 65, 215, 66, -1, 65, 70, 215, -1, + 71, 73, 72, -1, 71, 75, 74, -1, + 71, 74, 73, -1, 71, 278, 75, -1, + 71, 280, 278, -1, 71, 72, 280, -1, + 76, 163, 88, -1, 76, 77, 163, -1, + 76, 88, 77, -1, 78, 79, 80, -1, + 78, 82, 79, -1, 78, 80, 84, -1, + 78, 84, 82, -1, 81, 83, 82, -1, + 81, 84, 83, -1, 81, 82, 84, -1, + 85, 162, 86, -1, 85, 86, 87, -1, + 85, 87, 162, -1, 164, 162, 87, -1, + 164, 88, 163, -1, 164, 87, 89, -1, + 164, 89, 90, -1, 164, 90, 88, -1, + 91, 92, 93, -1, 91, 94, 92, -1, + 91, 93, 140, -1, 91, 98, 94, -1, + 91, 99, 98, -1, 91, 140, 97, -1, + 91, 97, 99, -1, 166, 95, 167, -1, + 166, 96, 95, -1, 166, 97, 96, -1, + 166, 99, 97, -1, 168, 167, 98, -1, + 168, 98, 99, -1, 168, 99, 166, -1, + 170, 233, 173, -1, 315, 233, 170, -1, + 242, 170, 173, -1, 242, 237, 170, -1, + 172, 100, 239, -1, 172, 174, 100, -1, + 247, 178, 177, -1, 247, 176, 199, -1, + 188, 190, 101, -1, 188, 101, 105, -1, + 188, 105, 178, -1, 188, 247, 179, -1, + 188, 178, 247, -1, 210, 112, 212, -1, + 210, 209, 105, -1, 210, 105, 102, -1, + 210, 102, 233, -1, 210, 233, 112, -1, + 181, 105, 103, -1, 181, 103, 104, -1, + 181, 109, 202, -1, 181, 104, 203, -1, + 182, 202, 178, -1, 182, 178, 105, -1, + 182, 105, 181, -1, 183, 108, 106, -1, + 183, 106, 185, -1, 183, 185, 184, -1, + 192, 191, 258, -1, 192, 258, 195, -1, + 324, 258, 256, -1, 196, 371, 310, -1, + 196, 310, 195, -1, 196, 324, 371, -1, + 198, 193, 108, -1, 198, 417, 193, -1, + 198, 251, 244, -1, 198, 108, 183, -1, + 198, 183, 251, -1, 257, 258, 107, -1, + 257, 107, 108, -1, 257, 108, 193, -1, + 246, 199, 461, -1, 246, 247, 199, -1, + 457, 202, 109, -1, 457, 181, 203, -1, + 457, 109, 181, -1, 266, 208, 210, -1, + 266, 210, 212, -1, 337, 262, 263, -1, + 337, 263, 336, -1, 234, 263, 110, -1, + 234, 112, 233, -1, 234, 111, 112, -1, + 261, 110, 263, -1, 261, 234, 110, -1, + 261, 111, 234, -1, 261, 112, 111, -1, + 261, 211, 212, -1, 261, 212, 112, -1, + 113, 114, 115, -1, 113, 115, 116, -1, + 113, 117, 114, -1, 113, 116, 118, -1, + 113, 118, 117, -1, 119, 120, 121, -1, + 119, 121, 122, -1, 119, 122, 120, -1, + 123, 124, 214, -1, 123, 125, 124, -1, + 123, 214, 125, -1, 216, 126, 125, -1, + 216, 125, 214, -1, 216, 215, 126, -1, + 127, 132, 128, -1, 127, 131, 132, -1, + 127, 129, 131, -1, 127, 128, 129, -1, + 130, 131, 157, -1, 130, 132, 131, -1, + 130, 157, 132, -1, 358, 133, 473, -1, + 358, 356, 133, -1, 137, 219, 134, -1, + 137, 142, 219, -1, 137, 134, 152, -1, + 137, 152, 136, -1, 143, 219, 142, -1, + 143, 277, 219, -1, 143, 144, 277, -1, + 141, 135, 140, -1, 141, 136, 135, -1, + 141, 137, 136, -1, 141, 142, 137, -1, + 138, 140, 139, -1, 138, 141, 140, -1, + 138, 142, 141, -1, 138, 144, 143, -1, + 138, 143, 142, -1, 138, 139, 145, -1, + 138, 145, 144, -1, 276, 219, 277, -1, + 220, 291, 297, -1, 223, 222, 218, -1, + 286, 223, 345, -1, 296, 298, 283, -1, + 296, 220, 297, -1, 352, 350, 310, -1, + 352, 310, 309, -1, 228, 309, 310, -1, + 287, 300, 288, -1, 393, 309, 228, -1, + 148, 149, 146, -1, 148, 146, 151, -1, + 230, 147, 357, -1, 230, 149, 148, -1, + 230, 231, 150, -1, 230, 151, 147, -1, + 230, 148, 151, -1, 230, 152, 149, -1, + 230, 150, 152, -1, 153, 155, 154, -1, + 153, 156, 155, -1, 153, 154, 157, -1, + 153, 157, 156, -1, 158, 214, 159, -1, + 158, 160, 214, -1, 158, 159, 160, -1, + 161, 163, 162, -1, 161, 164, 163, -1, + 161, 162, 164, -1, 165, 166, 167, -1, + 165, 167, 168, -1, 165, 168, 166, -1, + 169, 170, 237, -1, 169, 237, 315, -1, + 169, 315, 170, -1, 335, 237, 254, -1, + 335, 334, 315, -1, 171, 242, 173, -1, + 241, 242, 171, -1, 241, 172, 239, -1, + 241, 171, 173, -1, 241, 173, 174, -1, + 241, 174, 172, -1, 175, 254, 237, -1, + 175, 242, 254, -1, 175, 237, 242, -1, + 253, 254, 242, -1, 253, 241, 319, -1, + 200, 176, 247, -1, 200, 202, 201, -1, + 200, 247, 177, -1, 200, 199, 176, -1, + 200, 177, 178, -1, 200, 178, 202, -1, + 248, 246, 244, -1, 248, 179, 247, -1, + 248, 188, 179, -1, 248, 250, 188, -1, + 180, 181, 202, -1, 180, 202, 182, -1, + 180, 182, 181, -1, 252, 251, 183, -1, + 252, 183, 184, -1, 252, 184, 185, -1, + 252, 189, 250, -1, 252, 185, 186, -1, + 252, 186, 190, -1, 187, 188, 250, -1, + 187, 250, 189, -1, 187, 190, 188, -1, + 187, 252, 190, -1, 187, 189, 252, -1, + 385, 341, 342, -1, 385, 338, 341, -1, + 364, 366, 322, -1, 227, 224, 191, -1, + 227, 191, 192, -1, 227, 195, 350, -1, + 227, 192, 195, -1, 323, 324, 256, -1, + 323, 417, 410, -1, 323, 257, 193, -1, + 323, 193, 417, -1, 194, 195, 258, -1, + 194, 196, 195, -1, 194, 258, 324, -1, + 194, 324, 196, -1, 197, 461, 417, -1, + 197, 417, 198, -1, 197, 198, 244, -1, + 197, 244, 246, -1, 197, 246, 461, -1, + 456, 461, 199, -1, 456, 199, 200, -1, + 456, 200, 201, -1, 456, 201, 202, -1, + 456, 202, 457, -1, 373, 203, 374, -1, + 373, 457, 203, -1, 416, 410, 417, -1, + 327, 204, 259, -1, 327, 374, 205, -1, + 327, 205, 204, -1, 265, 325, 266, -1, + 265, 419, 325, -1, 265, 337, 419, -1, + 265, 262, 337, -1, 206, 259, 207, -1, + 206, 325, 259, -1, 206, 266, 325, -1, + 206, 208, 266, -1, 206, 207, 209, -1, + 206, 209, 210, -1, 206, 210, 208, -1, + 332, 335, 254, -1, 232, 233, 315, -1, + 267, 211, 261, -1, 267, 212, 211, -1, + 267, 266, 212, -1, 213, 214, 215, -1, + 213, 215, 216, -1, 213, 216, 214, -1, + 359, 384, 231, -1, 270, 303, 269, -1, + 270, 472, 217, -1, 270, 217, 303, -1, + 274, 303, 304, -1, 274, 304, 312, -1, + 344, 218, 219, -1, 344, 219, 276, -1, + 344, 223, 218, -1, 344, 345, 223, -1, + 221, 296, 283, -1, 221, 220, 296, -1, + 347, 279, 291, -1, 347, 291, 220, -1, + 347, 220, 221, -1, 347, 221, 283, -1, + 347, 286, 345, -1, 285, 391, 287, -1, + 289, 288, 222, -1, 289, 222, 223, -1, + 289, 223, 286, -1, 295, 226, 224, -1, + 295, 227, 294, -1, 295, 224, 227, -1, + 293, 292, 225, -1, 293, 225, 226, -1, + 293, 226, 295, -1, 349, 294, 227, -1, + 349, 227, 350, -1, 355, 300, 287, -1, + 355, 287, 391, -1, 394, 306, 312, -1, + 311, 306, 393, -1, 311, 312, 306, -1, + 313, 393, 228, -1, 313, 228, 310, -1, + 313, 311, 393, -1, 229, 230, 357, -1, + 229, 231, 230, -1, 229, 357, 359, -1, + 229, 359, 231, -1, 316, 232, 315, -1, + 316, 235, 234, -1, 316, 234, 233, -1, + 316, 233, 232, -1, 333, 336, 263, -1, + 333, 263, 234, -1, 333, 234, 235, -1, + 333, 316, 334, -1, 333, 235, 316, -1, + 236, 315, 237, -1, 236, 237, 335, -1, + 236, 335, 315, -1, 238, 239, 319, -1, + 238, 241, 239, -1, 238, 319, 241, -1, + 240, 242, 241, -1, 240, 253, 242, -1, + 240, 241, 253, -1, 243, 244, 250, -1, + 243, 248, 244, -1, 243, 250, 248, -1, + 245, 247, 246, -1, 245, 248, 247, -1, + 245, 246, 248, -1, 249, 250, 251, -1, + 249, 251, 252, -1, 249, 252, 250, -1, + 469, 339, 338, -1, 469, 271, 339, -1, + 469, 472, 271, -1, 361, 385, 342, -1, + 320, 407, 332, -1, 320, 253, 319, -1, + 320, 254, 253, -1, 320, 332, 254, -1, + 398, 364, 322, -1, 255, 323, 256, -1, + 255, 257, 323, -1, 255, 256, 258, -1, + 255, 258, 257, -1, 421, 374, 327, -1, + 330, 414, 410, -1, 330, 410, 416, -1, + 326, 259, 325, -1, 326, 327, 259, -1, + 260, 267, 261, -1, 260, 263, 262, -1, + 260, 261, 263, -1, 260, 262, 265, -1, + 260, 265, 267, -1, 264, 265, 266, -1, + 264, 266, 267, -1, 264, 267, 265, -1, + 268, 377, 329, -1, 268, 329, 269, -1, + 268, 272, 377, -1, 268, 269, 303, -1, + 268, 303, 272, -1, 340, 269, 329, -1, + 340, 270, 269, -1, 340, 271, 472, -1, + 340, 472, 270, -1, 340, 339, 271, -1, + 448, 342, 341, -1, 375, 377, 272, -1, + 375, 272, 376, -1, 275, 272, 303, -1, + 275, 303, 274, -1, 275, 376, 272, -1, + 273, 274, 312, -1, 273, 312, 328, -1, + 273, 328, 376, -1, 273, 376, 275, -1, + 273, 275, 274, -1, 346, 344, 276, -1, + 346, 277, 278, -1, 346, 276, 277, -1, + 346, 279, 347, -1, 346, 278, 280, -1, + 346, 280, 279, -1, 281, 347, 283, -1, + 281, 286, 347, -1, 281, 283, 285, -1, + 281, 285, 286, -1, 282, 285, 283, -1, + 282, 391, 285, -1, 282, 307, 391, -1, + 282, 283, 298, -1, 282, 298, 307, -1, + 284, 286, 285, -1, 284, 285, 287, -1, + 284, 287, 288, -1, 284, 288, 289, -1, + 284, 289, 286, -1, 290, 297, 291, -1, + 290, 291, 292, -1, 290, 292, 293, -1, + 290, 294, 349, -1, 290, 349, 297, -1, + 290, 295, 294, -1, 290, 293, 295, -1, + 299, 307, 298, -1, 299, 308, 307, -1, + 299, 352, 309, -1, 299, 309, 308, -1, + 351, 296, 297, -1, 351, 297, 349, -1, + 351, 298, 296, -1, 351, 299, 298, -1, + 351, 352, 299, -1, 354, 301, 300, -1, + 354, 300, 355, -1, 354, 395, 301, -1, + 302, 303, 395, -1, 302, 395, 394, -1, + 302, 304, 303, -1, 302, 312, 304, -1, + 302, 394, 312, -1, 305, 393, 306, -1, + 305, 306, 394, -1, 305, 394, 393, -1, + 392, 391, 307, -1, 392, 307, 308, -1, + 392, 309, 393, -1, 392, 308, 309, -1, + 390, 355, 391, -1, 370, 310, 371, -1, + 370, 313, 310, -1, 369, 312, 311, -1, + 369, 311, 313, -1, 369, 328, 312, -1, + 369, 313, 370, -1, 369, 413, 328, -1, + 314, 315, 334, -1, 314, 316, 315, -1, + 314, 334, 316, -1, 480, 338, 385, -1, + 480, 469, 338, -1, 317, 386, 385, -1, + 317, 361, 386, -1, 317, 385, 361, -1, + 367, 361, 342, -1, 367, 433, 435, -1, + 381, 362, 382, -1, 403, 318, 365, -1, + 403, 319, 318, -1, 403, 320, 319, -1, + 406, 407, 320, -1, 406, 320, 403, -1, + 363, 386, 435, -1, 363, 435, 364, -1, + 363, 401, 386, -1, 363, 364, 398, -1, + 397, 321, 402, -1, 397, 322, 321, -1, + 397, 398, 322, -1, 372, 414, 413, -1, + 372, 413, 369, -1, 409, 323, 410, -1, + 409, 371, 324, -1, 409, 324, 323, -1, + 420, 325, 419, -1, 420, 326, 325, -1, + 420, 421, 327, -1, 420, 327, 326, -1, + 437, 452, 451, -1, 438, 376, 328, -1, + 438, 328, 413, -1, 430, 340, 329, -1, + 430, 329, 377, -1, 430, 377, 451, -1, + 482, 330, 416, -1, 482, 414, 330, -1, + 331, 332, 407, -1, 331, 407, 379, -1, + 331, 378, 336, -1, 331, 379, 378, -1, + 331, 336, 333, -1, 331, 333, 334, -1, + 331, 334, 335, -1, 331, 335, 332, -1, + 380, 379, 407, -1, 443, 452, 437, -1, + 467, 336, 378, -1, 467, 337, 336, -1, + 467, 419, 337, -1, 425, 384, 359, -1, + 425, 359, 444, -1, 447, 338, 339, -1, + 447, 339, 340, -1, 447, 340, 430, -1, + 447, 341, 338, -1, 447, 448, 341, -1, + 428, 342, 448, -1, 428, 367, 342, -1, + 343, 345, 344, -1, 343, 344, 346, -1, + 343, 347, 345, -1, 343, 346, 347, -1, + 348, 349, 350, -1, 348, 351, 349, -1, + 348, 350, 352, -1, 348, 352, 351, -1, + 353, 354, 355, -1, 353, 355, 390, -1, + 353, 395, 354, -1, 353, 390, 395, -1, + 471, 357, 356, -1, 471, 356, 358, -1, + 471, 359, 357, -1, 471, 444, 359, -1, + 471, 358, 473, -1, 360, 361, 367, -1, + 360, 367, 435, -1, 360, 386, 361, -1, + 360, 435, 386, -1, 400, 381, 426, -1, + 400, 402, 362, -1, 400, 362, 381, -1, + 399, 363, 398, -1, 399, 401, 363, -1, + 404, 364, 435, -1, 404, 403, 365, -1, + 404, 366, 364, -1, 404, 365, 366, -1, + 432, 367, 428, -1, 432, 433, 367, -1, + 411, 414, 372, -1, 368, 369, 370, -1, + 368, 370, 371, -1, 368, 371, 409, -1, + 368, 409, 411, -1, 368, 372, 369, -1, + 368, 411, 372, -1, 455, 457, 373, -1, + 455, 373, 374, -1, 455, 374, 421, -1, + 415, 375, 376, -1, 415, 376, 438, -1, + 415, 451, 377, -1, 415, 377, 375, -1, + 462, 482, 416, -1, 388, 380, 407, -1, + 388, 407, 432, -1, 388, 428, 429, -1, + 388, 432, 428, -1, 387, 422, 380, -1, + 387, 380, 388, -1, 423, 452, 443, -1, + 424, 467, 378, -1, 424, 378, 379, -1, + 424, 379, 380, -1, 424, 380, 422, -1, + 468, 419, 467, -1, 465, 424, 422, -1, + 427, 426, 381, -1, 427, 381, 382, -1, + 427, 382, 383, -1, 427, 383, 384, -1, + 427, 384, 425, -1, 478, 480, 385, -1, + 478, 385, 386, -1, 478, 386, 401, -1, + 478, 401, 426, -1, 454, 452, 423, -1, + 454, 422, 387, -1, 454, 423, 422, -1, + 454, 388, 429, -1, 454, 387, 388, -1, + 389, 390, 391, -1, 389, 391, 392, -1, + 389, 392, 393, -1, 389, 393, 394, -1, + 389, 394, 395, -1, 389, 395, 390, -1, + 470, 471, 473, -1, 396, 398, 397, -1, + 396, 399, 398, -1, 396, 400, 426, -1, + 396, 426, 401, -1, 396, 401, 399, -1, + 396, 397, 402, -1, 396, 402, 400, -1, + 434, 406, 403, -1, 434, 403, 404, -1, + 434, 404, 435, -1, 405, 407, 406, -1, + 405, 432, 407, -1, 405, 406, 434, -1, + 405, 434, 432, -1, 408, 409, 410, -1, + 408, 411, 409, -1, 408, 410, 414, -1, + 408, 414, 411, -1, 487, 421, 486, -1, + 487, 455, 421, -1, 412, 438, 413, -1, + 412, 474, 438, -1, 412, 413, 414, -1, + 412, 414, 474, -1, 481, 414, 482, -1, + 481, 474, 414, -1, 436, 415, 438, -1, + 436, 451, 415, -1, 483, 436, 438, -1, + 483, 439, 436, -1, 459, 462, 416, -1, + 459, 416, 417, -1, 459, 417, 461, -1, + 418, 419, 468, -1, 418, 420, 419, -1, + 418, 468, 484, -1, 418, 421, 420, -1, + 418, 484, 486, -1, 418, 486, 421, -1, + 441, 465, 422, -1, 441, 422, 423, -1, + 441, 423, 443, -1, 466, 467, 424, -1, + 466, 424, 465, -1, 445, 425, 444, -1, + 445, 478, 426, -1, 445, 426, 427, -1, + 445, 427, 425, -1, 449, 428, 448, -1, + 449, 429, 428, -1, 449, 454, 429, -1, + 453, 447, 430, -1, 453, 430, 451, -1, + 431, 433, 432, -1, 431, 432, 434, -1, + 431, 435, 433, -1, 431, 434, 435, -1, + 485, 462, 487, -1, 440, 436, 439, -1, + 440, 451, 436, -1, 440, 437, 451, -1, + 440, 443, 437, -1, 440, 442, 443, -1, + 475, 438, 474, -1, 475, 483, 438, -1, + 494, 439, 483, -1, 494, 440, 439, -1, + 494, 442, 440, -1, 464, 465, 441, -1, + 464, 443, 442, -1, 464, 441, 443, -1, + 464, 495, 496, -1, 464, 442, 494, -1, + 464, 494, 495, -1, 477, 444, 471, -1, + 477, 445, 444, -1, 477, 478, 445, -1, + 446, 447, 453, -1, 446, 448, 447, -1, + 446, 449, 448, -1, 446, 454, 449, -1, + 446, 453, 454, -1, 450, 451, 452, -1, + 450, 453, 451, -1, 450, 452, 454, -1, + 450, 454, 453, -1, 460, 455, 487, -1, + 460, 461, 456, -1, 460, 456, 457, -1, + 460, 457, 455, -1, 458, 487, 462, -1, + 458, 462, 459, -1, 458, 460, 487, -1, + 458, 459, 461, -1, 458, 461, 460, -1, + 492, 482, 462, -1, 492, 462, 485, -1, + 463, 465, 464, -1, 463, 466, 465, -1, + 463, 464, 496, -1, 463, 467, 466, -1, + 463, 496, 484, -1, 463, 468, 467, -1, + 463, 484, 468, -1, 479, 469, 480, -1, + 479, 471, 470, -1, 479, 477, 471, -1, + 479, 472, 469, -1, 479, 473, 472, -1, + 479, 470, 473, -1, 490, 474, 481, -1, + 490, 475, 474, -1, 490, 483, 475, -1, + 476, 478, 477, -1, 476, 477, 479, -1, + 476, 480, 478, -1, 476, 479, 480, -1, + 491, 481, 482, -1, 491, 490, 481, -1, + 491, 482, 492, -1, 489, 494, 483, -1, + 489, 483, 490, -1, 493, 484, 496, -1, + 493, 492, 485, -1, 493, 486, 484, -1, + 493, 485, 487, -1, 493, 487, 486, -1, + 488, 489, 490, -1, 488, 490, 491, -1, + 488, 491, 492, -1, 488, 492, 493, -1, + 488, 495, 494, -1, 488, 494, 489, -1, + 488, 496, 495, -1, 488, 493, 496, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/link3.wrl b/examples/rlsg/staeubli-tx60l.convex/link3.wrl new file mode 100644 index 00000000..850e8390 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link3.wrl @@ -0,0 +1,913 @@ +#VRML V2.0 utf8 + + +DEF link3 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.081177004 -0.080081999 -0.096716002, + 0.059032001 -0.113499 -0.039464999, + -0.083999999 -0.025601 -0.092749, + 0.037159 -0.036300998 -0.124792, + 0.069114998 0.010075 0.012781, + -0.081177004 -0.049800999 0.097498, + -0.081177004 -0.043956999 0.097864002, + -0.065598004 -0.113499 0.027185, + -0.069633 -0.113499 -0.013831, + -0.083999999 -0.020752 0.046045002, + -0.078354001 -0.084912002 -0.097510003, + -0.065598004 -0.113499 -0.027197, + -0.013851 -0.113499 -0.069617003, + -0.027170001 -0.113499 -0.065587997, + -0.083999999 -0.026303001 -0.097875997, + 0.013851 -0.113499 -0.069617003, + 0.027170001 -0.113499 -0.065587997, + 0.039444 -0.113499 -0.059057999, + 0.050205 -0.113499 -0.050207999, + 0.073578 -0.084843002 -0.098485902, + 0.059036002 -0.113499 -0.039464999, + 0.065598004 -0.113499 -0.027197, + 0.037159 -0.043961 -0.127112, + 2.0180545e-08 -0.041932002 -0.127661, + 0.079002 -0.032315001 -0.074072003, + 0.069847003 2.2758705e-08 0.012781, + 0.079002 -0.068852 -0.074072003, + 0.079002 -0.073734999 -0.080847003, + 0.079002 -0.060474999 -0.068456903, + 0.069633 -0.113499 -0.013831, + -0.076439001 0.034311999 -0.00333297, + -0.077003002 0.033448 -0.0051639699, + -0.078345999 0.028842 -0.0150509, + -0.013851 -0.113499 0.069665998, + -0.059036002 -0.113499 0.039453, + 0.013851 -0.113499 0.069665998, + -0.078354001 -0.063304998 0.097558998, + -0.083999999 -0.021645 0.023522999, + -0.083999999 -0.020016 0.067102, + -0.083999999 -0.069981001 0.068871997, + -0.070998996 -0.113499 2.4020695e-05, + -0.064567998 0.059700001 -0.0089479703, + -0.0625 0.059700001 -0.003699, + -0.062442999 0.059700001 -0.00357699, + -0.050205 -0.113499 -0.050207999, + -0.059032001 -0.113499 -0.039464999, + -0.039444 -0.113499 -0.059057999, + -0.059036002 -0.113499 -0.039464999, + -0.078354001 -0.083164997 -0.104102, + -0.050205 -0.113499 0.050195001, + -0.039444 -0.113499 0.059044998, + -0.027170001 -0.113499 0.065576002, + -0.078354001 -0.068722002 0.093408003, + -0.081177004 -0.069256 0.085473999, + -0.068222001 0.053858999 -0.014685, + -0.070564002 0.048110999 -0.0077880002, + -0.065346003 0.059700001 -0.014563, + -0.078354001 -0.080165997 -0.110205, + -0.083999999 -0.075566001 -0.09104, + -0.081177004 -0.034855001 -0.117346, + -0.081177004 -0.040116001 -0.11991, + -0.083999999 -0.024932999 -0.073706001, + -0.034499999 -0.044812001 -0.12735599, + 2.0776568e-08 -0.043781999 -0.128088, + 0.027170001 -0.113499 0.065576002, + 0.039444 -0.113499 0.059044998, + 0.038890999 -0.038890999 0.109521, + 0.050205 -0.113499 0.050195001, + 0.059036002 -0.113499 0.039453, + 0.045731001 -0.030556001 0.109521, + 0.079002 -0.074451998 -0.102209, + 0.073775999 -0.082524002 -0.105933, + 0.079002 -0.072896004 -0.105383, + 0.07299 -0.00265698 -0.076086, + 0.079002 -0.028275 -0.105383, + 0.079002 -0.032315001 -0.110632, + 0.079002 -0.031429999 -0.109717, + 0.079002 -0.026711 -0.102209, + 0.079002 -0.059903 -0.068213001, + 0.079002 -0.067989998 -0.073218003, + 0.079002 -0.027427999 -0.080847003, + 0.079002 -0.033177 -0.073218003, + 0.069885001 0.015845001 -0.038061999, + 0.074142002 -0.029927 -0.119971, + 0.064148001 0.029751999 0.0064330101, + 0.067763999 0.020188 0.0064330101, + 0.063358001 0.029387999 0.012781, + 0.066940002 0.01994 0.012781, + 0.020417999 0.044775002 -0.090490997, + 0.014008 0.043912001 -0.093298003, + 0.073836997 -0.019791 -0.108252, + -0.021048 0.050813001 0.109521, + -0.052963 0.021072 0.105005, + -0.030556001 0.045729998 0.109521, + -0.038890999 0.03889 0.109521, + -0.064552002 0.059700001 -0.0088869901, + -0.045731001 0.030556001 0.109521, + 0.070473 0.00865102 2.4020705e-05, + 0.069968998 0.010201 0.0064330101, + 0.079002 -0.026711 -0.082433999, + 0.079002 -0.024746001 -0.092321999, + 0.079002 -0.024925999 -0.095374003, + 0.079002 -0.024838001 -0.090125002, + -0.081177004 -0.019580999 0.083704002, + -0.083999999 -0.021584 0.076746002, + -0.074059002 0.036903001 0.0022219999, + -0.078354001 -0.019562 0.091698997, + -0.078354001 -0.015423 0.086328, + -0.081177004 -0.055470001 0.095972002, + -0.081177004 -0.060727 0.093408003, + -0.078354001 -0.057179 0.100549, + -0.083999999 -0.053753 0.091394, + 4.3493955e-08 -0.113499 0.071007997, + 0.01073 -0.053943999 0.109521, + -0.01073 -0.053943999 0.109521, + 0.021048 -0.050816 0.109521, + 0.030556001 -0.045727 0.109521, + -0.021048 -0.050816 0.109521, + -0.083999999 -0.062047001 0.086267002, + -0.081177004 -0.065388002 0.089868002, + -0.081177004 -0.027535001 0.092248999, + -0.083999999 -0.026714999 0.085046098, + -0.081177004 -0.02314 0.088403001, + -0.078354001 -0.024677999 0.096216001, + -0.083999999 -0.034634002 0.090723, + -0.083999999 -0.026719 0.085046098, + -0.083999999 -0.053463001 0.091516003, + -0.083999999 -0.031608999 0.0033810099, + -0.083999999 -0.024266001 -0.054602001, + -0.083999999 -0.065007001 0.082970999, + -0.083999999 -0.061581001 0.086694002, + -0.071091004 0.048018999 -0.014807, + -0.026949 0.076847002 0.014429, + -0.026916999 0.076853998 0.01449, + -0.026936 0.076849997 0.014429, + -0.025708999 0.077124998 0.015344, + -0.081177004 -0.068051003 -0.116187, + -0.083999999 -0.068866998 -0.108923, + -0.081177004 -0.076001003 -0.107642, + -0.083999999 -0.074001998 -0.100684, + -0.083999999 -0.068820998 -0.108984, + 0.0072049899 0.043375999 -0.095068, + -0.083999999 -0.033535 -0.110205, + -0.083999999 -0.034131002 -0.110754, + -0.083999999 -0.041829001 -0.115332, + -0.083999999 -0.030671 -0.107031, + -0.081177004 -0.026326001 -0.109351, + -0.083999999 -0.027836001 -0.102271, + -0.078345999 0.028677 -0.015417, + 2.7408673e-08 -0.064136997 -0.12613501, + -0.081177004 -0.045781001 -0.121436, + -0.078354001 -0.044994999 -0.126257, + -0.083999999 -0.042206001 -0.115454, + 0.053943999 -0.010729 0.109521, + 0.050811999 -0.021046 0.109521, + 0.065598004 -0.113499 0.027185, + 0.069633 -0.113499 0.013879, + 0.055 1.7922643e-08 0.109521, + 0.053943999 0.01073 0.109521, + 0.050811999 0.021048 0.109521, + 0.079002 -0.061085001 -0.115942, + 0.079002 -0.026082 -0.100562, + 0.079002 -0.060474999 -0.116248, + 0.079002 -0.055957999 -0.117651, + 0.079002 -0.075084999 -0.100562, + 0.079002 -0.065747 -0.113257, + 0.079002 -0.068852 -0.110632, + 0.079002 -0.069737002 -0.109717, + 2.3831666e-08 -0.053151 -0.128638, + 2.6098528e-08 -0.060109001 -0.127478, + -0.034499999 -0.058812 -0.12686799, + 0.074317999 -0.051906999 -0.126746, + 2.3460641e-08 -0.051982999 -0.128699, + -0.078354001 -0.051800001 -0.12668499, + 0.074286997 -0.059604999 -0.125586, + 0.079002 -0.04126 -0.068213001, + 0.070708998 2.3038295e-08 0.0064330101, + 0.079002 -0.050586998 -0.066504002, + 0.079002 -0.040695999 -0.068456903, + -0.043414999 0.052391 -0.065587997, + -0.078354001 -0.022355 -0.112219, + 0.074005 -0.024201 -0.114722, + 0.048183002 0.056575 -0.051855002, + 0.020924 0.078043997 0.018335, + 0.018208001 0.078472003 0.019739, + 0.021048 0.050813001 0.109521, + 0.020716 0.078086004 0.018456999, + 0.0094329799 0.079398997 0.022791, + 0.01073 0.053943001 0.109521, + 0.014104 0.078987002 0.021447999, + 8.6980501e-05 0.079727001 0.023889, + 0.0072099799 0.079535998 0.023218, + 0.030556001 0.045729998 0.109521, + 0.026916999 0.076853998 0.01449, + -0.078354001 -0.043786 0.102747, + -0.053943999 0.01073 0.109521, + -0.050811999 0.021048 0.109521, + 0.079002 -0.076420002 -0.092321999, + 0.079002 -0.076245002 -0.095374003, + 0.070998996 -0.113499 2.4020695e-05, + 0.079002 -0.076329 -0.090125002, + 0.079002 -0.074451998 -0.082433999, + -0.045731001 -0.030556001 0.109521, + 2.4433062e-08 -0.054997001 0.109521, + -0.030556001 -0.045727 0.109521, + -0.053943999 -0.010729 0.109521, + -0.050811999 -0.021046 0.109521, + -0.055 -1.7922771e-08 0.109521, + -0.038890999 -0.038890999 0.109521, + -0.078354001 -0.050586998 0.102319, + -0.081177004 -0.072200999 0.080407999, + -0.078354001 -0.076649003 0.082422003, + -0.083999999 -0.067745999 0.078394003, + -0.083999999 -0.067607999 0.078638002, + -0.078354001 -0.073230997 0.088342004, + -0.081177004 -0.074092999 0.074854001, + -0.083999999 -0.069293998 0.073876999, + -0.069633 -0.113499 0.013879, + -0.078354001 -0.078854002 0.075952098, + -0.043598 0.070395999 -0.0066279802, + -0.06459 0.059700001 -0.021033, + -0.049575999 0.063808002 -0.028235, + -0.036331002 0.074019998 0.0052120099, + -0.036091 0.074092001 0.0053960099, + -0.031936999 0.075515002 0.010095, + -0.078354001 -0.076024003 -0.115637, + 4.3494722e-08 -0.113499 -0.071020998, + 0.073951997 -0.078610003 -0.112646, + 0.00544899 0.057505999 -0.066748001, + 0.0090689901 0.050930001 -0.080785997, + -0.0054490101 0.057505999 -0.066748001, + -1.2149944e-08 0.057277001 -0.067542002, + -0.014303 0.043945 -0.093175903, + 1.8853395e-08 -0.03788 -0.12644, + 0.00017699201 0.04318 -0.095679, + -0.069785997 0.047947999 -0.02262, + -0.067192003 0.053824998 -0.021826001, + -0.069801003 0.04795 -0.022559, + -0.083999999 -0.028031001 -0.102698, + -0.081177004 -0.057438001 -0.121008, + -0.078354001 -0.065007001 -0.123572, + -0.083999999 -0.060947999 -0.114661, + -0.078354001 -0.058552001 -0.125769, + -0.083999999 -0.051456999 -0.116858, + -0.081177004 -0.051624998 -0.121802, + 0.079002 -0.040081002 -0.115942, + 0.079002 -0.035420001 -0.113257, + 0.074248999 -0.036685999 -0.123877, + 0.079002 -0.045208 -0.117651, + 0.079002 -0.040695999 -0.116248, + 0.074303001 -0.04414 -0.12613501, + 0.079002 -0.050586998 -0.118201, + -0.00195401 0.063270003 -0.052405, + 0.00195399 0.063270003 -0.052405, + 0.0041069901 0.063658997 -0.051123001, + 0.0062689902 0.064235002 -0.049231, + -0.02483 0.068072997 -0.032202002, + -0.037239 0.067031004 -0.0281129, + -0.0062690098 0.064235002 -0.049231, + -0.0041070101 0.063658997 -0.051123001, + -0.010544 0.058146998 -0.064672902, + -0.015011 0.059124 -0.061499, + -0.042525999 0.051842999 -0.067358002, + -0.036697 0.049045 -0.076513998, + -0.036575001 0.048983999 -0.076696999, + -0.057163 0.059700001 -0.033117902, + -0.046303 0.054568999 -0.058447, + 0.0054489798 0.075430997 -0.0081539797, + 0.0090689799 0.077822998 0.0071660299, + 0.036738999 0.049084999 -0.076392002, + 0.037094001 0.049201999 -0.075963996, + 0.04287 0.052051 -0.066687003, + 0.039646 0.050312001 -0.072362997, + 0.043536998 0.052471001 -0.065283, + 0.045944002 0.054244999 -0.059485, + 0.023910999 0.053157002 -0.073523, + 0.035808999 0.048689999 -0.077673003, + 0.029602 0.046728 -0.084081903, + 0.029231999 0.054901 -0.067786001, + 0.026302001 0.045913 -0.086768001, + 0.017148999 0.051803 -0.077917002, + 0.01501 0.059124 -0.061499, + 0.010544 0.058146998 -0.064672902, + -1.1402957e-08 0.055 0.109521, + -0.00015701901 0.079727001 0.023828, + 0.000172981 0.079727001 0.023828, + -7.801949e-05 0.079727001 0.023889, + 0.048439 0.065917999 -0.021338001, + 0.037239 0.067031004 -0.0281129, + 0.071892001 0.0072870199 -0.057471, + 0.071877003 0.0073730201 -0.057287998, + 0.068893 0.017174 2.4020703e-05, + 0.06955 0.017212 -0.038915999, + 0.058754001 0.041453999 0.011987, + 0.055424001 0.044810999 0.019189, + 0.05209 0.048168 0.026392, + 0.017151 0.076945998 0.0042970199, + 0.026928 0.076849997 0.014429, + 0.031923 0.075526997 0.010095, + 0.033142 0.071796 -0.012549, + -0.081177004 -0.038146999 0.097070001, + -0.078354001 -0.030575 0.099634103, + -0.083999999 -0.034630001 0.090723, + -0.078354001 -0.03703 0.101831, + -0.083999999 -0.044124998 0.092981003, + -0.048485 0.065898001 -0.021399001, + -0.048294 0.066188 -0.020422, + -0.048950002 0.065181002 -0.023717999, + -0.062121999 0.059700001 -0.027075, + -0.035758998 0.069510996 -0.019995, + -0.045779999 0.068801001 -0.011877, + -0.043285001 0.070602 -0.0060179802, + -0.040100001 0.072375998 -0.000158966, + -0.046185002 0.068453997 -0.013037, + -0.033142 0.071796 -0.012549, + -0.023608999 0.069651999 -0.027014, + -0.019917 0.078207999 0.018883999, + -0.020697 0.078089997 0.018518001, + -0.014084 0.078987002 0.021447999, + -0.022568 0.077757999 0.017418999, + -0.072502002 -0.070996001 -0.120276, + -0.078354001 -0.070904002 -0.120154, + 3.0574103e-08 -0.073849 -0.120398, + -0.034499999 -0.071560003 -0.121069, + 2.8593961e-08 -0.067760997 -0.124426, + 0.037159 -0.067310996 -0.123572, + 0.074104004 -0.073299997 -0.118384, + 0.074219003 -0.066861004 -0.122717, + -0.034499999 -0.076839998 -0.11637, + -0.075424001 -0.076076999 -0.115698, + 3.0808142e-08 -0.074559003 -0.119849, + 3.2637338e-08 -0.080165997 -0.113806, + -0.029263999 0.046638001 -0.084386997, + -0.023912 0.053157002 -0.073461898, + -0.032226998 0.047474999 -0.081641003, + -0.021508999 0.044957999 -0.089879997, + -0.027269 0.046138 -0.086034998, + -0.017151 0.051803 -0.077917002, + -0.015213 0.044048 -0.092871003, + -0.078354001 -0.026864 -0.117346, + -0.0075040101 0.043393999 -0.095007002, + -0.00152801 0.043189999 -0.095679, + -0.078354001 -0.038403001 -0.124487, + -0.0090690097 0.050930001 -0.080785997, + -0.0084960097 0.043446999 -0.094824001, + -0.078354001 -0.032280002 -0.121497, + -9.9726369e-09 0.050620999 -0.081823997, + -0.037712 0.064373001 -0.03678, + -0.049252 0.0583 -0.046239998, + -0.04958 0.059089001 -0.043616001, + -0.048542 0.057071 -0.0502689, + -0.049998999 0.061454002 -0.035925001, + -0.00828801 0.064933002 -0.046973001, + -0.02483 0.064861 -0.0427, + -0.025243999 0.066467002 -0.037450999, + -0.037239 0.061714001 -0.045508001, + 0.00195398 0.072189003 -0.023229999, + -0.048186999 0.056644 -0.051672, + -0.035758998 0.059234001 -0.053624999, + -0.048324998 0.056766 -0.051245, + -0.046707001 0.054931 -0.057227001, + 0.046246 0.054508001 -0.058630001, + 0.033142 0.056949001 -0.061071999, + -0.01073 0.053943001 0.109521, + -0.00699902 0.079544 0.023279, + -1.8937335e-08 0.078132004 0.0082030296, + -0.00172002 0.079714999 0.023828, + 0.049582999 0.063812003 -0.028174, + 0.049998999 0.061454002 -0.035925001, + 0.049568001 0.063846 -0.0281129, + 0.069495998 0.017392 -0.038610999, + 0.065971002 0.028883001 -0.01499, + 0.048312999 0.066138998 -0.020605, + 0.035758998 0.069510996 -0.019995, + 0.046211001 0.068415999 -0.013159, + 0.048324998 0.066142999 -0.020544, + 0.048409 0.066004999 -0.021033, + 0.063483998 0.034464002 -0.00296599, + 0.048285998 0.066200003 -0.0203609, + 0.023912 0.075591996 -9.799e-05, + 0.010543 0.074790001 -0.010229, + 0.029234 0.073848002 -0.005835, + 0.043223999 0.070639998 -0.005835, + 0.036308002 0.074028 0.0052120099, + 0.038890999 0.03889 0.109521, + 0.043258999 0.070616998 -0.0059569501, + 0.045731001 0.030556001 0.109521, + 0.043747 0.070300996 -0.0069949599, + -0.029234 0.073848002 -0.005835, + -0.01142 0.069014996 -0.033606, + -0.012325 0.068317004 -0.035925001, + -0.021574 0.071174003 -0.02207, + -1.8140415e-08 0.075663999 -0.0073609902, + -0.010543 0.074790001 -0.010229, + -0.015011 0.073813997 -0.013403, + -0.023912 0.075591996 -9.799e-05, + -0.017151 0.076945998 0.0042970199, + -0.0054490198 0.075430997 -0.0081539797, + -0.00195402 0.072189003 -0.023229999, + -0.0041070199 0.071796 -0.024512, + -0.021574 0.061758999 -0.052831899, + -0.012325 0.067138001 -0.039771002, + -0.023608999 0.063281998 -0.047888, + -0.01142 0.066440001 -0.042029001, + -0.033142 0.056949001 -0.061071999, + -0.018707 0.060352001 -0.057471, + -0.010041 0.065688998 -0.044470001, + -0.029234 0.054901 -0.067786001, + 0.0041069798 0.071796 -0.024512, + 0.015011 0.073813997 -0.013403, + 0.00626898 0.071220003 -0.026404001, + 0.0082879802 0.070522003 -0.028662, + 0.018707 0.072581999 -0.017432, + 0.048462 0.056979999 -0.050574001, + 0.048218001 0.056639999 -0.051672, + 0.037239 0.061714001 -0.045508001, + 0.049548998 0.059028 -0.04386, + 0.048537999 0.057071 -0.0502689, + 0.035758998 0.059238002 -0.053624999, + 0.037712 0.064373001 -0.03678, + 0.049694002 0.059436001 -0.042516898, + -0.0073750201 0.079521 0.023157001, + -0.0090690199 0.077822998 0.0071660299, + -0.012582 0.079139002 0.021935999, + -0.0071920198 0.079535998 0.023218, + -0.0082880203 0.070522003 -0.028662, + -0.00626902 0.071220003 -0.026404001, + -0.010041 0.069766998 -0.031165, + -0.018707 0.072581999 -0.017432, + 0.010041 0.069766998 -0.031165, + 0.01142 0.069014996 -0.033606, + 0.02483 0.068072997 -0.032202002, + 0.023608999 0.069651999 -0.027014, + 0.021574 0.071174003 -0.02207, + 0.010041 0.065688998 -0.044470001, + 0.018704999 0.060352001 -0.057471, + 0.0082879802 0.064933002 -0.046973001, + 0.012325 0.067138001 -0.039771002, + 0.01142 0.066440001 -0.042029001, + -1.5682945e-08 0.068149 -0.037939001, + 0.012325 0.068317004 -0.035925001, + 0.023608999 0.063281998 -0.047888, + 0.02483 0.064861 -0.0427, + 0.025243999 0.066467002 -0.037450999, + 0.021574 0.061763 -0.052831899 ] + + } + coordIndex [ 67, 65, 68, -1, 155, 68, 65, -1, + 155, 64, 1, -1, 155, 65, 64, -1, + 25, 157, 156, -1, 226, 16, 17, -1, + 226, 1, 64, -1, 2, 32, 14, -1, + 3, 233, 234, -1, 0, 139, 10, -1, + 0, 58, 139, -1, 0, 10, 40, -1, + 0, 40, 58, -1, 18, 1, 226, -1, + 18, 226, 17, -1, 20, 21, 1, -1, + 20, 1, 18, -1, 29, 155, 1, -1, + 29, 1, 21, -1, 4, 98, 87, -1, + 4, 157, 25, -1, 4, 25, 98, -1, + 209, 126, 110, -1, 209, 206, 194, -1, + 130, 52, 36, -1, 39, 58, 40, -1, + 224, 222, 42, -1, 13, 11, 46, -1, + 13, 226, 11, -1, 15, 16, 226, -1, + 8, 40, 10, -1, 8, 10, 11, -1, + 34, 226, 64, -1, 34, 211, 7, -1, + 61, 32, 2, -1, 61, 128, 38, -1, + 61, 38, 32, -1, 61, 2, 14, -1, + 55, 31, 30, -1, 55, 30, 105, -1, + 144, 128, 61, -1, 227, 15, 226, -1, + 171, 172, 63, -1, 247, 141, 89, -1, + 247, 234, 141, -1, 247, 3, 234, -1, + 247, 233, 3, -1, 247, 250, 233, -1, + 249, 250, 247, -1, 158, 157, 4, -1, + 158, 4, 87, -1, 75, 181, 76, -1, + 205, 194, 206, -1, 205, 207, 194, -1, + 27, 201, 79, -1, 78, 177, 156, -1, + 81, 24, 98, -1, 199, 156, 155, -1, + 199, 155, 29, -1, 199, 201, 27, -1, + 199, 78, 156, -1, 164, 29, 19, -1, + 164, 72, 165, -1, 85, 87, 98, -1, + 85, 98, 291, -1, 107, 92, 105, -1, + 5, 126, 209, -1, 5, 194, 6, -1, + 5, 209, 194, -1, 109, 36, 110, -1, + 109, 130, 36, -1, 117, 209, 110, -1, + 304, 126, 5, -1, 304, 5, 6, -1, + 304, 6, 194, -1, 217, 7, 211, -1, + 217, 40, 8, -1, 217, 8, 11, -1, + 217, 34, 7, -1, 217, 11, 226, -1, + 217, 226, 34, -1, 9, 37, 38, -1, + 9, 38, 128, -1, 9, 128, 37, -1, + 41, 56, 55, -1, 41, 55, 105, -1, + 148, 32, 237, -1, 43, 224, 42, -1, + 223, 222, 224, -1, 45, 46, 11, -1, + 45, 11, 47, -1, 49, 34, 50, -1, + 49, 211, 34, -1, 131, 31, 55, -1, + 131, 32, 31, -1, 131, 237, 32, -1, + 48, 10, 139, -1, 48, 139, 57, -1, + 48, 13, 46, -1, 48, 57, 13, -1, + 48, 11, 10, -1, 48, 47, 11, -1, + 12, 226, 13, -1, 12, 57, 226, -1, + 12, 13, 57, -1, 23, 342, 233, -1, + 23, 233, 250, -1, 60, 342, 152, -1, + 60, 152, 144, -1, 143, 339, 345, -1, + 147, 61, 14, -1, 147, 14, 32, -1, + 147, 32, 148, -1, 151, 152, 342, -1, + 151, 342, 23, -1, 151, 23, 63, -1, + 151, 172, 173, -1, 243, 144, 152, -1, + 69, 65, 67, -1, 69, 66, 65, -1, + 71, 16, 15, -1, 71, 15, 227, -1, + 71, 17, 16, -1, 71, 18, 17, -1, + 71, 164, 19, -1, 71, 20, 18, -1, + 71, 227, 72, -1, 71, 21, 20, -1, + 71, 19, 29, -1, 71, 29, 21, -1, + 167, 72, 227, -1, 174, 171, 163, -1, + 174, 163, 162, -1, 174, 162, 327, -1, + 174, 327, 149, -1, 22, 250, 171, -1, + 22, 171, 63, -1, 22, 23, 250, -1, + 22, 63, 23, -1, 324, 321, 240, -1, + 324, 240, 149, -1, 161, 246, 75, -1, + 73, 77, 420, -1, 83, 246, 247, -1, + 83, 181, 75, -1, 83, 75, 246, -1, + 83, 89, 88, -1, 83, 247, 89, -1, + 192, 193, 185, -1, 192, 185, 363, -1, + 386, 384, 192, -1, 221, 351, 308, -1, + 306, 308, 313, -1, 276, 181, 83, -1, + 276, 83, 277, -1, 271, 181, 272, -1, + 417, 90, 181, -1, 188, 363, 185, -1, + 188, 283, 363, -1, 317, 319, 91, -1, + 317, 91, 363, -1, 387, 386, 295, -1, + 80, 98, 24, -1, 80, 99, 98, -1, + 80, 24, 81, -1, 80, 161, 99, -1, + 102, 82, 291, -1, 102, 99, 161, -1, + 102, 290, 82, -1, 176, 156, 177, -1, + 176, 25, 156, -1, 176, 98, 25, -1, + 176, 81, 98, -1, 26, 27, 79, -1, + 26, 79, 199, -1, 26, 199, 27, -1, + 28, 79, 78, -1, 28, 199, 79, -1, + 28, 78, 199, -1, 198, 199, 29, -1, + 198, 29, 164, -1, 198, 164, 201, -1, + 104, 105, 30, -1, 104, 30, 31, -1, + 104, 32, 38, -1, 104, 31, 32, -1, + 106, 92, 107, -1, 106, 196, 92, -1, + 106, 123, 196, -1, 111, 126, 130, -1, + 111, 130, 109, -1, 204, 208, 209, -1, + 204, 209, 117, -1, 35, 113, 112, -1, + 35, 64, 115, -1, 35, 115, 113, -1, + 33, 34, 64, -1, 33, 64, 35, -1, + 33, 35, 112, -1, 33, 52, 51, -1, + 33, 51, 50, -1, 33, 50, 34, -1, + 33, 36, 52, -1, 33, 112, 36, -1, + 114, 36, 112, -1, 114, 110, 36, -1, + 114, 117, 110, -1, 119, 52, 130, -1, + 129, 213, 53, -1, 125, 37, 128, -1, + 125, 38, 37, -1, 125, 104, 38, -1, + 125, 121, 104, -1, 302, 121, 125, -1, + 216, 39, 40, -1, 216, 40, 217, -1, + 216, 58, 39, -1, 216, 130, 126, -1, + 312, 311, 56, -1, 312, 41, 222, -1, + 312, 56, 41, -1, 309, 306, 313, -1, + 309, 315, 256, -1, 220, 56, 311, -1, + 220, 313, 308, -1, 95, 42, 222, -1, + 95, 222, 41, -1, 95, 94, 42, -1, + 95, 105, 92, -1, 95, 41, 105, -1, + 135, 91, 319, -1, 135, 133, 91, -1, + 134, 133, 135, -1, 93, 42, 94, -1, + 93, 43, 42, -1, 93, 224, 43, -1, + 93, 91, 133, -1, 93, 133, 224, -1, + 44, 46, 45, -1, 44, 45, 47, -1, + 44, 48, 46, -1, 44, 47, 48, -1, + 214, 49, 50, -1, 214, 211, 49, -1, + 214, 51, 52, -1, 214, 50, 51, -1, + 214, 52, 119, -1, 214, 53, 213, -1, + 214, 129, 53, -1, 214, 119, 129, -1, + 54, 55, 56, -1, 54, 131, 55, -1, + 54, 56, 220, -1, 54, 220, 131, -1, + 138, 57, 139, -1, 225, 57, 138, -1, + 225, 226, 57, -1, 140, 225, 138, -1, + 140, 139, 58, -1, 140, 144, 243, -1, + 140, 243, 241, -1, 140, 58, 216, -1, + 140, 128, 144, -1, 140, 127, 128, -1, + 229, 89, 141, -1, 334, 339, 264, -1, + 338, 232, 345, -1, 59, 143, 345, -1, + 59, 144, 143, -1, 59, 60, 144, -1, + 59, 345, 342, -1, 59, 342, 60, -1, + 145, 144, 61, -1, 145, 61, 147, -1, + 62, 63, 172, -1, 62, 172, 151, -1, + 62, 151, 63, -1, 116, 115, 64, -1, + 116, 64, 65, -1, 116, 65, 66, -1, + 116, 66, 69, -1, 116, 363, 207, -1, + 154, 67, 68, -1, 154, 69, 67, -1, + 154, 68, 155, -1, 154, 116, 69, -1, + 70, 72, 164, -1, 70, 71, 72, -1, + 70, 164, 71, -1, 160, 165, 327, -1, + 160, 327, 162, -1, 166, 165, 72, -1, + 166, 72, 167, -1, 169, 174, 149, -1, + 325, 149, 327, -1, 325, 324, 149, -1, + 289, 161, 77, -1, 289, 77, 73, -1, + 289, 290, 101, -1, 289, 101, 161, -1, + 289, 73, 420, -1, 74, 75, 76, -1, + 74, 161, 75, -1, 74, 77, 161, -1, + 74, 76, 181, -1, 74, 181, 90, -1, + 74, 420, 77, -1, 74, 90, 420, -1, + 178, 78, 79, -1, 178, 79, 201, -1, + 178, 201, 161, -1, 178, 80, 81, -1, + 178, 161, 80, -1, 178, 177, 78, -1, + 178, 81, 176, -1, 371, 377, 85, -1, + 371, 85, 291, -1, 292, 82, 290, -1, + 292, 291, 82, -1, 279, 83, 88, -1, + 279, 277, 83, -1, 84, 87, 85, -1, + 84, 86, 87, -1, 84, 85, 377, -1, + 84, 377, 293, -1, 84, 293, 86, -1, + 159, 293, 386, -1, 159, 86, 293, -1, + 159, 158, 87, -1, 159, 87, 86, -1, + 159, 386, 192, -1, 159, 116, 154, -1, + 159, 192, 363, -1, 159, 363, 116, -1, + 265, 308, 351, -1, 180, 220, 308, -1, + 180, 339, 145, -1, 180, 145, 146, -1, + 443, 431, 288, -1, 443, 288, 419, -1, + 435, 281, 436, -1, 270, 272, 181, -1, + 270, 181, 276, -1, 280, 279, 88, -1, + 280, 88, 89, -1, 280, 89, 229, -1, + 273, 181, 271, -1, 182, 181, 361, -1, + 182, 417, 181, -1, 416, 420, 90, -1, + 416, 90, 417, -1, 191, 365, 285, -1, + 191, 283, 188, -1, 299, 432, 433, -1, + 383, 192, 384, -1, 294, 295, 386, -1, + 294, 386, 293, -1, 96, 363, 91, -1, + 96, 207, 363, -1, 96, 92, 196, -1, + 96, 91, 93, -1, 96, 93, 94, -1, + 96, 95, 92, -1, 96, 94, 95, -1, + 301, 196, 123, -1, 195, 194, 207, -1, + 195, 207, 96, -1, 195, 96, 196, -1, + 97, 291, 98, -1, 97, 102, 291, -1, + 97, 98, 99, -1, 97, 99, 102, -1, + 100, 101, 290, -1, 100, 290, 102, -1, + 100, 161, 101, -1, 100, 102, 161, -1, + 200, 201, 199, -1, 103, 121, 107, -1, + 103, 104, 121, -1, 103, 107, 105, -1, + 103, 105, 104, -1, 122, 123, 106, -1, + 122, 107, 121, -1, 122, 106, 107, -1, + 108, 109, 110, -1, 108, 111, 109, -1, + 108, 110, 126, -1, 108, 126, 111, -1, + 203, 112, 113, -1, 203, 114, 112, -1, + 203, 113, 115, -1, 203, 115, 116, -1, + 203, 116, 207, -1, 203, 204, 117, -1, + 203, 117, 114, -1, 118, 119, 130, -1, + 118, 130, 129, -1, 118, 129, 119, -1, + 120, 121, 302, -1, 120, 122, 121, -1, + 120, 123, 122, -1, 120, 301, 123, -1, + 120, 302, 301, -1, 124, 304, 302, -1, + 124, 302, 125, -1, 124, 126, 304, -1, + 124, 216, 126, -1, 124, 128, 127, -1, + 124, 125, 128, -1, 124, 127, 140, -1, + 124, 140, 216, -1, 212, 213, 129, -1, + 212, 129, 130, -1, 212, 130, 216, -1, + 218, 217, 211, -1, 218, 211, 216, -1, + 310, 313, 220, -1, 257, 351, 221, -1, + 257, 347, 351, -1, 257, 309, 256, -1, + 236, 237, 131, -1, 236, 131, 220, -1, + 132, 224, 133, -1, 132, 134, 224, -1, + 132, 133, 134, -1, 395, 224, 134, -1, + 395, 134, 135, -1, 395, 135, 319, -1, + 136, 140, 241, -1, 136, 240, 321, -1, + 136, 241, 240, -1, 136, 321, 225, -1, + 136, 225, 140, -1, 137, 138, 139, -1, + 137, 139, 140, -1, 137, 140, 138, -1, + 330, 225, 321, -1, 329, 225, 330, -1, + 230, 337, 260, -1, 282, 254, 281, -1, + 282, 253, 254, -1, 346, 231, 229, -1, + 346, 141, 234, -1, 346, 229, 141, -1, + 333, 260, 337, -1, 344, 345, 232, -1, + 142, 339, 143, -1, 142, 145, 339, -1, + 142, 143, 144, -1, 142, 144, 145, -1, + 238, 146, 145, -1, 238, 145, 147, -1, + 238, 180, 146, -1, 238, 220, 180, -1, + 238, 236, 220, -1, 238, 148, 237, -1, + 238, 147, 148, -1, 242, 244, 173, -1, + 242, 149, 240, -1, 242, 170, 169, -1, + 242, 169, 149, -1, 150, 244, 243, -1, + 150, 152, 151, -1, 150, 243, 152, -1, + 150, 151, 173, -1, 150, 173, 244, -1, + 153, 154, 155, -1, 153, 156, 157, -1, + 153, 155, 156, -1, 153, 157, 158, -1, + 153, 158, 159, -1, 153, 159, 154, -1, + 251, 165, 160, -1, 251, 246, 161, -1, + 251, 162, 163, -1, 251, 160, 162, -1, + 251, 161, 201, -1, 251, 163, 171, -1, + 251, 171, 250, -1, 251, 201, 164, -1, + 251, 164, 165, -1, 326, 327, 165, -1, + 326, 165, 166, -1, 326, 167, 227, -1, + 326, 166, 167, -1, 168, 169, 170, -1, + 168, 170, 242, -1, 168, 172, 171, -1, + 168, 173, 172, -1, 168, 242, 173, -1, + 168, 171, 174, -1, 168, 174, 169, -1, + 175, 176, 177, -1, 175, 177, 178, -1, + 175, 178, 176, -1, 390, 256, 315, -1, + 262, 179, 404, -1, 262, 339, 180, -1, + 262, 180, 179, -1, 266, 404, 179, -1, + 266, 180, 308, -1, 266, 179, 180, -1, + 405, 406, 352, -1, 349, 265, 351, -1, + 350, 359, 308, -1, 350, 308, 265, -1, + 358, 402, 404, -1, 358, 359, 350, -1, + 358, 404, 266, -1, 268, 392, 365, -1, + 268, 365, 191, -1, 268, 189, 296, -1, + 278, 435, 444, -1, 278, 281, 435, -1, + 274, 361, 181, -1, 274, 181, 273, -1, + 414, 417, 182, -1, 414, 182, 361, -1, + 183, 185, 193, -1, 183, 186, 185, -1, + 183, 193, 186, -1, 184, 188, 185, -1, + 184, 185, 186, -1, 184, 189, 188, -1, + 184, 296, 189, -1, 184, 186, 296, -1, + 297, 186, 193, -1, 297, 296, 186, -1, + 187, 188, 189, -1, 187, 191, 188, -1, + 187, 189, 268, -1, 187, 268, 191, -1, + 190, 191, 285, -1, 190, 285, 286, -1, + 190, 283, 191, -1, 190, 286, 283, -1, + 318, 363, 423, -1, 366, 283, 286, -1, + 369, 377, 371, -1, 369, 376, 377, -1, + 373, 432, 299, -1, 373, 288, 431, -1, + 373, 431, 432, -1, 373, 376, 288, -1, + 381, 433, 412, -1, 381, 299, 433, -1, + 298, 193, 192, -1, 298, 192, 383, -1, + 298, 297, 193, -1, 298, 383, 381, -1, + 303, 304, 194, -1, 303, 194, 195, -1, + 303, 196, 301, -1, 303, 195, 196, -1, + 197, 199, 198, -1, 197, 200, 199, -1, + 197, 198, 201, -1, 197, 201, 200, -1, + 202, 204, 203, -1, 202, 205, 206, -1, + 202, 207, 205, -1, 202, 203, 207, -1, + 202, 208, 204, -1, 202, 206, 209, -1, + 202, 209, 208, -1, 210, 216, 211, -1, + 210, 212, 216, -1, 210, 213, 212, -1, + 210, 214, 213, -1, 210, 211, 214, -1, + 215, 216, 217, -1, 215, 217, 218, -1, + 215, 218, 216, -1, 219, 220, 311, -1, + 219, 311, 310, -1, 219, 310, 220, -1, + 307, 309, 257, -1, 307, 257, 221, -1, + 307, 221, 308, -1, 388, 395, 394, -1, + 388, 312, 222, -1, 388, 222, 223, -1, + 388, 223, 224, -1, 388, 224, 395, -1, + 422, 365, 392, -1, 422, 318, 423, -1, + 331, 226, 225, -1, 331, 225, 329, -1, + 331, 227, 226, -1, 331, 326, 227, -1, + 331, 330, 326, -1, 252, 260, 259, -1, + 252, 230, 260, -1, 252, 253, 231, -1, + 252, 231, 230, -1, 255, 436, 281, -1, + 255, 281, 254, -1, 228, 231, 253, -1, + 228, 253, 282, -1, 228, 229, 231, -1, + 228, 280, 229, -1, 228, 282, 280, -1, + 343, 230, 231, -1, 343, 231, 346, -1, + 343, 337, 230, -1, 343, 338, 337, -1, + 343, 232, 338, -1, 343, 344, 232, -1, + 336, 333, 337, -1, 341, 233, 342, -1, + 341, 234, 233, -1, 341, 346, 234, -1, + 235, 237, 236, -1, 235, 238, 237, -1, + 235, 236, 238, -1, 239, 240, 241, -1, + 239, 242, 240, -1, 239, 241, 243, -1, + 239, 243, 244, -1, 239, 244, 242, -1, + 245, 246, 251, -1, 245, 251, 249, -1, + 245, 247, 246, -1, 245, 249, 247, -1, + 248, 250, 249, -1, 248, 251, 250, -1, + 248, 249, 251, -1, 439, 252, 259, -1, + 439, 253, 252, -1, 439, 258, 352, -1, + 439, 259, 258, -1, 439, 254, 253, -1, + 439, 436, 255, -1, 439, 255, 254, -1, + 354, 256, 390, -1, 354, 257, 256, -1, + 354, 347, 257, -1, 401, 390, 439, -1, + 401, 354, 390, -1, 398, 392, 356, -1, + 398, 439, 399, -1, 398, 356, 439, -1, + 263, 264, 339, -1, 263, 339, 262, -1, + 261, 352, 258, -1, 261, 405, 352, -1, + 261, 258, 259, -1, 261, 259, 260, -1, + 261, 260, 333, -1, 407, 261, 333, -1, + 407, 405, 261, -1, 407, 262, 404, -1, + 407, 263, 262, -1, 407, 264, 263, -1, + 407, 334, 264, -1, 407, 333, 334, -1, + 348, 265, 349, -1, 348, 350, 265, -1, + 360, 358, 266, -1, 360, 308, 359, -1, + 360, 266, 308, -1, 267, 356, 392, -1, + 267, 380, 356, -1, 267, 392, 268, -1, + 267, 296, 380, -1, 267, 268, 296, -1, + 269, 270, 276, -1, 269, 276, 278, -1, + 269, 272, 270, -1, 269, 278, 272, -1, + 362, 271, 272, -1, 362, 272, 278, -1, + 362, 273, 271, -1, 362, 274, 273, -1, + 362, 361, 274, -1, 362, 444, 441, -1, + 362, 278, 444, -1, 275, 276, 277, -1, + 275, 278, 276, -1, 275, 277, 279, -1, + 275, 279, 280, -1, 275, 281, 278, -1, + 275, 282, 281, -1, 275, 280, 282, -1, + 316, 317, 363, -1, 316, 363, 318, -1, + 364, 363, 283, -1, 364, 283, 366, -1, + 284, 285, 365, -1, 284, 365, 366, -1, + 284, 286, 285, -1, 284, 366, 286, -1, + 287, 288, 376, -1, 287, 369, 288, -1, + 287, 376, 369, -1, 368, 420, 419, -1, + 368, 419, 288, -1, 368, 288, 369, -1, + 368, 289, 420, -1, 368, 290, 289, -1, + 368, 292, 290, -1, 370, 371, 291, -1, + 370, 291, 292, -1, 370, 292, 368, -1, + 378, 293, 377, -1, 374, 299, 387, -1, + 374, 373, 299, -1, 374, 293, 378, -1, + 374, 294, 293, -1, 374, 387, 295, -1, + 374, 295, 294, -1, 379, 380, 296, -1, + 379, 296, 297, -1, 379, 297, 298, -1, + 379, 298, 381, -1, 385, 381, 383, -1, + 385, 387, 299, -1, 385, 299, 381, -1, + 300, 301, 302, -1, 300, 303, 301, -1, + 300, 302, 304, -1, 300, 304, 303, -1, + 305, 306, 309, -1, 305, 309, 307, -1, + 305, 308, 306, -1, 305, 307, 308, -1, + 427, 439, 390, -1, 314, 315, 309, -1, + 314, 310, 311, -1, 314, 311, 312, -1, + 314, 312, 388, -1, 314, 309, 313, -1, + 314, 313, 310, -1, 391, 315, 314, -1, + 391, 314, 388, -1, 391, 390, 315, -1, + 396, 317, 316, -1, 396, 318, 422, -1, + 396, 316, 318, -1, 396, 319, 317, -1, + 396, 395, 319, -1, 320, 330, 321, -1, + 320, 323, 330, -1, 320, 321, 324, -1, + 320, 324, 323, -1, 322, 323, 324, -1, + 322, 330, 323, -1, 322, 324, 325, -1, + 322, 326, 330, -1, 322, 325, 327, -1, + 322, 327, 326, -1, 328, 329, 330, -1, + 328, 330, 331, -1, 328, 331, 329, -1, + 332, 333, 336, -1, 332, 334, 333, -1, + 332, 336, 339, -1, 332, 339, 334, -1, + 335, 336, 337, -1, 335, 337, 338, -1, + 335, 339, 336, -1, 335, 345, 339, -1, + 335, 338, 345, -1, 340, 341, 342, -1, + 340, 344, 343, -1, 340, 342, 345, -1, + 340, 345, 344, -1, 340, 343, 346, -1, + 340, 346, 341, -1, 355, 347, 354, -1, + 355, 348, 349, -1, 355, 358, 350, -1, + 355, 350, 348, -1, 355, 351, 347, -1, + 355, 349, 351, -1, 403, 401, 439, -1, + 403, 352, 406, -1, 403, 439, 352, -1, + 353, 401, 402, -1, 353, 354, 401, -1, + 353, 355, 354, -1, 353, 402, 358, -1, + 353, 358, 355, -1, 408, 356, 380, -1, + 408, 439, 356, -1, 357, 359, 358, -1, + 357, 360, 359, -1, 357, 358, 360, -1, + 418, 414, 361, -1, 418, 361, 362, -1, + 418, 441, 442, -1, 418, 362, 441, -1, + 424, 423, 363, -1, 424, 363, 364, -1, + 424, 365, 422, -1, 424, 366, 365, -1, + 424, 364, 366, -1, 367, 368, 369, -1, + 367, 370, 368, -1, 367, 369, 371, -1, + 367, 371, 370, -1, 372, 376, 373, -1, + 372, 378, 376, -1, 372, 373, 374, -1, + 372, 374, 378, -1, 375, 377, 376, -1, + 375, 378, 377, -1, 375, 376, 378, -1, + 409, 380, 379, -1, 409, 408, 380, -1, + 409, 381, 412, -1, 409, 379, 381, -1, + 382, 383, 384, -1, 382, 385, 383, -1, + 382, 384, 386, -1, 382, 386, 387, -1, + 382, 387, 385, -1, 426, 394, 399, -1, + 426, 399, 439, -1, 426, 439, 427, -1, + 428, 388, 394, -1, 428, 391, 388, -1, + 428, 427, 391, -1, 428, 394, 426, -1, + 389, 427, 390, -1, 389, 390, 391, -1, + 389, 391, 427, -1, 397, 392, 398, -1, + 397, 422, 392, -1, 397, 396, 422, -1, + 393, 394, 395, -1, 393, 395, 396, -1, + 393, 396, 397, -1, 393, 397, 398, -1, + 393, 399, 394, -1, 393, 398, 399, -1, + 400, 402, 401, -1, 400, 401, 403, -1, + 400, 404, 402, -1, 400, 406, 405, -1, + 400, 403, 406, -1, 400, 407, 404, -1, + 400, 405, 407, -1, 410, 439, 408, -1, + 410, 408, 409, -1, 410, 412, 411, -1, + 410, 409, 412, -1, 438, 436, 439, -1, + 429, 439, 410, -1, 429, 410, 411, -1, + 429, 433, 430, -1, 429, 412, 433, -1, + 429, 411, 412, -1, 413, 417, 414, -1, + 413, 418, 417, -1, 413, 414, 418, -1, + 415, 416, 417, -1, 415, 417, 418, -1, + 415, 419, 420, -1, 415, 420, 416, -1, + 415, 418, 442, -1, 415, 442, 443, -1, + 415, 443, 419, -1, 421, 422, 423, -1, + 421, 423, 424, -1, 421, 424, 422, -1, + 425, 426, 427, -1, 425, 427, 428, -1, + 425, 428, 426, -1, 440, 439, 429, -1, + 440, 429, 430, -1, 440, 431, 443, -1, + 440, 432, 431, -1, 440, 433, 432, -1, + 440, 430, 433, -1, 434, 435, 436, -1, + 434, 436, 438, -1, 434, 444, 435, -1, + 434, 438, 444, -1, 437, 438, 439, -1, + 437, 439, 440, -1, 437, 442, 441, -1, + 437, 443, 442, -1, 437, 440, 443, -1, + 437, 441, 444, -1, 437, 444, 438, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/link4.wrl b/examples/rlsg/staeubli-tx60l.convex/link4.wrl new file mode 100644 index 00000000..0d5bd5b2 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link4.wrl @@ -0,0 +1,701 @@ +#VRML V2.0 utf8 + + +DEF link4 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.0107298 -0.33950201 0.053943999, + -0.045731202 -0.33950201 0.030556099, + 0.053943802 -0.33950201 -0.01073, + 0.050811801 -0.33950201 0.021046, + 0.064521797 -0.162866 0.00601603, + 0.045730799 -0.33950201 0.030556001, + 0.050811801 -0.33950201 -0.021048, + 0.064521797 -0.162866 -0.0060149701, + 0.065253802 -0.163232 -0.00343097, + -0.0173213 -0.166162 -0.067000903, + -0.054962199 -0.205103 0.0020200601, + -0.0544172 -0.20198999 0.0079790596, + -0.0539442 -0.28951401 0.0107291, + -0.054852199 -0.204675 0.0040350598, + -0.0546722 -0.20369899 0.0059970599, + -0.054916199 -0.20498 0.0030030599, + -0.0508122 -0.33950201 0.0210461, + 0.0305558 -0.33950201 0.045727, + 0.040210702 -0.0079589998 0.061000999, + 0.0107298 -0.33950201 -0.053943001, + 0.065581799 -0.163477 -0.00018796702, + 0.065520801 -0.16335399 -0.00148897, + 0.065520801 -0.16335399 0.00148803, + 0.065581799 -0.163477 0.000189032, + 0.065253802 -0.163232 0.0034300301, + 0.053943802 -0.33950201 0.010729, + 0.054999799 -0.33950201 2.6353334e-08, + 0.0576097 -0.032738999 0.043159999, + -0.0266842 -0.18252 0.064999104, + -1.8674794e-07 -0.33950201 0.054997001, + -0.0388912 -0.33950201 0.038890999, + -0.0107302 -0.33950201 0.053943999, + -0.021048199 -0.33950201 0.050816, + -0.0305562 -0.33950201 0.045727, + -0.0388912 -0.33950201 -0.03889, + -0.0305562 -0.33950201 -0.045729998, + -0.055000201 -0.31447801 5.2814791e-08, + -0.055000201 -0.33950201 5.1702635e-08, + -0.053631201 -0.19667999 0.0122001, + -0.053692199 -0.19716799 0.0119231, + -0.0539442 -0.33950201 0.0107291, + 0.040210702 0.0080319699 0.061000999, + 0.040999699 -2.4074394e-05 0.061000999, + 0.021047801 -0.33950201 0.050816, + -0.0539442 -0.31447801 -0.0107299, + -0.0539442 -0.28951401 -0.0107299, + 0.040210702 -0.0079589998 -0.061000001, + 0.040999699 -2.4069002e-05 -0.061000001, + 0.0305558 -0.33950201 -0.045729998, + 0.026637699 -0.078882001 -0.064998001, + 0.021047801 -0.33950201 -0.050813001, + 0.0086997403 -0.163599 -0.067001, + 0.0527757 -0.0062500099 0.050793, + 0.038890801 -0.33950201 0.038890999, + 0.056014702 -0.018213 0.026001001, + 0.0566287 -0.021753101 0.040047001, + 0.056014702 -0.018213 -0.026000001, + 0.0566287 -0.021753101 -0.040047999, + 0.056937698 -0.023949999 -0.044861998, + 0.0576097 -0.032738999 -0.043159001, + 0.045730799 -0.33950201 -0.030556001, + 0.056903701 -0.023706101 -0.044925001, + 0.057139698 -0.025781 -0.026000001, + 0.057139698 -0.025781 0.026001001, + 0.056937698 -0.023949999 0.044865001, + 0.056903701 -0.023706101 0.044925999, + -0.0102692 -0.162378 0.066997997, + -0.042160202 -0.167017 0.058423098, + -0.0415232 -0.168359 0.0588351, + -0.039608199 -0.17226601 0.060070101, + -0.042236201 -0.16677199 0.0583691, + -0.036564201 -0.17605001 0.061665099, + -0.0359312 -0.17666 0.061955102, + -0.031265199 -0.180078 0.063801102, + -0.029543201 -0.180933 0.0643581, + -0.027592201 -0.18203101 0.064915098, + -0.027269199 -0.182153 0.064999104, + -0.0404853 0.0145019 0.0255931, + -0.045731202 -0.33950201 -0.030556001, + -0.0539442 -0.33950201 -0.0107299, + -0.0508122 -0.33950201 -0.021047899, + 0.0064227502 -0.16640601 -0.067001, + -2.1208511e-07 -0.33950201 -0.055, + 0.0096597504 -0.194971 -0.064998001, + 0.0102628 -0.194849 -0.064998001, + -0.0028482601 -0.164819 -0.067001, + 0.0175358 -0.087305099 0.066997997, + 0.0340917 0.022802999 0.061000999, + 0.028014701 -0.069115996 -0.064998001, + 0.040210702 0.0080319801 -0.061000001, + -0.0359312 -0.17666 -0.061953899, + -0.0312653 -0.180078 -0.063799903, + -0.036564201 -0.17605001 -0.061659899, + -0.0396083 -0.17226601 -0.060072899, + -0.042160299 -0.167017 -0.058424901, + -0.042236298 -0.16677199 -0.0583639, + 0.0554277 -0.015527 -0.047270998, + 0.038890801 -0.33950201 -0.03889, + 0.055263702 -0.0147951 0.047504999, + 0.0554277 -0.015527 0.047268, + 0.048575699 0.00375999 -0.040047999, + 0.0082677202 0.042211998 0.040295102, + -0.00558424 -0.090845004 0.066997997, + -0.0071202298 -0.15835001 0.066997997, + 0.0147048 -0.085229002 0.066997997, + 0.016259801 -0.086084001 0.066997997, + 0.00118278 -0.16848101 0.066997997, + 0.0116568 -0.089868098 0.066997997, + 0.018981799 -0.090479001 0.066997997, + 0.0266378 -0.078882001 0.064998999, + 0.0102628 -0.194849 0.064998999, + 0.0280148 -0.069115996 0.064998999, + -0.043636199 -0.16079099 0.057156101, + -0.042992301 -0.00087906298 0.054997101, + -0.0053232401 -0.080835 0.066997997, + -0.00289626 -0.156763 -0.067001, + -0.00592926 -0.160547 -0.067001, + 0.0057177301 -0.105371 -0.067001, + -0.00101026 -0.1354 -0.067001, + 0.0014067499 -0.167505 -0.067001, + -0.000230255 -0.167017 -0.067001, + 0.0048557501 -0.16713899 -0.067001, + 0.00312375 -0.16762701 -0.067001, + -0.016529299 -0.169946 -0.067000903, + 0.035224698 0.024634 0.054997001, + 0.0291327 0.02915 0.060803, + 0.0228347 0.034155 0.0609021, + 0.015689701 0.037939001 0.0610011, + 0.022777701 0.0340329 0.061000999, + 0.028991699 0.0290279 0.061000999, + 0.038062699 0.015722999 0.060803, + 0.037879702 0.015722999 0.061000999, + 0.0457757 0.0090090102 0.054997001, + 0.034255698 0.022925001 0.060803, + 0.048575699 0.00375999 0.040047001, + -0.0275923 -0.18203101 -0.064913899, + -0.0272693 -0.182153 -0.064997897, + -0.029543299 -0.180933 -0.0643529, + -0.021048199 -0.33950201 -0.050813001, + -0.0107302 -0.33950201 -0.053943001, + -0.0173853 -0.162378 -0.067000903, + 0.0527757 -0.0062500099 -0.050795998, + 0.053584699 -0.0086910604 0.040047001, + 0.053584699 -0.0086910604 -0.040047999, + 0.055263702 -0.0147951 -0.047508001, + 0.051864699 -0.0036870099 0.026001001, + 0.050723702 -0.00087903999 0.02554, + 0.050723702 -0.00087903702 -0.025537999, + 0.051864699 -0.0036870099 -0.026000001, + 0.052707698 -0.0060059899 0.050877001, + 0.049270701 0.00241698 0.054997001, + 0.052707698 -0.0060059899 -0.050878, + 0.035228699 0.024634 0.025593, + 0.0417247 0.015356 0.054997001, + 0.0157657 0.038061999 0.0608031, + 0.0155847 0.0401369 0.054997101, + 0.0186627 0.038793899 -0.040295899, + 0.0080377301 0.040380999 0.0608031, + 0.0074667302 0.042334002 0.054997101, + -0.00354024 -0.077538997 0.066997997, + 0.0081977602 -0.086206101 0.066997997, + 0.0073247598 -0.106348 0.066997997, + 0.00025677099 -0.146143 0.066997997, + 0.0117618 -0.121484 0.066997997, + 0.00311977 -0.154687 0.066997997, + 0.00256977 -0.158594 0.066997997, + 0.018699801 -0.096337996 0.066997997, + 0.0120798 -0.110864 0.066997997, + -0.041100301 -2.4093302e-05 0.0609021, + -0.041000299 -2.4093299e-05 0.0610011, + -0.0435942 -0.161035 0.057209101, + -0.0411993 -2.4093295e-05 0.0608031, + -0.040211301 0.0080319503 0.0610011, + -0.040310301 0.0080319503 0.0609021, + -0.022835299 0.034155 0.0609021, + -0.022778301 0.0340329 0.0610011, + -0.015690301 0.0379389 0.0610011, + -0.0404093 0.0080319503 0.0608031, + -0.0340923 0.022802901 0.0610011, + -0.037880301 0.015722999 0.0610011, + 0.0125437 -0.087549001 -0.067001, + 0.00475273 -0.10293 -0.067001, + 0.0070097302 -0.101221 -0.067001, + 0.0101727 -0.104395 -0.067001, + 0.0102047 -0.13124999 -0.067001, + 0.0060257302 -0.105005 -0.067001, + 0.0097377403 -0.15493201 -0.067001, + 0.0100547 -0.15786099 -0.067001, + -0.0162933 0.039771002 0.054997101, + 0.0340917 0.022802999 -0.061000001, + 0.037879702 0.015722999 -0.061000001, + 0.037970699 0.015722999 -0.060901001, + 0.038062699 0.015722999 -0.060798001, + 0.049270701 0.00241698 -0.055, + 0.0082676997 0.042211998 -0.040295899, + 0.0155847 0.0401369 -0.054999899, + 0.0149287 0.040380999 -0.025593899, + 0.0090047298 0.042089898 0.054997101, + 0.0149287 0.040380999 0.0255931, + -0.0026642999 0.042943999 -0.040295899, + -0.041000299 -2.4087889e-05 -0.0609999, + -0.043594301 -0.161035 -0.057208899, + -0.0436363 -0.16079099 -0.057158899, + -0.053631201 -0.19667999 -0.0121989, + -0.053692199 -0.19716799 -0.0119229, + -0.0544172 -0.20198999 -0.0079789404, + -0.0546722 -0.20369899 -0.0059969402, + -0.054852199 -0.204675 -0.0040349402, + -0.054916199 -0.20498 -0.00300394, + -0.054962199 -0.205103 -0.00202094, + -0.0404853 0.0145019 -0.025593899, + -0.040661301 0.014014 0.054997101, + 0.0417247 0.015356 -0.040298, + 0.0417247 0.015356 -0.055, + 0.0457757 0.0090090204 -0.055, + 0.0417247 0.015356 -0.025595, + 0.035228699 0.024634 -0.025594, + 0.022708699 0.036474898 0.0255931, + 0.022708699 0.036474898 -0.025593899, + 0.023103699 0.036230002 0.054997001, + 0.0186627 0.038793899 0.040295102, + 0.016673701 0.0396479 0.054997101, + 0.0228897 0.034277 0.060803, + -2.7307115e-07 0.041113 0.0609021, + -2.7303466e-07 0.0409909 0.0610011, + 0.0079977298 0.040259 0.0610011, + -0.00093827501 0.042943999 0.054997101, + -0.0026642799 0.042943999 0.040295102, + -0.0021062801 0.042943999 0.0255931, + -0.0080382703 0.040380999 0.0608031, + -2.7313914e-07 0.041235 0.0608031, + -0.0079992702 0.040259 0.0610011, + -0.0157663 0.038061999 0.0608031, + -0.00190824 -0.087426998 0.066997997, + -0.000799242 -0.089258097 0.066997997, + -0.0064332401 -0.084496997 0.066997997, + -0.00152824 -0.082787998 0.066997997, + -0.029133299 0.02915 0.0608031, + -0.028992301 0.0290279 0.0610011, + -0.0228903 0.034277 0.0608031, + -0.038002301 0.020116899 0.040295102, + -0.040077299 0.0156009 0.054997101, + -0.038063299 0.015722999 0.0608031, + -0.034256302 0.022925001 0.0608031, + 0.0278467 0.032813001 0.040295001, + 0.029735699 0.031104 0.054997001, + 0.023761701 0.035863999 0.054997001, + 0.0278467 0.032813001 -0.040295999, + -0.0233123 0.036107998 0.040295102, + -0.0238673 0.035741899 0.054997101, + -0.0188033 0.038672 0.0255931, + 0.034255698 0.022925001 -0.060798001, + 0.035224698 0.024634 -0.055, + 0.030198701 0.030615 -0.055, + 0.0080377003 0.040380999 -0.0607979, + 0.0100037 0.041845899 -0.054999899, + 0.017379699 0.039282002 -0.054999899, + 0.023103699 0.036230002 -0.055, + 0.0241847 0.035498001 -0.055, + 0.029735699 0.031104 -0.055, + 0.0291327 0.02915 -0.060798001, + 0.00076369999 0.042943999 -0.054999899, + 0.000477725 0.042943999 0.054997101, + -0.0021062901 0.042943999 -0.025593899, + 0.0065437201 0.042456001 0.0255931, + 0.0065437099 0.042456001 -0.025593899, + 0.0074666999 0.042334002 -0.054999899, + -0.040211301 0.0080319596 -0.0609999, + -0.040077299 0.0156009 -0.054999899, + -0.038002301 0.020116899 -0.040295899, + -0.0369993 0.021948 -0.025593899, + -0.0369993 0.021948 0.0255931, + -0.0093072699 0.041967999 0.054997101, + -0.0080672698 0.042211998 0.054997101, + -0.0134243 0.040869001 -0.040295899, + -0.0188033 0.038672 -0.025593899, + -0.017319299 0.039404001 0.054997101, + -0.0134243 0.040869001 0.040295102, + -0.041855302 0.0098630097 -0.040295899, + -0.041855302 0.0098630097 0.040295102, + -0.042347301 0.0074219601 0.054997101, + -3.0113623e-07 0.041113 -0.060900901, + -3.0113796e-07 0.0409909 -0.0609999, + 0.0157657 0.038061999 -0.0607979, + 0.0079977 0.040259 -0.0609999, + 0.0130707 -0.083887003 -0.067001, + -0.022835299 0.034155 -0.060900901, + -0.022778301 0.0340329 -0.0609999, + -0.015690301 0.037939001 -0.0609999, + -0.0340923 0.022802901 -0.0609999, + -0.0139983 -0.053734999 -0.064997897, + 0.00038572701 -0.086572103 -0.067000903, + -0.0080383001 0.040380999 -0.0607979, + -0.0157663 0.038061999 -0.0607979, + -0.0079982998 0.040259 -0.0609999, + -0.0093072997 0.041967999 -0.054999899, + -0.0085113002 0.042089898 -0.054999899, + -3.0114347e-07 0.041235 -0.0607979, + -0.00093829999 0.042943999 -0.054999899, + -0.042992301 -0.00087905797 -0.054999899, + -0.042500298 0.0065669902 -0.025593899, + -0.042500298 0.0065669902 0.0255931, + -0.042721301 0.0048580002 0.054997101, + -0.055000201 -0.20498 5.7623499e-08, + 0.0228347 0.034155 -0.060901001, + 0.015689701 0.037939001 -0.0609999, + 0.022777701 0.0340329 -0.061000001, + 0.0228897 0.034277 -0.060798001, + 0.028991699 0.0290279 -0.061000001, + -0.036266301 0.023047 -0.054999899, + -0.0369303 0.022069899 -0.054999899, + -0.036266301 0.023047 0.054997101, + -0.036697298 0.022437001 0.054997101, + -0.0404093 0.0080319596 -0.0607979, + -0.0425913 0.005957 -0.054999899, + -0.042347301 0.0074219601 -0.054999899, + -0.040569302 0.014258 -0.054999899, + -0.0411993 -2.4087989e-05 -0.0607979, + -0.038063299 0.015722999 -0.0607979, + -0.041100301 -2.40879e-05 -0.060900901, + -0.040310301 0.0080319596 -0.060900901, + -0.037971299 0.015722999 -0.060900901, + -0.037880301 0.015722999 -0.0609999, + -0.026173299 0.034155 0.0255931, + -0.031061299 0.029760901 0.054997101, + -0.032169301 0.02854 -0.025593899, + -0.032169301 0.02854 0.0255931, + -0.0246643 0.035254002 -0.054999899, + -0.017319299 0.039404001 -0.054999899, + -0.0233123 0.036107998 -0.040295899, + -0.0246643 0.035254002 0.054997101, + -0.026173299 0.034155 -0.025593899, + -0.029133299 0.02915 -0.0607979, + -0.031061299 0.029761 -0.054999899, + -0.0254483 0.034644 -0.054999899, + -0.0228903 0.034277 -0.0607979, + -0.031822301 0.028906001 -0.054999899, + -0.034256302 0.022925001 -0.0607979, + -0.028992301 0.0290279 -0.0609999 ] + + } + coordIndex [ 29, 33, 17, -1, 80, 17, 33, -1, + 80, 33, 16, -1, 37, 80, 16, -1, + 53, 17, 5, -1, 53, 150, 17, -1, + 64, 53, 5, -1, 25, 2, 26, -1, + 6, 7, 2, -1, 6, 2, 25, -1, + 139, 80, 35, -1, 139, 35, 138, -1, + 1, 170, 16, -1, 1, 16, 33, -1, + 1, 33, 30, -1, 0, 110, 29, -1, + 0, 43, 110, -1, 0, 29, 17, -1, + 0, 17, 43, -1, 42, 17, 150, -1, + 79, 80, 37, -1, 79, 204, 203, -1, + 79, 37, 206, -1, 19, 139, 82, -1, + 88, 187, 285, -1, 8, 2, 7, -1, + 3, 5, 25, -1, 3, 25, 4, -1, + 24, 4, 25, -1, 60, 25, 97, -1, + 60, 6, 25, -1, 78, 35, 80, -1, + 31, 33, 29, -1, 31, 29, 76, -1, + 70, 170, 1, -1, 70, 1, 30, -1, + 40, 14, 37, -1, 40, 37, 16, -1, + 113, 302, 15, -1, 18, 17, 42, -1, + 205, 79, 206, -1, 47, 88, 89, -1, + 50, 25, 5, -1, 50, 97, 25, -1, + 50, 139, 19, -1, 50, 80, 139, -1, + 50, 17, 80, -1, 50, 5, 17, -1, + 21, 26, 2, -1, 21, 2, 8, -1, + 27, 3, 4, -1, 27, 4, 24, -1, + 27, 64, 5, -1, 27, 5, 3, -1, + 59, 6, 60, -1, 59, 7, 6, -1, + 59, 8, 7, -1, 59, 21, 8, -1, + 59, 62, 27, -1, 59, 27, 23, -1, + 235, 76, 66, -1, 106, 29, 110, -1, + 32, 33, 31, -1, 32, 72, 33, -1, + 32, 73, 72, -1, 69, 30, 33, -1, + 69, 68, 30, -1, 90, 138, 35, -1, + 90, 91, 138, -1, 9, 116, 123, -1, + 9, 140, 116, -1, 136, 140, 9, -1, + 136, 9, 123, -1, 136, 82, 139, -1, + 136, 123, 82, -1, 12, 40, 39, -1, + 10, 302, 303, -1, 10, 15, 302, -1, + 10, 303, 36, -1, 10, 36, 37, -1, + 10, 37, 15, -1, 11, 39, 113, -1, + 11, 113, 14, -1, 11, 12, 39, -1, + 11, 14, 40, -1, 11, 40, 12, -1, + 13, 14, 113, -1, 13, 113, 15, -1, + 13, 37, 14, -1, 13, 15, 37, -1, + 112, 16, 170, -1, 112, 40, 16, -1, + 111, 43, 17, -1, 111, 17, 18, -1, + 111, 18, 42, -1, 45, 205, 204, -1, + 51, 186, 187, -1, 48, 97, 50, -1, + 48, 50, 88, -1, 193, 97, 48, -1, + 193, 48, 47, -1, 193, 47, 89, -1, + 84, 51, 187, -1, 84, 50, 19, -1, + 84, 19, 82, -1, 20, 23, 26, -1, + 20, 26, 21, -1, 20, 59, 23, -1, + 20, 21, 59, -1, 98, 142, 149, -1, + 98, 53, 99, -1, 56, 57, 96, -1, + 56, 96, 99, -1, 22, 23, 27, -1, + 22, 27, 24, -1, 22, 24, 25, -1, + 22, 26, 23, -1, 22, 25, 26, -1, + 63, 64, 27, -1, 63, 27, 62, -1, + 61, 97, 96, -1, 61, 96, 57, -1, + 102, 235, 66, -1, 28, 66, 76, -1, + 28, 106, 66, -1, 28, 76, 29, -1, + 28, 29, 106, -1, 165, 66, 106, -1, + 67, 70, 30, -1, 67, 30, 68, -1, + 75, 31, 76, -1, 75, 32, 31, -1, + 74, 73, 32, -1, 74, 32, 75, -1, + 114, 235, 159, -1, 71, 33, 72, -1, + 71, 69, 33, -1, 280, 302, 177, -1, + 211, 280, 177, -1, 201, 78, 80, -1, + 34, 93, 35, -1, 34, 94, 93, -1, + 34, 35, 78, -1, 34, 78, 94, -1, + 92, 35, 93, -1, 92, 90, 35, -1, + 137, 138, 91, -1, 207, 206, 37, -1, + 207, 37, 208, -1, 209, 37, 36, -1, + 209, 208, 37, -1, 209, 36, 303, -1, + 38, 113, 39, -1, 38, 112, 113, -1, + 38, 39, 40, -1, 38, 40, 112, -1, + 231, 176, 159, -1, 127, 225, 159, -1, + 41, 131, 108, -1, 41, 111, 42, -1, + 41, 108, 111, -1, 41, 42, 150, -1, + 41, 150, 131, -1, 109, 110, 43, -1, + 109, 43, 111, -1, 44, 79, 205, -1, + 44, 205, 45, -1, 44, 204, 79, -1, + 44, 45, 204, -1, 46, 88, 47, -1, + 46, 48, 88, -1, 46, 47, 48, -1, + 141, 97, 193, -1, 100, 150, 193, -1, + 100, 193, 214, -1, 49, 88, 50, -1, + 49, 50, 84, -1, 49, 187, 88, -1, + 49, 84, 187, -1, 81, 84, 121, -1, + 81, 51, 84, -1, 81, 186, 51, -1, + 81, 184, 186, -1, 81, 121, 120, -1, + 81, 120, 116, -1, 83, 84, 82, -1, + 147, 193, 150, -1, 52, 150, 53, -1, + 52, 149, 150, -1, 52, 53, 98, -1, + 52, 98, 149, -1, 65, 55, 99, -1, + 65, 53, 64, -1, 65, 99, 53, -1, + 65, 57, 55, -1, 65, 61, 57, -1, + 54, 99, 55, -1, 54, 56, 99, -1, + 54, 55, 57, -1, 54, 57, 56, -1, + 227, 263, 199, -1, 158, 266, 265, -1, + 158, 101, 194, -1, 158, 194, 266, -1, + 198, 155, 196, -1, 58, 59, 60, -1, + 58, 60, 97, -1, 58, 97, 61, -1, + 58, 62, 59, -1, 58, 64, 63, -1, + 58, 63, 62, -1, 58, 65, 64, -1, + 58, 61, 65, -1, 103, 66, 165, -1, + 103, 102, 66, -1, 164, 167, 162, -1, + 164, 162, 103, -1, 164, 103, 165, -1, + 169, 67, 68, -1, 169, 68, 69, -1, + 169, 70, 67, -1, 169, 69, 71, -1, + 169, 71, 72, -1, 169, 170, 70, -1, + 169, 72, 73, -1, 169, 73, 74, -1, + 169, 74, 75, -1, 169, 75, 76, -1, + 169, 76, 235, -1, 169, 235, 172, -1, + 175, 159, 176, -1, 175, 238, 159, -1, + 178, 114, 159, -1, 178, 159, 238, -1, + 269, 271, 270, -1, 301, 302, 280, -1, + 77, 241, 210, -1, 77, 210, 211, -1, + 77, 211, 241, -1, 279, 211, 278, -1, + 279, 280, 211, -1, 95, 94, 78, -1, + 95, 78, 201, -1, 202, 79, 203, -1, + 202, 80, 79, -1, 202, 201, 80, -1, + 115, 184, 81, -1, 115, 81, 116, -1, + 122, 82, 123, -1, 122, 83, 82, -1, + 122, 121, 84, -1, 122, 84, 83, -1, + 85, 123, 116, -1, 85, 120, 123, -1, + 85, 116, 120, -1, 224, 159, 225, -1, + 224, 231, 159, -1, 125, 222, 129, -1, + 246, 257, 218, -1, 128, 105, 129, -1, + 128, 127, 105, -1, 154, 127, 222, -1, + 154, 155, 157, -1, 154, 225, 127, -1, + 154, 157, 225, -1, 86, 108, 131, -1, + 86, 131, 87, -1, 86, 105, 108, -1, + 86, 129, 105, -1, 86, 87, 129, -1, + 133, 87, 131, -1, 133, 153, 124, -1, + 133, 124, 125, -1, 133, 129, 87, -1, + 133, 125, 129, -1, 190, 89, 88, -1, + 190, 88, 285, -1, 190, 193, 89, -1, + 181, 116, 140, -1, 181, 118, 116, -1, + 291, 181, 140, -1, 291, 285, 181, -1, + 291, 294, 285, -1, 200, 91, 90, -1, + 200, 137, 91, -1, 200, 90, 92, -1, + 200, 92, 93, -1, 200, 140, 136, -1, + 200, 93, 94, -1, 200, 94, 95, -1, + 200, 95, 201, -1, 144, 96, 97, -1, + 144, 97, 141, -1, 144, 142, 98, -1, + 144, 99, 96, -1, 144, 98, 99, -1, + 143, 142, 144, -1, 134, 150, 100, -1, + 134, 100, 214, -1, 146, 147, 150, -1, + 148, 193, 147, -1, 152, 253, 124, -1, + 152, 124, 153, -1, 156, 218, 257, -1, + 195, 196, 155, -1, 195, 155, 156, -1, + 264, 158, 265, -1, 197, 101, 158, -1, + 197, 155, 198, -1, 197, 157, 155, -1, + 197, 158, 157, -1, 197, 194, 101, -1, + 262, 158, 264, -1, 234, 235, 102, -1, + 234, 167, 160, -1, 234, 102, 103, -1, + 234, 103, 162, -1, 107, 108, 160, -1, + 107, 160, 167, -1, 104, 159, 160, -1, + 104, 127, 159, -1, 104, 105, 127, -1, + 104, 108, 105, -1, 104, 160, 108, -1, + 166, 165, 106, -1, 166, 108, 107, -1, + 166, 107, 167, -1, 166, 110, 109, -1, + 166, 106, 110, -1, 166, 111, 108, -1, + 166, 109, 111, -1, 171, 112, 170, -1, + 171, 113, 112, -1, 171, 302, 113, -1, + 171, 177, 302, -1, 171, 173, 177, -1, + 239, 276, 249, -1, 179, 114, 178, -1, + 179, 172, 235, -1, 179, 235, 114, -1, + 179, 173, 172, -1, 179, 177, 173, -1, + 240, 269, 241, -1, 240, 271, 269, -1, + 117, 118, 181, -1, 117, 181, 182, -1, + 183, 184, 115, -1, 185, 115, 116, -1, + 185, 117, 182, -1, 185, 183, 115, -1, + 185, 116, 118, -1, 185, 118, 117, -1, + 119, 120, 121, -1, 119, 121, 122, -1, + 119, 123, 120, -1, 119, 122, 123, -1, + 245, 124, 253, -1, 245, 125, 124, -1, + 245, 222, 125, -1, 245, 246, 222, -1, + 258, 257, 246, -1, 126, 222, 127, -1, + 126, 127, 128, -1, 126, 129, 222, -1, + 126, 128, 129, -1, 130, 131, 150, -1, + 130, 150, 133, -1, 130, 133, 131, -1, + 132, 133, 150, -1, 132, 153, 133, -1, + 132, 150, 134, -1, 132, 214, 153, -1, + 132, 134, 214, -1, 189, 285, 308, -1, + 189, 190, 285, -1, 191, 193, 190, -1, + 290, 291, 140, -1, 135, 200, 136, -1, + 135, 137, 200, -1, 135, 138, 137, -1, + 135, 139, 138, -1, 135, 136, 139, -1, + 267, 140, 200, -1, 267, 290, 140, -1, + 267, 322, 290, -1, 317, 201, 202, -1, + 268, 210, 241, -1, 268, 241, 269, -1, + 151, 141, 193, -1, 151, 193, 148, -1, + 151, 149, 142, -1, 151, 142, 143, -1, + 151, 144, 141, -1, 151, 143, 144, -1, + 145, 147, 146, -1, 145, 148, 147, -1, + 145, 150, 149, -1, 145, 146, 150, -1, + 145, 149, 151, -1, 145, 151, 148, -1, + 216, 252, 253, -1, 216, 253, 152, -1, + 216, 213, 252, -1, 215, 152, 153, -1, + 215, 153, 214, -1, 215, 216, 152, -1, + 221, 155, 154, -1, 221, 154, 222, -1, + 220, 218, 156, -1, 220, 156, 155, -1, + 220, 155, 221, -1, 256, 156, 257, -1, + 256, 195, 156, -1, 273, 227, 199, -1, + 273, 199, 296, -1, 230, 225, 157, -1, + 230, 157, 158, -1, 230, 158, 262, -1, + 228, 263, 227, -1, 236, 159, 235, -1, + 236, 160, 159, -1, 236, 234, 160, -1, + 161, 162, 167, -1, 161, 234, 162, -1, + 161, 167, 234, -1, 163, 164, 165, -1, + 163, 165, 166, -1, 163, 167, 164, -1, + 163, 166, 167, -1, 168, 170, 169, -1, + 168, 171, 170, -1, 168, 169, 172, -1, + 168, 172, 173, -1, 168, 173, 171, -1, + 174, 238, 175, -1, 174, 239, 238, -1, + 174, 175, 176, -1, 174, 176, 239, -1, + 232, 239, 176, -1, 232, 276, 239, -1, + 232, 188, 276, -1, 232, 272, 188, -1, + 232, 176, 231, -1, 242, 211, 177, -1, + 242, 177, 179, -1, 242, 241, 211, -1, + 243, 178, 238, -1, 243, 179, 178, -1, + 243, 242, 179, -1, 330, 239, 249, -1, + 311, 243, 324, -1, 180, 181, 285, -1, + 180, 182, 181, -1, 180, 184, 183, -1, + 180, 185, 182, -1, 180, 183, 185, -1, + 180, 186, 184, -1, 180, 285, 187, -1, + 180, 187, 186, -1, 247, 258, 246, -1, + 259, 258, 247, -1, 259, 245, 253, -1, + 259, 247, 245, -1, 277, 276, 188, -1, + 277, 188, 272, -1, 250, 276, 275, -1, + 192, 193, 191, -1, 251, 190, 189, -1, + 251, 191, 190, -1, 251, 192, 191, -1, + 251, 214, 193, -1, 251, 193, 192, -1, + 251, 213, 214, -1, 251, 189, 308, -1, + 251, 252, 213, -1, 283, 195, 256, -1, + 255, 266, 194, -1, 255, 195, 283, -1, + 255, 196, 195, -1, 255, 194, 197, -1, + 255, 198, 196, -1, 255, 197, 198, -1, + 298, 296, 199, -1, 298, 199, 263, -1, + 319, 200, 201, -1, 319, 201, 317, -1, + 319, 267, 200, -1, 299, 317, 202, -1, + 299, 202, 203, -1, 299, 203, 204, -1, + 299, 204, 205, -1, 299, 205, 206, -1, + 299, 206, 207, -1, 299, 207, 208, -1, + 299, 208, 209, -1, 299, 209, 303, -1, + 316, 210, 268, -1, 316, 211, 210, -1, + 316, 278, 211, -1, 316, 268, 318, -1, + 212, 214, 213, -1, 212, 215, 214, -1, + 212, 213, 216, -1, 212, 216, 215, -1, + 217, 246, 218, -1, 217, 218, 220, -1, + 217, 220, 246, -1, 219, 246, 220, -1, + 219, 220, 221, -1, 219, 222, 246, -1, + 219, 221, 222, -1, 223, 224, 225, -1, + 223, 225, 230, -1, 223, 231, 224, -1, + 223, 230, 231, -1, 226, 230, 262, -1, + 226, 273, 230, -1, 226, 227, 273, -1, + 226, 228, 227, -1, 226, 262, 263, -1, + 226, 263, 228, -1, 229, 231, 230, -1, + 229, 230, 273, -1, 229, 273, 272, -1, + 229, 272, 232, -1, 229, 232, 231, -1, + 233, 235, 234, -1, 233, 236, 235, -1, + 233, 234, 236, -1, 237, 243, 238, -1, + 237, 324, 243, -1, 237, 330, 324, -1, + 237, 238, 239, -1, 237, 239, 330, -1, + 323, 330, 331, -1, 323, 324, 330, -1, + 326, 311, 324, -1, 312, 271, 240, -1, + 312, 240, 241, -1, 312, 241, 242, -1, + 312, 242, 243, -1, 312, 243, 311, -1, + 244, 246, 245, -1, 244, 247, 246, -1, + 244, 245, 247, -1, 248, 249, 276, -1, + 248, 276, 250, -1, 248, 329, 330, -1, + 248, 330, 249, -1, 248, 275, 329, -1, + 248, 250, 275, -1, 260, 251, 308, -1, + 260, 252, 251, -1, 260, 253, 252, -1, + 260, 259, 253, -1, 254, 297, 266, -1, + 254, 284, 297, -1, 254, 266, 255, -1, + 254, 283, 284, -1, 254, 255, 283, -1, + 282, 285, 294, -1, 282, 284, 285, -1, + 306, 308, 285, -1, 307, 256, 257, -1, + 307, 283, 256, -1, 307, 257, 258, -1, + 307, 258, 259, -1, 307, 259, 260, -1, + 307, 260, 308, -1, 261, 263, 262, -1, + 261, 298, 263, -1, 261, 264, 265, -1, + 261, 262, 264, -1, 261, 265, 266, -1, + 261, 266, 297, -1, 261, 297, 298, -1, + 320, 267, 319, -1, 320, 322, 267, -1, + 321, 337, 322, -1, 321, 318, 337, -1, + 310, 318, 268, -1, 310, 337, 318, -1, + 310, 268, 269, -1, 310, 269, 270, -1, + 310, 270, 271, -1, 310, 271, 312, -1, + 338, 287, 291, -1, 288, 294, 291, -1, + 288, 291, 287, -1, 288, 293, 294, -1, + 288, 335, 293, -1, 295, 277, 272, -1, + 295, 274, 277, -1, 295, 272, 273, -1, + 295, 273, 296, -1, 328, 293, 335, -1, + 328, 295, 293, -1, 328, 274, 295, -1, + 328, 329, 275, -1, 328, 275, 276, -1, + 328, 277, 274, -1, 328, 276, 277, -1, + 315, 278, 316, -1, 315, 279, 278, -1, + 315, 280, 279, -1, 315, 300, 301, -1, + 315, 301, 280, -1, 281, 297, 284, -1, + 281, 284, 282, -1, 281, 294, 297, -1, + 281, 282, 294, -1, 305, 284, 283, -1, + 305, 285, 284, -1, 305, 306, 285, -1, + 305, 283, 307, -1, 286, 338, 335, -1, + 286, 287, 338, -1, 286, 335, 288, -1, + 286, 288, 287, -1, 289, 291, 290, -1, + 289, 338, 291, -1, 289, 290, 322, -1, + 289, 322, 337, -1, 289, 337, 338, -1, + 292, 294, 293, -1, 292, 293, 295, -1, + 292, 295, 296, -1, 292, 297, 294, -1, + 292, 296, 298, -1, 292, 298, 297, -1, + 314, 317, 299, -1, 314, 300, 315, -1, + 314, 302, 301, -1, 314, 301, 300, -1, + 314, 303, 302, -1, 314, 299, 303, -1, + 304, 306, 305, -1, 304, 305, 307, -1, + 304, 308, 306, -1, 304, 307, 308, -1, + 309, 337, 310, -1, 309, 336, 337, -1, + 309, 325, 336, -1, 309, 326, 325, -1, + 309, 311, 326, -1, 309, 312, 311, -1, + 309, 310, 312, -1, 313, 314, 315, -1, + 313, 315, 316, -1, 313, 317, 314, -1, + 313, 316, 318, -1, 313, 319, 317, -1, + 313, 320, 319, -1, 313, 318, 321, -1, + 313, 322, 320, -1, 313, 321, 322, -1, + 333, 331, 334, -1, 333, 323, 331, -1, + 333, 324, 323, -1, 333, 336, 325, -1, + 333, 325, 326, -1, 333, 326, 324, -1, + 327, 328, 335, -1, 327, 335, 334, -1, + 327, 329, 328, -1, 327, 330, 329, -1, + 327, 331, 330, -1, 327, 334, 331, -1, + 332, 333, 334, -1, 332, 334, 335, -1, + 332, 336, 333, -1, 332, 337, 336, -1, + 332, 335, 338, -1, 332, 338, 337, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/link5.wrl b/examples/rlsg/staeubli-tx60l.convex/link5.wrl new file mode 100644 index 00000000..6f9ddc0b --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link5.wrl @@ -0,0 +1,257 @@ +#VRML V2.0 utf8 + + +DEF link5 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.036288999 -0.021500001 -0.0072270599, + -0.036998998 0.018544 -2.4080306e-05, + -0.036288999 -0.018544 -0.0072270599, + -0.035994999 -0.015008 0.0085209599, + -0.036998998 -0.021500001 -2.4080302e-05, + -0.036998998 -0.015588 -2.4080306e-05, + -0.034184001 -0.021500001 0.014136, + -0.018478001 0.0076549998 0.063451998, + -0.014142 0.014142 0.063451998, + 0.036998998 0.021500001 -2.40803e-05, + -0.014142 -0.014142 0.063451998, + -0.018478001 -0.0076540001 0.063451998, + 2.77895e-12 -0.018544 -0.037012, + -0.034184001 0.021500001 0.014136, + -0.036288999 -0.021500001 0.0071779499, + -0.036265999 0.015164 0.0073000202, + -0.035994999 0.015007 0.0085209599, + -0.036265999 -0.015164 0.0073000202, + -0.02 3.2203027e-12 0.063451998, + 0.020555001 0.021500001 0.030736901, + -0.014159 0.018544 -0.034203999, + -0.036288999 0.021500001 -0.0072270599, + -0.034184001 0.015587 -0.0141851, + -0.036998998 0.021500001 -2.40803e-05, + -0.036288999 -0.015588 -0.0072270599, + -0.034184001 -0.018544 -0.0141851, + -0.034184001 -0.021500001 -0.0141851, + -0.026163001 -0.021500001 -0.026147, + -0.020555001 -0.021500001 -0.030786, + -0.026163001 -0.018544 -0.026147, + -0.020555001 -0.018544 -0.030786, + -0.020555001 0.021500001 -0.030786, + -0.020555001 0.018544 -0.030786, + 0.036288999 0.021500001 -0.0072270599, + 0.014142 -0.014142 0.063451998, + 0.018478001 0.0076549998 0.063451998, + 0.018478001 -0.0076540001 0.063451998, + 0.0076540001 -0.018478001 0.063451998, + 0.030764 -0.021500001 0.020605, + 0.026163001 -0.021500001 -0.026147, + -0.007218 0.021500001 -0.036279101, + 3.5876339e-13 0.021500001 -0.037012, + -0.014159 0.021500001 -0.034203999, + 0.007218 0.021500001 -0.036279101, + -0.034184001 0.021500001 -0.0141851, + -0.036288999 0.021500001 0.0071779499, + -0.007218 -0.021500001 -0.036279101, + -0.014159 -0.021500001 -0.034203999, + -3.7234812e-12 0.015587 -0.037012, + -0.007218 0.018544 -0.036279101, + -0.014159 -0.015588 -0.034203999, + 0.020555001 0.018544 -0.030786, + 0.020555001 0.021500001 -0.030786, + 0.030764 0.021500001 0.020605, + 0.014142 0.014142 0.063451998, + 0.034184001 0.021500001 0.014136, + 0.0076540001 0.018479001 0.063451998, + 0.026163001 0.021500001 0.026220899, + 5.5131559e-12 0.021500001 0.036963001, + 0.007218 0.021500001 0.036230002, + 0.014159 0.021500001 0.034155, + -0.007218 0.021500001 0.036230002, + -0.030764 0.021500001 0.020605, + -0.0076540001 0.018479001 0.063451998, + -0.030764 -0.015588 -0.020532001, + 0.036998998 -0.018544 -2.40803e-05, + 0.036998998 -0.015588 -2.4080304e-05, + 0.036998998 0.018544 -2.4080298e-05, + -0.030764 -0.021500001 -0.020532001, + 0.026163001 -0.021500001 0.026220899, + 0.020555001 -0.021500001 0.030736901, + 0.034184001 -0.021500001 0.014136, + 0.036998998 -0.021500001 -2.40803e-05, + -0.026163001 -0.021500001 0.026220899, + -0.0076540001 -0.018478001 0.063451998, + 0.034184001 -0.021500001 -0.0141851, + 0.036288999 -0.021500001 -0.0072270599, + 0.030764 -0.021500001 -0.020532001, + 0.036288999 0.015587 -0.0072270599, + 0.007218 -0.021500001 -0.036279101, + -3.0030891e-12 -0.021500001 -0.037012, + 0.030764 0.015587 -0.020532001, + 0.030764 0.021500001 -0.020532001, + 0.034184001 0.021500001 -0.0141851, + 0.030764 -0.018544 -0.020532001, + 0.026163001 0.021500001 -0.026147, + -0.020555001 0.021500001 0.030736901, + -0.014159 0.021500001 0.034155, + 5.5506784e-12 0.020001 0.063451998, + -0.026163001 0.021500001 0.026220899, + -0.030764 0.018544 -0.020532001, + -0.030764 0.021500001 -0.020532001, + -0.026163001 0.021500001 -0.026147, + -0.030764 0.015587 -0.020532001, + -0.034184001 -0.015588 -0.0141851, + 0.014159 -0.015588 -0.034203999, + 0.014159 -0.021500001 -0.034203999, + 0.020555001 -0.021500001 -0.030786, + 0.014159 -0.018544 -0.034203999, + 0.014159 0.021500001 -0.034203999, + 0.007218 0.015587 -0.036279101, + 0.007218 -0.018544 -0.036279101, + 0.02 3.4085206e-12 0.063451998, + -0.014159 -0.021500001 0.034155, + -0.020555001 -0.021500001 0.030736901, + -0.030764 -0.021500001 0.020605, + -0.007218 -0.021500001 0.036230002, + 0.036221001 0.015137 0.0075439201, + 0.035994999 0.015007 0.0085209599, + 0.035994999 -0.015008 0.0085209599, + 0.036221001 -0.015139 0.0075439201, + 0.036288999 0.021500001 0.0071779499, + 0.036288999 -0.021500001 0.0071779499, + 0.007218 -0.021500001 0.036230002, + 0.014159 -0.021500001 0.034155, + -2.8068719e-12 -0.02 0.063451998, + -1.1948704e-12 -0.021500001 0.036963001 ] + + } + coordIndex [ 68, 4, 26, -1, 6, 68, 105, -1, + 6, 4, 68, -1, 63, 8, 88, -1, + 43, 85, 99, -1, 43, 99, 100, -1, + 0, 26, 4, -1, 16, 3, 18, -1, + 17, 3, 16, -1, 94, 26, 24, -1, + 10, 6, 105, -1, 48, 41, 43, -1, + 48, 43, 100, -1, 101, 48, 100, -1, + 56, 88, 35, -1, 13, 7, 8, -1, + 13, 18, 7, -1, 62, 60, 85, -1, + 62, 8, 63, -1, 62, 13, 8, -1, + 19, 60, 88, -1, 59, 88, 60, -1, + 1, 23, 24, -1, 2, 0, 4, -1, + 2, 24, 26, -1, 2, 26, 0, -1, + 5, 23, 1, -1, 5, 1, 24, -1, + 5, 2, 4, -1, 5, 24, 2, -1, + 15, 17, 16, -1, 14, 3, 17, -1, + 14, 18, 3, -1, 14, 6, 18, -1, + 14, 4, 6, -1, 14, 5, 4, -1, + 14, 23, 5, -1, 47, 80, 68, -1, + 47, 68, 28, -1, 25, 26, 94, -1, + 91, 22, 44, -1, 91, 94, 22, -1, + 29, 92, 32, -1, 42, 20, 32, -1, + 42, 92, 91, -1, 74, 10, 105, -1, + 11, 18, 6, -1, 11, 6, 10, -1, + 11, 7, 18, -1, 11, 88, 8, -1, + 11, 8, 7, -1, 9, 60, 55, -1, + 9, 33, 60, -1, 9, 55, 111, -1, + 9, 111, 67, -1, 9, 67, 33, -1, + 52, 99, 85, -1, 82, 33, 83, -1, + 82, 85, 60, -1, 82, 60, 33, -1, + 37, 38, 34, -1, 37, 74, 115, -1, + 37, 10, 74, -1, 37, 11, 10, -1, + 37, 34, 35, -1, 37, 35, 88, -1, + 37, 88, 11, -1, 36, 35, 34, -1, + 49, 41, 48, -1, 49, 20, 42, -1, + 97, 85, 39, -1, 97, 52, 85, -1, + 12, 80, 48, -1, 12, 101, 80, -1, + 12, 48, 101, -1, 54, 35, 55, -1, + 54, 56, 35, -1, 45, 44, 23, -1, + 45, 13, 62, -1, 45, 23, 14, -1, + 45, 15, 16, -1, 45, 17, 15, -1, + 45, 14, 17, -1, 45, 16, 18, -1, + 45, 18, 13, -1, 87, 60, 62, -1, + 87, 88, 61, -1, 57, 55, 60, -1, + 57, 60, 19, -1, 57, 88, 56, -1, + 57, 19, 88, -1, 50, 32, 20, -1, + 50, 20, 49, -1, 21, 44, 22, -1, + 21, 23, 44, -1, 21, 24, 23, -1, + 21, 94, 24, -1, 21, 22, 94, -1, + 64, 29, 68, -1, 64, 92, 29, -1, + 64, 25, 94, -1, 64, 68, 26, -1, + 64, 26, 25, -1, 30, 29, 32, -1, + 30, 32, 50, -1, 30, 47, 28, -1, + 30, 50, 47, -1, 27, 28, 68, -1, + 27, 68, 29, -1, 27, 30, 28, -1, + 27, 29, 30, -1, 31, 32, 92, -1, + 31, 42, 32, -1, 31, 92, 42, -1, + 78, 33, 67, -1, 78, 83, 33, -1, + 71, 34, 38, -1, 71, 36, 34, -1, + 102, 55, 35, -1, 102, 35, 36, -1, + 102, 36, 71, -1, 102, 111, 55, -1, + 69, 115, 70, -1, 69, 37, 115, -1, + 69, 38, 37, -1, 69, 71, 38, -1, + 76, 72, 80, -1, 76, 80, 77, -1, + 76, 65, 72, -1, 96, 77, 80, -1, + 96, 39, 77, -1, 96, 97, 39, -1, + 84, 39, 85, -1, 84, 77, 39, -1, + 40, 41, 49, -1, 40, 49, 42, -1, + 40, 43, 41, -1, 40, 85, 43, -1, + 40, 91, 44, -1, 40, 42, 91, -1, + 40, 44, 45, -1, 40, 62, 85, -1, + 40, 45, 62, -1, 46, 80, 47, -1, + 46, 48, 80, -1, 46, 49, 48, -1, + 46, 47, 50, -1, 46, 50, 49, -1, + 51, 99, 52, -1, 51, 97, 99, -1, + 51, 52, 97, -1, 53, 54, 55, -1, + 53, 56, 54, -1, 53, 55, 57, -1, + 53, 57, 56, -1, 58, 59, 60, -1, + 58, 60, 87, -1, 58, 87, 61, -1, + 58, 61, 88, -1, 58, 88, 59, -1, + 89, 87, 62, -1, 89, 63, 88, -1, + 89, 62, 63, -1, 93, 92, 64, -1, + 93, 64, 94, -1, 66, 78, 67, -1, + 66, 65, 76, -1, 66, 76, 78, -1, + 112, 71, 72, -1, 112, 72, 65, -1, + 112, 102, 71, -1, 112, 65, 66, -1, + 112, 67, 111, -1, 112, 66, 67, -1, + 114, 105, 68, -1, 114, 69, 70, -1, + 114, 71, 69, -1, 114, 70, 115, -1, + 114, 68, 80, -1, 114, 80, 72, -1, + 114, 72, 71, -1, 73, 105, 104, -1, + 73, 104, 115, -1, 73, 74, 105, -1, + 73, 115, 74, -1, 75, 76, 77, -1, + 75, 77, 84, -1, 75, 78, 76, -1, + 75, 84, 83, -1, 75, 83, 78, -1, + 79, 80, 101, -1, 79, 96, 80, -1, + 79, 101, 96, -1, 98, 96, 101, -1, + 81, 82, 83, -1, 81, 83, 84, -1, + 81, 85, 82, -1, 81, 84, 85, -1, + 86, 88, 87, -1, 86, 89, 88, -1, + 86, 87, 89, -1, 90, 91, 92, -1, + 90, 92, 93, -1, 90, 94, 91, -1, + 90, 93, 94, -1, 109, 102, 112, -1, + 106, 105, 114, -1, 95, 97, 96, -1, + 95, 96, 98, -1, 95, 99, 97, -1, + 95, 100, 99, -1, 95, 101, 100, -1, + 95, 98, 101, -1, 108, 111, 102, -1, + 108, 102, 109, -1, 110, 109, 112, -1, + 103, 104, 105, -1, 103, 105, 106, -1, + 103, 115, 104, -1, 103, 106, 115, -1, + 116, 115, 106, -1, 116, 106, 114, -1, + 107, 108, 109, -1, 107, 109, 110, -1, + 107, 111, 108, -1, 107, 112, 111, -1, + 107, 110, 112, -1, 113, 114, 115, -1, + 113, 115, 116, -1, 113, 116, 114, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/link6.wrl b/examples/rlsg/staeubli-tx60l.convex/link6.wrl new file mode 100644 index 00000000..d5275ff3 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/link6.wrl @@ -0,0 +1,161 @@ +#VRML V2.0 utf8 + + +DEF link6 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.0076540001 0.018479001 -0.00606, + 0.0039269999 0.001626 -0.0165579, + 0.0042099999 0.010163 -0.0165579, + 0.018478001 0.0076549998 4.3988195e-05, + 0.018478001 0.0076549998 -0.0030080101, + 0.014142 0.014142 -0.00606, + -0.014142 0.014142 -0.00606, + -0.0077780001 -0.0077789999 -0.0165579, + -0.011 3.405347e-12 -0.0165579, + 0.02 -4.6133765e-12 -0.00606, + 0.02 -8.4698015e-13 -0.0030080101, + 0.0076540001 -0.018478001 4.3988199e-05, + -0.001768 -0.017518001 4.3988202e-05, + -0.0076540001 -0.018478001 -0.0030080101, + 6.4865843e-12 -0.02 4.3988191e-05, + 2.2828607e-12 -0.02 -0.0030080101, + -0.0076540001 -0.018478001 4.3988191e-05, + -0.0076540001 -0.018478001 -0.00606, + -0.0042099999 0.010163 -0.0165579, + 4.5568831e-12 0.020001 -0.00606, + -6.2007452e-12 0.011 -0.0165579, + -0.0076540001 0.018479001 -0.00606, + -0.0077780001 0.0077789999 -0.0165579, + -0.010162 0.0042099999 -0.0165579, + 9.420398e-15 -0.011 -0.0165579, + -0.010162 -0.0042090002 -0.0165579, + -0.0042099999 -0.010163 -0.0165579, + 4.6039925e-12 -0.02 -0.00606, + 0.010162 0.0042099999 -0.0165579, + 0.018478001 0.0076549998 -0.00606, + 0.0077780001 0.0077789999 -0.0165579, + 0.011 -5.4361199e-12 -0.0165579, + 0.018478001 -0.0076540001 4.3988191e-05, + 0.02 2.4618204e-13 4.3988191e-05, + 0.018478001 -0.0076540001 -0.0030080101, + 0.0077780001 -0.0077789999 -0.0165579, + 0.0076540001 -0.018478001 -0.00606, + 0.0042099999 -0.010163 -0.0165579, + 0.014142 -0.014142 -0.00606, + 0.010162 -0.0042090002 -0.0165579, + 0.018478001 -0.0076540001 -0.00606, + 0.013046 -0.011928 4.3988202e-05, + 0.014142 -0.014142 4.3988202e-05, + -0.018478001 -0.0076540001 4.3988195e-05, + -0.013204 -0.011137 4.3988202e-05, + -0.014142 -0.014142 4.3988199e-05, + -0.014142 -0.014142 -0.0030080101, + -0.018478001 -0.0076540001 -0.00606, + -0.014142 -0.014142 -0.00606, + 0.013204 0.011137 4.3988206e-05, + 4.2090619e-12 0.020001 4.3988202e-05, + -0.0076540001 0.018479001 4.3988195e-05, + 0.010345 0.013047 4.3988206e-05, + 0.0076540001 0.018479001 4.3988195e-05, + -1.4455971e-12 0.020001 -0.0030080101, + 0.014142 0.014142 4.3988202e-05, + -0.0076540001 0.018479001 -0.0030080101, + -0.011137 0.0090699997 4.3988206e-05, + 0.011137 -0.0090699997 4.3988206e-05, + 0.013046 0.010346 4.3988206e-05, + 0.001768 -0.017518001 4.3988206e-05, + -0.018478001 0.0076549998 4.3988195e-05, + -0.013046 0.010346 4.3988206e-05, + -0.014142 0.014142 4.3988195e-05, + -0.02 -2.7042088e-12 4.3988191e-05, + -0.02 -5.7071817e-13 -0.0030080101, + -0.014142 0.014142 -0.0030080101, + -0.018478001 0.0076549998 -0.00606, + -0.02 -4.2513206e-12 -0.00606 ] + + } + coordIndex [ 66, 6, 67, -1, 17, 27, 15, -1, + 56, 6, 66, -1, 63, 56, 66, -1, + 36, 27, 37, -1, 36, 15, 27, -1, + 22, 23, 67, -1, 22, 67, 6, -1, + 1, 37, 23, -1, 9, 29, 10, -1, + 2, 0, 30, -1, 2, 23, 20, -1, + 2, 1, 23, -1, 5, 29, 30, -1, + 5, 30, 0, -1, 5, 4, 29, -1, + 33, 59, 42, -1, 48, 47, 7, -1, + 48, 7, 17, -1, 19, 54, 0, -1, + 19, 2, 20, -1, 19, 0, 2, -1, + 53, 0, 54, -1, 53, 55, 5, -1, + 53, 5, 0, -1, 25, 23, 37, -1, + 25, 7, 47, -1, 39, 37, 1, -1, + 39, 2, 30, -1, 39, 1, 2, -1, + 49, 59, 33, -1, 3, 10, 29, -1, + 3, 33, 10, -1, 3, 29, 4, -1, + 3, 5, 55, -1, 3, 4, 5, -1, + 3, 55, 49, -1, 3, 49, 33, -1, + 21, 22, 6, -1, 21, 6, 56, -1, + 21, 56, 54, -1, 21, 54, 19, -1, + 65, 68, 64, -1, 51, 56, 63, -1, + 26, 7, 25, -1, 26, 17, 7, -1, + 26, 27, 17, -1, 8, 23, 25, -1, + 8, 68, 67, -1, 8, 67, 23, -1, + 8, 47, 68, -1, 8, 25, 47, -1, + 31, 29, 9, -1, 31, 39, 30, -1, + 31, 9, 40, -1, 31, 40, 39, -1, + 34, 9, 10, -1, 34, 40, 9, -1, + 34, 10, 33, -1, 38, 40, 34, -1, + 38, 34, 42, -1, 11, 42, 60, -1, + 11, 60, 14, -1, 11, 38, 42, -1, + 11, 36, 38, -1, 11, 15, 36, -1, + 11, 14, 15, -1, 46, 16, 45, -1, + 12, 14, 60, -1, 12, 16, 14, -1, + 12, 45, 16, -1, 12, 44, 45, -1, + 12, 60, 44, -1, 13, 15, 14, -1, + 13, 14, 16, -1, 13, 17, 15, -1, + 13, 16, 46, -1, 13, 48, 17, -1, + 13, 46, 48, -1, 62, 44, 60, -1, + 18, 19, 20, -1, 18, 21, 19, -1, + 18, 22, 21, -1, 18, 20, 23, -1, + 18, 23, 22, -1, 24, 25, 37, -1, + 24, 26, 25, -1, 24, 37, 27, -1, + 24, 27, 26, -1, 28, 30, 29, -1, + 28, 31, 30, -1, 28, 29, 31, -1, + 32, 33, 42, -1, 32, 42, 34, -1, + 32, 34, 33, -1, 35, 36, 37, -1, + 35, 38, 36, -1, 35, 37, 39, -1, + 35, 39, 40, -1, 35, 40, 38, -1, + 41, 42, 59, -1, 41, 59, 58, -1, + 41, 60, 42, -1, 41, 58, 60, -1, + 43, 45, 44, -1, 43, 62, 64, -1, + 43, 44, 62, -1, 43, 46, 45, -1, + 43, 64, 68, -1, 43, 68, 47, -1, + 43, 47, 48, -1, 43, 48, 46, -1, + 52, 59, 49, -1, 52, 62, 59, -1, + 52, 49, 55, -1, 50, 51, 63, -1, + 50, 63, 62, -1, 50, 62, 52, -1, + 50, 53, 54, -1, 50, 55, 53, -1, + 50, 52, 55, -1, 50, 54, 56, -1, + 50, 56, 51, -1, 57, 58, 59, -1, + 57, 59, 62, -1, 57, 60, 58, -1, + 57, 62, 60, -1, 61, 62, 63, -1, + 61, 64, 62, -1, 61, 65, 64, -1, + 61, 66, 67, -1, 61, 63, 66, -1, + 61, 67, 68, -1, 61, 68, 65, -1 ] + + } + + } + +} diff --git a/examples/rlsg/staeubli-tx60l.convex/staeubli-tx60l.wrl b/examples/rlsg/staeubli-tx60l.convex/staeubli-tx60l.wrl new file mode 100644 index 00000000..15f80a6e --- /dev/null +++ b/examples/rlsg/staeubli-tx60l.convex/staeubli-tx60l.wrl @@ -0,0 +1,63 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF link0 Transform { + children [ + Inline { + url "link0.wrl" + } + ] + } + DEF link1 Transform { + rotation 1 0 0 -1.570796 + translation 0 0 0.375 + children [ + Inline { + url "link1.wrl" + } + ] + } + DEF link2 Transform { + rotation 0.577350 0.577350 0.577350 -2.094395 + translation 0 0 0.775 + children [ + Inline { + url "link2.wrl" + } + ] + } + DEF link3 Transform { + rotation 0 0 1 3.141593 + translation 0 0.02 0.775 + children [ + Inline { + url "link3.wrl" + } + ] + } + DEF link4 Transform { + rotation 0 0.70710677 0.70710677 3.1415927 + translation 0 0.02 1.225 + children [ + Inline { + url "link4.wrl" + } + ] + } + DEF link5 Transform { + translation 0 0.02 1.225 + children [ + Inline { + url "link5.wrl" + } + ] + } + DEF link6 Transform { + translation 0 0.02 1.295 + children [ + Inline { + url "link6.wrl" + } + ] + } ] +} diff --git a/examples/rlsg/staeubli-tx60l/link0.wrl b/examples/rlsg/staeubli-tx60l/link0.wrl new file mode 100644 index 00000000..bb3c3411 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link0.wrl @@ -0,0 +1,3328 @@ +#VRML V2.0 utf8 + +DEF link0a Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 0.666667 0.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 1466 + 0 -0.087029 0.186493, 0 -0.089417 0.095253, 0 -0.091805 0.004, -0.000293 -0.091805 0.004, -0.000585 -0.091805 0.004, + -0.000685 -0.091187 0.0275, -0.000785 -0.090569 0.051003, -0.000805 -0.090446 0.055759, -0.000825 -0.090324 0.06052, + -0.016951 -0.088722 0.06052, -0.032528 -0.084267 0.06052, -0.047062 -0.077095 0.06052, -0.060081 -0.067451 0.06052, + -0.05938 -0.066437 0.107101, -0.058678 -0.06543 0.153687, -0.058834 -0.065239 0.155197, -0.059357 -0.064705 0.156616, + -0.060196 -0.063889 0.15773, -0.061356 -0.062752 0.158463, -0.06974 -0.05315 0.161407, -0.076736 -0.042294 0.163864, + -0.083015 -0.027843 0.166077, -0.086655 -0.012335 0.167343, -0.087448 0.003657 0.167633, -0.085342 0.019505 0.166885, + -0.082161 0.030293 0.165771, -0.077682 0.040504 0.1642, -0.072021 0.049976 0.162201, -0.065308 0.058575 0.159851, + -0.061356 0.062752 0.158463, -0.060196 0.063889 0.15773, -0.059357 0.064705 0.156616, -0.058834 0.065239 0.155197, + -0.058678 0.06543 0.153687, -0.059376 0.066429 0.107384, -0.06007 0.067436 0.061081, -0.047054 0.077087 0.061081, + -0.032528 0.084251 0.061081, -0.016949 0.088707 0.061081, -0.000827 0.090309 0.061081, -0.000806 0.090439 0.056042, + -0.000785 0.090569 0.051003, -0.000685 0.091187 0.0275, -0.000585 0.091805 0.004, -0.000293 0.091805 0.004, 0 0.091805 0.004, + 0 0.089417 0.095253, 0 0.087029 0.186493, -0.016977 0.085358 0.186493, -0.033302 0.080406 0.186493, + -0.048351 0.072357 0.186493, -0.061539 0.061539 0.186493, -0.072357 0.048351 0.186493, -0.080406 0.033302 0.186493, + -0.085358 0.016977 0.186493, -0.087029 0 0.186493, -0.085358 -0.016977 0.186493, -0.080406 -0.033302 0.186493, + -0.072357 -0.048351 0.186493, -0.061539 -0.061539 0.186493, -0.048351 -0.072357 0.186493, -0.033302 -0.080406 0.186493, + -0.016977 -0.085358 0.186493, 0.013139 0.090858 0.004, 0.026007 0.088043 0.004, 0.038342 0.08342 0.004, + 0.049885 0.077072 0.004, 0.060402 0.069138 0.004, 0.069672 0.059784 0.004, 0.077515 0.049194 0.004, 0.083755 0.037598 0.004, + 0.083328 0.037193 0.025108, 0.082909 0.036789 0.046215, 0.082733 0.036625 0.054611, 0.082565 0.036465 0.063011, + 0.088318 0.018635 0.063011, 0.090263 0 0.063011, 0.090263 -1e-006 0.063011, 0.088318 -0.018635 0.063011, + 0.085907 -0.0277 0.063011, 0.082565 -0.036465 0.063011, 0.082733 -0.036625 0.054611, 0.082909 -0.036789 0.046215, + 0.083328 -0.037193 0.025108, 0.083755 -0.037598 0.004, 0.077515 -0.049194 0.004, 0.069672 -0.059784 0.004, + 0.060402 -0.069138 0.004, 0.049885 -0.077072 0.004, 0.038342 -0.08342 0.004, 0.026007 -0.088043 0.004, + 0.013139 -0.090858 0.004, 0.016977 -0.085358 0.186493, 0.033302 -0.080406 0.186493, 0.048351 -0.072357 0.186493, + 0.061539 -0.061539 0.186493, 0.072357 -0.048351 0.186493, 0.080406 -0.033302 0.186493, 0.085358 -0.016977 0.186493, + 0.087029 0 0.186493, 0.085358 0.016977 0.186493, 0.080406 0.033302 0.186493, 0.072357 0.048351 0.186493, + 0.061539 0.061539 0.186493, 0.048351 0.072357 0.186493, 0.033302 0.080406 0.186493, 0.016977 0.085358 0.186493, + -0.022263 0.097946 0, -0.05349 0.113853 0, -0.053829 0.11319 0.028589, -0.038765 0.105286 0.036297, + -0.023455 0.097275 0.043442, -0.021318 0.096161 0.044472, -0.019251 0.09507 0.045658, -0.019121 0.095619 0.02483, + -0.018991 0.096161 0.004, -0.019529 0.096436 0.004, -0.020601 0.096985 0.003772, -0.0215 0.097466 0.003121, + -0.022091 0.097794 0.002148, -0.022282 0.097923 0.001, -0.053658 0.113525 0.014295, -0.054688 0.11351 0.0285, + -0.055595 0.113617 0.028431, -0.057362 0.113197 0.028376, -0.057529 0.113533 0.014187, -0.057697 0.113861 0, + -0.055592 0.114365 0, -0.054512 0.114235 0, -0.06361 0.10981 0.028376, -0.069656 0.106071 0.028376, + -0.081085 0.097618 0.028376, -0.081299 0.097931 0.014188, -0.081505 0.098236 0, -0.07589 0.102631 0, -0.070038 0.106712 0, + -0.065117 0.074974 0.045963, -0.072624 0.085724 0.038429, -0.080124 0.096466 0.030893, -0.068832 0.10482 0.030893, + -0.062859 0.108513 0.030893, -0.056686 0.111862 0.030893, -0.056641 0.111885 0.030895, -0.056293 0.111961 0.030945, + -0.055862 0.111862 0.031109, -0.040676 0.104012 0.038815, -0.025198 0.096054 0.045963, -0.034882 0.092979 0.045963, + -0.044197 0.088928 0.045963, -0.053055 0.083946 0.045963, -0.061352 0.078087 0.045963, -0.050999 0.095001 0.041042, + -0.051773 0.098648 0.038975, -0.053959 0.101669 0.036842, -0.056244 0.10318 0.03545, -0.058975 0.103943 0.034298, + -0.063004 0.103485 0.033348, -0.065552 0.102081 0.033253, -0.067612 0.099808 0.033695, -0.068657 0.09745 0.03447, + -0.069 0.095001 0.035507, -0.068253 0.091408 0.037434, -0.066795 0.089096 0.039009, -0.064697 0.087326 0.04055, + -0.061169 0.086075 0.042328, -0.057415 0.08638 0.043411, -0.054623 0.087784 0.043602, -0.052475 0.090065 0.043118, + -0.051376 0.09243 0.042244, -0.05349 -0.113853 0, -0.022263 -0.097946 0, -0.022282 -0.097923 0.001, + -0.022091 -0.097794 0.002148, -0.0215 -0.097466 0.003121, -0.020601 -0.096985 0.003772, -0.019529 -0.096436 0.004, + -0.018991 -0.096161 0.004, -0.019121 -0.095619 0.024776, -0.019249 -0.09507 0.045551, -0.021008 -0.095993 0.044579, + -0.022814 -0.096939 0.043724, -0.03643 -0.104065 0.037437, -0.050961 -0.111687 0.030098, -0.053829 -0.11319 0.028589, + -0.057697 -0.113861 0, -0.057529 -0.113533 0.014187, -0.057362 -0.113197 0.028376, -0.056503 -0.11351 0.028389, + -0.055595 -0.113617 0.028431, -0.053658 -0.113525 0.014295, -0.055592 -0.114365 0, -0.056675 -0.114235 0, + -0.081505 -0.098236 0, -0.081299 -0.097931 0.014188, -0.081085 -0.097618 0.028376, -0.075485 -0.102005 0.028376, + -0.069656 -0.106071 0.028376, -0.063969 -0.110458 0, -0.070038 -0.106712 0, -0.024549 -0.095726 0.046242, + -0.038315 -0.102798 0.039959, -0.052971 -0.110367 0.032619, -0.055862 -0.111862 0.031109, -0.056179 -0.111954 0.030977, + -0.056396 -0.111954 0.030924, -0.056686 -0.111862 0.030893, -0.068832 -0.10482 0.030893, -0.0746 -0.1008 0.030893, + -0.080124 -0.096466 0.030893, -0.072479 -0.085526 0.03857, -0.064835 -0.074577 0.046242, -0.061054 -0.077705 0.046242, + -0.052681 -0.083611 0.046242, -0.043739 -0.088615 0.046242, -0.034328 -0.092667 0.046242, -0.050999 -0.095001 0.041042, + -0.051525 -0.091972 0.042431, -0.052437 -0.090126 0.043098, -0.053711 -0.088562 0.043495, -0.056587 -0.08667 0.043533, + -0.05872 -0.08609 0.043129, -0.060928 -0.086044 0.042423, -0.064514 -0.087212 0.040665, -0.067375 -0.089844 0.03846, + -0.068573 -0.09227 0.036922, -0.069 -0.095001 0.035507, -0.06839 -0.098251 0.03418, -0.06749 -0.099998 0.033646, + -0.066299 -0.101425 0.033337, -0.064346 -0.102882 0.033237, -0.060493 -0.103989 0.03384, -0.057747 -0.103714 0.03476, + -0.055309 -0.102684 0.035961, -0.052086 -0.099281 0.038567, -0.056 0.054001 0.148499, -0.056 0.053432 0.150818, + -0.056 0.052757 0.151794, -0.056 0.051861 0.152603, -0.056 0.05637 0.152603, -0.056 0.05637 0.004, -0.056 0.054001 0.004, + -0.056 -0.054001 0, -0.056 -0.05637 0, -0.056 -0.05637 0.152603, -0.056 -0.051861 0.152603, -0.056 -0.053432 0.150818, + -0.056 -0.053856 0.149689, -0.056 -0.054001 0.148499, -0.082047 0.0942 0, -0.081833 0.093895 0.014148, + -0.081627 0.093597 0.028296, -0.074104 0.082863 0.035831, -0.066589 0.072121 0.043365, -0.06414 0.068626 0.046597, + -0.062237 0.06591 0.050804, -0.061008 0.064156 0.05571, -0.060535 0.063477 0.061001, -0.059834 0.062477 0.107307, + -0.059135 0.061474 0.15361, -0.056362 0.057518 0.152603, -0.056362 0.057518 0.004, -0.056999 0.05843 0.004, + -0.057266 0.058807 0.003988, -0.057529 0.059185 0.003953, -0.058098 0.059998 0.003595, -0.058563 0.060658 0.002925, + -0.058865 0.061089 0.002024, -0.058968 0.061241 0.001, -0.058968 0.061241 0, -0.056362 -0.057518 0, -0.082047 -0.0942 0, + -0.081833 -0.093895 0.014148, -0.081627 -0.093597 0.028296, -0.073967 -0.082657 0.035973, -0.066307 -0.071724 0.043644, + -0.063976 -0.06839 0.046722, -0.062164 -0.065804 0.050728, -0.060993 -0.064133 0.055401, -0.060543 -0.063488 0.06044, + -0.059837 -0.062481 0.107025, -0.059135 -0.061474 0.15361, -0.056362 -0.057518 0.152603, -0.060284 -0.060608 0.155563, + -0.057316 -0.05637 0.15448, -0.057316 0.05637 0.15448, -0.060284 0.060608 0.155563, -0.064095 0.056572 0.156952, + -0.070618 0.048218 0.159317, -0.076088 0.039047 0.161316, -0.080399 0.029202 0.162872, -0.083443 0.018837 0.163986, + -0.085472 0.003556 0.164734, -0.084717 -0.011856 0.164459, -0.081223 -0.026833 0.163177, -0.075134 -0.040844 0.160965, + -0.068398 -0.051311 0.158508, -0.057747 -0.059494 0.153107, -0.05637 -0.05735 0.153214, -0.056549 -0.057087 0.153778, + -0.056873 -0.056747 0.154205, -0.0588 -0.058487 0.155014, -0.059898 -0.061069 0.155304, -0.059551 -0.061378 0.154861, + -0.059284 -0.061516 0.154282, -0.0588 0.058487 0.155014, -0.056873 0.056747 0.154205, -0.056549 0.057087 0.153778, + -0.05637 0.05735 0.153214, -0.057747 0.059494 0.153107, -0.059284 0.061516 0.154282, -0.059551 0.061378 0.154861, + -0.059898 0.061069 0.155304, -0.056 -0.05637 0.076302, -0.056023 -0.056675 0.152603, -0.056091 -0.056973 0.152603, + -0.056362 -0.057518 0.076302, -0.056206 -0.057255 0, -0.056091 -0.056973 0, -0.056362 0.057518 0.0783, + -0.056091 0.056973 0.152603, -0.056023 0.056675 0.152603, -0.056 0.05637 0.0783, -0.056023 0.056675 0.004, + -0.056091 0.056973 0.004, -0.056374 0.05735 0.153214, -0.056877 0.056747 0.154205, -0.056782 0.05637 0.15419, + -0.056362 0.05637 0.153748, -0.056091 0.05637 0.153198, -0.056877 -0.056747 0.154205, -0.056374 -0.05735 0.153214, + -0.056091 -0.05637 0.153198, -0.056362 -0.05637 0.153748, -0.056782 -0.05637 0.15419, -0.056 0.054115 0.152603, + -0.057316 0 0.15448, -0.056 -0.054115 0.152603, -0.056114 -0.050503 0.153275, -0.056187 -0.049759 0.153442, + -0.056213 -0.049 0.153503, -0.056213 0 0.153503, -0.056213 0.049 0.153503, -0.056187 0.049759 0.153442, + -0.056114 0.050503 0.153275, -0.010979 -0.091782 0.051685, -0.00535 -0.092056 0.004, -0.01005 -0.09288 0.004, + -0.010969 0.091774 0.052021, -0.01005 0.09288 0.004, -0.00535 0.092056 0.004, -0.060463 0.068024 0.056549, + -0.061485 0.069557 0.052345, -0.063068 0.07193 0.04874, -0.05611 0.081932 0.045963, -0.046371 0.087814 0.045963, + -0.036022 0.092545 0.045963, -0.023073 0.095161 0.046848, -0.021036 0.094299 0.047863, -0.012054 0.091507 0.053314, + -0.012063 -0.091507 0.053009, -0.021025 -0.094254 0.047798, -0.022755 -0.094978 0.046974, -0.035477 -0.092232 0.046242, + -0.045925 -0.087502 0.046242, -0.055756 -0.081589 0.046242, -0.062908 -0.071693 0.048866, -0.061413 -0.06945 0.052273, + -0.060452 -0.068008 0.056244, -0.016949 -0.088722 0.06052, -0.080513 -0.096939 0.030432, -0.080811 -0.097298 0.029831, + -0.057308 -0.113091 0.029129, -0.057171 -0.112823 0.029831, -0.056271 -0.111961 0.030952, -0.056484 -0.111938 0.030909, + -0.056499 -0.113518 0.028389, -0.055588 -0.113617 0.028433, -0.054253 -0.11322 0.029417, -0.054764 -0.112991 0.030159, + -0.055321 -0.112518 0.030741, -0.010904 -0.091278 0.053749, -0.015966 -0.092468 0.050606, -0.020065 -0.095009 0.046856, + -0.019625 -0.095131 0.04623, -0.014554 -0.092949 0.048859, -0.009924 -0.091507 0.052559, -0.040337 -0.103836 0.038979, + -0.038433 -0.10511 0.036461, -0.023157 -0.096954 0.044521, -0.023584 -0.096741 0.045246, -0.024061 -0.096313 0.045834, + -0.022766 -0.094978 0.04697, -0.010912 0.091286 0.054073, -0.005862 0.090569 0.057529, -0.005359 0.090637 0.056938, + -0.009929 0.091499 0.052906, -0.01963 0.095131 0.046322, -0.020075 0.095016 0.046936, -0.057171 0.112823 0.029831, + -0.057308 0.113091 0.029129, -0.081009 0.097534 0.029129, -0.080811 0.097298 0.029831, -0.023088 0.095169 0.046844, + -0.0238 0.09729 0.044243, -0.024229 0.097069 0.044968, -0.02471 0.096649 0.045555, -0.056484 0.111938 0.030909, + -0.056271 0.111961 0.030952, -0.056057 0.111931 0.031019, -0.055321 0.112518 0.030741, -0.054764 0.112991 0.030159, + -0.054253 0.11322 0.029417, -0.05468 0.11351 0.0285, -0.055588 0.113617 0.028433, -0.040657 0.104004 0.038826, + -0.03875 0.105278 0.036304, -0.082504 -0.095215 0, -0.082565 -0.096321 0, -0.082214 -0.097382 0, -0.081787 -0.096764 0.028366, + -0.082138 -0.095711 0.028349, -0.082077 -0.094604 0.028324, -0.06028 0.063808 0.157806, -0.05941 0.064659 0.156708, + -0.058853 0.065216 0.155289, -0.059341 0.064575 0.153687, -0.059654 0.063538 0.153656, -0.059586 0.062458 0.153641, + -0.059288 0.061516 0.154282, -0.059555 0.061378 0.154877, -0.059902 0.061066 0.155319, -0.060863 0.061337 0.155945, + -0.06126 0.061985 0.156616, -0.061432 0.062473 0.157486, -0.068741 -0.054451 0.161057, -0.075073 -0.045212 0.163284, + -0.079742 -0.036243 0.164917, -0.083374 -0.026747 0.166199, -0.085899 -0.016851 0.167084, -0.087265 -0.006705 0.167557, + -0.087448 0.003543 0.167633, -0.086449 0.013738 0.167267, -0.084274 0.023726 0.166504, -0.080978 0.03336 0.165359, + -0.072594 0.049133 0.162415, -0.071136 0.047451 0.159515, -0.079231 0.032219 0.16246, -0.082413 0.022913 0.16362, + -0.084511 0.013268 0.164383, -0.08548 0.003422 0.164734, -0.085304 -0.006475 0.164658, -0.083984 -0.016275 0.164185, + -0.081543 -0.025829 0.1633, -0.078041 -0.035004 0.162018, -0.073532 -0.043667 0.160385, -0.067421 -0.052586 0.158157, + -0.060863 -0.061337 0.155945, -0.06126 -0.061985 0.156616, -0.061432 -0.062473 0.157486, -0.058853 -0.065216 0.155289, + -0.05941 -0.064659 0.156708, -0.06028 -0.063808 0.157806, -0.059902 -0.061066 0.155319, -0.059555 -0.061378 0.154877, + -0.059288 -0.061516 0.154282, -0.059586 -0.062458 0.153641, -0.059654 -0.063538 0.153656, -0.059341 -0.064575 0.153687, + -0.060993 -0.064476 0.060471, -0.061066 -0.065559 0.060493, -0.060745 -0.066589 0.060513, -0.060738 0.066582 0.061069, + -0.061058 0.065544 0.061054, -0.060986 0.064461 0.061028, -0.065659 -0.073837 0.046005, -0.066223 -0.073036 0.045433, + -0.066452 -0.072304 0.044609, -0.081764 -0.094177 0.029266, -0.081535 -0.094925 0.030096, -0.080956 -0.095726 0.030666, + -0.062908 -0.071701 0.048859, -0.061417 -0.069458 0.052261, -0.060452 -0.068008 0.056236, -0.062168 -0.065804 0.050728, + -0.063976 -0.068398 0.046722, -0.066452 -0.072296 0.044609, -0.060467 0.068031 0.056541, -0.061489 0.069565 0.052338, + -0.063072 0.07193 0.048733, -0.065941 0.074234 0.045727, -0.066505 0.073441 0.045155, -0.066734 0.072701 0.044327, + -0.062241 0.06591 0.0508, -0.082214 0.097382 0, -0.082565 0.096321 0, -0.082504 0.095215 0, -0.082077 0.094604 0.028324, + -0.082138 0.095711 0.028349, -0.081787 0.096764 0.028366, -0.081764 0.094177 0.029266, -0.081535 0.094925 0.030096, + -0.080956 0.095726 0.030666, -0.072617 0.085724 0.038429, 0.095001 -0.028723 0, 0.114677 -0.021168 0, + 0.11441 -0.02046 0.028973, 0.108437 -0.022661 0.032158, 0.102448 -0.024872 0.035294, 0.096497 -0.027052 0.039097, + 0.093781 -0.02803 0.041412, 0.091278 -0.028915 0.043995, 0.091286 -0.028923 0.04364, 0.091293 -0.028931 0.043289, + 0.091675 -0.029335 0.023643, 0.092064 -0.029737 0.003999, 0.093193 -0.029312 0.003754, 0.094139 -0.028965 0.0031, + 0.09478 -0.028748 0.002134, 0.095001 -0.028694 0.001, 0.114548 -0.020813 0.014486, 0.115402 -0.01992 0.02882, + 0.116219 -0.019136 0.028702, 0.116798 -0.018164 0.028627, 0.117104 -0.017071 0.028605, 0.11747 -0.01712 0.014302, + 0.117844 -0.01717 0, 0.117493 -0.018456 0, 0.116806 -0.019602 0, 0.115852 -0.020529 0, 0.117264 -0.015799 0.028612, + 0.118248 0 0.028656, 0.117264 0.015799 0.028612, 0.117104 0.017071 0.028605, 0.11747 0.01712 0.014302, 0.117844 0.01717 0, + 0.118713 0.008605 0, 0.119003 0 0, 0.116798 0.018164 0.028627, 0.116219 0.019136 0.028702, 0.115402 0.01992 0.02882, + 0.11441 0.02046 0.028973, 0.114548 0.020813 0.014486, 0.114677 0.021168 0, 0.115852 0.020529 0, 0.116806 0.019602 0, + 0.117493 0.018456 0, 0.108437 0.022661 0.032158, 0.102448 0.024872 0.035294, 0.099396 0.025995 0.037056, + 0.096497 0.027052 0.039097, 0.091278 0.028915 0.043995, 0.091286 0.028923 0.04364, 0.091293 0.028931 0.043289, + 0.091675 0.029335 0.023643, 0.092064 0.029737 0.003999, 0.093193 0.029312 0.003754, 0.094139 0.028965 0.0031, + 0.09478 0.028748 0.002134, 0.095001 0.028694 0.001, 0.095001 0.028723 0, 0.104866 0.008999 0.037815, + 0.104073 0.015728 0.037815, 0.102844 0.022392 0.037815, 0.108856 0.02013 0.034668, 0.114815 0.017891 0.031492, + 0.115318 0.017544 0.031239, 0.115494 0.017269 0.031158, 0.115616 0.016884 0.031124, 0.116463 0.00846 0.031162, + 0.116753 0 0.031176, 0.115372 0 0.031969, 0.113998 0 0.032764, 0.113106 0.003904 0.033237, 0.111557 0.006164 0.034077, + 0.109123 0.008 0.035412, 0.116463 -0.00846 0.031162, 0.115616 -0.016884 0.031124, 0.115532 -0.017187 0.031143, + 0.115402 -0.017426 0.031197, 0.11512 -0.017727 0.031336, 0.114815 -0.017891 0.031492, 0.108856 -0.02013 0.034668, + 0.102844 -0.022392 0.037815, 0.104073 -0.015728 0.037815, 0.104866 -0.008999 0.037815, 0.109123 -0.008 0.035412, + 0.111557 -0.006164 0.034077, 0.113106 -0.003904 0.033237, 0.092003 0.029762 0.004, 0.092033 0.029751 0.004, + 0.086052 0.031952 0.05299, 0.085197 0.035069 0.004, 0.087105 0.032867 0.004, 0.082817 -0.035988 0.062035, + 0.083366 -0.035061 0.060097, 0.08416 -0.033955 0.057693, 0.086052 -0.031954 0.052994, 0.092033 -0.029751 0.004, + 0.092003 -0.029762 0.004, 0.087105 -0.032867 0.004, 0.085197 -0.035069 0.004, 0.096001 0 0.046135, + 0.096191 -0.001841 0.045853, 0.096718 -0.003524 0.045105, 0.098679 -0.006404 0.042736, 0.101433 -0.008262 0.040165, + 0.097305 -0.024755 0.041298, 0.094795 -0.025818 0.0434, 0.092506 -0.026781 0.045723, 0.086876 -0.03051 0.053482, + 0.082718 -0.036163 0.062565, 0.090256 0.001102 0.063011, 0.088203 0.019173 0.063011, 0.08651 0.030874 0.054127, + 0.089241 0.028578 0.049824, 0.092506 0.026781 0.045723, 0.097305 0.024755 0.041298, 0.099998 0.023609 0.039433, + 0.102058 0.008505 0.039677, 0.099663 0.007247 0.041729, 0.097084 0.004286 0.044617, 0.096077 0.001173 0.046021, + 0.087242 -0.03017 0.052872, 0.083527 -0.034698 0.06036, 0.086586 -0.031506 0.051865, 0.091774 -0.028603 0.044521, + 0.092155 -0.028118 0.045006, 0.092407 -0.027498 0.045414, 0.086487 0.030897 0.054165, 0.089211 0.028595 0.049862, + 0.092407 0.027498 0.045414, 0.092155 0.028118 0.045006, 0.091774 0.028603 0.044521, 0.088333 0.030291 0.04855, + 0.085922 0.03207 0.053284, 0.096283 0.02519 0.042107, 0.102974 0.02326 0.03746, 0.102951 0.02401 0.036877, + 0.102768 0.024565 0.036133, 0.095352 0.027466 0.040016, 0.108841 0.020134 0.034676, 0.11496 0.018784 0.031151, + 0.114937 0.01956 0.030573, 0.114746 0.02014 0.029821, 0.115105 0.017735 0.03134, 0.115349 0.017504 0.031221, + 0.115524 0.017214 0.031149, 0.116684 0.017023 0.03006, 0.116982 0.017059 0.02936, 0.116798 0.018171 0.028629, + 0.116211 0.019146 0.028704, 0.115395 0.019926 0.02882, 0.116463 0.008462 0.031162, 0.117828 0 0.030111, 0.118134 0 0.029409, + 0.117966 0.008554 0.028643, 0.116463 -0.008462 0.031162, 0.116684 -0.017023 0.03006, 0.116982 -0.017059 0.02936, + 0.117966 -0.008554 0.028643, 0.115524 -0.017214 0.031149, 0.115349 -0.017504 0.031221, 0.115105 -0.017735 0.03134, + 0.11496 -0.018784 0.031151, 0.114937 -0.01956 0.030573, 0.114746 -0.02014 0.029821, 0.115395 -0.019926 0.02882, + 0.116211 -0.019146 0.028702, 0.116798 -0.018171 0.028629, 0.108841 -0.020134 0.034676, 0.102974 -0.02326 0.03746, + 0.102951 -0.02401 0.036877, 0.102768 -0.024565 0.036133, 0.09594 -0.025333 0.042393, 0.094986 -0.027597 0.040329, + -0.054001 -0.039001 0.004, -0.04493 -0.039001 0.004, -0.041222 -0.039539 0.004, -0.037823 -0.041115 0.004, + -0.035015 -0.043594 0.004, -0.033028 -0.046768 0.004, -0.032013 -0.050518 0.004, -0.032154 -0.054401 0.004, + -0.033432 -0.058067 0.004, -0.035736 -0.061192 0.004, -0.041718 -0.067177 0.004, -0.042805 -0.068794 0.004, + -0.043182 -0.070709 0.004, -0.042805 -0.072624 0.004, -0.041718 -0.074249 0.004, 0.092003 -0.015 0.004, + 0.09185 -0.014235 0.004, 0.091415 -0.013586 0.004, 0.090767 -0.013152 0.004, 0.089996 -0.013 0.004, 0.087997 -0.013 0.004, + 0.083351 -0.01214 0.004, 0.079315 -0.009673 0.004, 0.076912 -0.006781 0.004, 0.075432 -0.00332 0.004, 0.075005 0.00042 0.004, + 0.075668 0.004124 0.004, 0.07753 0.007709 0.004, 0.080406 0.01055 0.004, 0.084007 0.012372 0.004, 0.087997 0.013 0.004, + 0.089996 0.013 0.004, 0.090767 0.013152 0.004, 0.091415 0.013586 0.004, 0.09185 0.014235 0.004, 0.092003 0.015 0.004, + -0.056999 0.058964 0.004, -0.054001 0.054001 0.004, -0.054001 0.013 0.004, -0.046001 0.013 0.004, -0.041351 0.01214 0.004, + -0.037315 0.009673 0.004, -0.034908 0.006781 0.004, -0.033432 0.00332 0.004, -0.033009 -0.00042 0.004, + -0.033672 -0.004124 0.004, -0.035534 -0.007709 0.004, -0.038403 -0.01055 0.004, -0.042011 -0.012372 0.004, + -0.046001 -0.013 0.004, -0.054001 -0.013 0.004, 0.095001 0.015 0, 0.095001 0.015 0.001, 0.09462 0.013086 0, + 0.093536 0.011464 0, 0.091911 0.010381 0, 0.089996 0.01 0, 0.089996 0.01 0.0005, 0.089996 0.01 0.001, 0.091911 0.010381 0.001, + 0.093536 0.011464 0.001, 0.09462 0.013086 0.001, 0.095001 0.015 0.0005, 0.087997 0.01 0.001, 0.087997 0.01 0, + 0.087997 0.01 0.0005, 0.084175 0.009239 0.001, 0.080933 0.007071 0.001, 0.078758 0.003827 0.001, 0.078003 0 0.001, + 0.078758 -0.003827 0.001, 0.080933 -0.007071 0.001, 0.084175 -0.009239 0.001, 0.087997 -0.01 0.001, 0.087997 -0.01 0.0005, + 0.087997 -0.01 0, 0.084175 -0.009239 0, 0.080933 -0.007071 0, 0.078758 -0.003827 0, 0.078003 0 0, 0.078758 0.003827 0, + 0.080933 0.007071 0, 0.084175 0.009239 0, 0.089996 -0.01 0, 0.089996 -0.01 0.001, 0.091911 -0.010381 0, 0.093536 -0.011464 0, + 0.09462 -0.013086 0, 0.095001 -0.015 0, 0.095001 -0.015 0.0005, 0.095001 -0.015 0.001, 0.09462 -0.013086 0.001, + 0.093536 -0.011464 0.001, 0.091911 -0.010381 0.001, 0.089996 -0.01 0.0005, -0.043842 -0.07637 0.001, -0.043842 -0.07637 0, + -0.045574 -0.073769 0, -0.046185 -0.070709 0, -0.045574 -0.06765 0, -0.043842 -0.065056 0, -0.043842 -0.065056 0.0005, + -0.043842 -0.065056 0.001, -0.045574 -0.06765 0.001, -0.046185 -0.070709 0.001, -0.045574 -0.073769 0.001, + -0.043842 -0.07637 0.0005, -0.037857 -0.059071 0.001, -0.037857 -0.059071 0, -0.037857 -0.059071 0.0005, + -0.03611 -0.056713 0.001, -0.035122 -0.053951 0.001, -0.034977 -0.051022 0.001, -0.03569 -0.048172 0.001, + -0.037197 -0.045654 0.001, -0.039371 -0.043686 0.001, -0.042027 -0.042431 0.001, -0.04493 -0.042 0.001, + -0.04493 -0.042 0.0005, -0.04493 -0.042 0, -0.042027 -0.042431 0, -0.039371 -0.043686 0, -0.037197 -0.045654 0, + -0.03569 -0.048172 0, -0.034977 -0.051022 0, -0.035122 -0.053951 0, -0.03611 -0.056713 0, -0.054001 -0.042 0, + -0.054001 -0.042 0.001, -0.054001 -0.01 0.0005, -0.054001 -0.01 0.001, -0.046001 -0.01 0.001, -0.046001 -0.01 0.0005, + -0.046001 -0.01 0.00075, -0.042171 -0.009239 0.001, -0.038929 -0.007071 0.001, -0.036762 -0.003827 0.001, -0.035999 0 0.001, + -0.036762 0.003827 0.001, -0.038929 0.007071 0.001, -0.042171 0.009239 0.001, -0.046001 0.01 0.001, -0.046001 0.01 0.00075, + -0.046001 0.01 0.0005, -0.042171 0.009239 0.0005, -0.038929 0.007071 0.0005, -0.036762 0.003827 0.0005, -0.035999 0 0.0005, + -0.036762 -0.003827 0.0005, -0.038929 -0.007071 0.0005, -0.042171 -0.009239 0.0005, -0.054001 0.01 0.0005, + -0.054001 0.01 0.001, -0.049465 -0.042 0.001, -0.04493 -0.041771 0.002148, -0.04493 -0.041122 0.003121, + -0.04493 -0.04015 0.003772, -0.049465 -0.039001 0.004, -0.054001 -0.04015 0.003772, -0.054001 -0.041122 0.003121, + -0.054001 -0.041771 0.002148, -0.04253 -0.06636 0.003772, -0.043221 -0.065674 0.003121, -0.043678 -0.065216 0.002148, + -0.043678 -0.076202 0.002148, -0.043221 -0.075745 0.003121, -0.04253 -0.075058 0.003772, -0.030624 -0.085342 0.004, + -0.033062 -0.087151 0.001, -0.038727 -0.064186 0.004, -0.036549 -0.060379 0.003772, -0.037235 -0.059692 0.003121, + -0.037697 -0.059231 0.002148, -0.040848 -0.062061 0.001, -0.033466 -0.058132 0.004, -0.032177 -0.054535 0.004, + -0.031992 -0.050724 0.004, -0.032917 -0.047024 0.004, -0.034878 -0.043755 0.004, -0.037704 -0.041191 0.004, + -0.041157 -0.039558 0.004, -0.037197 -0.045658 0.001, -0.034977 -0.051018 0.001, -0.03611 -0.056717 0.001, + 0.095001 -0.021847 0.001, 0.094772 -0.015 0.002148, 0.094124 -0.015 0.003121, 0.093147 -0.015 0.003772, + 0.092003 -0.022381 0.004, 0.089996 0.011852 0.003772, 0.089996 0.010879 0.003121, 0.089996 0.010228 0.002148, + 0.094772 0.015 0.002148, 0.094124 0.015 0.003121, 0.093147 0.015 0.003772, 0.092003 0.022381 0.004, 0.095001 0.021847 0.001, + 0.088997 0.013 0.004, 0.087997 0.011852 0.003772, 0.087997 0.010879 0.003121, 0.087997 0.010228 0.002148, 0.088997 0.01 0.001, + 0.08268 0.011862 0.004, 0.078293 0.008645 0.004, 0.076241 0.005542 0.004, 0.07515 0.00198 0.004, 0.075119 -0.001742 0.004, + 0.076141 -0.00532 0.004, 0.078133 -0.008462 0.004, 0.080933 -0.010912 0.004, 0.08432 -0.012467 0.004, + 0.087997 -0.011852 0.003772, 0.087997 -0.010879 0.003121, 0.087997 -0.010228 0.002148, 0.085167 -0.00959 0.001, + 0.082565 -0.008394 0.001, 0.080406 -0.006509 0.001, 0.078873 -0.004092 0.001, 0.078087 -0.00134 0.001, + 0.078117 0.001523 0.001, 0.078957 0.004263 0.001, 0.080528 0.00665 0.001, 0.083908 0.009124 0.001, + 0.089996 -0.010228 0.002148, 0.089996 -0.010879 0.003121, 0.089996 -0.011852 0.003772, 0.088997 -0.013 0.004, + 0.088997 -0.01 0.001, -0.057266 0.059074 0.003988, -0.038265 0.077698 0.004, -0.040627 0.079582 0.001, + -0.056999 0.058697 0.004, -0.049999 -0.013 0.004, -0.046001 -0.011852 0.003772, -0.046001 -0.010879 0.003121, + -0.046001 -0.010228 0.002148, -0.049999 -0.01 0.001, -0.054001 -0.010228 0.002148, -0.054001 -0.010879 0.003121, + -0.054001 -0.011852 0.003772, -0.04068 -0.011862 0.004, -0.036289 -0.008645 0.004, -0.034241 -0.005542 0.004, + -0.03315 -0.00198 0.004, -0.033119 0.001742 0.004, -0.034138 0.00532 0.004, -0.036133 0.008462 0.004, + -0.038933 0.010912 0.004, -0.04232 0.012467 0.004, -0.046001 0.011852 0.003772, -0.046001 0.010879 0.003121, + -0.046001 0.010228 0.002148, -0.043167 0.00959 0.001, -0.040565 0.008394 0.001, -0.03841 0.006509 0.001, + -0.036877 0.004092 0.001, -0.036091 0.00134 0.001, -0.036118 -0.001523 0.001, -0.036953 -0.004263 0.001, + -0.038532 -0.00665 0.001, -0.041908 -0.009124 0.001, -0.049999 0.01 0.001, -0.049999 0.013 0.004, -0.054001 0.011852 0.003772, + -0.054001 0.010879 0.003121, -0.054001 0.010228 0.002148, -0.017445 0.0877 0.095253, -0.034218 0.082611 0.095253, + -0.049679 0.074348 0.095253, -0.049679 -0.074348 0.095253, -0.034218 -0.082611 0.095253, -0.017445 -0.0877 0.095253, + 0.017445 -0.0877 0.095253, 0.034218 -0.082611 0.095253, 0.049679 -0.074348 0.095253, 0.063229 -0.063229 0.095253, + 0.074348 -0.049679 0.095253, 0.082611 -0.034218 0.095253, 0.0877 -0.017445 0.095253, 0.089417 0 0.095253, + 0.0877 0.017445 0.095253, 0.082611 0.034218 0.095253, 0.074348 0.049679 0.095253, 0.063229 0.063229 0.095253, + 0.049679 0.074348 0.095253, 0.034218 0.082611 0.095253, 0.017445 0.0877 0.095253, -0.056587 0.113869 0.014295, + -0.055595 0.113991 0.014295, -0.0546 0.113869 0.014295, -0.075706 0.10231 0.014188, -0.069862 0.106384 0.014188, + -0.063797 0.11013 0.014188, -0.0546 -0.113869 0.014295, -0.055595 -0.113991 0.014295, -0.056587 -0.113869 0.014295, + -0.063797 -0.11013 0.014188, -0.069862 -0.106384 0.014188, -0.075706 -0.10231 0.014188, -0.057884 -0.059513 0.153763, + -0.05806 -0.059246 0.154327, -0.058388 -0.058907 0.154755, -0.057884 0.059513 0.153763, -0.05806 0.059246 0.154327, + -0.058388 0.058907 0.154755, -0.056023 -0.056675 0.076302, -0.056091 -0.056973 0.076302, -0.056206 -0.057255 0.076302, + -0.056023 0.056675 0.0783, -0.056091 0.056973 0.0783, -0.056206 0.057255 0.0783, -0.056061 0.05648 0.153076, + -0.056034 0.056564 0.152924, -0.056023 0.056629 0.152771, -0.056232 0.056583 0.153503, -0.056141 0.056755 0.153229, + -0.056095 0.056885 0.152924, -0.056511 0.056675 0.1539, -0.056316 0.056931 0.153519, -0.056213 0.057129 0.153076, + -0.056023 -0.056629 0.152771, -0.056034 -0.056564 0.152924, -0.056061 -0.05648 0.153076, -0.056095 -0.056885 0.152924, + -0.056141 -0.056755 0.153229, -0.056232 -0.056583 0.153503, -0.056213 -0.057129 0.153076, -0.056316 -0.056931 0.153519, + -0.056511 -0.056675 0.1539, -0.056362 0 0.153748, -0.056782 0 0.15419, -0.005484 -0.091316 0.032238, + -0.010199 -0.092133 0.03223, -0.014782 -0.093506 0.032238, -0.005486 0.091309 0.032516, -0.0102 0.092125 0.032509, + -0.014783 0.093498 0.032516, -0.01708 0.089394 0.056553, -0.03278 0.084908 0.056553, -0.047421 0.077682 0.056553, + -0.017424 0.091187 0.052349, -0.033436 0.086609 0.052349, -0.04837 0.079239 0.052349, -0.034454 0.089241 0.04874, + -0.049843 0.08165 0.04874, -0.047409 -0.07766 0.056244, -0.032768 -0.084885 0.056244, -0.017075 -0.089371 0.056244, + -0.048306 -0.079132 0.052273, -0.033386 -0.086487 0.052273, -0.017397 -0.091064 0.052273, -0.049694 -0.081413 0.048866, + -0.034348 -0.088982 0.048866, -0.075417 -0.101913 0.029129, -0.069595 -0.10598 0.029129, -0.063553 -0.109711 0.029129, + -0.075241 -0.101669 0.029831, -0.069427 -0.105721 0.029831, -0.0634 -0.109444 0.029831, -0.074959 -0.101295 0.030432, + -0.069168 -0.105331 0.030432, -0.063164 -0.109039 0.030432, -0.056572 -0.113373 0.029148, -0.055794 -0.113487 0.029205, + -0.055008 -0.113434 0.029295, -0.056595 -0.113045 0.029852, -0.055984 -0.113152 0.029915, -0.055367 -0.113129 0.030018, + -0.056564 -0.112556 0.030451, -0.056149 -0.112625 0.030512, -0.055725 -0.112617 0.030609, -0.014881 -0.092995 0.049347, + -0.010162 -0.091522 0.052872, -0.005479 -0.090652 0.056633, -0.015235 -0.092926 0.049812, -0.010408 -0.091492 0.053177, + -0.005605 -0.090637 0.056786, -0.015601 -0.092751 0.050236, -0.010657 -0.091408 0.053471, -0.005731 -0.090614 0.056938, + -0.038822 -0.105133 0.037273, -0.039299 -0.104912 0.038006, -0.039818 -0.104469 0.038593, -0.021368 -0.096031 0.045315, + -0.021803 -0.095863 0.045994, -0.022282 -0.095505 0.046558, -0.005484 0.090637 0.057087, -0.010168 0.091515 0.053215, + -0.014888 0.092995 0.049572, -0.00561 0.09063 0.057236, -0.010415 0.091484 0.053513, -0.015243 0.092926 0.050026, + -0.005736 0.090607 0.057384, -0.010664 0.091408 0.053802, -0.01561 0.092758 0.050442, -0.063553 0.109711 0.029129, + -0.069595 0.10598 0.029129, -0.075417 0.101913 0.029129, -0.0634 0.109444 0.029831, -0.069427 0.105721 0.029831, + -0.075241 0.101669 0.029831, -0.063164 0.109039 0.030432, -0.069168 0.105331 0.030432, -0.074959 0.101295 0.030432, + -0.021685 0.096199 0.0452, -0.022123 0.096031 0.045872, -0.022602 0.09568 0.046432, -0.055008 0.113434 0.029295, + -0.055794 0.113487 0.029205, -0.056572 0.113373 0.029148, -0.055367 0.113129 0.030018, -0.055984 0.113152 0.029915, + -0.056595 0.113045 0.029852, -0.055725 0.112617 0.030609, -0.056149 0.112625 0.030512, -0.056564 0.112556 0.030451, + -0.039139 0.105301 0.037121, -0.039616 0.10508 0.037853, -0.040138 0.10463 0.038441, -0.082298 -0.09491 0.014137, + -0.082352 -0.096016 0.014162, -0.082001 -0.097076 0.014179, -0.059692 0.062466 0.154419, -0.059967 0.062267 0.155121, + -0.060375 0.061878 0.155655, -0.05975 0.06348 0.154648, -0.060081 0.063179 0.155548, -0.060608 0.06266 0.156235, + -0.05946 0.064438 0.154953, -0.059887 0.064007 0.156097, -0.060577 0.063328 0.156982, -0.071823 0.048012 0.159927, + -0.072327 0.048512 0.160599, -0.072594 0.048897 0.161453, -0.079994 0.032593 0.162888, -0.080566 0.032928 0.163574, + -0.08091 0.033192 0.164413, -0.083199 0.023178 0.164063, -0.083809 0.023417 0.164734, -0.084183 0.023605 0.165588, + -0.08532 0.01342 0.164825, -0.085945 0.013557 0.165512, -0.086334 0.013667 0.166351, -0.086296 0.003461 0.165176, + -0.086929 0.003497 0.165863, -0.087326 0.003525 0.166702, -0.086113 -0.00655 0.165115, -0.086754 -0.006617 0.165802, + -0.087151 -0.00667 0.166641, -0.084785 -0.016462 0.164627, -0.085403 -0.016632 0.165314, -0.085793 -0.016766 0.166153, + -0.082321 -0.026129 0.163742, -0.082924 -0.026398 0.164413, -0.08329 -0.026611 0.165268, -0.078789 -0.035408 0.16246, + -0.079353 -0.035774 0.163132, -0.079681 -0.036064 0.163986, -0.074234 -0.044178 0.160797, -0.07476 -0.04464 0.161484, + -0.07505 -0.044994 0.162338, -0.068069 -0.053211 0.158569, -0.068535 -0.053768 0.159241, -0.068764 -0.054195 0.160095, + -0.060375 -0.061878 0.155655, -0.059967 -0.062267 0.155121, -0.059692 -0.062466 0.154419, -0.060608 -0.06266 0.156235, + -0.060081 -0.063179 0.155548, -0.05975 -0.06348 0.154648, -0.060577 -0.063328 0.156982, -0.059887 -0.064007 0.156097, + -0.05946 -0.064438 0.154953, -0.060287 -0.063465 0.107056, -0.06036 -0.064545 0.107079, -0.060043 -0.065582 0.107094, + -0.060284 0.063461 0.10733, -0.060356 0.064545 0.107353, -0.06004 0.065575 0.107376, -0.074112 -0.083237 0.036942, + -0.073883 -0.083984 0.037769, -0.073311 -0.084785 0.038342, -0.061424 -0.065086 0.055702, -0.062534 -0.066681 0.051281, + -0.064247 -0.069138 0.047504, -0.06147 -0.066147 0.055962, -0.062519 -0.067665 0.051765, -0.06414 -0.070023 0.04818, + -0.061131 -0.067162 0.056149, -0.06213 -0.068642 0.052105, -0.063675 -0.070915 0.048653, -0.064415 0.069374 0.047379, + -0.062607 0.066788 0.051357, -0.061436 0.065109 0.056007, -0.064308 0.070251 0.048054, -0.062592 0.067772 0.051838, + -0.061485 0.066162 0.056271, -0.063839 0.071152 0.048527, -0.062202 0.068741 0.052181, -0.061146 0.067184 0.056454, + -0.082298 0.09491 0.014137, -0.082352 0.096016 0.014162, -0.082001 0.097076 0.014179, -0.081894 -0.094353 0.029087, + -0.081993 -0.09449 0.02886, -0.082054 -0.094574 0.028601, -0.081779 -0.095245 0.029764, -0.08197 -0.095497 0.029345, + -0.082092 -0.09565 0.028864, -0.081299 -0.096153 0.030235, -0.081558 -0.096474 0.029684, -0.081726 -0.096687 0.029049, + -0.082054 0.094574 0.028601, -0.081993 0.09449 0.02886, -0.081894 0.094353 0.029087, -0.082092 0.09565 0.028864, + -0.08197 0.095497 0.029345, -0.081779 0.095245 0.029764, -0.081726 0.096687 0.029049, -0.081558 0.096474 0.029684, + -0.081299 0.096153 0.030235, -0.074249 0.083443 0.0368, -0.07402 0.084183 0.037628, -0.073448 0.084984 0.0382, + 0.117142 -0.018309 0.014486, 0.116508 -0.019367 0.014486, 0.115623 -0.020224 0.014486, 0.11834 0.008579 0.014328, + 0.118622 0 0.014328, 0.11834 -0.008579 0.014328, 0.115623 0.020224 0.014486, 0.116508 0.019367 0.014486, + 0.117142 0.018309 0.014486, 0.110405 0.011881 0.03447, 0.109612 0.017778 0.03447, 0.109612 -0.017778 0.03447, + 0.110405 -0.011881 0.03447, 0.084618 0.034477 0.033482, 0.08654 0.032253 0.033474, 0.08886 0.030449 0.033482, + 0.084618 -0.034477 0.033482, 0.08654 -0.032253 0.033474, 0.08886 -0.030449 0.033482, 0.087708 -0.025818 0.055462, + 0.090622 -0.026676 0.048458, 0.090309 -0.014264 0.055462, 0.093315 -0.014737 0.048458, 0.097961 -0.015472 0.042442, + 0.0914 -0.00247 0.055462, 0.094437 -0.002552 0.048458, 0.091194 0.00659 0.055462, 0.094223 0.006809 0.048458, + 0.098915 0.007148 0.042442, 0.088722 0.022089 0.055462, 0.091667 0.022823 0.048458, 0.096237 0.023962 0.042442, + 0.083412 -0.034973 0.060162, 0.08683 -0.031233 0.052135, 0.083458 -0.034885 0.06023, 0.087021 -0.030914 0.052395, + 0.083496 -0.034794 0.060295, 0.087158 -0.030558 0.052643, 0.088676 0.02998 0.04892, 0.086128 0.031822 0.053516, + 0.084091 0.034008 0.058231, 0.088943 0.029583 0.049267, 0.086288 0.03154 0.053741, 0.084167 0.033859 0.058346, + 0.089127 0.029116 0.049587, 0.086411 0.031229 0.053959, 0.084229 0.033707 0.058453, 0.095787 0.027151 0.040672, + 0.0961 0.026636 0.041271, 0.096275 0.025965 0.041763, 0.108772 0.022348 0.033001, 0.108955 0.02178 0.033749, + 0.108978 0.021015 0.034328, 0.11673 0.018019 0.029388, 0.116249 0.018887 0.02948, 0.115578 0.019606 0.029627, + 0.116486 0.017797 0.030092, 0.116112 0.018505 0.030193, 0.115585 0.019102 0.030355, 0.116074 0.017523 0.030691, + 0.115799 0.018032 0.030788, 0.115425 0.018461 0.030945, 0.117844 0.008549 0.029398, 0.117538 0.008531 0.030098, + 0.117073 0.008501 0.030699, 0.117844 -0.008549 0.029398, 0.117538 -0.008531 0.030098, 0.117073 -0.008501 0.030699, + 0.115578 -0.019606 0.029627, 0.116249 -0.018887 0.02948, 0.11673 -0.018019 0.029388, 0.115585 -0.019102 0.030355, + 0.116112 -0.018505 0.030193, 0.116486 -0.017797 0.030092, 0.115425 -0.018461 0.030945, 0.115799 -0.018032 0.030788, + 0.116074 -0.017523 0.030691, 0.108772 -0.022348 0.033001, 0.108955 -0.02178 0.033749, 0.108978 -0.021015 0.034328, + 0.095428 -0.027283 0.040974, 0.095749 -0.026772 0.041565, 0.095924 -0.026104 0.042049, 0.09462 0.013086 0.0005, + 0.093536 0.011464 0.0005, 0.091911 0.010381 0.0005, 0.084175 -0.009239 0.0005, 0.080933 -0.007071 0.0005, + 0.078758 -0.003827 0.0005, 0.078003 0 0.0005, 0.078758 0.003827 0.0005, 0.080933 0.007071 0.0005, 0.084175 0.009239 0.0005, + 0.091911 -0.010381 0.0005, 0.093536 -0.011464 0.0005, 0.09462 -0.013086 0.0005, -0.045574 -0.073769 0.0005, + -0.046185 -0.070709 0.0005, -0.045574 -0.06765 0.0005, -0.042027 -0.042431 0.0005, -0.039371 -0.043686 0.0005, + -0.037197 -0.045654 0.0005, -0.03569 -0.048172 0.0005, -0.034977 -0.051022 0.0005, -0.035122 -0.053951 0.0005, + -0.03611 -0.056713 0.0005, -0.042171 0.009239 0.00075, -0.038929 0.007071 0.00075, -0.036762 0.003827 0.00075, + -0.035999 0 0.00075, -0.036762 -0.003827 0.00075, -0.038929 -0.007071 0.00075, -0.042171 -0.009239 0.00075, + -0.049465 -0.041771 0.002148, -0.049465 -0.041122 0.003121, -0.049465 -0.04015 0.003772, -0.045364 -0.067734 0.002148, + -0.045956 -0.070709 0.002148, -0.045364 -0.073685 0.002148, -0.044762 -0.067986 0.003121, -0.045303 -0.070709 0.003121, + -0.044762 -0.073433 0.003121, -0.043865 -0.068359 0.003772, -0.044331 -0.070709 0.003772, -0.043865 -0.073067 0.003772, + -0.032585 -0.087303 0.002148, -0.032124 -0.086838 0.003121, -0.031437 -0.086151 0.003772, -0.040688 -0.062225 0.002148, + -0.04023 -0.062683 0.003121, -0.039539 -0.063374 0.003772, -0.041962 -0.042213 0.002148, -0.041775 -0.041588 0.003121, + -0.041492 -0.040657 0.003772, -0.039246 -0.043495 0.002148, -0.038883 -0.042953 0.003121, -0.038342 -0.042145 0.003772, + -0.037022 -0.045513 0.002148, -0.036518 -0.045101 0.003121, -0.035767 -0.044483 0.003772, -0.03548 -0.048084 0.002148, + -0.034878 -0.047836 0.003121, -0.033981 -0.047466 0.003772, -0.034752 -0.050995 0.002148, -0.034103 -0.050934 0.003121, + -0.033134 -0.050838 0.003772, -0.034897 -0.053993 0.002148, -0.03426 -0.054123 0.003121, -0.033306 -0.05431 0.003772, + -0.035912 -0.056824 0.002148, -0.035336 -0.057129 0.003121, -0.034477 -0.05759 0.003772, 0.094772 -0.022381 0.002148, + 0.094124 -0.022381 0.003121, 0.093147 -0.022381 0.003772, 0.091827 0.010592 0.002148, 0.093376 0.011626 0.002148, + 0.094406 0.013174 0.002148, 0.091576 0.011192 0.003121, 0.092911 0.012086 0.003121, 0.093811 0.013423 0.003121, + 0.091202 0.012092 0.003772, 0.092224 0.012774 0.003772, 0.092911 0.013795 0.003772, 0.094772 0.022381 0.002148, + 0.094124 0.022381 0.003121, 0.093147 0.022381 0.003772, 0.088997 0.010228 0.002148, 0.088997 0.010879 0.003121, + 0.088997 0.011852 0.003772, 0.085106 -0.009809 0.002148, 0.084923 -0.010433 0.003121, 0.084641 -0.011366 0.003772, + 0.082443 -0.008586 0.002148, 0.082085 -0.009131 0.003121, 0.081558 -0.009949 0.003772, 0.080238 -0.006658 0.002148, + 0.079742 -0.007082 0.003121, 0.079002 -0.007715 0.003772, 0.078667 -0.004186 0.002148, 0.078072 -0.004452 0.003121, + 0.077187 -0.00485 0.003772, 0.077866 -0.001371 0.002148, 0.077217 -0.001458 0.003121, 0.076256 -0.001589 0.003772, + 0.077888 0.001558 0.002148, 0.077248 0.001657 0.003121, 0.076286 0.001805 0.003772, 0.078751 0.00436 0.002148, + 0.078163 0.004637 0.003121, 0.077278 0.005053 0.003772, 0.08036 0.006802 0.002148, 0.079872 0.007235 0.003121, + 0.079147 0.007882 0.003772, 0.083817 0.009333 0.002148, 0.083549 0.009926 0.003121, 0.083153 0.010814 0.003772, + 0.094406 -0.013174 0.002148, 0.093376 -0.011626 0.002148, 0.091827 -0.010592 0.002148, 0.093811 -0.013423 0.003121, + 0.092911 -0.012086 0.003121, 0.091576 -0.011192 0.003121, 0.092911 -0.013795 0.003772, 0.092224 -0.012774 0.003772, + 0.091202 -0.012092 0.003772, 0.088997 -0.010228 0.002148, 0.088997 -0.010879 0.003121, 0.088997 -0.011852 0.003772, + -0.040302 0.079582 0.002148, -0.039841 0.079124 0.003121, -0.039154 0.078438 0.003772, -0.049999 -0.010228 0.002148, + -0.049999 -0.010879 0.003121, -0.049999 -0.011852 0.003772, -0.043102 0.009809 0.002148, -0.042919 0.010433 0.003121, + -0.042645 0.011366 0.003772, -0.04044 0.008586 0.002148, -0.040089 0.009131 0.003121, -0.039558 0.009949 0.003772, + -0.038235 0.006658 0.002148, -0.037743 0.007082 0.003121, -0.037003 0.007715 0.003772, -0.036667 0.004186 0.002148, + -0.036076 0.004452 0.003121, -0.035187 0.00485 0.003772, -0.035866 0.001371 0.002148, -0.035221 0.001458 0.003121, + -0.034256 0.001589 0.003772, -0.035892 -0.001558 0.002148, -0.035248 -0.001657 0.003121, -0.034286 -0.001805 0.003772, + -0.036747 -0.00436 0.002148, -0.03616 -0.004637 0.003121, -0.035278 -0.005053 0.003772, -0.038361 -0.006802 0.002148, + -0.037876 -0.007235 0.003121, -0.037148 -0.007882 0.003772, -0.041813 -0.009333 0.002148, -0.04155 -0.009926 0.003121, + -0.041149 -0.010814 0.003772, -0.049999 0.010228 0.002148, -0.049999 0.010879 0.003121, -0.049999 0.011852 0.003772, + -0.073235 -0.047722 0.162628, -0.07988 -0.035069 0.164963, -0.084839 -0.02009 0.166702, -0.085747 -0.016212 0.167023, + -0.087051 -0.004339 0.16748, -0.08725 -0.000341 0.167557, -0.086395 0.01158 0.167252, -0.079926 0.035397 0.164978, + 0.085442 0.02755 0.063011, -0.032936 0.100037 0.042389, -0.045643 -0.106583 0.036289, -0.041977 -0.104691 0.038124, + -0.056057 -0.051182 0.152939, -0.056087 -0.050842 0.153107, -0.056057 0.051182 0.152939, -0.056087 0.050842 0.153107, + -0.016546 0.092903 0.050587, -0.018791 0.093597 0.049225, -0.016544 -0.09288 0.050404, -0.018784 -0.093567 0.049099, + 0.098373 0.005766 0.043175, -0.057133 0.058617 0.003994] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 1459 + 0.00859934 0.999606 0.0267047, 0 0.999658 0.0261638, -0.195003 0.980454 0.026164, -0.516853 0.852984 0.0726717, + -0.406435 0.913283 0.0269326, -0.578451 0.815156 0.0302449, -0.354382 0.934732 0.0262654, -0.645713 0.762867 0.032989, + -0.708857 0.705155 0.0166827, -0.696554 0.716841 0.0308311, -0.684199 0.728773 0.0275956, -0.67598 0.736363 0.0286619, + -0.746415 0.66191 -0.0688431, -0.594563 0.803668 0.0247436, -0.760098 0.649041 0.031577, -0.826194 0.562341 0.0342986, + -0.944467 0.327108 0.0313368, -0.91889 0.393341 0.0304085, -0.978852 0.202435 0.0294645, -0.992142 0.121433 0.0301281, + -0.999659 -0.00257729 0.0259848, -0.998644 0.042266 0.0303816, -0.88499 0.464719 0.0288007, -0.977367 0.209913 0.0262657, + -0.821569 0.569482 0.0267314, -0.914533 0.404068 0.0189423, 0.0328578 0.999124 0.0259127, 0.022202 0.999411 0.0261555, + -0.0281424 0.995013 0.0956984, -0.192547 0.980903 0.0274889, -0.204132 0.973568 0.102447, -0.361038 0.92823 0.0896666, + -0.919885 -0.391221 0.027529, -0.880662 -0.473146 0.0238297, -0.91653 -0.399831 0.0104228, 0 0.999654 0.0262889, + 0.0160357 0.999528 0.0262202, 0.0264139 0.999303 0.0263785, 0.0263008 0.999306 0.0263917, -0.788581 -0.614337 0.0270237, + -0.838754 -0.544261 0.0165131, -0.834826 -0.549719 0.0295784, -0.724134 0.689176 0.0258149, -0.699517 0.711475 0.0669213, + -0.976202 -0.215531 0.0240107, -0.991801 -0.12584 0.0222562, -0.951373 -0.30726 0.0219403, -0.701384 -0.712113 0.0309052, + -0.736986 -0.67267 -0.0660881, -0.684199 -0.728773 0.0275956, -0.57829 -0.815271 0.030237, -0.645713 -0.762867 0.032989, + -0.594284 -0.803874 0.0247744, -0.70928 -0.704579 0.022129, -0.99868 -0.0498127 0.0125232, -0.998679 -0.0498249 0.0125527, + -0.377911 -0.925456 0.0267383, -0.516678 -0.853071 0.0728996, -0.162702 -0.986329 0.026152, -0.206671 -0.97803 0.0272857, + -0.67598 -0.736363 0.0286619, -0.724913 -0.688355 0.0258411, 0 -0.999658 0.0261638, 0.00898402 -0.999603 0.0266918, + -0.699322 -0.709417 0.0876174, -0.370351 -0.928519 0.0262993, -0.361084 -0.928212 0.0896688, -0.18761 -0.981893 0.0262232, + 0.0119322 -0.999148 0.0395113, 0.0339651 -0.999088 0.0258625, 0.0215615 -0.999425 0.0261786, 0.0263972 -0.999303 0.0263799, + 0.0160357 -0.999528 0.0262202, 0 -0.999654 0.0262889, 0.0263008 -0.999306 0.0263917, -0.973415 -0.22881 0.0104582, + -0.973299 -0.229297 0.0105432, 0.195003 -0.980454 0.026164, 0.412713 -0.910485 0.0261677, 0.555393 -0.831174 0.0262213, + 0.552326 -0.833186 0.0271414, 0.362031 -0.931771 0.027138, 0.198753 -0.979667 0.0273919, 0.128055 -0.991411 0.0265899, + 0.435495 -0.899789 0.0268899, 0.285387 -0.958052 0.0262768, 0.706864 -0.706864 0.0262032, 0.95472 0.296416 0.0254281, + 0.922757 0.384503 0.0260366, 0.893196 0.446019 0.0571609, 0.848964 -0.527802 0.0261873, 0.833462 -0.551888 0.0275885, + 0.948992 -0.308793 0.0637327, 0.928561 -0.370174 0.0273007, 0.976476 -0.213892 0.027302, 0.905309 -0.423911 0.0267238, + 0.70748 -0.7062 0.0274459, 0.763398 -0.645391 0.0263493, 0.988135 -0.151381 0.0259377, 0.904595 -0.42433 0.0406481, + 0.999657 1.49587e-009 0.0262041, 0.997416 -0.0673116 0.0251041, 0.649922 -0.759541 0.0264294, 0.543275 -0.839143 0.0262758, + 0.865662 -0.499911 0.026809, 0.976154 -0.187715 0.109027, 0.873247 -0.486538 0.0268451, 0.8744 -0.484455 0.0269837, + 0.88783 -0.459368 0.0271959, 0.881669 -0.471038 0.027969, 0.999658 0 0.0261641, 0.973039 0.229174 0.0259691, + 0.985506 0.167598 0.0262343, 0.924412 0.380505 0.0260414, 0.831174 0.555393 0.0262213, 0.839184 0.543155 0.0274275, + 0.994962 0.00261336 0.100221, 0.706864 0.706864 0.0262032, 0.555393 0.831174 0.0262213, 0.552326 0.833186 0.0271414, + 0.382612 0.923538 0.0261787, 0.376206 0.926133 0.0273389, 0.70748 0.7062 0.0274459, 0.649922 0.759541 0.0264294, + 0.162702 0.986329 0.026152, 0.214173 0.976418 0.0271814, 0.763398 0.645391 0.0263493, 0.978102 0.206451 0.0263675, + 0.874458 0.484327 0.0274034, 0.873247 0.486538 0.0268451, 0.874761 0.483791 0.0272063, 0.865662 0.499911 0.026809, + 0.8744 0.484455 0.0269837, 0.543275 0.839143 0.0262758, 0.285387 0.958052 0.0262768, 0.435495 0.899789 0.0268899, + 0.128055 0.991411 0.0265899, 0.442291 0.89649 0.0261671, 0.454489 0.890381 0.0257043, 0.454214 0.890518 0.0258432, + 0.419837 0.90182 0.102262, 0.392355 0.916491 0.0781102, 0.453123 0.891067 0.0260743, 0.420929 0.900963 0.105287, + 0.400595 0.915772 0.0297492, 0.453563 0.890844 0.0260335, 0.453795 0.890702 0.0268433, 0.418683 0.907751 0.0263029, + 0.453709 0.890675 0.0291063, 0.453449 0.89092 0.0254065, 0.382844 0.919457 0.0896036, -0.408904 0.912202 0.0261731, + -0.390064 0.92056 0.0204626, -0.231953 0.97238 0.0259991, -0.079324 0.996574 0.0234085, -0.0296706 0.999159 0.028316, + -0.371828 0.926157 0.06307, 0.023918 0.999368 0.0263028, 0.198275 0.979795 0.0262547, 0.233971 0.971892 0.0261394, + 0.344133 0.938565 0.025851, 0.269902 0.962534 0.0260909, -0.670594 0.741381 0.0256516, -0.586753 0.80935 0.0259481, + -0.597893 0.801068 0.028525, -0.548809 0.835537 0.0261905, -0.723736 0.689594 0.0257978, -0.680066 0.73066 0.0603888, + -0.558124 0.827548 0.0605193, -0.533118 0.845769 0.0214342, -0.497195 0.867312 0.0238073, -0.499346 0.861789 0.0892927, + -0.2798 0.408962 0.868598, -0.298972 0.397148 0.867692, -0.289254 0.401966 0.868767, -0.26487 0.42443 0.865854, + -0.263743 0.419942 0.868383, -0.453822 0.346219 0.821084, -0.313707 0.389899 0.865775, -0.308458 0.394373 0.865635, + -0.297206 0.400277 0.86686, -0.309842 0.394221 0.86521, -0.167978 0.472282 0.865294, -0.225865 0.442958 0.867625, + -0.191757 0.462052 0.865874, -0.2462 0.429241 0.868987, -0.152477 0.479614 0.86413, -0.233535 0.440744 0.866722, + -0.236987 0.436105 0.86813, -0.219849 0.449106 0.866008, -0.1942 0.485255 0.852534, -0.304693 0.403563 0.862728, + -0.390097 0.408565 0.825166, -0.28227 0.41487 0.864989, -0.298987 0.409936 0.861719, -0.294833 0.437949 0.849278, + -0.270732 0.421507 0.865469, -0.261784 0.428392 0.864841, -0.280589 0.477285 0.832748, -0.244601 0.437614 0.865254, + -0.231147 0.443644 0.865882, -0.23802 0.441866 0.864928, -0.284231 0.491134 0.823407, -0.229067 0.418542 0.878835, + -0.223293 0.455479 0.861788, -0.105927 0.548798 0.829217, 0.453795 -0.890702 0.0268433, 0.453709 -0.890675 0.0291063, + 0.400617 -0.915908 0.0248584, 0.453565 -0.890857 0.0255661, 0.453659 -0.890794 0.0260638, 0.319453 -0.945229 0.0670277, + 0.453567 -0.890841 0.0260654, 0.421811 -0.900501 0.105709, 0.442233 -0.896516 0.0262629, 0.454508 -0.89037 0.0257543, + 0.453117 -0.891068 0.0261423, 0.454188 -0.890529 0.0259123, 0.421372 -0.901258 0.100891, 0.400444 -0.915836 0.0298235, + 0.392846 -0.916435 0.0762869, 0.0806106 -0.996473 0.0233305, 0.233981 -0.971896 0.0259241, 0.0793589 -0.996423 0.0290388, + -0.0399373 -0.998857 0.0262709, 0.342904 -0.939015 0.0258424, -0.232299 -0.972292 0.0261778, -0.411239 -0.911159 0.025936, + -0.409689 -0.911849 0.0261849, -0.254266 -0.966778 0.026267, -0.19541 -0.980371 0.0262281, -0.427775 -0.902762 0.0450463, + -0.493092 -0.869588 0.0260371, -0.554477 -0.831892 0.0225897, -0.505278 -0.862483 0.0285929, -0.542335 -0.838339 0.0553247, + -0.548706 -0.835603 0.0262624, -0.590551 -0.806646 0.023908, -0.663798 -0.747616 0.0210568, -0.698058 -0.71557 0.0259671, + -0.597315 -0.798381 0.076171, -0.696788 -0.704808 0.133163, -0.289092 -0.411251 0.864464, -0.283813 -0.443263 0.850275, + -0.32761 -0.444849 0.833535, -0.272939 -0.419574 0.865715, -0.265334 -0.429725 0.863096, -0.282243 -0.415206 0.864837, + -0.421412 -0.370999 0.827509, -0.307451 -0.39508 0.865671, -0.372342 -0.345171 0.861521, -0.312161 -0.39104 0.86582, + -0.29382 -0.405114 0.865767, -0.221815 -0.445352 0.867444, -0.203759 -0.455245 0.866738, -0.218741 -0.44876 0.866468, + -0.217566 -0.463936 0.858737, -0.282175 -0.485119 0.827669, -0.177827 -0.512647 0.839983, -0.205573 -0.499283 0.841699, + -0.218187 -0.447164 0.867432, -0.229544 -0.444275 0.865984, -0.181188 -0.465757 0.866165, -0.196876 -0.45932 0.866178, + -0.254635 -0.441736 0.86025, -0.242192 -0.441554 0.863929, -0.290368 -0.402064 0.868349, -0.305259 -0.394978 0.866493, + -0.298766 -0.397098 0.867786, -0.282314 -0.406325 0.869022, -0.264763 -0.419644 0.868216, -0.272283 -0.419292 0.866058, + -0.435317 -0.348797 0.829964, -0.261449 -0.42613 0.866059, -0.233518 -0.440417 0.866892, -0.237292 -0.435453 0.868374, + -0.244854 -0.429827 0.869077, -0.107539 -0.543338 0.832598, -0.172934 -0.469059 0.86607, -0.999292 -0.0376251 0, -1 0 0, + -0.997858 -0.00178853 -0.0653904, -0.996473 0 -0.0839167, -0.998419 0.0562124 7.47457e-005, -0.99817 0.00792968 -0.0599449, + -0.820442 -0.57173 -0.000468017, -0.819179 -0.573538 -1.66924e-005, -0.844538 -0.529482 0.0800241, + -0.851864 -0.519248 0.068619, -0.820461 -0.571703 -0.000425969, -0.818698 -0.574225 0.000154445, + -0.818363 -0.574702 0.000243796, -0.818661 -0.574277 0.000149898, -0.850714 -0.525264 0.0195982, + -0.820064 -0.572272 -0.000159156, -0.817954 -0.575283 0.000288053, -0.81847 -0.574549 0.000204013, + -0.84027 -0.542168 -1.80376e-006, -0.839737 -0.538357 0.0708028, -0.868488 -0.495704 0.00234109, + -0.877415 -0.479724 0.0029125, -0.883969 -0.460485 0.0809488, -0.876489 -0.481272 0.012034, -0.867725 -0.497039 0.0023798, + -0.87071 -0.485256 -0.0799447, -0.854324 -0.51654 -0.0575848, -0.877503 0.479563 0.00291721, -0.868547 0.495601 0.00230428, + -0.839558 0.538713 0.0702126, -0.881207 0.463847 0.0912159, -0.850592 0.517696 0.0921127, -0.827748 0.5611 -1.24013e-005, + -0.819238 0.573453 -6.63852e-005, -0.874607 0.484141 0.0258908, -0.819 0.573793 5.12986e-005, -0.854322 0.516544 -0.0575832, + -0.867712 0.497061 0.00236172, -0.872891 0.477171 -0.101826, -0.877025 0.480386 0.00754054, -0.454502 0.015655 -0.890608, + -0.418202 0.026571 -0.907965, -0.341763 -0.000152302 -0.939786, -0.342288 1.92135e-005 -0.939595, + -0.341814 1.19704e-006 -0.939768, -0.344472 -0.000117816 -0.938797, -0.344962 -0.000146371 -0.938617, + -0.343377 -9.88929e-005 -0.939198, -0.344917 -0.000148497 -0.938633, -0.341593 -2.52884e-005 -0.939848, + -0.341912 6.64488e-005 -0.939732, -0.455615 -0.0560565 -0.88841, -0.470188 -0.00772589 -0.882532, + -0.341471 5.19709e-005 -0.939892, -0.805882 0.47215 -0.357251, -0.819324 0.502732 -0.275625, -0.827141 0.539392 -0.157776, + -0.734179 0.368954 -0.56996, -0.594854 0.220173 -0.773093, -0.723486 0.358147 -0.590168, -0.561375 0.187228 -0.806104, + -0.814423 0.492083 -0.30752, -0.725567 0.324481 -0.606848, -0.459675 0.0967606 -0.8828, -0.528179 0.158701 -0.834171, + -0.827141 -0.539392 -0.157776, -0.820951 -0.509299 -0.258175, -0.778771 -0.348084 -0.521875, -0.815042 -0.492181 -0.30572, + -0.459675 -0.0967606 -0.8828, -0.560483 -0.188045 -0.806535, -0.542031 -0.169221 -0.823145, -0.714906 -0.34595 -0.607642, + -0.805882 -0.47215 -0.357251, -0.723486 -0.358147 -0.590168, -0.594854 -0.220173 -0.773093, -0.997169 0.0751969 0, + -0.990581 0.136928 4.98458e-005, -0.967988 0.250995 9.99593e-005, -0.953614 0.301033 0, -0.906213 0.422822 0, + -0.889896 0.456163 -4.94439e-005, -0.984071 0.175807 -0.0263676, -0.935805 0.349575 -0.0454495, -0.86008 0.510159 0, + -0.997169 -0.0751969 0, -0.988145 -0.151242 -0.0263772, -0.9888 -0.149244 0, -0.942571 -0.331725 -0.0389718, + -0.895456 -0.445149 2.05072e-009, -0.9584 -0.285428 0, -0.984781 -0.173802 0, -0.936693 -0.350151 0.000101825, + -0.86008 -0.510159 0, -0.958286 0.00182554 -0.285805, -0.96952 -0.0560128 -0.238522, -0.972733 -0.100483 -0.209029, + -0.982453 -0.149416 -0.111627, -0.877601 -0.131057 -0.461129, -0.621526 -0.0980235 -0.777237, -0.826244 -0.0433773 -0.56164, + -0.727976 -0.169224 -0.664391, -0.920759 -0.205784 -0.331446, -0.805791 -0.289727 -0.516487, -0.69158 -0.134626 -0.709643, + -0.956316 -0.253903 -0.14489, -0.879203 -0.400526 -0.258032, -0.850555 -0.436337 -0.293542, -0.982453 0.149416 -0.111627, + -0.982122 0.0920654 -0.164194, -0.967595 0.0358147 -0.249956, -0.935693 0.202073 -0.289216, -0.956316 0.253903 -0.14489, + -0.893425 0.389445 -0.223885, -0.831783 0.448518 -0.327059, -0.843421 0.292423 -0.450699, -0.867392 0.104453 -0.48654, + -0.958286 -0.00182554 -0.285805, -0.841112 0.0506135 -0.538487, -0.661399 0.0592698 -0.747688, -0.753939 0.137542 -0.642385, + -0.596133 0.164706 -0.78581, -0.985916 0 -0.167241, -0.986405 -0.000795381 -0.164333, -0.958956 -3.81442e-005 -0.283555, + -0.986564 -0.00197526 -0.163365, -0.904156 0.00296955 -0.427191, -0.803389 0 -0.595455, -0.608527 0 -0.793533, + -0.871133 0.00128775 -0.491045, -0.854404 0 -0.519609, -0.904156 -0.00296955 -0.427191, -0.958956 3.81442e-005 -0.283555, + -0.986405 0.000795381 -0.164333, -0.477225 0 -0.878781, -0.871133 -0.00128775 -0.491045, -0.986564 0.00197526 -0.163365, + 0.107806 -0.993869 0.0245572, 0.347228 -0.937412 0.0262805, 0.23863 -0.970911 0.0197127, 0.229185 -0.973013 0.02685, + 0.244344 -0.969242 0.0294214, 0.092856 -0.995326 0.0265461, 0.0928705 0.995324 0.0265412, 0.107763 0.993873 0.0245574, + 0.347408 0.937349 0.0261623, 0.229102 0.973035 0.0267536, 0.244302 0.969253 0.0294076, 0.238767 0.97088 0.0195502, + -0.181738 0.937994 0.295191, -0.148023 0.86781 0.474336, -0.203269 0.843164 0.497752, -0.318882 0.90616 0.277827, + -0.311374 0.799964 0.512936, -0.201652 0.735705 0.646586, -0.163618 0.545863 0.821744, -0.035365 0.779677 0.625182, + -0.24412 0.645095 0.724057, -0.193797 0.540185 0.818928, -0.211633 0.683153 0.698937, -0.434782 0.714284 0.548418, + -0.486461 0.82206 0.295927, -0.522759 0.707152 0.476088, -0.350221 0.576827 0.737981, -0.578297 0.780507 0.237448, + -0.275706 0.53241 0.800328, -0.344612 0.49247 0.799197, -0.414851 0.557508 0.719085, -0.577989 -0.780782 0.237293, + -0.49913 -0.820557 0.278487, -0.189343 -0.829806 0.524949, -0.146086 -0.865556 0.479032, -0.198574 -0.730762 0.653112, + -0.444857 -0.734555 0.512378, -0.344961 -0.896659 0.277496, -0.294855 -0.795581 0.529256, -0.35041 -0.599731 0.7194, + -0.522843 -0.707355 0.475693, -0.414753 -0.557141 0.719426, -0.344374 -0.492784 0.799106, -0.275125 -0.533757 0.799631, + -0.228455 -0.631161 0.741245, -0.194491 -0.92936 0.31379, -0.214444 -0.964701 0.152859, -0.192207 -0.539586 0.819697, + -0.160121 -0.540239 0.826138, -0.0762866 -0.714645 0.695315, -0.208268 -0.670803 0.711792, -0.577276 -0.776231 0.253414, + -0.627731 -0.647596 0.43194, -0.528172 -0.794388 0.299971, -0.511406 -0.691949 0.509578, -0.511047 -0.505341 0.695314, + -0.424585 -0.581537 0.693932, -0.470858 -0.718222 0.512299, -0.38423 -0.586792 0.712771, -0.48396 -0.835758 0.259405, + -0.385835 -0.88096 0.273935, -0.427938 -0.729591 0.533447, -0.392398 -0.732847 0.555841, -0.339607 -0.592842 0.730209, + -0.274692 -0.94835 0.158669, -0.228231 -0.940388 0.252152, 0.00247377 -0.990999 0.13385, -0.0920718 -0.946932 0.307964, + -0.259631 -0.842053 0.472798, -0.283476 -0.656936 0.698625, -0.192458 -0.649512 0.735591, -0.234173 -0.560659 0.794245, + -0.120668 -0.837662 0.532693, 0.117651 -0.955718 0.269742, 0.0429565 -0.862005 0.505076, 0.2665 -0.920789 0.284825, + 0.112333 -0.836716 0.535993, -0.0977414 -0.688356 0.718758, -0.189326 -0.566161 0.802258, -0.0276057 -0.692396 0.72099, + 0.307472 -0.945764 0.104843, 0.29624 -0.927008 0.229996, 0.227872 -0.95803 0.173934, 0.199088 -0.976521 0.0822856, + 0.136837 -0.978485 0.154414, 0.13315 -0.937769 0.320718, -0.00668117 -0.876425 0.481492, 0.138278 -0.860712 0.489954, + 0.048936 -0.970528 0.235966, -0.0626552 -0.860244 0.506019, -0.0439815 -0.927131 0.372148, 0.0647631 -0.991593 0.112019, + 0.0160442 -0.990489 0.136654, -0.548258 -0.464252 0.695617, -0.0284481 -0.97306 0.228791, -0.064502 -0.924733 0.375112, + 0.395316 -0.784417 -0.477929, 0.39273 -0.904837 0.164419, 0.324277 -0.898062 0.297201, 0.15663 -0.815793 0.55673, + -0.0305349 -0.653524 0.75629, 0.334657 -0.897103 0.288462, 0.204067 -0.838983 0.504444, 0.0225472 -0.691997 0.721548, + -0.0829849 -0.583527 0.807842, 0.324057 -0.901889 0.285627, 0.0363317 -0.730178 0.68229, -0.0594644 -0.633092 0.771789, + 0.169745 -0.83331 0.526099, 0.0783217 0.994291 0.0724594, 0.0741837 0.995301 0.0622343, 0.12756 0.983031 0.131827, + 0.15383 0.984217 0.087484, 0.146198 0.95104 0.272303, 0.032503 0.991241 0.128005, -0.0229801 0.980528 0.19503, + 0.0559137 0.968128 0.244134, -0.0646012 0.964981 0.254242, -0.0183436 0.952805 0.303029, 0.126125 0.932413 0.338673, + 0.278423 0.921237 0.271667, 0.11398 0.860068 0.497284, -0.170297 0.77935 0.603003, 0.0551284 0.92651 0.372211, + 0.039175 0.959045 0.280531, -0.411564 0.862721 0.293815, -0.489844 0.83475 0.251486, -0.519344 0.799605 0.301519, + -0.441063 0.761512 0.474934, -0.35809 0.621847 0.696475, -0.38381 0.718283 0.58031, -0.472361 0.718006 0.511216, + -0.385925 0.586155 0.712379, -0.574834 0.784328 0.233228, -0.665342 0.676432 0.315847, -0.512091 0.691343 0.509713, + -0.408937 0.546928 0.730507, -0.573257 0.579174 0.579598, 0.34482 0.905352 0.247863, 0.211604 0.861774 0.461052, + 0.0468447 0.743528 0.667062, 0.169356 0.821106 0.545071, -0.0607344 0.640088 0.765897, 0.322542 0.895591 0.306403, + 0.0211609 0.695026 0.718673, 0.228145 0.96104 0.156048, 0.27031 0.916269 0.295606, 0.117823 0.954308 0.274616, + -0.0586137 0.991646 0.114902, -0.0582243 0.950896 0.303986, 0.0294162 0.856998 0.514479, 0.103036 0.823883 0.557315, + -0.0513287 0.671157 0.739536, -0.118767 0.672706 0.730316, -0.146582 0.831427 0.535951, -0.172986 0.565727 0.806243, + -0.182735 0.64984 0.737778, -0.243699 0.937043 0.250121, -0.278876 0.825608 0.490509, -0.274921 0.644421 0.71354, + -0.202008 0.564952 0.800014, -0.245723 0.556424 0.793733, 0.34095 0.900801 0.268907, 0.392867 0.904887 0.163815, + 0.1813 0.83191 0.524458, -0.00617679 0.675556 0.737282, -0.104577 0.572096 0.813492, -0.970754 0.237299 0.0364187, + -0.971462 0.237005 0.00954269, -0.989219 -0.132121 0.0631734, -0.891199 -0.448718 0.0664524, -0.990813 -0.134067 0.0177539, + -0.875686 -0.482299 0.0237077, -0.984649 0.174214 0.0107483, -0.980822 -0.193984 0.0189287, -0.84318 -0.53709 0.0241084, + -0.975895 -0.205615 -0.0731556, -0.897404 -0.36207 -0.252133, -0.932702 -0.195088 -0.303328, -0.858194 -0.0638379 -0.509341, + -0.818791 -0.245841 -0.51879, -0.676014 -0.093978 -0.730872, -0.973303 0.134192 -0.186209, -0.992656 0.115576 -0.0357371, + -0.898882 0.438135 -0.00693926, -0.869557 0.484992 -0.0930273, -0.891494 0.270812 -0.36318, -0.780853 0.623503 -0.0388795, + -0.82617 0.542296 -0.152836, -0.71494 0.0791446 -0.694692, -0.779431 0.329746 -0.532686, -0.586157 0.188914 -0.787865, + -0.721842 0.419208 -0.550644, -0.791731 0.54974 -0.26636, -0.765026 0.638228 -0.0860255, -0.743313 0.658298 -0.118868, + -0.763509 0.596041 -0.248573, -0.456349 0.0900606 -0.885232, -0.584438 0.212577 -0.783099, -0.464955 0.0621229 -0.883152, + -0.591934 0.1311 -0.795253, -0.729159 0.328514 -0.600337, -0.79587 0.273169 -0.540342, -0.81666 0.487689 -0.308586, + -0.475538 0.043331 -0.878627, -0.612473 0.0483553 -0.789011, -0.475719 0.0216115 -0.879332, -0.597404 -0.0190744 -0.801713, + -0.490892 -0.013002 -0.871123, -0.481287 0.00335033 -0.876557, -0.587347 0.0134854 -0.809223, -0.62847 0.0905982 -0.77254, + -0.804731 0.179312 -0.56591, -0.815351 0.0306073 -0.578157, -0.819715 0.108933 -0.562318, -0.481642 -0.0283545 -0.875909, + -0.8938 0.345277 -0.286192, -0.855161 0.500726 -0.134067, -0.925948 0.353343 -0.1333, -0.937691 0.22837 -0.261884, + -0.94125 0.120907 -0.315325, -0.958398 0.0363225 -0.283116, -0.980495 0.146636 -0.130872, -0.958398 0.254692 -0.128859, + -0.99152 0.0196851 -0.128455, -0.970823 -0.0672992 -0.230159, -0.837451 -0.0526124 -0.543975, -0.611218 -0.0599901 -0.789185, + -0.477513 -0.0471894 -0.877357, -0.603183 -0.09681 -0.791706, -0.477429 -0.0677884 -0.876052, -0.944521 -0.16552 -0.283696, + -0.815388 -0.130831 -0.563937, -0.798792 -0.200756 -0.567123, -0.591946 -0.132597 -0.794995, -0.922259 -0.262203 -0.284057, + -0.464229 -0.0862204 -0.881509, -0.610917 -0.199432 -0.766164, -0.454367 -0.107912 -0.884254, -0.556807 -0.211461 -0.803275, + -0.580669 -0.168651 -0.79648, -0.76441 -0.252894 -0.593062, -0.769986 -0.332115 -0.544813, -0.725026 -0.402516 -0.558854, + -0.698007 -0.395931 -0.596679, -0.878334 -0.339919 -0.336132, -0.97843 -0.162555 -0.12748, -0.911943 -0.388718 -0.131373, + -0.954422 -0.269255 -0.128763, -0.989446 -0.0717645 -0.125884, -0.848362 -0.4435 -0.289119, -0.801663 -0.536799 -0.263028, + -0.759806 -0.571842 -0.309342, -0.786417 -0.603376 -0.132233, -0.852751 -0.505796 -0.13033, -0.609168 0.034692 -0.792282, + -0.722501 -0.0328739 -0.690588, -0.861058 0.0668791 -0.50409, -0.775873 0.19223 -0.60089, -0.880791 0.315012 -0.353517, + -0.787704 -0.329151 -0.520752, -0.791046 -0.560497 -0.245133, -0.906139 -0.254431 -0.337901, -0.750071 -0.652464 -0.108094, + -0.822777 -0.544755 -0.162111, -0.947866 0.176402 -0.265392, -0.976802 -0.12079 -0.176826, -0.969886 0.236995 -0.0561604, + -0.992496 -0.118242 -0.0311543, -0.882164 -0.460442 -0.0988951, -0.770789 -0.633149 -0.0707611, -0.784314 -0.619939 -0.022951, + -0.887898 -0.460039 -0.000585456, -0.969513 0.244861 0.00935876, -0.989939 -0.140342 0.0180171, -0.870236 -0.492063 0.0237495, + -0.974776 0.22021 0.0363281, -0.991465 -0.115581 0.0603104, -0.897094 -0.436169 0.0705574, -0.968609 -0.245993 0.0358352, + -0.969366 -0.245442 0.009348, -0.991378 0.11478 0.0632071, -0.883982 0.460215 0.0823271, -0.989828 0.141125 0.0180305, + -0.869426 0.49349 0.0238023, -0.867249 0.418842 0.269167, -0.866691 0.380535 0.322553, -0.81418 0.103444 0.571323, + -0.633223 -0.17014 0.755037, -0.779685 0.113734 0.615756, -0.574884 -0.160546 0.80233, -0.874771 0.323198 0.360998, + -0.811674 0.0974815 0.575919, -0.639061 -0.151482 0.754092, -0.952006 0.29094 0.0950694, -0.943703 0.278587 0.178363, + -0.897541 0.43227 0.0869593, -0.88227 0.453898 0.124806, -0.983042 -0.0757135 0.167021, -0.865666 -0.4364 0.24531, + -0.928787 -0.0685198 0.364226, -0.754468 -0.580032 0.30715, -0.796493 -0.409068 0.445267, -0.912093 0.322033 0.253735, + -0.876818 0.068611 0.475902, -0.88862 0.305767 0.341849, -0.741518 -0.254178 0.620922, -0.682886 -0.503448 0.529346, + -0.578726 -0.385992 0.718392, -0.878661 -0.346923 0.328023, -0.907519 -0.350996 0.230677, -0.939271 -0.283873 0.192836, + -0.893359 -0.437744 0.101438, -0.873683 -0.0599957 0.482782, -0.793391 -0.0829272 0.603037, -0.659668 0.148771 0.736685, + -0.714973 0.26652 0.64636, -0.934824 0.0752155 0.347056, -0.620687 0.425524 0.658541, -0.778625 0.392722 0.489401, + -0.960494 -0.257006 0.106764, -0.984302 0.0627022 0.164977, -0.873327 0.410351 0.262511, -0.716149 0.528217 0.456198, + -0.771368 0.594301 0.227593, -0.961977 -0.272995 0.00862292, -0.984649 -0.174214 0.0107483, -0.99734 0.070984 0.0165529, + -0.84318 0.53709 0.0241084, -0.903766 0.427414 0.0228909, -0.980822 0.193984 0.0189287, -0.977032 -0.210483 0.0332448, + -0.984199 0.168996 0.0528377, -0.873156 0.481362 0.0767378, -0.909255 0.320575 0.265493, -0.944294 0.246215 0.218375, + -0.969158 0.212981 0.123984, -0.872165 0.0529898 0.486333, -0.708006 -0.274968 0.650477, -0.932066 -0.0871374 0.351653, + -0.76784 -0.409204 0.492924, -0.983073 -0.0771575 0.166173, -0.860558 -0.445354 0.247184, -0.964265 -0.245853 0.0987394, + -0.952189 -0.236971 0.192822, -0.916242 -0.285693 0.280856, -0.982119 0.0890446 0.16587, -0.855016 0.457152 0.244868, + -0.925769 0.0795257 0.369632, -0.784699 0.426558 0.449773, -0.876465 -0.0616807 0.477498, -0.879036 -0.362341 0.309846, + -0.812408 -0.100412 0.574379, -0.719393 0.267972 0.640832, -0.615382 0.163157 0.771158, -0.86683 -0.381168 0.321429, + -0.600063 0.133467 0.78874, -0.467456 0.264913 0.84339, -0.789816 -0.132702 0.598817, 0.358727 -0.933072 0.0263004, + 0.384835 -0.922605 0.0265011, 0.37828 -0.925316 0.0263665, 0.357741 -0.933456 0.0260964, 0.358373 -0.933215 0.026042, + 0.358772 -0.933022 0.0274439, 0.400245 -0.915941 0.0292575, 0.489112 -0.870027 0.0618214, 0.402176 -0.915142 0.027757, + 0.357659 -0.933491 0.0259677, 0.399242 -0.916473 0.0261441, 0.358294 -0.933241 0.0262205, 0.358323 -0.933205 0.0270625, + 0.388916 -0.916189 0.0966526, 0.392826 -0.915007 0.0919267, 0.434474 -0.894619 0.10435, 0.989307 -0.144533 0.0195218, + 0.936626 -0.349345 0.0262737, 0.982133 -0.18643 0.0256794, 0.809905 -0.585977 0.0261721, 0.919253 -0.392792 0.0262247, + 0.9732 -0.211838 0.0894811, 0.900347 -0.434382 0.0262294, 0.783765 -0.620505 0.0261839, 0.628372 -0.77747 0.026254, + 0.592532 -0.805121 0.0261823, 0.480575 -0.876571 0.0258988, 0.755709 -0.65439 0.0260496, 0.556182 -0.830648 0.0261694, + 0.982819 0.182684 0.0263394, 0.996555 0.0786925 0.0261814, 0.984363 0.17426 0.0257476, 0.999738 -0.00842735 0.0212829, + 0.99774 0.0607529 0.0287019, 0.977884 0.187315 0.0930423, 0.994877 0.0962048 0.0310595, 0.997123 -0.011109 0.0749829, + 0.999653 0 0.0263378, 0.997473 -0.0663659 0.0253758, 0.994877 -0.0962048 0.0310595, 0.382607 0.923541 0.0261417, + 0.556066 0.830725 0.026192, 0.479829 0.876979 0.0259403, 0.628719 0.777191 0.0261886, 0.455904 0.882185 0.117906, + 0.556182 0.830648 0.0261694, 0.755709 0.65439 0.0260496, 0.799731 0.599789 0.0261433, 0.783377 0.620993 0.02623, + 0.919253 0.392792 0.0262247, 0.936626 0.349345 0.0262737, 0.900347 0.434382 0.0262294, 0.384835 0.922605 0.0265011, + 0.358727 0.933072 0.0263004, 0.378325 0.925297 0.026363, 0.357741 0.933456 0.0260964, 0.357659 0.933491 0.0259677, + 0.359108 0.932893 0.0274241, 0.40044 0.915856 0.0292597, 0.402348 0.915066 0.0277587, 0.447925 0.891928 0.0618704, + 0.385909 0.918926 0.0815482, 0.358294 0.933241 0.0262205, 0.358323 0.933205 0.0270625, 0.388916 0.916189 0.0966526, + 0.358475 0.933177 0.0260215, 0.58136 0 0.813646, 0.499389 0 0.866378, 0.502122 0.0147527 0.864671, 0.500813 0 0.865556, + 0.501936 0.0348635 0.864202, 0.486131 0.0626333 0.871638, 0.57802 0.0638221 0.813523, 0.509076 0.140279 0.849213, + 0.472505 0.0431224 0.880272, 0.497362 0.0560786 0.865729, 0.494045 0.0761265 0.866097, 0.500955 0.0278173 0.865026, + 0.498949 0.0410123 0.86566, 0.512348 0.055832 0.856961, 0.505718 0.0775984 0.859202, 0.491193 0.0869827 0.866697, + 0.550459 0.200566 0.810413, 0.497791 -0.078816 0.863709, 0.48078 -0.0516148 0.875321, 0.50859 -0.140064 0.84954, + 0.468284 -0.0309455 0.883036, 0.578394 -0.0642313 0.813225, 0.501936 -0.0348635 0.864202, 0.497362 -0.0560786 0.865729, + 0.502122 -0.0147527 0.864671, 0.494045 -0.0761265 0.866097, 0.498949 -0.0410123 0.86566, 0.53629 -0.0809894 0.840139, + 0.491193 -0.0869827 0.866697, 0.545752 -0.168501 0.82083, 0.515914 -0.0562514 0.854791, 0.500955 -0.0278173 0.865026, + 0.822377 0.568331 0.0263721, 0.681346 0.731676 0.0204327, 0.508086 0.860888 0.0268416, 0.688295 0.724877 0.0283428, + 0.67049 0.741285 0.0306633, 0.834201 0.550776 0.0274661, 0.443998 0.895517 0.0302573, 0.378416 0.925256 0.0264919, + 0.834201 -0.550776 0.0274661, 0.813651 -0.580665 0.0283067, 0.67049 -0.741285 0.0306633, 0.688296 -0.724878 0.0283028, + 0.378416 -0.925256 0.0264919, 0.443998 -0.895517 0.0302573, 0.508108 -0.860875 0.0268237, 0.666536 -0.74511 0.0232735, + 0.896459 -0.442277 0.027416, 0.867091 -0.496402 0.0416852, 0.800933 -0.598097 0.0280465, 0.931417 -0.328819 0.156014, + 0.929646 -0.272515 0.247981, 0.883576 -0.220297 0.413235, 0.862123 -0.194186 0.468013, 0.942758 -0.141597 0.301923, + 0.966877 -0.0253373 0.253981, 0.869244 -0.0192469 0.494009, 0.824245 -0.14005 0.54864, 0.778991 -0.235169 0.581265, + 0.789175 -0.0499164 0.612136, 0.956824 0.0800802 0.279418, 0.726884 -0.170934 0.665147, 0.609209 -0.127007 0.782773, + 0.688763 -0.101137 0.717898, 0.658496 0.107286 0.744898, 0.751627 0.0229694 0.659188, 0.733379 0.0927476 0.673463, + 0.603762 -0.0599211 0.79491, 0.686173 -0.0777803 0.723268, 0.828832 0.00515164 0.559474, 0.838299 0.0598437 0.541916, + 0.791865 -0.0306015 0.609929, 0.985566 0.0465233 0.162775, 0.961122 0.209227 0.180188, 0.816695 0.008995 0.577, + 0.829351 0.000322893 0.558729, 0.923909 0.213021 0.317828, 0.921278 0.284124 0.265557, 0.829391 0.205949 0.519322, + 0.854493 0.255952 0.452029, 0.760228 0.27609 0.588071, 0.697034 0.144497 0.702328, 0.57402 0.0846785 0.814451, + 0.660196 0.167211 0.732244, 0.570575 0.130307 0.810842, 0.843303 -0.535016 0.050974, 0.728061 -0.676928 0.108143, + 0.866381 -0.49207 0.0851508, 0.756372 -0.648223 0.0877951, 0.8949 -0.42592 0.133212, 0.797284 -0.569293 0.200608, + 0.909857 -0.374863 0.177869, 0.844956 -0.453344 0.283775, 0.567573 -0.804646 0.174372, 0.681973 -0.651982 0.33141, + 0.854436 -0.359729 0.374878, 0.754467 -0.461551 0.466636, 0.571237 0.816656 0.0822276, 0.555412 0.807383 0.199123, + 0.666442 0.667395 0.332324, 0.669228 0.725449 0.1608, 0.706071 0.705542 0.060618, 0.756815 0.592901 0.275136, + 0.815496 0.438066 0.378239, 0.732071 0.488894 0.474399, 0.828919 0.526984 0.187566, 0.868051 0.424335 0.257735, + 0.841509 0.371993 0.391769, 0.766885 0.630462 0.120024, 0.829868 0.553311 0.0718733, 0.874478 0.471634 0.113354, + 0.828344 -0.344695 0.441625, 0.894615 0.417048 0.16042, 0.880508 0.378579 0.285279, 0.268805 0.864405 -0.42491, + 0.468832 0.838031 0.279108, 0.433665 0.889156 0.14607, 0.49992 0.827467 0.255692, 0.549436 0.640994 0.535954, + 0.569162 0.394549 0.721378, 0.611595 0.644515 0.45886, 0.661093 0.39061 0.640609, 0.668777 0.307382 0.676944, + 0.534275 0.775203 0.337063, 0.459013 0.843208 0.279834, 0.528105 0.653799 0.541897, 0.568243 0.619899 0.541133, + 0.556963 0.383853 0.736512, 0.538468 0.384347 0.749887, 0.521977 0.246206 0.816653, 0.93972 0.17815 0.291871, + 0.927686 0.338409 0.157726, 0.885239 0.378679 0.270099, 0.779937 0.573594 0.250375, 0.812236 0.559723 0.164263, + 0.646737 0.742482 0.174505, 0.754155 0.417621 0.506797, 0.832529 0.259109 0.48965, 0.694322 0.165927 0.700275, + 0.807913 0.104522 0.579958, 0.640483 0.263637 0.721303, 0.587468 0.140545 0.79695, 0.644628 0.707435 0.289811, + 0.643331 0.532269 0.550286, 0.569625 0.17682 0.802659, 0.595901 0.290093 0.748831, 0.543501 0.209348 0.812884, + 0.970721 0.0329297 0.237943, 0.986147 0.0555584 0.15629, 0.988201 0.0328051 0.14961, 0.95702 0.0657863 0.282464, + 0.701302 0.049332 0.711155, 0.842544 0.0264717 0.537976, 0.870311 0.0663499 0.488012, 0.602279 0.043017 0.797126, + 0.946701 -0.164572 0.276899, 0.984077 -0.0777272 0.159845, 0.957859 -0.0648976 0.27981, 0.701302 -0.049332 0.711155, + 0.825074 -0.103288 0.555504, 0.870612 -0.0536903 0.489032, 0.947162 -0.032594 0.319095, 0.813338 -0.0246064 0.581271, + 0.602279 -0.043017 0.797126, 0.52917 -0.785088 0.321893, 0.585137 -0.796936 0.150025, 0.661052 -0.69742 0.276796, + 0.798095 -0.53155 0.283723, 0.7669 -0.625322 0.144351, 0.89888 -0.413138 0.146057, 0.64433 -0.559045 0.521831, + 0.56448 -0.600276 0.566596, 0.559897 -0.389196 0.731465, 0.600753 -0.311765 0.736138, 0.74927 -0.385957 0.538174, + 0.554096 -0.193138 0.809738, 0.629779 -0.236799 0.7398, 0.900125 -0.336596 0.276548, 0.832529 -0.259109 0.48965, + 0.679193 -0.16436 0.71532, 0.574814 -0.164425 0.801594, 0.590519 -0.129566 0.796555, 0.479784 -0.828661 0.28832, + 0.467644 -0.829081 0.306488, 0.544999 -0.658183 0.519395, 0.53904 -0.381527 0.750915, 0.573309 -0.401992 0.713946, + 0.521977 -0.246206 0.816653, 0.530324 -0.638906 0.557276, 0.434438 -0.89121 0.130418, 0.503149 -0.829778 0.241475, + 0.60832 -0.638958 0.470828, 0.673057 -0.422199 0.607242, 0.647793 -0.284747 0.7066, 0 0 -1, -7.70583e-019 0 -1, + -5.13722e-019 0 -1, -0.0734999 -0.00968918 -0.997248, -0.00810111 -0.0838765 -0.996443, -0.0776248 -0.0887101 -0.993028, + -0.131612 -0.0653622 -0.989144, -0.0377708 -0.111541 -0.993042, -0.00771163 -0.117407 -0.993054, + 0.0621946 -0.0562918 -0.996475, 0.0461801 0.0461842 -0.997865, 0.0878866 0.0434288 -0.995183, 0.111492 -0.0377922 -0.993047, + 0.146545 0.00966322 -0.989157, 0.0782428 -0.0600138 -0.995126, 0.0738548 0.0646998 -0.995168, 0.00961809 0.0977849 -0.995161, + 0 0.0977877 -0.995207, 0.00697197 -0.0978541 -0.995176, 0 -0.0978706 -0.995199, -0.00697347 0.0651916 -0.997848, + -0.0129216 0.130459 -0.99137, -0.0736173 0.00490549 -0.997275, -0.0521473 0.105645 -0.993036, -0.0884893 0.0776809 -0.993043, + -3.70718e-017 0 -1, -4.71017e-017 0 -1, -6.28023e-017 0 -1, 6.09517e-019 0 -1, 1.01586e-018 0 -1, + -0.139303 0.047114 -0.989128, 0.0113319 0.1174 -0.99302, 0 0.130424 -0.991458, 0.0223716 0 -0.99975, + 0.0202718 -0.00530123 -0.99978, 0.0461832 -0.0461782 -0.997865, 0.703638 -0.703686 -0.0985873, 0.707104 -0.707104 -0.00282778, + 0.707087 -0.707125 -0.00141389, 0.704404 -0.704443 -0.0870394, -0.995265 0.000203897 -0.0971956, -0.995178 0.0980877 0, + -0.98617 0.116993 -0.11739, -0.919679 0.380047 -0.0987703, -0.980758 0.195229 0, -0.923835 0.382791 0, + -0.703798 0.703662 -0.0976179, -0.382155 0.924098 0, -0.354856 0.93117 -0.0836608, -0.195131 0.980777 0, + -0.0650266 0.993092 -0.097675, -0.706655 0.707558 0, -0.89649 0.443064 0, -0.658153 0.752884 0, -0.130647 0.991429 0, + -0.0981119 0.995175 0, -0.101223 0.990093 -0.0973157, -0.32096 -0.947093 0, -0.0800576 -0.988252 -0.130185, + -0.195277 -0.980748 0, -0.658577 -0.752513 0, -0.382945 -0.923771 0, -0.706681 -0.707532 0, -0.0981119 -0.995175 0, + -0.443251 -0.896398 0, -0.896294 -0.443461 0, -0.997845 -0.0656195 0, -0.923877 -0.38269 0, -0.947345 0.320214 0, + -0.999603 0.0281722 0, -0.195277 0.980748 0, -0.382945 0.923771 0, -0.706681 0.707532 0, -0.75172 0.659483 0, + -0.907797 0.419409 0, -0.947345 -0.320214 0, -0.75172 -0.659483 0, -0.923877 0.38269 0, -0.658577 0.752513 0, + -0.0972596 -0.990513 -0.0970758, -0.130647 -0.991429 0, -0.379881 -0.919869 -0.0976332, -0.195131 -0.980777 0, + -0.382155 -0.924098 0, -0.703025 -0.704343 -0.0982686, -0.923835 -0.382791 0, -0.930793 -0.355572 -0.0848104, + -0.980758 -0.195229 0, -0.990402 -0.0976348 -0.097833, -0.706655 -0.707558 0, -0.442265 -0.896885 0, -0.752043 -0.659115 0, + -0.995178 -0.0980877 0, -0.995265 -0.000203897 -0.0971956, 0.773474 0.633828 -0.000710944, 0.707055 0.707153 -0.00282984, + 0.703533 0.703795 -0.0985577, 0.780007 0.614492 -0.118273, 0.919445 0.380935 -0.0975191, 0.832345 0.554257 0, + 0.924041 0.382293 0, 0.995185 0.000697013 -0.0980167, 0.923791 -0.382897 0, 0.909429 -0.407364 -0.0836321, + 0.831655 -0.555293 0, 0.748262 -0.656094 -0.0982088, 1 -3.1571e-005 0, 0.947181 0.320699 0, 0.99779 -0.0664534 0, + 0.793546 -0.60851 0, 0.757371 -0.652985 0, 0.753654 -0.650089 -0.0969021, 0.260701 0.962256 -0.078093, + 0.0877218 0.98923 -0.117171, 0.146858 0.989158 0, 0.534087 0.838012 -0.111749, 0.29017 0.956975 0, 0.555165 0.83174 0, + 0.0736287 0.997286 0, 0.336997 0.941506 0, 0.74061 0.671935 0, 0.909369 0.408582 -0.0781609, 0.773025 0.634375 0, + 0.989177 0.146727 0, 0.931942 0.362608 0, 0.803503 -0.595301 0, 0.882058 -0.471141 0, 0.980757 -0.195234 0, + 0.984495 -0.145662 -0.0977384, 0.997677 0.0681196 0, 0.803538 0.595254 0, 0.595531 0.803332 0, 0.92406 0.382247 0, + 0.995218 0.0976834 0, 0.969937 -0.243355 0, 0 0.995158 -0.098288, 0 1 0, 0.0652402 -0.99787 0, 0 -1 0, 0 -0.995199 -0.0978706, + 0.120162 -0.9897 -0.0778142, 0.38276 0.923848 0, 0.0966069 0.98903 -0.111742, 0.658996 0.752146 0, 0.707283 0.706931 0, + 0.896509 0.443025 0, 0.923818 0.382832 0, 0.194885 0.980826 0, 0.94709 -0.320967 0, 0.997799 0.0663113 0, 1 0 0, + 0.923818 -0.382832 0, 0.752474 -0.658622 0, 0.707283 -0.706931 0, 0.443133 -0.896456 0, 0.94709 0.320967 0, + 0.38276 -0.923848 0, 0.752474 0.658622 0, 0.0652402 0.99787 0, 0.997799 -0.0663113 0, 0.896509 -0.443025 0, + 0.320705 -0.947179 0, 0.194885 -0.980826 0, 0.658996 -0.752146 0, 0 0.997871 -0.065212, 0 0.938359 -0.345663, + 0 0.8967 -0.442639, 0 0.980679 -0.195624, 0 0.727544 -0.686061, 0 0.443488 -0.89628, 0 0.707778 -0.706435, + 0 0.382973 -0.92376, 0.0455346 0.922935 -0.382253, 0.0555815 0.706109 -0.705918, 0 0.194638 -0.980875, + 0.0327128 0.382521 -0.923368, 0.715191 -0.568621 -0.406414, 0.881057 -0.322615 -0.345916, 0.923333 0.00505839 -0.383966, + 0.664873 -0.292759 -0.687194, 0.315136 -0.261806 -0.912221, 0.548849 -0.449503 -0.704778, 0.358172 -0.135149 -0.923822, + 0.686077 0.0238905 -0.727137, 0.3454 -0.0079448 -0.938422, 0.851066 0.357872 -0.384207, 0.665699 0.311931 -0.677897, + 0.71281 0.588096 -0.382159, 0.545569 0.453015 -0.705075, 0.379923 0.151083 -0.912597, 0.292757 0.24807 -0.923447, + 0.693167 0.69315 -0.197642, 0.653062 0.653091 -0.383382, 0.499666 0.499692 -0.70756, 0.270781 0.270775 -0.923774, + 0.633776 0.633825 -0.443389, 0.466014 0.465914 -0.752167, 0.137889 0.137906 -0.9808, 0.226587 0.226624 -0.947259, + 0.693658 -0.693426 -0.194932, 0.717545 -0.618776 -0.319758, 0.65337 -0.653173 -0.382717, 0.485866 -0.486029 -0.726437, + 0.287328 -0.253739 -0.923612, 0.555141 -0.470884 -0.685628, 0.243893 -0.243865 -0.938641, 0.137555 -0.137586 -0.980892, + 0.267883 0.883931 -0.383281, 0.1802 0.653751 -0.734941, 0.788126 0.584101 -0.194123, 0.706367 0.61776 -0.34557, + 0.856216 0.374129 -0.35626, 0.363181 0.606559 -0.707238, 0.525026 0.740311 -0.419865, 0.554155 0.469983 -0.687043, + 0.970478 0.144048 -0.193451, 0.119477 0.363486 -0.923906, 0.0656628 0.183558 -0.980813, 0.220241 0.312996 -0.923865, + 0.301769 0.235646 -0.9238, 0.116285 0.15655 -0.980801, 0.156426 0.115909 -0.980865, 0.29622 0.122717 -0.947203, + 0.641198 0.246182 -0.726815, 0.919656 0.0868862 -0.382994, 0.706321 0.0344302 -0.707054, 0.90533 -0.183768 -0.382893, + 0.379793 0.046585 -0.923898, 0.79058 -0.422711 -0.443055, 0.865231 -0.462593 -0.193346, 0.605803 -0.30451 -0.735035, + 0.715203 -0.167986 -0.678429, 0.434334 -0.0863772 -0.896601, 0.192738 0.0286788 -0.980831, 0.190857 -0.0379471 -0.980884, + 0.179354 0.0742767 -0.980977, 0.332931 -0.188267 -0.923966, 0.167214 -0.100385 -0.980797, -0.756878 0.000462896 -0.653556, + -0.925227 -0.00032745 -0.379414, -0.924454 -0.000131035 -0.381293, -0.98068 0 -0.195618, -0.452663 0.000316711 -0.891682, + -0.709254 -5.46625e-005 -0.704953, -0.124204 -0.000324974 -0.992257, -0.0160961 -6.55114e-005 -0.99987, + -0.384944 -0.000319038 -0.92294, -0.147201 -0.000164167 -0.989107, -0.920128 -0.0910917 -0.380877, + -0.676931 -0.0556433 -0.73394, -0.381862 -0.0435367 -0.923193, -0.103548 0.907472 -0.407152, -0.39502 0.85125 -0.345446, + -0.656644 0.648921 -0.384343, -0.262835 0.676922 -0.687527, -0.0526592 0.418314 -0.906775, -0.0555347 0.677161 -0.733736, + -0.157489 0.348512 -0.923979, -0.501766 0.468587 -0.727088, -0.238352 0.250342 -0.938359, -0.855058 0.349221 -0.383301, + -0.691525 0.251241 -0.677253, -0.910402 0.0760645 -0.406673, -0.676289 0.0777225 -0.732525, -0.374654 0.161729 -0.91295, + -0.381861 0.0314866 -0.923683, -0.924454 0.000131035 -0.381293, -0.688499 4.68416e-005 -0.725237, + -0.323332 0.000318406 -0.946286, -0.756878 -0.000462896 -0.653556, -0.925227 0.00032745 -0.379414, + -0.452663 -0.000316711 -0.891682, -0.106215 0.00040629 -0.994343, -0.147201 0.000164167 -0.989107, + -0.0160961 6.55114e-005 -0.99987, 0 0.980843 -0.194801, -0.0999025 0.942329 -0.319431, -0.0857234 0.724011 -0.684441, + 0 0.923819 -0.38283, 0 0.194802 -0.980843, -0.0293849 0.356014 -0.934019, 0 0.38283 -0.923819, 0 0.707107 -0.707107, + -0.278037 -0.940728 -0.194233, -0.261723 -0.885969 -0.382833, -0.49261 -0.848359 -0.193966, -0.0531561 -0.906444 -0.418968, + -0.0652376 -0.732844 -0.677262, -0.186523 -0.631636 -0.752493, -0.538832 -0.750527 -0.382582, -0.744643 -0.63897 -0.192936, + -0.913749 -0.357815 -0.192436, -0.844196 -0.410339 -0.3449, -0.972844 -0.131007 -0.190818, -0.92335 -0.142662 -0.356471, + -0.378183 -0.629501 -0.678753, -0.704787 -0.572561 -0.418867, -0.657791 -0.308009 -0.687344, -0.513708 -0.485434 -0.70743, + -0.975382 0.102606 -0.195195, -0.09232 -0.332718 -0.938497, -0.0275133 -0.408639 -0.912281, -0.218551 -0.345205 -0.912726, + -0.0642332 -0.18429 -0.980771, -0.113813 -0.158472 -0.980782, -0.296316 -0.242369 -0.923826, -0.353373 -0.148712 -0.923587, + -0.154258 -0.119789 -0.980742, -0.181749 -0.0712251 -0.980762, -0.31808 -0.0431149 -0.947083, -0.68266 -0.0748213 -0.726896, + -0.906142 0.375138 -0.195395, -0.912042 0.144659 -0.383737, -0.834389 0.397205 -0.382131, -0.69314 0.142045 -0.706668, + -0.379593 0.0495334 -0.923827, -0.624381 0.331394 -0.707337, -0.678123 0.603343 -0.419674, -0.385297 0.163545 -0.908185, + -0.710629 0.676298 -0.193977, -0.336689 0.921354 -0.194286, -0.400761 0.819706 -0.409233, -0.510775 0.528362 -0.678191, + -0.2995 0.60873 -0.734675, -0.299197 0.278436 -0.912664, -0.193826 0.0203189 -0.980826, -0.176376 0.0831551 -0.980804, + -0.193152 -0.0262298 -0.980818, -0.133342 0.143398 -0.980641, -0.144561 0.354177 -0.923938, -0.0669823 0.183222 -0.980787, + -0.851205 -0.395279 -0.345259, -0.649531 -0.656724 -0.383175, -0.677478 -0.263406 -0.686761, -0.348289 -0.157833 -0.924004, + -0.467314 -0.502402 -0.727469, -0.249443 -0.239168 -0.938391, -0.348891 -0.855249 -0.383177, -0.249742 -0.690563 -0.678787, + -0.0881729 -0.920375 -0.380967, -0.0650218 -0.705521 -0.7057, -0.16156 -0.375215 -0.91275, -0.0318296 -0.382532 -0.923394, + 0 -0.980843 -0.194801, 0 -0.923819 -0.38283, 0 -0.686802 -0.726844, 0 -0.345717 -0.938339, 0 -0.194802 -0.980843, + 0.634189 -0.634154 -0.442327, 0.656054 -0.656496 -0.372298, 0.509282 -0.509811 -0.693343, 0.558647 -0.558456 -0.613221, + 0.694173 -0.694659 -0.188609, 0.466017 -0.466042 -0.752085, 0.226395 -0.226448 -0.947347, 0.107261 -0.108119 -0.988335, + 0.287318 -0.287927 -0.913535, 0.676014 -0.676111 -0.293051, 0.368399 -0.36794 -0.853758, 0.152065 -0.119383 -0.981134, + 0.0753702 -0.0314068 -0.996661, 0.0666845 -4.14722e-005 -0.997774, 0.0448206 -5.52566e-005 -0.998995, + 0.0447815 -8.28849e-005 -0.998997, 0.0997429 -0.942308 -0.319543, 0.0342543 -0.382435 -0.923347, 0.085623 -0.724048 -0.684415, + 0 -0.896398 -0.443251, 0 -0.707107 -0.707107, 0 -0.38283 -0.923819, 0.277877 0.940582 -0.195165, 0.261716 0.885924 -0.38294, + 0.492769 0.847955 -0.195322, 0.0530113 0.906451 -0.41897, 0.0650667 0.732859 -0.677262, 0.186681 0.631738 -0.752367, + 0.538942 0.750501 -0.382478, 0.744423 0.638227 -0.196216, 0.913183 0.357599 -0.195498, 0.84398 0.409838 -0.346021, + 0.972141 0.131433 -0.194082, 0.923429 0.14246 -0.356349, 0.37857 0.629824 -0.678238, 0.70496 0.57207 -0.419246, + 0.658534 0.308071 -0.686604, 0.514284 0.485874 -0.706709, 0.975523 -0.102217 -0.194697, 0.0923524 0.33305 -0.938376, + 0.027493 0.408711 -0.91225, 0.218469 0.345126 -0.912776, 0.0641489 0.184186 -0.980796, 0.1138 0.158438 -0.980789, + 0.296125 0.242157 -0.923943, 0.352437 0.148398 -0.923995, 0.154046 0.119714 -0.980785, 0.181465 0.0710962 -0.980824, + 0.317431 0.0429903 -0.947306, 0.68238 0.0748726 -0.727153, 0.906536 -0.374584 -0.194625, 0.912345 -0.14381 -0.383334, + 0.834186 -0.397025 -0.38276, 0.692913 -0.141141 -0.707072, 0.379312 -0.0494056 -0.923949, 0.624594 -0.331986 -0.706871, + 0.677755 -0.603798 -0.419613, 0.385748 -0.163677 -0.907969, 0.710021 -0.676551 -0.195316, 0.336587 -0.921201 -0.195185, + 0.400947 -0.819599 -0.409267, 0.51085 -0.528922 -0.677697, 0.299598 -0.608671 -0.734684, 0.298875 -0.278147 -0.912857, + 0.193826 -0.0203188 -0.980826, 0.176255 -0.0830367 -0.980836, 0.193162 0.0261533 -0.980818, 0.133168 -0.14318 -0.980697, + 0.144407 -0.353906 -0.924066, 0.0670134 -0.183399 -0.980752, 0 0.947172 -0.320725, 0 0.686802 -0.726844, 0 0.443251 -0.896398, + 0 0.7522 -0.658935, 0 0.345717 -0.938339] + } + coordIndex [ + 48, 47, 46, -1,50, 49, 36, -1,49, 48, 942, -1,50, 33, 32, -1,31, 30, 51, -1,30, 29, + 51, -1,51, 32, 31, -1,32, 51, 50, -1,943, 33, 50, -1,52, 51, 28, -1,54, 53, 25, -1, + 23, 55, 1450, -1,26, 53, 52, -1,24, 1450, 54, -1,52, 28, 27, -1,53, 1451, 25, -1, + 54, 25, 24, -1,26, 52, 27, -1,29, 28, 51, -1,41, 40, 46, -1,39, 46, 40, -1,38, 941, + 39, -1,46, 39, 941, -1,37, 941, 38, -1,46, 941, 48, -1,1445, 20, 57, -1,42, 45, 44, -1, + 44, 43, 42, -1,45, 42, 41, -1,41, 46, 45, -1,58, 1444, 19, -1,942, 36, 49, -1,36, + 943, 50, -1,35, 34, 943, -1,942, 48, 941, -1,36, 942, 37, -1,943, 36, 35, -1,941, + 37, 942, -1,34, 33, 943, -1,1444, 58, 20, -1,22, 56, 55, -1,20, 58, 57, -1,1451, + 53, 26, -1,21, 57, 56, -1,57, 21, 1445, -1,18, 59, 19, -1,59, 58, 19, -1,17, 59, + 18, -1,59, 15, 60, -1,14, 944, 60, -1,1449, 1448, 55, -1,60, 11, 61, -1,61, 946, + 62, -1,16, 59, 17, -1,60, 15, 14, -1,14, 13, 944, -1,16, 15, 59, -1,1, 0, 62, -1, + 54, 1450, 55, -1,11, 944, 12, -1,10, 945, 11, -1,60, 944, 11, -1,946, 945, 10, -1, + 61, 11, 945, -1,13, 12, 944, -1,10, 9, 946, -1,8, 946, 9, -1,7, 1, 8, -1,946, 8, + 1, -1,6, 1, 7, -1,946, 61, 945, -1,2, 6, 5, -1,5, 4, 3, -1,5, 3, 2, -1,1447, 56, + 22, -1,2, 1, 6, -1,56, 1447, 1446, -1,946, 1, 62, -1,1448, 22, 55, -1,55, 23, 1449, -1, + 1446, 21, 56, -1,1, 92, 0, -1,949, 94, 93, -1,948, 93, 92, -1,91, 947, 1, -1,947, + 92, 1, -1,89, 949, 948, -1,948, 92, 947, -1,948, 949, 93, -1,90, 948, 947, -1,949, + 95, 94, -1,74, 956, 1452, -1,951, 96, 95, -1,98, 97, 79, -1,952, 97, 96, -1,86, 951, + 950, -1,95, 950, 951, -1,98, 79, 953, -1,952, 79, 97, -1,952, 96, 951, -1,80, 952, + 951, -1,77, 954, 953, -1,949, 950, 95, -1,87, 950, 949, -1,91, 1, 2, -1,89, 948, + 90, -1,91, 90, 947, -1,87, 949, 88, -1,85, 951, 86, -1,87, 86, 950, -1,89, 88, 949, -1, + 952, 80, 79, -1,953, 78, 77, -1,78, 953, 79, -1,85, 84, 83, -1,85, 82, 81, -1,82, + 85, 83, -1,951, 85, 81, -1,951, 81, 80, -1,99, 98, 953, -1,955, 100, 99, -1,957, + 102, 101, -1,1452, 956, 101, -1,76, 955, 954, -1,99, 954, 955, -1,74, 957, 956, -1, + 101, 956, 957, -1,100, 1452, 101, -1,100, 955, 1452, -1,957, 103, 102, -1,77, 76, + 954, -1,959, 104, 103, -1,960, 105, 959, -1,959, 105, 104, -1,67, 959, 958, -1,959, + 103, 958, -1,961, 106, 105, -1,106, 46, 47, -1,46, 106, 961, -1,957, 958, 103, -1, + 68, 958, 957, -1,75, 955, 76, -1,73, 957, 74, -1,75, 1452, 955, -1,69, 72, 71, -1, + 71, 70, 69, -1,69, 73, 72, -1,957, 73, 69, -1,67, 958, 68, -1,67, 66, 959, -1,105, + 960, 961, -1,69, 68, 957, -1,961, 960, 64, -1,65, 959, 66, -1,961, 64, 63, -1,46, + 961, 63, -1,64, 960, 65, -1,63, 45, 46, -1,960, 959, 65, -1,99, 953, 954, -1,117, + 118, 114, -1,113, 114, 112, -1,117, 114, 116, -1,112, 114, 111, -1,114, 115, 116, -1, + 114, 118, 110, -1,107, 108, 120, -1,120, 108, 119, -1,110, 118, 119, -1,114, 110, + 111, -1,110, 119, 108, -1,108, 109, 110, -1,962, 126, 125, -1,127, 126, 962, -1,962, + 124, 123, -1,125, 124, 962, -1,127, 962, 963, -1,963, 962, 123, -1,963, 128, 127, -1, + 964, 108, 128, -1,121, 108, 964, -1,963, 123, 964, -1,122, 964, 123, -1,122, 109, + 121, -1,122, 121, 964, -1,128, 963, 964, -1,965, 134, 133, -1,966, 134, 965, -1,132, + 965, 133, -1,131, 965, 132, -1,965, 131, 130, -1,966, 965, 130, -1,966, 135, 134, -1, + 126, 135, 967, -1,125, 126, 967, -1,130, 129, 966, -1,129, 967, 966, -1,967, 129, + 124, -1,124, 125, 967, -1,135, 966, 967, -1,164, 150, 165, -1,165, 149, 166, -1,150, + 149, 165, -1,137, 136, 150, -1,150, 163, 162, -1,163, 150, 164, -1,161, 137, 162, -1, + 162, 137, 150, -1,145, 148, 147, -1,166, 149, 167, -1,147, 1453, 145, -1,167, 149, + 148, -1,168, 148, 151, -1,148, 145, 152, -1,152, 145, 144, -1,152, 151, 148, -1,167, + 148, 168, -1,138, 161, 160, -1,139, 159, 158, -1,159, 138, 160, -1,158, 157, 139, -1, + 156, 139, 157, -1,140, 139, 156, -1,155, 140, 156, -1,138, 159, 139, -1,138, 137, + 161, -1,144, 153, 152, -1,141, 154, 153, -1,153, 144, 141, -1,140, 155, 141, -1,143, + 142, 144, -1,141, 144, 142, -1,155, 154, 141, -1,1453, 147, 146, -1,169, 170, 171, -1, + 169, 171, 172, -1,182, 169, 172, -1,183, 169, 182, -1,172, 181, 182, -1,177, 180, + 181, -1,173, 177, 181, -1,174, 175, 177, -1,173, 174, 177, -1,177, 179, 180, -1,177, + 175, 176, -1,177, 178, 179, -1,181, 172, 173, -1,968, 190, 169, -1,969, 968, 188, -1, + 189, 968, 169, -1,183, 968, 189, -1,188, 968, 183, -1,969, 190, 968, -1,185, 184, + 191, -1,970, 185, 191, -1,188, 187, 969, -1,970, 969, 187, -1,187, 186, 970, -1,185, + 970, 186, -1,970, 191, 969, -1,190, 969, 191, -1,185, 197, 184, -1,971, 198, 197, -1, + 186, 971, 185, -1,197, 185, 971, -1,196, 971, 186, -1,971, 972, 198, -1,972, 973, + 198, -1,192, 198, 973, -1,193, 192, 973, -1,196, 973, 972, -1,195, 973, 196, -1,195, + 194, 193, -1,195, 193, 973, -1,971, 196, 972, -1,207, 206, 226, -1,229, 228, 206, -1, + 206, 228, 227, -1,224, 208, 207, -1,224, 223, 209, -1,206, 227, 226, -1,207, 226, + 225, -1,207, 225, 224, -1,209, 208, 224, -1,233, 1454, 213, -1,202, 205, 204, -1, + 203, 202, 204, -1,232, 202, 201, -1,213, 1455, 214, -1,232, 205, 202, -1,206, 205, + 230, -1,201, 233, 232, -1,205, 232, 231, -1,205, 231, 230, -1,230, 229, 206, -1,1454, + 233, 201, -1,211, 222, 221, -1,211, 209, 222, -1,209, 223, 222, -1,221, 220, 211, -1, + 219, 212, 220, -1,211, 220, 212, -1,210, 209, 211, -1,212, 219, 218, -1,215, 233, + 213, -1,213, 1454, 1455, -1,213, 216, 215, -1,217, 212, 218, -1,200, 199, 214, -1, + 1455, 200, 214, -1,217, 213, 212, -1,213, 217, 216, -1,240, 234, 239, -1,239, 234, + 238, -1,236, 237, 238, -1,235, 238, 234, -1,238, 235, 236, -1,242, 247, 241, -1,247, + 242, 243, -1,246, 243, 245, -1,243, 246, 247, -1,244, 245, 243, -1,252, 268, 267, -1, + 267, 266, 253, -1,266, 265, 254, -1,264, 254, 265, -1,264, 263, 255, -1,255, 262, + 261, -1,255, 261, 260, -1,262, 255, 263, -1,248, 268, 251, -1,251, 250, 249, -1,252, + 267, 253, -1,251, 268, 252, -1,251, 249, 248, -1,260, 256, 255, -1,264, 255, 254, -1, + 259, 258, 257, -1,257, 260, 259, -1,256, 260, 257, -1,266, 254, 253, -1,273, 270, + 271, -1,273, 271, 272, -1,269, 273, 274, -1,273, 269, 270, -1,269, 274, 275, -1,276, + 277, 269, -1,275, 276, 269, -1,279, 281, 269, -1,280, 281, 279, -1,279, 269, 278, -1, + 277, 278, 269, -1,295, 283, 282, -1,295, 294, 287, -1,293, 292, 290, -1,292, 291, + 290, -1,294, 293, 289, -1,286, 283, 295, -1,286, 285, 284, -1,295, 287, 286, -1,289, + 293, 290, -1,288, 294, 289, -1,294, 288, 287, -1,286, 284, 283, -1,974, 280, 303, -1, + 296, 280, 974, -1,975, 974, 303, -1,975, 302, 301, -1,975, 301, 976, -1,282, 976, + 301, -1,975, 303, 302, -1,975, 297, 974, -1,297, 281, 296, -1,297, 975, 298, -1,976, + 298, 975, -1,282, 300, 976, -1,299, 976, 300, -1,300, 283, 299, -1,299, 298, 976, -1, + 296, 974, 297, -1,307, 308, 259, -1,977, 307, 306, -1,979, 305, 304, -1,305, 284, + 304, -1,306, 305, 978, -1,308, 307, 977, -1,309, 258, 977, -1,308, 977, 258, -1,978, + 309, 977, -1,310, 309, 978, -1,305, 979, 978, -1,311, 978, 979, -1,979, 285, 311, -1, + 311, 310, 978, -1,304, 285, 979, -1,306, 978, 977, -1,980, 312, 242, -1,243, 312, + 980, -1,317, 980, 242, -1,317, 316, 981, -1,316, 269, 982, -1,980, 317, 981, -1,981, + 313, 980, -1,243, 980, 313, -1,314, 313, 981, -1,269, 315, 982, -1,281, 982, 315, -1, + 982, 281, 314, -1,314, 981, 982, -1,316, 982, 981, -1,320, 321, 238, -1,983, 321, + 320, -1,985, 319, 259, -1,320, 319, 983, -1,983, 319, 984, -1,983, 239, 321, -1,984, + 322, 983, -1,239, 983, 322, -1,323, 322, 984, -1,259, 318, 985, -1,260, 985, 318, -1, + 985, 260, 323, -1,323, 984, 985, -1,319, 985, 984, -1,986, 238, 328, -1,987, 238, + 986, -1,988, 238, 987, -1,989, 987, 986, -1,989, 986, 328, -1,989, 327, 326, -1,992, + 326, 284, -1,326, 992, 989, -1,989, 992, 990, -1,992, 325, 993, -1,284, 325, 992, -1, + 989, 328, 327, -1,987, 989, 990, -1,991, 988, 990, -1,987, 990, 988, -1,991, 320, + 988, -1,238, 988, 320, -1,319, 320, 991, -1,994, 991, 990, -1,306, 994, 993, -1,994, + 990, 993, -1,324, 994, 306, -1,325, 306, 993, -1,324, 259, 994, -1,319, 994, 259, -1, + 994, 319, 991, -1,992, 993, 990, -1,995, 243, 313, -1,996, 243, 995, -1,997, 243, + 996, -1,999, 996, 995, -1,998, 995, 313, -1,1001, 314, 281, -1,313, 314, 998, -1, + 998, 314, 1001, -1,1002, 1001, 330, -1,998, 1001, 999, -1,999, 1001, 1002, -1,281, + 330, 1001, -1,999, 995, 998, -1,999, 997, 996, -1,999, 1002, 1000, -1,331, 997, 1000, -1, + 997, 331, 243, -1,1000, 332, 331, -1,333, 332, 1000, -1,298, 1003, 1002, -1,1000, + 1002, 1003, -1,329, 1003, 298, -1,330, 298, 1002, -1,283, 333, 329, -1,1003, 329, + 333, -1,333, 1000, 1003, -1,997, 999, 1000, -1,243, 1456, 336, -1,1456, 244, 336, -1, + 1457, 331, 337, -1,331, 1456, 243, -1,338, 337, 331, -1,332, 333, 1004, -1,333, 283, + 1005, -1,1457, 1456, 331, -1,1004, 339, 332, -1,332, 339, 338, -1,338, 331, 332, -1, + 1004, 340, 339, -1,328, 343, 342, -1,1458, 328, 238, -1,238, 334, 1458, -1,327, 328, + 342, -1,333, 1005, 1004, -1,327, 1004, 1005, -1,326, 1005, 335, -1,283, 335, 1005, -1, + 1005, 326, 327, -1,342, 341, 327, -1,326, 335, 284, -1,328, 1459, 343, -1,327, 341, + 1004, -1,1004, 341, 340, -1,1458, 1459, 328, -1,237, 1458, 334, -1,7, 8, 1006, -1, + 6, 7, 1006, -1,344, 178, 1008, -1,344, 1007, 1006, -1,346, 1006, 1007, -1,1006, 8, + 344, -1,1007, 344, 1008, -1,1006, 5, 6, -1,345, 4, 5, -1,345, 1006, 346, -1,178, + 177, 1008, -1,176, 1008, 177, -1,1008, 176, 346, -1,1008, 346, 1007, -1,5, 1006, + 345, -1,349, 42, 43, -1,1009, 42, 349, -1,1011, 115, 114, -1,1009, 348, 1010, -1, + 1011, 348, 115, -1,1009, 349, 348, -1,1009, 41, 42, -1,39, 40, 1009, -1,1009, 347, + 39, -1,348, 1011, 1010, -1,347, 1010, 1011, -1,1011, 113, 347, -1,1010, 347, 1009, -1, + 114, 113, 1011, -1,41, 1009, 40, -1,358, 1012, 39, -1,38, 39, 1012, -1,1015, 1012, + 358, -1,1015, 1013, 1012, -1,38, 1012, 1013, -1,37, 38, 1013, -1,1016, 1013, 1015, -1, + 1460, 1015, 358, -1,1018, 357, 356, -1,355, 356, 146, -1,1018, 1460, 1461, -1,1017, + 1016, 1018, -1,1018, 356, 355, -1,1460, 1018, 1016, -1,1016, 1014, 1013, -1,1015, + 1460, 1016, -1,1016, 1017, 1014, -1,36, 37, 1014, -1,1014, 1017, 351, -1,1017, 1018, + 1019, -1,350, 35, 36, -1,1014, 350, 36, -1,350, 1014, 351, -1,355, 354, 1018, -1, + 1018, 354, 1019, -1,353, 1019, 354, -1,1019, 353, 352, -1,352, 353, 136, -1,352, + 1017, 1019, -1,1017, 352, 351, -1,1014, 37, 1013, -1,1018, 1461, 357, -1,367, 11, + 12, -1,1020, 11, 367, -1,1462, 359, 1025, -1,1021, 1020, 1023, -1,11, 1020, 10, -1, + 1023, 1026, 1024, -1,366, 1020, 367, -1,1023, 1020, 366, -1,210, 364, 365, -1,1023, + 366, 365, -1,363, 1026, 364, -1,365, 364, 1026, -1,1026, 363, 1027, -1,365, 1026, + 1023, -1,10, 1020, 1021, -1,1022, 1021, 1024, -1,10, 1021, 368, -1,368, 1021, 1022, -1, + 1023, 1024, 1021, -1,359, 8, 1022, -1,368, 1022, 8, -1,1025, 1022, 1024, -1,359, + 1022, 1025, -1,199, 361, 362, -1,1027, 362, 361, -1,363, 362, 1027, -1,1463, 1027, + 360, -1,1463, 1462, 1027, -1,360, 1027, 361, -1,1024, 1027, 1462, -1,1462, 1025, + 1024, -1,1026, 1027, 1024, -1,370, 194, 1028, -1,195, 196, 1028, -1,1031, 1028, 1029, -1, + 195, 1028, 194, -1,370, 1028, 1031, -1,208, 369, 207, -1,1031, 1034, 369, -1,1032, + 1034, 1031, -1,1035, 207, 1034, -1,1034, 207, 369, -1,369, 370, 1031, -1,196, 1029, + 1028, -1,1029, 1032, 1031, -1,1032, 1029, 1030, -1,1030, 186, 371, -1,1030, 1029, + 196, -1,1032, 1030, 1033, -1,196, 186, 1030, -1,372, 1030, 371, -1,206, 1035, 1036, -1, + 1033, 1035, 1032, -1,1036, 1035, 1033, -1,1035, 206, 207, -1,1036, 372, 205, -1,372, + 1036, 1033, -1,1036, 205, 206, -1,1033, 1030, 372, -1,1032, 1035, 1034, -1,371, 186, + 375, -1,375, 376, 1037, -1,1037, 376, 1038, -1,375, 1037, 371, -1,371, 1037, 1040, -1, + 205, 372, 1043, -1,372, 371, 1040, -1,1043, 372, 1040, -1,374, 1043, 1044, -1,1040, + 1041, 1043, -1,1038, 1041, 1040, -1,1043, 374, 205, -1,1037, 1038, 1040, -1,376, + 1039, 1038, -1,1041, 1039, 1042, -1,1039, 1041, 1038, -1,1039, 377, 1042, -1,377, + 1039, 183, -1,1042, 377, 378, -1,1039, 376, 183, -1,1041, 1042, 1045, -1,1044, 1045, + 373, -1,1044, 1041, 1045, -1,373, 1045, 202, -1,1044, 373, 374, -1,378, 379, 1045, -1, + 379, 202, 1045, -1,1042, 378, 1045, -1,1041, 1044, 1043, -1,383, 178, 384, -1,384, + 385, 1046, -1,1049, 1046, 1047, -1,384, 1046, 383, -1,383, 1046, 1049, -1,360, 382, + 1052, -1,1049, 1052, 382, -1,1050, 1052, 1049, -1,1053, 381, 1052, -1,1052, 381, + 360, -1,382, 383, 1049, -1,385, 1047, 1046, -1,1047, 1050, 1049, -1,1050, 1047, 1048, -1, + 1051, 1048, 8, -1,1048, 1047, 385, -1,1048, 1051, 1050, -1,385, 8, 1048, -1,1050, + 1051, 1054, -1,1053, 380, 381, -1,380, 1053, 1054, -1,1054, 1053, 1050, -1,1054, + 8, 380, -1,1051, 8, 1054, -1,1050, 1053, 1052, -1,183, 387, 377, -1,377, 387, 1055, -1, + 1056, 379, 378, -1,1055, 1056, 378, -1,379, 1057, 202, -1,378, 377, 1055, -1,387, + 180, 1055, -1,1055, 388, 1056, -1,388, 1055, 180, -1,388, 389, 1056, -1,1056, 389, + 390, -1,1057, 386, 202, -1,386, 1057, 390, -1,390, 199, 386, -1,1057, 1056, 390, -1, + 1056, 1057, 379, -1,180, 179, 388, -1,389, 388, 1058, -1,391, 390, 1060, -1,391, + 199, 390, -1,1059, 390, 389, -1,1058, 388, 179, -1,1058, 178, 383, -1,178, 1058, + 179, -1,1058, 383, 382, -1,1059, 1060, 390, -1,1060, 1059, 382, -1,382, 360, 1060, -1, + 1059, 1058, 382, -1,1060, 360, 391, -1,1058, 1059, 389, -1,39, 394, 1061, -1,1061, + 395, 1062, -1,395, 1061, 394, -1,1062, 395, 1063, -1,1061, 1062, 1064, -1,1064, 1067, + 39, -1,1065, 1067, 1064, -1,1068, 393, 1067, -1,1067, 393, 39, -1,39, 1061, 1064, -1, + 1065, 1064, 1062, -1,1065, 1063, 1066, -1,1063, 1065, 1062, -1,1063, 396, 1066, -1, + 396, 1063, 113, -1,1066, 396, 397, -1,1063, 395, 113, -1,1065, 1066, 1069, -1,1068, + 392, 393, -1,392, 1068, 1069, -1,1069, 397, 357, -1,1069, 1068, 1065, -1,1069, 357, + 392, -1,1066, 397, 1069, -1,1065, 1068, 1067, -1,399, 124, 129, -1,129, 130, 1070, -1, + 1073, 1070, 1071, -1,129, 1070, 399, -1,399, 1070, 1073, -1,141, 398, 1076, -1,1073, + 1076, 398, -1,1074, 1076, 1073, -1,1077, 140, 1076, -1,1076, 140, 141, -1,398, 399, + 1073, -1,130, 1071, 1070, -1,1071, 1074, 1073, -1,1074, 1071, 1072, -1,1072, 131, + 400, -1,1072, 1071, 130, -1,1074, 1072, 1075, -1,130, 131, 1072, -1,1075, 1072, 400, -1, + 139, 1077, 1078, -1,1075, 1077, 1074, -1,1078, 1077, 1075, -1,1077, 139, 140, -1, + 1078, 401, 138, -1,401, 1078, 1075, -1,1078, 138, 139, -1,1075, 400, 401, -1,1074, + 1077, 1076, -1,113, 1079, 396, -1,1079, 113, 112, -1,396, 1079, 1080, -1,357, 397, + 1081, -1,1080, 1081, 397, -1,1081, 1080, 404, -1,397, 396, 1080, -1,357, 1081, 402, -1, + 1079, 403, 1080, -1,112, 111, 403, -1,403, 404, 1080, -1,1081, 405, 402, -1,1081, + 404, 405, -1,405, 146, 402, -1,1079, 112, 403, -1,411, 109, 412, -1,412, 413, 1082, -1, + 1085, 1082, 1083, -1,412, 1082, 411, -1,411, 1082, 1085, -1,409, 410, 1085, -1,144, + 409, 1088, -1,1085, 1088, 409, -1,1086, 1088, 1085, -1,1089, 408, 1088, -1,1088, + 408, 144, -1,410, 411, 1085, -1,413, 1083, 1082, -1,1083, 1084, 1086, -1,1083, 413, + 1084, -1,1086, 1084, 1087, -1,1083, 1086, 1085, -1,1084, 399, 1087, -1,399, 1084, + 124, -1,1087, 399, 398, -1,413, 124, 1084, -1,1086, 1087, 1090, -1,1089, 1090, 407, -1, + 1089, 1086, 1090, -1,407, 1090, 406, -1,1089, 407, 408, -1,1090, 141, 406, -1,141, + 1090, 398, -1,1087, 398, 1090, -1,1086, 1089, 1088, -1,111, 1091, 403, -1,1091, 111, + 415, -1,403, 1091, 1092, -1,405, 404, 1092, -1,1093, 405, 1092, -1,405, 1093, 146, -1, + 404, 403, 1092, -1,1091, 411, 1092, -1,415, 109, 411, -1,410, 1092, 411, -1,1092, + 410, 1093, -1,1093, 414, 146, -1,414, 1093, 409, -1,409, 144, 414, -1,1093, 410, + 409, -1,411, 1091, 415, -1,272, 271, 421, -1,421, 271, 1094, -1,1095, 419, 420, -1, + 1094, 1095, 420, -1,419, 1096, 194, -1,420, 421, 1094, -1,271, 270, 1094, -1,1094, + 416, 1095, -1,416, 1094, 270, -1,416, 417, 1095, -1,1095, 417, 1096, -1,1096, 193, + 194, -1,193, 1096, 418, -1,418, 192, 193, -1,1096, 417, 418, -1,1095, 1096, 419, -1, + 258, 428, 427, -1,427, 428, 1097, -1,1097, 429, 1098, -1,429, 1097, 428, -1,1098, + 429, 430, -1,1097, 1098, 1100, -1,427, 1097, 1100, -1,425, 426, 1100, -1,33, 425, + 1103, -1,1100, 1103, 425, -1,1101, 1103, 1100, -1,1104, 424, 1103, -1,1103, 424, + 33, -1,426, 427, 1100, -1,1101, 1100, 1098, -1,1098, 1099, 1101, -1,1099, 1098, 430, -1, + 1099, 430, 285, -1,1101, 1099, 1102, -1,1099, 431, 1102, -1,431, 1099, 285, -1,1102, + 431, 432, -1,1101, 1102, 1105, -1,1104, 1105, 423, -1,1104, 1101, 1105, -1,423, 1105, + 422, -1,1104, 423, 424, -1,433, 422, 1105, -1,29, 422, 433, -1,433, 1105, 432, -1, + 1102, 432, 1105, -1,1101, 1104, 1103, -1,431, 285, 445, -1,431, 445, 1106, -1,1109, + 445, 446, -1,432, 1106, 1107, -1,1106, 432, 431, -1,1110, 1107, 1109, -1,1109, 1107, + 1106, -1,1106, 445, 1109, -1,432, 1107, 1108, -1,446, 447, 1109, -1,447, 448, 1115, -1, + 449, 450, 1121, -1,448, 449, 1118, -1,1113, 1109, 1112, -1,1115, 1112, 447, -1,1119, + 1115, 1118, -1,1121, 1118, 449, -1,1115, 448, 1118, -1,1116, 1112, 1115, -1,450, + 451, 1121, -1,447, 1112, 1109, -1,1119, 1118, 1121, -1,433, 1108, 29, -1,433, 432, + 1108, -1,1108, 1110, 1111, -1,1113, 1110, 1109, -1,1107, 1110, 1108, -1,1111, 1110, + 1113, -1,29, 1108, 444, -1,1111, 443, 444, -1,1114, 443, 1111, -1,1108, 1111, 444, -1, + 1111, 1113, 1114, -1,1114, 1116, 1117, -1,1116, 1114, 1113, -1,1117, 1119, 1120, -1, + 1119, 1117, 1116, -1,1116, 1115, 1119, -1,1114, 1117, 441, -1,442, 1114, 441, -1, + 1120, 440, 441, -1,1123, 440, 1120, -1,1117, 1120, 441, -1,1120, 1119, 1122, -1,1114, + 442, 443, -1,1113, 1112, 1116, -1,1122, 1119, 1121, -1,1124, 1122, 1121, -1,1124, + 451, 452, -1,1124, 452, 1127, -1,1127, 452, 453, -1,1122, 1125, 1126, -1,1122, 1124, + 1125, -1,1127, 1128, 1125, -1,1130, 1128, 1127, -1,1124, 1127, 1125, -1,1125, 1128, + 1129, -1,1127, 453, 1130, -1,1124, 1121, 451, -1,1133, 1130, 454, -1,454, 1130, 453, -1, + 1136, 454, 455, -1,456, 455, 282, -1,1134, 1131, 1133, -1,1133, 1131, 1130, -1,1137, + 1133, 1136, -1,456, 1136, 455, -1,1133, 454, 1136, -1,457, 1136, 456, -1,1130, 1131, + 1128, -1,1128, 1131, 1132, -1,1123, 1126, 438, -1,1123, 1122, 1126, -1,1129, 1132, + 436, -1,1129, 1128, 1132, -1,1125, 1129, 1126, -1,1126, 1129, 437, -1,438, 439, 1123, -1, + 436, 437, 1129, -1,438, 1126, 437, -1,1132, 1135, 436, -1,1123, 439, 440, -1,1134, + 1135, 1132, -1,1135, 1134, 1137, -1,1135, 1137, 1138, -1,457, 1137, 1136, -1,1134, + 1133, 1137, -1,458, 1137, 457, -1,435, 1138, 434, -1,1138, 435, 1135, -1,434, 458, + 18, -1,458, 434, 1138, -1,1138, 1137, 458, -1,1135, 435, 436, -1,1132, 1131, 1134, -1, + 1122, 1123, 1120, -1,282, 462, 456, -1,456, 462, 1139, -1,1139, 463, 1140, -1,463, + 1139, 462, -1,1140, 463, 464, -1,1139, 1140, 1142, -1,456, 1139, 1142, -1,458, 457, + 1142, -1,18, 458, 1145, -1,1142, 1145, 458, -1,1143, 1145, 1142, -1,1146, 461, 1145, -1, + 1145, 461, 18, -1,457, 456, 1142, -1,1143, 1142, 1140, -1,1140, 1141, 1143, -1,1141, + 1140, 464, -1,1141, 464, 280, -1,1143, 1141, 1144, -1,1141, 465, 1144, -1,465, 1141, + 280, -1,1144, 465, 466, -1,1143, 1144, 1147, -1,1146, 1147, 460, -1,1146, 1143, 1147, -1, + 460, 1147, 459, -1,1146, 460, 461, -1,467, 459, 1147, -1,14, 459, 467, -1,467, 1147, + 466, -1,1144, 466, 1147, -1,1143, 1146, 1145, -1,280, 279, 465, -1,465, 279, 1148, -1, + 1149, 467, 466, -1,1148, 1149, 466, -1,467, 1150, 14, -1,466, 465, 1148, -1,279, + 278, 1148, -1,1148, 468, 1149, -1,468, 1148, 278, -1,468, 469, 1149, -1,1149, 469, + 470, -1,1150, 13, 14, -1,13, 1150, 470, -1,470, 12, 13, -1,1150, 1149, 470, -1,1149, + 1150, 467, -1,256, 257, 473, -1,473, 257, 1151, -1,1152, 471, 472, -1,1151, 1152, + 472, -1,471, 1153, 35, -1,472, 473, 1151, -1,257, 258, 1151, -1,1151, 427, 1152, -1, + 427, 1151, 258, -1,427, 426, 1152, -1,1152, 426, 425, -1,1153, 34, 35, -1,34, 1153, + 425, -1,425, 33, 34, -1,1153, 1152, 425, -1,1152, 1153, 471, -1,274, 273, 476, -1, + 476, 273, 1154, -1,1155, 474, 475, -1,1154, 1155, 475, -1,474, 1156, 210, -1,475, + 476, 1154, -1,273, 272, 1154, -1,1154, 477, 1155, -1,477, 1154, 272, -1,477, 478, + 1155, -1,1155, 478, 479, -1,1156, 209, 210, -1,209, 1156, 479, -1,479, 208, 209, -1, + 1156, 1155, 479, -1,1155, 1156, 474, -1,278, 277, 468, -1,468, 277, 1157, -1,1157, + 483, 1158, -1,483, 1157, 277, -1,1158, 483, 484, -1,1157, 1158, 1160, -1,468, 1157, + 1160, -1,470, 469, 1160, -1,12, 470, 1163, -1,1160, 1163, 470, -1,1161, 1163, 1160, -1, + 1164, 482, 1163, -1,1163, 482, 12, -1,469, 468, 1160, -1,1161, 1160, 1158, -1,1158, + 1159, 1161, -1,1159, 1158, 484, -1,1159, 484, 274, -1,1161, 1159, 1162, -1,1159, + 485, 1162, -1,485, 1159, 274, -1,1162, 485, 475, -1,1161, 1162, 1165, -1,1164, 1165, + 481, -1,1164, 1161, 1165, -1,481, 1165, 480, -1,1164, 481, 482, -1,474, 480, 1165, -1, + 210, 480, 474, -1,474, 1165, 475, -1,1162, 475, 1165, -1,1161, 1164, 1163, -1,252, + 253, 491, -1,491, 253, 1166, -1,1166, 492, 1167, -1,492, 1166, 253, -1,1167, 492, + 255, -1,1166, 1167, 1169, -1,491, 1166, 1169, -1,489, 490, 1169, -1,136, 489, 1172, -1, + 1169, 1172, 489, -1,1170, 1172, 1169, -1,1173, 488, 1172, -1,1172, 488, 136, -1,490, + 491, 1169, -1,1170, 1169, 1167, -1,1167, 1168, 1170, -1,1168, 1167, 255, -1,1168, + 255, 256, -1,1170, 1168, 1171, -1,1168, 473, 1171, -1,473, 1168, 256, -1,1171, 473, + 472, -1,1170, 1171, 1174, -1,1173, 1174, 487, -1,1173, 1170, 1174, -1,487, 1174, + 486, -1,1173, 487, 488, -1,471, 486, 1174, -1,35, 486, 471, -1,471, 1174, 472, -1, + 1171, 472, 1174, -1,1170, 1173, 1172, -1,495, 248, 1175, -1,1175, 248, 249, -1,495, + 1175, 1176, -1,132, 133, 493, -1,493, 494, 1177, -1,1176, 494, 495, -1,1176, 1177, + 494, -1,1175, 496, 1176, -1,249, 250, 496, -1,497, 1176, 496, -1,1176, 497, 1177, -1, + 1177, 132, 493, -1,132, 1177, 498, -1,498, 131, 132, -1,1177, 497, 498, -1,496, 1175, + 249, -1,477, 272, 1178, -1,1178, 272, 1179, -1,1179, 272, 1180, -1,1178, 1179, 1181, -1, + 477, 1178, 1181, -1,479, 478, 1181, -1,208, 479, 1184, -1,1181, 1184, 479, -1,1182, + 1184, 1181, -1,1185, 369, 1184, -1,1184, 369, 208, -1,478, 477, 1181, -1,1182, 1181, + 1179, -1,1182, 1180, 1183, -1,1180, 1182, 1179, -1,1180, 421, 1183, -1,421, 1180, + 272, -1,1183, 421, 420, -1,1182, 1183, 1186, -1,1185, 1186, 370, -1,1185, 1182, 1186, -1, + 370, 1186, 194, -1,1185, 370, 369, -1,420, 419, 1186, -1,419, 194, 1186, -1,1183, + 420, 1186, -1,1182, 1185, 1184, -1,496, 250, 1187, -1,1187, 250, 1188, -1,1188, 250, + 1189, -1,1187, 1188, 1190, -1,496, 1187, 1190, -1,498, 497, 1190, -1,131, 498, 1193, -1, + 1190, 1193, 498, -1,1191, 1193, 1190, -1,1194, 400, 1193, -1,1193, 400, 131, -1,497, + 496, 1190, -1,1191, 1190, 1188, -1,1191, 1189, 1192, -1,1189, 1191, 1188, -1,1189, + 499, 1192, -1,499, 1189, 250, -1,1192, 499, 500, -1,1191, 1192, 1195, -1,1194, 1195, + 401, -1,1194, 1191, 1195, -1,401, 1195, 138, -1,1194, 401, 400, -1,500, 501, 1195, -1, + 501, 138, 1195, -1,1192, 500, 1195, -1,1191, 1194, 1193, -1,250, 251, 499, -1,500, + 499, 1196, -1,502, 501, 1198, -1,502, 138, 501, -1,1197, 501, 500, -1,1196, 499, + 251, -1,1196, 1197, 500, -1,1197, 1196, 491, -1,252, 491, 1196, -1,1196, 251, 252, -1, + 1197, 491, 490, -1,1198, 490, 489, -1,490, 1198, 1197, -1,489, 136, 1198, -1,1198, + 136, 502, -1,1197, 1198, 501, -1,513, 514, 515, -1,515, 516, 513, -1,509, 513, 508, -1, + 510, 511, 509, -1,512, 509, 511, -1,509, 512, 513, -1,513, 516, 517, -1,518, 504, + 517, -1,504, 518, 503, -1,517, 504, 506, -1,508, 513, 507, -1,506, 507, 517, -1,504, + 505, 506, -1,507, 513, 517, -1,524, 526, 525, -1,1199, 527, 526, -1,1199, 524, 523, -1, + 523, 522, 1199, -1,1199, 522, 1200, -1,1199, 526, 524, -1,1200, 527, 1199, -1,1201, + 528, 1200, -1,527, 1200, 528, -1,519, 504, 1201, -1,528, 1201, 504, -1,521, 1201, + 1200, -1,520, 1201, 521, -1,520, 505, 519, -1,520, 519, 1201, -1,522, 521, 1200, -1, + 533, 535, 534, -1,1202, 536, 535, -1,531, 533, 532, -1,1202, 531, 530, -1,533, 531, + 1202, -1,1202, 535, 533, -1,1203, 536, 1202, -1,1204, 536, 1203, -1,525, 536, 1204, -1, + 524, 525, 1204, -1,529, 1204, 530, -1,1203, 530, 1204, -1,524, 1204, 529, -1,529, + 523, 524, -1,1202, 530, 1203, -1,541, 543, 542, -1,1205, 543, 541, -1,539, 541, 540, -1, + 539, 538, 1205, -1,1205, 538, 1206, -1,539, 1205, 541, -1,544, 543, 1205, -1,545, + 544, 1207, -1,545, 533, 534, -1,533, 545, 1207, -1,538, 537, 1206, -1,1207, 1206, + 537, -1,537, 532, 1207, -1,533, 1207, 532, -1,1207, 544, 1206, -1,1205, 1206, 544, -1, + 553, 555, 554, -1,553, 557, 556, -1,553, 556, 555, -1,552, 551, 549, -1,553, 552, + 549, -1,549, 551, 550, -1,553, 547, 557, -1,542, 559, 558, -1,557, 546, 542, -1,540, + 542, 546, -1,548, 553, 549, -1,546, 557, 547, -1,548, 547, 553, -1,558, 557, 542, -1, + 572, 570, 569, -1,570, 572, 571, -1,568, 572, 569, -1,564, 567, 566, -1,566, 565, + 564, -1,567, 1208, 568, -1,567, 564, 1209, -1,573, 572, 568, -1,1208, 560, 574, -1, + 568, 1208, 574, -1,1208, 567, 1209, -1,561, 1208, 1209, -1,562, 561, 563, -1,1209, + 563, 561, -1,561, 560, 1208, -1,564, 563, 1209, -1,574, 573, 568, -1,580, 578, 577, -1, + 578, 580, 579, -1,576, 580, 577, -1,1211, 576, 575, -1,569, 570, 587, -1,570, 571, + 587, -1,575, 569, 587, -1,580, 576, 1210, -1,585, 1211, 575, -1,583, 1210, 1211, -1, + 583, 582, 581, -1,1210, 583, 581, -1,1211, 1210, 576, -1,584, 583, 1211, -1,586, + 575, 587, -1,1211, 585, 584, -1,586, 585, 575, -1,581, 580, 1210, -1,1212, 73, 74, -1, + 73, 1212, 72, -1,71, 72, 1212, -1,590, 1212, 74, -1,590, 550, 1214, -1,1214, 551, + 552, -1,551, 1214, 550, -1,1214, 1213, 590, -1,1213, 1212, 590, -1,1213, 592, 1212, -1, + 1214, 592, 1213, -1,592, 591, 1212, -1,71, 591, 70, -1,552, 553, 1214, -1,588, 1214, + 553, -1,553, 554, 589, -1,553, 589, 588, -1,588, 592, 1214, -1,71, 1212, 591, -1, + 83, 84, 600, -1,599, 1215, 600, -1,83, 600, 1215, -1,82, 83, 1215, -1,1216, 1215, + 599, -1,513, 597, 514, -1,513, 1217, 598, -1,598, 1217, 599, -1,1216, 599, 1217, -1, + 597, 513, 598, -1,1216, 596, 1215, -1,593, 81, 82, -1,82, 594, 593, -1,81, 593, 80, -1, + 1215, 595, 594, -1,512, 511, 1217, -1,510, 1217, 511, -1,513, 512, 1217, -1,1217, + 510, 596, -1,596, 1216, 1217, -1,1215, 596, 595, -1,1215, 594, 82, -1,610, 79, 80, -1, + 609, 1218, 610, -1,79, 610, 1218, -1,1219, 1218, 609, -1,1218, 78, 79, -1,1223, 76, + 1220, -1,78, 1220, 76, -1,1224, 1223, 1220, -1,1218, 1219, 1220, -1,608, 1221, 1219, -1, + 1220, 1219, 1221, -1,1220, 1221, 1224, -1,603, 1224, 1221, -1,1224, 1225, 1223, -1, + 78, 1218, 1220, -1,608, 1219, 609, -1,607, 1221, 608, -1,583, 606, 582, -1,607, 606, + 1222, -1,1222, 606, 583, -1,1221, 607, 1222, -1,1227, 1464, 619, -1,604, 1222, 605, -1, + 584, 605, 583, -1,605, 1222, 583, -1,603, 1222, 604, -1,1222, 603, 1221, -1,602, + 1224, 603, -1,620, 1464, 1226, -1,1223, 1225, 611, -1,612, 611, 1225, -1,1225, 1224, + 1226, -1,601, 621, 1224, -1,621, 1226, 1224, -1,1226, 621, 620, -1,1226, 1228, 1225, -1, + 602, 601, 1224, -1,613, 612, 1228, -1,74, 612, 613, -1,1226, 1229, 1228, -1,1229, + 614, 1228, -1,613, 1228, 614, -1,615, 614, 1229, -1,612, 1225, 1228, -1,1229, 1226, + 1230, -1,1464, 1227, 1226, -1,619, 618, 1230, -1,561, 618, 560, -1,1230, 1227, 619, -1, + 616, 615, 1230, -1,1230, 618, 617, -1,617, 616, 1230, -1,562, 617, 561, -1,617, 618, + 561, -1,1227, 1230, 1226, -1,1229, 1230, 615, -1,611, 76, 1223, -1,80, 594, 1231, -1, + 1233, 1231, 1232, -1,624, 1231, 594, -1,1233, 1235, 80, -1,1234, 1235, 1233, -1,1236, + 623, 1235, -1,1235, 623, 80, -1,80, 1231, 1233, -1,624, 1232, 1231, -1,1232, 1234, + 1233, -1,1234, 1232, 625, -1,510, 625, 1232, -1,1232, 624, 510, -1,1234, 625, 626, -1, + 1236, 622, 623, -1,622, 1236, 627, -1,626, 627, 1236, -1,627, 608, 622, -1,1236, + 1234, 626, -1,1234, 1236, 1235, -1,632, 550, 633, -1,632, 1237, 631, -1,1237, 632, + 633, -1,1237, 633, 634, -1,631, 1237, 1240, -1,615, 630, 1243, -1,1240, 1243, 630, -1, + 1243, 1240, 1241, -1,629, 1243, 1244, -1,1243, 629, 615, -1,630, 631, 1240, -1,1237, + 1238, 1240, -1,634, 1238, 1237, -1,1238, 634, 1239, -1,1241, 1239, 1242, -1,1239, + 1241, 1238, -1,74, 1239, 634, -1,1238, 1241, 1240, -1,628, 1244, 1245, -1,1242, 1244, + 1241, -1,1245, 1244, 1242, -1,1244, 628, 629, -1,74, 1245, 1242, -1,1245, 74, 628, -1, + 1242, 1239, 74, -1,1241, 1244, 1243, -1,547, 639, 638, -1,638, 639, 1246, -1,1247, + 636, 637, -1,1246, 1247, 637, -1,636, 1248, 562, -1,637, 638, 1246, -1,639, 550, + 1246, -1,1246, 632, 1247, -1,632, 1246, 550, -1,632, 631, 1247, -1,1247, 631, 630, -1, + 1248, 635, 562, -1,635, 1248, 615, -1,630, 615, 1248, -1,1248, 1247, 630, -1,1247, + 1248, 636, -1,540, 1249, 643, -1,1249, 540, 546, -1,643, 1249, 1250, -1,641, 642, + 1250, -1,1251, 641, 1250, -1,641, 1251, 564, -1,642, 643, 1250, -1,1249, 638, 1250, -1, + 546, 547, 638, -1,637, 1250, 638, -1,1250, 637, 1251, -1,1251, 640, 564, -1,640, + 1251, 636, -1,636, 562, 640, -1,1251, 637, 636, -1,638, 1249, 546, -1,532, 649, 648, -1, + 648, 649, 1252, -1,1252, 650, 1253, -1,650, 1252, 649, -1,1253, 650, 651, -1,1252, + 1253, 1256, -1,648, 1252, 1255, -1,567, 647, 1258, -1,1255, 647, 648, -1,1258, 647, + 1255, -1,646, 1258, 1259, -1,1256, 1258, 1255, -1,1259, 1258, 1256, -1,1258, 646, + 567, -1,1255, 1252, 1256, -1,1253, 1254, 1256, -1,1257, 1256, 1254, -1,1254, 651, + 540, -1,1257, 1254, 643, -1,1257, 1259, 1256, -1,540, 643, 1254, -1,643, 642, 1257, -1, + 1257, 642, 641, -1,1259, 1260, 645, -1,1260, 1259, 1257, -1,645, 1260, 644, -1,1259, + 645, 646, -1,644, 641, 564, -1,641, 644, 1260, -1,1260, 1257, 641, -1,1254, 1253, + 651, -1,530, 655, 654, -1,654, 655, 1261, -1,569, 653, 1263, -1,1261, 653, 654, -1, + 1262, 653, 1261, -1,655, 532, 1261, -1,1261, 648, 1262, -1,648, 1261, 532, -1,1262, + 648, 647, -1,1263, 652, 569, -1,652, 1263, 567, -1,647, 567, 1263, -1,1263, 1262, + 647, -1,1262, 1263, 653, -1,523, 659, 658, -1,658, 659, 1264, -1,576, 657, 1266, -1, + 1264, 657, 658, -1,1265, 657, 1264, -1,659, 530, 1264, -1,1264, 654, 1265, -1,654, + 1264, 530, -1,1265, 654, 653, -1,1266, 656, 576, -1,656, 1266, 569, -1,653, 569, + 1266, -1,1266, 1265, 653, -1,1265, 1266, 657, -1,505, 666, 665, -1,665, 666, 1267, -1, + 1267, 667, 1268, -1,667, 1267, 666, -1,1268, 667, 668, -1,1267, 1268, 1270, -1,665, + 1267, 1270, -1,663, 664, 1270, -1,580, 663, 1273, -1,1270, 1273, 663, -1,1271, 1273, + 1270, -1,1274, 662, 1273, -1,1273, 662, 580, -1,664, 665, 1270, -1,1271, 1270, 1268, -1, + 1268, 1269, 1271, -1,1269, 1268, 668, -1,1269, 668, 523, -1,1271, 1269, 1272, -1, + 1269, 658, 1272, -1,658, 1269, 523, -1,1272, 658, 657, -1,1271, 1272, 1275, -1,1274, + 1275, 661, -1,1274, 1271, 1275, -1,661, 1275, 660, -1,1274, 661, 662, -1,1275, 576, + 660, -1,576, 1275, 657, -1,1272, 657, 1275, -1,1271, 1274, 1273, -1,507, 506, 672, -1, + 671, 672, 1276, -1,669, 670, 1278, -1,669, 582, 670, -1,1277, 670, 671, -1,1276, + 672, 506, -1,1276, 1277, 671, -1,1277, 1276, 665, -1,505, 665, 1276, -1,1276, 506, + 505, -1,1277, 665, 664, -1,1278, 580, 669, -1,580, 1278, 663, -1,664, 663, 1278, -1, + 1278, 1277, 664, -1,1277, 1278, 670, -1,510, 674, 625, -1,625, 674, 1279, -1,1280, + 627, 626, -1,1279, 1280, 626, -1,627, 1281, 608, -1,626, 625, 1279, -1,674, 507, + 1279, -1,1279, 672, 1280, -1,672, 1279, 507, -1,672, 671, 1280, -1,1280, 671, 670, -1, + 1281, 673, 608, -1,673, 1281, 670, -1,670, 582, 673, -1,1281, 1280, 670, -1,1280, + 1281, 627, -1,720, 89, 90, -1,87, 699, 86, -1,87, 88, 699, -1,680, 720, 90, -1,91, + 2, 681, -1,681, 2, 3, -1,681, 90, 91, -1,681, 3, 4, -1,4, 345, 682, -1,698, 85, 86, -1, + 598, 695, 690, -1,691, 690, 692, -1,690, 694, 693, -1,692, 690, 693, -1,694, 690, + 695, -1,696, 599, 600, -1,697, 600, 84, -1,600, 697, 696, -1,599, 696, 695, -1,695, + 598, 599, -1,85, 697, 84, -1,89, 699, 88, -1,176, 175, 684, -1,683, 682, 346, -1, + 682, 345, 346, -1,176, 683, 346, -1,683, 176, 684, -1,687, 686, 688, -1,689, 688, + 685, -1,686, 685, 688, -1,684, 689, 685, -1,684, 175, 689, -1,680, 90, 681, -1,721, + 680, 679, -1,678, 722, 679, -1,721, 679, 722, -1,677, 722, 678, -1,682, 681, 4, -1, + 723, 677, 676, -1,724, 676, 675, -1,676, 724, 723, -1,675, 725, 724, -1,723, 722, + 677, -1,680, 721, 720, -1,698, 697, 85, -1,710, 706, 705, -1,706, 710, 707, -1,592, + 705, 704, -1,710, 708, 707, -1,700, 699, 719, -1,89, 719, 699, -1,70, 703, 702, -1, + 68, 702, 701, -1,66, 701, 700, -1,703, 591, 704, -1,705, 588, 710, -1,592, 588, 705, -1, + 591, 703, 70, -1,592, 704, 591, -1,69, 70, 702, -1,68, 701, 67, -1,67, 701, 66, -1, + 65, 700, 718, -1,700, 65, 66, -1,68, 69, 702, -1,709, 708, 710, -1,718, 64, 65, -1, + 720, 719, 89, -1,718, 700, 719, -1,348, 716, 712, -1,712, 716, 715, -1,349, 717, + 716, -1,713, 712, 714, -1,715, 714, 712, -1,712, 240, 239, -1,712, 239, 322, -1,322, + 323, 712, -1,63, 718, 717, -1,43, 44, 717, -1,44, 45, 717, -1,349, 43, 717, -1,348, + 712, 115, -1,716, 348, 349, -1,260, 712, 323, -1,711, 260, 261, -1,712, 260, 711, -1, + 711, 116, 712, -1,712, 116, 115, -1,63, 717, 45, -1,64, 718, 63, -1,698, 86, 699, -1, + 268, 107, 120, -1,120, 267, 268, -1,559, 726, 558, -1,727, 558, 726, -1,727, 737, + 736, -1,735, 736, 1282, -1,732, 734, 1284, -1,732, 733, 734, -1,1283, 734, 735, -1, + 1282, 736, 737, -1,1282, 1283, 735, -1,1283, 1282, 728, -1,726, 728, 1282, -1,1282, + 737, 726, -1,1283, 728, 729, -1,1284, 729, 730, -1,729, 1284, 1283, -1,730, 731, + 1284, -1,1284, 731, 732, -1,1283, 1284, 734, -1,733, 731, 739, -1,739, 738, 733, -1, + 749, 748, 747, -1,1285, 747, 746, -1,746, 1286, 1285, -1,750, 749, 1285, -1,751, + 1285, 1286, -1,749, 747, 1285, -1,745, 1286, 746, -1,1287, 745, 744, -1,1288, 744, + 743, -1,1291, 741, 740, -1,741, 738, 740, -1,742, 741, 1290, -1,742, 1289, 743, -1, + 745, 1287, 1286, -1,753, 1287, 1288, -1,750, 1285, 751, -1,752, 751, 1286, -1,744, + 1288, 1287, -1,1286, 1287, 752, -1,1288, 754, 753, -1,1287, 753, 752, -1,755, 754, + 1288, -1,742, 1290, 1289, -1,755, 1289, 1290, -1,756, 1290, 1291, -1,741, 1291, 1290, -1, + 1290, 756, 755, -1,1291, 739, 757, -1,1291, 757, 756, -1,755, 1288, 1289, -1,740, + 739, 1291, -1,743, 1289, 1288, -1,750, 758, 759, -1,759, 748, 750, -1,759, 769, 768, -1, + 767, 768, 1292, -1,764, 766, 1294, -1,764, 765, 766, -1,1293, 766, 767, -1,1292, + 768, 769, -1,1292, 1293, 767, -1,1293, 1292, 760, -1,758, 760, 1292, -1,1292, 769, + 758, -1,1293, 760, 761, -1,1294, 761, 762, -1,761, 1294, 1293, -1,762, 763, 1294, -1, + 1294, 763, 764, -1,1293, 1294, 766, -1,763, 503, 518, -1,518, 765, 763, -1,171, 170, + 771, -1,771, 770, 171, -1,770, 781, 780, -1,779, 780, 1295, -1,776, 778, 1297, -1, + 776, 777, 778, -1,1296, 778, 779, -1,1295, 780, 781, -1,1295, 1296, 779, -1,1296, + 1295, 772, -1,771, 772, 1295, -1,1295, 781, 771, -1,1296, 772, 773, -1,1297, 773, + 774, -1,773, 1297, 1296, -1,774, 775, 1297, -1,1297, 775, 776, -1,1296, 1297, 778, -1, + 777, 775, 783, -1,783, 782, 777, -1,793, 792, 791, -1,1298, 791, 790, -1,790, 1299, + 1298, -1,794, 793, 1298, -1,795, 1298, 1299, -1,793, 791, 1298, -1,789, 1299, 790, -1, + 1300, 789, 788, -1,1301, 788, 787, -1,1304, 785, 784, -1,785, 782, 784, -1,786, 785, + 1303, -1,786, 1302, 787, -1,789, 1300, 1299, -1,797, 1300, 1301, -1,794, 1298, 795, -1, + 796, 795, 1299, -1,788, 1301, 1300, -1,1299, 1300, 796, -1,1301, 798, 797, -1,1300, + 797, 796, -1,799, 798, 1301, -1,786, 1303, 1302, -1,799, 1302, 1303, -1,800, 1303, + 1304, -1,785, 1304, 1303, -1,1303, 800, 799, -1,1304, 783, 801, -1,1304, 801, 800, -1, + 799, 1301, 1302, -1,784, 783, 1304, -1,787, 1302, 1301, -1,794, 802, 803, -1,803, + 792, 794, -1,805, 804, 807, -1,807, 806, 805, -1,1305, 816, 815, -1,1305, 815, 814, -1, + 813, 1306, 814, -1,1305, 814, 1306, -1,819, 1305, 1306, -1,1307, 1306, 813, -1,1305, + 817, 816, -1,1308, 812, 811, -1,811, 810, 1309, -1,809, 1310, 810, -1,821, 1307, + 1308, -1,809, 806, 1311, -1,811, 1309, 1308, -1,1307, 812, 1308, -1,1307, 813, 812, -1, + 1307, 820, 1306, -1,821, 820, 1307, -1,819, 817, 1305, -1,818, 817, 819, -1,819, + 1306, 820, -1,1308, 1309, 822, -1,821, 1308, 822, -1,823, 822, 1309, -1,808, 825, + 1311, -1,1310, 1311, 824, -1,806, 808, 1311, -1,809, 1311, 1310, -1,1310, 824, 823, -1, + 808, 807, 825, -1,1311, 825, 824, -1,823, 1309, 1310, -1,810, 1310, 1309, -1,818, + 826, 827, -1,827, 816, 818, -1,835, 1312, 803, -1,828, 803, 1312, -1,1313, 1312, + 835, -1,1313, 834, 833, -1,1313, 833, 1314, -1,675, 1314, 833, -1,1313, 835, 834, -1, + 1313, 829, 1312, -1,829, 792, 828, -1,829, 1313, 830, -1,1314, 830, 1313, -1,675, + 832, 1314, -1,831, 1314, 832, -1,832, 676, 831, -1,831, 830, 1314, -1,828, 1312, + 829, -1,838, 778, 777, -1,1315, 778, 838, -1,1316, 779, 1315, -1,778, 1315, 779, -1, + 780, 779, 1316, -1,1318, 1316, 1315, -1,1318, 1315, 838, -1,1318, 837, 836, -1,1321, + 836, 685, -1,836, 1321, 1318, -1,1318, 1321, 1319, -1,1321, 686, 1322, -1,685, 686, + 1321, -1,1318, 838, 837, -1,1316, 1318, 1319, -1,1319, 1317, 1316, -1,780, 1316, + 1317, -1,770, 780, 1317, -1,1320, 1317, 1319, -1,1320, 839, 1317, -1,770, 1317, 839, -1, + 840, 839, 1320, -1,1323, 1320, 1319, -1,687, 1323, 1322, -1,1323, 1319, 1322, -1, + 688, 1323, 687, -1,686, 687, 1322, -1,1323, 688, 841, -1,841, 688, 689, -1,840, 1323, + 841, -1,1323, 840, 1320, -1,1321, 1322, 1319, -1,839, 843, 770, -1,1324, 843, 839, -1, + 840, 841, 1325, -1,840, 1325, 1324, -1,689, 1326, 841, -1,1324, 839, 840, -1,1324, + 171, 843, -1,1325, 172, 1324, -1,171, 1324, 172, -1,1325, 173, 172, -1,1326, 173, + 1325, -1,689, 842, 1326, -1,174, 1326, 842, -1,842, 175, 174, -1,174, 173, 1326, -1, + 841, 1326, 1325, -1,847, 848, 782, -1,1327, 848, 847, -1,846, 845, 1328, -1,846, + 1328, 1327, -1,684, 1329, 845, -1,1327, 847, 846, -1,1327, 777, 848, -1,1328, 838, + 1327, -1,777, 1327, 838, -1,1328, 837, 838, -1,836, 837, 1328, -1,684, 844, 1329, -1, + 836, 1329, 844, -1,844, 685, 836, -1,836, 1328, 1329, -1,845, 1329, 1328, -1,1330, + 791, 792, -1,830, 1330, 829, -1,792, 829, 1330, -1,1330, 830, 1331, -1,1330, 790, + 791, -1,1336, 856, 790, -1,1339, 788, 856, -1,1333, 1330, 1334, -1,790, 1333, 1336, -1, + 856, 1336, 1339, -1,1336, 1333, 1337, -1,1339, 857, 788, -1,1330, 1333, 790, -1,1339, + 1336, 1337, -1,1332, 1331, 831, -1,830, 831, 1331, -1,855, 1332, 676, -1,831, 676, + 1332, -1,1335, 1332, 855, -1,1332, 1334, 1331, -1,1335, 1337, 1334, -1,1333, 1334, + 1337, -1,1338, 1337, 1335, -1,1332, 1335, 1334, -1,853, 1338, 854, -1,1335, 854, + 1338, -1,1338, 853, 1341, -1,1340, 1337, 1338, -1,855, 854, 1335, -1,1334, 1330, + 1331, -1,1339, 1337, 1340, -1,1342, 786, 857, -1,1343, 1342, 1340, -1,1342, 1339, + 1340, -1,1342, 1343, 1345, -1,1344, 1343, 1340, -1,1345, 786, 1342, -1,857, 1339, + 1342, -1,858, 1345, 1348, -1,786, 1345, 858, -1,782, 858, 847, -1,1348, 1346, 1349, -1, + 1345, 1346, 1348, -1,858, 1348, 847, -1,847, 1348, 846, -1,1343, 1346, 1345, -1,1347, + 1346, 1343, -1,851, 1344, 1341, -1,1344, 1340, 1341, -1,1347, 1343, 1344, -1,850, + 1347, 1344, -1,1341, 852, 851, -1,1344, 851, 850, -1,850, 1350, 1347, -1,853, 852, + 1341, -1,1350, 846, 1349, -1,1348, 1349, 846, -1,845, 846, 1350, -1,1347, 1350, 1349, -1, + 684, 845, 849, -1,1350, 849, 845, -1,850, 849, 1350, -1,1346, 1347, 1349, -1,1338, + 1341, 1340, -1,1351, 517, 516, -1,517, 1351, 518, -1,859, 518, 1351, -1,1352, 516, + 515, -1,597, 598, 863, -1,515, 514, 1353, -1,514, 597, 863, -1,1352, 1351, 516, -1, + 1352, 860, 1351, -1,859, 1351, 860, -1,859, 860, 765, -1,861, 860, 1352, -1,514, + 863, 1353, -1,862, 1353, 863, -1,1353, 862, 861, -1,863, 690, 862, -1,861, 1352, + 1353, -1,515, 1353, 1352, -1,866, 734, 733, -1,1354, 734, 866, -1,1355, 735, 1354, -1, + 734, 1354, 735, -1,736, 735, 1355, -1,1357, 1355, 1354, -1,1357, 1354, 866, -1,1357, + 865, 864, -1,1360, 864, 706, -1,864, 1360, 1357, -1,1357, 1360, 1358, -1,1360, 707, + 1361, -1,706, 707, 1360, -1,1357, 866, 865, -1,1355, 1357, 1358, -1,1358, 1356, 1355, -1, + 736, 1355, 1356, -1,727, 736, 1356, -1,1359, 1356, 1358, -1,1359, 867, 1356, -1,727, + 1356, 867, -1,868, 867, 1359, -1,1362, 1359, 1358, -1,708, 1362, 1361, -1,1362, 1358, + 1361, -1,709, 1362, 708, -1,707, 708, 1361, -1,1362, 709, 869, -1,869, 709, 710, -1, + 868, 1362, 869, -1,1362, 868, 1359, -1,1360, 1361, 1358, -1,871, 727, 867, -1,867, + 1363, 871, -1,558, 871, 1363, -1,1364, 1363, 867, -1,1364, 868, 869, -1,1364, 869, + 1365, -1,710, 1365, 869, -1,1364, 867, 868, -1,1364, 556, 1363, -1,557, 1363, 556, -1, + 1364, 1365, 555, -1,556, 1364, 555, -1,710, 870, 1365, -1,554, 1365, 870, -1,870, + 588, 589, -1,870, 589, 554, -1,554, 555, 1365, -1,558, 1363, 557, -1,875, 876, 738, -1, + 1366, 875, 874, -1,1368, 873, 872, -1,873, 705, 872, -1,874, 873, 1367, -1,876, 875, + 1366, -1,874, 1367, 1366, -1,866, 1366, 1367, -1,1366, 866, 733, -1,733, 876, 1366, -1, + 865, 866, 1367, -1,864, 865, 1368, -1,1367, 1368, 865, -1,1368, 706, 864, -1,872, + 706, 1368, -1,873, 1368, 1367, -1,1369, 889, 748, -1,1369, 890, 889, -1,887, 1369, + 888, -1,748, 888, 1369, -1,1369, 887, 1370, -1,1369, 1372, 890, -1,1378, 892, 891, -1, + 1381, 893, 892, -1,1372, 1369, 1373, -1,891, 1372, 1375, -1,1378, 1375, 1379, -1, + 892, 1378, 1381, -1,1378, 891, 1375, -1,1375, 1372, 1376, -1,1381, 894, 893, -1,890, + 1372, 891, -1,1381, 1378, 1379, -1,1370, 886, 1371, -1,887, 886, 1370, -1,1369, 1370, + 1373, -1,1373, 1370, 1374, -1,885, 1371, 695, -1,886, 695, 1371, -1,884, 1374, 885, -1, + 1371, 885, 1374, -1,1374, 1370, 1371, -1,1374, 1376, 1373, -1,1377, 1379, 1376, -1, + 1375, 1376, 1379, -1,1380, 1379, 1377, -1,1374, 884, 1377, -1,883, 1377, 884, -1, + 883, 882, 1380, -1,1380, 882, 1383, -1,883, 1380, 1377, -1,1382, 1379, 1380, -1,1376, + 1374, 1377, -1,1376, 1372, 1373, -1,1381, 1379, 1382, -1,1384, 895, 894, -1,1387, + 895, 1384, -1,1381, 1382, 1384, -1,1386, 1385, 1382, -1,1385, 1384, 1382, -1,1385, + 1388, 1387, -1,1390, 1387, 1388, -1,1385, 1387, 1384, -1,1389, 1388, 1385, -1,1387, + 896, 895, -1,894, 1381, 1384, -1,1393, 897, 896, -1,875, 738, 897, -1,1388, 1391, + 1390, -1,1393, 1390, 1391, -1,1394, 1393, 1391, -1,897, 1393, 875, -1,1393, 896, + 1390, -1,875, 1393, 874, -1,1387, 1390, 896, -1,1392, 1391, 1388, -1,880, 1386, 1383, -1, + 1386, 1382, 1383, -1,1389, 1385, 1386, -1,879, 1389, 1386, -1,880, 1383, 881, -1, + 878, 1392, 879, -1,1386, 880, 879, -1,1389, 879, 1392, -1,1389, 1392, 1388, -1,882, + 881, 1383, -1,1395, 874, 1394, -1,1393, 1394, 874, -1,873, 874, 1395, -1,1392, 878, + 1395, -1,877, 1395, 878, -1,877, 705, 873, -1,877, 873, 1395, -1,1394, 1392, 1395, -1, + 1394, 1391, 1392, -1,1380, 1383, 1382, -1,860, 766, 765, -1,1396, 766, 860, -1,1397, + 767, 1396, -1,766, 1396, 767, -1,768, 767, 1397, -1,1399, 1397, 1396, -1,1399, 1396, + 860, -1,1399, 861, 862, -1,1402, 862, 690, -1,862, 1402, 1399, -1,1399, 1402, 1400, -1, + 1402, 691, 1403, -1,690, 691, 1402, -1,1399, 860, 861, -1,1397, 1399, 1400, -1,1400, + 1398, 1397, -1,768, 1397, 1398, -1,759, 768, 1398, -1,1401, 1398, 1400, -1,1401, + 898, 1398, -1,759, 1398, 898, -1,899, 898, 1401, -1,1404, 1401, 1400, -1,692, 1404, + 1403, -1,1404, 1400, 1403, -1,693, 1404, 692, -1,691, 692, 1403, -1,1404, 693, 900, -1, + 900, 693, 694, -1,899, 1404, 900, -1,1404, 899, 1401, -1,1402, 1403, 1400, -1,898, + 902, 759, -1,1405, 902, 898, -1,899, 900, 1406, -1,899, 1406, 1405, -1,694, 1407, + 900, -1,1405, 898, 899, -1,1405, 748, 902, -1,1406, 888, 1405, -1,748, 1405, 888, -1, + 1406, 887, 888, -1,886, 887, 1406, -1,694, 901, 1407, -1,886, 1407, 901, -1,901, + 695, 886, -1,886, 1406, 1407, -1,900, 1407, 1406, -1,1408, 120, 119, -1,119, 1409, + 1408, -1,265, 1408, 1409, -1,1408, 905, 120, -1,118, 1409, 119, -1,904, 117, 116, -1, + 117, 1410, 118, -1,1410, 117, 904, -1,1409, 118, 1410, -1,266, 267, 905, -1,266, + 1408, 265, -1,265, 1409, 264, -1,263, 1410, 904, -1,711, 903, 904, -1,263, 904, 903, -1, + 264, 1410, 263, -1,1410, 264, 1409, -1,266, 905, 1408, -1,711, 262, 903, -1,263, + 903, 262, -1,1465, 906, 261, -1,1465, 262, 906, -1,711, 906, 262, -1,910, 911, 806, -1, + 1411, 911, 910, -1,909, 908, 1412, -1,909, 1412, 1411, -1,724, 1413, 908, -1,1411, + 910, 909, -1,1411, 805, 911, -1,1412, 912, 1411, -1,805, 1411, 912, -1,1412, 913, + 912, -1,914, 913, 1412, -1,724, 907, 1413, -1,914, 1413, 907, -1,907, 725, 914, -1, + 914, 1412, 1413, -1,908, 1413, 1412, -1,1414, 927, 816, -1,1414, 928, 927, -1,925, + 1414, 926, -1,816, 926, 1414, -1,1414, 925, 1415, -1,1414, 1417, 928, -1,1423, 930, + 929, -1,1426, 931, 930, -1,1417, 1414, 1418, -1,929, 1417, 1420, -1,1423, 1420, 1424, -1, + 930, 1423, 1426, -1,1423, 929, 1420, -1,1420, 1417, 1421, -1,1426, 932, 931, -1,928, + 1417, 929, -1,1426, 1423, 1424, -1,1415, 924, 1416, -1,925, 924, 1415, -1,1414, 1415, + 1418, -1,1418, 1415, 1419, -1,923, 1416, 714, -1,924, 714, 1416, -1,922, 1419, 923, -1, + 1416, 923, 1419, -1,1419, 1415, 1416, -1,1419, 1421, 1418, -1,1422, 1424, 1421, -1, + 1420, 1421, 1424, -1,1425, 1424, 1422, -1,1419, 922, 1422, -1,921, 1422, 922, -1, + 921, 920, 1425, -1,1425, 920, 1428, -1,921, 1425, 1422, -1,1427, 1424, 1425, -1,1421, + 1419, 1422, -1,1421, 1417, 1418, -1,1426, 1424, 1427, -1,1429, 933, 932, -1,1432, + 933, 1429, -1,1426, 1427, 1429, -1,1431, 1430, 1427, -1,1430, 1429, 1427, -1,1430, + 1433, 1432, -1,1435, 1432, 1433, -1,1430, 1432, 1429, -1,1434, 1433, 1430, -1,1432, + 934, 933, -1,932, 1426, 1429, -1,1438, 935, 934, -1,910, 806, 935, -1,1433, 1436, + 1435, -1,1438, 1435, 1436, -1,1439, 1438, 1436, -1,935, 1438, 910, -1,1438, 934, + 1435, -1,910, 1438, 909, -1,1432, 1435, 934, -1,1437, 1436, 1433, -1,918, 1431, 1428, -1, + 1431, 1427, 1428, -1,1434, 1430, 1431, -1,917, 1434, 1431, -1,918, 1428, 919, -1, + 916, 1437, 917, -1,1431, 918, 917, -1,1434, 917, 1437, -1,1434, 1437, 1433, -1,920, + 919, 1428, -1,1440, 909, 1439, -1,1438, 1439, 909, -1,908, 909, 1440, -1,1437, 916, + 1440, -1,915, 1440, 916, -1,915, 724, 908, -1,915, 908, 1440, -1,1439, 1437, 1440, -1, + 1439, 1436, 1437, -1,1425, 1428, 1427, -1,940, 936, 827, -1,1441, 936, 940, -1,939, + 938, 1442, -1,939, 1442, 1441, -1,713, 1443, 938, -1,1441, 940, 939, -1,1441, 816, + 936, -1,1442, 926, 1441, -1,816, 1441, 926, -1,1442, 925, 926, -1,924, 925, 1442, -1, + 713, 937, 1443, -1,924, 1443, 937, -1,937, 714, 924, -1,924, 1442, 1443, -1,938, + 1443, 1442, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,5, 4, 3, -1,4, 2, 6, -1,5, 8, 7, -1,11, 10, 9, -1,10, 12, 9, -1,9, 7, + 11, -1,7, 9, 5, -1,13, 8, 5, -1,15, 9, 14, -1,18, 17, 16, -1,21, 20, 19, -1,22, 17, + 15, -1,23, 19, 18, -1,15, 14, 24, -1,17, 25, 16, -1,18, 16, 23, -1,22, 15, 24, -1, + 12, 14, 9, -1,27, 26, 0, -1,28, 0, 26, -1,30, 29, 28, -1,0, 28, 29, -1,31, 29, 30, -1, + 0, 29, 2, -1,34, 33, 32, -1,37, 36, 35, -1,35, 38, 37, -1,36, 37, 27, -1,27, 0, 36, -1, + 41, 40, 39, -1,6, 3, 4, -1,3, 13, 5, -1,43, 42, 13, -1,6, 2, 29, -1,3, 6, 31, -1, + 13, 3, 43, -1,29, 31, 6, -1,42, 8, 13, -1,40, 41, 33, -1,45, 44, 20, -1,33, 41, 32, -1, + 25, 17, 22, -1,46, 32, 44, -1,32, 46, 34, -1,48, 47, 39, -1,47, 41, 39, -1,49, 47, + 48, -1,47, 51, 50, -1,53, 52, 50, -1,55, 54, 20, -1,50, 57, 56, -1,56, 59, 58, -1, + 60, 47, 49, -1,50, 51, 53, -1,53, 61, 52, -1,60, 51, 47, -1,63, 62, 58, -1,18, 19, + 20, -1,57, 52, 64, -1,66, 65, 57, -1,50, 52, 57, -1,59, 65, 66, -1,56, 57, 65, -1, + 61, 64, 52, -1,66, 67, 59, -1,68, 59, 67, -1,69, 63, 68, -1,59, 68, 63, -1,70, 63, + 69, -1,59, 56, 65, -1,72, 70, 71, -1,71, 74, 73, -1,71, 73, 72, -1,75, 44, 45, -1, + 72, 63, 70, -1,44, 75, 76, -1,59, 63, 58, -1,54, 45, 20, -1,20, 21, 55, -1,76, 46, + 44, -1,63, 77, 62, -1,80, 79, 78, -1,81, 78, 77, -1,83, 82, 63, -1,82, 77, 63, -1, + 84, 80, 81, -1,81, 77, 82, -1,81, 80, 78, -1,85, 81, 82, -1,80, 86, 79, -1,89, 88, + 87, -1,91, 90, 86, -1,94, 93, 92, -1,95, 93, 90, -1,97, 91, 96, -1,86, 96, 91, -1, + 94, 92, 98, -1,95, 92, 93, -1,95, 90, 91, -1,99, 95, 91, -1,101, 100, 98, -1,80, + 96, 86, -1,102, 96, 80, -1,83, 63, 72, -1,84, 81, 85, -1,83, 85, 82, -1,102, 80, + 103, -1,104, 91, 97, -1,102, 97, 96, -1,84, 103, 80, -1,95, 99, 92, -1,98, 105, 101, -1, + 105, 98, 92, -1,104, 107, 106, -1,104, 109, 108, -1,109, 104, 106, -1,91, 104, 108, -1, + 91, 108, 99, -1,110, 94, 98, -1,112, 111, 110, -1,115, 114, 113, -1,87, 88, 113, -1, + 116, 112, 100, -1,110, 100, 112, -1,89, 115, 88, -1,113, 88, 115, -1,111, 87, 113, -1, + 111, 112, 87, -1,115, 117, 114, -1,101, 116, 100, -1,119, 118, 117, -1,121, 120, + 119, -1,119, 120, 118, -1,123, 119, 122, -1,119, 117, 122, -1,125, 124, 120, -1,124, + 0, 1, -1,0, 124, 125, -1,115, 122, 117, -1,126, 122, 115, -1,127, 112, 116, -1,128, + 115, 89, -1,127, 87, 112, -1,131, 130, 129, -1,129, 132, 131, -1,131, 128, 130, -1, + 115, 128, 131, -1,123, 122, 126, -1,123, 133, 119, -1,120, 121, 125, -1,131, 126, + 115, -1,125, 121, 134, -1,135, 119, 133, -1,125, 134, 136, -1,0, 125, 136, -1,134, + 121, 135, -1,136, 36, 0, -1,121, 119, 135, -1,110, 98, 100, -1,139, 138, 137, -1, + 141, 137, 140, -1,139, 137, 142, -1,140, 137, 143, -1,137, 144, 142, -1,137, 138, + 145, -1,148, 147, 146, -1,146, 147, 149, -1,145, 138, 149, -1,137, 145, 143, -1,145, + 149, 147, -1,147, 150, 145, -1,153, 152, 151, -1,154, 152, 153, -1,153, 156, 155, -1, + 151, 156, 153, -1,154, 153, 157, -1,157, 153, 155, -1,157, 158, 154, -1,159, 147, + 158, -1,160, 147, 159, -1,157, 155, 159, -1,161, 159, 155, -1,161, 150, 160, -1,161, + 160, 159, -1,158, 157, 159, -1,164, 163, 162, -1,165, 163, 164, -1,166, 164, 162, -1, + 167, 164, 166, -1,164, 167, 168, -1,165, 164, 168, -1,165, 169, 163, -1,152, 169, + 170, -1,151, 152, 170, -1,168, 171, 165, -1,171, 170, 165, -1,170, 171, 156, -1,156, + 151, 170, -1,169, 165, 170, -1,174, 173, 172, -1,172, 176, 175, -1,173, 176, 172, -1, + 178, 177, 173, -1,173, 180, 179, -1,180, 173, 174, -1,181, 178, 179, -1,179, 178, + 173, -1,184, 183, 182, -1,175, 176, 185, -1,182, 186, 184, -1,185, 176, 183, -1,188, + 183, 187, -1,183, 184, 189, -1,189, 184, 190, -1,189, 187, 183, -1,185, 183, 188, -1, + 192, 181, 191, -1,195, 194, 193, -1,194, 192, 191, -1,193, 196, 195, -1,197, 195, + 196, -1,198, 195, 197, -1,199, 198, 197, -1,192, 194, 195, -1,192, 178, 181, -1,190, + 200, 189, -1,202, 201, 200, -1,200, 190, 202, -1,198, 199, 202, -1,204, 203, 190, -1, + 202, 190, 203, -1,199, 201, 202, -1,186, 182, 205, -1,208, 207, 206, -1,208, 206, + 209, -1,210, 208, 209, -1,211, 208, 210, -1,209, 212, 210, -1,214, 213, 212, -1,215, + 214, 212, -1,217, 216, 214, -1,215, 217, 214, -1,214, 218, 213, -1,214, 216, 219, -1, + 214, 220, 218, -1,212, 209, 215, -1,222, 221, 208, -1,224, 222, 223, -1,225, 222, + 208, -1,211, 222, 225, -1,223, 222, 211, -1,224, 221, 222, -1,228, 227, 226, -1,229, + 228, 226, -1,223, 230, 224, -1,229, 224, 230, -1,230, 231, 229, -1,228, 229, 231, -1, + 229, 226, 224, -1,221, 224, 226, -1,228, 232, 227, -1,234, 233, 232, -1,231, 234, + 228, -1,232, 228, 234, -1,235, 234, 231, -1,234, 236, 233, -1,236, 237, 233, -1,238, + 233, 237, -1,239, 238, 237, -1,235, 237, 236, -1,240, 237, 235, -1,240, 241, 239, -1, + 240, 239, 237, -1,234, 235, 236, -1,244, 243, 242, -1,246, 245, 243, -1,243, 245, + 247, -1,249, 248, 244, -1,249, 251, 250, -1,243, 247, 242, -1,244, 242, 252, -1,244, + 252, 249, -1,250, 248, 249, -1,255, 254, 253, -1,258, 257, 256, -1,259, 258, 256, -1, + 261, 258, 260, -1,253, 263, 262, -1,261, 257, 258, -1,243, 257, 264, -1,260, 255, + 261, -1,257, 261, 265, -1,257, 265, 264, -1,264, 246, 243, -1,254, 255, 260, -1,268, + 267, 266, -1,268, 250, 267, -1,250, 251, 267, -1,266, 269, 268, -1,271, 270, 269, -1, + 268, 269, 270, -1,272, 250, 268, -1,270, 271, 273, -1,274, 255, 253, -1,253, 254, + 263, -1,253, 275, 274, -1,276, 270, 273, -1,278, 277, 262, -1,263, 278, 262, -1,276, + 253, 270, -1,253, 276, 275, -1,280, 280, 279, -1,279, 280, 281, -1,280, 282, 281, -1, + 280, 281, 280, -1,281, 280, 280, -1,283, 280, 280, -1,280, 283, 284, -1,280, 284, + 280, -1,284, 280, 280, -1,282, 280, 284, -1,287, 286, 285, -1,285, 289, 288, -1,289, + 291, 290, -1,292, 290, 291, -1,292, 294, 293, -1,293, 296, 295, -1,293, 295, 297, -1, + 296, 293, 294, -1,299, 286, 298, -1,298, 301, 300, -1,287, 285, 288, -1,298, 286, + 287, -1,298, 300, 299, -1,297, 302, 293, -1,292, 293, 290, -1,305, 304, 303, -1,303, + 297, 305, -1,302, 297, 303, -1,289, 290, 288, -1,308, 307, 306, -1,308, 306, 309, -1, + 311, 308, 310, -1,308, 311, 307, -1,311, 310, 312, -1,314, 313, 311, -1,312, 314, + 311, -1,316, 315, 311, -1,317, 315, 316, -1,316, 311, 318, -1,313, 318, 311, -1,321, + 320, 319, -1,321, 323, 322, -1,326, 325, 324, -1,325, 327, 324, -1,323, 326, 328, -1, + 329, 320, 321, -1,329, 331, 330, -1,321, 322, 329, -1,328, 326, 324, -1,332, 323, + 328, -1,323, 332, 322, -1,329, 330, 320, -1,334, 317, 333, -1,335, 317, 334, -1,336, + 334, 333, -1,336, 338, 337, -1,336, 337, 339, -1,319, 339, 337, -1,336, 333, 338, -1, + 336, 340, 334, -1,340, 315, 335, -1,340, 336, 341, -1,339, 341, 336, -1,319, 342, + 339, -1,343, 339, 342, -1,342, 320, 343, -1,343, 341, 339, -1,335, 334, 340, -1,345, + 344, 305, -1,347, 345, 346, -1,350, 349, 348, -1,349, 330, 348, -1,346, 349, 351, -1, + 344, 345, 347, -1,352, 304, 347, -1,344, 347, 304, -1,351, 352, 347, -1,353, 352, + 351, -1,349, 350, 351, -1,354, 351, 350, -1,350, 331, 354, -1,354, 353, 351, -1,348, + 331, 350, -1,346, 351, 347, -1,356, 355, 283, -1,284, 355, 356, -1,357, 356, 283, -1, + 357, 359, 358, -1,359, 311, 360, -1,356, 357, 358, -1,358, 361, 356, -1,284, 356, + 361, -1,362, 361, 358, -1,311, 363, 360, -1,315, 360, 363, -1,360, 315, 362, -1,362, + 358, 360, -1,359, 360, 358, -1,365, 364, 281, -1,366, 364, 365, -1,368, 367, 305, -1, + 365, 367, 366, -1,366, 367, 369, -1,366, 279, 364, -1,369, 370, 366, -1,279, 366, + 370, -1,371, 370, 369, -1,305, 372, 368, -1,297, 368, 372, -1,368, 297, 371, -1,371, + 369, 368, -1,367, 368, 369, -1,374, 281, 373, -1,375, 281, 374, -1,376, 281, 375, -1, + 377, 375, 374, -1,377, 374, 373, -1,377, 379, 378, -1,380, 378, 330, -1,378, 380, + 377, -1,377, 380, 381, -1,380, 383, 382, -1,330, 383, 380, -1,377, 373, 379, -1,375, + 377, 381, -1,384, 376, 381, -1,375, 381, 376, -1,384, 365, 376, -1,281, 376, 365, -1, + 367, 365, 384, -1,385, 384, 381, -1,346, 385, 382, -1,385, 381, 382, -1,386, 385, + 346, -1,383, 346, 382, -1,386, 305, 385, -1,367, 385, 305, -1,385, 367, 384, -1,380, + 382, 381, -1,387, 284, 361, -1,388, 284, 387, -1,389, 284, 388, -1,390, 388, 387, -1, + 391, 387, 361, -1,392, 362, 315, -1,361, 362, 391, -1,391, 362, 392, -1,394, 392, + 393, -1,391, 392, 390, -1,390, 392, 394, -1,315, 393, 392, -1,390, 387, 391, -1,390, + 389, 388, -1,390, 394, 395, -1,396, 389, 395, -1,389, 396, 284, -1,395, 397, 396, -1, + 398, 397, 395, -1,341, 399, 394, -1,395, 394, 399, -1,400, 399, 341, -1,393, 341, + 394, -1,320, 398, 400, -1,399, 400, 398, -1,398, 395, 399, -1,389, 390, 395, -1,284, + 402, 401, -1,402, 282, 401, -1,404, 396, 403, -1,396, 402, 284, -1,405, 403, 396, -1, + 397, 398, 406, -1,398, 320, 407, -1,404, 402, 396, -1,406, 408, 397, -1,397, 408, + 405, -1,405, 396, 397, -1,406, 409, 408, -1,373, 411, 410, -1,412, 373, 281, -1,281, + 401, 412, -1,379, 373, 410, -1,398, 407, 406, -1,379, 406, 407, -1,378, 407, 413, -1, + 320, 413, 407, -1,407, 378, 379, -1,410, 414, 379, -1,378, 413, 330, -1,373, 415, + 411, -1,379, 414, 406, -1,406, 414, 409, -1,412, 415, 373, -1,282, 412, 401, -1,69, + 68, 416, -1,70, 69, 416, -1,418, 220, 417, -1,418, 419, 416, -1,420, 416, 419, -1, + 416, 68, 418, -1,419, 418, 417, -1,416, 71, 70, -1,421, 74, 71, -1,421, 416, 420, -1, + 220, 214, 417, -1,219, 417, 214, -1,417, 219, 420, -1,417, 420, 419, -1,71, 416, + 421, -1,422, 37, 38, -1,423, 37, 422, -1,424, 144, 137, -1,423, 426, 425, -1,424, + 426, 144, -1,423, 422, 426, -1,423, 27, 37, -1,28, 26, 423, -1,423, 427, 28, -1,426, + 424, 425, -1,427, 425, 424, -1,424, 141, 427, -1,425, 427, 423, -1,137, 141, 424, -1, + 27, 423, 26, -1,429, 428, 28, -1,30, 28, 428, -1,430, 428, 429, -1,430, 431, 428, -1, + 30, 428, 431, -1,31, 30, 431, -1,432, 431, 430, -1,433, 430, 429, -1,436, 435, 434, -1, + 437, 434, 205, -1,436, 433, 438, -1,439, 432, 436, -1,436, 434, 437, -1,433, 436, + 432, -1,432, 440, 431, -1,430, 433, 432, -1,432, 439, 440, -1,3, 31, 440, -1,440, + 439, 441, -1,439, 436, 442, -1,443, 43, 3, -1,440, 443, 3, -1,443, 440, 441, -1,437, + 444, 436, -1,436, 444, 442, -1,445, 442, 444, -1,442, 445, 446, -1,446, 445, 177, -1, + 446, 439, 442, -1,439, 446, 441, -1,440, 31, 431, -1,436, 438, 435, -1,447, 57, 64, -1, + 448, 57, 447, -1,451, 450, 449, -1,453, 448, 452, -1,57, 448, 66, -1,452, 455, 454, -1, + 456, 448, 447, -1,452, 448, 456, -1,272, 458, 457, -1,452, 456, 457, -1,459, 455, + 458, -1,457, 458, 455, -1,455, 459, 460, -1,457, 455, 452, -1,66, 448, 453, -1,461, + 453, 454, -1,66, 453, 462, -1,462, 453, 461, -1,452, 454, 453, -1,450, 68, 461, -1, + 462, 461, 68, -1,449, 461, 454, -1,450, 461, 449, -1,277, 464, 463, -1,460, 463, + 464, -1,459, 463, 460, -1,466, 460, 465, -1,466, 451, 460, -1,465, 460, 464, -1,454, + 460, 451, -1,451, 449, 454, -1,455, 460, 454, -1,468, 241, 467, -1,240, 235, 467, -1, + 470, 467, 469, -1,240, 467, 241, -1,468, 467, 470, -1,248, 471, 244, -1,470, 472, + 471, -1,473, 472, 470, -1,474, 244, 472, -1,472, 244, 471, -1,471, 468, 470, -1,235, + 469, 467, -1,469, 473, 470, -1,473, 469, 475, -1,475, 231, 476, -1,475, 469, 235, -1, + 473, 475, 477, -1,235, 231, 475, -1,478, 475, 476, -1,243, 474, 479, -1,477, 474, + 473, -1,479, 474, 477, -1,474, 243, 244, -1,479, 478, 257, -1,478, 479, 477, -1,479, + 257, 243, -1,477, 475, 478, -1,473, 474, 472, -1,476, 231, 480, -1,480, 482, 481, -1, + 481, 482, 483, -1,480, 481, 476, -1,476, 481, 484, -1,257, 478, 485, -1,478, 476, + 484, -1,485, 478, 484, -1,487, 485, 486, -1,484, 488, 485, -1,483, 488, 484, -1,485, + 487, 257, -1,481, 483, 484, -1,482, 489, 483, -1,488, 489, 490, -1,489, 488, 483, -1, + 489, 491, 490, -1,491, 489, 211, -1,490, 491, 492, -1,489, 482, 211, -1,488, 490, + 493, -1,486, 493, 494, -1,486, 488, 493, -1,494, 493, 258, -1,486, 494, 487, -1,492, + 495, 493, -1,495, 258, 493, -1,490, 492, 493, -1,488, 486, 485, -1,497, 220, 496, -1, + 496, 499, 498, -1,501, 498, 500, -1,496, 498, 497, -1,497, 498, 501, -1,465, 503, + 502, -1,501, 502, 503, -1,504, 502, 501, -1,506, 505, 502, -1,502, 505, 465, -1,503, + 497, 501, -1,499, 500, 498, -1,500, 504, 501, -1,504, 500, 507, -1,508, 507, 68, -1, + 507, 500, 499, -1,507, 508, 504, -1,509, 509, 509, -1,504, 508, 510, -1,506, 511, + 505, -1,511, 506, 510, -1,510, 506, 504, -1,512, 68, 512, -1,508, 68, 510, -1,504, + 506, 502, -1,211, 513, 491, -1,491, 513, 514, -1,515, 495, 492, -1,514, 515, 492, -1, + 495, 516, 258, -1,492, 491, 514, -1,513, 213, 514, -1,514, 517, 515, -1,517, 514, + 213, -1,517, 518, 515, -1,515, 518, 519, -1,516, 520, 258, -1,520, 516, 519, -1,519, + 277, 520, -1,516, 515, 519, -1,515, 516, 495, -1,213, 218, 517, -1,518, 517, 521, -1, + 523, 519, 522, -1,523, 277, 519, -1,524, 519, 518, -1,521, 517, 218, -1,521, 220, + 497, -1,220, 521, 218, -1,521, 497, 503, -1,524, 522, 519, -1,522, 524, 503, -1,503, + 465, 522, -1,524, 521, 503, -1,522, 465, 523, -1,521, 524, 518, -1,28, 526, 525, -1, + 525, 528, 527, -1,528, 525, 526, -1,527, 528, 529, -1,525, 527, 530, -1,530, 531, + 28, -1,532, 531, 530, -1,534, 533, 531, -1,531, 533, 28, -1,28, 525, 530, -1,532, + 530, 527, -1,532, 529, 535, -1,529, 532, 527, -1,529, 536, 535, -1,536, 529, 141, -1, + 535, 536, 537, -1,529, 538, 538, -1,532, 535, 539, -1,534, 540, 533, -1,540, 534, + 539, -1,539, 537, 435, -1,539, 534, 532, -1,539, 435, 540, -1,535, 537, 539, -1,532, + 534, 531, -1,541, 156, 171, -1,171, 168, 542, -1,544, 542, 543, -1,171, 542, 541, -1, + 541, 542, 544, -1,202, 546, 545, -1,544, 545, 546, -1,547, 545, 544, -1,548, 198, + 545, -1,545, 198, 202, -1,546, 541, 544, -1,168, 543, 542, -1,543, 547, 544, -1,547, + 543, 549, -1,549, 167, 550, -1,549, 543, 168, -1,547, 549, 551, -1,168, 167, 549, -1, + 551, 549, 550, -1,195, 548, 552, -1,551, 548, 547, -1,552, 548, 551, -1,548, 195, + 198, -1,552, 553, 192, -1,553, 552, 551, -1,552, 192, 195, -1,551, 550, 553, -1,547, + 548, 545, -1,141, 554, 536, -1,554, 141, 140, -1,536, 554, 555, -1,435, 537, 556, -1, + 555, 556, 537, -1,556, 555, 557, -1,537, 536, 555, -1,435, 556, 558, -1,554, 559, + 555, -1,140, 143, 559, -1,559, 557, 555, -1,556, 560, 558, -1,556, 557, 560, -1,560, + 205, 558, -1,554, 140, 559, -1,562, 150, 561, -1,561, 564, 563, -1,566, 563, 565, -1, + 561, 563, 562, -1,562, 563, 566, -1,568, 567, 566, -1,190, 568, 569, -1,566, 569, + 568, -1,570, 569, 566, -1,572, 571, 569, -1,569, 571, 190, -1,567, 562, 566, -1,564, + 565, 563, -1,565, 573, 570, -1,565, 564, 573, -1,570, 573, 574, -1,565, 570, 566, -1, + 573, 541, 574, -1,541, 573, 156, -1,574, 541, 546, -1,564, 156, 573, -1,570, 574, + 575, -1,572, 575, 576, -1,572, 570, 575, -1,576, 575, 577, -1,572, 576, 571, -1,575, + 202, 577, -1,202, 575, 546, -1,574, 546, 575, -1,570, 572, 569, -1,143, 578, 559, -1, + 578, 143, 579, -1,559, 578, 580, -1,560, 557, 580, -1,581, 560, 580, -1,560, 581, + 205, -1,557, 559, 580, -1,578, 562, 580, -1,579, 150, 562, -1,567, 580, 562, -1,580, + 567, 581, -1,581, 582, 205, -1,582, 581, 568, -1,568, 190, 582, -1,581, 567, 568, -1, + 562, 578, 579, -1,309, 306, 583, -1,583, 306, 584, -1,587, 586, 585, -1,584, 587, + 585, -1,586, 588, 241, -1,585, 583, 584, -1,306, 307, 584, -1,584, 589, 587, -1,589, + 584, 307, -1,589, 590, 587, -1,587, 590, 588, -1,588, 239, 241, -1,239, 588, 591, -1, + 591, 238, 239, -1,588, 590, 591, -1,587, 588, 586, -1,304, 593, 592, -1,592, 593, + 594, -1,594, 596, 595, -1,596, 594, 593, -1,595, 596, 597, -1,594, 595, 598, -1,592, + 594, 598, -1,600, 599, 598, -1,8, 600, 601, -1,598, 601, 600, -1,602, 601, 598, -1, + 604, 603, 601, -1,601, 603, 8, -1,599, 592, 598, -1,602, 598, 595, -1,595, 605, 602, -1, + 605, 595, 597, -1,605, 597, 331, -1,602, 605, 606, -1,605, 607, 606, -1,607, 605, + 331, -1,606, 607, 608, -1,602, 606, 609, -1,604, 609, 610, -1,604, 602, 609, -1,610, + 609, 611, -1,604, 610, 603, -1,612, 611, 609, -1,12, 611, 612, -1,612, 609, 608, -1, + 606, 608, 609, -1,602, 604, 601, -1,607, 331, 613, -1,607, 613, 614, -1,616, 613, + 615, -1,608, 614, 617, -1,614, 608, 607, -1,618, 617, 616, -1,616, 617, 614, -1,614, + 613, 616, -1,608, 617, 619, -1,615, 620, 616, -1,620, 622, 621, -1,625, 624, 623, -1, + 622, 625, 626, -1,628, 616, 627, -1,621, 627, 620, -1,629, 621, 626, -1,623, 626, + 625, -1,621, 622, 626, -1,630, 627, 621, -1,624, 631, 623, -1,620, 627, 616, -1,629, + 626, 623, -1,612, 619, 12, -1,612, 608, 619, -1,619, 618, 632, -1,628, 618, 616, -1, + 617, 618, 619, -1,632, 618, 628, -1,12, 619, 633, -1,632, 634, 633, -1,635, 634, + 632, -1,619, 632, 633, -1,632, 628, 635, -1,635, 630, 636, -1,630, 635, 628, -1,636, + 629, 637, -1,629, 636, 630, -1,630, 621, 629, -1,635, 636, 638, -1,639, 635, 638, -1, + 637, 640, 638, -1,641, 640, 637, -1,636, 637, 638, -1,637, 629, 642, -1,635, 639, + 634, -1,628, 627, 630, -1,642, 629, 623, -1,643, 642, 623, -1,643, 631, 644, -1,643, + 644, 645, -1,645, 644, 646, -1,642, 648, 647, -1,642, 643, 648, -1,645, 649, 648, -1, + 650, 649, 645, -1,643, 645, 648, -1,648, 649, 651, -1,645, 646, 650, -1,643, 623, + 631, -1,653, 650, 652, -1,652, 650, 646, -1,655, 652, 654, -1,656, 654, 319, -1,658, + 657, 653, -1,653, 657, 650, -1,659, 653, 655, -1,656, 655, 654, -1,653, 652, 655, -1, + 660, 655, 656, -1,650, 657, 649, -1,649, 657, 661, -1,641, 647, 662, -1,641, 642, + 647, -1,651, 661, 663, -1,651, 649, 661, -1,648, 651, 647, -1,647, 651, 664, -1,662, + 665, 641, -1,663, 664, 651, -1,662, 647, 664, -1,661, 666, 663, -1,641, 665, 640, -1, + 658, 666, 661, -1,666, 658, 659, -1,666, 659, 667, -1,660, 659, 655, -1,658, 653, + 659, -1,668, 659, 660, -1,670, 667, 669, -1,667, 670, 666, -1,669, 668, 48, -1,668, + 669, 667, -1,667, 659, 668, -1,666, 670, 663, -1,661, 657, 658, -1,642, 641, 637, -1, + 319, 671, 656, -1,656, 671, 672, -1,672, 674, 673, -1,674, 672, 671, -1,673, 674, + 675, -1,672, 673, 676, -1,656, 672, 676, -1,668, 660, 676, -1,48, 668, 677, -1,676, + 677, 668, -1,678, 677, 676, -1,680, 679, 677, -1,677, 679, 48, -1,660, 656, 676, -1, + 678, 676, 673, -1,673, 681, 678, -1,681, 673, 675, -1,681, 675, 317, -1,678, 681, + 682, -1,681, 683, 682, -1,683, 681, 317, -1,682, 683, 684, -1,678, 682, 685, -1,680, + 685, 686, -1,680, 678, 685, -1,686, 685, 687, -1,680, 686, 679, -1,688, 687, 685, -1, + 53, 687, 688, -1,688, 685, 684, -1,682, 684, 685, -1,678, 680, 677, -1,317, 316, + 683, -1,683, 316, 689, -1,690, 688, 684, -1,689, 690, 684, -1,688, 691, 53, -1,684, + 683, 689, -1,316, 318, 689, -1,689, 692, 690, -1,692, 689, 318, -1,692, 693, 690, -1, + 690, 693, 694, -1,691, 61, 53, -1,61, 691, 694, -1,694, 64, 61, -1,691, 690, 694, -1, + 690, 691, 688, -1,302, 303, 695, -1,695, 303, 696, -1,699, 698, 697, -1,696, 699, + 697, -1,698, 700, 43, -1,697, 695, 696, -1,303, 304, 696, -1,696, 592, 699, -1,592, + 696, 304, -1,592, 599, 699, -1,699, 599, 600, -1,700, 42, 43, -1,42, 700, 600, -1, + 600, 8, 42, -1,700, 699, 600, -1,699, 700, 698, -1,310, 308, 701, -1,701, 308, 702, -1, + 705, 704, 703, -1,702, 705, 703, -1,704, 706, 272, -1,703, 701, 702, -1,308, 309, + 702, -1,702, 707, 705, -1,707, 702, 309, -1,707, 708, 705, -1,705, 708, 709, -1,706, + 250, 272, -1,250, 706, 709, -1,709, 248, 250, -1,706, 705, 709, -1,705, 706, 704, -1, + 318, 313, 692, -1,692, 313, 710, -1,710, 712, 711, -1,712, 710, 313, -1,711, 712, + 713, -1,710, 711, 714, -1,692, 710, 714, -1,694, 693, 714, -1,64, 694, 715, -1,714, + 715, 694, -1,716, 715, 714, -1,718, 717, 715, -1,715, 717, 64, -1,693, 692, 714, -1, + 716, 714, 711, -1,711, 719, 716, -1,719, 711, 713, -1,719, 713, 310, -1,716, 719, + 720, -1,719, 721, 720, -1,721, 719, 310, -1,720, 721, 703, -1,716, 720, 722, -1,718, + 722, 723, -1,718, 716, 722, -1,723, 722, 724, -1,718, 723, 717, -1,704, 724, 722, -1, + 272, 724, 704, -1,704, 722, 703, -1,720, 703, 722, -1,716, 718, 715, -1,287, 288, + 725, -1,725, 288, 726, -1,726, 728, 727, -1,728, 726, 288, -1,727, 728, 293, -1,726, + 727, 729, -1,725, 726, 729, -1,731, 730, 729, -1,177, 731, 732, -1,729, 732, 731, -1, + 733, 732, 729, -1,735, 734, 732, -1,732, 734, 177, -1,730, 725, 729, -1,733, 729, + 727, -1,727, 736, 733, -1,736, 727, 293, -1,736, 293, 302, -1,733, 736, 737, -1,736, + 695, 737, -1,695, 736, 302, -1,737, 695, 697, -1,733, 737, 738, -1,735, 738, 739, -1, + 735, 733, 738, -1,739, 738, 740, -1,735, 739, 734, -1,698, 740, 738, -1,43, 740, + 698, -1,698, 738, 697, -1,737, 697, 738, -1,733, 735, 732, -1,742, 299, 741, -1,741, + 299, 300, -1,742, 741, 743, -1,166, 162, 744, -1,744, 746, 745, -1,743, 746, 742, -1, + 743, 745, 746, -1,741, 747, 743, -1,300, 301, 747, -1,748, 743, 747, -1,743, 748, + 745, -1,745, 166, 744, -1,166, 745, 749, -1,749, 167, 166, -1,745, 748, 749, -1,747, + 741, 300, -1,707, 309, 750, -1,750, 309, 751, -1,751, 309, 752, -1,750, 751, 753, -1, + 707, 750, 753, -1,709, 708, 753, -1,248, 709, 754, -1,753, 754, 709, -1,755, 754, + 753, -1,756, 471, 754, -1,754, 471, 248, -1,708, 707, 753, -1,755, 753, 751, -1,755, + 752, 757, -1,752, 755, 751, -1,752, 583, 757, -1,583, 752, 309, -1,757, 583, 585, -1, + 755, 757, 758, -1,756, 758, 468, -1,756, 755, 758, -1,468, 758, 241, -1,756, 468, + 471, -1,585, 586, 758, -1,586, 241, 758, -1,757, 585, 758, -1,755, 756, 754, -1,747, + 301, 759, -1,759, 301, 760, -1,760, 301, 761, -1,759, 760, 762, -1,747, 759, 762, -1, + 749, 748, 762, -1,167, 749, 763, -1,762, 763, 749, -1,764, 763, 762, -1,765, 550, + 763, -1,763, 550, 167, -1,748, 747, 762, -1,764, 762, 760, -1,764, 761, 766, -1,761, + 764, 760, -1,761, 767, 766, -1,767, 761, 301, -1,766, 767, 768, -1,764, 766, 769, -1, + 765, 769, 553, -1,765, 764, 769, -1,553, 769, 192, -1,765, 553, 550, -1,768, 770, + 769, -1,770, 192, 769, -1,766, 768, 769, -1,764, 765, 763, -1,301, 298, 767, -1,768, + 767, 771, -1,773, 770, 772, -1,773, 192, 770, -1,774, 770, 768, -1,771, 767, 298, -1, + 771, 774, 768, -1,774, 771, 725, -1,287, 725, 771, -1,771, 298, 287, -1,774, 725, + 730, -1,772, 730, 731, -1,730, 772, 774, -1,731, 177, 772, -1,772, 177, 773, -1,774, + 772, 770, -1,777, 776, 775, -1,775, 778, 777, -1,780, 777, 779, -1,782, 781, 780, -1, + 783, 780, 781, -1,780, 783, 777, -1,777, 778, 784, -1,786, 785, 784, -1,785, 786, + 787, -1,784, 785, 788, -1,779, 777, 789, -1,788, 789, 784, -1,785, 790, 788, -1,789, + 777, 784, -1,793, 792, 791, -1,795, 794, 792, -1,795, 793, 796, -1,796, 797, 795, -1, + 795, 797, 798, -1,795, 792, 793, -1,798, 794, 795, -1,800, 799, 798, -1,794, 798, + 799, -1,801, 785, 800, -1,799, 800, 785, -1,802, 800, 798, -1,803, 800, 802, -1,803, + 790, 801, -1,803, 801, 800, -1,797, 802, 798, -1,806, 805, 804, -1,808, 807, 805, -1, + 810, 806, 809, -1,808, 810, 811, -1,806, 810, 808, -1,808, 805, 806, -1,812, 807, + 808, -1,813, 807, 812, -1,791, 807, 813, -1,793, 791, 813, -1,814, 813, 811, -1,812, + 811, 813, -1,793, 813, 814, -1,814, 796, 793, -1,808, 811, 812, -1,817, 816, 815, -1, + 818, 816, 817, -1,820, 817, 819, -1,820, 821, 818, -1,818, 821, 822, -1,820, 818, + 817, -1,823, 816, 818, -1,825, 823, 824, -1,825, 806, 804, -1,806, 825, 824, -1,821, + 826, 822, -1,824, 822, 826, -1,826, 809, 824, -1,806, 824, 809, -1,824, 823, 822, -1, + 818, 822, 823, -1,829, 828, 827, -1,829, 831, 830, -1,829, 830, 828, -1,834, 833, + 832, -1,829, 834, 832, -1,832, 833, 835, -1,829, 836, 831, -1,815, 838, 837, -1,831, + 839, 815, -1,819, 815, 839, -1,840, 829, 832, -1,839, 831, 836, -1,840, 836, 829, -1, + 837, 831, 815, -1,843, 842, 841, -1,842, 843, 844, -1,845, 843, 841, -1,848, 847, + 846, -1,846, 849, 848, -1,847, 850, 845, -1,847, 848, 851, -1,852, 843, 845, -1,850, + 854, 853, -1,845, 850, 853, -1,850, 847, 851, -1,855, 850, 851, -1,857, 855, 856, -1, + 851, 856, 855, -1,855, 854, 850, -1,848, 856, 851, -1,853, 852, 845, -1,860, 859, + 858, -1,859, 860, 861, -1,862, 860, 858, -1,864, 862, 863, -1,841, 842, 865, -1,842, + 844, 865, -1,863, 841, 865, -1,860, 862, 866, -1,867, 864, 863, -1,868, 866, 864, -1, + 868, 870, 869, -1,866, 868, 869, -1,864, 866, 862, -1,871, 868, 864, -1,872, 863, + 865, -1,864, 867, 871, -1,872, 867, 863, -1,869, 860, 866, -1,873, 128, 89, -1,128, + 873, 130, -1,129, 130, 873, -1,874, 873, 89, -1,874, 835, 875, -1,875, 833, 834, -1, + 833, 875, 835, -1,875, 876, 874, -1,876, 873, 874, -1,876, 877, 873, -1,875, 877, + 876, -1,877, 878, 873, -1,129, 878, 132, -1,834, 829, 875, -1,879, 875, 829, -1,829, + 827, 880, -1,829, 880, 879, -1,879, 877, 875, -1,129, 873, 878, -1,106, 107, 881, -1, + 883, 882, 881, -1,106, 881, 882, -1,109, 106, 882, -1,884, 882, 883, -1,777, 885, + 776, -1,777, 887, 886, -1,886, 887, 883, -1,884, 883, 887, -1,885, 777, 886, -1,884, + 888, 882, -1,889, 108, 109, -1,109, 890, 889, -1,108, 889, 99, -1,882, 891, 890, -1, + 783, 781, 887, -1,782, 887, 781, -1,777, 783, 887, -1,887, 782, 888, -1,888, 884, + 887, -1,882, 888, 891, -1,882, 890, 109, -1,892, 92, 99, -1,894, 893, 892, -1,92, + 892, 893, -1,895, 893, 894, -1,893, 105, 92, -1,897, 116, 896, -1,105, 896, 116, -1, + 898, 897, 896, -1,893, 895, 896, -1,900, 899, 895, -1,896, 895, 899, -1,896, 899, + 898, -1,901, 898, 899, -1,898, 902, 897, -1,105, 893, 896, -1,900, 895, 894, -1,903, + 899, 900, -1,868, 904, 870, -1,903, 904, 905, -1,905, 904, 868, -1,899, 903, 905, -1, + 908, 907, 906, -1,910, 905, 909, -1,871, 909, 868, -1,909, 905, 868, -1,901, 905, + 910, -1,905, 901, 899, -1,911, 898, 901, -1,913, 907, 912, -1,897, 902, 914, -1,915, + 914, 902, -1,902, 898, 912, -1,917, 916, 898, -1,916, 912, 898, -1,912, 916, 913, -1, + 912, 918, 902, -1,911, 917, 898, -1,919, 915, 918, -1,89, 915, 919, -1,912, 920, + 918, -1,920, 921, 918, -1,919, 918, 921, -1,922, 921, 920, -1,915, 902, 918, -1,920, + 912, 923, -1,907, 908, 912, -1,906, 924, 923, -1,855, 924, 854, -1,923, 908, 906, -1, + 925, 922, 923, -1,923, 924, 926, -1,926, 925, 923, -1,857, 926, 855, -1,926, 924, + 855, -1,908, 923, 912, -1,920, 923, 922, -1,914, 116, 897, -1,99, 890, 927, -1,929, + 927, 928, -1,930, 927, 890, -1,929, 931, 99, -1,932, 931, 929, -1,934, 933, 931, -1, + 931, 933, 99, -1,99, 927, 929, -1,930, 928, 927, -1,928, 932, 929, -1,932, 928, 935, -1, + 782, 935, 928, -1,928, 930, 782, -1,932, 935, 936, -1,934, 937, 933, -1,937, 934, + 938, -1,936, 938, 934, -1,938, 900, 937, -1,934, 932, 936, -1,932, 934, 931, -1,940, + 835, 939, -1,940, 942, 941, -1,942, 940, 939, -1,942, 939, 943, -1,941, 942, 944, -1, + 922, 946, 945, -1,944, 945, 946, -1,945, 944, 947, -1,949, 945, 948, -1,945, 949, + 922, -1,946, 941, 944, -1,942, 950, 944, -1,943, 950, 942, -1,950, 943, 951, -1,947, + 951, 952, -1,951, 947, 950, -1,953, 953, 953, -1,950, 947, 944, -1,955, 948, 954, -1, + 952, 948, 947, -1,954, 948, 952, -1,948, 955, 949, -1,89, 954, 952, -1,956, 956, + 956, -1,952, 951, 89, -1,947, 948, 945, -1,836, 958, 957, -1,957, 958, 959, -1,962, + 961, 960, -1,959, 962, 960, -1,961, 963, 857, -1,960, 957, 959, -1,958, 835, 959, -1, + 959, 940, 962, -1,940, 959, 835, -1,940, 941, 962, -1,962, 941, 946, -1,963, 964, + 857, -1,964, 963, 922, -1,946, 922, 963, -1,963, 962, 946, -1,962, 963, 961, -1,819, + 966, 965, -1,966, 819, 839, -1,965, 966, 967, -1,969, 968, 967, -1,970, 969, 967, -1, + 969, 970, 848, -1,968, 965, 967, -1,966, 957, 967, -1,839, 836, 957, -1,960, 967, + 957, -1,967, 960, 970, -1,970, 971, 848, -1,971, 970, 961, -1,961, 857, 971, -1,970, + 960, 961, -1,957, 966, 839, -1,809, 973, 972, -1,972, 973, 974, -1,974, 976, 975, -1, + 976, 974, 973, -1,975, 976, 977, -1,974, 975, 978, -1,972, 974, 979, -1,847, 981, + 980, -1,979, 981, 972, -1,980, 981, 979, -1,983, 980, 982, -1,978, 980, 979, -1,982, + 980, 978, -1,980, 983, 847, -1,979, 974, 978, -1,975, 984, 978, -1,985, 978, 984, -1, + 984, 977, 819, -1,985, 984, 965, -1,985, 982, 978, -1,819, 965, 984, -1,965, 968, + 985, -1,985, 968, 969, -1,982, 987, 986, -1,987, 982, 985, -1,986, 987, 988, -1,982, + 986, 983, -1,988, 969, 848, -1,969, 988, 987, -1,987, 985, 969, -1,984, 975, 977, -1, + 991, 990, 989, -1,989, 990, 992, -1,841, 994, 993, -1,992, 994, 989, -1,995, 994, + 992, -1,990, 809, 992, -1,992, 972, 995, -1,972, 992, 809, -1,995, 972, 981, -1,993, + 996, 841, -1,996, 993, 847, -1,981, 847, 993, -1,993, 995, 981, -1,995, 993, 994, -1, + 796, 998, 997, -1,997, 998, 999, -1,862, 1001, 1000, -1,999, 1001, 997, -1,1002, + 1001, 999, -1,998, 811, 999, -1,999, 1003, 1002, -1,1003, 999, 811, -1,1002, 1003, + 1004, -1,1000, 1005, 862, -1,1005, 1000, 841, -1,1004, 841, 1000, -1,1000, 1002, + 1004, -1,1002, 1000, 1001, -1,790, 1007, 1006, -1,1006, 1007, 1008, -1,1008, 1010, + 1009, -1,1010, 1008, 1007, -1,1009, 1010, 1011, -1,1008, 1009, 1012, -1,1006, 1008, + 1012, -1,1014, 1013, 1012, -1,860, 1014, 1015, -1,1012, 1015, 1014, -1,1016, 1015, + 1012, -1,1018, 1017, 1015, -1,1015, 1017, 860, -1,1013, 1006, 1012, -1,1016, 1012, + 1009, -1,1009, 1019, 1016, -1,1019, 1009, 1011, -1,1019, 1011, 796, -1,1016, 1019, + 1020, -1,1019, 997, 1020, -1,997, 1019, 796, -1,1020, 997, 1001, -1,1016, 1020, 1021, -1, + 1018, 1021, 1022, -1,1018, 1016, 1021, -1,1022, 1021, 1023, -1,1018, 1022, 1017, -1, + 1021, 862, 1023, -1,862, 1021, 1001, -1,1020, 1001, 1021, -1,1016, 1018, 1015, -1, + 789, 788, 1024, -1,1026, 1024, 1025, -1,1029, 1028, 1027, -1,1029, 870, 1028, -1, + 1030, 1028, 1026, -1,1025, 1024, 788, -1,1025, 1030, 1026, -1,1030, 1025, 1006, -1, + 790, 1006, 1025, -1,1025, 788, 790, -1,1030, 1006, 1013, -1,1027, 860, 1029, -1,860, + 1027, 1014, -1,1013, 1014, 1027, -1,1027, 1030, 1013, -1,1030, 1027, 1028, -1,782, + 1031, 935, -1,935, 1031, 1032, -1,1033, 938, 936, -1,1032, 1033, 936, -1,938, 1034, + 900, -1,936, 935, 1032, -1,1031, 789, 1032, -1,1032, 1024, 1033, -1,1024, 1032, 789, -1, + 1024, 1026, 1033, -1,1033, 1026, 1028, -1,1034, 1035, 900, -1,1035, 1034, 1028, -1, + 1028, 870, 1035, -1,1034, 1033, 1028, -1,1033, 1034, 938, -1,1036, 1037, 1036, -1, + 1036, 1038, 1036, -1,1036, 1036, 1038, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1040, 1039, -1,1042, 1039, 1041, -1,1039, 1044, 1043, -1, + 1041, 1039, 1043, -1,1044, 1039, 1040, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1036, 1040, -1,1040, 1036, 1036, -1,1036, 1036, 1036, -1, + 1037, 1038, 1036, -1,1036, 1046, 1045, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1036, 1045, -1,1049, 1048, 1047, -1,1051, 1047, 1050, -1, + 1048, 1050, 1047, -1,1045, 1051, 1050, -1,1045, 1046, 1051, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1036, 1052, -1,1054, 1052, 1053, -1,1052, 1054, 1036, -1, + 1053, 1055, 1054, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1058, 1057, 1056, -1,1057, 1058, 1059, -1,1036, 1056, 1036, -1,1058, 1060, 1059, -1, + 1061, 1038, 1037, -1,1037, 1037, 1038, -1,1036, 1036, 1036, -1,1036, 1036, 1062, -1, + 1063, 1062, 1061, -1,1036, 1036, 1036, -1,1056, 1036, 1058, -1,1036, 1036, 1056, -1, + 1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1062, 1036, -1, + 1036, 1062, 1063, -1,1065, 1061, 1064, -1,1061, 1065, 1063, -1,1036, 1036, 1036, -1, + 1066, 1060, 1058, -1,1064, 1036, 1065, -1,1036, 1037, 1037, -1,1064, 1061, 1037, -1, + 1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1068, 1036, 1067, -1, + 1036, 1067, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1064, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1, + 1036, 1036, 1036, -1,1036, 1036, 1036, -1,1036, 1036, 1036, -1,1070, 1036, 1069, -1, + 1036, 1036, 1070, -1,1070, 1071, 1036, -1,1036, 1071, 1036, -1,1036, 1036, 1036, -1, + 1036, 1064, 1036, -1,1036, 1036, 1038, -1,1074, 1073, 1072, -1,1072, 1075, 1074, -1, + 280, 1077, 1076, -1,1078, 1076, 1077, -1,1078, 1080, 1079, -1,1082, 1079, 1081, -1, + 1085, 1084, 1083, -1,1085, 1086, 1084, -1,1087, 1084, 1082, -1,1081, 1079, 1080, -1, + 1081, 1087, 1082, -1,1087, 1081, 1088, -1,1077, 1088, 1081, -1,1081, 1080, 1077, -1, + 1087, 1088, 1089, -1,1083, 1089, 1083, -1,1089, 1083, 1087, -1,1083, 1090, 1083, -1, + 1083, 1090, 1085, -1,1087, 1083, 1084, -1,1086, 1090, 1091, -1,1091, 1092, 1086, -1, + 1095, 1094, 1093, -1,1097, 1093, 1096, -1,1096, 1098, 1097, -1,1099, 1095, 1097, -1, + 1100, 1097, 1098, -1,1095, 1093, 1097, -1,1101, 1098, 1096, -1,1103, 1101, 1102, -1, + 1105, 1102, 1104, -1,1107, 1107, 1106, -1,1107, 1092, 1106, -1,1109, 1107, 1108, -1, + 1109, 1110, 1104, -1,1101, 1103, 1098, -1,1111, 1103, 1105, -1,1099, 1097, 1100, -1, + 1112, 1100, 1098, -1,1102, 1105, 1103, -1,1098, 1103, 1112, -1,1105, 280, 1111, -1, + 1103, 1111, 1112, -1,1113, 280, 1105, -1,1109, 1108, 1110, -1,1113, 1110, 1108, -1, + 1114, 1108, 1107, -1,1107, 1107, 1108, -1,1108, 1114, 1113, -1,1107, 1091, 1107, -1, + 1107, 1107, 1114, -1,1113, 1105, 1110, -1,1106, 1091, 1107, -1,1104, 1110, 1105, -1, + 1099, 1116, 1115, -1,1115, 1094, 1099, -1,1115, 1118, 1117, -1,1120, 1117, 1119, -1, + 1123, 1122, 1121, -1,1123, 1124, 1122, -1,1125, 1122, 1120, -1,1119, 1117, 1118, -1, + 1119, 1125, 1120, -1,1125, 1119, 1126, -1,1116, 1126, 1119, -1,1119, 1118, 1116, -1, + 1125, 1126, 1127, -1,1121, 1127, 1121, -1,1127, 1121, 1125, -1,1121, 1128, 1121, -1, + 1121, 1128, 1123, -1,1125, 1121, 1122, -1,1128, 280, 1129, -1,1129, 1124, 1128, -1, + 1132, 1131, 1130, -1,1130, 1133, 1132, -1,1133, 1135, 1134, -1,1137, 1134, 1136, -1, + 1140, 1139, 1138, -1,1140, 1141, 1139, -1,1142, 1139, 1137, -1,1136, 1134, 1135, -1, + 1136, 1142, 1137, -1,1142, 1136, 1143, -1,1130, 1143, 1136, -1,1136, 1135, 1130, -1, + 1142, 1143, 1144, -1,1138, 1144, 1138, -1,1144, 1138, 1142, -1,1138, 1145, 1138, -1, + 1138, 1145, 1140, -1,1142, 1138, 1139, -1,1141, 1145, 1146, -1,1146, 1147, 1141, -1, + 1150, 1149, 1148, -1,1152, 1148, 1151, -1,1151, 1153, 1152, -1,1154, 1150, 1152, -1, + 1155, 1152, 1153, -1,1150, 1148, 1152, -1,1156, 1153, 1151, -1,1158, 1156, 1157, -1, + 1160, 1157, 1159, -1,1162, 1162, 1161, -1,1162, 1147, 1161, -1,1164, 1162, 1163, -1, + 1164, 1165, 1159, -1,1156, 1158, 1153, -1,1166, 1158, 1160, -1,1154, 1152, 1155, -1, + 1167, 1155, 1153, -1,1157, 1160, 1158, -1,1153, 1158, 1167, -1,1160, 1168, 1166, -1, + 1158, 1166, 1167, -1,1169, 1168, 1160, -1,1164, 1163, 1165, -1,1169, 1165, 1163, -1, + 1170, 1163, 1162, -1,1162, 1162, 1163, -1,1163, 1170, 1169, -1,1162, 1146, 1162, -1, + 1162, 1162, 1170, -1,1169, 1160, 1165, -1,1161, 1146, 1162, -1,1159, 1165, 1160, -1, + 1154, 1172, 1171, -1,1171, 1149, 1154, -1,1175, 1174, 1173, -1,1173, 1176, 1175, -1, + 1177, 1178, 1177, -1,1177, 1177, 1179, -1,1181, 1180, 1179, -1,1177, 1179, 1180, -1, + 1177, 1177, 1180, -1,1182, 1180, 1181, -1,1177, 1183, 1178, -1,1186, 1185, 1184, -1, + 1184, 1188, 1187, -1,1190, 1189, 1188, -1,1191, 1182, 1186, -1,1190, 1176, 1192, -1, + 1184, 1187, 1186, -1,1182, 1185, 1186, -1,1182, 1181, 1185, -1,1182, 1193, 1180, -1, + 1191, 1193, 1182, -1,1177, 1183, 1177, -1,1194, 1183, 1177, -1,1177, 1180, 1193, -1, + 1186, 1187, 1195, -1,1191, 1186, 1195, -1,1196, 1195, 1187, -1,1198, 1197, 1192, -1, + 1189, 1192, 1199, -1,1176, 1198, 1192, -1,1190, 1192, 1189, -1,1189, 1199, 1196, -1, + 1198, 1173, 1197, -1,1192, 1197, 1199, -1,1196, 1187, 1189, -1,1188, 1189, 1187, -1, + 1194, 1172, 1200, -1,1200, 1178, 1194, -1,1202, 1201, 1171, -1,1203, 1171, 1201, -1, + 1204, 1201, 1202, -1,1204, 1206, 1205, -1,1204, 1205, 1207, -1,1053, 1207, 1205, -1, + 1204, 1202, 1206, -1,1204, 1208, 1201, -1,1208, 1149, 1203, -1,1208, 1204, 1209, -1, + 1207, 1209, 1204, -1,1053, 1210, 1207, -1,1211, 1207, 1210, -1,1210, 1052, 1211, -1, + 1211, 1209, 1207, -1,1203, 1201, 1208, -1,1212, 1139, 1141, -1,1213, 1139, 1212, -1, + 1214, 1137, 1213, -1,1139, 1213, 1137, -1,1134, 1137, 1214, -1,1215, 1214, 1213, -1, + 1215, 1213, 1212, -1,1215, 1217, 1216, -1,1218, 1216, 1050, -1,1216, 1218, 1215, -1, + 1215, 1218, 1219, -1,1218, 1048, 1220, -1,1050, 1048, 1218, -1,1215, 1212, 1217, -1, + 1214, 1215, 1219, -1,1219, 1221, 1214, -1,1134, 1214, 1221, -1,1133, 1134, 1221, -1, + 1222, 1221, 1219, -1,1222, 1223, 1221, -1,1133, 1221, 1223, -1,1224, 1223, 1222, -1, + 1225, 1222, 1219, -1,1049, 1225, 1220, -1,1225, 1219, 1220, -1,1047, 1225, 1049, -1, + 1048, 1049, 1220, -1,1225, 1047, 1226, -1,1226, 1047, 1051, -1,1224, 1225, 1226, -1, + 1225, 1224, 1222, -1,1218, 1220, 1219, -1,1223, 1227, 1133, -1,1228, 1227, 1223, -1, + 1224, 1226, 1229, -1,1224, 1229, 1228, -1,1051, 1230, 1226, -1,1228, 1223, 1224, -1, + 1228, 1132, 1227, -1,1229, 1231, 1228, -1,1132, 1228, 1231, -1,1229, 1232, 1231, -1, + 1230, 1232, 1229, -1,1051, 1233, 1230, -1,1234, 1230, 1233, -1,1233, 1046, 1234, -1, + 1234, 1232, 1230, -1,1226, 1230, 1229, -1,1236, 1235, 1147, -1,1237, 1235, 1236, -1, + 1240, 1239, 1238, -1,1240, 1238, 1237, -1,1045, 1241, 1239, -1,1237, 1236, 1240, -1, + 1237, 1141, 1235, -1,1238, 1212, 1237, -1,1141, 1237, 1212, -1,1238, 1217, 1212, -1, + 1216, 1217, 1238, -1,1045, 1242, 1241, -1,1216, 1241, 1242, -1,1242, 1050, 1216, -1, + 1216, 1238, 1241, -1,1239, 1241, 1238, -1,1243, 1148, 1149, -1,1209, 1243, 1208, -1, + 1149, 1208, 1243, -1,1243, 1209, 1244, -1,1243, 1151, 1148, -1,1246, 1245, 1151, -1, + 1247, 1157, 1245, -1,1249, 1243, 1248, -1,1151, 1249, 1246, -1,1245, 1246, 1247, -1, + 1246, 1249, 1250, -1,1247, 1251, 1157, -1,1243, 1249, 1151, -1,1247, 1246, 1250, -1, + 1252, 1244, 1211, -1,1209, 1211, 1244, -1,1253, 1252, 1052, -1,1211, 1052, 1252, -1, + 1254, 1252, 1253, -1,1252, 1248, 1244, -1,1254, 1250, 1248, -1,1249, 1248, 1250, -1, + 1255, 1250, 1254, -1,1252, 1254, 1248, -1,1257, 1255, 1256, -1,1254, 1256, 1255, -1, + 1255, 1257, 1258, -1,1259, 1250, 1255, -1,1253, 1256, 1254, -1,1248, 1243, 1244, -1, + 1247, 1250, 1259, -1,1260, 1164, 1251, -1,1261, 1260, 1259, -1,1260, 1247, 1259, -1, + 1260, 1261, 1262, -1,1263, 1261, 1259, -1,1262, 1164, 1260, -1,1251, 1247, 1260, -1, + 1265, 1262, 1264, -1,1164, 1262, 1265, -1,1147, 1265, 1236, -1,1264, 1267, 1266, -1, + 1262, 1267, 1264, -1,1265, 1264, 1236, -1,1236, 1264, 1240, -1,1261, 1267, 1262, -1, + 1268, 1267, 1261, -1,1269, 1263, 1258, -1,1263, 1259, 1258, -1,1268, 1261, 1263, -1, + 1270, 1268, 1263, -1,1258, 1271, 1269, -1,1263, 1269, 1270, -1,1270, 1272, 1268, -1, + 1257, 1271, 1258, -1,1272, 1240, 1266, -1,1264, 1266, 1240, -1,1239, 1240, 1272, -1, + 1268, 1272, 1266, -1,1045, 1239, 1273, -1,1272, 1273, 1239, -1,1270, 1273, 1272, -1, + 1267, 1268, 1266, -1,1255, 1258, 1259, -1,1276, 1275, 1274, -1,1275, 1276, 1129, -1, + 1277, 1129, 1276, -1,1279, 1274, 1278, -1,1281, 1036, 1280, -1,1278, 1283, 1282, -1, + 1283, 1281, 1280, -1,1279, 1276, 1274, -1,1279, 1284, 1276, -1,1277, 1276, 1284, -1, + 1277, 1284, 1124, -1,1285, 1284, 1279, -1,1283, 1280, 1282, -1,1286, 1282, 1280, -1, + 1282, 1286, 1285, -1,1280, 1039, 1286, -1,1285, 1279, 1282, -1,1278, 1282, 1279, -1, + 1287, 1084, 1086, -1,1288, 1084, 1287, -1,1289, 1082, 1288, -1,1084, 1288, 1082, -1, + 1079, 1082, 1289, -1,1290, 1289, 1288, -1,1290, 1288, 1287, -1,1290, 1292, 1291, -1, + 1293, 1291, 1057, -1,1291, 1293, 1290, -1,1290, 1293, 1294, -1,1293, 1059, 1295, -1, + 1057, 1059, 1293, -1,1290, 1287, 1292, -1,1289, 1290, 1294, -1,1294, 1296, 1289, -1, + 1079, 1289, 1296, -1,1078, 1079, 1296, -1,1297, 1296, 1294, -1,1297, 1298, 1296, -1, + 1078, 1296, 1298, -1,1299, 1298, 1297, -1,1300, 1297, 1294, -1,1060, 1300, 1295, -1, + 1300, 1294, 1295, -1,1066, 1300, 1060, -1,1059, 1060, 1295, -1,1300, 1066, 1301, -1, + 1301, 1066, 1058, -1,1299, 1300, 1301, -1,1300, 1299, 1297, -1,1293, 1295, 1294, -1, + 1277, 1078, 1298, -1,1298, 1302, 1277, -1,1076, 1277, 1302, -1,1303, 1302, 1298, -1, + 1303, 1299, 1301, -1,1303, 1301, 1304, -1,1058, 1304, 1301, -1,1303, 1298, 1299, -1, + 1303, 1305, 1302, -1,1306, 1302, 1305, -1,1303, 1304, 1307, -1,1305, 1303, 1307, -1, + 1058, 1308, 1304, -1,1309, 1304, 1308, -1,1308, 1036, 1310, -1,1308, 1310, 1309, -1, + 1309, 1307, 1304, -1,1076, 1302, 1306, -1,1312, 1311, 1092, -1,1314, 1312, 1313, -1, + 1317, 1316, 1315, -1,1316, 1056, 1315, -1,1313, 1316, 1318, -1,1311, 1312, 1314, -1, + 1313, 1318, 1314, -1,1287, 1314, 1318, -1,1314, 1287, 1086, -1,1086, 1311, 1314, -1, + 1292, 1287, 1318, -1,1291, 1292, 1317, -1,1318, 1317, 1292, -1,1317, 1057, 1291, -1, + 1315, 1057, 1317, -1,1316, 1317, 1318, -1,1320, 1319, 1094, -1,1320, 1321, 1319, -1, + 1323, 1320, 1322, -1,1094, 1322, 1320, -1,1320, 1323, 1324, -1,1320, 1325, 1321, -1, + 1328, 1327, 1326, -1,1330, 1329, 1327, -1,1325, 1320, 1331, -1,1326, 1325, 1332, -1, + 1328, 1332, 1333, -1,1327, 1328, 1330, -1,1328, 1326, 1332, -1,1332, 1325, 1334, -1, + 1330, 1335, 1329, -1,1321, 1325, 1326, -1,1330, 1328, 1333, -1,1324, 1337, 1336, -1, + 1323, 1337, 1324, -1,1320, 1324, 1331, -1,1331, 1324, 1338, -1,1339, 1336, 1040, -1, + 1337, 1040, 1336, -1,1340, 1338, 1339, -1,1336, 1339, 1338, -1,1338, 1324, 1336, -1, + 1338, 1334, 1331, -1,1341, 1333, 1334, -1,1332, 1334, 1333, -1,1342, 1333, 1341, -1, + 1338, 1340, 1341, -1,1343, 1341, 1340, -1,1343, 1344, 1342, -1,1342, 1344, 1345, -1, + 1343, 1342, 1341, -1,1346, 1333, 1342, -1,1334, 1338, 1341, -1,1334, 1325, 1331, -1, + 1330, 1333, 1346, -1,1348, 1347, 1335, -1,1349, 1347, 1348, -1,1330, 1346, 1348, -1, + 1351, 1350, 1346, -1,1350, 1348, 1346, -1,1350, 1352, 1349, -1,1353, 1349, 1352, -1, + 1350, 1349, 1348, -1,1354, 1352, 1350, -1,1349, 1355, 1347, -1,1335, 1330, 1348, -1, + 1357, 1356, 1355, -1,1312, 1092, 1356, -1,1352, 1358, 1353, -1,1357, 1353, 1358, -1, + 1359, 1357, 1358, -1,1356, 1357, 1312, -1,1357, 1355, 1353, -1,1312, 1357, 1313, -1, + 1349, 1353, 1355, -1,1360, 1358, 1352, -1,1361, 1351, 1345, -1,1351, 1346, 1345, -1, + 1354, 1350, 1351, -1,1362, 1354, 1351, -1,1361, 1345, 1363, -1,1364, 1360, 1362, -1, + 1351, 1361, 1362, -1,1354, 1362, 1360, -1,1354, 1360, 1352, -1,1344, 1363, 1345, -1, + 1365, 1313, 1359, -1,1357, 1359, 1313, -1,1316, 1313, 1365, -1,1360, 1364, 1365, -1, + 1366, 1365, 1364, -1,1366, 1056, 1316, -1,1366, 1316, 1365, -1,1359, 1360, 1365, -1, + 1359, 1358, 1360, -1,1342, 1345, 1346, -1,1284, 1122, 1124, -1,1367, 1122, 1284, -1, + 1368, 1120, 1367, -1,1122, 1367, 1120, -1,1117, 1120, 1368, -1,1369, 1368, 1367, -1, + 1369, 1367, 1284, -1,1369, 1285, 1286, -1,1370, 1286, 1039, -1,1286, 1370, 1369, -1, + 1369, 1370, 1371, -1,1370, 1042, 1372, -1,1039, 1042, 1370, -1,1369, 1284, 1285, -1, + 1368, 1369, 1371, -1,1371, 1373, 1368, -1,1117, 1368, 1373, -1,1115, 1117, 1373, -1, + 1374, 1373, 1371, -1,1374, 1375, 1373, -1,1115, 1373, 1375, -1,1376, 1375, 1374, -1, + 1377, 1374, 1371, -1,1041, 1377, 1372, -1,1377, 1371, 1372, -1,1043, 1377, 1041, -1, + 1042, 1041, 1372, -1,1377, 1043, 1378, -1,1378, 1043, 1044, -1,1376, 1377, 1378, -1, + 1377, 1376, 1374, -1,1370, 1372, 1371, -1,1375, 1379, 1115, -1,1380, 1379, 1375, -1, + 1376, 1378, 1381, -1,1376, 1381, 1380, -1,1044, 1382, 1378, -1,1380, 1375, 1376, -1, + 1380, 1094, 1379, -1,1381, 1322, 1380, -1,1094, 1380, 1322, -1,1381, 1323, 1322, -1, + 1337, 1323, 1381, -1,1044, 1383, 1382, -1,1337, 1382, 1383, -1,1383, 1040, 1337, -1, + 1337, 1381, 1382, -1,1378, 1382, 1381, -1,1385, 1072, 1384, -1,1384, 1386, 1385, -1, + 1387, 1385, 1386, -1,1385, 1388, 1072, -1,1389, 1386, 1384, -1,1391, 1390, 1071, -1, + 1390, 1392, 1389, -1,1392, 1390, 1391, -1,1386, 1389, 1392, -1,1393, 1075, 1388, -1, + 1393, 1385, 1387, -1,1387, 1386, 1394, -1,1395, 1392, 1391, -1,1070, 1396, 1391, -1, + 1395, 1391, 1396, -1,1394, 1392, 1395, -1,1392, 1394, 1386, -1,1393, 1388, 1385, -1, + 1070, 1397, 1396, -1,1395, 1396, 1397, -1,1399, 1398, 1069, -1,1399, 1397, 1398, -1, + 1070, 1398, 1397, -1,1400, 1379, 1176, -1,1380, 1379, 1400, -1,1402, 1401, 1381, -1, + 1402, 1381, 1380, -1,1054, 1382, 1401, -1,1380, 1400, 1402, -1,1380, 1175, 1379, -1, + 1381, 1403, 1380, -1,1175, 1380, 1403, -1,1381, 1404, 1403, -1,1405, 1404, 1381, -1, + 1054, 1383, 1382, -1,1405, 1382, 1383, -1,1383, 1055, 1405, -1,1405, 1381, 1382, -1, + 1401, 1382, 1381, -1,1407, 1406, 1178, -1,1407, 1408, 1406, -1,1410, 1407, 1409, -1, + 1178, 1409, 1407, -1,1407, 1410, 1411, -1,1407, 1412, 1408, -1,1415, 1414, 1413, -1, + 1417, 1416, 1414, -1,1412, 1407, 1418, -1,1413, 1412, 1419, -1,1415, 1419, 1420, -1, + 1414, 1415, 1417, -1,1415, 1413, 1419, -1,1419, 1412, 1421, -1,1417, 1422, 1416, -1, + 1408, 1412, 1413, -1,1417, 1415, 1420, -1,1411, 1424, 1423, -1,1410, 1424, 1411, -1, + 1407, 1411, 1418, -1,1418, 1411, 1425, -1,1426, 1423, 1067, -1,1424, 1067, 1423, -1, + 1427, 1425, 1426, -1,1423, 1426, 1425, -1,1425, 1411, 1423, -1,1425, 1421, 1418, -1, + 1428, 1420, 1421, -1,1419, 1421, 1420, -1,1429, 1420, 1428, -1,1425, 1427, 1428, -1, + 1430, 1428, 1427, -1,1430, 1431, 1429, -1,1429, 1431, 1432, -1,1430, 1429, 1428, -1, + 1433, 1420, 1429, -1,1421, 1425, 1428, -1,1421, 1412, 1418, -1,1417, 1420, 1433, -1, + 1435, 1434, 1422, -1,1436, 1434, 1435, -1,1417, 1433, 1435, -1,1438, 1437, 1433, -1, + 1437, 1435, 1433, -1,1437, 1439, 1436, -1,1440, 1436, 1439, -1,1437, 1436, 1435, -1, + 1441, 1439, 1437, -1,1436, 1442, 1434, -1,1422, 1417, 1435, -1,1444, 1443, 1442, -1, + 1400, 1176, 1443, -1,1439, 1445, 1440, -1,1444, 1440, 1445, -1,1446, 1444, 1445, -1, + 1443, 1444, 1400, -1,1444, 1442, 1440, -1,1400, 1444, 1402, -1,1436, 1440, 1442, -1, + 1447, 1445, 1439, -1,1448, 1438, 1432, -1,1438, 1433, 1432, -1,1441, 1437, 1438, -1, + 1449, 1441, 1438, -1,1448, 1432, 1450, -1,1451, 1447, 1449, -1,1438, 1448, 1449, -1, + 1441, 1449, 1447, -1,1441, 1447, 1439, -1,1431, 1450, 1432, -1,1452, 1402, 1446, -1, + 1444, 1446, 1402, -1,1401, 1402, 1452, -1,1447, 1451, 1452, -1,1453, 1452, 1451, -1, + 1453, 1054, 1401, -1,1453, 1401, 1452, -1,1446, 1447, 1452, -1,1446, 1445, 1447, -1, + 1429, 1432, 1433, -1,1454, 1311, 1200, -1,1314, 1311, 1454, -1,1457, 1456, 1455, -1, + 1457, 1455, 1314, -1,1068, 1458, 1456, -1,1314, 1454, 1457, -1,1314, 1178, 1311, -1, + 1455, 1409, 1314, -1,1178, 1314, 1409, -1,1455, 1410, 1409, -1,1424, 1410, 1455, -1, + 1068, 1315, 1458, -1,1424, 1458, 1315, -1,1315, 1067, 1424, -1,1424, 1455, 1458, -1, + 1456, 1458, 1455, -1 + ] + } + } + ] +} +DEF link0b Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.533333 0.533333 0.533333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 1129 + 0 -0.087029 0.186493, -0.016977 -0.085358 0.186493, -0.033302 -0.080406 0.186493, -0.048351 -0.072357 0.186493, + -0.061539 -0.061539 0.186493, -0.072357 -0.048351 0.186493, -0.080406 -0.033302 0.186493, -0.085358 -0.016977 0.186493, + -0.087029 0 0.186493, -0.085358 0.016977 0.186493, -0.080406 0.033302 0.186493, -0.072357 0.048351 0.186493, + -0.061539 0.061539 0.186493, -0.048351 0.072357 0.186493, -0.033302 0.080406 0.186493, -0.016977 0.085358 0.186493, + 0 0.087029 0.186493, 0.016977 0.085358 0.186493, 0.033302 0.080406 0.186493, 0.048351 0.072357 0.186493, + 0.061539 0.061539 0.186493, 0.072357 0.048351 0.186493, 0.080406 0.033302 0.186493, 0.085358 0.016977 0.186493, + 0.087029 0 0.186493, 0.085358 -0.016977 0.186493, 0.080406 -0.033302 0.186493, 0.072357 -0.048351 0.186493, + 0.061539 -0.061539 0.186493, 0.048351 -0.072357 0.186493, 0.033302 -0.080406 0.186493, 0.016977 -0.085358 0.186493, + -0.084999 0 0.186493, -0.083366 -0.016582 0.186493, -0.078529 -0.032528 0.186493, -0.070679 -0.047222 0.186493, + -0.060104 -0.060104 0.186493, -0.047222 -0.070679 0.186493, -0.032528 -0.078529 0.186493, -0.016582 -0.083366 0.186493, + 0 -0.084999 0.186493, 0.016582 -0.083366 0.186493, 0.032528 -0.078529 0.186493, 0.047222 -0.070679 0.186493, + 0.060104 -0.060104 0.186493, 0.070679 -0.047222 0.186493, 0.078529 -0.032528 0.186493, 0.083366 -0.016582 0.186493, + 0.084999 0 0.186493, 0.083366 0.016582 0.186493, 0.078529 0.032528 0.186493, 0.070679 0.047222 0.186493, + 0.060104 0.060104 0.186493, 0.047222 0.070679 0.186493, 0.032528 0.078529 0.186493, 0.016582 0.083366 0.186493, + 0 0.084999 0.186493, -0.016582 0.083366 0.186493, -0.032528 0.078529 0.186493, -0.047222 0.070679 0.186493, + -0.060104 0.060104 0.186493, -0.070679 0.047222 0.186493, -0.078529 0.032528 0.186493, -0.083366 0.016582 0.186493, + 0.084999 0 0.189499, 0.083366 0.016582 0.189499, 0.078529 0.032528 0.189499, 0.070679 0.047222 0.189499, + 0.060104 0.060104 0.189499, 0.047222 0.070679 0.189499, 0.032528 0.078529 0.189499, 0.016582 0.083366 0.189499, + 0 0.084999 0.189499, -0.016582 0.083366 0.189499, -0.032528 0.078529 0.189499, -0.047222 0.070679 0.189499, + -0.060104 0.060104 0.189499, -0.070679 0.047222 0.189499, -0.078529 0.032528 0.189499, -0.083366 0.016582 0.189499, + -0.084999 0 0.189499, -0.084999 0 0.188004, 0.084999 0 0.188004, -0.083366 -0.016582 0.189499, -0.078529 -0.032528 0.189499, + -0.070679 -0.047222 0.189499, -0.060104 -0.060104 0.189499, -0.047222 -0.070679 0.189499, -0.032528 -0.078529 0.189499, + -0.016582 -0.083366 0.189499, 0 -0.084999 0.189499, 0.016582 -0.083366 0.189499, 0.032528 -0.078529 0.189499, + 0.047222 -0.070679 0.189499, 0.060104 -0.060104 0.189499, 0.070679 -0.047222 0.189499, 0.078529 -0.032528 0.189499, + 0.083366 -0.016582 0.189499, -0.037899 0 0.189499, -0.03717 -0.007394 0.189499, -0.035015 -0.014503 0.189499, + -0.031513 -0.021055 0.189499, -0.0268 -0.0268 0.189499, -0.021055 -0.031513 0.189499, -0.014503 -0.035015 0.189499, + -0.007394 -0.03717 0.189499, 0 -0.037899 0.189499, 0.007394 -0.03717 0.189499, 0.014503 -0.035015 0.189499, + 0.021055 -0.031513 0.189499, 0.0268 -0.0268 0.189499, 0.031513 -0.021055 0.189499, 0.035015 -0.014503 0.189499, + 0.03717 -0.007394 0.189499, 0.037899 0 0.189499, 0.03717 0.007394 0.189499, 0.035015 0.014503 0.189499, + 0.031513 0.021055 0.189499, 0.0268 0.0268 0.189499, 0.021055 0.031513 0.189499, 0.014503 0.035015 0.189499, + 0.007394 0.03717 0.189499, 0 0.037899 0.189499, -0.007394 0.03717 0.189499, -0.014503 0.035015 0.189499, + -0.021055 0.031513 0.189499, -0.0268 0.0268 0.189499, -0.031513 0.021055 0.189499, -0.035015 0.014503 0.189499, + -0.03717 0.007394 0.189499, 0.037746 0 0.189529, 0.037617 0 0.189621, 0.037529 0 0.189743, 0.037498 0 0.189896, + 0.036781 0.007316 0.189896, 0.034645 0.014351 0.189896, 0.031179 0.020834 0.189896, 0.026516 0.026516 0.189896, + 0.020834 0.031179 0.189896, 0.014351 0.034645 0.189896, 0.007316 0.036777 0.189896, 0 0.037498 0.189896, + -0.007316 0.036777 0.189896, -0.014351 0.034645 0.189896, -0.020834 0.031179 0.189896, -0.026516 0.026516 0.189896, + -0.031179 0.020834 0.189896, -0.034645 0.014351 0.189896, -0.036781 0.007316 0.189896, -0.037498 0 0.189896, + -0.037529 0 0.189743, -0.037617 0 0.189621, -0.037746 0 0.189529, -0.036781 -0.007316 0.189896, -0.034645 -0.014351 0.189896, + -0.031179 -0.020834 0.189896, -0.026516 -0.026516 0.189896, -0.020834 -0.031179 0.189896, -0.014351 -0.034645 0.189896, + -0.007316 -0.036777 0.189896, 0 -0.037498 0.189896, 0.007316 -0.036777 0.189896, 0.014351 -0.034645 0.189896, + 0.020834 -0.031179 0.189896, 0.026516 -0.026516 0.189896, 0.031179 -0.020834 0.189896, 0.034645 -0.014351 0.189896, + 0.036781 -0.007316 0.189896, 0.037498 0 0.195007, 0.036781 0.007316 0.195007, 0.034645 0.014351 0.195007, + 0.031179 0.020834 0.195007, 0.026516 0.026516 0.195007, 0.020834 0.031179 0.195007, 0.014351 0.034645 0.195007, + 0.007316 0.036777 0.195007, 0 0.037498 0.195007, -0.007316 0.036777 0.195007, -0.014351 0.034645 0.195007, + -0.020834 0.031179 0.195007, -0.026516 0.026516 0.195007, -0.031179 0.020834 0.195007, -0.034645 0.014351 0.195007, + -0.036781 0.007316 0.195007, -0.037498 0 0.195007, -0.037498 0 0.192444, 0.037498 0 0.192444, -0.036781 -0.007316 0.195007, + -0.034645 -0.014351 0.195007, -0.031179 -0.020834 0.195007, -0.026516 -0.026516 0.195007, -0.020834 -0.031179 0.195007, + -0.014351 -0.034645 0.195007, -0.007316 -0.036777 0.195007, 0 -0.037498 0.195007, 0.007316 -0.036777 0.195007, + 0.014351 -0.034645 0.195007, 0.020834 -0.031179 0.195007, 0.026516 -0.026516 0.195007, 0.031179 -0.020834 0.195007, + 0.034645 -0.014351 0.195007, 0.036781 -0.007316 0.195007, 0.036922 0 0.195999, 0.036213 0.007203 0.195999, + 0.034111 0.01413 0.195999, 0.030701 0.020514 0.195999, 0.026108 0.026108 0.195999, 0.020514 0.030701 0.195999, + 0.01413 0.034111 0.195999, 0.007203 0.036213 0.195999, 0 0.036922 0.195999, -0.007203 0.036213 0.195999, + -0.01413 0.034111 0.195999, -0.020514 0.030701 0.195999, -0.026108 0.026108 0.195999, -0.030701 0.020514 0.195999, + -0.034111 0.01413 0.195999, -0.036213 0.007203 0.195999, -0.036922 0 0.195999, -0.037212 0 0.195496, 0.037212 0 0.195496, + -0.036213 -0.007203 0.195999, -0.034111 -0.01413 0.195999, -0.030701 -0.020514 0.195999, -0.026108 -0.026108 0.195999, + -0.020514 -0.030701 0.195999, -0.01413 -0.034111 0.195999, -0.007203 -0.036213 0.195999, 0 -0.036922 0.195999, + 0.007203 -0.036213 0.195999, 0.01413 -0.034111 0.195999, 0.020514 -0.030701 0.195999, 0.026108 -0.026108 0.195999, + 0.030701 -0.020514 0.195999, 0.034111 -0.01413 0.195999, 0.036213 -0.007203 0.195999, -0.022263 -0.097946 0, + -0.043842 -0.07637 0, -0.045574 -0.073769 0, -0.046185 -0.070709 0, -0.045574 -0.06765 0, -0.043842 -0.065056 0, + -0.037857 -0.059071 0, -0.03611 -0.056713 0, -0.035122 -0.053951 0, -0.034977 -0.051022 0, -0.03569 -0.048172 0, + -0.037197 -0.045654 0, -0.039371 -0.043686 0, -0.042027 -0.042431 0, -0.04493 -0.042 0, -0.054001 -0.042 0, + -0.054001 -0.054001 0, -0.056 -0.054001 0, -0.056 -0.05637 0, -0.056091 -0.056973 0, -0.056206 -0.057255 0, + -0.056362 -0.057518 0, -0.082047 -0.0942 0, -0.082504 -0.095215 0, -0.082565 -0.096321 0, -0.082214 -0.097382 0, + -0.081505 -0.098236 0, -0.070038 -0.106712 0, -0.063969 -0.110458 0, -0.057697 -0.113861 0, -0.056675 -0.114235 0, + -0.055592 -0.114365 0, -0.05349 -0.113853 0, -0.054501 -0.095001 0, -0.05492 -0.097107 0, -0.05611 -0.098892 0, + -0.057896 -0.100082 0, -0.060001 -0.100502 0, -0.062103 -0.100082 0, -0.063889 -0.098892 0, -0.065079 -0.097107 0, + -0.065498 -0.095001 0, -0.065079 -0.092896 0, -0.063889 -0.09111 0, -0.062103 -0.08992 0, -0.060001 -0.0895 0, + -0.057896 -0.08992 0, -0.05611 -0.09111 0, -0.05492 -0.092896 0, 0.114677 -0.021168 0, 0.115852 -0.020529 0, + 0.116806 -0.019602 0, 0.117493 -0.018456 0, 0.117844 -0.01717 0, 0.119003 0 0, 0.118713 0.008605 0, 0.117844 0.01717 0, + 0.117493 0.018456 0, 0.116806 0.019602 0, 0.115852 0.020529 0, 0.114677 0.021168 0, 0.095001 0.028723 0, 0.095001 0.015 0, + 0.09462 0.013086 0, 0.093536 0.011464 0, 0.091911 0.010381 0, 0.089996 0.01 0, 0.087997 0.01 0, 0.084175 0.009239 0, + 0.080933 0.007071 0, 0.078758 0.003827 0, 0.078003 0 0, 0.078758 -0.003827 0, 0.080933 -0.007071 0, 0.084175 -0.009239 0, + 0.087997 -0.01 0, 0.089996 -0.01 0, 0.091911 -0.010381 0, 0.093536 -0.011464 0, 0.09462 -0.013086 0, 0.095001 -0.015 0, + 0.095001 -0.028723 0, 0.110497 0 0, 0.110085 -0.002105 0, 0.108887 -0.003889 0, 0.107101 -0.005081 0, 0.105003 -0.0055 0, + 0.102898 -0.005081 0, 0.101112 -0.003889 0, 0.099922 -0.002105 0, 0.099503 0 0, 0.099922 0.002105 0, 0.101112 0.003889 0, + 0.102898 0.005081 0, 0.105003 0.0055 0, 0.107101 0.005081 0, 0.108887 0.003889 0, 0.110085 0.002105 0, 0.087997 -0.004 0, + 0.086472 -0.003695 0, 0.085175 -0.002828 0, 0.084305 -0.001531 0, 0.084 0 0, 0.084305 0.001531 0, 0.085175 0.002828 0, + 0.086472 0.003695 0, 0.087997 0.004 0, 0.089531 0.003695 0, 0.090828 0.002828 0, 0.091698 0.001531 0, 0.092003 0 0, + 0.091698 -0.001531 0, 0.090828 -0.002828 0, 0.089531 -0.003695 0, -0.05349 0.113853 0, -0.054512 0.114235 0, + -0.055592 0.114365 0, -0.057697 0.113861 0, -0.070038 0.106712 0, -0.07589 0.102631 0, -0.081505 0.098236 0, + -0.082214 0.097382 0, -0.082565 0.096321 0, -0.082504 0.095215 0, -0.082047 0.0942 0, -0.058968 0.061241 0, + -0.022263 0.097946 0, -0.054501 0.095001 0, -0.05492 0.092896 0, -0.05611 0.09111 0, -0.057896 0.08992 0, -0.060001 0.0895 0, + -0.062103 0.08992 0, -0.063889 0.09111 0, -0.065079 0.092896 0, -0.065498 0.095001 0, -0.065079 0.097107 0, + -0.063889 0.098892 0, -0.062103 0.100082 0, -0.060001 0.100502 0, -0.057896 0.100082 0, -0.05611 0.098892 0, + -0.05492 0.097107 0, -0.083366 0.016582 0.188004, -0.078529 0.032528 0.188004, -0.070679 0.047222 0.188004, + -0.060104 0.060104 0.188004, -0.047222 0.070679 0.188004, -0.032528 0.078529 0.188004, -0.016582 0.083366 0.188004, + 0 0.084999 0.188004, 0.016582 0.083366 0.188004, 0.032528 0.078529 0.188004, 0.047222 0.070679 0.188004, + 0.060104 0.060104 0.188004, 0.070679 0.047222 0.188004, 0.078529 0.032528 0.188004, 0.083366 0.016582 0.188004, + 0.083366 -0.016582 0.188004, 0.078529 -0.032528 0.188004, 0.070679 -0.047222 0.188004, 0.060104 -0.060104 0.188004, + 0.047222 -0.070679 0.188004, 0.032528 -0.078529 0.188004, 0.016582 -0.083366 0.188004, 0 -0.084999 0.188004, + -0.016582 -0.083366 0.188004, -0.032528 -0.078529 0.188004, -0.047222 -0.070679 0.188004, -0.060104 -0.060104 0.188004, + -0.070679 -0.047222 0.188004, -0.078529 -0.032528 0.188004, -0.083366 -0.016582 0.188004, 0.036808 0.007322 0.189743, + 0.036896 0.007339 0.189621, 0.037022 0.007364 0.189529, 0.034672 0.014362 0.189743, 0.034752 0.014396 0.189621, + 0.034874 0.014445 0.189529, 0.031206 0.020851 0.189743, 0.031277 0.020899 0.189621, 0.031385 0.020971 0.189529, + 0.026539 0.026539 0.189743, 0.0266 0.0266 0.189621, 0.026691 0.026691 0.189529, 0.020851 0.031206 0.189743, + 0.020899 0.031277 0.189621, 0.020971 0.031385 0.189529, 0.014362 0.034672 0.189743, 0.014396 0.034752 0.189621, + 0.014445 0.034874 0.189529, 0.007322 0.036808 0.189743, 0.007339 0.036896 0.189621, 0.007364 0.037022 0.189529, + 0 0.037529 0.189743, 0 0.037617 0.189621, 0 0.037746 0.189529, -0.007322 0.036808 0.189743, -0.007339 0.036896 0.189621, + -0.007364 0.037022 0.189529, -0.014362 0.034672 0.189743, -0.014396 0.034752 0.189621, -0.014445 0.034874 0.189529, + -0.020851 0.031206 0.189743, -0.020899 0.031277 0.189621, -0.020971 0.031385 0.189529, -0.026539 0.026539 0.189743, + -0.0266 0.0266 0.189621, -0.026691 0.026691 0.189529, -0.031206 0.020851 0.189743, -0.031277 0.020899 0.189621, + -0.031385 0.020971 0.189529, -0.034672 0.014362 0.189743, -0.034752 0.014396 0.189621, -0.034874 0.014445 0.189529, + -0.036808 0.007322 0.189743, -0.036896 0.007339 0.189621, -0.037022 0.007364 0.189529, -0.036808 -0.007322 0.189743, + -0.036896 -0.007339 0.189621, -0.037022 -0.007364 0.189529, -0.034672 -0.014362 0.189743, -0.034752 -0.014396 0.189621, + -0.034874 -0.014445 0.189529, -0.031206 -0.020851 0.189743, -0.031277 -0.020899 0.189621, -0.031385 -0.020971 0.189529, + -0.026539 -0.026539 0.189743, -0.0266 -0.0266 0.189621, -0.026691 -0.026691 0.189529, -0.020851 -0.031206 0.189743, + -0.020899 -0.031277 0.189621, -0.020971 -0.031385 0.189529, -0.014362 -0.034672 0.189743, -0.014396 -0.034752 0.189621, + -0.014445 -0.034874 0.189529, -0.007322 -0.036808 0.189743, -0.007339 -0.036896 0.189621, -0.007364 -0.037022 0.189529, + 0 -0.037529 0.189743, 0 -0.037617 0.189621, 0 -0.037746 0.189529, 0.007322 -0.036808 0.189743, 0.007339 -0.036896 0.189621, + 0.007364 -0.037022 0.189529, 0.014362 -0.034672 0.189743, 0.014396 -0.034752 0.189621, 0.014445 -0.034874 0.189529, + 0.020851 -0.031206 0.189743, 0.020899 -0.031277 0.189621, 0.020971 -0.031385 0.189529, 0.026539 -0.026539 0.189743, + 0.0266 -0.0266 0.189621, 0.026691 -0.026691 0.189529, 0.031206 -0.020851 0.189743, 0.031277 -0.020899 0.189621, + 0.031385 -0.020971 0.189529, 0.034672 -0.014362 0.189743, 0.034752 -0.014396 0.189621, 0.034874 -0.014445 0.189529, + 0.036808 -0.007322 0.189743, 0.036896 -0.007339 0.189621, 0.037022 -0.007364 0.189529, -0.036781 0.007316 0.192444, + -0.034645 0.014351 0.192444, -0.031179 0.020834 0.192444, -0.026516 0.026516 0.192444, -0.020834 0.031179 0.192444, + -0.014351 0.034645 0.192444, -0.007316 0.036777 0.192444, 0 0.037498 0.192444, 0.007316 0.036777 0.192444, + 0.014351 0.034645 0.192444, 0.020834 0.031179 0.192444, 0.026516 0.026516 0.192444, 0.031179 0.020834 0.192444, + 0.034645 0.014351 0.192444, 0.036781 0.007316 0.192444, 0.036781 -0.007316 0.192444, 0.034645 -0.014351 0.192444, + 0.031179 -0.020834 0.192444, 0.026516 -0.026516 0.192444, 0.020834 -0.031179 0.192444, 0.014351 -0.034645 0.192444, + 0.007316 -0.036777 0.192444, 0 -0.037498 0.192444, -0.007316 -0.036777 0.192444, -0.014351 -0.034645 0.192444, + -0.020834 -0.031179 0.192444, -0.026516 -0.026516 0.192444, -0.031179 -0.020834 0.192444, -0.034645 -0.014351 0.192444, + -0.036781 -0.007316 0.192444, -0.036495 0.007259 0.195496, -0.034378 0.01424 0.195496, -0.030941 0.020674 0.195496, + -0.026312 0.026312 0.195496, -0.020674 0.030941 0.195496, -0.01424 0.034378 0.195496, -0.007259 0.036495 0.195496, + 0 0.037212 0.195496, 0.007259 0.036495 0.195496, 0.01424 0.034378 0.195496, 0.020674 0.030941 0.195496, + 0.026312 0.026312 0.195496, 0.030941 0.020674 0.195496, 0.034378 0.01424 0.195496, 0.036495 0.007259 0.195496, + 0.036495 -0.007259 0.195496, 0.034378 -0.01424 0.195496, 0.030941 -0.020674 0.195496, 0.026312 -0.026312 0.195496, + 0.020674 -0.030941 0.195496, 0.01424 -0.034378 0.195496, 0.007259 -0.036495 0.195496, 0 -0.037212 0.195496, + -0.007259 -0.036495 0.195496, -0.01424 -0.034378 0.195496, -0.020674 -0.030941 0.195496, -0.026312 -0.026312 0.195496, + -0.030941 -0.020674 0.195496, -0.034378 -0.01424 0.195496, -0.036495 -0.007259 0.195496, -0.054501 -0.095001 0.0115, + -0.054501 -0.095001 0.023001, -0.05492 -0.092896 0.023001, -0.05611 -0.09111 0.023001, -0.057896 -0.08992 0.023001, + -0.060001 -0.0895 0.023001, -0.062103 -0.08992 0.023001, -0.063889 -0.09111 0.023001, -0.065079 -0.092896 0.023001, + -0.065498 -0.095001 0.023001, -0.065498 -0.095001 0.0115, -0.065079 -0.097107 0.023001, -0.063889 -0.098892 0.023001, + -0.062103 -0.100082 0.023001, -0.060001 -0.100502 0.023001, -0.057896 -0.100082 0.023001, -0.05611 -0.098892 0.023001, + -0.05492 -0.097107 0.023001, -0.069 -0.095001 0.023001, -0.068314 -0.091553 0.023001, -0.06636 -0.088638 0.023001, + -0.063442 -0.086685 0.023001, -0.060001 -0.085999 0.023001, -0.056557 -0.086685 0.023001, -0.053635 -0.088638 0.023001, + -0.051685 -0.091553 0.023001, -0.050999 -0.095001 0.023001, -0.051685 -0.098442 0.023001, -0.053635 -0.101364 0.023001, + -0.056557 -0.103317 0.023001, -0.060001 -0.103996 0.023001, -0.063442 -0.103317 0.023001, -0.06636 -0.101364 0.023001, + -0.068314 -0.098442 0.023001, -0.050999 -0.095001 0.041042, -0.051437 -0.092224 0.042328, -0.052792 -0.089607 0.043247, + -0.054478 -0.087891 0.043594, -0.056576 -0.086678 0.043537, -0.059639 -0.086006 0.04287, -0.062607 -0.086388 0.041698, + -0.065208 -0.087662 0.040218, -0.06723 -0.089638 0.038605, -0.068535 -0.092148 0.036995, -0.069 -0.095001 0.035507, + -0.069 -0.095001 0.029253, -0.050999 -0.095001 0.032022, -0.068138 -0.098846 0.033981, -0.065552 -0.102081 0.033253, + -0.063454 -0.10331 0.033298, -0.061138 -0.103928 0.03368, -0.056618 -0.10334 0.035267, -0.054287 -0.101952 0.03661, + -0.052513 -0.099998 0.038086, -0.054501 0.095001 0.0115, -0.054501 0.095001 0.023001, -0.05492 0.097107 0.023001, + -0.05611 0.098892 0.023001, -0.057896 0.100082 0.023001, -0.060001 0.100502 0.023001, -0.062103 0.100082 0.023001, + -0.063889 0.098892 0.023001, -0.065079 0.097107 0.023001, -0.065498 0.095001 0.023001, -0.065498 0.095001 0.0115, + -0.065079 0.092896 0.023001, -0.063889 0.09111 0.023001, -0.062103 0.08992 0.023001, -0.060001 0.0895 0.023001, + -0.057896 0.08992 0.023001, -0.05611 0.09111 0.023001, -0.05492 0.092896 0.023001, -0.069 0.095001 0.023001, + -0.068314 0.098442 0.023001, -0.06636 0.101364 0.023001, -0.063442 0.103317 0.023001, -0.060001 0.103996 0.023001, + -0.056557 0.103317 0.023001, -0.053635 0.101364 0.023001, -0.051685 0.098442 0.023001, -0.050999 0.095001 0.023001, + -0.051685 0.091553 0.023001, -0.053635 0.088638 0.023001, -0.056557 0.086685 0.023001, -0.060001 0.085999 0.023001, + -0.063442 0.086685 0.023001, -0.06636 0.088638 0.023001, -0.068314 0.091553 0.023001, -0.050999 0.095001 0.041042, + -0.051445 0.097794 0.039497, -0.052715 0.100288 0.037884, -0.054714 0.10228 0.036324, -0.057316 0.103592 0.034943, + -0.061447 0.103882 0.033611, -0.06353 0.103279 0.033291, -0.065422 0.10218 0.033245, -0.068108 0.098915 0.033962, + -0.069 0.095001 0.035507, -0.069 0.095001 0.029253, -0.050999 0.095001 0.032022, -0.068512 0.092072 0.037037, + -0.067131 0.089508 0.038696, -0.06501 0.087524 0.040348, -0.062286 0.086296 0.041851, -0.059715 0.086006 0.042847, + -0.057064 0.086494 0.043472, -0.054764 0.087677 0.04361, -0.05291 0.089462 0.043289, -0.051468 0.09214 0.042362, + 0.110497 0 0.0115, 0.110497 0 0.023001, 0.110085 0.002105 0.023001, 0.108887 0.003889 0.023001, 0.107101 0.005081 0.023001, + 0.105003 0.0055 0.023001, 0.102898 0.005081 0.023001, 0.101112 0.003889 0.023001, 0.099922 0.002105 0.023001, + 0.099503 0 0.023001, 0.099503 0 0.0115, 0.099922 -0.002105 0.023001, 0.101112 -0.003889 0.023001, 0.102898 -0.005081 0.023001, + 0.105003 -0.0055 0.023001, 0.107101 -0.005081 0.023001, 0.108887 -0.003889 0.023001, 0.110085 -0.002105 0.023001, + 0.096001 0 0.023001, 0.096687 0.003444 0.023001, 0.098633 0.006364 0.023001, 0.101555 0.008315 0.023001, + 0.105003 0.009 0.023001, 0.108444 0.008315 0.023001, 0.111366 0.006364 0.023001, 0.113312 0.003444 0.023001, + 0.113998 0 0.023001, 0.113312 -0.003444 0.023001, 0.111366 -0.006364 0.023001, 0.108444 -0.008315 0.023001, + 0.105003 -0.009 0.023001, 0.101555 -0.008315 0.023001, 0.098633 -0.006364 0.023001, 0.096687 -0.003444 0.023001, + 0.113998 0 0.032764, 0.11322 0.003666 0.03318, 0.111122 0.006598 0.034313, 0.10817 0.008424 0.035942, + 0.104866 0.008999 0.037815, 0.101967 0.008472 0.039745, 0.099503 0.007126 0.041885, 0.097122 0.004355 0.044567, + 0.096077 0.001173 0.046021, 0.096001 0 0.046135, 0.096001 0 0.034569, 0.113998 0 0.027882, 0.104866 -0.008999 0.037815, + 0.10817 -0.008424 0.035942, 0.111122 -0.006598 0.034313, 0.11322 -0.003666 0.03318, 0.096191 -0.001842 0.045853, + 0.09671 -0.003496 0.045124, 0.09874 -0.00647 0.042664, 0.101486 -0.008286 0.040119, -0.054001 -0.013 0.004, + -0.054001 -0.011852 0.003772, -0.054001 -0.010879 0.003121, -0.054001 -0.010228 0.002148, -0.054001 -0.01 0.001, + -0.054001 -0.01 0.0005, -0.054001 -0.004 0.0005, -0.054001 -0.004 0.006, -0.054001 0.004 0.006, -0.054001 0.004 0.0005, + -0.054001 0.01 0.0005, -0.054001 0.01 0.001, -0.054001 0.010228 0.002148, -0.054001 0.010879 0.003121, + -0.054001 0.011852 0.003772, -0.054001 0.013 0.004, -0.054001 0.054001 0.004, -0.054001 0.054001 0.148499, + -0.054001 0.053619 0.150406, -0.054001 0.052536 0.152039, -0.054001 0.050915 0.153122, -0.054001 0.049 0.153503, + -0.054001 -0.049 0.153503, -0.054001 -0.050915 0.153122, -0.054001 -0.052536 0.152039, -0.054001 -0.053619 0.150406, + -0.054001 -0.054001 0.148499, -0.054001 -0.042 0.001, -0.054001 -0.041771 0.002148, -0.054001 -0.041122 0.003121, + -0.054001 -0.04015 0.003772, -0.054001 -0.039001 0.004, -0.054001 0.047001 0.148102, -0.054001 0.047802 0.147934, + -0.054001 0.048485 0.147491, -0.054001 0.048939 0.146805, -0.054001 0.049099 0.145996, -0.054001 0.048939 0.145203, + -0.054001 0.048485 0.144516, -0.054001 0.047802 0.144058, -0.054001 0.047001 0.143906, -0.054001 0.046196 0.144058, + -0.054001 0.045517 0.144516, -0.054001 0.045059 0.145203, -0.054001 0.044899 0.145996, -0.054001 0.045059 0.146805, + -0.054001 0.045517 0.147491, -0.054001 0.046196 0.147934, -0.054001 -0.047001 0.148102, -0.054001 -0.046196 0.147934, + -0.054001 -0.045517 0.147491, -0.054001 -0.045059 0.146805, -0.054001 -0.044899 0.145996, -0.054001 -0.045059 0.145203, + -0.054001 -0.045517 0.144516, -0.054001 -0.046196 0.144058, -0.054001 -0.047001 0.143906, -0.054001 -0.047802 0.144058, + -0.054001 -0.048485 0.144516, -0.054001 -0.048939 0.145203, -0.054001 -0.049099 0.145996, -0.054001 -0.048939 0.146805, + -0.054001 -0.048485 0.147491, -0.054001 -0.047802 0.147934, -0.054001 0.047001 0.0131, -0.054001 0.047802 0.01294, + -0.054001 0.048485 0.012485, -0.054001 0.048939 0.011804, -0.054001 0.049099 0.011, -0.054001 0.048939 0.010197, + -0.054001 0.048485 0.009515, -0.054001 0.047802 0.00906, -0.054001 0.047001 0.0089, -0.054001 0.046196 0.00906, + -0.054001 0.045517 0.009515, -0.054001 0.045059 0.010197, -0.054001 0.044899 0.011, -0.054001 0.045059 0.011804, + -0.054001 0.045517 0.012485, -0.054001 0.046196 0.01294, -0.054001 -0.032 0.0131, -0.054001 -0.031197 0.01294, + -0.054001 -0.030516 0.012485, -0.054001 -0.03006 0.011804, -0.054001 -0.0299 0.011, -0.054001 -0.03006 0.010197, + -0.054001 -0.030516 0.009515, -0.054001 -0.031197 0.00906, -0.054001 -0.032 0.0089, -0.054001 -0.032803 0.00906, + -0.054001 -0.033485 0.009515, -0.054001 -0.033939 0.010197, -0.054001 -0.0341 0.011, -0.054001 -0.033939 0.011804, + -0.054001 -0.033485 0.012485, -0.054001 -0.032803 0.01294, -0.056 0.051861 0.152603, -0.056 0.052757 0.151794, + -0.056 0.053432 0.150818, -0.056 0.054001 0.148499, -0.055 0.054001 0.148499, -0.055107 0.049 0.153503, + -0.056213 0.049 0.153503, -0.056187 0.049759 0.153442, -0.056114 0.050503 0.153275, -0.056 0.054001 0.004, + -0.056 -0.054001 0.148499, -0.056 -0.053856 0.149689, -0.056 -0.053432 0.150818, -0.056 -0.051861 0.152603, + -0.056114 -0.050503 0.153275, -0.056187 -0.049759 0.153442, -0.056213 -0.049 0.153503, -0.055107 -0.049 0.153503, + -0.055 -0.054001 0.148499, -0.037998 0.047001 0.143906, -0.037998 0.046196 0.144058, -0.037998 0.045517 0.144516, + -0.037998 0.045059 0.145203, -0.037998 0.044899 0.145996, -0.037998 0.045059 0.146805, -0.037998 0.045517 0.147491, + -0.037998 0.046196 0.147934, -0.037998 0.047001 0.148102, -0.037395 0.047001 0.147049, -0.036789 0.047001 0.145996, + -0.037395 0.047001 0.144943, -0.037998 0.047802 0.147934, -0.037998 0.048485 0.147491, -0.037998 0.048939 0.146805, + -0.037998 0.049099 0.145996, -0.037998 0.048939 0.145203, -0.037998 0.048485 0.144516, -0.037998 0.047802 0.144058, + -0.046001 0.047001 0.148102, -0.046001 0.047001 0.143906, -0.037998 -0.047001 0.143906, -0.037998 -0.047802 0.144058, + -0.037998 -0.048485 0.144516, -0.037998 -0.048939 0.145203, -0.037998 -0.049099 0.145996, -0.037998 -0.048939 0.146805, + -0.037998 -0.048485 0.147491, -0.037998 -0.047802 0.147934, -0.037998 -0.047001 0.148102, -0.037395 -0.047001 0.147049, + -0.036789 -0.047001 0.145996, -0.037395 -0.047001 0.144943, -0.037998 -0.046196 0.147934, -0.037998 -0.045517 0.147491, + -0.037998 -0.045059 0.146805, -0.037998 -0.044899 0.145996, -0.037998 -0.045059 0.145203, -0.037998 -0.045517 0.144516, + -0.037998 -0.046196 0.144058, -0.046001 -0.047001 0.148102, -0.046001 -0.047001 0.143906, -0.037998 0.047001 0.0089, + -0.037998 0.046196 0.00906, -0.037998 0.045517 0.009515, -0.037998 0.045059 0.010197, -0.037998 0.044899 0.011, + -0.037998 0.045059 0.011804, -0.037998 0.045517 0.012485, -0.037998 0.046196 0.01294, -0.037998 0.047001 0.0131, + -0.037395 0.047001 0.01205, -0.036789 0.047001 0.011, -0.037395 0.047001 0.00995, -0.037998 0.047802 0.01294, + -0.037998 0.048485 0.012485, -0.037998 0.048939 0.011804, -0.037998 0.049099 0.011, -0.037998 0.048939 0.010197, + -0.037998 0.048485 0.009515, -0.037998 0.047802 0.00906, -0.046001 0.047001 0.0131, -0.046001 0.047001 0.0089, + -0.037998 -0.032 0.0089, -0.037998 -0.032803 0.00906, -0.037998 -0.033485 0.009515, -0.037998 -0.033939 0.010197, + -0.037998 -0.0341 0.011, -0.037998 -0.033939 0.011804, -0.037998 -0.033485 0.012485, -0.037998 -0.032803 0.01294, + -0.037998 -0.032 0.0131, -0.037395 -0.032 0.01205, -0.036789 -0.032 0.011, -0.037395 -0.032 0.00995, + -0.037998 -0.031197 0.01294, -0.037998 -0.030516 0.012485, -0.037998 -0.03006 0.011804, -0.037998 -0.0299 0.011, + -0.037998 -0.03006 0.010197, -0.037998 -0.030516 0.009515, -0.037998 -0.031197 0.00906, -0.046001 -0.032 0.0131, + -0.046001 -0.032 0.0089, -0.065079 -0.092896 0.0115, -0.063889 -0.09111 0.0115, -0.062103 -0.08992 0.0115, + -0.060001 -0.0895 0.0115, -0.057896 -0.08992 0.0115, -0.05611 -0.09111 0.0115, -0.05492 -0.092896 0.0115, + -0.05492 -0.097107 0.0115, -0.05611 -0.098892 0.0115, -0.057896 -0.100082 0.0115, -0.060001 -0.100502 0.0115, + -0.062103 -0.100082 0.0115, -0.063889 -0.098892 0.0115, -0.065079 -0.097107 0.0115, -0.068314 -0.091553 0.033298, + -0.06636 -0.088638 0.033298, -0.063442 -0.086685 0.033298, -0.060001 -0.085999 0.033298, -0.056557 -0.086685 0.033298, + -0.053635 -0.088638 0.033298, -0.051685 -0.091553 0.033298, -0.051685 -0.098442 0.032022, -0.053635 -0.101364 0.032022, + -0.056557 -0.103317 0.032022, -0.060001 -0.103996 0.032022, -0.063442 -0.103317 0.032022, -0.06636 -0.101364 0.032022, + -0.068314 -0.098442 0.032022, -0.065079 0.097107 0.0115, -0.063889 0.098892 0.0115, -0.062103 0.100082 0.0115, + -0.060001 0.100502 0.0115, -0.057896 0.100082 0.0115, -0.05611 0.098892 0.0115, -0.05492 0.097107 0.0115, + -0.05492 0.092896 0.0115, -0.05611 0.09111 0.0115, -0.057896 0.08992 0.0115, -0.060001 0.0895 0.0115, + -0.062103 0.08992 0.0115, -0.063889 0.09111 0.0115, -0.065079 0.092896 0.0115, -0.068314 0.098442 0.032022, + -0.06636 0.101364 0.032022, -0.063442 0.103317 0.032022, -0.060001 0.103996 0.032022, -0.056557 0.103317 0.032022, + -0.053635 0.101364 0.032022, -0.051685 0.098442 0.032022, -0.051685 0.091553 0.033306, -0.053635 0.088638 0.033306, + -0.056557 0.086685 0.033306, -0.060001 0.085999 0.033306, -0.063442 0.086685 0.033306, -0.06636 0.088638 0.033306, + -0.068314 0.091553 0.033306, 0.099922 0.002105 0.0115, 0.101112 0.003889 0.0115, 0.102898 0.005081 0.0115, + 0.105003 0.0055 0.0115, 0.107101 0.005081 0.0115, 0.108887 0.003889 0.0115, 0.110085 0.002105 0.0115, + 0.110085 -0.002105 0.0115, 0.108887 -0.003889 0.0115, 0.107101 -0.005081 0.0115, 0.105003 -0.0055 0.0115, + 0.102898 -0.005081 0.0115, 0.101112 -0.003889 0.0115, 0.099922 -0.002105 0.0115, 0.096687 0.003444 0.034569, + 0.098633 0.006364 0.034569, 0.101555 0.008315 0.034569, 0.105003 0.009 0.034569, 0.108444 0.008315 0.034569, + 0.108444 -0.008315 0.034569, 0.105003 -0.009 0.034569, 0.101555 -0.008315 0.034569, 0.098633 -0.006364 0.034569, + 0.096687 -0.003444 0.034569, -0.055107 0.050915 0.153122, -0.055107 0.052536 0.152039, -0.055107 0.053619 0.150406, + -0.055107 -0.053619 0.150406, -0.055107 -0.052536 0.152039, -0.055107 -0.050915 0.153122, -0.037395 0.046597 0.146973, + -0.037395 0.046257 0.146744, -0.037395 0.046028 0.146408, -0.037395 0.045952 0.145996, -0.037395 0.046028 0.145599, + -0.037395 0.046257 0.145264, -0.037395 0.046597 0.145035, -0.037395 0.047401 0.145035, -0.037395 0.047741 0.145264, + -0.037395 0.04797 0.145599, -0.037395 0.04805 0.145996, -0.037395 0.04797 0.146408, -0.037395 0.047741 0.146744, + -0.037395 0.047401 0.146973, -0.046001 0.046196 0.147934, -0.046001 0.045517 0.147491, -0.046001 0.045059 0.146805, + -0.046001 0.044899 0.145996, -0.046001 0.045059 0.145203, -0.046001 0.045517 0.144516, -0.046001 0.046196 0.144058, + -0.046001 0.047802 0.144058, -0.046001 0.048485 0.144516, -0.046001 0.048939 0.145203, -0.046001 0.049099 0.145996, + -0.046001 0.048939 0.146805, -0.046001 0.048485 0.147491, -0.046001 0.047802 0.147934, -0.037395 -0.047401 0.146973, + -0.037395 -0.047741 0.146744, -0.037395 -0.04797 0.146408, -0.037395 -0.04805 0.145996, -0.037395 -0.04797 0.145599, + -0.037395 -0.047741 0.145264, -0.037395 -0.047401 0.145035, -0.037395 -0.046597 0.145035, -0.037395 -0.046257 0.145264, + -0.037395 -0.046028 0.145599, -0.037395 -0.045952 0.145996, -0.037395 -0.046028 0.146408, -0.037395 -0.046257 0.146744, + -0.037395 -0.046597 0.146973, -0.046001 -0.047802 0.147934, -0.046001 -0.048485 0.147491, -0.046001 -0.048939 0.146805, + -0.046001 -0.049099 0.145996, -0.046001 -0.048939 0.145203, -0.046001 -0.048485 0.144516, -0.046001 -0.047802 0.144058, + -0.046001 -0.046196 0.144058, -0.046001 -0.045517 0.144516, -0.046001 -0.045059 0.145203, -0.046001 -0.044899 0.145996, + -0.046001 -0.045059 0.146805, -0.046001 -0.045517 0.147491, -0.046001 -0.046196 0.147934, -0.037395 0.046597 0.011971, + -0.037395 0.046257 0.011743, -0.037395 0.046028 0.011402, -0.037395 0.045952 0.011, -0.037395 0.046028 0.010598, + -0.037395 0.046257 0.010258, -0.037395 0.046597 0.01003, -0.037395 0.047401 0.01003, -0.037395 0.047741 0.010258, + -0.037395 0.04797 0.010598, -0.037395 0.04805 0.011, -0.037395 0.04797 0.011402, -0.037395 0.047741 0.011743, + -0.037395 0.047401 0.011971, -0.046001 0.046196 0.01294, -0.046001 0.045517 0.012485, -0.046001 0.045059 0.011804, + -0.046001 0.044899 0.011, -0.046001 0.045059 0.010197, -0.046001 0.045517 0.009515, -0.046001 0.046196 0.00906, + -0.046001 0.047802 0.00906, -0.046001 0.048485 0.009515, -0.046001 0.048939 0.010197, -0.046001 0.049099 0.011, + -0.046001 0.048939 0.011804, -0.046001 0.048485 0.012485, -0.046001 0.047802 0.01294, -0.037395 -0.032402 0.011971, + -0.037395 -0.032742 0.011743, -0.037395 -0.03297 0.011402, -0.037395 -0.033051 0.011, -0.037395 -0.03297 0.010598, + -0.037395 -0.032742 0.010258, -0.037395 -0.032402 0.01003, -0.037395 -0.031599 0.01003, -0.037395 -0.031258 0.010258, + -0.037395 -0.031031 0.010598, -0.037395 -0.030951 0.011, -0.037395 -0.031031 0.011402, -0.037395 -0.031258 0.011743, + -0.037395 -0.031599 0.011971, -0.046001 -0.032803 0.01294, -0.046001 -0.033485 0.012485, -0.046001 -0.033939 0.011804, + -0.046001 -0.0341 0.011, -0.046001 -0.033939 0.010197, -0.046001 -0.033485 0.009515, -0.046001 -0.032803 0.00906, + -0.046001 -0.031197 0.00906, -0.046001 -0.030516 0.009515, -0.046001 -0.03006 0.010197, -0.046001 -0.0299 0.011, + -0.046001 -0.03006 0.011804, -0.046001 -0.030516 0.012485, -0.046001 -0.031197 0.01294, 0.113609 0.001833 0.03297, + 0.112167 0.005132 0.033745, 0.111649 0.005865 0.034031, 0.111382 0.006231 0.034172, 0.112167 -0.005132 0.033745, + 0.111649 -0.005865 0.034031, 0.111382 -0.006231 0.034172, 0.113609 -0.001833 0.03297, -0.054001 0.033501 0.004, + -0.054001 -0.025999 0.004] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 1009 + 0 0 1, -0.98666 0.162793 0, -0.999462 -0.0328092 0, -1 2.49554e-009 0, -0.935967 0.352089 0, -0.980787 0.19508 0, + -0.729896 0.683558 0, -0.849304 0.527904 0, -0.831491 0.555538 0, -0.555538 0.831491 0, -0.707107 0.707107 0, + -0.923923 0.382579 0, -0.999462 0.0328092 0, -0.973858 0.227158 0, -0.81278 0.582571 0, -0.571836 0.820368 0, + -0.683558 0.729896 0, -0.910886 0.412657 0, -0.395525 0.918455 0, -0.227158 0.973858 0, -0.382579 0.923923 0, + -0.0328092 0.999462 0, -0.19508 0.980787 0, 0.19508 0.980787 0, 0.352089 0.935967 0, 0.162793 0.98666 0, 0.382579 0.923923 0, + 0.527904 0.849304 0, 0 1 0, 0.683558 0.729896 0, 0.555538 0.831491 0, -0.352089 0.935967 0, 0.81278 0.582571 0, + 0.707107 0.707107 0, 0.831491 0.555538 0, 0.910886 0.412657 0, 0.980787 0.19508 0, 0.999462 0.0328092 0, 0.973858 0.227158 0, + 0.923923 0.382578 0, -0.527904 0.849304 0, 0.0328092 0.999462 0, 0.227158 0.973858 0, -0.162793 0.98666 0, + 0.412657 0.910886 0, 0.582571 0.81278 0, 0.729896 0.683558 0, 0.935967 0.352089 0, 1 2.49554e-009 0, 0.98666 0.162793 0, + 0.849304 0.527904 0, 0.999462 -0.0328092 0, 0.98666 -0.162793 0, 0.935967 -0.352089 0, 0.980787 -0.19508 0, + 0.729896 -0.683558 0, 0.849304 -0.527904 0, 0.831491 -0.555538 0, 0.555538 -0.831491 0, 0.707107 -0.707107 0, + 0.923923 -0.382579 0, 0.973858 -0.227158 0, 0.81278 -0.582571 0, 0.571836 -0.820368 0, 0.683558 -0.729896 0, + 0.910886 -0.412657 0, 0.395525 -0.918455 0, 0.227158 -0.973858 0, 0.382579 -0.923923 0, 0.0328092 -0.999462 0, + 0.19508 -0.980787 0, -0.19508 -0.980787 0, -0.352089 -0.935967 0, -0.162793 -0.98666 0, -0.382579 -0.923923 0, + -0.527904 -0.849304 0, 0 -1 0, -0.683558 -0.729896 0, -0.555538 -0.831491 0, 0.352089 -0.935967 0, -0.81278 -0.582571 0, + -0.707107 -0.707107 0, -0.831491 -0.555538 0, -0.910886 -0.412657 0, -0.980787 -0.19508 0, -0.973858 -0.227158 0, + -0.923923 -0.382578 0, 0.527904 -0.849304 0, -0.0328092 -0.999462 0, -0.227158 -0.973858 0, 0.162793 -0.98666 0, + -0.412657 -0.910886 0, -0.582571 -0.81278 0, -0.729896 -0.683558 0, -0.935967 -0.352089 0, -0.98666 -0.162793 0, + -0.849304 -0.527904 0, 0.0896945 -0.0371156 0.995278, 0.0642301 -0.0429149 0.997012, 0.0643911 0 0.997925, + 0.115434 -0.0190663 0.993132, 0.0612576 -0.0917302 0.993898, 0.0136197 -0.0824585 0.996502, 0.0342472 -0.0910869 0.995254, + 0.0842876 -0.078902 0.993313, 0.0896945 0.0371156 0.995278, 0.115434 0.0190663 0.993132, 0.0783775 0.0561556 0.995341, + 0.0612576 0.0917302 0.993898, 0.0342472 0.0910869 0.995254, 0.0678396 0.0678396 0.995387, 0.0136197 0.0824585 0.996502, + 0 0.0966402 0.995319, -0.0136197 0.0824585 0.996502, 0 -0.0966402 0.995319, -0.0136197 -0.0824585 0.996502, + -0.0342472 -0.0910869 0.995254, -0.0612576 -0.0917302 0.993898, -0.0783775 -0.0561556 0.995341, + -0.0678396 -0.0678396 0.995387, -0.0896945 -0.0371156 0.995278, -0.115434 -0.0190663 0.993132, -0.0643911 0 0.997925, + -0.0342472 0.0910869 0.995254, -0.0612576 0.0917302 0.993898, -0.0842876 0.078902 0.993313, -0.0642301 0.0429149 0.997012, + -0.0896945 0.0371156 0.995278, -0.115434 0.0190663 0.993132, 0.944899 -2.54744e-009 0.327361, 0.996616 -0.0196899 0.0798004, + 0.977895 0.180009 0.106385, 0.885858 0.15948 0.435685, 0.863788 0.345175 0.367048, 0.928582 0.363431 0.0751851, + 0.845045 0.525327 0.0996553, 0.719984 0.00828951 0.693941, 0.68493 0.159821 0.710864, 0.667144 0.294076 0.684426, + 0.744255 0.514046 0.426429, 0.422883 0.175153 0.889096, 0.390419 0.0709748 0.917897, 0.71208 0.692079 0.118186, + 0.553026 0.827176 0.0997087, 0.511465 0.760805 0.399475, 0.381178 0.919449 0.0965223, 0.194299 0.975731 0.100984, + 0.201079 0.909664 0.363426, 0.0197997 0.996614 0.0798003, 0.0115736 0.927082 0.374681, 0.353748 0.846506 0.397856, + 0.574202 0.369783 0.730447, 0.623991 0.647289 0.437781, 0.517429 0.484534 0.705333, 0.274342 0.631874 0.724894, + 0.144887 0.727818 0.67029, 0.412852 0.576145 0.705415, -0.161904 0.981631 0.10093, 0.367695 -0.00834903 0.929909, + 0.324521 0.224667 0.918809, 0.253119 0.264898 0.930462, 0.2304 0.365581 0.901813, 0.138367 0.323858 0.935933, + 0.0852253 0.414837 0.905896, 0 0.329078 0.944303, -0.01147 0.687689 0.725915, -0.190029 0.882679 0.429845, + -0.350463 0.931595 0.0964709, -0.525327 0.845045 0.0996553, -0.375707 0.85578 0.355646, -0.511465 0.760805 0.399475, + -0.283788 0.662964 0.692779, -0.143541 0.662739 0.734965, -0.0709748 0.390419 0.917897, -0.412852 0.576145 0.705415, + -0.623991 0.647289 0.437781, -0.2304 0.365581 0.901813, -0.144432 0.365598 0.919498, -0.692079 0.71208 0.118186, + -0.827176 0.553026 0.0997087, -0.744255 0.514046 0.426429, -0.919765 0.381414 0.092498, -0.976499 0.19453 0.0927826, + -0.900284 0.182019 0.395421, -0.996616 0.0196899 0.0798004, -0.944899 -2.54744e-009 0.327361, -0.846506 0.353748 0.397856, + -0.529532 0.506422 0.680538, -0.562547 0.389754 0.729131, -0.642732 0.291451 0.708486, -0.67103 0.145225 0.727069, + -0.719984 -0.00828951 0.693941, -0.296906 0.300832 0.906282, -0.307872 0.195758 0.931071, -0.403539 0.154567 0.901812, + -0.349434 0.073433 0.934079, -0.367695 0.00834903 0.929909, -0.977895 -0.180009 0.106385, -0.885858 -0.15948 0.435685, + -0.863788 -0.345175 0.367048, -0.928582 -0.363431 0.0751851, -0.845045 -0.525327 0.0996553, -0.68493 -0.159821 0.710864, + -0.667144 -0.294076 0.684426, -0.744255 -0.514046 0.426429, -0.422883 -0.175153 0.889096, -0.390419 -0.0709748 0.917897, + -0.71208 -0.692079 0.118186, -0.553026 -0.827176 0.0997087, -0.511465 -0.760805 0.399475, -0.381178 -0.919449 0.0965223, + -0.194299 -0.975731 0.100984, -0.201079 -0.909664 0.363426, -0.0197997 -0.996614 0.0798003, -0.0115736 -0.927082 0.374681, + -0.353748 -0.846506 0.397856, -0.574202 -0.369783 0.730447, -0.623991 -0.647289 0.437781, -0.517429 -0.484534 0.705333, + -0.274342 -0.631874 0.724894, -0.144887 -0.727818 0.67029, -0.412852 -0.576145 0.705415, 0.161904 -0.981631 0.10093, + -0.324521 -0.224667 0.918809, -0.253119 -0.264898 0.930462, -0.2304 -0.365581 0.901813, -0.138367 -0.323858 0.935933, + -0.0852253 -0.414837 0.905896, 0 -0.329078 0.944303, 0.01147 -0.687689 0.725915, 0.190029 -0.882679 0.429845, + 0.350463 -0.931595 0.0964709, 0.525327 -0.845045 0.0996553, 0.375707 -0.85578 0.355646, 0.511465 -0.760805 0.399475, + 0.283788 -0.662964 0.692779, 0.143541 -0.662739 0.734965, 0.0709748 -0.390419 0.917897, 0.412852 -0.576145 0.705415, + 0.623991 -0.647289 0.437781, 0.2304 -0.365581 0.901813, 0.144432 -0.365598 0.919498, 0.692079 -0.71208 0.118186, + 0.827176 -0.553026 0.0997087, 0.744255 -0.514046 0.426429, 0.919765 -0.381414 0.092498, 0.976499 -0.19453 0.0927826, + 0.900284 -0.182019 0.395421, 0.846506 -0.353748 0.397856, 0.529532 -0.506422 0.680538, 0.562547 -0.389754 0.729131, + 0.642732 -0.291451 0.708486, 0.67103 -0.145225 0.727069, 0.296906 -0.300832 0.906282, 0.307872 -0.195758 0.931071, + 0.403539 -0.154567 0.901812, 0.349434 -0.073433 0.934079, -0.946152 0.185632 0.26521, -0.964778 -0.00225529 0.263054, + -1 -2.49543e-009 0, -0.892092 0.367135 0.263409, -0.980807 0.194979 0, -0.68385 0.680523 0.26313, -0.803527 0.534171 0.262688, + -0.831447 0.555604 0, -0.530828 0.817028 0.225138, -0.923813 0.382843 0, -0.571863 0.820349 0, -0.395587 0.918428 0, + -0.190439 0.945945 0.262527, -0.346713 0.883191 0.315854, -0.00229686 0.965041 0.26209, -0.194989 0.980805 0, + 0.194989 0.980806 0, 0.366897 0.892189 0.263412, 0.185833 0.94665 0.263286, 0.382603 0.923913 0, 0.534171 0.803527 0.262688, + 0.680523 0.68385 0.26313, 0.555604 0.831447 0, 0.800932 0.537974 0.262855, 0.831447 0.555604 0, 0.889991 0.371347 0.264609, + 0.980807 0.194979 0, 0.964778 0.00225529 0.263054, 0.945413 0.190421 0.26445, 0.923813 0.382843 0, 1 -2.49543e-009 0, + 0.946152 -0.185632 0.26521, 0.892092 -0.367135 0.263409, 0.980807 -0.194979 0, 0.68385 -0.680523 0.26313, + 0.803527 -0.534171 0.262688, 0.831447 -0.555604 0, 0.530828 -0.817028 0.225138, 0.923813 -0.382843 0, 0.571863 -0.820349 0, + 0.395587 -0.918428 0, 0.190439 -0.945945 0.262527, 0.346713 -0.883191 0.315854, 0.00229686 -0.965041 0.26209, + 0.194989 -0.980805 0, -0.194989 -0.980806 0, -0.366897 -0.892189 0.263412, -0.185833 -0.94665 0.263286, -0.382603 -0.923913 0, + -0.534171 -0.803527 0.262688, -0.680523 -0.68385 0.26313, -0.555604 -0.831447 0, -0.800932 -0.537974 0.262855, + -0.831447 -0.555604 0, -0.889991 -0.371347 0.264609, -0.980807 -0.194979 0, -0.945413 -0.190421 0.26445, + -0.923813 -0.382843 0, -0.856085 0.141392 0.497118, -0.866595 -0.0285719 0.498193, -0.864363 0.000212985 0.502868, + -0.81213 0.305473 0.497123, -0.847498 0.168645 0.503296, -0.633236 0.593062 0.497283, -0.736798 0.457978 0.497377, + -0.718924 0.480543 0.502222, -0.481903 0.721244 0.497571, -0.611332 0.611398 0.50246, -0.797986 0.33058 0.50392, + -0.494203 0.70912 0.502903, -0.342086 0.794426 0.501861, -0.19714 0.845289 0.49661, -0.331809 0.801261 0.497879, + -0.0285719 0.866595 0.498193, -0.168587 0.84797 0.502518, 0.168913 0.848459 0.501584, 0.305473 0.81213 0.497123, + 0.141392 0.856085 0.497118, 0.330653 0.798484 0.503082, 0.457978 0.736798 0.497377, 8.44112e-005 0.864871 0.501995, + 0.593062 0.633236 0.497283, 0.480543 0.718924 0.502222, 0.705142 0.505455 0.497282, 0.611398 0.611332 0.50246, + 0.719138 0.480331 0.502119, 0.790134 0.357964 0.497544, 0.846978 0.168467 0.50423, 0.866595 0.0285719 0.498193, + 0.845289 0.19714 0.49661, 0.798755 0.330683 0.502633, 0.864363 -0.000212985 0.502868, 0.856085 -0.141392 0.497118, + 0.81213 -0.305473 0.497123, 0.847498 -0.168645 0.503296, 0.633236 -0.593062 0.497283, 0.736798 -0.457978 0.497377, + 0.718924 -0.480543 0.502222, 0.481903 -0.721244 0.497571, 0.611332 -0.611398 0.50246, 0.797986 -0.33058 0.50392, + 0.494203 -0.70912 0.502903, 0.342086 -0.794426 0.501861, 0.19714 -0.845289 0.49661, 0.331809 -0.801261 0.497879, + 0.0285719 -0.866595 0.498193, 0.168587 -0.84797 0.502518, -0.168913 -0.848459 0.501584, -0.305473 -0.81213 0.497123, + -0.141392 -0.856085 0.497118, -0.330653 -0.798484 0.503082, -0.457978 -0.736798 0.497377, -8.44112e-005 -0.864871 0.501995, + -0.593062 -0.633236 0.497283, -0.480543 -0.718924 0.502222, -0.705142 -0.505455 0.497282, -0.611398 -0.611332 0.50246, + -0.719138 -0.480331 0.502119, -0.790134 -0.357964 0.497544, -0.846978 -0.168467 0.50423, -0.845289 -0.19714 0.49661, + -0.798755 -0.330683 0.502633, 0 0 -1, 1 -4.57219e-005 0, 0.99781 0.0661428 0, 0.947282 -0.320402 0, 0.924103 -0.382143 0, + 0.707106 -0.707107 0, 0.997804 -0.0662341 0, 0.896906 -0.442221 0, 0.734839 -0.678242 0, 0.408423 -0.912793 0, + 0.382479 -0.923964 0, 0.0665451 -0.997783 0, -0.320692 -0.947184 0, 0.000137036 -1 0, -0.658437 -0.752636 0, + -0.896907 -0.44222 0, -0.382352 -0.924017 0, -0.997804 -0.0662341 0, -0.924104 -0.382141 0, 0.658437 -0.752636 0, + -0.0662716 -0.997802 0, 0.320866 -0.947125 0, -0.442353 -0.896841 0, -0.752636 -0.658437 0, -0.947282 -0.320401 0, + -1 -4.57219e-005 0, -0.99781 0.0661428 0, -0.947275 0.320423 0, -0.924072 0.382218 0, -0.707016 0.707198 0, + -0.896843 0.442348 0, -0.734734 0.678355 0, -0.408316 0.912841 0, -0.382352 0.924017 0, -0.0662716 0.997802 0, + 0.320866 0.947125 0, 0.000137041 1 0, 0.707015 0.707199 0, 0.658374 0.752691 0, 0.896842 0.44235 0, 0.382479 0.923964 0, + 0.924071 0.38222 0, -0.658374 0.752691 0, 0.0665451 0.997783 0, -0.320692 0.947184 0, 0.442435 0.896801 0, 0.75252 0.658569 0, + 0.947274 0.320424 0, 0.915538 -0.402169 0.00704206, 0.959951 -0.280165 0.00115796, 0.816675 -0.577095 -0.0019367, + 0.72956 -0.683887 0.00646232, 0.574349 -0.818608 -0.00192109, 0.995781 0.0907979 -0.0132679, 0.999631 -0.0269784 0.00331489, + 0.424101 -0.905603 0.00460449, 0.658801 -0.752318 0, 0.923587 -0.383388 0, 0.259667 -0.965698 -0.00102624, + -0.375802 -0.926693 0.00363188, -0.361724 -0.932285 -3.35079e-005, -0.59406 -0.804418 0.00228463, + -0.0944752 -0.995527 0.000440452, 0.0189493 -0.999818 0.00236625, -0.961873 -0.273496 0.000858164, + -0.90448 -0.426504 0.00318563, -0.817815 -0.575481 -0.00031859, -0.992519 0.120977 -0.0164652, + -0.998192 -0.0600647 0.00204903, -0.684508 -0.728995 0.00396407, 0.321237 -0.946999 0, 1 0.000194336 0, 8.3583e-005 -1 0, + -0.38287 -0.923802 0, -0.752132 -0.659013 0, -0.947108 -0.320915 0, -0.997791 0.0664343 0, -0.94017 0.34069 -0.00330639, + -0.851074 0.524898 -0.01245, -0.734736 0.678321 0.00663474, -0.604634 0.7965 0.00230137, -0.896646 0.442749 0, + -0.434388 0.900714 0.00464184, 0.966365 0.256985 -0.00983071, 0.872401 0.487706 -0.0325421, 0.384867 0.922972 -0.00072013, + 0.13649 0.990465 -0.0186782, 0.38533 0.922778 -0.00144016, -0.123305 0.992162 -0.0202416, -0.27043 0.962089 -0.0353749, + 0.604379 0.796364 -0.0230232, 0.751779 0.65801 -0.0430226, -0.658987 0.752155 0, 0.383365 0.923568 0.00726551, + 0.020211 0.999784 0.00485089, -0.319687 0.947523 0, 0.940004 0.34116 0.00180652, 0.726631 0.687006 0.00542478, + 1 4.57269e-005 0, 0.997804 0.0662341 0, 0.947274 -0.320424 0, 0.924071 -0.38222 0, 0.707015 -0.707199 0, 0.99781 -0.0661428 0, + 0.896842 -0.44235 0, 0.734733 -0.678356 0, -0.707016 -0.707198 0, -0.658374 -0.752691 0, -0.896843 -0.442348 0, + -0.99781 -0.0661428 0, -0.924072 -0.382218 0, 0.658374 -0.752691 0, -0.752521 -0.658568 0, -0.947275 -0.320423 0, + -1 4.57269e-005 0, -0.997804 0.0662341 0, -0.947282 0.320401 0, -0.924104 0.382141 0, -0.896907 0.44222 0, + -0.73484 0.678241 0, 0.707106 0.707107 0, 0.658437 0.752636 0, 0.896906 0.442221 0, 0.924103 0.382143 0, -0.658437 0.752636 0, + 0.752635 0.658439 0, 0.947282 0.320402 0, 0.965995 -0.258318 -0.0112441, 0.995689 -0.0915032 -0.015185, + 0.869765 -0.492126 -0.0363395, 0.598259 -0.800946 -0.0238867, 0.744851 -0.665516 -0.0478072, 0.940012 -0.341135 0.00211977, + 0.393657 -0.919257 -0.000227378, 0.390906 -0.920431 -0.000113696, 0.38525 -0.922779 0.00788312, 0.724041 -0.689731 0.00598731, + 0.999624 0.0272519 0.0030997, 0.158908 -0.987096 -0.0197163, -0.999998 0.00206769 0, -0.999995 0.00085775 0.00319755, + -0.961818 -0.273689 0.00108176, -0.904766 -0.425874 0.00539261, -0.812913 -0.582382 -0.00163808, + -0.234077 -0.971899 -0.0248995, -0.0356518 -0.998754 -0.0349331, -0.0177401 -0.999821 0.00662007, + -0.56957 -0.821905 -0.00788569, -0.423925 -0.905645 -0.00973062, -0.757841 -0.652437 0.00162672, 1 -0.000194336 0, + -0.399654 -0.916648 0.00567954, -0.727426 -0.686179 0.00308498, -0.947141 -0.320819 0, -1 -0.000194329 0, + -0.809315 0.587373 -0.00132304, -0.573209 0.819409 0.000536456, -0.727852 0.685724 0.00375031, -0.959874 0.280432 0.000388797, + -0.91565 0.401963 0.00317525, -0.425729 0.904845 0.0032587, -0.658714 0.752393 0, -0.923769 0.38295 0, + -0.28072 0.959787 0.00246726, -0.0346067 0.999401 0.000303765, -0.008648 0.999956 0.00349524, 0.244568 0.969632 -0.000377862, + 0.56 0.828488 -0.00279702, 0.390319 0.920662 0.00565671, 0.902179 0.431327 0.00549417, 0.809487 0.587133 -0.00227964, + 0.958327 0.285673 0.00119305, 0.68041 0.732807 0.00605936, -0.320934 0.947102 0, 8.3583e-005 1 0, 0.383239 0.923649 0, + 0.751848 0.659337 0, 0.947008 0.321209 0, 1 -5.0645e-009 0, 0.997806 0.0662041 0, 0.947228 -0.320562 0, 0.924005 -0.38238 0, + 0.707198 -0.707016 0, 0.997806 -0.0662041 0, 0.896753 -0.442531 0, 0.734836 -0.678244 0, 0.408545 -0.912738 0, + 0.3825 -0.923956 0, 0.0659959 -0.99782 0, -0.321049 -0.947063 0, -0.00031919 -1 0, -0.706102 -0.70811 0, + -0.657939 -0.753072 0, -0.896295 -0.443459 0, -0.382795 -0.923833 0, -0.997879 -0.0651023 0, -0.924025 -0.382332 0, + 0.658702 -0.752404 0, -0.0666329 -0.997778 0, 0.320642 -0.9472 0, -0.442875 -0.896583 0, -0.7512 -0.660074 0, + -0.947592 -0.319482 0, -1 0 0, -0.997879 0.0651023 0, -0.947592 0.319482 0, -0.924025 0.382332 0, -0.706102 0.70811 0, + -0.896295 0.443459 0, -0.733567 0.679618 0, -0.408793 0.912627 0, -0.382795 0.923833 0, -0.0666329 0.997778 0, + 0.320642 0.9472 0, -0.00031919 1 0, 0.707198 0.707016 0, 0.658702 0.752404 0, 0.896753 0.442531 0, 0.3825 0.923956 0, + 0.924005 0.38238 0, -0.657939 0.753072 0, 0.0659959 0.99782 0, -0.321049 0.947063 0, 0.442687 0.896676 0, 0.752574 0.658508 0, + 0.947228 0.320562 0, 0.854955 -0.518666 -0.00610295, 0.940206 -0.340596 0.00261611, 0.981112 -0.193441 0.000379183, + 0.999819 0.019039 0, 0.99942 0.0338093 0.00418437, -0.978882 -0.20442 -0.0016688, 0.737409 -0.675442 0.00252228, + 0.997803 -0.0662495 0, 0.42796 -0.903789 0.00406029, 0.59875 -0.800929 -0.00346197, 0.896858 -0.442319 0, + 0.0699996 -0.997544 0.0023644, 0.286431 -0.958094 0.00365233, 0.00404305 -0.999992 -0.000137214, + -0.295934 -0.955165 -0.00913956, 0.320467 -0.94726 0, -0.485929 -0.873888 -0.0139097, -0.621966 -0.782972 -0.0106487, + -0.0607679 -0.998151 0.00139856, -0.420315 -0.907375 0.00236832, 0.658903 -0.752228 0, -0.774737 -0.632278 -0.00261559, + -0.919337 -0.393471 -0.000716198, -0.914466 -0.404662 0.000560411, -0.820408 -0.571778 -0.000401124, + -0.813279 -0.581849 -0.00545622, -0.999999 3.80336e-009 -0.00119975, -0.812984 -0.582258 -0.00576756, + 0.00892473 0.99996 5.17896e-005, -0.295934 0.955165 -0.00913956, 0.0758277 0.997121 -0.000801233, + -0.485929 0.873888 -0.0139097, -0.621966 0.782972 -0.0106487, 0.322072 0.946714 0.00134107, 0.00395739 0.999992 0.00105112, + -0.420315 0.907375 0.00236832, 0.445156 0.895452 0.00120929, 0.97981 0.19987 0.00494046, 0.878478 0.477782 -0.00106835, + 0.917002 0.398874 0.00265852, 0.685403 0.728163 0.00051912, 0.702047 0.712131 4.55073e-005, 0.7528 0.65825 0, + 0.442696 0.896672 0, -0.813279 0.581849 -0.00545622, -0.774737 0.632278 -0.00261559, -0.820408 0.571778 -0.000401124, + -0.978882 0.20442 -0.0016688, -0.919337 0.393471 -0.000716197, -0.914466 0.404662 0.000560411, 0.947243 0.320517 0, + -0.812984 0.582258 -0.00576756, -0.0204047 -0.166533 -0.985825, 0 -0.0980398 -0.995183, 0 -0.320734 -0.947169, + -0.0291442 -0.394351 -0.918498, -0.0476234 -0.162885 -0.985495, 0 -0.659598 -0.751619, -0.0282581 -0.740275 -0.67171, + 0 -0.924282 -0.381711, 0 -0.997836 -0.0657558, 0 -0.980522 -0.196412, 0.00260965 -0.935543 -0.353204, + -0.00677499 -0.560901 -0.827855, -0.00722251 -0.33257 -0.943051, -0.0117359 -0.887937 -0.459816, + -0.0048703 -0.751304 -0.659939, 0.0312106 -0.988867 -0.145495, 0 -0.0267249 -0.999643, 0 0.997836 -0.0657558, + 0 0.998163 -0.0605878, -0.0244188 0.983566 -0.17889, 0 0.924282 -0.381711, -0.0292601 0.925952 -0.376506, + -0.0213767 0.973938 -0.225804, -0.00530469 0.714616 -0.699497, 0 0.708307 -0.705905, 0 0.442947 -0.896548, + -0.0291186 0.34165 -0.939376, 0 0.0980398 -0.995183, 0.0345613 0.849354 -0.526691, 0.0307516 0.591097 -0.806014, + -0.0272158 0.156931 -0.987235, -0.0476234 0.162885 -0.985495, 0 0.0400909 -0.999196, -0.00722251 0.33257 -0.943051, + -0.866493 0.0205719 -0.498766, -0.866809 -0.0318408 -0.497622, -0.865377 0.158861 -0.475274, -0.866616 0.327792 -0.376203, + -0.866652 0.20673 -0.454067, -0.999999 -0.000324935 0.0012938, -0.866812 0.365669 -0.339003, -0.866294 0.447265 -0.22246, + -0.867022 0.497364 -0.0300309, -0.867223 0.467576 -0.171165, -0.866366 0.473289 0.159396, -0.866495 0.498722 0.0215257, + -0.866764 0.374715 0.329103, -0.867885 0.219852 0.445467, -0.866373 0.338164 0.367482, -0.864953 0.0375695 0.500444, + -0.865516 0.178027 0.468176, -0.8666 0.452834 0.209633, -0.866537 -0.0190352 0.49875, -0.866977 -0.163227 0.470858, + -0.867752 -0.328757 0.372727, -0.866471 -0.215457 0.450341, -0.865881 -0.366914 0.340035, -0.866372 -0.447118 0.222452, + -0.866458 -0.498084 0.034111, -0.866036 -0.468095 0.175694, -0.86623 -0.473777 -0.158687, -0.866276 -0.499231 -0.0182997, + -0.867251 -0.372578 -0.330244, -0.865441 -0.221872 -0.449204, -0.866662 -0.336564 -0.368269, -0.866601 -0.172668 -0.468176, + -0.866895 -0.452453 -0.209236, 0 -0.000499335 -1, 0 -0.0700662 -0.997542, 0 0.323297 -0.946298, 0 0.38196 -0.924179, + 0 0.703353 -0.710841, 0 0.0690699 -0.997612, 0 0.439122 -0.898428, 0 0.673672 -0.73903, 0 0.912913 -0.408154, + 0 0.924159 -0.382008, 0 0.997916 -0.0645281, 0 0.946691 0.322144, 0 0.999998 0.00191726, 0 0.709018 0.705191, + 0 0.75374 0.657172, 0 0.442755 0.896643, 0 0.923554 0.383469, 0 0.0625202 0.998044, 0 0.380214 0.924899, 0 0.750134 -0.661285, + 0 0.997661 0.0683542, 0 0.947448 -0.31991, 0 0.896449 0.443147, 0 0.661242 0.750173, 0 0.315882 0.948799, 0 -0.000455282 1, + 0 -0.0634289 0.997986, 0 -0.315619 0.948886, 0 -0.379377 0.925242, 0 -0.709484 0.704722, 0 -0.44138 0.89732, + 0 -0.680649 0.73261, 0 -0.913351 0.407174, 0 -0.924327 0.381602, 0 -0.997661 0.0683542, 0 -0.947871 -0.318655, + 0 -0.999998 0.00191727, 0 -0.703836 -0.710362, 0 -0.751352 -0.659901, 0 -0.437794 -0.899075, 0 -0.92493 -0.380138, + 0 -0.38118 -0.924501, 0 -0.75494 0.655793, 0 -0.997916 -0.0645281, 0 -0.947116 0.32089, 0 -0.898005 -0.439985, + 0 -0.652939 -0.757411, 0 -0.323098 -0.946365, -0.866509 0.0214088 -0.498702, -0.866798 -0.0311995 -0.497682, + -0.865349 0.158896 -0.475314, -0.867084 0.327387 -0.375478, -0.866619 0.20683 -0.454084, -0.999999 0.000324953 0.00129379, + -0.866806 0.365957 -0.338708, -0.866431 0.447371 -0.221713, -0.866434 0.498289 -0.0316254, -0.866633 0.467901 -0.173253, + -0.866116 0.473408 0.160399, -0.866331 0.499005 0.0215551, -0.867259 0.374217 0.328365, -0.867972 0.219491 0.445476, + -0.866364 0.33797 0.367681, -0.864957 0.0382491 0.500387, -0.865352 0.178651 0.468241, -0.866402 0.452512 0.211141, + -0.866516 -0.0180605 0.498822, -0.867002 -0.163162 0.470836, -0.867284 -0.329168 0.373452, -0.866513 -0.215291 0.450338, + -0.865891 -0.366622 0.340324, -0.866235 -0.447012 0.223198, -0.867051 -0.497162 0.0324523, -0.866644 -0.467776 0.173534, + -0.866479 -0.473639 -0.157736, -0.866442 -0.498938 -0.0184102, -0.866759 -0.373067 -0.330984, -0.865356 -0.222209 -0.449202, + -0.866669 -0.336757 -0.368075, -0.866747 -0.172114 -0.468109, -0.867081 -0.452761 -0.207793, 0 0.000499345 -1, + 0 -0.0690699 -0.997612, 0 0.323098 -0.946365, 0 0.38118 -0.924501, 0 0.703836 -0.710362, 0 0.0700662 -0.997542, + 0 0.437794 -0.899075, 0 0.673657 -0.739045, 0 0.913859 -0.406033, 0 0.92493 -0.380138, 0 0.947116 0.32089, + 0 0.709484 0.704722, 0 0.75494 0.655793, 0 0.44138 0.89732, 0 0.924327 0.381602, 0 0.0634289 0.997986, 0 0.379377 0.925242, + 0 0.751352 -0.659901, 0 0.947871 -0.318655, 0 0.89765 0.440709, 0 0.660862 0.750507, 0 0.315619 0.948886, 0 0.000455272 1, + 0 -0.0625202 0.998044, 0 -0.315882 0.948799, 0 -0.380214 0.924899, 0 -0.709018 0.705191, 0 -0.442755 0.896643, + 0 -0.680679 0.732582, 0 -0.912403 0.409292, 0 -0.923554 0.383469, 0 -0.947448 -0.31991, 0 -0.703353 -0.710841, + 0 -0.750134 -0.661285, 0 -0.439122 -0.898428, 0 -0.924159 -0.382008, 0 -0.38196 -0.924179, 0 -0.75374 0.657172, + 0 -0.946691 0.322144, 0 -0.896805 -0.442426, 0 -0.653305 -0.757095, 0 -0.323297 -0.946298, -0.866477 0.0194405 -0.498839, + -0.866642 -0.0329539 -0.497841, -0.866518 0.159775 -0.472883, -0.866287 0.329101 -0.375818, -0.866566 0.208972 -0.453204, + -1 -0.000318026 0.000119128, -0.866461 0.366463 -0.339043, -0.866474 0.44716 -0.221969, -0.867088 0.497167 -0.0313638, + -0.866989 0.46808 -0.170969, -0.866687 0.472854 0.158943, -0.866524 0.498738 0.0199016, -0.866377 0.375203 0.329566, + -0.866609 0.221478 0.447142, -0.866472 0.338508 0.366931, -0.866691 0.032699 0.497773, -0.866626 0.17263 0.468144, + -0.866704 0.453302 0.208188, -0.866576 -0.0202795 0.498632, -0.86663 -0.160109 0.472565, -0.866916 -0.328604 0.374802, + -0.866558 -0.209501 0.452975, -0.86641 -0.366676 0.338943, -0.866574 -0.447255 0.221387, -0.866488 -0.498101 0.0330842, + -0.866364 -0.46834 0.173411, -0.8665 -0.472856 -0.159951, -0.86637 -0.499008 -0.0198314, -0.866793 -0.37487 -0.328849, + -0.866511 -0.221263 -0.447438, -0.866436 -0.338543 -0.366984, -0.866509 -0.172726 -0.468325, -0.866501 -0.453084 -0.2095, + 0 -0.000477434 -1, 0 -0.0667484 -0.99777, 0 0.32104 -0.947066, 0 0.383229 -0.923653, 0 0.706512 -0.707701, + 0 0.0657956 -0.997833, 0 0.443726 -0.896162, 0 0.678153 -0.734921, 0 0.911914 -0.410382, 0 0.923286 -0.384114, + 0 0.997812 -0.0661107, 0 0.946858 0.321652, 0 1 0.000119104, 0 0.706753 0.707461, 0 0.751592 0.659628, 0 0.443726 0.896162, + 0 0.92337 0.38391, 0 0.0657956 0.997833, 0 0.383229 0.923653, 0 0.751291 -0.659971, 0 0.997797 0.0663484, + 0 0.946838 -0.321711, 0 0.895794 0.444469, 0 0.658875 0.752253, 0 0.32104 0.947066, 0 -0.000477434 1, 0 -0.0667484 0.99777, + 0 -0.320806 0.947145, 0 -0.382417 0.92399, 0 -0.707226 0.706987, 0 -0.44237 0.896833, 0 -0.678327 0.73476, + 0 -0.912984 0.407995, 0 -0.924147 0.382038, 0 -0.997797 0.0663484, 0 -0.947264 -0.320453, 0 -1 0.000119104, + 0 -0.706987 -0.707226, 0 -0.752504 -0.658588, 0 -0.44237 -0.896833, 0 -0.924063 -0.38224, 0 -0.382417 -0.92399, + 0 -0.752803 0.658246, 0 -0.997812 -0.0661107, 0 -0.947284 0.320395, 0 -0.896836 -0.442363, 0 -0.658334 -0.752726, + 0 -0.320806 -0.947145, -0.866487 0.0197742 -0.498808, -0.866649 -0.0327095 -0.497845, -0.866501 0.159682 -0.472945, + -0.866645 0.328919 -0.375153, -0.866574 0.208938 -0.453205, -1 -0.000172162 0.000118946, -0.86654 0.366922 -0.338345, + -0.866557 0.447408 -0.221143, -0.86652 0.498023 -0.0333989, -0.866429 0.468278 -0.173254, -0.866422 0.47281 0.16051, + -0.866565 0.498664 0.0199696, -0.866764 0.375148 0.32861, -0.866675 0.221176 0.447163, -0.866533 0.338582 0.366719, + -0.866695 0.0330198 0.497745, -0.86655 0.172914 0.468179, -0.866518 0.452933 0.209759, -0.866582 -0.0199372 0.498636, + -0.866697 -0.160123 0.472437, -0.866713 -0.328603 0.375271, -0.866555 -0.209298 0.453074, -0.866545 -0.366716 0.338555, + -0.866777 -0.447071 0.220962, -0.866899 -0.497388 0.0330361, -0.866585 -0.468263 0.172512, -0.8669 -0.472084 -0.160063, + -0.866617 -0.49858 -0.0198036, -0.866642 -0.375433 -0.328605, -0.866528 -0.221182 -0.447447, -0.866496 -0.338989 -0.366431, + -0.866572 -0.172277 -0.468373, -0.866524 -0.45329 -0.208962, 0 4.40628e-007 -1, 0 -0.0662713 -0.997802, 0 0.320712 -0.947177, + 0 0.382508 -0.923952, 0 0.707226 -0.706988, 0 0.0662722 -0.997802, 0 0.442637 -0.896701, 0 0.67843 -0.734665, + 0 0.912659 -0.408723, 0 0.923834 -0.382794, 0 0.997785 -0.066523, 0 0.947025 0.321159, 0 1 0.000119796, 0 0.707465 0.706748, + 0 0.752949 0.658079, 0 0.442637 0.896701, 0 0.923917 0.382592, 0 0.0662722 0.997802, 0 0.382508 0.923952, + 0 0.752649 -0.658422, 0 0.997769 0.066762, 0 0.947006 -0.321216, 0 0.896829 0.442377, 0 0.658842 0.752281, + 0 0.320712 0.947177, 0 4.40628e-007 1, 0 -0.0662713 0.997802, 0 -0.320921 0.947106, 0 -0.382821 0.923823, + 0 -0.706988 0.707226, 0 -0.443046 0.896499, 0 -0.678337 0.734751, 0 -0.912508 0.40906, 0 -0.923758 0.382977, + 0 -0.997796 0.0663499, 0 -0.94705 -0.321085, 0 -1 0.000119109, 0 -0.706748 -0.707465, 0 -0.751896 -0.659281, + 0 -0.443046 -0.896499, 0 -0.923674 -0.38318, 0 -0.382821 -0.923823, 0 -0.752197 0.658939, 0 -0.997812 -0.0661122, + 0 -0.94707 0.321027, 0 -0.896231 -0.443587, 0 -0.658518 -0.752565, 0 -0.320921 -0.947106] + } + coordIndex [ + 45, 27, 26, -1,45, 44, 27, -1,46, 45, 26, -1,24, 48, 25, -1,47, 25, 48, -1,25, 47, + 46, -1,46, 26, 25, -1,28, 27, 44, -1,31, 30, 42, -1,31, 41, 0, -1,41, 31, 42, -1, + 43, 29, 44, -1,28, 44, 29, -1,30, 29, 43, -1,43, 42, 30, -1,23, 48, 24, -1,23, 50, + 49, -1,22, 50, 23, -1,51, 22, 21, -1,20, 52, 21, -1,21, 52, 51, -1,51, 50, 22, -1, + 23, 49, 48, -1,20, 19, 52, -1,53, 52, 19, -1,18, 53, 19, -1,54, 53, 18, -1,17, 54, + 18, -1,16, 55, 17, -1,55, 54, 17, -1,56, 55, 16, -1,40, 0, 41, -1,39, 0, 40, -1,38, + 1, 39, -1,39, 1, 0, -1,1, 38, 2, -1,37, 2, 38, -1,37, 36, 3, -1,4, 3, 36, -1,37, + 3, 2, -1,35, 5, 36, -1,35, 6, 5, -1,34, 6, 35, -1,7, 34, 33, -1,32, 7, 33, -1,7, + 6, 34, -1,36, 5, 4, -1,7, 32, 8, -1,59, 58, 14, -1,12, 60, 13, -1,59, 13, 60, -1, + 13, 59, 14, -1,15, 57, 16, -1,58, 57, 15, -1,15, 14, 58, -1,57, 56, 16, -1,9, 63, + 62, -1,63, 9, 32, -1,8, 32, 9, -1,10, 9, 62, -1,12, 11, 60, -1,11, 61, 60, -1,61, + 11, 10, -1,10, 62, 61, -1,81, 80, 79, -1,379, 79, 78, -1,381, 77, 76, -1,382, 76, + 75, -1,77, 380, 78, -1,79, 379, 81, -1,32, 81, 379, -1,63, 379, 380, -1,78, 380, + 379, -1,76, 382, 381, -1,61, 381, 382, -1,60, 382, 383, -1,75, 383, 382, -1,381, + 62, 380, -1,77, 381, 380, -1,384, 383, 75, -1,384, 74, 73, -1,385, 73, 72, -1,71, + 70, 387, -1,70, 69, 388, -1,386, 72, 71, -1,389, 69, 68, -1,384, 73, 385, -1,58, + 384, 385, -1,390, 68, 67, -1,67, 66, 391, -1,65, 64, 393, -1,392, 66, 65, -1,385, + 72, 386, -1,384, 75, 74, -1,384, 59, 383, -1,63, 380, 62, -1,62, 381, 61, -1,71, + 387, 386, -1,386, 387, 56, -1,387, 388, 55, -1,70, 388, 387, -1,60, 61, 382, -1,32, + 379, 63, -1,60, 383, 59, -1,59, 384, 58, -1,385, 386, 57, -1,387, 55, 56, -1,386, + 56, 57, -1,58, 385, 57, -1,54, 55, 388, -1,68, 390, 389, -1,53, 389, 390, -1,52, + 390, 391, -1,67, 391, 390, -1,65, 393, 392, -1,50, 392, 393, -1,49, 393, 82, -1,64, + 82, 393, -1,392, 51, 391, -1,66, 392, 391, -1,389, 53, 54, -1,390, 52, 53, -1,392, + 50, 51, -1,82, 48, 49, -1,393, 49, 50, -1,391, 51, 52, -1,54, 388, 389, -1,69, 389, + 388, -1,82, 64, 97, -1,394, 97, 96, -1,396, 95, 94, -1,397, 94, 93, -1,95, 395, 96, -1, + 97, 394, 82, -1,48, 82, 394, -1,47, 394, 395, -1,96, 395, 394, -1,94, 397, 396, -1, + 45, 396, 397, -1,44, 397, 398, -1,93, 398, 397, -1,396, 46, 395, -1,95, 396, 395, -1, + 399, 398, 93, -1,399, 92, 91, -1,400, 91, 90, -1,89, 88, 402, -1,88, 87, 403, -1, + 401, 90, 89, -1,404, 87, 86, -1,399, 91, 400, -1,42, 399, 400, -1,405, 86, 85, -1, + 85, 84, 406, -1,83, 80, 408, -1,407, 84, 83, -1,400, 90, 401, -1,399, 93, 92, -1, + 399, 43, 398, -1,47, 395, 46, -1,46, 396, 45, -1,89, 402, 401, -1,401, 402, 40, -1, + 402, 403, 39, -1,88, 403, 402, -1,44, 45, 397, -1,48, 394, 47, -1,44, 398, 43, -1, + 43, 399, 42, -1,400, 401, 41, -1,402, 39, 40, -1,401, 40, 41, -1,42, 400, 41, -1, + 38, 39, 403, -1,86, 405, 404, -1,37, 404, 405, -1,36, 405, 406, -1,85, 406, 405, -1, + 83, 408, 407, -1,34, 407, 408, -1,33, 408, 81, -1,80, 81, 408, -1,407, 35, 406, -1, + 84, 407, 406, -1,404, 37, 38, -1,405, 36, 37, -1,407, 34, 35, -1,81, 32, 33, -1,408, + 33, 34, -1,406, 35, 36, -1,38, 403, 404, -1,87, 404, 403, -1,97, 112, 96, -1,96, + 112, 95, -1,95, 111, 94, -1,114, 97, 64, -1,97, 114, 113, -1,112, 97, 113, -1,65, + 114, 64, -1,109, 93, 94, -1,107, 91, 92, -1,92, 108, 107, -1,107, 90, 91, -1,93, + 109, 108, -1,111, 95, 112, -1,109, 94, 110, -1,111, 110, 94, -1,92, 93, 108, -1,116, + 65, 66, -1,65, 116, 115, -1,115, 114, 65, -1,67, 116, 66, -1,117, 67, 68, -1,68, + 69, 119, -1,69, 70, 120, -1,67, 117, 116, -1,118, 68, 119, -1,120, 70, 121, -1,119, + 69, 120, -1,72, 121, 71, -1,121, 70, 71, -1,121, 72, 122, -1,123, 122, 72, -1,117, + 68, 118, -1,107, 106, 90, -1,105, 90, 106, -1,88, 105, 104, -1,90, 105, 89, -1,104, + 103, 87, -1,102, 101, 86, -1,86, 103, 102, -1,88, 89, 105, -1,103, 86, 87, -1,101, + 85, 86, -1,100, 85, 101, -1,83, 100, 99, -1,100, 83, 84, -1,84, 85, 100, -1,98, 83, + 99, -1,88, 104, 87, -1,125, 124, 75, -1,127, 126, 76, -1,126, 125, 76, -1,74, 124, + 123, -1,123, 73, 74, -1,75, 124, 74, -1,72, 73, 123, -1,77, 128, 127, -1,79, 98, + 129, -1,98, 79, 80, -1,80, 83, 98, -1,128, 78, 79, -1,75, 76, 125, -1,77, 127, 76, -1, + 78, 128, 77, -1,129, 128, 79, -1,134, 133, 132, -1,409, 134, 132, -1,135, 134, 412, -1, + 136, 135, 412, -1,410, 409, 131, -1,132, 131, 409, -1,413, 412, 410, -1,409, 410, + 412, -1,412, 413, 415, -1,414, 413, 410, -1,412, 134, 409, -1,411, 410, 131, -1,415, + 136, 412, -1,421, 138, 137, -1,427, 140, 139, -1,430, 141, 140, -1,424, 139, 138, -1, + 416, 415, 413, -1,137, 415, 418, -1,137, 418, 421, -1,418, 415, 419, -1,424, 421, + 425, -1,139, 424, 427, -1,140, 427, 430, -1,427, 424, 428, -1,424, 138, 421, -1,421, + 418, 422, -1,430, 142, 141, -1,136, 415, 137, -1,430, 427, 428, -1,115, 411, 130, -1, + 411, 131, 130, -1,416, 414, 417, -1,410, 411, 414, -1,415, 416, 419, -1,419, 416, + 417, -1,413, 414, 416, -1,116, 414, 411, -1,115, 130, 114, -1,117, 417, 116, -1,411, + 115, 116, -1,417, 117, 420, -1,414, 116, 417, -1,420, 419, 417, -1,423, 422, 420, -1, + 419, 420, 422, -1,425, 423, 426, -1,422, 423, 425, -1,424, 425, 428, -1,428, 425, + 429, -1,425, 421, 422, -1,119, 423, 420, -1,118, 119, 420, -1,426, 423, 119, -1,120, + 426, 119, -1,121, 429, 120, -1,426, 120, 429, -1,429, 121, 432, -1,429, 425, 426, -1, + 431, 428, 429, -1,117, 118, 420, -1,422, 418, 419, -1,430, 428, 431, -1,430, 431, + 433, -1,143, 142, 433, -1,436, 144, 143, -1,439, 144, 436, -1,433, 436, 143, -1,437, + 436, 433, -1,435, 434, 431, -1,434, 433, 431, -1,440, 439, 437, -1,433, 434, 437, -1, + 442, 439, 440, -1,441, 440, 437, -1,436, 437, 439, -1,438, 437, 434, -1,439, 145, + 144, -1,142, 430, 433, -1,445, 146, 145, -1,451, 148, 147, -1,150, 149, 148, -1,448, + 147, 146, -1,443, 445, 442, -1,145, 442, 445, -1,445, 443, 446, -1,440, 443, 442, -1, + 448, 445, 449, -1,147, 448, 451, -1,148, 451, 150, -1,451, 448, 452, -1,448, 146, + 445, -1,150, 451, 151, -1,439, 442, 145, -1,444, 443, 440, -1,123, 435, 432, -1,435, + 431, 432, -1,438, 441, 437, -1,434, 435, 438, -1,441, 444, 440, -1,125, 441, 438, -1, + 444, 446, 443, -1,124, 438, 435, -1,123, 432, 122, -1,124, 435, 123, -1,126, 444, + 125, -1,438, 124, 125, -1,444, 126, 447, -1,444, 441, 125, -1,447, 446, 444, -1,121, + 122, 432, -1,450, 449, 447, -1,446, 447, 449, -1,452, 450, 453, -1,449, 450, 452, -1, + 451, 452, 151, -1,151, 452, 152, -1,452, 448, 449, -1,128, 450, 447, -1,127, 128, + 447, -1,453, 450, 128, -1,129, 453, 128, -1,98, 152, 129, -1,453, 129, 152, -1,152, + 452, 453, -1,126, 127, 447, -1,449, 445, 446, -1,429, 432, 431, -1,153, 149, 150, -1, + 454, 153, 150, -1,154, 153, 457, -1,155, 154, 457, -1,455, 454, 151, -1,150, 151, + 454, -1,458, 457, 455, -1,454, 455, 457, -1,457, 458, 460, -1,459, 458, 455, -1,457, + 153, 454, -1,456, 455, 151, -1,460, 155, 457, -1,466, 157, 156, -1,472, 159, 158, -1, + 475, 160, 159, -1,469, 158, 157, -1,461, 460, 458, -1,156, 460, 463, -1,156, 463, + 466, -1,463, 460, 464, -1,469, 466, 470, -1,158, 469, 472, -1,159, 472, 475, -1,472, + 469, 473, -1,469, 157, 466, -1,466, 463, 467, -1,475, 161, 160, -1,155, 460, 156, -1, + 475, 472, 473, -1,99, 456, 152, -1,456, 151, 152, -1,461, 459, 462, -1,455, 456, + 459, -1,460, 461, 464, -1,464, 461, 462, -1,458, 459, 461, -1,100, 459, 456, -1,99, + 152, 98, -1,101, 462, 100, -1,456, 99, 100, -1,462, 101, 465, -1,459, 100, 462, -1, + 465, 464, 462, -1,468, 467, 465, -1,464, 465, 467, -1,470, 468, 471, -1,467, 468, + 470, -1,469, 470, 473, -1,473, 470, 474, -1,470, 466, 467, -1,103, 468, 465, -1,102, + 103, 465, -1,471, 468, 103, -1,104, 471, 103, -1,105, 474, 104, -1,471, 104, 474, -1, + 474, 105, 477, -1,474, 470, 471, -1,476, 473, 474, -1,101, 102, 465, -1,467, 463, + 464, -1,475, 473, 476, -1,475, 476, 478, -1,162, 161, 478, -1,481, 163, 162, -1,484, + 163, 481, -1,478, 481, 162, -1,482, 481, 478, -1,480, 479, 476, -1,479, 478, 476, -1, + 485, 484, 482, -1,478, 479, 482, -1,487, 484, 485, -1,486, 485, 482, -1,481, 482, + 484, -1,483, 482, 479, -1,484, 164, 163, -1,161, 475, 478, -1,490, 165, 164, -1,496, + 167, 166, -1,132, 133, 167, -1,493, 166, 165, -1,488, 490, 487, -1,164, 487, 490, -1, + 490, 488, 491, -1,485, 488, 487, -1,493, 490, 494, -1,166, 493, 496, -1,167, 496, + 132, -1,496, 493, 497, -1,493, 165, 490, -1,132, 496, 131, -1,484, 487, 164, -1,489, + 488, 485, -1,107, 480, 477, -1,480, 476, 477, -1,483, 486, 482, -1,479, 480, 483, -1, + 486, 489, 485, -1,109, 486, 483, -1,489, 491, 488, -1,108, 483, 480, -1,107, 477, + 106, -1,108, 480, 107, -1,110, 489, 109, -1,483, 108, 109, -1,489, 110, 492, -1,489, + 486, 109, -1,492, 491, 489, -1,105, 106, 477, -1,495, 494, 492, -1,491, 492, 494, -1, + 497, 495, 498, -1,494, 495, 497, -1,496, 497, 131, -1,131, 497, 130, -1,497, 493, + 494, -1,112, 495, 492, -1,111, 112, 492, -1,498, 495, 112, -1,113, 498, 112, -1,114, + 130, 113, -1,498, 113, 130, -1,130, 497, 498, -1,110, 111, 492, -1,494, 490, 491, -1, + 474, 477, 476, -1,185, 184, 183, -1,499, 183, 182, -1,501, 181, 180, -1,502, 180, + 179, -1,181, 500, 182, -1,183, 499, 185, -1,149, 185, 499, -1,148, 499, 500, -1,182, + 500, 499, -1,180, 502, 501, -1,146, 501, 502, -1,145, 502, 503, -1,179, 503, 502, -1, + 501, 147, 500, -1,181, 501, 500, -1,504, 503, 179, -1,504, 178, 177, -1,505, 177, + 176, -1,175, 174, 507, -1,174, 173, 508, -1,506, 176, 175, -1,509, 173, 172, -1,504, + 177, 505, -1,143, 504, 505, -1,510, 172, 171, -1,171, 170, 511, -1,169, 168, 513, -1, + 512, 170, 169, -1,505, 176, 506, -1,504, 179, 178, -1,504, 144, 503, -1,148, 500, + 147, -1,147, 501, 146, -1,175, 507, 506, -1,506, 507, 141, -1,507, 508, 140, -1,174, + 508, 507, -1,145, 146, 502, -1,149, 499, 148, -1,145, 503, 144, -1,144, 504, 143, -1, + 505, 506, 142, -1,507, 140, 141, -1,506, 141, 142, -1,143, 505, 142, -1,139, 140, + 508, -1,172, 510, 509, -1,138, 509, 510, -1,137, 510, 511, -1,171, 511, 510, -1,169, + 513, 512, -1,135, 512, 513, -1,134, 513, 186, -1,168, 186, 513, -1,512, 136, 511, -1, + 170, 512, 511, -1,509, 138, 139, -1,510, 137, 138, -1,512, 135, 136, -1,186, 133, + 134, -1,513, 134, 135, -1,511, 136, 137, -1,139, 508, 509, -1,173, 509, 508, -1,186, + 168, 201, -1,514, 201, 200, -1,516, 199, 198, -1,517, 198, 197, -1,199, 515, 200, -1, + 201, 514, 186, -1,133, 186, 514, -1,167, 514, 515, -1,200, 515, 514, -1,198, 517, + 516, -1,165, 516, 517, -1,164, 517, 518, -1,197, 518, 517, -1,516, 166, 515, -1,199, + 516, 515, -1,519, 518, 197, -1,519, 196, 195, -1,520, 195, 194, -1,193, 192, 522, -1, + 192, 191, 523, -1,521, 194, 193, -1,524, 191, 190, -1,519, 195, 520, -1,162, 519, + 520, -1,525, 190, 189, -1,189, 188, 526, -1,187, 184, 528, -1,527, 188, 187, -1,520, + 194, 521, -1,519, 197, 196, -1,519, 163, 518, -1,167, 515, 166, -1,166, 516, 165, -1, + 193, 522, 521, -1,521, 522, 160, -1,522, 523, 159, -1,192, 523, 522, -1,164, 165, + 517, -1,133, 514, 167, -1,164, 518, 163, -1,163, 519, 162, -1,520, 521, 161, -1,522, + 159, 160, -1,521, 160, 161, -1,162, 520, 161, -1,158, 159, 523, -1,190, 525, 524, -1, + 157, 524, 525, -1,156, 525, 526, -1,189, 526, 525, -1,187, 528, 527, -1,154, 527, + 528, -1,153, 528, 185, -1,184, 185, 528, -1,527, 155, 526, -1,188, 527, 526, -1,524, + 157, 158, -1,525, 156, 157, -1,527, 154, 155, -1,185, 149, 153, -1,528, 153, 154, -1, + 526, 155, 156, -1,158, 523, 524, -1,191, 524, 523, -1,219, 218, 217, -1,529, 217, + 216, -1,531, 215, 214, -1,532, 214, 213, -1,215, 530, 216, -1,217, 529, 219, -1,184, + 219, 529, -1,183, 529, 530, -1,216, 530, 529, -1,214, 532, 531, -1,181, 531, 532, -1, + 180, 532, 533, -1,213, 533, 532, -1,531, 182, 530, -1,215, 531, 530, -1,534, 533, + 213, -1,534, 212, 211, -1,535, 211, 210, -1,209, 208, 537, -1,208, 207, 538, -1,536, + 210, 209, -1,539, 207, 206, -1,534, 211, 535, -1,178, 534, 535, -1,540, 206, 205, -1, + 205, 204, 541, -1,203, 202, 543, -1,542, 204, 203, -1,535, 210, 536, -1,534, 213, + 212, -1,534, 179, 533, -1,183, 530, 182, -1,182, 531, 181, -1,209, 537, 536, -1,536, + 537, 176, -1,537, 538, 175, -1,208, 538, 537, -1,180, 181, 532, -1,184, 529, 183, -1, + 180, 533, 179, -1,179, 534, 178, -1,535, 536, 177, -1,537, 175, 176, -1,536, 176, + 177, -1,178, 535, 177, -1,174, 175, 538, -1,206, 540, 539, -1,173, 539, 540, -1,172, + 540, 541, -1,205, 541, 540, -1,203, 543, 542, -1,170, 542, 543, -1,169, 543, 220, -1, + 202, 220, 543, -1,542, 171, 541, -1,204, 542, 541, -1,539, 173, 174, -1,540, 172, + 173, -1,542, 170, 171, -1,220, 168, 169, -1,543, 169, 170, -1,541, 171, 172, -1,174, + 538, 539, -1,207, 539, 538, -1,220, 202, 235, -1,544, 235, 234, -1,546, 233, 232, -1, + 547, 232, 231, -1,233, 545, 234, -1,235, 544, 220, -1,168, 220, 544, -1,201, 544, + 545, -1,234, 545, 544, -1,232, 547, 546, -1,199, 546, 547, -1,198, 547, 548, -1,231, + 548, 547, -1,546, 200, 545, -1,233, 546, 545, -1,549, 548, 231, -1,549, 230, 229, -1, + 550, 229, 228, -1,227, 226, 552, -1,226, 225, 553, -1,551, 228, 227, -1,554, 225, + 224, -1,549, 229, 550, -1,196, 549, 550, -1,555, 224, 223, -1,223, 222, 556, -1,221, + 218, 558, -1,557, 222, 221, -1,550, 228, 551, -1,549, 231, 230, -1,549, 197, 548, -1, + 201, 545, 200, -1,200, 546, 199, -1,227, 552, 551, -1,551, 552, 194, -1,552, 553, + 193, -1,226, 553, 552, -1,198, 199, 547, -1,168, 544, 201, -1,198, 548, 197, -1,197, + 549, 196, -1,550, 551, 195, -1,552, 193, 194, -1,551, 194, 195, -1,196, 550, 195, -1, + 192, 193, 553, -1,224, 555, 554, -1,191, 554, 555, -1,190, 555, 556, -1,223, 556, + 555, -1,221, 558, 557, -1,188, 557, 558, -1,187, 558, 219, -1,218, 219, 558, -1,557, + 189, 556, -1,222, 557, 556, -1,554, 191, 192, -1,555, 190, 191, -1,557, 188, 189, -1, + 219, 184, 187, -1,558, 187, 188, -1,556, 189, 190, -1,192, 553, 554, -1,225, 554, + 553, -1,235, 233, 234, -1,235, 202, 232, -1,232, 233, 235, -1,231, 229, 230, -1,229, + 231, 232, -1,202, 228, 232, -1,228, 202, 210, -1,205, 203, 204, -1,203, 205, 206, -1, + 203, 206, 202, -1,209, 207, 208, -1,206, 207, 209, -1,209, 210, 206, -1,206, 210, + 202, -1,229, 232, 228, -1,227, 228, 224, -1,227, 225, 226, -1,225, 227, 224, -1,221, + 223, 224, -1,223, 221, 222, -1,218, 224, 228, -1,221, 224, 218, -1,211, 213, 214, -1, + 213, 211, 212, -1,214, 210, 211, -1,214, 215, 217, -1,217, 215, 216, -1,218, 214, + 217, -1,210, 214, 218, -1,228, 210, 218, -1,265, 267, 266, -1,268, 267, 265, -1,273, + 272, 265, -1,268, 265, 272, -1,264, 273, 265, -1,272, 271, 268, -1,270, 269, 236, -1, + 237, 269, 284, -1,268, 271, 270, -1,284, 283, 237, -1,236, 269, 237, -1,236, 268, + 270, -1,274, 264, 263, -1,273, 264, 274, -1,275, 274, 263, -1,262, 277, 263, -1,258, + 262, 261, -1,275, 263, 276, -1,258, 278, 277, -1,277, 262, 258, -1,260, 259, 261, -1, + 259, 258, 261, -1,279, 278, 258, -1,276, 263, 277, -1,243, 242, 247, -1,242, 241, + 252, -1,283, 282, 238, -1,244, 243, 246, -1,243, 247, 246, -1,242, 248, 247, -1,249, + 242, 250, -1,249, 248, 242, -1,245, 244, 246, -1,242, 252, 250, -1,281, 238, 282, -1, + 239, 238, 281, -1,281, 257, 239, -1,281, 280, 257, -1,280, 279, 257, -1,240, 239, + 257, -1,252, 254, 253, -1,255, 254, 252, -1,255, 252, 241, -1,256, 240, 257, -1,256, + 255, 241, -1,256, 241, 240, -1,252, 251, 250, -1,257, 279, 258, -1,237, 283, 238, -1, + 289, 287, 286, -1,287, 289, 288, -1,285, 289, 286, -1,285, 317, 316, -1,285, 322, + 321, -1,321, 289, 285, -1,285, 316, 322, -1,321, 320, 289, -1,319, 289, 320, -1,319, + 318, 290, -1,333, 290, 318, -1,319, 290, 289, -1,323, 322, 316, -1,325, 324, 314, -1, + 324, 323, 315, -1,326, 325, 347, -1,323, 316, 315, -1,347, 314, 313, -1,315, 314, + 324, -1,311, 310, 335, -1,310, 309, 336, -1,312, 311, 334, -1,349, 313, 312, -1,312, + 334, 349, -1,313, 348, 347, -1,348, 313, 349, -1,309, 337, 336, -1,336, 335, 310, -1, + 309, 308, 337, -1,338, 337, 308, -1,334, 311, 335, -1,314, 347, 325, -1,346, 326, + 347, -1,291, 333, 332, -1,296, 331, 330, -1,331, 292, 332, -1,291, 290, 333, -1,328, + 327, 300, -1,330, 329, 298, -1,299, 329, 328, -1,332, 292, 291, -1,327, 326, 345, -1, + 294, 293, 292, -1,292, 295, 294, -1,296, 295, 292, -1,298, 329, 299, -1,298, 297, + 296, -1,330, 298, 296, -1,292, 331, 296, -1,299, 328, 300, -1,346, 345, 326, -1,301, + 344, 343, -1,344, 301, 345, -1,308, 307, 338, -1,338, 307, 306, -1,339, 338, 306, -1, + 340, 339, 305, -1,303, 302, 342, -1,302, 343, 342, -1,301, 343, 302, -1,301, 300, + 345, -1,304, 341, 340, -1,306, 305, 339, -1,340, 305, 304, -1,303, 341, 304, -1,303, + 342, 341, -1,345, 300, 327, -1,367, 366, 361, -1,365, 361, 366, -1,368, 367, 361, -1, + 364, 363, 362, -1,378, 362, 363, -1,365, 364, 362, -1,361, 365, 362, -1,360, 370, + 369, -1,361, 360, 369, -1,360, 359, 356, -1,370, 360, 371, -1,359, 358, 356, -1,371, + 360, 356, -1,368, 361, 369, -1,376, 350, 377, -1,350, 378, 377, -1,353, 351, 350, -1, + 351, 353, 352, -1,376, 353, 350, -1,375, 353, 376, -1,356, 355, 371, -1,356, 358, + 357, -1,355, 373, 372, -1,355, 372, 371, -1,354, 375, 374, -1,354, 373, 355, -1,354, + 353, 375, -1,374, 373, 354, -1,350, 362, 378, -1,567, 568, 569, -1,566, 567, 921, -1, + 569, 921, 567, -1,921, 569, 277, -1,922, 921, 278, -1,921, 922, 566, -1,566, 922, + 923, -1,564, 565, 923, -1,924, 563, 564, -1,561, 562, 926, -1,563, 925, 562, -1,927, + 560, 561, -1,564, 923, 924, -1,565, 566, 923, -1,922, 279, 923, -1,925, 924, 281, -1, + 278, 921, 277, -1,922, 278, 279, -1,924, 925, 563, -1,280, 923, 279, -1,280, 281, + 924, -1,280, 924, 923, -1,925, 281, 282, -1,926, 927, 561, -1,927, 926, 283, -1,559, + 927, 284, -1,927, 559, 560, -1,282, 283, 926, -1,284, 269, 559, -1,283, 284, 927, -1, + 926, 925, 282, -1,925, 926, 562, -1,576, 560, 559, -1,575, 576, 928, -1,559, 928, + 576, -1,928, 559, 269, -1,929, 928, 270, -1,928, 929, 575, -1,575, 929, 930, -1,573, + 574, 930, -1,931, 572, 573, -1,570, 571, 933, -1,572, 932, 571, -1,934, 568, 570, -1, + 573, 930, 931, -1,574, 575, 930, -1,929, 271, 930, -1,932, 931, 273, -1,270, 928, + 269, -1,929, 270, 271, -1,931, 932, 572, -1,272, 930, 271, -1,272, 273, 931, -1,272, + 931, 930, -1,932, 273, 274, -1,933, 934, 570, -1,934, 933, 275, -1,569, 934, 276, -1, + 934, 569, 568, -1,274, 275, 933, -1,276, 277, 569, -1,275, 276, 934, -1,933, 932, + 274, -1,932, 933, 571, -1,576, 586, 560, -1,584, 560, 585, -1,586, 585, 560, -1,575, + 587, 586, -1,575, 574, 588, -1,573, 588, 574, -1,575, 586, 576, -1,588, 587, 575, -1, + 562, 561, 584, -1,560, 584, 561, -1,582, 562, 583, -1,584, 583, 562, -1,582, 564, + 563, -1,564, 582, 581, -1,581, 580, 564, -1,562, 582, 563, -1,573, 590, 589, -1,590, + 573, 572, -1,572, 571, 590, -1,588, 573, 589, -1,592, 591, 571, -1,590, 571, 591, -1, + 568, 592, 570, -1,571, 570, 592, -1,579, 566, 580, -1,564, 580, 565, -1,566, 565, + 580, -1,578, 567, 566, -1,578, 577, 568, -1,592, 568, 577, -1,578, 566, 579, -1,568, + 567, 578, -1,601, 602, 935, -1,600, 601, 936, -1,935, 936, 601, -1,604, 602, 603, -1, + 937, 600, 936, -1,937, 936, 579, -1,935, 578, 936, -1,935, 602, 604, -1,600, 937, + 599, -1,596, 597, 939, -1,939, 597, 598, -1,598, 599, 938, -1,595, 941, 594, -1,594, + 605, 593, -1,595, 596, 940, -1,937, 938, 599, -1,937, 579, 580, -1,935, 604, 578, -1, + 578, 604, 577, -1,579, 936, 578, -1,580, 581, 938, -1,580, 938, 937, -1,938, 581, + 582, -1,939, 940, 596, -1,583, 941, 940, -1,941, 605, 594, -1,584, 605, 941, -1,940, + 939, 582, -1,940, 941, 595, -1,582, 583, 940, -1,584, 585, 605, -1,583, 584, 941, -1, + 939, 938, 582, -1,938, 939, 598, -1,612, 593, 942, -1,611, 612, 943, -1,605, 942, + 593, -1,942, 605, 585, -1,943, 942, 586, -1,942, 943, 612, -1,611, 943, 944, -1,603, + 606, 948, -1,608, 609, 946, -1,610, 945, 609, -1,946, 607, 608, -1,944, 945, 610, -1, + 610, 611, 944, -1,606, 607, 947, -1,943, 587, 944, -1,589, 590, 609, -1,586, 942, + 585, -1,943, 586, 587, -1,589, 609, 945, -1,588, 944, 587, -1,588, 589, 945, -1,588, + 945, 944, -1,609, 590, 946, -1,948, 592, 604, -1,606, 591, 592, -1,948, 604, 603, -1, + 591, 606, 947, -1,591, 947, 607, -1,592, 577, 604, -1,592, 948, 606, -1,590, 591, + 607, -1,590, 607, 946, -1,621, 622, 623, -1,620, 621, 949, -1,623, 949, 621, -1,949, + 623, 371, -1,950, 949, 372, -1,949, 950, 620, -1,620, 950, 951, -1,618, 619, 951, -1, + 952, 617, 618, -1,615, 616, 954, -1,617, 953, 616, -1,955, 614, 615, -1,618, 951, + 952, -1,619, 620, 951, -1,950, 373, 951, -1,953, 952, 375, -1,372, 949, 371, -1,950, + 372, 373, -1,952, 953, 617, -1,374, 951, 373, -1,374, 375, 952, -1,374, 952, 951, -1, + 953, 375, 376, -1,954, 955, 615, -1,955, 954, 377, -1,613, 955, 378, -1,955, 613, + 614, -1,376, 377, 954, -1,378, 363, 613, -1,377, 378, 955, -1,954, 953, 376, -1,953, + 954, 616, -1,630, 614, 613, -1,629, 630, 956, -1,613, 956, 630, -1,956, 613, 363, -1, + 957, 956, 364, -1,956, 957, 629, -1,629, 957, 958, -1,627, 628, 958, -1,959, 626, + 627, -1,624, 625, 961, -1,626, 960, 625, -1,962, 622, 624, -1,627, 958, 959, -1,628, + 629, 958, -1,957, 365, 958, -1,960, 959, 367, -1,364, 956, 363, -1,957, 364, 365, -1, + 959, 960, 626, -1,366, 958, 365, -1,366, 367, 959, -1,366, 959, 958, -1,960, 367, + 368, -1,961, 962, 624, -1,962, 961, 369, -1,623, 962, 370, -1,962, 623, 622, -1,368, + 369, 961, -1,370, 371, 623, -1,369, 370, 962, -1,961, 960, 368, -1,960, 961, 625, -1, + 630, 640, 614, -1,638, 614, 639, -1,640, 639, 614, -1,629, 641, 640, -1,629, 628, + 642, -1,627, 642, 628, -1,629, 640, 630, -1,642, 641, 629, -1,616, 615, 638, -1,614, + 638, 615, -1,636, 616, 637, -1,638, 637, 616, -1,636, 618, 617, -1,618, 636, 635, -1, + 635, 634, 618, -1,616, 636, 617, -1,627, 644, 643, -1,644, 627, 626, -1,626, 625, + 644, -1,642, 627, 643, -1,646, 645, 625, -1,644, 625, 645, -1,622, 646, 624, -1,625, + 624, 646, -1,633, 620, 634, -1,618, 634, 619, -1,620, 619, 634, -1,632, 621, 620, -1, + 632, 631, 622, -1,646, 622, 631, -1,632, 620, 633, -1,622, 621, 632, -1,655, 656, + 963, -1,964, 654, 655, -1,632, 655, 963, -1,654, 965, 653, -1,634, 965, 654, -1,654, + 964, 633, -1,633, 964, 655, -1,656, 657, 963, -1,653, 965, 652, -1,648, 658, 647, -1, + 649, 969, 648, -1,652, 966, 651, -1,635, 966, 652, -1,967, 650, 651, -1,650, 968, + 649, -1,635, 651, 966, -1,652, 965, 634, -1,654, 633, 634, -1,963, 657, 632, -1,632, + 657, 631, -1,633, 655, 632, -1,636, 651, 635, -1,635, 652, 634, -1,651, 636, 967, -1, + 968, 969, 649, -1,969, 968, 637, -1,658, 969, 638, -1,969, 658, 648, -1,637, 968, + 650, -1,638, 639, 658, -1,637, 638, 969, -1,636, 637, 650, -1,636, 650, 967, -1,971, + 665, 666, -1,970, 666, 667, -1,970, 971, 666, -1,658, 667, 647, -1,972, 665, 971, -1, + 972, 971, 641, -1,970, 640, 971, -1,970, 667, 658, -1,665, 972, 664, -1,664, 973, + 663, -1,663, 973, 662, -1,662, 974, 661, -1,659, 660, 976, -1,975, 660, 661, -1,659, + 657, 656, -1,972, 973, 664, -1,972, 641, 642, -1,970, 658, 640, -1,640, 658, 639, -1, + 641, 971, 640, -1,642, 643, 973, -1,642, 973, 972, -1,973, 643, 644, -1,974, 975, + 661, -1,645, 976, 975, -1,976, 657, 659, -1,646, 657, 976, -1,975, 974, 644, -1,975, + 976, 660, -1,644, 645, 975, -1,646, 631, 657, -1,645, 646, 976, -1,974, 973, 644, -1, + 973, 974, 662, -1,676, 677, 678, -1,675, 676, 977, -1,678, 977, 676, -1,977, 678, + 326, -1,978, 977, 327, -1,977, 978, 675, -1,675, 978, 979, -1,673, 674, 979, -1,980, + 672, 673, -1,670, 671, 982, -1,672, 981, 671, -1,983, 669, 670, -1,673, 979, 980, -1, + 674, 675, 979, -1,978, 328, 979, -1,981, 980, 330, -1,327, 977, 326, -1,978, 327, + 328, -1,980, 981, 672, -1,329, 979, 328, -1,329, 330, 980, -1,329, 980, 979, -1,981, + 330, 331, -1,982, 983, 670, -1,983, 982, 332, -1,668, 983, 333, -1,983, 668, 669, -1, + 331, 332, 982, -1,333, 318, 668, -1,332, 333, 983, -1,982, 981, 331, -1,981, 982, + 671, -1,685, 669, 668, -1,684, 685, 984, -1,668, 984, 685, -1,984, 668, 318, -1,985, + 984, 319, -1,984, 985, 684, -1,684, 985, 986, -1,682, 683, 986, -1,987, 681, 682, -1, + 679, 680, 989, -1,681, 988, 680, -1,990, 677, 679, -1,682, 986, 987, -1,683, 684, + 986, -1,985, 320, 986, -1,988, 987, 322, -1,319, 984, 318, -1,985, 319, 320, -1,987, + 988, 681, -1,321, 986, 320, -1,321, 322, 987, -1,321, 987, 986, -1,988, 322, 323, -1, + 989, 990, 679, -1,990, 989, 324, -1,678, 990, 325, -1,990, 678, 677, -1,323, 324, + 989, -1,325, 326, 678, -1,324, 325, 990, -1,989, 988, 323, -1,988, 989, 680, -1,685, + 695, 669, -1,693, 669, 694, -1,695, 694, 669, -1,684, 696, 695, -1,684, 683, 697, -1, + 682, 697, 683, -1,684, 695, 685, -1,697, 696, 684, -1,671, 670, 693, -1,669, 693, + 670, -1,691, 671, 692, -1,693, 692, 671, -1,691, 673, 672, -1,673, 691, 690, -1,690, + 689, 673, -1,671, 691, 672, -1,682, 699, 698, -1,699, 682, 681, -1,681, 680, 699, -1, + 697, 682, 698, -1,701, 700, 680, -1,699, 680, 700, -1,677, 701, 679, -1,680, 679, + 701, -1,688, 675, 689, -1,673, 689, 674, -1,675, 674, 689, -1,687, 676, 675, -1,687, + 686, 677, -1,701, 677, 686, -1,687, 675, 688, -1,677, 676, 687, -1,710, 991, 709, -1, + 712, 710, 711, -1,713, 702, 1119, -1,992, 709, 991, -1,991, 712, 686, -1,708, 992, + 993, -1,708, 709, 992, -1,991, 687, 992, -1,991, 710, 712, -1,706, 707, 994, -1,705, + 706, 994, -1,993, 994, 707, -1,994, 993, 689, -1,704, 705, 995, -1,705, 994, 690, -1, + 705, 691, 995, -1,707, 708, 993, -1,992, 688, 993, -1,687, 688, 992, -1,687, 991, + 686, -1,688, 689, 993, -1,690, 994, 689, -1,691, 704, 995, -1,691, 705, 690, -1,704, + 691, 692, -1,1119, 703, 693, -1,1121, 692, 1120, -1,1119, 693, 694, -1,1122, 692, + 1121, -1,713, 1119, 694, -1,703, 1120, 693, -1,693, 1120, 692, -1,704, 692, 1122, -1, + 714, 715, 997, -1,715, 716, 996, -1,997, 998, 714, -1,998, 997, 698, -1,715, 996, + 697, -1,715, 698, 997, -1,714, 998, 721, -1,718, 712, 711, -1,1000, 718, 719, -1, + 720, 721, 999, -1,1000, 719, 999, -1,1000, 999, 700, -1,721, 998, 999, -1,999, 719, + 720, -1,712, 718, 1000, -1,998, 699, 999, -1,1123, 696, 1124, -1,713, 694, 1126, -1, + 717, 1126, 695, -1,694, 695, 1126, -1,1123, 695, 696, -1,716, 696, 697, -1,699, 998, + 698, -1,715, 697, 698, -1,700, 999, 699, -1,701, 1000, 700, -1,716, 1125, 696, -1, + 701, 686, 712, -1,696, 1125, 1124, -1,701, 712, 1000, -1,695, 1123, 717, -1,702, + 713, 1126, -1,716, 697, 996, -1,739, 757, 740, -1,740, 757, 741, -1,743, 742, 756, -1, + 754, 743, 755, -1,756, 742, 741, -1,755, 743, 756, -1,739, 758, 757, -1,739, 759, + 758, -1,787, 761, 760, -1,756, 741, 757, -1,739, 760, 759, -1,760, 739, 788, -1,743, + 754, 769, -1,743, 769, 768, -1,765, 774, 766, -1,765, 764, 730, -1,767, 743, 768, -1, + 786, 762, 787, -1,762, 761, 787, -1,801, 762, 786, -1,801, 764, 763, -1,764, 801, + 800, -1,762, 801, 763, -1,775, 765, 729, -1,767, 744, 743, -1,787, 760, 788, -1,738, + 790, 789, -1,738, 791, 790, -1,1127, 737, 800, -1,788, 739, 789, -1,793, 792, 738, -1, + 791, 738, 792, -1,794, 793, 738, -1,796, 1127, 797, -1,738, 795, 794, -1,795, 1127, + 796, -1,739, 738, 789, -1,798, 1127, 799, -1,799, 1127, 800, -1,730, 736, 735, -1, + 737, 736, 730, -1,737, 764, 800, -1,764, 737, 730, -1,734, 730, 735, -1,731, 734, + 733, -1,732, 731, 733, -1,734, 731, 730, -1,728, 727, 726, -1,726, 725, 728, -1,729, + 728, 725, -1,1127, 798, 797, -1,730, 729, 765, -1,1127, 795, 738, -1,773, 767, 766, -1, + 775, 774, 765, -1,775, 729, 776, -1,744, 772, 771, -1,744, 771, 770, -1,772, 744, + 773, -1,777, 803, 802, -1,777, 802, 817, -1,817, 778, 777, -1,803, 777, 776, -1,729, + 803, 776, -1,779, 778, 817, -1,803, 729, 804, -1,744, 785, 784, -1,770, 785, 744, -1, + 744, 784, 745, -1,747, 746, 783, -1,784, 746, 745, -1,748, 747, 783, -1,816, 779, + 817, -1,748, 783, 782, -1,748, 782, 781, -1,783, 746, 784, -1,748, 781, 780, -1,252, + 780, 779, -1,744, 767, 773, -1,748, 780, 252, -1,805, 1128, 806, -1,806, 1128, 807, -1, + 808, 1128, 809, -1,804, 722, 805, -1,807, 1128, 808, -1,724, 729, 725, -1,729, 723, + 722, -1,724, 723, 729, -1,753, 810, 1128, -1,722, 804, 729, -1,753, 812, 811, -1, + 752, 815, 814, -1,753, 814, 813, -1,815, 252, 816, -1,753, 813, 812, -1,814, 753, + 752, -1,751, 815, 752, -1,252, 750, 749, -1,810, 809, 1128, -1,749, 251, 252, -1, + 252, 751, 750, -1,751, 252, 815, -1,252, 779, 816, -1,811, 810, 753, -1,773, 766, + 774, -1,722, 1128, 805, -1,742, 743, 823, -1,823, 1001, 742, -1,1001, 823, 825, -1, + 742, 1001, 741, -1,740, 741, 1002, -1,822, 739, 740, -1,740, 1003, 822, -1,1002, + 741, 1001, -1,826, 818, 1001, -1,825, 826, 1001, -1,818, 1002, 1001, -1,1002, 1003, + 740, -1,1003, 1002, 820, -1,819, 820, 1002, -1,820, 821, 1003, -1,1002, 818, 819, -1, + 1003, 821, 822, -1,825, 823, 824, -1,821, 827, 739, -1,738, 739, 827, -1,253, 828, + 748, -1,748, 252, 253, -1,747, 748, 836, -1,836, 1004, 747, -1,1004, 836, 829, -1, + 747, 1004, 1005, -1,745, 746, 1005, -1,1006, 745, 1005, -1,745, 1006, 744, -1,746, + 747, 1005, -1,1004, 830, 1005, -1,830, 1004, 829, -1,831, 1006, 1005, -1,831, 1005, + 830, -1,1006, 835, 744, -1,835, 1006, 833, -1,833, 834, 835, -1,833, 1006, 832, -1, + 1006, 831, 832, -1,829, 836, 828, -1,834, 824, 744, -1,743, 744, 824, -1,844, 845, + 846, -1,844, 1007, 843, -1,1007, 844, 846, -1,1007, 846, 847, -1,842, 843, 1008, -1, + 1009, 841, 842, -1,1010, 840, 841, -1,1012, 838, 839, -1,1013, 837, 838, -1,839, + 840, 1011, -1,1007, 1008, 843, -1,1008, 1009, 842, -1,1009, 1008, 847, -1,1010, 1009, + 847, -1,1009, 1010, 841, -1,847, 1008, 1007, -1,1010, 847, 1011, -1,1011, 1012, 839, -1, + 1012, 1011, 847, -1,1013, 1012, 847, -1,1012, 1013, 838, -1,1013, 847, 848, -1,1013, + 848, 837, -1,1010, 1011, 840, -1,855, 837, 848, -1,855, 1014, 854, -1,1014, 855, + 848, -1,1014, 848, 847, -1,853, 854, 1015, -1,1016, 852, 853, -1,1017, 851, 852, -1, + 1019, 849, 850, -1,1020, 845, 849, -1,850, 851, 1018, -1,1014, 1015, 854, -1,1015, + 1016, 853, -1,1016, 1015, 847, -1,1017, 1016, 847, -1,1016, 1017, 852, -1,847, 1015, + 1014, -1,1017, 847, 1018, -1,1018, 1019, 850, -1,1019, 1018, 847, -1,1020, 1019, + 847, -1,1019, 1020, 849, -1,1020, 847, 846, -1,1020, 846, 845, -1,1017, 1018, 851, -1, + 769, 754, 856, -1,768, 769, 1021, -1,856, 1021, 769, -1,1021, 856, 845, -1,1022, + 1021, 844, -1,1021, 1022, 768, -1,768, 1022, 1023, -1,766, 767, 1023, -1,1024, 765, + 766, -1,763, 764, 1026, -1,765, 1025, 764, -1,1027, 762, 763, -1,766, 1023, 1024, -1, + 767, 768, 1023, -1,1022, 843, 1023, -1,1025, 1024, 841, -1,844, 1021, 845, -1,1022, + 844, 843, -1,1024, 1025, 765, -1,842, 1023, 843, -1,842, 841, 1024, -1,842, 1024, + 1023, -1,1025, 841, 840, -1,1026, 1027, 763, -1,1027, 1026, 839, -1,857, 1027, 838, -1, + 1027, 857, 762, -1,840, 839, 1026, -1,838, 837, 857, -1,839, 838, 1027, -1,1026, + 1025, 840, -1,1025, 1026, 764, -1,761, 762, 857, -1,760, 761, 1028, -1,857, 1028, + 761, -1,1028, 857, 837, -1,1029, 1028, 855, -1,1028, 1029, 760, -1,760, 1029, 1030, -1, + 758, 759, 1030, -1,1031, 757, 758, -1,755, 756, 1033, -1,757, 1032, 756, -1,1034, + 754, 755, -1,758, 1030, 1031, -1,759, 760, 1030, -1,1029, 854, 1030, -1,1032, 1031, + 852, -1,855, 1028, 837, -1,1029, 855, 854, -1,1031, 1032, 757, -1,853, 1030, 854, -1, + 853, 852, 1031, -1,853, 1031, 1030, -1,1032, 852, 851, -1,1033, 1034, 755, -1,1034, + 1033, 850, -1,856, 1034, 849, -1,1034, 856, 754, -1,851, 850, 1033, -1,849, 845, + 856, -1,850, 849, 1034, -1,1033, 1032, 851, -1,1032, 1033, 756, -1,865, 866, 867, -1, + 865, 1035, 864, -1,1035, 865, 867, -1,1035, 867, 868, -1,863, 864, 1036, -1,1037, + 862, 863, -1,1038, 861, 862, -1,1040, 859, 860, -1,1041, 858, 859, -1,860, 861, 1039, -1, + 1035, 1036, 864, -1,1036, 1037, 863, -1,1037, 1036, 868, -1,1038, 1037, 868, -1,1037, + 1038, 862, -1,868, 1036, 1035, -1,1038, 868, 1039, -1,1039, 1040, 860, -1,1040, 1039, + 868, -1,1041, 1040, 868, -1,1040, 1041, 859, -1,1041, 868, 869, -1,1041, 869, 858, -1, + 1038, 1039, 861, -1,876, 858, 869, -1,876, 1042, 875, -1,1042, 876, 869, -1,1042, + 869, 868, -1,874, 875, 1043, -1,1044, 873, 874, -1,1045, 872, 873, -1,1047, 870, + 871, -1,1048, 866, 870, -1,871, 872, 1046, -1,1042, 1043, 875, -1,1043, 1044, 874, -1, + 1044, 1043, 868, -1,1045, 1044, 868, -1,1044, 1045, 873, -1,868, 1043, 1042, -1,1045, + 868, 1046, -1,1046, 1047, 871, -1,1047, 1046, 868, -1,1048, 1047, 868, -1,1047, 1048, + 870, -1,1048, 868, 867, -1,1048, 867, 866, -1,1045, 1046, 872, -1,785, 770, 877, -1, + 784, 785, 1049, -1,877, 1049, 785, -1,1049, 877, 866, -1,1050, 1049, 865, -1,1049, + 1050, 784, -1,784, 1050, 1051, -1,782, 783, 1051, -1,1052, 781, 782, -1,779, 780, + 1054, -1,781, 1053, 780, -1,1055, 778, 779, -1,782, 1051, 1052, -1,783, 784, 1051, -1, + 1050, 864, 1051, -1,1053, 1052, 862, -1,865, 1049, 866, -1,1050, 865, 864, -1,1052, + 1053, 781, -1,863, 1051, 864, -1,863, 862, 1052, -1,863, 1052, 1051, -1,1053, 862, + 861, -1,1054, 1055, 779, -1,1055, 1054, 860, -1,878, 1055, 859, -1,1055, 878, 778, -1, + 861, 860, 1054, -1,859, 858, 878, -1,860, 859, 1055, -1,1054, 1053, 861, -1,1053, + 1054, 780, -1,777, 778, 878, -1,776, 777, 1056, -1,878, 1056, 777, -1,1056, 878, + 858, -1,1057, 1056, 876, -1,1056, 1057, 776, -1,776, 1057, 1058, -1,774, 775, 1058, -1, + 1059, 773, 774, -1,771, 772, 1061, -1,773, 1060, 772, -1,1062, 770, 771, -1,774, + 1058, 1059, -1,775, 776, 1058, -1,1057, 875, 1058, -1,1060, 1059, 873, -1,876, 1056, + 858, -1,1057, 876, 875, -1,1059, 1060, 773, -1,874, 1058, 875, -1,874, 873, 1059, -1, + 874, 1059, 1058, -1,1060, 873, 872, -1,1061, 1062, 771, -1,1062, 1061, 871, -1,877, + 1062, 870, -1,1062, 877, 770, -1,872, 871, 1061, -1,870, 866, 877, -1,871, 870, 1062, -1, + 1061, 1060, 872, -1,1060, 1061, 772, -1,886, 887, 888, -1,886, 1063, 885, -1,1063, + 886, 888, -1,1063, 888, 889, -1,884, 885, 1064, -1,1065, 883, 884, -1,1066, 882, + 883, -1,1068, 880, 881, -1,1069, 879, 880, -1,881, 882, 1067, -1,1063, 1064, 885, -1, + 1064, 1065, 884, -1,1065, 1064, 889, -1,1066, 1065, 889, -1,1065, 1066, 883, -1,889, + 1064, 1063, -1,1066, 889, 1067, -1,1067, 1068, 881, -1,1068, 1067, 889, -1,1069, + 1068, 889, -1,1068, 1069, 880, -1,1069, 889, 890, -1,1069, 890, 879, -1,1066, 1067, + 882, -1,897, 879, 890, -1,897, 1070, 896, -1,1070, 897, 890, -1,1070, 890, 889, -1, + 895, 896, 1071, -1,1072, 894, 895, -1,1073, 893, 894, -1,1075, 891, 892, -1,1076, + 887, 891, -1,892, 893, 1074, -1,1070, 1071, 896, -1,1071, 1072, 895, -1,1072, 1071, + 889, -1,1073, 1072, 889, -1,1072, 1073, 894, -1,889, 1071, 1070, -1,1073, 889, 1074, -1, + 1074, 1075, 892, -1,1075, 1074, 889, -1,1076, 1075, 889, -1,1075, 1076, 891, -1,1076, + 889, 888, -1,1076, 888, 887, -1,1073, 1074, 893, -1,801, 786, 898, -1,800, 801, 1077, -1, + 898, 1077, 801, -1,1077, 898, 887, -1,1078, 1077, 886, -1,1077, 1078, 800, -1,800, + 1078, 1079, -1,798, 799, 1079, -1,1080, 797, 798, -1,795, 796, 1082, -1,797, 1081, + 796, -1,1083, 794, 795, -1,798, 1079, 1080, -1,799, 800, 1079, -1,1078, 885, 1079, -1, + 1081, 1080, 883, -1,886, 1077, 887, -1,1078, 886, 885, -1,1080, 1081, 797, -1,884, + 1079, 885, -1,884, 883, 1080, -1,884, 1080, 1079, -1,1081, 883, 882, -1,1082, 1083, + 795, -1,1083, 1082, 881, -1,899, 1083, 880, -1,1083, 899, 794, -1,882, 881, 1082, -1, + 880, 879, 899, -1,881, 880, 1083, -1,1082, 1081, 882, -1,1081, 1082, 796, -1,793, + 794, 899, -1,792, 793, 1084, -1,899, 1084, 793, -1,1084, 899, 879, -1,1085, 1084, + 897, -1,1084, 1085, 792, -1,792, 1085, 1086, -1,790, 791, 1086, -1,1087, 789, 790, -1, + 787, 788, 1089, -1,789, 1088, 788, -1,1090, 786, 787, -1,790, 1086, 1087, -1,791, + 792, 1086, -1,1085, 896, 1086, -1,1088, 1087, 894, -1,897, 1084, 879, -1,1085, 897, + 896, -1,1087, 1088, 789, -1,895, 1086, 896, -1,895, 894, 1087, -1,895, 1087, 1086, -1, + 1088, 894, 893, -1,1089, 1090, 787, -1,1090, 1089, 892, -1,898, 1090, 891, -1,1090, + 898, 786, -1,893, 892, 1089, -1,891, 887, 898, -1,892, 891, 1090, -1,1089, 1088, + 893, -1,1088, 1089, 788, -1,907, 908, 909, -1,907, 1091, 906, -1,1091, 907, 909, -1, + 1091, 909, 910, -1,905, 906, 1092, -1,1093, 904, 905, -1,1094, 903, 904, -1,1096, + 901, 902, -1,1097, 900, 901, -1,902, 903, 1095, -1,1091, 1092, 906, -1,1092, 1093, + 905, -1,1093, 1092, 910, -1,1094, 1093, 910, -1,1093, 1094, 904, -1,910, 1092, 1091, -1, + 1094, 910, 1095, -1,1095, 1096, 902, -1,1096, 1095, 910, -1,1097, 1096, 910, -1,1096, + 1097, 901, -1,1097, 910, 911, -1,1097, 911, 900, -1,1094, 1095, 903, -1,918, 900, + 911, -1,918, 1098, 917, -1,1098, 918, 911, -1,1098, 911, 910, -1,916, 917, 1099, -1, + 1100, 915, 916, -1,1101, 914, 915, -1,1103, 912, 913, -1,1104, 908, 912, -1,913, + 914, 1102, -1,1098, 1099, 917, -1,1099, 1100, 916, -1,1100, 1099, 910, -1,1101, 1100, + 910, -1,1100, 1101, 915, -1,910, 1099, 1098, -1,1101, 910, 1102, -1,1102, 1103, 913, -1, + 1103, 1102, 910, -1,1104, 1103, 910, -1,1103, 1104, 912, -1,1104, 910, 909, -1,1104, + 909, 908, -1,1101, 1102, 914, -1,817, 802, 919, -1,816, 817, 1105, -1,919, 1105, + 817, -1,1105, 919, 908, -1,1106, 1105, 907, -1,1105, 1106, 816, -1,816, 1106, 1107, -1, + 814, 815, 1107, -1,1108, 813, 814, -1,811, 812, 1110, -1,813, 1109, 812, -1,1111, + 810, 811, -1,814, 1107, 1108, -1,815, 816, 1107, -1,1106, 906, 1107, -1,1109, 1108, + 904, -1,907, 1105, 908, -1,1106, 907, 906, -1,1108, 1109, 813, -1,905, 1107, 906, -1, + 905, 904, 1108, -1,905, 1108, 1107, -1,1109, 904, 903, -1,1110, 1111, 811, -1,1111, + 1110, 902, -1,920, 1111, 901, -1,1111, 920, 810, -1,903, 902, 1110, -1,901, 900, + 920, -1,902, 901, 1111, -1,1110, 1109, 903, -1,1109, 1110, 812, -1,809, 810, 920, -1, + 808, 809, 1112, -1,920, 1112, 809, -1,1112, 920, 900, -1,1113, 1112, 918, -1,1112, + 1113, 808, -1,808, 1113, 1114, -1,806, 807, 1114, -1,1115, 805, 806, -1,803, 804, + 1117, -1,805, 1116, 804, -1,1118, 802, 803, -1,806, 1114, 1115, -1,807, 808, 1114, -1, + 1113, 917, 1114, -1,1116, 1115, 915, -1,918, 1112, 900, -1,1113, 918, 917, -1,1115, + 1116, 805, -1,916, 1114, 917, -1,916, 915, 1115, -1,916, 1115, 1114, -1,1116, 915, + 914, -1,1117, 1118, 803, -1,1118, 1117, 913, -1,919, 1118, 912, -1,1118, 919, 802, -1, + 914, 913, 1117, -1,912, 908, 919, -1,913, 912, 1118, -1,1117, 1116, 914, -1,1116, + 1117, 804, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,3, 2, 1, -1,5, 1, 4, -1,8, 7, 6, -1,10, 6, 9, -1,7, 11, 4, -1,1, 5, 3, -1, + 12, 3, 5, -1,13, 5, 11, -1,4, 11, 5, -1,6, 10, 8, -1,14, 8, 10, -1,16, 10, 15, -1, + 9, 15, 10, -1,8, 17, 11, -1,7, 8, 11, -1,18, 15, 9, -1,18, 20, 19, -1,22, 19, 21, -1, + 25, 24, 23, -1,24, 27, 26, -1,28, 21, 25, -1,30, 27, 29, -1,18, 19, 22, -1,31, 18, + 22, -1,33, 29, 32, -1,32, 35, 34, -1,38, 37, 36, -1,39, 35, 38, -1,22, 21, 28, -1, + 18, 9, 20, -1,18, 40, 15, -1,13, 11, 17, -1,17, 8, 14, -1,25, 23, 28, -1,28, 23, + 41, -1,23, 26, 42, -1,24, 26, 23, -1,16, 14, 10, -1,12, 5, 13, -1,16, 15, 40, -1, + 40, 18, 31, -1,22, 28, 43, -1,23, 42, 41, -1,28, 41, 43, -1,31, 22, 43, -1,44, 42, + 26, -1,29, 33, 30, -1,45, 30, 33, -1,46, 33, 34, -1,32, 34, 33, -1,38, 36, 39, -1, + 47, 39, 36, -1,49, 36, 48, -1,37, 48, 36, -1,39, 50, 34, -1,35, 39, 34, -1,30, 45, + 44, -1,33, 46, 45, -1,39, 47, 50, -1,48, 51, 49, -1,36, 49, 47, -1,34, 50, 46, -1, + 44, 26, 30, -1,27, 30, 26, -1,48, 37, 52, -1,54, 52, 53, -1,57, 56, 55, -1,59, 55, + 58, -1,56, 60, 53, -1,52, 54, 48, -1,51, 48, 54, -1,61, 54, 60, -1,53, 60, 54, -1, + 55, 59, 57, -1,62, 57, 59, -1,64, 59, 63, -1,58, 63, 59, -1,57, 65, 60, -1,56, 57, + 60, -1,66, 63, 58, -1,66, 68, 67, -1,70, 67, 69, -1,73, 72, 71, -1,72, 75, 74, -1, + 76, 69, 73, -1,78, 75, 77, -1,66, 67, 70, -1,79, 66, 70, -1,81, 77, 80, -1,80, 83, + 82, -1,85, 2, 84, -1,86, 83, 85, -1,70, 69, 76, -1,66, 58, 68, -1,66, 87, 63, -1, + 61, 60, 65, -1,65, 57, 62, -1,73, 71, 76, -1,76, 71, 88, -1,71, 74, 89, -1,72, 74, + 71, -1,64, 62, 59, -1,51, 54, 61, -1,64, 63, 87, -1,87, 66, 79, -1,70, 76, 90, -1, + 71, 89, 88, -1,76, 88, 90, -1,79, 70, 90, -1,91, 89, 74, -1,77, 81, 78, -1,92, 78, + 81, -1,93, 81, 82, -1,80, 82, 81, -1,85, 84, 86, -1,94, 86, 84, -1,95, 84, 3, -1, + 2, 3, 84, -1,86, 96, 82, -1,83, 86, 82, -1,78, 92, 91, -1,81, 93, 92, -1,86, 94, + 96, -1,3, 12, 95, -1,84, 95, 94, -1,82, 96, 93, -1,91, 74, 78, -1,75, 78, 74, -1, + 0, 97, 0, -1,0, 97, 0, -1,0, 98, 0, -1,99, 0, 0, -1,0, 99, 100, -1,97, 0, 100, -1, + 0, 99, 0, -1,101, 0, 0, -1,102, 0, 0, -1,0, 103, 102, -1,102, 0, 0, -1,0, 101, 103, -1, + 98, 0, 97, -1,101, 0, 104, -1,98, 104, 0, -1,0, 0, 103, -1,105, 0, 0, -1,0, 105, + 106, -1,106, 99, 0, -1,0, 105, 0, -1,107, 0, 0, -1,0, 0, 108, -1,0, 0, 109, -1,0, + 107, 105, -1,110, 0, 108, -1,109, 0, 111, -1,108, 0, 109, -1,0, 111, 0, -1,111, 0, + 0, -1,111, 0, 112, -1,113, 112, 0, -1,107, 0, 110, -1,102, 114, 0, -1,115, 0, 114, -1, + 0, 115, 116, -1,0, 115, 0, -1,116, 117, 0, -1,119, 118, 0, -1,0, 117, 119, -1,0, + 0, 115, -1,117, 0, 0, -1,118, 0, 0, -1,120, 0, 118, -1,0, 120, 121, -1,120, 0, 0, -1, + 0, 0, 120, -1,122, 0, 121, -1,0, 116, 0, -1,124, 123, 0, -1,126, 125, 0, -1,125, + 124, 0, -1,0, 123, 113, -1,113, 0, 0, -1,0, 123, 0, -1,0, 0, 113, -1,0, 127, 126, -1, + 0, 122, 128, -1,122, 0, 0, -1,0, 0, 122, -1,127, 0, 0, -1,0, 0, 124, -1,0, 126, 0, -1, + 0, 127, 0, -1,128, 127, 0, -1,131, 130, 129, -1,132, 131, 129, -1,134, 131, 133, -1, + 135, 134, 133, -1,137, 132, 136, -1,129, 136, 132, -1,138, 133, 137, -1,132, 137, + 133, -1,133, 138, 139, -1,140, 138, 137, -1,133, 131, 132, -1,141, 137, 136, -1,139, + 135, 133, -1,144, 143, 142, -1,147, 146, 145, -1,149, 148, 146, -1,150, 145, 143, -1, + 151, 139, 138, -1,142, 139, 152, -1,142, 152, 144, -1,152, 139, 153, -1,150, 144, + 154, -1,145, 150, 147, -1,146, 147, 149, -1,147, 150, 155, -1,150, 143, 144, -1,144, + 152, 156, -1,149, 157, 148, -1,135, 139, 142, -1,149, 147, 155, -1,106, 141, 158, -1, + 141, 136, 158, -1,151, 140, 159, -1,137, 141, 140, -1,139, 151, 153, -1,153, 151, + 159, -1,138, 140, 151, -1,105, 140, 141, -1,106, 158, 99, -1,107, 159, 105, -1,141, + 106, 105, -1,159, 107, 160, -1,140, 105, 159, -1,160, 153, 159, -1,161, 156, 160, -1, + 153, 160, 156, -1,154, 161, 162, -1,156, 161, 154, -1,150, 154, 155, -1,155, 154, + 163, -1,154, 144, 156, -1,108, 161, 160, -1,110, 108, 160, -1,162, 161, 108, -1,109, + 162, 108, -1,111, 163, 109, -1,162, 109, 163, -1,163, 111, 164, -1,163, 154, 162, -1, + 165, 155, 163, -1,107, 110, 160, -1,156, 152, 153, -1,149, 155, 165, -1,149, 165, + 166, -1,167, 157, 166, -1,169, 168, 167, -1,170, 168, 169, -1,166, 169, 167, -1,171, + 169, 166, -1,173, 172, 165, -1,172, 166, 165, -1,174, 170, 171, -1,166, 172, 171, -1, + 175, 170, 174, -1,176, 174, 171, -1,169, 171, 170, -1,177, 171, 172, -1,170, 178, + 168, -1,157, 149, 166, -1,180, 179, 178, -1,183, 182, 181, -1,185, 184, 182, -1,186, + 181, 179, -1,187, 180, 175, -1,178, 175, 180, -1,180, 187, 188, -1,174, 187, 175, -1, + 186, 180, 189, -1,181, 186, 183, -1,182, 183, 185, -1,183, 186, 190, -1,186, 179, + 180, -1,185, 183, 191, -1,170, 175, 178, -1,192, 187, 174, -1,113, 173, 164, -1,173, + 165, 164, -1,177, 176, 171, -1,172, 173, 177, -1,176, 192, 174, -1,124, 176, 177, -1, + 192, 188, 187, -1,123, 177, 173, -1,113, 164, 112, -1,123, 173, 113, -1,125, 192, + 124, -1,177, 123, 124, -1,192, 125, 193, -1,192, 176, 124, -1,193, 188, 192, -1,111, + 112, 164, -1,194, 189, 193, -1,188, 193, 189, -1,190, 194, 195, -1,189, 194, 190, -1, + 183, 190, 191, -1,191, 190, 196, -1,190, 186, 189, -1,127, 194, 193, -1,126, 127, + 193, -1,195, 194, 127, -1,128, 195, 127, -1,122, 196, 128, -1,195, 128, 196, -1,196, + 190, 195, -1,125, 126, 193, -1,189, 180, 188, -1,163, 164, 165, -1,197, 184, 185, -1, + 198, 197, 185, -1,200, 197, 199, -1,201, 200, 199, -1,202, 198, 191, -1,185, 191, + 198, -1,203, 199, 202, -1,198, 202, 199, -1,199, 203, 204, -1,205, 203, 202, -1,199, + 197, 198, -1,206, 202, 191, -1,204, 201, 199, -1,209, 208, 207, -1,212, 211, 210, -1, + 214, 213, 211, -1,215, 210, 208, -1,216, 204, 203, -1,207, 204, 217, -1,207, 217, + 209, -1,217, 204, 218, -1,215, 209, 219, -1,210, 215, 212, -1,211, 212, 214, -1,212, + 215, 220, -1,215, 208, 209, -1,209, 217, 221, -1,214, 222, 213, -1,201, 204, 207, -1, + 214, 212, 220, -1,121, 206, 196, -1,206, 191, 196, -1,216, 205, 223, -1,202, 206, + 205, -1,204, 216, 218, -1,218, 216, 223, -1,203, 205, 216, -1,120, 205, 206, -1,121, + 196, 122, -1,118, 223, 120, -1,206, 121, 120, -1,223, 118, 224, -1,205, 120, 223, -1, + 224, 218, 223, -1,225, 221, 224, -1,218, 224, 221, -1,219, 225, 226, -1,221, 225, + 219, -1,215, 219, 220, -1,220, 219, 227, -1,219, 209, 221, -1,117, 225, 224, -1,119, + 117, 224, -1,226, 225, 117, -1,116, 226, 117, -1,115, 227, 116, -1,226, 116, 227, -1, + 227, 115, 228, -1,227, 219, 226, -1,229, 220, 227, -1,118, 119, 224, -1,221, 217, + 218, -1,214, 220, 229, -1,214, 229, 230, -1,231, 222, 230, -1,233, 232, 231, -1,234, + 232, 233, -1,230, 233, 231, -1,235, 233, 230, -1,237, 236, 229, -1,236, 230, 229, -1, + 238, 234, 235, -1,230, 236, 235, -1,239, 234, 238, -1,240, 238, 235, -1,233, 235, + 234, -1,241, 235, 236, -1,234, 242, 232, -1,222, 214, 230, -1,244, 243, 242, -1,247, + 246, 245, -1,129, 130, 246, -1,248, 245, 243, -1,249, 244, 239, -1,242, 239, 244, -1, + 244, 249, 250, -1,238, 249, 239, -1,248, 244, 251, -1,245, 248, 247, -1,246, 247, + 129, -1,247, 248, 252, -1,248, 243, 244, -1,129, 247, 136, -1,234, 239, 242, -1,253, + 249, 238, -1,102, 237, 228, -1,237, 229, 228, -1,241, 240, 235, -1,236, 237, 241, -1, + 240, 253, 238, -1,101, 240, 241, -1,253, 250, 249, -1,103, 241, 237, -1,102, 228, + 114, -1,103, 237, 102, -1,104, 253, 101, -1,241, 103, 101, -1,253, 104, 254, -1,253, + 240, 101, -1,254, 250, 253, -1,115, 114, 228, -1,255, 251, 254, -1,250, 254, 251, -1, + 252, 255, 256, -1,251, 255, 252, -1,247, 252, 136, -1,136, 252, 158, -1,252, 248, + 251, -1,97, 255, 254, -1,98, 97, 254, -1,256, 255, 97, -1,100, 256, 97, -1,99, 158, + 100, -1,256, 100, 158, -1,158, 252, 256, -1,104, 98, 254, -1,251, 244, 250, -1,227, + 228, 229, -1,259, 258, 257, -1,261, 257, 260, -1,264, 263, 262, -1,10, 262, 265, -1, + 263, 266, 260, -1,257, 261, 259, -1,184, 259, 261, -1,182, 261, 266, -1,260, 266, + 261, -1,262, 10, 264, -1,179, 264, 10, -1,178, 10, 267, -1,265, 267, 10, -1,264, + 181, 266, -1,263, 264, 266, -1,268, 267, 265, -1,268, 270, 269, -1,272, 269, 271, -1, + 275, 274, 273, -1,274, 277, 276, -1,28, 271, 275, -1,279, 277, 278, -1,268, 269, + 272, -1,167, 268, 272, -1,33, 278, 280, -1,280, 282, 281, -1,285, 284, 283, -1,286, + 282, 285, -1,272, 271, 28, -1,268, 265, 270, -1,268, 168, 267, -1,182, 266, 181, -1, + 181, 264, 179, -1,275, 273, 28, -1,28, 273, 148, -1,273, 276, 146, -1,274, 276, 273, -1, + 178, 179, 10, -1,184, 261, 182, -1,178, 267, 168, -1,168, 268, 167, -1,272, 28, 157, -1, + 273, 146, 148, -1,28, 148, 157, -1,167, 272, 157, -1,145, 146, 276, -1,278, 33, 279, -1, + 143, 279, 33, -1,142, 33, 281, -1,280, 281, 33, -1,285, 283, 286, -1,134, 286, 283, -1, + 131, 283, 287, -1,284, 287, 283, -1,286, 135, 281, -1,282, 286, 281, -1,279, 143, + 145, -1,33, 142, 143, -1,286, 134, 135, -1,287, 130, 131, -1,283, 131, 134, -1,281, + 135, 142, -1,145, 276, 279, -1,277, 279, 276, -1,287, 284, 288, -1,290, 288, 289, -1, + 293, 292, 291, -1,59, 291, 294, -1,292, 295, 289, -1,288, 290, 287, -1,130, 287, + 290, -1,246, 290, 295, -1,289, 295, 290, -1,291, 59, 293, -1,243, 293, 59, -1,242, + 59, 296, -1,294, 296, 59, -1,293, 245, 295, -1,292, 293, 295, -1,297, 296, 294, -1, + 297, 299, 298, -1,301, 298, 300, -1,304, 303, 302, -1,303, 306, 305, -1,76, 300, + 304, -1,308, 306, 307, -1,297, 298, 301, -1,231, 297, 301, -1,81, 307, 309, -1,309, + 311, 310, -1,313, 258, 312, -1,314, 311, 313, -1,301, 300, 76, -1,297, 294, 299, -1, + 297, 232, 296, -1,246, 295, 245, -1,245, 293, 243, -1,304, 302, 76, -1,76, 302, 213, -1, + 302, 305, 211, -1,303, 305, 302, -1,242, 243, 59, -1,130, 290, 246, -1,242, 296, + 232, -1,232, 297, 231, -1,301, 76, 222, -1,302, 211, 213, -1,76, 213, 222, -1,231, + 301, 222, -1,210, 211, 305, -1,307, 81, 308, -1,208, 308, 81, -1,207, 81, 310, -1, + 309, 310, 81, -1,313, 312, 314, -1,200, 314, 312, -1,197, 312, 259, -1,258, 259, + 312, -1,314, 201, 310, -1,311, 314, 310, -1,308, 208, 210, -1,81, 207, 208, -1,314, + 200, 201, -1,259, 184, 197, -1,312, 197, 200, -1,310, 201, 207, -1,210, 305, 308, -1, + 306, 308, 305, -1,317, 316, 315, -1,319, 315, 318, -1,322, 321, 320, -1,324, 320, + 323, -1,321, 325, 318, -1,315, 319, 317, -1,258, 317, 319, -1,257, 319, 325, -1,318, + 325, 319, -1,320, 324, 322, -1,263, 322, 324, -1,262, 324, 326, -1,323, 326, 324, -1, + 322, 260, 325, -1,321, 322, 325, -1,327, 326, 323, -1,327, 329, 328, -1,331, 328, + 330, -1,334, 333, 332, -1,333, 336, 335, -1,337, 330, 334, -1,339, 336, 338, -1,327, + 328, 331, -1,270, 327, 331, -1,341, 338, 340, -1,340, 343, 342, -1,346, 345, 344, -1, + 347, 343, 346, -1,331, 330, 337, -1,327, 323, 329, -1,327, 265, 326, -1,257, 325, + 260, -1,260, 322, 263, -1,334, 332, 337, -1,337, 332, 271, -1,332, 335, 275, -1,333, + 335, 332, -1,262, 263, 324, -1,258, 319, 257, -1,262, 326, 265, -1,265, 327, 270, -1, + 331, 337, 269, -1,332, 275, 271, -1,337, 271, 269, -1,270, 331, 269, -1,274, 275, + 335, -1,338, 341, 339, -1,277, 339, 341, -1,278, 341, 342, -1,340, 342, 341, -1,346, + 344, 347, -1,282, 347, 344, -1,285, 344, 348, -1,345, 348, 344, -1,347, 280, 342, -1, + 343, 347, 342, -1,339, 277, 274, -1,341, 278, 277, -1,347, 282, 280, -1,348, 284, + 285, -1,344, 285, 282, -1,342, 280, 278, -1,274, 335, 339, -1,336, 339, 335, -1,348, + 345, 349, -1,351, 349, 350, -1,354, 353, 352, -1,356, 352, 355, -1,353, 357, 350, -1, + 349, 351, 348, -1,284, 348, 351, -1,288, 351, 357, -1,350, 357, 351, -1,352, 356, + 354, -1,292, 354, 356, -1,291, 356, 358, -1,355, 358, 356, -1,354, 289, 357, -1,353, + 354, 357, -1,359, 358, 355, -1,359, 361, 360, -1,363, 360, 362, -1,366, 365, 364, -1, + 365, 368, 367, -1,369, 362, 366, -1,371, 368, 370, -1,359, 360, 363, -1,299, 359, + 363, -1,373, 370, 372, -1,372, 375, 374, -1,377, 316, 376, -1,378, 375, 377, -1,363, + 362, 369, -1,359, 355, 361, -1,359, 294, 358, -1,288, 357, 289, -1,289, 354, 292, -1, + 366, 364, 369, -1,369, 364, 300, -1,364, 367, 304, -1,365, 367, 364, -1,291, 292, + 356, -1,284, 351, 288, -1,291, 358, 294, -1,294, 359, 299, -1,363, 369, 298, -1,364, + 304, 300, -1,369, 300, 298, -1,299, 363, 298, -1,303, 304, 367, -1,370, 373, 371, -1, + 306, 371, 373, -1,307, 373, 374, -1,372, 374, 373, -1,377, 376, 378, -1,311, 378, + 376, -1,313, 376, 317, -1,316, 317, 376, -1,378, 309, 374, -1,375, 378, 374, -1,371, + 306, 303, -1,373, 307, 306, -1,378, 311, 309, -1,317, 258, 313, -1,376, 313, 311, -1, + 374, 309, 307, -1,303, 367, 371, -1,368, 371, 367, -1,0, 0, 0, -1,0, 0, 0, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, + 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1, + 379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, 379, -1,379, 379, + 379, -1,382, 381, 380, -1,384, 382, 383, -1,380, 383, 382, -1,383, 380, 385, -1,387, + 383, 386, -1,383, 387, 384, -1,384, 387, 388, -1,390, 389, 388, -1,392, 391, 390, -1, + 394, 393, 81, -1,391, 395, 393, -1,397, 396, 394, -1,390, 388, 392, -1,389, 384, + 388, -1,387, 398, 388, -1,395, 392, 399, -1,386, 383, 385, -1,387, 386, 398, -1,392, + 395, 391, -1,400, 388, 398, -1,400, 399, 392, -1,400, 392, 388, -1,395, 399, 401, -1, + 81, 397, 394, -1,397, 81, 402, -1,404, 397, 403, -1,397, 404, 396, -1,401, 402, 81, -1, + 403, 405, 404, -1,402, 403, 397, -1,81, 395, 401, -1,395, 81, 393, -1,406, 396, 404, -1, + 408, 406, 407, -1,404, 407, 406, -1,407, 404, 405, -1,410, 407, 409, -1,407, 410, + 408, -1,408, 410, 411, -1,413, 412, 411, -1,415, 414, 413, -1,418, 417, 416, -1,414, + 419, 417, -1,420, 381, 418, -1,413, 411, 415, -1,412, 408, 411, -1,410, 421, 411, -1, + 419, 415, 422, -1,409, 407, 405, -1,410, 409, 421, -1,415, 419, 414, -1,423, 411, + 421, -1,423, 422, 415, -1,423, 415, 411, -1,419, 422, 424, -1,416, 420, 418, -1,420, + 416, 425, -1,380, 420, 426, -1,420, 380, 381, -1,424, 425, 416, -1,426, 385, 380, -1, + 425, 426, 420, -1,416, 419, 424, -1,419, 416, 417, -1,0, 0, 0, -1,0, 0, 0, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,429, 428, 427, -1,431, 429, 430, -1,427, 430, 429, -1,433, + 428, 432, -1,434, 431, 430, -1,434, 430, 435, -1,427, 436, 430, -1,427, 428, 433, -1, + 431, 434, 437, -1,440, 439, 438, -1,438, 439, 441, -1,441, 437, 442, -1,445, 444, + 443, -1,443, 447, 446, -1,445, 440, 448, -1,434, 442, 437, -1,434, 435, 449, -1,427, + 433, 436, -1,436, 433, 450, -1,435, 430, 436, -1,449, 451, 442, -1,449, 442, 434, -1, + 442, 451, 452, -1,438, 448, 440, -1,453, 444, 448, -1,444, 447, 443, -1,454, 447, + 444, -1,448, 438, 452, -1,448, 444, 445, -1,452, 453, 448, -1,454, 455, 447, -1,453, + 454, 444, -1,438, 442, 452, -1,442, 438, 441, -1,457, 446, 456, -1,459, 457, 458, -1, + 447, 456, 446, -1,456, 447, 455, -1,458, 456, 460, -1,456, 458, 457, -1,459, 458, + 461, -1,432, 463, 462, -1,466, 465, 464, -1,468, 467, 465, -1,464, 469, 466, -1,461, + 467, 468, -1,468, 459, 461, -1,463, 469, 470, -1,458, 471, 461, -1,473, 472, 465, -1, + 460, 456, 455, -1,458, 460, 471, -1,473, 465, 467, -1,474, 461, 471, -1,474, 473, + 467, -1,474, 467, 461, -1,465, 472, 464, -1,462, 475, 433, -1,463, 476, 475, -1,462, + 433, 432, -1,476, 463, 470, -1,476, 470, 469, -1,475, 450, 433, -1,475, 462, 463, -1, + 472, 476, 469, -1,472, 469, 464, -1,479, 478, 477, -1,481, 479, 480, -1,477, 480, + 479, -1,480, 477, 482, -1,484, 480, 483, -1,480, 484, 481, -1,481, 484, 388, -1,390, + 389, 388, -1,392, 391, 390, -1,487, 486, 485, -1,391, 395, 486, -1,489, 488, 487, -1, + 390, 388, 392, -1,389, 481, 388, -1,484, 490, 388, -1,395, 392, 399, -1,483, 480, + 482, -1,484, 483, 490, -1,392, 395, 391, -1,400, 388, 490, -1,400, 399, 392, -1,400, + 392, 388, -1,395, 399, 401, -1,485, 489, 487, -1,489, 485, 491, -1,493, 489, 492, -1, + 489, 493, 488, -1,401, 491, 485, -1,492, 494, 493, -1,491, 492, 489, -1,485, 395, + 401, -1,395, 485, 486, -1,495, 488, 493, -1,10, 495, 496, -1,493, 496, 495, -1,496, + 493, 494, -1,498, 496, 497, -1,496, 498, 10, -1,10, 498, 411, -1,413, 412, 411, -1, + 415, 414, 413, -1,501, 500, 499, -1,414, 419, 500, -1,502, 478, 501, -1,413, 411, + 415, -1,412, 10, 411, -1,498, 503, 411, -1,419, 415, 422, -1,497, 496, 494, -1,498, + 497, 503, -1,415, 419, 414, -1,423, 411, 503, -1,423, 422, 415, -1,423, 415, 411, -1, + 419, 422, 424, -1,499, 502, 501, -1,502, 499, 504, -1,477, 502, 505, -1,502, 477, + 478, -1,424, 504, 499, -1,505, 482, 477, -1,504, 505, 502, -1,499, 419, 424, -1,419, + 499, 500, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,508, 507, 506, -1,510, + 509, 508, -1,511, 508, 506, -1,509, 513, 512, -1,514, 513, 509, -1,509, 510, 515, -1, + 515, 510, 508, -1,507, 516, 506, -1,512, 513, 517, -1,520, 519, 518, -1,522, 521, + 520, -1,517, 524, 523, -1,525, 524, 517, -1,527, 526, 523, -1,526, 528, 522, -1,525, + 523, 524, -1,517, 513, 514, -1,509, 515, 514, -1,506, 516, 511, -1,511, 516, 529, -1, + 515, 508, 511, -1,530, 523, 525, -1,525, 517, 514, -1,523, 530, 527, -1,528, 521, + 522, -1,521, 528, 531, -1,519, 521, 532, -1,521, 519, 520, -1,531, 528, 526, -1,532, + 533, 519, -1,531, 532, 521, -1,530, 531, 526, -1,530, 526, 527, -1,536, 535, 534, -1, + 538, 534, 537, -1,538, 536, 534, -1,519, 537, 518, -1,539, 535, 536, -1,539, 536, + 540, -1,538, 541, 536, -1,538, 537, 519, -1,535, 539, 542, -1,542, 544, 543, -1,543, + 544, 545, -1,545, 547, 546, -1,550, 549, 548, -1,551, 549, 546, -1,550, 516, 507, -1, + 539, 544, 542, -1,539, 540, 552, -1,538, 519, 541, -1,541, 519, 533, -1,540, 536, + 541, -1,552, 553, 544, -1,552, 544, 539, -1,544, 553, 554, -1,547, 551, 546, -1,555, + 548, 551, -1,548, 516, 550, -1,556, 516, 548, -1,551, 547, 554, -1,551, 548, 549, -1, + 554, 555, 551, -1,556, 529, 516, -1,555, 556, 548, -1,547, 544, 554, -1,544, 547, + 545, -1,559, 558, 557, -1,561, 559, 560, -1,557, 560, 559, -1,560, 557, 562, -1,564, + 560, 563, -1,560, 564, 561, -1,561, 564, 565, -1,567, 566, 565, -1,569, 568, 567, -1, + 572, 571, 570, -1,568, 573, 571, -1,575, 574, 572, -1,567, 565, 569, -1,566, 561, + 565, -1,564, 576, 565, -1,573, 569, 577, -1,563, 560, 562, -1,564, 563, 576, -1,569, + 573, 568, -1,578, 565, 576, -1,578, 577, 569, -1,578, 569, 565, -1,573, 577, 579, -1, + 570, 575, 572, -1,575, 570, 580, -1,582, 575, 581, -1,575, 582, 574, -1,579, 580, + 570, -1,581, 583, 582, -1,580, 581, 575, -1,570, 573, 579, -1,573, 570, 571, -1,584, + 574, 582, -1,586, 584, 585, -1,582, 585, 584, -1,585, 582, 583, -1,588, 585, 587, -1, + 585, 588, 586, -1,586, 588, 589, -1,591, 590, 589, -1,593, 592, 591, -1,596, 595, + 594, -1,592, 597, 595, -1,598, 558, 596, -1,591, 589, 593, -1,590, 586, 589, -1,588, + 599, 589, -1,597, 593, 600, -1,587, 585, 583, -1,588, 587, 599, -1,593, 597, 592, -1, + 601, 589, 599, -1,601, 600, 593, -1,601, 593, 589, -1,597, 600, 602, -1,594, 598, + 596, -1,598, 594, 603, -1,557, 598, 604, -1,598, 557, 558, -1,602, 603, 594, -1,604, + 562, 557, -1,603, 604, 598, -1,594, 597, 602, -1,597, 594, 595, -1,0, 0, 0, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,607, 606, 605, -1,609, 607, 608, -1,582, 582, + 610, -1,611, 605, 606, -1,606, 609, 612, -1,614, 611, 613, -1,614, 605, 611, -1,606, + 615, 611, -1,606, 607, 609, -1,618, 617, 616, -1,619, 618, 616, -1,613, 616, 617, -1, + 616, 613, 620, -1,622, 619, 621, -1,619, 616, 623, -1,619, 624, 621, -1,617, 614, + 613, -1,611, 625, 613, -1,615, 625, 611, -1,615, 606, 612, -1,625, 620, 613, -1,623, + 616, 620, -1,624, 622, 621, -1,624, 619, 623, -1,622, 624, 626, -1,610, 628, 627, -1, + 630, 626, 629, -1,610, 627, 631, -1,632, 626, 630, -1,582, 610, 631, -1,628, 629, + 627, -1,627, 629, 626, -1,622, 626, 632, -1,635, 634, 633, -1,634, 637, 636, -1,633, + 638, 635, -1,638, 633, 639, -1,634, 636, 640, -1,634, 639, 633, -1,635, 638, 641, -1, + 642, 609, 608, -1,644, 642, 643, -1,646, 641, 645, -1,644, 643, 645, -1,644, 645, + 647, -1,641, 638, 645, -1,645, 643, 646, -1,609, 642, 644, -1,638, 648, 645, -1,651, + 650, 649, -1,582, 631, 652, -1,654, 652, 653, -1,631, 653, 652, -1,651, 653, 650, -1, + 637, 650, 640, -1,648, 638, 639, -1,634, 640, 639, -1,647, 645, 648, -1,655, 644, + 647, -1,637, 656, 650, -1,655, 612, 609, -1,650, 656, 649, -1,655, 609, 644, -1,653, + 651, 654, -1,582, 582, 652, -1,637, 640, 636, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, + 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1, + 582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, 582, -1,582, 582, + 582, -1,582, 582, 582, -1,659, 658, 657, -1,657, 660, 659, -1,660, 657, 661, -1,659, + 660, 662, -1,664, 662, 663, -1,666, 665, 664, -1,664, 667, 666, -1,663, 662, 660, -1, + 669, 668, 660, -1,661, 669, 660, -1,668, 663, 660, -1,663, 667, 664, -1,667, 663, + 670, -1,671, 670, 663, -1,670, 672, 667, -1,663, 668, 671, -1,667, 672, 666, -1,661, + 657, 673, -1,672, 76, 665, -1,76, 665, 76, -1,28, 675, 674, -1,674, 28, 28, -1,677, + 674, 676, -1,676, 678, 677, -1,678, 676, 679, -1,677, 678, 680, -1,682, 681, 680, -1, + 683, 682, 680, -1,682, 683, 684, -1,681, 677, 680, -1,678, 685, 680, -1,685, 678, + 679, -1,686, 683, 680, -1,686, 680, 685, -1,683, 687, 684, -1,687, 683, 688, -1,688, + 689, 687, -1,688, 683, 690, -1,683, 686, 690, -1,679, 676, 675, -1,689, 673, 684, -1, + 658, 684, 673, -1,693, 692, 691, -1,693, 695, 694, -1,695, 693, 691, -1,695, 691, + 696, -1,698, 694, 697, -1,700, 699, 698, -1,702, 701, 699, -1,705, 704, 703, -1,707, + 706, 704, -1,703, 701, 708, -1,695, 697, 694, -1,697, 700, 698, -1,700, 697, 696, -1, + 702, 700, 696, -1,700, 702, 699, -1,696, 697, 695, -1,702, 696, 708, -1,708, 705, + 703, -1,705, 708, 696, -1,707, 705, 696, -1,705, 707, 704, -1,707, 696, 709, -1,707, + 709, 706, -1,702, 708, 701, -1,710, 706, 709, -1,710, 712, 711, -1,712, 710, 709, -1, + 712, 709, 696, -1,714, 711, 713, -1,716, 715, 714, -1,718, 717, 715, -1,721, 720, + 719, -1,722, 692, 720, -1,719, 717, 723, -1,712, 713, 711, -1,713, 716, 714, -1,716, + 713, 696, -1,718, 716, 696, -1,716, 718, 715, -1,696, 713, 712, -1,718, 696, 723, -1, + 723, 721, 719, -1,721, 723, 696, -1,722, 721, 696, -1,721, 722, 720, -1,722, 696, + 691, -1,722, 691, 692, -1,718, 723, 717, -1,726, 725, 724, -1,728, 726, 727, -1,724, + 727, 726, -1,727, 724, 729, -1,731, 727, 730, -1,727, 731, 728, -1,728, 731, 732, -1, + 734, 733, 732, -1,736, 735, 734, -1,739, 738, 737, -1,735, 740, 738, -1,742, 741, + 739, -1,734, 732, 736, -1,733, 728, 732, -1,731, 743, 732, -1,740, 736, 744, -1,730, + 727, 729, -1,731, 730, 743, -1,736, 740, 735, -1,745, 732, 743, -1,745, 744, 736, -1, + 745, 736, 732, -1,740, 744, 746, -1,737, 742, 739, -1,742, 737, 747, -1,749, 742, + 748, -1,742, 749, 741, -1,746, 747, 737, -1,748, 750, 749, -1,747, 748, 742, -1,737, + 740, 746, -1,740, 737, 738, -1,751, 741, 749, -1,753, 751, 752, -1,749, 752, 751, -1, + 752, 749, 750, -1,755, 752, 754, -1,752, 755, 753, -1,753, 755, 756, -1,758, 757, + 756, -1,760, 759, 758, -1,763, 762, 761, -1,759, 764, 762, -1,765, 725, 763, -1,758, + 756, 760, -1,757, 753, 756, -1,755, 766, 756, -1,764, 760, 767, -1,754, 752, 750, -1, + 755, 754, 766, -1,760, 764, 759, -1,768, 756, 766, -1,768, 767, 760, -1,768, 760, + 756, -1,764, 767, 769, -1,761, 765, 763, -1,765, 761, 770, -1,724, 765, 771, -1,765, + 724, 725, -1,769, 770, 761, -1,771, 729, 724, -1,770, 771, 765, -1,761, 764, 769, -1, + 764, 761, 762, -1,774, 773, 772, -1,774, 776, 775, -1,776, 774, 772, -1,776, 772, + 777, -1,779, 775, 778, -1,781, 780, 779, -1,783, 782, 780, -1,786, 785, 784, -1,788, + 787, 785, -1,784, 782, 789, -1,776, 778, 775, -1,778, 781, 779, -1,781, 778, 777, -1, + 783, 781, 777, -1,781, 783, 780, -1,777, 778, 776, -1,783, 777, 789, -1,789, 786, + 784, -1,786, 789, 777, -1,788, 786, 777, -1,786, 788, 785, -1,788, 777, 790, -1,788, + 790, 787, -1,783, 789, 782, -1,791, 787, 790, -1,791, 793, 792, -1,793, 791, 790, -1, + 793, 790, 777, -1,795, 792, 794, -1,797, 796, 795, -1,799, 798, 796, -1,802, 801, + 800, -1,803, 773, 801, -1,800, 798, 804, -1,793, 794, 792, -1,794, 797, 795, -1,797, + 794, 777, -1,799, 797, 777, -1,797, 799, 796, -1,777, 794, 793, -1,799, 777, 804, -1, + 804, 802, 800, -1,802, 804, 777, -1,803, 802, 777, -1,802, 803, 801, -1,803, 777, + 772, -1,803, 772, 773, -1,799, 804, 798, -1,807, 806, 805, -1,809, 807, 808, -1,805, + 808, 807, -1,808, 805, 810, -1,812, 808, 811, -1,808, 812, 809, -1,809, 812, 813, -1, + 734, 814, 813, -1,736, 815, 734, -1,818, 817, 816, -1,815, 819, 817, -1,821, 820, + 818, -1,734, 813, 736, -1,814, 809, 813, -1,812, 822, 813, -1,819, 736, 744, -1,811, + 808, 810, -1,812, 811, 822, -1,736, 819, 815, -1,823, 813, 822, -1,823, 744, 736, -1, + 823, 736, 813, -1,819, 744, 824, -1,816, 821, 818, -1,821, 816, 825, -1,827, 821, + 826, -1,821, 827, 820, -1,824, 825, 816, -1,826, 828, 827, -1,825, 826, 821, -1,816, + 819, 824, -1,819, 816, 817, -1,829, 820, 827, -1,831, 829, 830, -1,827, 830, 829, -1, + 830, 827, 828, -1,833, 830, 832, -1,830, 833, 831, -1,831, 833, 834, -1,758, 835, + 834, -1,760, 836, 758, -1,839, 838, 837, -1,836, 840, 838, -1,841, 806, 839, -1,758, + 834, 760, -1,835, 831, 834, -1,833, 842, 834, -1,840, 760, 767, -1,832, 830, 828, -1, + 833, 832, 842, -1,760, 840, 836, -1,843, 834, 842, -1,843, 767, 760, -1,843, 760, + 834, -1,840, 767, 844, -1,837, 841, 839, -1,841, 837, 845, -1,805, 841, 846, -1,841, + 805, 806, -1,844, 845, 837, -1,846, 810, 805, -1,845, 846, 841, -1,837, 840, 844, -1, + 840, 837, 838, -1,849, 848, 847, -1,849, 851, 850, -1,851, 849, 847, -1,851, 847, + 852, -1,854, 850, 853, -1,856, 855, 854, -1,858, 857, 855, -1,861, 860, 859, -1,863, + 862, 860, -1,859, 857, 864, -1,851, 853, 850, -1,853, 856, 854, -1,856, 853, 852, -1, + 858, 856, 852, -1,856, 858, 855, -1,852, 853, 851, -1,858, 852, 864, -1,864, 861, + 859, -1,861, 864, 852, -1,863, 861, 852, -1,861, 863, 860, -1,863, 852, 865, -1,863, + 865, 862, -1,858, 864, 857, -1,866, 862, 865, -1,866, 868, 867, -1,868, 866, 865, -1, + 868, 865, 852, -1,870, 867, 869, -1,872, 871, 870, -1,874, 873, 871, -1,877, 876, + 875, -1,878, 848, 876, -1,875, 873, 879, -1,868, 869, 867, -1,869, 872, 870, -1,872, + 869, 852, -1,874, 872, 852, -1,872, 874, 871, -1,852, 869, 868, -1,874, 852, 879, -1, + 879, 877, 875, -1,877, 879, 852, -1,878, 877, 852, -1,877, 878, 876, -1,878, 852, + 847, -1,878, 847, 848, -1,874, 879, 873, -1,882, 881, 880, -1,884, 882, 883, -1,880, + 883, 882, -1,883, 880, 885, -1,887, 883, 886, -1,883, 887, 884, -1,884, 887, 888, -1, + 890, 889, 888, -1,892, 891, 890, -1,895, 894, 893, -1,891, 896, 894, -1,898, 897, + 895, -1,890, 888, 892, -1,889, 884, 888, -1,887, 899, 888, -1,896, 892, 900, -1,886, + 883, 885, -1,887, 886, 899, -1,892, 896, 891, -1,901, 888, 899, -1,901, 900, 892, -1, + 901, 892, 888, -1,896, 900, 902, -1,893, 898, 895, -1,898, 893, 903, -1,905, 898, + 904, -1,898, 905, 897, -1,902, 903, 893, -1,904, 906, 905, -1,903, 904, 898, -1,893, + 896, 902, -1,896, 893, 894, -1,907, 897, 905, -1,909, 907, 908, -1,905, 908, 907, -1, + 908, 905, 906, -1,911, 908, 910, -1,908, 911, 909, -1,909, 911, 912, -1,914, 913, + 912, -1,916, 915, 914, -1,919, 918, 917, -1,915, 920, 918, -1,921, 881, 919, -1,914, + 912, 916, -1,913, 909, 912, -1,911, 922, 912, -1,920, 916, 923, -1,910, 908, 906, -1, + 911, 910, 922, -1,916, 920, 915, -1,924, 912, 922, -1,924, 923, 916, -1,924, 916, + 912, -1,920, 923, 925, -1,917, 921, 919, -1,921, 917, 926, -1,880, 921, 927, -1,921, + 880, 881, -1,925, 926, 917, -1,927, 885, 880, -1,926, 927, 921, -1,917, 920, 925, -1, + 920, 917, 918, -1,930, 929, 928, -1,930, 932, 931, -1,932, 930, 928, -1,932, 928, + 933, -1,935, 931, 934, -1,937, 936, 935, -1,939, 938, 936, -1,942, 941, 940, -1,944, + 943, 941, -1,940, 938, 945, -1,932, 934, 931, -1,934, 937, 935, -1,937, 934, 933, -1, + 939, 937, 933, -1,937, 939, 936, -1,933, 934, 932, -1,939, 933, 945, -1,945, 942, + 940, -1,942, 945, 933, -1,944, 942, 933, -1,942, 944, 941, -1,944, 933, 946, -1,944, + 946, 943, -1,939, 945, 938, -1,947, 943, 946, -1,947, 949, 948, -1,949, 947, 946, -1, + 949, 946, 933, -1,951, 948, 950, -1,953, 952, 951, -1,955, 954, 952, -1,958, 957, + 956, -1,959, 929, 957, -1,956, 954, 960, -1,949, 950, 948, -1,950, 953, 951, -1,953, + 950, 933, -1,955, 953, 933, -1,953, 955, 952, -1,933, 950, 949, -1,955, 933, 960, -1, + 960, 958, 956, -1,958, 960, 933, -1,959, 958, 933, -1,958, 959, 957, -1,959, 933, + 928, -1,959, 928, 929, -1,955, 960, 954, -1,963, 962, 961, -1,965, 963, 964, -1,961, + 964, 963, -1,964, 961, 966, -1,968, 964, 967, -1,964, 968, 965, -1,965, 968, 969, -1, + 971, 970, 969, -1,973, 972, 971, -1,976, 975, 974, -1,972, 977, 975, -1,979, 978, + 976, -1,971, 969, 973, -1,970, 965, 969, -1,968, 980, 969, -1,977, 973, 981, -1,967, + 964, 966, -1,968, 967, 980, -1,973, 977, 972, -1,982, 969, 980, -1,982, 981, 973, -1, + 982, 973, 969, -1,977, 981, 983, -1,974, 979, 976, -1,979, 974, 984, -1,986, 979, + 985, -1,979, 986, 978, -1,983, 984, 974, -1,985, 987, 986, -1,984, 985, 979, -1,974, + 977, 983, -1,977, 974, 975, -1,988, 978, 986, -1,990, 988, 989, -1,986, 989, 988, -1, + 989, 986, 987, -1,992, 989, 991, -1,989, 992, 990, -1,990, 992, 993, -1,995, 994, + 993, -1,997, 996, 995, -1,1000, 999, 998, -1,996, 1001, 999, -1,1002, 962, 1000, -1, + 995, 993, 997, -1,994, 990, 993, -1,992, 1003, 993, -1,1001, 997, 1004, -1,991, 989, + 987, -1,992, 991, 1003, -1,997, 1001, 996, -1,1005, 993, 1003, -1,1005, 1004, 997, -1, + 1005, 997, 993, -1,1001, 1004, 1006, -1,998, 1002, 1000, -1,1002, 998, 1007, -1,961, + 1002, 1008, -1,1002, 961, 962, -1,1006, 1007, 998, -1,1008, 966, 961, -1,1007, 1008, + 1002, -1,998, 1001, 1006, -1,1001, 998, 999, -1 + ] + } + } + ] +} +DEF link0c Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 1.000000 1.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 107 + -0.054001 0.004 0.006, -0.054001 -0.004 0.006, -0.046001 -0.004 0.006, -0.044468 -0.003695 0.006, -0.043171 -0.002828 0.006, + -0.042305 -0.001531 0.006, -0.042 0 0.006, -0.042305 0.001531 0.006, -0.043171 0.002828 0.006, -0.044468 0.003695 0.006, + -0.046001 0.004 0.006, -0.054001 0.004 0.0005, -0.046001 0.004 0.0005, -0.046001 -0.004 0.0005, -0.046001 -0.004 0.00325, + -0.046001 0.004 0.00325, -0.044468 0.003695 0.0005, -0.043171 0.002828 0.0005, -0.042305 0.001531 0.0005, -0.042 0 0.0005, + -0.042305 -0.001531 0.0005, -0.043171 -0.002828 0.0005, -0.044468 -0.003695 0.0005, -0.054001 -0.004 0.0005, + -0.046001 -0.01 0.0005, -0.042171 -0.009239 0.0005, -0.038929 -0.007071 0.0005, -0.036762 -0.003827 0.0005, + -0.035999 0 0.0005, -0.036762 0.003827 0.0005, -0.038929 0.007071 0.0005, -0.042171 0.009239 0.0005, -0.046001 0.01 0.0005, + -0.054001 0.01 0.0005, -0.054001 -0.01 0.0005, 0.087997 -0.004 0, 0.087997 -0.004 0.005, 0.087997 -0.004 0.01, + 0.089531 -0.003695 0.01, 0.090828 -0.002828 0.01, 0.091698 -0.001531 0.01, 0.092003 0 0.01, 0.091698 0.001531 0.01, + 0.090828 0.002828 0.01, 0.089531 0.003695 0.01, 0.087997 0.004 0.01, 0.087997 0.004 0.005, 0.087997 0.004 0, + 0.089531 0.003695 0, 0.090828 0.002828 0, 0.091698 0.001531 0, 0.092003 0 0, 0.091698 -0.001531 0, 0.090828 -0.002828 0, + 0.089531 -0.003695 0, 0.086472 0.003695 0.01, 0.085175 0.002828 0.01, 0.084305 0.001531 0.01, 0.084 0 0.01, + 0.084305 -0.001531 0.01, 0.085175 -0.002828 0.01, 0.086472 -0.003695 0.01, 0.086472 -0.003695 0, 0.085175 -0.002828 0, + 0.084305 -0.001531 0, 0.084 0 0, 0.084305 0.001531 0, 0.085175 0.002828 0, 0.086472 0.003695 0, 0.087997 -0.002 0.011155, + 0.087997 0 0.012309, 0.087997 0.002 0.011155, -0.044468 0.003695 0.00325, -0.043171 0.002828 0.00325, + -0.042305 0.001531 0.00325, -0.042 0 0.00325, -0.042305 -0.001531 0.00325, -0.043171 -0.002828 0.00325, + -0.044468 -0.003695 0.00325, 0.089531 -0.003695 0.005, 0.090828 -0.002828 0.005, 0.091698 -0.001531 0.005, 0.092003 0 0.005, + 0.091698 0.001531 0.005, 0.090828 0.002828 0.005, 0.089531 0.003695 0.005, 0.086472 0.003695 0.005, 0.085175 0.002828 0.005, + 0.084305 0.001531 0.005, 0.084 0 0.005, 0.084305 -0.001531 0.005, 0.085175 -0.002828 0.005, 0.086472 -0.003695 0.005, + 0.088768 -0.001848 0.011155, 0.089417 -0.001414 0.011155, 0.089851 -0.000765 0.011155, 0.089996 0 0.011155, + 0.089851 0.000765 0.011155, 0.089417 0.001414 0.011155, 0.088768 0.001848 0.011155, 0.087234 0.001848 0.011155, + 0.086586 0.001414 0.011155, 0.086151 0.000765 0.011155, 0.085999 0 0.011155, 0.086151 -0.000765 0.011155, + 0.086586 -0.001414 0.011155, 0.087234 -0.001848 0.011155] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 109 + 0 0 -1, -0.0980384 -0.995183 0, 0 -1 0, -0.195132 -0.980777 0, -0.320811 -0.947143 0, -0.382795 -0.923833 0, + -0.707295 -0.706918 0, -0.4431 -0.896472 0, -0.678625 -0.734485 0, -0.912664 -0.40871 0, -0.923888 -0.382664 0, + -0.997802 -0.0662596 0, -0.947145 0.320805 0, -1 0 0, -0.707295 0.706918 0, -0.75253 0.658558 0, -0.4431 0.896472 0, + -0.923888 0.382664 0, -0.130647 0.991429 0, -0.382795 0.923833 0, -0.75253 -0.658558 0, -0.997802 0.0662596 0, + -0.947145 -0.320805 0, -0.896595 0.442852 0, -0.658959 0.752179 0, -0.320811 0.947143 0, -0.195132 0.980777 0, + -0.0653237 0.997864 0, 0 1 0, 0.00056429 1 0, 0.0668878 0.997761 0, -0.320731 0.94717 0, -0.382736 0.923858 0, + -0.706542 0.707671 0, -0.0657617 0.997835 0, -0.443062 0.896491 0, -0.678005 0.735058 0, -0.912164 0.409826 0, + -0.923479 0.383648 0, -0.997802 0.0662604 0, -0.946921 -0.321466 0, -0.706542 -0.707671 0, -0.751586 -0.659635 0, + -0.443062 -0.896491 0, -0.923479 -0.383648 0, -0.0657617 -0.997835 0, -0.382736 -0.923858 0, -0.751586 0.659635 0, + -0.997802 -0.0662604 0, -0.946921 0.321466 0, -0.89596 -0.444136 0, -0.658434 -0.752639 0, -0.320731 -0.94717 0, + 0.00056429 -1 0, 0.0668878 -0.997761 0, 0.32145 -0.946927 0, 0.383259 -0.923641 0, 0.706543 -0.70767 0, 0.443395 -0.896326 0, + 0.678006 -0.735057 0, 0.912164 -0.409826 0, 0.923479 -0.383648 0, 0.997802 -0.0662604 0, 0.946921 0.321466 0, 1 0 0, + 0.706543 0.70767 0, 0.751587 0.659634 0, 0.443395 0.896326 0, 0.923479 0.383648 0, 0.383259 0.923641 0, 0.751587 -0.659634 0, + 0.997802 0.0662604 0, 0.946921 -0.321466 0, 0.89596 0.444136 0, 0.658435 0.752638 0, 0.32145 0.946927 0, + -0.0194918 0.499969 -0.865824, 0.0333915 0.499856 -0.865465, -0.160487 0.474736 -0.865372, -0.330141 0.377327 -0.865235, + -0.209442 0.45431 -0.865873, 0.000379662 -1.29653e-008 -1, -0.36733 0.339464 -0.865929, -0.449055 0.222347 -0.865397, + -0.499 0.0315998 -0.866026, -0.469194 0.171042 -0.866373, -0.474532 -0.159477 -0.865671, -0.499712 -0.019967 -0.865961, + -0.376938 -0.330505 -0.865265, -0.222119 -0.44934 -0.865307, -0.339374 -0.367508 -0.865889, -0.0326714 -0.499911 -0.86546, + -0.172612 -0.469436 -0.86593, -0.454551 -0.208114 -0.866067, 0.0204165 -0.499908 -0.865838, 0.16102 -0.474638 -0.865327, + 0.33025 -0.377271 -0.865218, 0.210063 -0.454303 -0.865727, 0.367683 -0.339877 -0.865617, 0.44909 -0.222559 -0.865324, + 0.500036 -0.0331216 -0.865371, 0.469576 -0.173269 -0.865723, 0.47458 0.16103 -0.865357, 0.500161 0.0199348 -0.865703, + 0.376855 0.330667 -0.86524, 0.222432 0.449256 -0.86527, 0.339697 0.367918 -0.865588, 0.17337 0.469473 -0.865759, + 0.454308 0.210194 -0.865692] + } + coordIndex [ + 10, 2, 1, -1,0, 10, 1, -1,2, 10, 6, -1,3, 2, 4, -1,2, 6, 5, -1,6, 10, 7, -1,9, 8, + 10, -1,8, 7, 10, -1,5, 4, 2, -1,0, 11, 12, -1,12, 10, 0, -1,9, 10, 15, -1,8, 9, 72, -1, + 15, 72, 9, -1,72, 15, 12, -1,73, 72, 16, -1,72, 73, 8, -1,8, 73, 74, -1,6, 7, 74, -1, + 75, 5, 6, -1,3, 4, 77, -1,5, 76, 4, -1,78, 2, 3, -1,6, 74, 75, -1,7, 8, 74, -1,73, + 17, 74, -1,76, 75, 19, -1,16, 72, 12, -1,73, 16, 17, -1,75, 76, 5, -1,18, 74, 17, -1, + 18, 19, 75, -1,18, 75, 74, -1,76, 19, 20, -1,77, 78, 3, -1,78, 77, 21, -1,14, 78, + 22, -1,78, 14, 2, -1,20, 21, 77, -1,22, 13, 14, -1,21, 22, 78, -1,77, 76, 20, -1, + 76, 77, 4, -1,13, 23, 1, -1,1, 2, 13, -1,26, 25, 21, -1,19, 27, 20, -1,26, 20, 27, -1, + 20, 26, 21, -1,34, 13, 24, -1,22, 24, 13, -1,23, 13, 34, -1,25, 24, 22, -1,22, 21, + 25, -1,28, 27, 19, -1,29, 19, 18, -1,17, 30, 18, -1,29, 18, 30, -1,29, 28, 19, -1, + 31, 30, 17, -1,16, 31, 17, -1,32, 16, 12, -1,33, 32, 11, -1,12, 11, 32, -1,16, 32, + 31, -1,54, 35, 36, -1,53, 54, 79, -1,36, 79, 54, -1,79, 36, 37, -1,80, 79, 38, -1, + 79, 80, 53, -1,53, 80, 81, -1,51, 52, 81, -1,82, 50, 51, -1,48, 49, 84, -1,50, 83, + 49, -1,85, 47, 48, -1,51, 81, 82, -1,52, 53, 81, -1,80, 39, 81, -1,83, 82, 41, -1, + 38, 79, 37, -1,80, 38, 39, -1,82, 83, 50, -1,40, 81, 39, -1,40, 41, 82, -1,40, 82, + 81, -1,83, 41, 42, -1,84, 85, 48, -1,85, 84, 43, -1,46, 85, 44, -1,85, 46, 47, -1, + 42, 43, 84, -1,44, 45, 46, -1,43, 44, 85, -1,84, 83, 42, -1,83, 84, 49, -1,68, 47, + 46, -1,67, 68, 86, -1,46, 86, 68, -1,86, 46, 45, -1,87, 86, 55, -1,86, 87, 67, -1, + 67, 87, 88, -1,65, 66, 88, -1,89, 64, 65, -1,62, 63, 91, -1,64, 90, 63, -1,92, 35, + 62, -1,65, 88, 89, -1,66, 67, 88, -1,87, 56, 88, -1,90, 89, 58, -1,55, 86, 45, -1, + 87, 55, 56, -1,89, 90, 64, -1,57, 88, 56, -1,57, 58, 89, -1,57, 89, 88, -1,90, 58, + 59, -1,91, 92, 62, -1,92, 91, 60, -1,36, 92, 61, -1,92, 36, 35, -1,59, 60, 91, -1, + 61, 37, 36, -1,60, 61, 92, -1,91, 90, 59, -1,90, 91, 63, -1,38, 37, 69, -1,38, 93, + 39, -1,93, 38, 69, -1,93, 69, 70, -1,40, 39, 94, -1,95, 41, 40, -1,96, 42, 41, -1, + 98, 44, 43, -1,99, 45, 44, -1,43, 42, 97, -1,93, 94, 39, -1,94, 95, 40, -1,95, 94, + 70, -1,96, 95, 70, -1,95, 96, 41, -1,70, 94, 93, -1,96, 70, 97, -1,97, 98, 43, -1, + 98, 97, 70, -1,99, 98, 70, -1,98, 99, 44, -1,99, 70, 71, -1,99, 71, 45, -1,96, 97, + 42, -1,55, 45, 71, -1,55, 100, 56, -1,100, 55, 71, -1,100, 71, 70, -1,57, 56, 101, -1, + 102, 58, 57, -1,103, 59, 58, -1,105, 61, 60, -1,106, 37, 61, -1,60, 59, 104, -1,100, + 101, 56, -1,101, 102, 57, -1,102, 101, 70, -1,103, 102, 70, -1,102, 103, 58, -1,70, + 101, 100, -1,103, 70, 104, -1,104, 105, 60, -1,105, 104, 70, -1,106, 105, 70, -1, + 105, 106, 61, -1,106, 70, 69, -1,106, 69, 37, -1,103, 104, 59, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,2, 2, 1, -1,1, 1, 2, -1,4, 1, 3, -1,6, 4, 5, -1,3, 5, 4, -1, + 5, 3, 1, -1,8, 5, 7, -1,5, 8, 6, -1,6, 8, 9, -1,11, 10, 9, -1,13, 12, 11, -1,16, + 15, 14, -1,12, 17, 15, -1,19, 18, 16, -1,11, 9, 13, -1,10, 6, 9, -1,8, 20, 9, -1, + 17, 13, 21, -1,7, 5, 1, -1,8, 7, 20, -1,13, 17, 12, -1,22, 9, 20, -1,22, 21, 13, -1, + 22, 13, 9, -1,17, 21, 23, -1,14, 19, 16, -1,19, 14, 24, -1,26, 19, 25, -1,19, 26, + 18, -1,23, 24, 14, -1,25, 27, 26, -1,24, 25, 19, -1,14, 17, 23, -1,17, 14, 15, -1, + 27, 28, 28, -1,28, 18, 27, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, + 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,31, 30, 29, -1,33, 31, 32, -1,29, 32, 31, -1,32, 29, 34, -1, + 36, 32, 35, -1,32, 36, 33, -1,33, 36, 37, -1,39, 38, 37, -1,13, 40, 39, -1,43, 42, + 41, -1,40, 44, 42, -1,46, 45, 43, -1,39, 37, 13, -1,38, 33, 37, -1,36, 47, 37, -1, + 44, 13, 48, -1,35, 32, 34, -1,36, 35, 47, -1,13, 44, 40, -1,49, 37, 47, -1,49, 48, + 13, -1,49, 13, 37, -1,44, 48, 50, -1,41, 46, 43, -1,46, 41, 51, -1,53, 46, 52, -1, + 46, 53, 45, -1,50, 51, 41, -1,52, 54, 53, -1,51, 52, 46, -1,41, 44, 50, -1,44, 41, + 42, -1,55, 45, 53, -1,57, 55, 56, -1,53, 56, 55, -1,56, 53, 54, -1,59, 56, 58, -1, + 56, 59, 57, -1,57, 59, 60, -1,62, 61, 60, -1,64, 63, 62, -1,67, 66, 65, -1,63, 68, + 66, -1,69, 30, 67, -1,62, 60, 64, -1,61, 57, 60, -1,59, 70, 60, -1,68, 64, 71, -1, + 58, 56, 54, -1,59, 58, 70, -1,64, 68, 63, -1,72, 60, 70, -1,72, 71, 64, -1,72, 64, + 60, -1,68, 71, 73, -1,65, 69, 67, -1,69, 65, 74, -1,29, 69, 75, -1,69, 29, 30, -1, + 73, 74, 65, -1,75, 34, 29, -1,74, 75, 69, -1,65, 68, 73, -1,68, 65, 66, -1,78, 77, + 76, -1,78, 80, 79, -1,80, 78, 76, -1,80, 76, 81, -1,83, 79, 82, -1,85, 84, 83, -1, + 87, 86, 84, -1,90, 89, 88, -1,92, 91, 89, -1,88, 86, 93, -1,80, 82, 79, -1,82, 85, + 83, -1,85, 82, 81, -1,87, 85, 81, -1,85, 87, 84, -1,81, 82, 80, -1,87, 81, 93, -1, + 93, 90, 88, -1,90, 93, 81, -1,92, 90, 81, -1,90, 92, 89, -1,92, 81, 94, -1,92, 94, + 91, -1,87, 93, 86, -1,95, 91, 94, -1,95, 97, 96, -1,97, 95, 94, -1,97, 94, 81, -1, + 99, 96, 98, -1,101, 100, 99, -1,103, 102, 100, -1,106, 105, 104, -1,107, 77, 105, -1, + 104, 102, 108, -1,97, 98, 96, -1,98, 101, 99, -1,101, 98, 81, -1,103, 101, 81, -1, + 101, 103, 100, -1,81, 98, 97, -1,103, 81, 108, -1,108, 106, 104, -1,106, 108, 81, -1, + 107, 106, 81, -1,106, 107, 105, -1,107, 81, 76, -1,107, 76, 77, -1,103, 108, 102, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/link1.wrl b/examples/rlsg/staeubli-tx60l/link1.wrl new file mode 100644 index 00000000..851a2bb9 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link1.wrl @@ -0,0 +1,3726 @@ +#VRML V2.0 utf8 + +DEF link1a Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.000000 1.000000 1.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 112 + 0 -0.087006 0.133499, -0.016973 -0.085327 0.133499, -0.033295 -0.080383 0.133499, -0.048336 -0.0723269 0.133499, + -0.06152 -0.0615229 0.133499, -0.072334 -0.04834 0.133499, -0.080376 -0.033295 0.133499, -0.085327 -0.016968 0.133499, + -0.086998 4.19076e-008 0.133499, -0.085327 0.0169681 0.133499, -0.080376 0.033295 0.133499, -0.072334 0.04834 0.133499, + -0.06152 0.061523 0.133499, -0.048336 0.072327 0.133499, -0.033295 0.080383 0.133499, -0.016973 0.085327 0.133499, + 0 0.087006 0.133499, 0.016973 0.085327 0.133499, 0.033295 0.080383 0.133499, 0.048336 0.072327 0.133499, + 0.06152 0.061523 0.133499, 0.072334 0.04834 0.133499, 0.080376 0.033295 0.133499, 0.085327 0.0169681 0.133499, + 0.086998 4.19076e-008 0.133499, 0.085327 -0.016968 0.133499, 0.080376 -0.033295 0.133499, 0.072334 -0.04834 0.133499, + 0.06152 -0.0615229 0.133499, 0.048336 -0.0723269 0.133499, 0.033295 -0.080383 0.133499, 0.016973 -0.085327 0.133499, + 0 0.184494 0.0869981, -0.016973 0.184494 0.0853271, -0.033295 0.184494 0.0803761, -0.048336 0.184494 0.0723341, + -0.06152 0.184494 0.0615201, -0.072334 0.184494 0.0483361, -0.080376 0.184494 0.0332951, -0.085327 0.184494 0.0169731, + -0.086998 0.184494 5.9803e-008, -0.085327 0.184494 -0.0169729, -0.080376 0.184494 -0.0332949, -0.072334 0.184494 -0.0483359, + -0.06152 0.184494 -0.0615199, -0.048336 0.184494 -0.0723339, -0.033295 0.184494 -0.0803759, -0.016973 0.184494 -0.0853269, + 0 0.184494 -0.0869979, 0.016973 0.184494 -0.0853269, 0.033295 0.184494 -0.0803759, 0.048336 0.184494 -0.0723339, + 0.06152 0.184494 -0.0615199, 0.072334 0.184494 -0.0483359, 0.080376 0.184494 -0.0332949, 0.085327 0.184494 -0.0169729, + 0.086998 0.184494 5.9803e-008, 0.085327 0.184494 0.0169731, 0.080376 0.184494 0.0332951, 0.072334 0.184494 0.0483361, + 0.06152 0.184494 0.0615201, 0.048336 0.184494 0.0723341, 0.033295 0.184494 0.0803761, 0.016973 0.184494 0.0853271, + 0.086998 1.84852e-014 1.17719e-007, 0.085922 -0.013153 0.0131651, 0.08268 -0.026154 0.0261501, 0.077194 -0.038757 0.0387501, + 0.069359 -0.05072 0.0507091, 0.063034 -0.057892 0.0578961, 0.05566 -0.064575 0.0645601, 0.047215 -0.070557 0.0705571, + 0.037716 -0.075684 0.0756991, 0.029913 -0.078888 0.0788801, 0.021618 -0.08136 0.0813671, 0.012938 -0.083069 0.0830691, + 0.004013 -0.083923 0.0839081, -0.004884 -0.083862 0.0838701, -0.013686 -0.082947 0.0829541, -0.022238 -0.081207 0.0812071, + -0.030401 -0.078705 0.0787051, -0.040108 -0.074554 0.0745391, -0.048908 -0.069458 0.0694731, -0.056755 -0.06366 0.0636631, + -0.063641 -0.057281 0.0572741, -0.074051 -0.044098 0.0440901, -0.081306 -0.029877 0.0298821, -0.085587 -0.015076 0.0150771, + -0.086998 1.84852e-014 1.17719e-007, -0.085327 0.016968 -0.0169729, -0.080376 0.033295 -0.0332949, + -0.072334 0.04834 -0.0483359, -0.06152 0.061523 -0.0615199, -0.055191 0.067261 -0.0672529, -0.048336 0.072327 -0.0723339, + -0.041012 0.076721 -0.0767289, -0.033295 0.080383 -0.0803759, -0.025255 0.083252 -0.0832519, -0.016973 0.085327 -0.0853269, + -0.008528 0.086578 -0.0865779, 0 0.087006 -0.0869979, 0.008528 0.086578 -0.0865779, 0.016973 0.085327 -0.0853269, + 0.025255 0.083252 -0.0832519, 0.033295 0.080383 -0.0803759, 0.041012 0.076721 -0.0767289, 0.048336 0.072327 -0.0723339, + 0.055191 0.067261 -0.0672529, 0.06152 0.061523 -0.0615199, 0.072334 0.04834 -0.0483359, 0.080376 0.033295 -0.0332949, + 0.085327 0.016968 -0.0169729] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 99 + 1.12571e-007 5.74473e-007 1, 4.7005e-007 1.03771e-006 1, 3.0091e-007 3.71746e-007 1, 1.0935e-006 7.09996e-007 1, + -2.82081e-008 3.79501e-007 1, -1.36565e-006 -7.4506e-007 1, 3.946e-006 2.10926e-006 1, -3.44815e-006 -2.82852e-006 1, + 3.00696e-008 4.08904e-007 1, 8.03912e-007 9.65383e-008 1, -1.28514e-006 2.71337e-006 1, -6.58239e-007 1.64607e-006 1, + -2.13251e-006 3.9815e-006 1, -2.4704e-007 2.44753e-007 1, 1.56192e-006 1.36901e-007 1, -4.02689e-007 5.6811e-008 1, + 4.45725e-006 -4.38948e-007 1, -7.84593e-007 1.1545e-007 1, 2.98114e-006 -1.45367e-007 1, 4.55989e-007 -2.18971e-007 1, + 9.38173e-007 -8.32981e-007 1, 1.06722e-006 -1.06771e-006 1, -5.87702e-007 -4.60964e-007 1, 0 0 1, + -4.45725e-006 -4.38948e-007 1, -7.14982e-007 -6.74962e-007 1, -2.85993e-006 -3.48994e-006 1, 1.78505e-008 1 -2.22972e-007, + 0 1 0, 1.4109e-007 1 -3.93624e-007, -1.37035e-006 1 7.49419e-007, -3.29418e-007 1 4.40158e-008, -4.13051e-007 1 -9.63213e-007, + -2.97729e-007 1 -8.16783e-007, -3.45417e-006 1 2.83324e-006, -1.56156e-006 1 -1.36973e-007, -6.11984e-007 1 -1.1969e-007, + 1.13133e-006 1 -1.63601e-007, 6.95344e-007 1 2.08306e-007, 1.71261e-006 1 4.10119e-007, 1.25018e-006 1 8.35197e-007, + 4.45597e-006 1 4.38693e-007, 1.08617e-006 1 -7.48094e-007, -4.45597e-006 1 4.38693e-007, -1.44982e-006 1 -9.9815e-007, + -3.94637e-006 1 -2.11001e-006, -2.55837e-006 1 -1.53499e-006, -2.1162e-006 1 -3.95793e-006, 3.63047e-008 1 -3.80094e-007, + 6.66073e-007 1 -1.34372e-006, 2.55837e-006 1 -1.53499e-006, 3.94637e-006 1 -2.11001e-006, 7.79999e-007 1 -1.6944e-006, + 2.1162e-006 1 -3.95793e-006, 0.000245069 -0.707074 -0.707139, 0.00168246 -0.707228 -0.706984, -0.00139416 -0.706787 -0.707425, + -3.95554e-005 -0.707123 -0.70709, 0.0046325 -0.707428 -0.706771, 0.00904665 -0.70777 -0.706385, + 0.000614951 -0.707223 -0.70699, -0.000440425 -0.707007 -0.707206, 0.000582335 -0.707264 -0.706949, + -0.000139313 -0.707096 -0.707118, 0.000561661 -0.707292 -0.706922, 0.000643402 -0.707348 -0.706865, + -0.00160191 -0.706777 -0.707434, -0.000192457 -0.707418 -0.706795, 0.000202626 -0.707119 -0.707094, 0 -0.707074 -0.70714, + 0 -0.707701 -0.706512, 0 -0.70725 -0.706964, 0 -0.707669 -0.706544, 0 -0.707022 -0.707192, 0 -0.706813 -0.707401, + 0 -0.707681 -0.706532, 0 -0.706166 -0.708046, 0 -0.704881 -0.709326, 0 -0.707105 -0.707109, 0 -0.707107 -0.707107, + 0 -0.707395 -0.706818, 0 -0.706676 -0.707538, 0 -0.70691 -0.707304, -0.000292069 -0.707189 -0.707024, + 0.000344781 -0.707021 -0.707193, -0.000877754 -0.707414 -0.706799, 2.11641e-005 -0.707111 -0.707102, + 0.000323116 -0.707021 -0.707192, 0.000706627 -0.706922 -0.707291, -0.000941551 -0.707301 -0.706912, + -0.000957613 -0.70739 -0.706823, 0.00107242 -0.706845 -0.707368, 0.000956022 -0.70693 -0.707282, + 3.86825e-005 -0.707075 -0.707138, -0.00101092 -0.707191 -0.707022, 0.000741379 -0.707095 -0.707118, + -0.00082355 -0.707244 -0.706969, 0 -0.700416 -0.713735, 0 -0.703767 -0.710431] + } + coordIndex [ + 21, 18, 17, -1,17, 16, 23, -1,19, 18, 21, -1,21, 23, 22, -1,17, 23, 21, -1,21, 20, + 19, -1,26, 16, 15, -1,12, 15, 14, -1,14, 13, 12, -1,12, 11, 15, -1,8, 11, 10, -1, + 10, 9, 8, -1,6, 15, 11, -1,8, 6, 11, -1,16, 26, 23, -1,26, 25, 24, -1,6, 26, 15, -1, + 27, 26, 30, -1,27, 30, 29, -1,26, 4, 30, -1,29, 28, 27, -1,30, 0, 31, -1,6, 5, 4, -1, + 4, 26, 6, -1,6, 8, 7, -1,2, 1, 0, -1,2, 4, 3, -1,2, 30, 4, -1,0, 30, 2, -1,26, 24, + 23, -1,50, 48, 46, -1,50, 49, 48, -1,53, 51, 50, -1,50, 60, 53, -1,50, 46, 62, -1, + 53, 52, 51, -1,56, 54, 53, -1,46, 45, 40, -1,45, 44, 42, -1,46, 48, 47, -1,42, 44, + 43, -1,42, 41, 40, -1,42, 40, 45, -1,40, 39, 46, -1,56, 55, 54, -1,57, 56, 60, -1, + 57, 59, 58, -1,59, 57, 60, -1,62, 61, 60, -1,62, 46, 39, -1,62, 60, 50, -1,63, 62, + 32, -1,39, 37, 36, -1,37, 39, 38, -1,36, 62, 39, -1,34, 33, 32, -1,34, 36, 35, -1, + 32, 36, 34, -1,36, 32, 62, -1,60, 56, 53, -1,68, 64, 67, -1,69, 64, 68, -1,64, 65, + 66, -1,67, 64, 66, -1,64, 69, 70, -1,111, 73, 74, -1,111, 74, 75, -1,111, 71, 72, -1, + 111, 72, 73, -1,71, 111, 70, -1,110, 75, 76, -1,109, 110, 91, -1,75, 110, 111, -1, + 106, 107, 93, -1,109, 91, 108, -1,64, 70, 111, -1,103, 104, 96, -1,105, 96, 104, -1, + 102, 98, 101, -1,103, 97, 102, -1,95, 105, 106, -1,107, 108, 92, -1,76, 90, 110, -1, + 77, 78, 90, -1,78, 79, 89, -1,81, 89, 80, -1,89, 79, 80, -1,82, 89, 81, -1,88, 83, + 84, -1,88, 84, 85, -1,86, 87, 88, -1,86, 88, 85, -1,82, 83, 89, -1,83, 88, 89, -1, + 103, 96, 97, -1,97, 98, 102, -1,101, 99, 100, -1,101, 98, 99, -1,105, 95, 96, -1, + 92, 108, 91, -1,93, 107, 92, -1,94, 95, 106, -1,93, 94, 106, -1,90, 91, 110, -1,78, + 89, 90, -1,76, 77, 90, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,0, 4, 3, -1,5, 1, 2, -1,2, 3, 6, -1,0, 3, 2, -1,2, 7, 5, -1,9, 4, 8, -1, + 11, 8, 10, -1,10, 12, 11, -1,11, 13, 8, -1,15, 13, 14, -1,14, 16, 15, -1,17, 8, 13, -1, + 15, 17, 13, -1,4, 9, 3, -1,9, 16, 18, -1,17, 9, 8, -1,20, 9, 19, -1,20, 19, 21, -1, + 9, 22, 19, -1,21, 23, 20, -1,19, 23, 23, -1,17, 23, 22, -1,22, 9, 17, -1,17, 15, + 24, -1,25, 23, 23, -1,25, 22, 26, -1,25, 19, 22, -1,23, 19, 25, -1,9, 18, 3, -1,29, + 28, 27, -1,29, 28, 28, -1,31, 30, 29, -1,29, 32, 31, -1,29, 27, 33, -1,31, 34, 30, -1, + 36, 35, 31, -1,27, 38, 37, -1,38, 40, 39, -1,27, 28, 28, -1,39, 40, 28, -1,39, 41, + 37, -1,39, 37, 38, -1,37, 42, 27, -1,36, 43, 35, -1,44, 36, 32, -1,44, 46, 45, -1, + 46, 44, 32, -1,33, 47, 32, -1,33, 27, 42, -1,33, 32, 29, -1,28, 33, 48, -1,42, 50, + 49, -1,50, 42, 51, -1,49, 33, 42, -1,52, 28, 48, -1,52, 49, 53, -1,48, 49, 52, -1, + 49, 48, 33, -1,32, 36, 31, -1,56, 55, 54, -1,57, 55, 56, -1,55, 59, 58, -1,54, 55, + 58, -1,55, 57, 60, -1,63, 62, 61, -1,63, 61, 64, -1,63, 66, 65, -1,63, 65, 62, -1, + 66, 63, 60, -1,68, 64, 67, -1,69, 68, 69, -1,64, 68, 63, -1,72, 71, 70, -1,69, 69, + 73, -1,55, 60, 63, -1,75, 74, 74, -1,76, 74, 74, -1,79, 78, 77, -1,75, 80, 79, -1, + 81, 76, 72, -1,71, 73, 82, -1,67, 83, 68, -1,85, 84, 83, -1,84, 87, 86, -1,89, 86, + 88, -1,86, 87, 88, -1,90, 86, 89, -1,93, 92, 91, -1,93, 91, 94, -1,96, 95, 93, -1, + 96, 93, 94, -1,90, 92, 86, -1,92, 93, 86, -1,75, 74, 80, -1,80, 78, 79, -1,77, 98, + 97, -1,77, 78, 98, -1,76, 81, 74, -1,82, 73, 69, -1,70, 71, 82, -1,72, 81, 72, -1, + 70, 72, 72, -1,83, 69, 68, -1,84, 86, 83, -1,67, 85, 83, -1 + ] + } + } + ] +} +DEF link1b Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 0.666667 0.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 2782 + 0 0.184494 -0.0869979, 0 0.135757 -0.0869979, 0 0.087006 -0.0869979, 0.01075 0.086334 -0.0863339, + 0.021172 0.084381 -0.0843809, 0.031025 0.081268 -0.0812839, 0.040134 0.077179 -0.0771869, 0.049458 0.071564 -0.0715709, + 0.057671 0.065125 -0.0651399, 0.064781 0.058075 -0.0580709, 0.070831 0.050507 -0.0505219, 0.078018 0.038513 -0.0384979, + 0.083046 0.02594 -0.0259359, 0.086014 0.013031 -0.0130409, 0.086998 1.84852e-014 1.17719e-007, 0.086014 0.013031 0.0130411, + 0.083046 0.02594 0.0259361, 0.078018 0.038513 0.0384981, 0.070831 0.050507 0.0505221, 0.064781 0.058075 0.0580711, + 0.057671 0.065125 0.0651401, 0.049458 0.071564 0.0715711, 0.040134 0.077179 0.0771871, 0.031025 0.081268 0.0812841, + 0.021172 0.084381 0.0843811, 0.01075 0.086334 0.0863341, 0 0.087006 0.0869981, 0 0.135757 0.0869981, 0 0.184494 0.0869981, + 0.016973 0.184494 0.0853271, 0.033295 0.184494 0.0803761, 0.048336 0.184494 0.0723341, 0.06152 0.184494 0.0615201, + 0.072334 0.184494 0.0483361, 0.080376 0.184494 0.0332951, 0.085327 0.184494 0.0169731, 0.086998 0.184494 5.9803e-008, + 0.085327 0.184494 -0.0169729, 0.080376 0.184494 -0.0332949, 0.072334 0.184494 -0.0483359, 0.06152 0.184494 -0.0615199, + 0.048336 0.184494 -0.0723339, 0.033295 0.184494 -0.0803759, 0.016973 0.184494 -0.0853269, 0.086166 0.169006 0.0120001, + 0.086166 0.169495 0.0120001, 0.086166 0.169998 0.0120001, 0.085907 0.169998 0.0137531, 0.085609 0.169998 0.0155001, + 0.085609 0.171753 0.0155001, 0.085609 0.173492 0.0155001, 0.085518 0.173492 0.0160011, 0.085419 0.173492 0.0165001, + 0.085419 0.171753 0.0165001, 0.085419 0.169998 0.0165001, 0.08506 0.169998 0.0182531, 0.084671 0.169998 0.0200001, + 0.084671 0.169495 0.0200001, 0.084671 0.169006 0.0200001, 0.08506 0.169006 0.0182531, 0.085419 0.169006 0.0165001, + 0.085419 0.167252 0.0165001, 0.085419 0.165497 0.0165001, 0.085518 0.165497 0.0160011, 0.085609 0.165497 0.0155001, + 0.085609 0.167252 0.0155001, 0.085609 0.169006 0.0155001, 0.085907 0.169006 0.0137531, 0.084953 0.1745 -0.0187679, + 0.085167 0.1745 -0.0177689, 0.085365 0.1745 -0.0167679, 0.085365 0.173996 -0.0167679, 0.085365 0.173492 -0.0167679, + 0.08532 0.173492 -0.0170169, 0.085266 0.173492 -0.0172669, 0.085266 0.169006 -0.0172669, 0.085266 0.164505 -0.0172669, + 0.085167 0.164505 -0.0177689, 0.08506 0.164505 -0.0182689, 0.084869 0.166 -0.0191349, 0.084671 0.167496 -0.0199999, + 0.084801 0.167496 -0.0194229, 0.084938 0.167496 -0.0188449, 0.084999 0.167007 -0.0185569, 0.08506 0.166504 -0.0182689, + 0.08506 0.169998 -0.0182689, 0.08506 0.173492 -0.0182689, 0.085007 0.173492 -0.0185179, 0.084953 0.173492 -0.0187679, + 0.084953 0.173996 -0.0187679, 0.086998 0.167374 6.51772e-008, 0.086998 0.168182 6.49236e-008, 0.086998 0.169006 6.46649e-008, + 0.086853 0.169006 -0.00500794, 0.086426 0.169006 -0.00999994, 0.086426 0.169495 -0.00999994, 0.086426 0.169998 -0.00999994, + 0.086853 0.169998 -0.00500794, 0.086998 0.169998 6.43535e-008, 0.086998 0.170807 6.40995e-008, 0.086998 0.171631 6.38409e-008, + 0.086891 0.170685 0.00441706, 0.086548 0.169754 0.00882306, 0.086548 0.169495 0.00882306, 0.086548 0.16925 0.00882306, + 0.086891 0.16832 0.00441706, -0.011349 0.086243 0.0862581, -0.022318 0.084076 0.0840911, -0.032627 0.080658 0.0806501, + -0.042084 0.076141 0.0761411, -0.052605 0.069305 0.0692981, -0.061607 0.061432 0.0614281, -0.069138 0.052826 0.0528141, + -0.075256 0.043671 0.0436551, -0.080452 0.033112 0.0331081, -0.084106 0.022247 0.0222381, -0.086281 0.011169 0.0111651, + -0.086998 1.84852e-014 1.17719e-007, -0.086014 0.013031 -0.0130409, -0.083046 0.02594 -0.0259359, + -0.078018 0.038513 -0.0384979, -0.070831 0.050507 -0.0505219, -0.064781 0.058075 -0.0580709, -0.057671 0.065125 -0.0651399, + -0.049458 0.071564 -0.0715709, -0.040134 0.077179 -0.0771869, -0.031025 0.081268 -0.0812839, -0.021172 0.084381 -0.0843809, + -0.01075 0.086334 -0.0863339, -0.016973 0.184494 -0.0853269, -0.033295 0.184494 -0.0803759, -0.048336 0.184494 -0.0723339, + -0.06152 0.184494 -0.0615199, -0.072334 0.184494 -0.0483359, -0.080376 0.184494 -0.0332949, -0.085327 0.184494 -0.0169729, + -0.086998 0.184494 5.9803e-008, -0.085327 0.184494 0.0169731, -0.080376 0.184494 0.0332951, -0.072334 0.184494 0.0483361, + -0.06152 0.184494 0.0615201, -0.048336 0.184494 0.0723341, -0.033295 0.184494 0.0803761, -0.016973 0.184494 0.0853271, + 0.086998 1.5461e-008 0.0492521, 0.086998 3.09217e-008 0.0985031, 0.085327 0.016968 0.0985031, 0.080376 0.033295 0.0985031, + 0.072334 0.04834 0.0985031, 0.06152 0.061523 0.0985031, 0.048336 0.072327 0.0985031, 0.033295 0.080383 0.0985031, + 0.016973 0.085327 0.0985031, 0 0.087006 0.0985031, -0.016973 0.085327 0.0985031, -0.033295 0.080383 0.0985031, + -0.048336 0.072327 0.0985031, -0.06152 0.061523 0.0985031, -0.072334 0.04834 0.0985031, -0.080376 0.033295 0.0985031, + -0.085327 0.016968 0.0985031, -0.086998 3.09217e-008 0.0985031, -0.086998 1.5461e-008 0.0492521, -0.08506 0.01828 0.0182651, + -0.082619 0.027283 0.0272671, -0.079155 0.036102 0.0360981, -0.074654 0.044678 0.0446821, -0.069046 0.052948 0.0529331, + -0.062283 0.06073 0.0607411, -0.054325 0.067963 0.0679551, -0.043747 0.075195 0.0752031, -0.031582 0.081055 0.0810621, + -0.01804 0.085114 0.0851061, -0.003576 0.086914 0.0869291, 0.012847 0.08606 0.0860441, 0.02516 0.083282 0.0832821, + 0.036545 0.078949 0.0789491, 0.04678 0.073364 0.0733571, 0.056622 0.06604 0.0660551, 0.064972 0.057861 0.0578611, + 0.071877 0.049011 0.0490151, 0.077415 0.039703 0.0397001, 0.08165 0.030029 0.0300411, 0.084633 0.020142 0.0201451, + 0.086411 0.010101 0.0101021, -0.086052 -0.01236 0.0123561, -0.083168 -0.024658 0.0246541, -0.078278 -0.036652 0.0366551, + -0.071327 -0.048096 0.0481001, -0.064636 -0.056213 0.0562251, -0.056664 -0.063751 0.0637441, -0.045692 -0.071472 0.0714801, + -0.03297 -0.077728 0.0777361, -0.025093 -0.080444 0.0804291, -0.016808 -0.082428 0.0824201, -0.008239 -0.083618 0.0836261, + 0.000464 -0.083984 0.0840001, 0.0145 -0.082825 0.0828251, 0.027897 -0.079559 0.0795671, 0.037674 -0.075714 0.0757141, + 0.046585 -0.070953 0.0709381, 0.055141 -0.064972 0.0649801, 0.062634 -0.058289 0.0583041, 0.073509 -0.044922 0.0449301, + 0.081078 -0.030457 0.0304701, 0.085541 -0.01532 0.0153251, 0.086998 -6.09744e-005 0.0985031, 0.086998 -0.000152974 0.0985031, + 0.086998 -0.000152974 0.0983961, 0.086998 -0.000152974 0.0982971, 0.086243 -0.011047 0.0982131, 0.08403 -0.021759 0.0979541, + 0.080391 -0.032104 0.0975491, 0.075401 -0.041901 0.0970231, 0.068451 -0.051849 0.0963441, 0.060112 -0.06073 0.0956041, + 0.050545 -0.068359 0.0948791, 0.039948 -0.074615 0.0942151, 0.030472 -0.078674 0.0937501, 0.020561 -0.081635 0.0933991, + 0.010356 -0.083405 0.0931781, 0 -0.084015 0.0931021, -0.010356 -0.083405 0.0931781, -0.020561 -0.081635 0.0933991, + -0.030472 -0.078674 0.0937501, -0.039948 -0.074615 0.0942151, -0.050545 -0.068359 0.0948791, -0.060112 -0.06073 0.0956041, + -0.068451 -0.051849 0.0963441, -0.075401 -0.041901 0.0970231, -0.080391 -0.032104 0.0975491, -0.08403 -0.021759 0.0979541, + -0.086243 -0.011047 0.0982131, -0.086998 -0.000152974 0.0982971, -0.086998 -0.000152974 0.0983961, + -0.086998 -0.000152974 0.0985031, -0.086998 -6.09744e-005 0.0985031, 0 -0.087006 0.133499, 0 -0.087006 0.115898, + 0 -0.087006 0.0982971, -0.016956 -0.085327 0.0982971, -0.03326 -0.080383 0.0982971, -0.04829 -0.072357 0.0982971, + -0.06147 -0.061554 0.0982971, -0.072289 -0.048401 0.0982971, -0.080338 -0.033386 0.0982971, -0.085304 -0.01709 0.0982971, + 0 0.087006 0.115997, 0 0.087006 0.133499, -0.016973 0.085327 0.133499, -0.033295 0.080383 0.133499, + -0.048336 0.072327 0.133499, -0.06152 0.061523 0.133499, -0.072334 0.04834 0.133499, -0.080376 0.033295 0.133499, + -0.085327 0.0169681 0.133499, -0.086998 4.19076e-008 0.133499, -0.085327 -0.016968 0.133499, -0.080376 -0.033295 0.133499, + -0.072334 -0.04834 0.133499, -0.06152 -0.0615229 0.133499, -0.048336 -0.0723269 0.133499, -0.033295 -0.080383 0.133499, + -0.016973 -0.085327 0.133499, 0.085304 -0.01709 0.0982971, 0.080338 -0.033386 0.0982971, 0.072289 -0.048401 0.0982971, + 0.06147 -0.061554 0.0982971, 0.04829 -0.072357 0.0982971, 0.03326 -0.080383 0.0982971, 0.016956 -0.085327 0.0982971, + 0.016973 -0.085327 0.133499, 0.033295 -0.080383 0.133499, 0.048336 -0.0723269 0.133499, 0.06152 -0.0615229 0.133499, + 0.072334 -0.04834 0.133499, 0.080376 -0.033295 0.133499, 0.085327 -0.016968 0.133499, 0.086998 4.19076e-008 0.133499, + 0.085327 0.0169681 0.133499, 0.080376 0.033295 0.133499, 0.072334 0.04834 0.133499, 0.06152 0.061523 0.133499, + 0.048336 0.072327 0.133499, 0.033295 0.080383 0.133499, 0.016973 0.085327 0.133499, 0.085716 -0.014893 0.113503, + 0.085861 -0.014038 0.114349, 0.085999 -0.013184 0.115204, 0.085945 -0.013519 0.11557, 0.085884 -0.013885 0.115913, + 0.08577 -0.0145869 0.115204, 0.085648 -0.015289 0.114502, 0.085396 -0.016632 0.114502, 0.085129 -0.017944 0.114502, + 0.085014 -0.018463 0.115028, 0.0849 -0.019012 0.11557, 0.0849 -0.019012 0.11631, 0.0849 -0.019012 0.117058, + 0.085503 -0.016083 0.118744, 0.085999 -0.013184 0.12043, 0.085999 -0.013184 0.121956, 0.085999 -0.013184 0.123497, + 0.085403 -0.016602 0.123497, 0.084671 -0.019989 0.123497, 0.084671 -0.019989 0.123001, 0.084671 -0.019989 0.122498, + 0.085304 -0.01709 0.122498, 0.085838 -0.014191 0.122498, 0.085838 -0.014191 0.12175, 0.085838 -0.014191 0.121002, + 0.085304 -0.01709 0.119324, 0.084671 -0.019989 0.117638, 0.084671 -0.019989 0.116402, 0.084671 -0.019989 0.115143, + 0.084862 -0.019165 0.114326, 0.085045 -0.018341 0.113503, 0.085396 -0.016632 0.113503, 0.085609 0.015503 0.117996, + 0.085609 0.015503 0.116249, 0.085609 0.015503 0.114502, 0.085518 0.015991 0.114502, 0.085419 0.01651 0.114502, + 0.085419 0.01651 0.116249, 0.085419 0.01651 0.117996, 0.08506 0.01825 0.117996, 0.084671 0.0199891 0.117996, + 0.084671 0.0199891 0.1185, 0.084671 0.0199891 0.119003, 0.08506 0.01825 0.119003, 0.085419 0.01651 0.119003, + 0.085419 0.01651 0.12075, 0.085419 0.01651 0.122498, 0.085518 0.015991 0.122498, 0.085609 0.015503 0.122498, + 0.085609 0.015503 0.12075, 0.085609 0.015503 0.119003, 0.085907 0.013763 0.119003, 0.086166 0.011993 0.119003, + 0.086166 0.011993 0.1185, 0.086166 0.011993 0.117996, 0.085907 0.013763 0.117996, 0.086998 3.70409e-008 0.117996, + 0.086998 3.67873e-008 0.117188, 0.086998 3.65308e-008 0.116371, 0.086891 0.00442503 0.117317, 0.086548 0.00882003 0.118248, + 0.086548 0.00882003 0.1185, 0.086548 0.00882003 0.118752, 0.086891 0.00442503 0.11969, 0.086998 3.78671e-008 0.120628, + 0.086998 3.7611e-008 0.119812, 0.086998 3.7357e-008 0.119003, 0.086853 -0.00500496 0.119003, 0.086426 -0.01001 0.119003, + 0.086426 -0.01001 0.1185, 0.086426 -0.01001 0.117996, 0.086853 -0.00500496 0.117996, 0 -0.08551 0.0957031, + 0.085068 -0.017609 0.0980761, 0.07946 -0.03421 0.0974501, 0.070541 -0.049164 0.0965421, 0.058819 -0.06189 0.0955051, + 0.045795 -0.071411 0.0945591, 0.031322 -0.078369 0.0937881, 0.015898 -0.082581 0.0932771, -0.015898 -0.082581 0.0932771, + -0.031322 -0.078369 0.0937881, -0.045795 -0.071411 0.0945591, -0.058819 -0.06189 0.0955051, -0.070541 -0.049164 0.0965421, + -0.07946 -0.03421 0.0974501, -0.085068 -0.017609 0.0980761, 0.08709 -0.018341 0.113503, 0.087433 -0.016632 0.113503, + 0.087746 -0.014893 0.113503, 0.086723 -0.019989 0.115143, 0.086906 -0.019165 0.114326, 0.086723 -0.019989 0.117638, + 0.08786 -0.014191 0.121002, 0.087341 -0.01709 0.119316, 0.085304 -0.01709 0.119316, 0.08786 -0.014191 0.122498, + 0.086723 -0.019989 0.122498, 0.087341 -0.01709 0.122498, 0.086723 -0.019989 0.123497, 0.08744 -0.016602 0.123497, + 0.08802 -0.013184 0.123497, 0.08802 -0.013184 0.12043, 0.085495 -0.016083 0.118736, 0.087532 -0.016083 0.118736, + 0.086945 -0.019012 0.117058, 0.086945 -0.019012 0.11557, 0.087173 -0.017944 0.114502, 0.087059 -0.018463 0.115028, + 0.087433 -0.016632 0.114502, 0.087677 -0.015289 0.114502, 0.087914 -0.013885 0.115913, 0.087799 -0.0145869 0.115204, + 0.087967 -0.013519 0.11557, 0.08802 -0.013184 0.115204, 0.087891 -0.014038 0.114349, 0.086723 -0.019989 0.116402, + 0.087341 -0.01709 0.119308, 0.08786 -0.014191 0.12175, 0.086723 -0.019989 0.123001, 0.08802 -0.013184 0.121956, + 0.086945 -0.019012 0.11631, 0.087639 0.015503 0.117996, 0.087929 0.013763 0.117996, 0.088188 0.011993 0.117996, + 0.087639 0.015503 0.114502, 0.087456 0.01651 0.114502, 0.087547 0.015991 0.114502, 0.087456 0.01651 0.117996, + 0.086723 0.0199891 0.117996, 0.087105 0.01825 0.117996, 0.086723 0.0199891 0.119003, 0.087105 0.01825 0.119003, + 0.087456 0.01651 0.119003, 0.087456 0.01651 0.122498, 0.087547 0.015991 0.122498, 0.087639 0.015503 0.122498, + 0.087639 0.015503 0.119003, 0.087929 0.013763 0.119003, 0.088188 0.011993 0.119003, 0.088188 0.011993 0.1185, + 0.087639 0.015503 0.12075, 0.087456 0.01651 0.12075, 0.086723 0.0199891 0.1185, 0.087456 0.01651 0.116249, + 0.087639 0.015503 0.116249, 0.088997 3.70409e-008 0.117996, 0.08886 -0.00500496 0.117996, 0.08844 -0.01001 0.117996, + 0.088997 3.65308e-008 0.116371, 0.08889 0.00442503 0.117317, 0.088562 0.00882003 0.118248, 0.088562 0.00882003 0.118752, + 0.08889 0.00442503 0.11969, 0.088997 3.78671e-008 0.120628, 0.088997 3.7357e-008 0.119003, 0.08886 -0.00500496 0.119003, + 0.08844 -0.01001 0.119003, 0.08844 -0.01001 0.1185, 0.088997 3.7611e-008 0.119812, 0.088562 0.00882003 0.1185, + 0.088997 3.67873e-008 0.117188, 0.088463 0.169006 0.0120001, 0.088203 0.169006 0.0137531, 0.087914 0.169006 0.0155001, + 0.088455 0.169495 0.0120001, 0.088448 0.169998 0.0120001, 0.088188 0.169998 0.0137531, 0.087898 0.169998 0.0155001, + 0.087845 0.173492 0.0155001, 0.087868 0.171753 0.0155001, 0.087753 0.173492 0.0160011, 0.087662 0.173492 0.0165001, + 0.087685 0.171753 0.0165001, 0.087715 0.169998 0.0165001, 0.087364 0.169998 0.0182531, 0.086975 0.169998 0.0200001, + 0.08699 0.169006 0.0200001, 0.086983 0.169495 0.0200001, 0.08773 0.169006 0.0165001, 0.087379 0.169006 0.0182531, + 0.087753 0.167252 0.0165001, 0.087784 0.165497 0.0165001, 0.087967 0.165497 0.0155001, 0.087875 0.165497 0.0160011, + 0.087936 0.167252 0.0155001, 0.087181 0.1745 -0.0187679, 0.087189 0.173996 -0.0187679, 0.087196 0.173492 -0.0187679, + 0.087395 0.1745 -0.0177689, 0.087593 0.1745 -0.0167679, 0.087601 0.173996 -0.0167679, 0.087608 0.173492 -0.0167679, + 0.087509 0.173492 -0.0172669, 0.087555 0.173492 -0.0170169, 0.087578 0.169006 -0.0172669, 0.087646 0.164505 -0.0172669, + 0.08744 0.164505 -0.0182689, 0.087547 0.164505 -0.0177689, 0.087234 0.166 -0.0191349, 0.087013 0.167496 -0.0199999, + 0.087143 0.167496 -0.0194229, 0.087273 0.167496 -0.0188449, 0.08741 0.166504 -0.0182689, 0.087341 0.167007 -0.0185569, + 0.087303 0.173492 -0.0182689, 0.087357 0.169998 -0.0182689, 0.08725 0.173492 -0.0185179, 0.089302 0.167374 6.51772e-008, + 0.08918 0.16832 0.00441706, 0.088829 0.16925 0.00882306, 0.089279 0.169006 6.46649e-008, 0.089287 0.168182 6.49236e-008, + 0.088715 0.169006 -0.00999994, 0.089134 0.169006 -0.00500794, 0.088699 0.169495 -0.00999994, 0.088692 0.169998 -0.00999994, + 0.089119 0.169998 -0.00500794, 0.089264 0.169998 6.43535e-008, 0.089249 0.170807 6.40995e-008, 0.089233 0.171631 6.38409e-008, + 0.089142 0.170685 0.00441706, 0.088821 0.169754 0.00882306, 0.088829 0.169495 0.00882306, 0.089142 0.170685 0.00441606, + 0.089272 0.169495 6.45114e-008, 0.016973 0.092255 -0.0853269, 0.033295 0.092255 -0.0803759, 0.048336 0.092255 -0.0723339, + 0.06152 0.092255 -0.0615199, 0.072334 0.092255 -0.0483359, 0.080376 0.092255 -0.0332949, 0.085327 0.092255 -0.0169729, + 0.086998 0.092255 8.87583e-008, 0.085327 0.092255 0.0169731, 0.080376 0.092255 0.0332951, 0.072334 0.092255 0.0483361, + 0.06152 0.092255 0.0615201, 0.048336 0.092255 0.0723341, 0.033295 0.092255 0.0803761, 0.016973 0.092255 0.0853271, + -0.016973 0.092255 0.0853271, -0.033295 0.092255 0.0803761, -0.048336 0.092255 0.0723341, -0.06152 0.092255 0.0615201, + -0.072334 0.092255 0.0483361, -0.080376 0.092255 0.0332951, -0.085327 0.092255 0.0169731, -0.086998 0.092255 8.87583e-008, + -0.085327 0.092255 -0.0169729, -0.080376 0.092255 -0.0332949, -0.072334 0.092255 -0.0483359, -0.06152 0.092255 -0.0615199, + -0.048336 0.092255 -0.0723339, -0.033295 0.092255 -0.0803759, -0.016973 0.092255 -0.0853269, 0.085327 0.016968 0.0492521, + 0.080376 0.033295 0.0492521, 0.072334 0.04834 0.0492521, -0.072334 0.04834 0.0492521, -0.080376 0.033295 0.0492521, + -0.085327 0.016968 0.0492521, 0.085327 -0.016388 0.0492521, 0.080376 -0.032135 0.0492521, 0.072334 -0.046661 0.0492521, + -0.072334 -0.046661 0.0492521, -0.080376 -0.032135 0.0492521, -0.085327 -0.016388 0.0492521, -0.016973 0.085327 0.115898, + -0.033295 0.080383 0.115898, -0.048336 0.072327 0.115898, -0.06152 0.061523 0.115898, -0.072334 0.04834 0.115898, + -0.080376 0.033295 0.115898, -0.085327 0.016968 0.115898, -0.086998 3.63823e-008 0.115898, -0.085327 -0.016968 0.115898, + -0.080376 -0.033295 0.115898, -0.072334 -0.04834 0.115898, -0.06152 -0.061523 0.115898, -0.048336 -0.072327 0.115898, + -0.033295 -0.080383 0.115898, -0.016973 -0.085327 0.115898, 0.016973 -0.085327 0.115898, 0.033295 -0.080383 0.115898, + 0.048336 -0.072327 0.115898, 0.06152 -0.061523 0.115898, 0.072334 -0.04834 0.115898, 0.080376 -0.033295 0.115898, + 0.085327 -0.016968 0.115898, 0.086998 3.63823e-008 0.115898, 0.085327 0.016968 0.115898, 0.080376 0.033295 0.115898, + 0.072334 0.04834 0.115898, 0.06152 0.061523 0.115898, 0.048336 0.072327 0.115898, 0.033295 0.080383 0.115898, + 0.016973 0.085327 0.115898, 0.016663 -0.083862 0.0957031, 0.032688 -0.07901 0.0957031, 0.047459 -0.071106 0.0957031, + 0.06041 -0.060516 0.0957031, -0.06041 -0.060516 0.0957031, -0.047459 -0.071106 0.0957031, -0.032688 -0.07901 0.0957031, + -0.016663 -0.083862 0.0957031, 0.08744 -0.016602 0.1185, 0.087547 0.016022 0.1185, 0.088997 -0.000579976 0.1185, + 0.087807 0.169495 0.0160181, 0.089157 0.169495 0.00441706, 0.089127 0.169495 -0.00500794, 0.08506 0.1745 -0.0182689, + 0.085266 0.1745 -0.0172689, -0.071846 0.048798 0.0488091, -0.049034 0.071594 0.0715791, -0.037663 0.078125 0.0781331, + 0.019003 0.084656 0.0846631, 0.030853 0.081116 0.0811161, 0.060795 0.061951 0.0619581, -0.06065 -0.059998 0.0599821, + -0.051178 -0.067627 0.0676121, -0.03933 -0.074615 0.0746081, -0.02095 -0.081421 0.0814211, 0.007482 -0.083405 0.0834121, + 0.021198 -0.081207 0.0811921, 0.032787 -0.077637 0.0776371, 0.050865 -0.067963 0.0679631, 0.058887 -0.061646 0.0616421, + 0.068069 -0.051605 0.0516171, 0.085197 -0.017548 0.117905, 0.08535 -0.016815 0.118332, 0.085747 -0.014618 0.119583, + 0.085701 -0.014893 0.123497, 0.085037 -0.018311 0.123497, 0.084984 -0.0185549 0.122498, 0.085571 -0.015625 0.122498, + 0.085434 -0.016357 0.122498, 0.085701 -0.014893 0.122498, 0.085571 -0.015625 0.120155, 0.085701 -0.014893 0.120583, + 0.085442 -0.016357 0.119736, 0.084984 -0.0185549 0.118477, 0.086037 -0.00888097 0.0981901, 0.074997 -0.041687 0.0969921, + 0.064682 -0.055542 0.0960241, -0.064682 -0.055542 0.0960241, -0.074997 -0.041687 0.0969921, -0.086037 -0.00888097 0.0981901, + 0.087601 -0.015625 0.120155, 0.087601 -0.015625 0.122498, 0.087776 -0.014648 0.119583, 0.087242 -0.017548 0.117905, + 0.087387 -0.016815 0.118317, 0.087463 -0.016449 0.11853, 0.087387 0.168243 -0.0182689, 0.084999 -0.000732005 -0.000695882, + 0.084366 -0.010803 0.00938412, 0.082458 -0.020782 0.0193791, 0.079254 -0.030609 0.0292031, 0.074715 -0.040161 0.0387571, + 0.069855 -0.047852 0.0464401, 0.063984 -0.055176 0.0537641, 0.057083 -0.062012 0.0606041, 0.049118 -0.068237 0.0668181, + 0.038525 -0.074463 0.0730511, 0.026606 -0.079285 0.0778811, 0.013609 -0.082397 0.0809711, 0 -0.083435 0.0820311, + -0.01361 -0.082397 0.0809711, -0.026606 -0.079285 0.0778811, -0.038525 -0.074463 0.0730511, -0.049118 -0.068237 0.0668181, + -0.057083 -0.062012 0.0606041, -0.063984 -0.055176 0.0537641, -0.069855 -0.047852 0.0464401, -0.074715 -0.040161 0.0387571, + -0.079254 -0.030609 0.0292031, -0.082458 -0.020782 0.0193791, -0.084366 -0.010803 0.00938412, + -0.084999 -0.000732005 -0.000695882, -0.084961 -0.00176999 -0.00175688, -0.084923 -0.00283799 -0.00281788, + -0.08429 -0.012909 0.00725812, -0.082382 -0.022919 0.0172461, -0.079178 -0.032715 0.0270671, -0.074638 -0.042267 0.0366131, + -0.069786 -0.049957 0.0442921, -0.063919 -0.057281 0.0516131, -0.057022 -0.064117 0.0584451, -0.049065 -0.070313 0.0646591, + -0.038483 -0.076538 0.0708851, -0.026573 -0.08136 0.0757061, -0.013593 -0.084442 0.0787961, 0 -0.08551 0.0798571, + 0.013592 -0.084442 0.0787961, 0.026573 -0.08136 0.0757061, 0.038483 -0.076538 0.0708851, 0.049061 -0.070313 0.0646591, + 0.057022 -0.064117 0.0584451, 0.063919 -0.057281 0.0516131, 0.069786 -0.049957 0.0442921, 0.074638 -0.042267 0.0366131, + 0.079178 -0.032715 0.0270671, 0.082382 -0.022919 0.0172461, 0.08429 -0.012909 0.00725812, 0.084923 -0.00283799 -0.00281788, + 0.084961 -0.00176999 -0.00175688, -0.084358 0.00976601 -0.0111759, -0.082436 0.020142 -0.0215699, + -0.079185 0.030396 -0.0317969, -0.074577 0.040344 -0.0417519, -0.069656 0.048309 -0.0497279, -0.063702 0.055939 -0.0573459, + -0.056671 0.063049 -0.0644609, -0.048519 0.069519 -0.0709459, -0.03809 0.075775 -0.0771869, -0.026333 0.080627 -0.0820469, + -0.013482 0.083771 -0.0851749, 0 0.084839 -0.0862579, 0.013482 0.083771 -0.0851749, 0.026331 0.080627 -0.0820469, + 0.03809 0.075775 -0.0771869, 0.048519 0.069519 -0.0709459, 0.056671 0.063049 -0.0644609, 0.063698 0.055939 -0.0573459, + 0.069656 0.048309 -0.0497279, 0.074577 0.040344 -0.0417519, 0.079185 0.030396 -0.0317969, 0.082436 0.020142 -0.0215699, + 0.084358 0.00976601 -0.0111759, 0.084282 0.007629 -0.0132919, 0.082352 0.018036 -0.0236819, 0.079109 0.028259 -0.0339009, + 0.074501 0.038208 -0.0438539, 0.069588 0.046173 -0.0518259, 0.063633 0.053772 -0.0594369, 0.05661 0.060883 -0.0665509, + 0.048462 0.067352 -0.0730209, 0.038044 0.073608 -0.0792619, 0.026299 0.078461 -0.0841139, 0.013464 0.081573 -0.0872419, + 0 0.082672 -0.0883179, -0.013465 0.081573 -0.0872419, -0.026299 0.078461 -0.0841139, -0.038044 0.073608 -0.0792619, + -0.048466 0.067352 -0.0730209, -0.05661 0.060883 -0.0665509, -0.063633 0.053772 -0.0594369, -0.069588 0.046173 -0.0518259, + -0.074501 0.038208 -0.0438539, -0.079109 0.028259 -0.0339009, -0.082359 0.018036 -0.0236819, -0.084282 0.007629 -0.0132919, + 0.081459 -0.012024 -0.0120079, 0.078003 -0.02121 -0.0211959, 0.077469 -0.030975 -0.0132899, 0.075874 -0.04068 -0.00543987, + 0.074921 -0.044556 -0.00229287, 0.07177 -0.052917 0.00446113, 0.066505 -0.061096 0.0111031, 0.057888 -0.069702 0.0180641, + 0.046532 -0.076965 0.0239371, 0.033447 -0.082031 0.0280381, 0.023848 -0.084259 0.0298501, 0.014294 -0.085693 0.0310191, + 0.004311 -0.086426 0.0316071, -0.005715 -0.086365 0.0315631, -0.016539 -0.085419 0.0308001, -0.027166 -0.083588 0.0292991, + -0.034344 -0.081757 0.0278261, -0.045734 -0.077362 0.0242601, -0.05386 -0.072662 0.0204681, -0.060955 -0.067078 0.0159281, + -0.065948 -0.061798 0.0116571, -0.070023 -0.056061 0.00701314, -0.074623 -0.045654 -0.00140887, + -0.076141 -0.039429 -0.00644487, -0.078003 -0.02121 -0.0211959, -0.081459 -0.012024 -0.0120079, -0.084282 -0.01297 0.00731912, + -0.082352 -0.023041 0.0173741, -0.080246 -0.029907 0.0242401, -0.075035 -0.041534 0.0358921, -0.06617 -0.054657 0.0490001, + -0.059376 -0.061951 0.0562901, -0.051426 -0.068634 0.0629651, -0.039783 -0.075897 0.0702291, -0.032043 -0.079407 0.0737461, + -0.019913 -0.083221 0.0775531, -0.006959 -0.085236 0.0795821, 0.005253 -0.085358 0.0796971, 0.017265 -0.083801 0.0781331, + 0.028334 -0.08078 0.0751191, 0.038834 -0.076355 0.0707091, 0.052219 -0.068024 0.0623701, 0.06324 -0.058014 0.0523611, + 0.071518 -0.047424 0.0417631, 0.076866 -0.037964 0.0323101, 0.080666 -0.028687 0.0230371, 0.081985 -0.024414 0.0187471, + 0.08419 -0.013672 0.00801512, 0.076553 -0.005157 -0.0342099, 0.072182 0.01059 -0.0469549, 0.067619 0.02063 -0.0550769, + 0.057755 0.035187 -0.0668789, 0.052029 0.041321 -0.0718309, 0.045521 0.046936 -0.0763929, 0.03643 0.053009 -0.0812909, + 0.023588 0.058777 -0.0859829, 0.009381 0.062103 -0.0886689, -0.003663 0.062622 -0.0890879, -0.016516 0.060822 -0.0876239, + -0.024788 0.05835 -0.0856399, -0.032551 0.055054 -0.0829619, -0.045528 0.046936 -0.0763849, -0.052891 0.040466 -0.0711519, + -0.059235 0.033386 -0.0654139, -0.066658 0.022369 -0.0564989, -0.072174 0.01062 -0.0469699, -0.076553 -0.00512702 -0.0342139, + -0.083382 0.013367 -0.0190279, -0.078697 0.029266 -0.0349309, -0.0728 0.041199 -0.0468479, -0.064835 0.052399 -0.0580439, + -0.057995 0.059631 -0.0652769, -0.050022 0.066254 -0.0719069, -0.043285 0.07074 -0.0763779, -0.035896 0.074646 -0.0803069, + -0.027386 0.078094 -0.0837549, -0.018276 0.080658 -0.0863189, -0.004058 0.082581 -0.0882259, 0.01039 0.082031 -0.0876769, + 0.018387 0.080627 -0.0862959, 0.026068 0.078522 -0.0841899, 0.040134 0.07251 -0.0781709, 0.050011 0.066254 -0.0719149, + 0.057064 0.060486 -0.0661389, 0.063236 0.05423 -0.0598869, 0.069008 0.046997 -0.0526469, 0.07383 0.039398 -0.0450669, + 0.078705 0.029266 -0.0349159, 0.083382 0.013367 -0.0190199, 0.059528 -0.031219 -0.0311849, 0.056107 -0.017578 -0.0434649, + 0.053116 -0.010986 -0.0493889, 0.049244 -0.00466903 -0.0550769, 0.04924 -0.00466903 -0.0550799, + 0.04924 -0.00466903 -0.0550839, 0.044441 0.00131197 -0.0604549, 0.038704 0.00677497 -0.0653989, 0.029997 0.012848 -0.0708539, + 0.029993 0.012848 -0.0708539, 0.029991 0.012848 -0.0708539, 0.020449 0.017242 -0.0748209, 0.009852 0.02002 -0.0773009, + 0.000162 0.020813 -0.0780259, 8.1e-005 0.020813 -0.0780259, 0 0.020813 -0.0780259, -7.9e-005 0.020813 -0.0780259, + -0.000158 0.020813 -0.0780259, -0.010054 0.019958 -0.0772709, -0.019485 0.017578 -0.0751269, -0.030119 0.012787 -0.0707929, + -0.030123 0.012787 -0.0707929, -0.030128 0.012787 -0.0707859, -0.036877 0.00826997 -0.0667189, + -0.042732 0.00308199 -0.0620729, -0.049191 -0.00460802 -0.0551489, -0.049191 -0.00460802 -0.0551449, + -0.049194 -0.00460802 -0.0551409, -0.056091 -0.017517 -0.0434989, -0.058231 -0.024323 -0.0373949, + -0.059528 -0.031219 -0.0311849, -0.068764 -0.026215 -0.0261919, -0.076889 -0.00711102 -0.0326119, + -0.07354 0.00674398 -0.0438499, -0.067856 0.020172 -0.0547099, -0.059708 0.032776 -0.0649259, -0.053383 0.039978 -0.0707549, + -0.046021 0.046539 -0.0760729, -0.037613 0.052307 -0.0807419, -0.0282 0.057037 -0.0845639, -0.018124 0.060425 -0.0873029, + -0.007429 0.062317 -0.0888519, 0.003537 0.062622 -0.0890959, 0.014372 0.061279 -0.0879969, 0.026155 0.057861 -0.0852279, + 0.03688 0.052734 -0.0810849, 0.046349 0.046295 -0.0758589, 0.054497 0.038818 -0.0698239, 0.06501 0.025146 -0.0587499, + 0.072304 0.010254 -0.0466919, 0.076584 -0.00531001 -0.0340729, 0.068764 -0.026215 -0.0261919, 0.059795 -0.043518 -0.0200979, + 0.059093 -0.04892 -0.0152319, 0.058201 -0.052643 -0.0118799, 0.05735 -0.055023 -0.00973387, 0.054623 -0.060272 -0.00501286, + 0.050381 -0.065674 -0.000156862, 0.044987 -0.070465 0.00415514, 0.035107 -0.076202 0.00932714, 0.034855 -0.076324 0.00942614, + 0.027784 -0.078949 0.0118061, 0.022974 -0.080353 0.0130591, 0.010155 -0.082672 0.0151591, 0 -0.083221 0.0156541, + -1.3e-005 -0.083221 0.0156541, -2.5e-005 -0.083221 0.0156541, -0.010202 -0.082672 0.0151541, -0.021881 -0.080627 0.0133071, + -0.027502 -0.079041 0.0118881, -0.034588 -0.076416 0.00953014, -0.034645 -0.076416 0.00950814, -0.045464 -0.070099 0.00382914, + -0.052494 -0.063232 -0.00234386, -0.057213 -0.055359 -0.00943486, -0.057213 -0.055359 -0.00943587, + -0.058552 -0.051422 -0.0129739, -0.059166 -0.048523 -0.0155909, -0.059986 -0.039886 -0.0233819, + -0.077309 -0.032379 -0.0121489, -0.075211 -0.043457 -0.00318687, -0.07415 -0.04715 -0.000187867, + -0.071365 -0.05368 0.00509513, -0.067467 -0.059845 0.0100901, -0.062527 -0.065552 0.0147071, -0.056637 -0.070679 0.0188581, + -0.050148 -0.075012 0.0223521, -0.042992 -0.078613 0.0252821, -0.034145 -0.081818 0.0278741, -0.0271 -0.083588 0.0293101, + -0.012591 -0.085876 0.0311641, -2.9e-005 -0.086487 0.0316661, 0.012533 -0.085876 0.0311701, 0.028467 -0.083282 0.0290621, + 0.0345 -0.081726 0.0277901, 0.04332 -0.078461 0.0251661, 0.05603 -0.071136 0.0192241, 0.062943 -0.065125 0.0143641, + 0.068542 -0.05835 0.00887414, 0.073601 -0.048706 0.00106313, 0.075081 -0.043976 -0.00277587, 0.076599 -0.037079 -0.00836487, + -0.042118 -0.072327 0.00583914, -0.0485 -0.067383 0.00138614, -0.053581 -0.061676 -0.00374986, 0.053799 -0.061371 -0.00403386, + 0.048809 -0.067108 0.00112814, 0.042507 -0.072083 0.00561614, 0.053104 -0.011017 -0.0493739, 0.056087 -0.017578 -0.0434489, + 0.008191 0.020233 -0.0775069, 0.015954 0.018646 -0.0760729, 0.023264 0.016144 -0.0738139, -0.030117 0.012787 -0.0707929, + -0.029083 0.013367 -0.0713119, -0.022511 0.016449 -0.0740889, -0.015405 0.018799 -0.0762019, -0.007896 0.020294 -0.0775449, + -0.05822 -0.024323 -0.0373989, -0.056072 -0.017548 -0.0434839, -0.04092 0.00488297 -0.0636749, + -0.045368 0.000304978 -0.0595469, 0.040901 0.00488297 -0.0636899, 0.035767 0.00912497 -0.0674969, + -0.026579 -0.079468 0.0122621, -0.017975 -0.081604 0.0141901, -0.009064 -0.082825 0.0153021, -0.060112 -0.037201 -0.0257779, + -0.060097 -0.043335 -0.0202519, -0.059189 -0.049438 -0.0147579, 0.059242 -0.049194 -0.0149919, 0.060104 -0.043182 -0.0204109, + 0.060104 -0.03714 -0.0258559, 0.009179 -0.082825 0.0152941, 0.018227 -0.081573 0.0141521, 0.026949 -0.079346 0.0121671, + 0 -0.055878 -0.0218239, 0 -0.070496 -0.00377286, 0 -0.077118 0.00578014, 0.048809 -0.067108 0.00112714, + 0.053799 -0.061371 -0.00403486, 0.059242 -0.049194 -0.0149929, 0.045078 -0.034546 -0.0345309, 0.030258 -0.036957 -0.0369419, + 0.015192 -0.038422 -0.0383949, 0 -0.03891 -0.0388789, 0 -0.041382 -0.0366129, 0 -0.043793 -0.0343089, + 8.6e-005 -0.043854 -0.0342559, 0.000185 -0.043945 -0.0341909, 0.001153 -0.041962 -0.0360339, 0.001303 -0.041656 -0.0363199, + 0.002915 -0.041626 -0.0362969, 0.003488 -0.041626 -0.0362849, 0.002849 -0.042908 -0.0350799, 0.001816 -0.045013 -0.0331119, + 0.002499 -0.045441 -0.0326579, 0.004632 -0.046814 -0.0312119, 0.007545 -0.048615 -0.0292019, 0.00635 -0.048676 -0.0292419, + 0.005272 -0.048706 -0.0292759, 0.002669 -0.047058 -0.0310629, 0.001248 -0.046143 -0.0320219, 0.000626 -0.047363 -0.0308149, + 0 -0.048584 -0.0295829, 0 -0.050507 -0.0276179, 0 -0.052399 -0.0256309, 0.00045 -0.052521 -0.0255049, + 0.000453 -0.052521 -0.0255029, 0.000456 -0.052521 -0.0255029, 0.001742 -0.053101 -0.0248339, 0.002737 -0.054169 -0.0236739, + 0.004184 -0.056793 -0.0206949, 0.00541 -0.059021 -0.0181349, 0.003543 -0.059052 -0.0181669, 0.001765 -0.059052 -0.0181869, + 0.001687 -0.058929 -0.0183489, 0.015559 -0.051575 -0.0254629, 0.017241 -0.051483 -0.0253749, 0.02276 -0.051117 -0.0250279, + 0.023205 -0.05191 -0.0241389, 0.023663 -0.052734 -0.0232199, 0.021786 -0.052856 -0.0233569, 0.019978 -0.052979 -0.0234789, + 0.022572 -0.057648 -0.0180799, 0.022783 -0.058044 -0.0176329, 0.02072 -0.058167 -0.0177669, 0.019215 -0.058258 -0.0178569, + 0.017551 -0.055237 -0.0213529, 0.023632 -0.051056 -0.0249649, 0.025328 -0.050903 -0.0248359, 0.027075 -0.050751 -0.0246909, + 0.027843 -0.052155 -0.0231169, 0.030792 -0.057404 -0.0169789, 0.029032 -0.057556 -0.0171429, 0.0273 -0.057709 -0.0172939, + 0.023897 -0.051544 -0.0244199, 0.015772 -0.057983 -0.0185409, 0.015336 -0.058197 -0.0183489, 0.014857 -0.05835 -0.0182129, + 0.013826 -0.058502 -0.0181309, 0.010743 -0.058624 -0.0182549, 0.007331 -0.058746 -0.0183619, 0.005599 -0.055573 -0.0219879, + 0.003686 -0.052032 -0.0259059, 0.005347 -0.052002 -0.0258639, 0.011492 -0.051758 -0.0256499, 0.013343 -0.052002 -0.0252299, + 0.014364 -0.052521 -0.0245899, 0.015085 -0.053406 -0.0235959, 0.015173 -0.054413 -0.0224929, 0.015035 -0.054688 -0.0222029, + 0.014779 -0.054932 -0.0219669, 0.014303 -0.055176 -0.0217629, 0.01537 -0.055634 -0.0211519, 0.01622 -0.056305 -0.0203529, + 0.016468 -0.056702 -0.0198729, 0.016474 -0.057159 -0.0193709, 0.01623 -0.057617 -0.0189039, 0.017698 -0.045868 -0.0310169, + 0.01737 -0.045135 -0.0317799, 0.017065 -0.044434 -0.0324899, 0.016981 -0.043152 -0.0337599, 0.017609 -0.042084 -0.0346909, + 0.018965 -0.041168 -0.0353699, 0.020523 -0.040771 -0.0354879, 0.021196 -0.040741 -0.0354349, 0.021879 -0.04068 -0.0353779, + 0.023491 -0.040741 -0.0350379, 0.024675 -0.041077 -0.0344889, 0.025631 -0.041687 -0.0337369, 0.026321 -0.042633 -0.0327339, + 0.026632 -0.043335 -0.0320209, 0.026955 -0.044067 -0.0312709, 0.027065 -0.045288 -0.0300919, 0.026403 -0.046448 -0.0290809, + 0.025124 -0.047333 -0.0284399, 0.02347 -0.04776 -0.0283029, 0.022785 -0.047821 -0.0283579, 0.022114 -0.047882 -0.0284119, + 0.020086 -0.047668 -0.0288909, 0.018604 -0.046967 -0.0297999, 0.009379 -0.045898 -0.0317879, 0.009123 -0.045898 -0.0318069, + 0.008867 -0.045898 -0.0318389, 0.008874 -0.045898 -0.0318239, 0.00888 -0.045929 -0.0318089, 0.009335 -0.046539 -0.0311659, + 0.010062 -0.046997 -0.0306569, 0.010825 -0.047211 -0.0303759, 0.011645 -0.047241 -0.0302579, 0.014427 -0.047119 -0.0301299, + 0.017372 -0.046936 -0.0299699, 0.017637 -0.047546 -0.0293499, 0.017914 -0.048157 -0.0287019, 0.016058 -0.048248 -0.0288119, + 0.011646 -0.048462 -0.0290369, 0.01022 -0.04837 -0.0292609, 0.008928 -0.047943 -0.0297809, 0.007901 -0.047241 -0.0305559, + 0.007247 -0.046356 -0.0315089, 0.0068 -0.045319 -0.0325429, 0.006405 -0.044434 -0.0334469, 0.00632 -0.043427 -0.0344349, + 0.006705 -0.042664 -0.0351559, 0.00737 -0.042053 -0.0356829, 0.008224 -0.041656 -0.0360149, 0.009378 -0.041473 -0.0361289, + 0.011719 -0.041351 -0.0360339, 0.012518 -0.041321 -0.0359949, 0.013741 -0.041443 -0.0357629, 0.014787 -0.041901 -0.0352059, + 0.015397 -0.042542 -0.0345189, 0.015635 -0.043335 -0.0337369, 0.015395 -0.044281 -0.0328449, 0.014578 -0.045135 -0.0320929, + 0.01337 -0.045654 -0.0316939, 0.01252 -0.045776 -0.0316519, 0.011179 -0.045837 -0.0317129, 0.010842 -0.054779 -0.0225219, + 0.011383 -0.054657 -0.0225979, 0.011614 -0.054535 -0.0227109, 0.011794 -0.054382 -0.0228649, 0.011909 -0.054169 -0.0230579, + 0.011938 -0.053986 -0.0232699, 0.011798 -0.05368 -0.0236129, 0.011614 -0.053528 -0.0237869, 0.011382 -0.053406 -0.0239159, + 0.010847 -0.053345 -0.0240359, 0.009399 -0.053406 -0.0240969, 0.008047 -0.053436 -0.0241529, 0.00841 -0.054138 -0.0233779, + 0.008776 -0.05484 -0.0225959, 0.009787 -0.05481 -0.0225619, 0.01219 -0.057312 -0.0196249, 0.012609 -0.05722 -0.0196879, + 0.012785 -0.057129 -0.0197749, 0.012921 -0.057007 -0.0198939, 0.013003 -0.056885 -0.0200309, 0.013032 -0.056732 -0.0201799, + 0.013004 -0.05661 -0.0203319, 0.012922 -0.056488 -0.0204769, 0.012784 -0.056366 -0.0206089, 0.012607 -0.056274 -0.0207099, + 0.012188 -0.056244 -0.0208049, 0.010866 -0.056274 -0.0208589, 0.009604 -0.056335 -0.0209059, 0.009888 -0.056854 -0.0203039, + 0.010173 -0.057373 -0.0196989, 0.011165 -0.057343 -0.0196649, 0.022114 -0.046631 -0.0296549, 0.022785 -0.04657 -0.0296039, + 0.02347 -0.046509 -0.0295509, 0.024191 -0.046326 -0.0295929, 0.024784 -0.04599 -0.0298209, 0.025213 -0.045471 -0.0302539, + 0.025324 -0.045044 -0.0306399, 0.025242 -0.044617 -0.0310749, 0.024918 -0.043884 -0.0318299, 0.024611 -0.043182 -0.0325429, + 0.024113 -0.042542 -0.0332339, 0.02331 -0.042114 -0.0337789, 0.021879 -0.041962 -0.0341719, 0.021194 -0.042023 -0.0342289, + 0.020523 -0.042084 -0.0342859, 0.019978 -0.042175 -0.0342709, 0.019495 -0.042389 -0.0341529, 0.01898 -0.042786 -0.0338479, + 0.01869 -0.043274 -0.0333979, 0.018732 -0.043945 -0.0327419, 0.019039 -0.044647 -0.0320319, 0.019367 -0.04538 -0.0312709, + 0.019968 -0.046082 -0.0304849, 0.020931 -0.046539 -0.0299209, 0.008169 -0.044373 -0.0333899, 0.008181 -0.044373 -0.0333899, + 0.008193 -0.044373 -0.0333899, 0.008201 -0.044403 -0.0333709, 0.008209 -0.044403 -0.0333519, 0.008212 -0.044403 -0.0333519, + 0.008782 -0.044708 -0.0330279, 0.009379 -0.044769 -0.0329169, 0.010863 -0.044708 -0.0328599, 0.012519 -0.044647 -0.0327839, + 0.01301 -0.044556 -0.0328179, 0.013442 -0.044373 -0.0329629, 0.013724 -0.044128 -0.0331499, 0.01392 -0.043884 -0.0333899, + 0.014012 -0.043579 -0.0336609, 0.013996 -0.043304 -0.0339429, 0.013728 -0.042877 -0.0343929, 0.013206 -0.042572 -0.0347289, + 0.012519 -0.04248 -0.0348779, 0.010852 -0.042572 -0.0349539, 0.009378 -0.042633 -0.0350109, 0.008816 -0.042725 -0.0349579, + 0.008219 -0.04306 -0.0346719, 0.007931 -0.043457 -0.0342939, 0.007908 -0.043976 -0.0338129, -0.006591 -0.052673 -0.0250719, + -0.006601 -0.052673 -0.0250639, -0.007197 -0.053131 -0.0245589, -0.007544 -0.05365 -0.0239679, -0.007625 -0.054199 -0.0233839, + -0.00747 -0.054718 -0.0228139, -0.006561 -0.056458 -0.0209659, -0.005198 -0.059021 -0.0181389, -0.003265 -0.059052 -0.0181709, + -0.001425 -0.059052 -0.0181879, -0.002807 -0.056732 -0.0208239, -0.003923 -0.05481 -0.0229149, -0.004027 -0.054565 -0.0231719, + -0.004069 -0.054321 -0.0234389, -0.004027 -0.054138 -0.0236449, -0.003896 -0.053986 -0.0238249, + -0.003673 -0.053833 -0.0239749, -0.003408 -0.053772 -0.0240629, -0.002522 -0.053741 -0.0241169, + -0.001699 -0.053925 -0.0239429, -0.001042 -0.054291 -0.0235789, -0.000605 -0.054779 -0.0230479, + -0.000303 -0.055328 -0.0224379, -0.026579 -0.079468 0.0122631, -0.045078 -0.034546 -0.0345309, -0.030258 -0.036957 -0.0369419, + -0.015191 -0.038422 -0.0383949, -0.001971 -0.04245 -0.0355569, -0.003149 -0.041626 -0.0362929, -0.003483 -0.041626 -0.0362849, + -0.005421 -0.041595 -0.0362429, -0.00313 -0.043182 -0.0348239, -0.000381 -0.045074 -0.0330959, -0.000571 -0.045441 -0.0327259, + -0.0015 -0.047272 -0.0309009, -0.00228 -0.048767 -0.0293519, -0.001073 -0.048798 -0.0293709, -0.000103 -0.048798 -0.0293789, + -5.1e-005 -0.048706 -0.0294839, -0.002103 -0.052063 -0.0259249, -0.003927 -0.052094 -0.0258269, + -0.006579 -0.052673 -0.0250759, -0.015566 -0.058502 -0.0179879, -0.016094 -0.058685 -0.0177229, -0.016457 -0.05899 -0.0173319, + -0.016594 -0.059387 -0.0168649, -0.016485 -0.059784 -0.0164129, -0.016088 -0.060211 -0.0159859, + -0.015471 -0.060486 -0.0157319, -0.014924 -0.060547 -0.0156879, -0.01437 -0.060516 -0.0157879, -0.01384 -0.060333 -0.0160559, + -0.013483 -0.060028 -0.0164469, -0.013349 -0.059601 -0.0169159, -0.013458 -0.059204 -0.0173659, + -0.013877 -0.058807 -0.0178049, -0.014524 -0.058533 -0.0180549, -0.015041 -0.058441 -0.0180849, + -0.007347 -0.060699 -0.0160809, -0.006873 -0.060455 -0.0163729, -0.006587 -0.06015 -0.0167769, -0.006529 -0.059723 -0.0172499, + -0.006708 -0.059357 -0.0176869, -0.007159 -0.05899 -0.0180839, -0.007793 -0.058746 -0.0183029, -0.008331 -0.058716 -0.0183179, + -0.008867 -0.058807 -0.0181899, -0.009339 -0.059021 -0.0179019, -0.009629 -0.059357 -0.0174979, -0.00969 -0.059753 -0.0170269, + -0.009513 -0.06015 -0.0165899, -0.009119 -0.060486 -0.0162259, -0.008565 -0.060699 -0.0159979, -0.007954 -0.060791 -0.0159459, + -0.009098 -0.058685 -0.0183069, -0.008688 -0.053223 -0.0243529, -0.00859 -0.05188 -0.0257589, -0.0102 -0.051819 -0.0256999, + -0.011953 -0.051758 -0.0256269, -0.011953 -0.052551 -0.0247749, -0.011954 -0.053406 -0.0238819, + -0.013609 -0.053345 -0.0238089, -0.015368 -0.053253 -0.0237259, -0.015948 -0.052582 -0.0243639, + -0.016886 -0.051514 -0.0253889, -0.017897 -0.051453 -0.0253329, -0.02047 -0.05127 -0.0251769, -0.016741 -0.055511 -0.0211409, + -0.014037 -0.058502 -0.0181159, -0.010764 -0.058624 -0.0182499, -0.039852 -0.048859 -0.0235249, + -0.039612 -0.048828 -0.0236449, -0.036873 -0.048584 -0.0246449, -0.034214 -0.04892 -0.0250069, -0.032806 -0.0495 -0.0247779, + -0.032215 -0.049988 -0.0244349, -0.031799 -0.050568 -0.0239329, -0.03166 -0.051361 -0.0231799, -0.031841 -0.05188 -0.0225999, + -0.032528 -0.052521 -0.0218049, -0.034058 -0.053345 -0.0205919, -0.035591 -0.054199 -0.0193649, + -0.036888 -0.055298 -0.0178739, -0.037315 -0.056335 -0.0166659, -0.037201 -0.057617 -0.0153089, + -0.035847 -0.059448 -0.0136049, -0.03331 -0.060791 -0.0126689, -0.028591 -0.061523 -0.0127689, -0.024002 -0.06073 -0.0144209, + -0.023874 -0.060669 -0.0144949, -0.024523 -0.059326 -0.0159409, -0.02515 -0.057983 -0.0173319, -0.025381 -0.058136 -0.0171449, + -0.026812 -0.058716 -0.0162579, -0.028429 -0.05899 -0.0156909, -0.031078 -0.058746 -0.0154529, -0.032112 -0.058289 -0.0157349, + -0.032494 -0.057983 -0.0160219, -0.032745 -0.057587 -0.0163989, -0.032803 -0.056976 -0.0170569, + -0.032574 -0.056549 -0.0175569, -0.032166 -0.056213 -0.0179839, -0.030544 -0.055359 -0.0192509, + -0.028915 -0.054474 -0.0205119, -0.027725 -0.053497 -0.0217379, -0.027264 -0.052734 -0.0226019, -0.027054 -0.05188 -0.0235329, + -0.027245 -0.050629 -0.0247839, -0.028265 -0.048981 -0.0262429, -0.030115 -0.047455 -0.0273629, + -0.032448 -0.046387 -0.0278759, -0.035183 -0.045807 -0.0277389, -0.041138 -0.046021 -0.0258139, + -0.041367 -0.046051 -0.0257029, -0.040604 -0.047485 -0.0246139, -0.022169 -0.051147 -0.0250639, -0.02396 -0.051025 -0.0249349, + -0.02581 -0.050873 -0.0247879, -0.024811 -0.052917 -0.0228499, -0.023071 -0.056396 -0.0194049, -0.024519 -0.056274 -0.0193059, + -0.025997 -0.056152 -0.0191959, -0.025547 -0.057007 -0.0183389, -0.025091 -0.057892 -0.0174599, + -0.020721 -0.058167 -0.0177589, -0.016104 -0.058411 -0.0180189, -0.016481 -0.057587 -0.0189079, -0.01685 -0.056763 -0.0197699, + -0.018038 -0.056702 -0.0197069, -0.019258 -0.056641 -0.0196399, -0.019629 -0.055939 -0.0203399, -0.012526 -0.04718 -0.0302489, + -0.012083 -0.048035 -0.0294229, -0.011869 -0.048462 -0.0290219, -0.010195 -0.048523 -0.0290969, + -0.004911 -0.048706 -0.0292849, -0.003052 -0.048737 -0.0293349, -0.003324 -0.048126 -0.0299529, + -0.003592 -0.047516 -0.0305599, -0.004921 -0.047485 -0.0305249, -0.006499 -0.047424 -0.0304789, + -0.007587 -0.045349 -0.0324749, -0.009597 -0.041443 -0.0361179, -0.010596 -0.041412 -0.0360789, + -0.012006 -0.041351 -0.0360179, -0.011528 -0.042328 -0.0351099, -0.009084 -0.047333 -0.0303899, + -0.010118 -0.047302 -0.0303519, -0.012083 -0.054932 -0.0222259, -0.012084 -0.055817 -0.0212799, + -0.012085 -0.056702 -0.0202959, -0.012987 -0.055786 -0.0212329, -0.013876 -0.054871 -0.0221439, + -0.013169 -0.054901 -0.0221789, -0.008227 0.020233 -0.0775069, -0.016027 0.018616 -0.0760499, -0.023367 0.016083 -0.0737759, + 0 -0.025146 -0.0503769, 0 -0.010559 -0.0607759, 0 0.00479097 -0.0700069, -0.01438 -0.061218 -0.0165179, + -0.014388 -0.06192 -0.0172459, -0.014997 -0.061951 -0.0171489, -0.015597 -0.061829 -0.0172289, -0.016102 -0.061554 -0.0174749, + -0.016436 -0.061218 -0.0178529, -0.016542 -0.060822 -0.0182929, -0.016409 -0.060425 -0.0187399, -0.016058 -0.06012 -0.0191169, + -0.015548 -0.059937 -0.0193729, -0.015557 -0.059204 -0.0186809, -0.016594 -0.059387 -0.0168689, -0.01614 -0.06015 -0.0160239, + -0.015619 -0.060425 -0.0157689, -0.014998 -0.060547 -0.0156859, -0.014941 -0.059906 -0.0194699, + -0.014342 -0.060028 -0.0193899, -0.01384 -0.060303 -0.0191459, -0.013508 -0.060638 -0.0187719, -0.0134 -0.061035 -0.0183319, + -0.013531 -0.061432 -0.0178829, -0.013879 -0.061737 -0.0175039, -0.013844 -0.060333 -0.0160539, + -0.013348 -0.059631 -0.0169109, -0.013802 -0.058838 -0.0177539, -0.014321 -0.058594 -0.0180049, + -0.014937 -0.058441 -0.0180869, -0.015034 -0.059906 -0.0194659, -0.014527 -0.059967 -0.0194359, + -0.014008 -0.060181 -0.0192529, -0.013714 -0.060394 -0.0190389, -0.0134 -0.061035 -0.0183369, -0.013878 -0.061707 -0.0175059, + -0.015064 -0.061951 -0.0171489, -0.015706 -0.061768 -0.0172649, -0.016144 -0.061523 -0.0175079, + -0.016542 -0.060822 -0.0182879, -0.007358 -0.061401 -0.0168089, -0.00737 -0.062073 -0.0175379, -0.007957 -0.062164 -0.0174079, + -0.008559 -0.062103 -0.0174619, -0.009087 -0.06189 -0.0176809, -0.009466 -0.061554 -0.0180319, -0.009639 -0.061188 -0.0184609, + -0.009579 -0.060791 -0.0189089, -0.0093 -0.060455 -0.0192989, -0.008844 -0.060242 -0.0195769, -0.008856 -0.05954 -0.0188849, + -0.009691 -0.059753 -0.0170329, -0.009121 -0.060486 -0.0162279, -0.008576 -0.060699 -0.0160009, + -0.008259 -0.060181 -0.0197069, -0.007658 -0.060242 -0.0196549, -0.007133 -0.060455 -0.0194379, + -0.006754 -0.060791 -0.0190889, -0.00658 -0.061157 -0.0186599, -0.006638 -0.061554 -0.0182089, -0.006915 -0.061859 -0.0178179, + -0.006875 -0.060455 -0.0163709, -0.006528 -0.059723 -0.0172439, -0.007099 -0.059021 -0.0180469, + -0.007641 -0.058807 -0.0182719, -0.008261 -0.058716 -0.0183239, -0.008221 -0.060181 -0.0197089, -0.00761 -0.060272 -0.0196439, + -0.007115 -0.060486 -0.0194259, -0.006581 -0.061157 -0.0186669, -0.006914 -0.061859 -0.0178179, + -0.008025 -0.062164 -0.0174059, -0.008673 -0.062073 -0.0174919, -0.009132 -0.061859 -0.0177099, + -0.009638 -0.061188 -0.0184539, -0.009298 -0.060455 -0.0192999, -0.008645 -0.053345 -0.0271399, + -0.008898 -0.056732 -0.0234869, -0.009149 -0.060059 -0.0197659, -0.008845 -0.055328 -0.0220679, + -0.011901 -0.053223 -0.0270119, -0.010201 -0.053284 -0.0270809, -0.010272 -0.051819 -0.0256959, + -0.011902 -0.054871 -0.0252669, -0.011901 -0.054047 -0.0261399, -0.011953 -0.052551 -0.0247729, + -0.015397 -0.054688 -0.0251059, -0.01365 -0.054779 -0.0251899, -0.012112 -0.053406 -0.0238739, -0.016916 -0.052948 -0.0267699, + -0.016157 -0.053833 -0.0259419, -0.016129 -0.052368 -0.0245589, -0.020374 -0.052734 -0.0265669, + -0.018644 -0.052856 -0.0266719, -0.017904 -0.051453 -0.0253309, -0.014009 -0.059906 -0.0195789, -0.015413 -0.05835 -0.0211599, + -0.016016 -0.056335 -0.0203379, -0.011579 -0.059998 -0.0196799, -0.011231 -0.058624 -0.0182319, + -0.012033 -0.058228 -0.0215949, -0.012032 -0.057281 -0.0226439, -0.01203 -0.056335 -0.0236869, -0.012084 -0.055817 -0.0212649, + -0.01298 -0.055786 -0.0212249, -0.013596 -0.056641 -0.0232109, -0.013975 -0.056244 -0.0235999, -0.01322 -0.056274 -0.0236359, + -0.01298 -0.054901 -0.0221859, -0.009066 -0.05896 -0.0210109, -0.011525 -0.059998 -0.0196819, -0.019415 -0.053833 -0.0255429, + -0.019806 -0.052765 -0.0266019, -0.016159 -0.053833 -0.0259439, -0.013606 -0.054779 -0.0251919, + -0.011901 -0.054047 -0.0261459, -0.012032 -0.057281 -0.0226519, 0.019251 -0.059631 -0.0193159, 0.017445 -0.056366 -0.0231089, + 0.015634 -0.053009 -0.0268419, 0.01564 -0.051727 -0.0252949, 0.017887 -0.051422 -0.0253389, 0.022724 -0.052582 -0.0264169, + 0.019182 -0.052826 -0.0266459, 0.023212 -0.05191 -0.0241259, 0.023586 -0.054108 -0.0246889, 0.023155 -0.053345 -0.0255529, + 0.021746 -0.05423 -0.0248199, 0.019901 -0.054352 -0.0249439, 0.02182 -0.052856 -0.0233549, 0.021381 -0.055511 -0.0205749, + 0.022709 -0.059418 -0.0190999, 0.021305 -0.056915 -0.0220389, 0.020981 -0.05954 -0.0192129, 0.021 -0.058136 -0.0177499, + 0.020971 -0.05954 -0.0192129, 0.021296 -0.056885 -0.0220599, 0.020422 -0.054321 -0.0249099, 0.023153 -0.053345 -0.0255579, + 0.019796 -0.052765 -0.0266089, 0.016129 -0.053925 -0.0258289, 0.0273 -0.057709 -0.0172919, 0.027338 -0.059113 -0.0187549, + 0.026089 -0.056854 -0.0213969, 0.023706 -0.05249 -0.0263459, 0.026903 -0.057007 -0.0181389, 0.025354 -0.050903 -0.0248339, + 0.027037 -0.052216 -0.0260809, 0.025373 -0.052368 -0.0262179, 0.03054 -0.056976 -0.0175089, 0.030716 -0.058807 -0.0184559, + 0.028257 -0.054443 -0.0235769, 0.029028 -0.05896 -0.0186099, 0.029047 -0.057556 -0.0171429, 0.029016 -0.05896 -0.0186119, + 0.025364 -0.052368 -0.0262179, -0.036983 -0.048584 -0.0246179, -0.039837 -0.049561 -0.0242769, -0.039825 -0.050262 -0.0250279, + -0.039635 -0.050232 -0.0251219, -0.036991 -0.049988 -0.0260939, -0.034206 -0.050323 -0.0264799, -0.03421 -0.049622 -0.0257429, + -0.040607 -0.047485 -0.0246239, -0.041332 -0.046814 -0.0264259, -0.041294 -0.047546 -0.0271489, -0.040562 -0.04892 -0.0260959, + -0.039825 -0.050262 -0.0250259, -0.035179 -0.046539 -0.0284399, -0.035179 -0.047302 -0.0291419, + -0.041115 -0.047516 -0.0272369, -0.032532 -0.046356 -0.0278819, -0.02833 -0.04892 -0.0263019, -0.027271 -0.051331 -0.0254899, + -0.027296 -0.052063 -0.0261969, -0.027964 -0.050842 -0.0272879, -0.030146 -0.04892 -0.0287609, -0.031343 -0.048279 -0.0291119, + -0.027046 -0.051727 -0.0236909, -0.027281 -0.052795 -0.0225579, -0.027924 -0.053711 -0.0214729, + -0.028934 -0.055145 -0.0212359, -0.028952 -0.055847 -0.0219629, -0.027834 -0.054962 -0.0230899, + -0.027143 -0.053589 -0.0246469, -0.03054 -0.055359 -0.0192549, -0.0322 -0.057617 -0.0194399, -0.030577 -0.056763 -0.0207079, + -0.032524 -0.056488 -0.0176279, -0.032753 -0.056824 -0.0172229, -0.032829 -0.05719 -0.0168039, -0.032501 -0.057953 -0.0160309, + -0.03212 -0.058289 -0.0157389, -0.031084 -0.059479 -0.0161479, -0.03109 -0.060211 -0.0168419, -0.032154 -0.059753 -0.0171379, + -0.032547 -0.059418 -0.0174349, -0.032795 -0.059021 -0.0178129, -0.032883 -0.058624 -0.0182289, + -0.032803 -0.058228 -0.0186599, -0.03257 -0.057892 -0.0190729, -0.032181 -0.056915 -0.0187129, -0.028027 -0.05896 -0.0157989, + -0.025164 -0.058746 -0.0180069, -0.025175 -0.059479 -0.0186819, -0.025345 -0.05957 -0.0185449, -0.028011 -0.060394 -0.0171889, + -0.024513 -0.059357 -0.0159209, -0.023907 -0.061371 -0.0152129, -0.023937 -0.062073 -0.0159309, + -0.024557 -0.060791 -0.0173129, -0.028503 -0.061523 -0.0127849, -0.033302 -0.061493 -0.0134049, + -0.033295 -0.062195 -0.0141409, -0.028509 -0.062897 -0.0142519, -0.024031 -0.062134 -0.0158779, + -0.035789 -0.059509 -0.0135639, -0.036663 -0.058624 -0.0143509, -0.037346 -0.05661 -0.0163539, -0.037106 -0.055664 -0.0174259, + -0.035572 -0.054932 -0.0200709, -0.035557 -0.055664 -0.0207769, -0.037052 -0.057129 -0.0188559, + -0.037292 -0.058075 -0.0177959, -0.037148 -0.059052 -0.0167619, -0.036617 -0.060028 -0.0158119, + -0.035748 -0.060913 -0.0150319, -0.035275 -0.054016 -0.0196189, -0.03249 -0.053986 -0.0232119, -0.034023 -0.05481 -0.0219989, + -0.03204 -0.052124 -0.0222929, -0.031738 -0.051666 -0.0228399, -0.031654 -0.051117 -0.0234029, -0.032173 -0.050018 -0.0244029, + -0.032738 -0.04953 -0.0247499, -0.032703 -0.050934 -0.0262169, -0.032131 -0.051422 -0.0258599, -0.03175 -0.052002 -0.0253829, + -0.031651 -0.052277 -0.0251329, -0.03174 -0.053223 -0.0241319, -0.032509 -0.053253 -0.0225089, -0.036858 -0.049988 -0.0261269, + -0.041145 -0.047821 -0.0269369, -0.027105 -0.053284 -0.0249749, -0.030581 -0.056763 -0.0207039, + -0.032806 -0.058228 -0.0186519, -0.032883 -0.058624 -0.0182169, -0.032528 -0.059418 -0.0174159, -0.03212 -0.059784 -0.0171179, + -0.028385 -0.060425 -0.0170879, -0.026775 -0.060181 -0.0176559, -0.024761 -0.060364 -0.0177669, -0.02861 -0.062927 -0.0142339, + -0.03582 -0.060852 -0.0150789, -0.037159 -0.057373 -0.0185639, -0.036556 -0.056396 -0.0197409, -0.034027 -0.05481 -0.0219969, + -0.031975 -0.053589 -0.0237329, -0.031672 -0.05307 -0.0243109, -0.032173 -0.051392 -0.0258959, -0.032791 -0.050903 -0.0262509, + -0.023991 -0.051025 -0.0249309, -0.022205 -0.052612 -0.0264449, -0.023972 -0.05249 -0.0263199, -0.025736 -0.052338 -0.0261819, + -0.022997 -0.057861 -0.0207939, -0.024364 -0.055115 -0.0235159, -0.024441 -0.05365 -0.0221249, -0.025921 -0.057617 -0.0205879, + -0.025167 -0.057678 -0.0206429, -0.023977 -0.056305 -0.0193439, -0.025053 -0.059265 -0.0189269, + -0.025488 -0.058441 -0.0197599, -0.025543 -0.057037 -0.0183319, -0.016174 -0.059784 -0.0194759, + -0.016943 -0.059753 -0.0194359, -0.022896 -0.059418 -0.0190809, -0.020599 -0.058167 -0.0177669, + -0.016848 -0.056763 -0.0197699, -0.016888 -0.058228 -0.0211489, -0.016413 -0.059265 -0.0200369, -0.01655 -0.057434 -0.0190719, + -0.019295 -0.058075 -0.0210209, -0.018091 -0.058167 -0.0210879, -0.018053 -0.056702 -0.0197069, + -0.020752 -0.055389 -0.0237579, -0.020716 -0.053925 -0.0223769, -0.023958 -0.05249 -0.0263199, -0.020876 -0.055145 -0.0239889, + -0.018082 -0.058167 -0.0210879, -0.02549 -0.058441 -0.0197619, -0.024323 -0.055206 -0.0234319, -0.007445 -0.05542 -0.0235309, + -0.00742 -0.056122 -0.0242499, -0.007574 -0.055573 -0.0248389, -0.007471 -0.055023 -0.0254399, -0.007122 -0.054535 -0.0259949, + -0.006567 -0.054138 -0.0264569, -0.006561 -0.054138 -0.0264609, -0.006576 -0.053406 -0.0257659, -0.007166 -0.05307 -0.0245949, + -0.007521 -0.053589 -0.0240289, -0.007627 -0.054169 -0.0234149, -0.006927 -0.055756 -0.0217129, + -0.005882 -0.059052 -0.0211049, -0.005161 -0.060394 -0.0195999, -0.003312 -0.059052 -0.0181689, + -0.003332 -0.060425 -0.0196319, -0.001502 -0.060455 -0.0196499, -0.003972 -0.056244 -0.0243209, + -0.003684 -0.056732 -0.0237829, -0.002674 -0.056946 -0.0205729, -0.003947 -0.055542 -0.0236189, -0.004079 -0.056 -0.0245839, + -0.004122 -0.055756 -0.0248579, -0.004096 -0.055023 -0.0241489, -0.003671 -0.053833 -0.0239749, + -0.003886 -0.053955 -0.0238339, -0.004025 -0.054138 -0.0236489, -0.004075 -0.055542 -0.0250819, + -0.003927 -0.055359 -0.0252779, -0.003699 -0.055237 -0.0254289, -0.003421 -0.055176 -0.0255199, + -0.003415 -0.054474 -0.0247919, -0.001037 -0.054291 -0.0235729, -0.002536 -0.053741 -0.0241179, -0.00253 -0.055145 -0.0255779, + -0.001675 -0.055328 -0.0253979, -0.000998 -0.055695 -0.0250209, -0.000556 -0.056183 -0.0244829, -0.00058 -0.055481 -0.0237659, + 0.000883 -0.057495 -0.0200159, -0.000278 -0.056702 -0.0239219, 0 -0.05719 -0.0233569, 0.000901 -0.058838 -0.0215129, + 0.001801 -0.060455 -0.0196479, 0.003587 -0.059052 -0.0181669, 0.003568 -0.060425 -0.0196289, 0.005334 -0.060394 -0.0195979, + 0.002687 -0.055603 -0.0250819, 0.003602 -0.057281 -0.0232049, 0.003273 -0.055145 -0.0225729, 0.000442 -0.053223 -0.0261969, + 0.000432 -0.053955 -0.0268899, 0.000433 -0.053955 -0.0268879, 0.001803 -0.054626 -0.0261519, 0.002712 -0.054871 -0.0243779, + 0.001841 -0.053192 -0.0247569, -0.003355 -0.052063 -0.0258919, -0.006554 -0.054108 -0.0264639, -0.003341 -0.053528 -0.0272749, + 0 -0.053833 -0.0270119, 0.00043 -0.053955 -0.0268899, 0.003534 -0.060425 -0.0196299, 0.003862 -0.057739 -0.0226669, + 0.001698 -0.054565 -0.0262319, 0 -0.055542 -0.0251939, 0.000873 -0.058777 -0.0215699, -0.007575 -0.055481 -0.0249309, + -0.007388 -0.054871 -0.0256199, -0.003024 -0.053497 -0.0272979, -0.000279 -0.056702 -0.0239219, + -0.001007 -0.055664 -0.0250279, -0.002516 -0.055145 -0.0255759, -0.003725 -0.055237 -0.0254169, -0.003975 -0.05542 -0.0252299, + -0.004086 -0.055573 -0.0250549, -0.00338 -0.057281 -0.0232139, -0.003296 -0.060425 -0.0196319, -0.007041 -0.056854 -0.0234809, + 0.016468 -0.056702 -0.0198749, 0.015756 -0.058685 -0.0192699, 0.015739 -0.059357 -0.0199969, 0.016157 -0.059052 -0.0203189, + 0.016422 -0.058594 -0.0208019, 0.016417 -0.058136 -0.0212919, 0.016174 -0.057739 -0.0217569, 0.016197 -0.057007 -0.0210549, + 0.015335 -0.058197 -0.0183469, 0.014855 -0.05835 -0.0182109, 0.013826 -0.059204 -0.0188619, 0.013826 -0.059906 -0.0195919, + 0.014838 -0.059753 -0.0196719, 0.015309 -0.05957 -0.0198039, 0.007937 -0.060089 -0.0198059, 0.007368 -0.06012 -0.0198229, + 0.011205 -0.058624 -0.0182379, 0.004538 -0.054932 -0.0257049, 0.003761 -0.053497 -0.0272849, 0.005511 -0.05542 -0.0221689, + 0.007655 -0.05191 -0.0257929, 0.011492 -0.053223 -0.0270329, 0.010196 -0.053284 -0.0270839, 0.004871 -0.053467 -0.0272579, + 0.013067 -0.05191 -0.0253409, 0.015085 -0.053406 -0.0235939, 0.015147 -0.055115 -0.0232089, 0.015121 -0.055847 -0.0239239, + 0.015035 -0.05484 -0.0250069, 0.014324 -0.053955 -0.0259879, 0.013045 -0.053375 -0.0267279, 0.011492 -0.05249 -0.0263419, + 0.015067 -0.054657 -0.0222489, 0.014876 -0.054871 -0.0220389, 0.014286 -0.055359 -0.0219589, 0.014171 -0.05661 -0.0231969, + 0.01451 -0.056488 -0.0232939, 0.014797 -0.056305 -0.0234549, 0.015007 -0.056091 -0.0236699, 0.015378 -0.055634 -0.0211469, + 0.015298 -0.057068 -0.0225729, 0.01476 -0.056793 -0.0229129, 0.01428 -0.05542 -0.0220179, 0.009809 -0.05481 -0.0225599, + 0.010842 -0.056213 -0.0239049, 0.00979 -0.056274 -0.0239429, 0.008739 -0.056305 -0.0239789, 0.008411 -0.054138 -0.0233759, + 0.008355 -0.055573 -0.0247989, 0.007973 -0.05484 -0.0256139, 0.010847 -0.054749 -0.0254939, 0.009411 -0.054779 -0.0255569, + 0.009448 -0.053406 -0.0240959, 0.010842 -0.055481 -0.0232139, 0.011412 -0.056091 -0.0239869, 0.011652 -0.055969 -0.0241029, + 0.011839 -0.055817 -0.0242629, 0.011952 -0.055634 -0.0244479, 0.011992 -0.05542 -0.0246509, 0.011954 -0.055237 -0.0248569, + 0.011843 -0.055084 -0.0250509, 0.011656 -0.054932 -0.0252289, 0.011417 -0.05481 -0.0253659, 0.010847 -0.054047 -0.0247649, + 0.011392 -0.053436 -0.0239119, 0.011621 -0.053528 -0.0237809, 0.011903 -0.053833 -0.0234279, 0.011939 -0.054016 -0.0232329, + 0.011902 -0.054199 -0.0230409, 0.011617 -0.054535 -0.0227129, 0.011387 -0.054657 -0.0225999, 0.010489 -0.057373 -0.0196879, + 0.01219 -0.058746 -0.0210079, 0.011163 -0.058807 -0.0210459, 0.010136 -0.058838 -0.0210819, 0.009832 -0.058289 -0.0217269, + 0.009529 -0.057709 -0.0223669, 0.012188 -0.057617 -0.0222659, 0.010859 -0.057678 -0.0223199, 0.010075 -0.056305 -0.0208889, + 0.01219 -0.058044 -0.0203169, 0.012633 -0.058655 -0.0210719, 0.012821 -0.058563 -0.0211659, 0.012966 -0.058441 -0.0212939, + 0.013054 -0.058289 -0.0214389, 0.013084 -0.058167 -0.0215989, 0.013055 -0.058014 -0.0217629, 0.012967 -0.057892 -0.0219149, + 0.012821 -0.05777 -0.0220549, 0.012633 -0.057678 -0.0221629, 0.012188 -0.056915 -0.0215359, 0.012609 -0.056305 -0.0207099, + 0.012785 -0.056366 -0.0206069, 0.013032 -0.056732 -0.0201819, 0.012785 -0.057129 -0.0197729, 0.015287 -0.057068 -0.0225809, + 0.01475 -0.056793 -0.0229189, 0.014663 -0.056396 -0.0233689, 0.014961 -0.056152 -0.0236089, 0.015035 -0.05484 -0.0250089, + 0.012986 -0.053375 -0.0267509, 0.003765 -0.053497 -0.0272849, 0.005353 -0.056458 -0.0240309, 0.009133 -0.060059 -0.0197699, + 0.014839 -0.059753 -0.0196719, 0.01531 -0.05957 -0.0198059, 0.016417 -0.058136 -0.0212899, 0.008621 -0.056061 -0.0242309, + 0.009377 -0.054779 -0.0255579, 0.011405 -0.05481 -0.0253699, 0.011649 -0.054932 -0.0252319, 0.011992 -0.05545 -0.0246489, + 0.011951 -0.055634 -0.0244459, 0.011649 -0.055969 -0.0241009, 0.011408 -0.056091 -0.0239849, 0.009774 -0.056274 -0.0239449, + 0.009831 -0.058289 -0.0217269, 0.010838 -0.057678 -0.0223199, 0.012631 -0.057678 -0.0221649, 0.01282 -0.05777 -0.0220569, + 0.013055 -0.058014 -0.0217609, 0.012635 -0.058655 -0.0210719, 0.011151 -0.058807 -0.0210459, -0.011833 -0.049835 -0.0304809, + -0.012142 -0.049255 -0.0310589, -0.012451 -0.048645 -0.0316349, -0.012527 -0.04718 -0.0302489, -0.011991 -0.048218 -0.0292489, + -0.003124 -0.05014 -0.0307899, -0.00436 -0.05011 -0.0307579, -0.007162 -0.050018 -0.0306699, -0.011597 -0.048462 -0.0290359, + -0.007426 -0.048615 -0.0292029, -0.003422 -0.048737 -0.0293249, -0.003631 -0.048981 -0.0319419, + -0.003377 -0.049561 -0.0313659, -0.003322 -0.048126 -0.0299489, -0.006536 -0.048889 -0.0318599, + -0.006179 -0.048889 -0.0318719, -0.004036 -0.047485 -0.0305499, -0.009633 -0.042908 -0.0374979, + -0.009299 -0.043549 -0.0368959, -0.007401 -0.045715 -0.0321349, -0.009361 -0.041901 -0.0356939, + -0.010801 -0.041412 -0.0360719, -0.010783 -0.042847 -0.0374529, -0.011931 -0.042816 -0.0374029, + -0.009008 -0.048798 -0.0317749, -0.011218 -0.044281 -0.0360449, -0.011328 -0.042755 -0.0347289, -0.01073 -0.048737 -0.0317079, + -0.009721 -0.047302 -0.0303669, -0.012145 -0.049225 -0.0310649, -0.010665 -0.048737 -0.0317119, + -0.010739 -0.042877 -0.0374529, -0.003379 -0.04953 -0.0313719, -0.001297 -0.046875 -0.0313009, -0.00032 -0.046478 -0.0345269, + -0.001993 -0.049744 -0.0312329, -0.002205 -0.05014 -0.0308109, -0.00014 -0.050171 -0.0308379, -0.002074 -0.05014 -0.0308129, + -0.001192 -0.048798 -0.0293689, 0.001226 -0.047485 -0.0335079, 0.000612 -0.048706 -0.0323179, 0 -0.049896 -0.0311149, + -7e-005 -0.050049 -0.0309749, -5.2e-005 -0.048706 -0.0294819, 0.000624 -0.047363 -0.0308089, 0.005293 -0.050079 -0.0307329, + 0.004211 -0.049408 -0.0314789, 0.001768 -0.047852 -0.0331419, 0.002019 -0.046631 -0.0315039, 0.004541 -0.048248 -0.0297809, + 0.007411 -0.050018 -0.0306629, 0.007157 -0.050018 -0.0306719, 0.007432 -0.048615 -0.0292049, 0.001755 -0.046417 -0.0345229, + 0.00212 -0.046661 -0.0342789, 0.003714 -0.047699 -0.0332069, 0.006835 -0.049652 -0.0310629, 0.006007 -0.047668 -0.0302679, + 0.003617 -0.046173 -0.0319019, 0.003413 -0.043091 -0.0376699, 0.002721 -0.044495 -0.0363619, 0.001816 -0.045013 -0.0331149, + 0.002144 -0.044342 -0.0337409, 0.00263 -0.041656 -0.0363009, 0.001774 -0.043121 -0.0376929, 0.001339 -0.043121 -0.0377009, + 0.000815 -0.042664 -0.0353929, 0.000774 -0.044281 -0.0366249, 0.000208 -0.04541 -0.0355449, -0.002283 -0.042236 -0.0357509, + -0.003148 -0.041626 -0.0362929, -0.003169 -0.043091 -0.0376739, -0.002211 -0.043762 -0.0370749, 0 -0.045288 -0.0356789, + 0.000104 -0.045349 -0.0356139, 9.2e-005 -0.043854 -0.0342519, -0.004285 -0.041626 -0.0362699, -0.004228 -0.04306 -0.0376509, + -0.005287 -0.04303 -0.0376279, -0.00032 -0.046478 -0.0345229, -0.002884 -0.044708 -0.0361399, -0.002907 -0.043335 -0.0346869, + 0.002873 -0.048553 -0.0323939, 0.00276 -0.047089 -0.0338519, 0.000795 -0.04422 -0.0366669, 9.8e-005 -0.045349 -0.0356179, + 0 -0.047607 -0.0334129, 0.000623 -0.048676 -0.0323369, -0.001391 -0.048584 -0.0324249, -0.000643 -0.047119 -0.0338969, + -0.004191 -0.04306 -0.0376509, -6.9e-005 -0.050049 -0.0309769, -0.001081 -0.050171 -0.0308279, 0.022114 -0.048553 -0.0291399, + 0.022114 -0.049255 -0.0298709, 0.020687 -0.049194 -0.0301379, 0.019402 -0.048798 -0.0306949, 0.018389 -0.048157 -0.0314899, + 0.017748 -0.047272 -0.0324479, 0.017723 -0.04657 -0.0317329, 0.018347 -0.046753 -0.0300499, 0.019371 -0.047424 -0.0292449, + 0.02067 -0.047821 -0.0286809, 0.017382 -0.045135 -0.0317549, 0.017117 -0.045837 -0.0339199, 0.017502 -0.046722 -0.0330199, + 0.01709 -0.045135 -0.0332029, 0.017006 -0.044678 -0.0350759, 0.017651 -0.043518 -0.0360909, 0.018913 -0.042664 -0.0367389, + 0.020523 -0.042236 -0.0368799, 0.020523 -0.041504 -0.0361859, 0.01889 -0.041199 -0.0353509, 0.016954 -0.043243 -0.0336649, + 0.021202 -0.040741 -0.0354349, 0.021879 -0.042145 -0.0367659, 0.021202 -0.042175 -0.0368229, 0.021879 -0.041412 -0.0360719, + 0.023308 -0.042175 -0.0364879, 0.024601 -0.042542 -0.0359189, 0.025623 -0.043182 -0.0351139, 0.026272 -0.044098 -0.0341609, + 0.026297 -0.043365 -0.0334469, 0.025667 -0.041748 -0.0337029, 0.024632 -0.041077 -0.0345149, 0.023325 -0.04071 -0.0350909, + 0.026657 -0.044952 -0.0332719, 0.026905 -0.045502 -0.0326959, 0.026638 -0.043365 -0.0320049, 0.02693 -0.0448 -0.0319839, + 0.027014 -0.046692 -0.0315359, 0.026361 -0.047882 -0.0305349, 0.02516 -0.048706 -0.0299189, 0.023634 -0.049133 -0.0297529, + 0.02347 -0.049164 -0.0297639, 0.02347 -0.048462 -0.0290339, 0.02511 -0.047363 -0.0284369, 0.027067 -0.045288 -0.0300959, + 0.022791 -0.049194 -0.0298189, 0.022791 -0.047821 -0.0283579, 0.019772 -0.045929 -0.0306699, 0.020411 -0.046356 -0.0301699, + 0.021219 -0.04657 -0.0298209, 0.022114 -0.047333 -0.0303479, 0.022114 -0.048065 -0.0310419, 0.021202 -0.048035 -0.0312099, + 0.02038 -0.047791 -0.0315649, 0.019728 -0.047394 -0.0320739, 0.019316 -0.046814 -0.0326839, 0.019341 -0.046082 -0.0319789, + 0.018682 -0.04538 -0.0341569, 0.018999 -0.046112 -0.0334209, 0.019051 -0.044678 -0.0320069, 0.019682 -0.042297 -0.0342139, + 0.019018 -0.042725 -0.0338779, 0.018677 -0.043335 -0.0333519, 0.018707 -0.044678 -0.0334509, 0.018623 -0.044769 -0.0347819, + 0.018976 -0.044128 -0.0353279, 0.019659 -0.043671 -0.0356709, 0.020523 -0.043457 -0.0357439, 0.020523 -0.042755 -0.0350149, + 0.021879 -0.043365 -0.0356329, 0.021088 -0.043427 -0.0356979, 0.021202 -0.042023 -0.0342289, 0.024208 -0.042633 -0.0331379, + 0.023575 -0.042236 -0.0336379, 0.022772 -0.041992 -0.0339929, 0.021879 -0.042664 -0.0349009, 0.022787 -0.043396 -0.0354539, + 0.023605 -0.04361 -0.0350909, 0.024252 -0.044037 -0.0345799, 0.02466 -0.044617 -0.0339739, 0.024635 -0.043884 -0.0332599, + 0.024851 -0.043732 -0.0319819, 0.024977 -0.045319 -0.0332409, 0.025293 -0.046021 -0.0325089, 0.024305 -0.046295 -0.0296209, + 0.024961 -0.045837 -0.0299509, 0.025299 -0.045227 -0.0304719, 0.025267 -0.045319 -0.0317899, 0.025293 -0.046021 -0.0325049, + 0.025351 -0.046661 -0.0318869, 0.025005 -0.047272 -0.0313509, 0.024328 -0.04776 -0.0310119, 0.023468 -0.047974 -0.0309369, + 0.02347 -0.047241 -0.0302429, 0.022791 -0.04657 -0.0296039, 0.022791 -0.048035 -0.0309909, 0.025185 -0.048706 -0.0299259, + 0.027025 -0.046661 -0.0315799, 0.026302 -0.044159 -0.0340879, 0.025661 -0.043213 -0.0350719, 0.024687 -0.042572 -0.0358659, + 0.023327 -0.042175 -0.0364839, 0.021198 -0.042175 -0.0368229, 0.018946 -0.042633 -0.0367469, 0.016998 -0.044708 -0.0350489, + 0.018661 -0.04837 -0.0312269, 0.020195 -0.049103 -0.0303099, 0.018993 -0.046082 -0.0334359, 0.018597 -0.044983 -0.0345649, + 0.018677 -0.044586 -0.0349349, 0.019163 -0.043976 -0.0354609, 0.019817 -0.04361 -0.0357089, 0.02174 -0.043365 -0.0356449, + 0.022858 -0.043396 -0.0354309, 0.023769 -0.043701 -0.0349849, 0.024317 -0.044098 -0.0345119, 0.024971 -0.045319 -0.0332569, + 0.02537 -0.04657 -0.0319859, 0.025185 -0.047058 -0.0315419, 0.024902 -0.047363 -0.0312729, 0.024527 -0.047638 -0.0310749, + 0.024035 -0.047852 -0.0309519, 0.022789 -0.048035 -0.0309909, 0.021296 -0.048065 -0.0311829, 0.0205 -0.047852 -0.0314979, + 0.019756 -0.047394 -0.0320429, 0.01095 -0.045837 -0.0317249, 0.009379 -0.047302 -0.0332449, 0.01095 -0.047241 -0.0331799, + 0.01252 -0.04715 -0.0331079, 0.012518 -0.042053 -0.0366899, 0.012518 -0.042786 -0.0373799, 0.014011 -0.042969 -0.0370369, + 0.015129 -0.043701 -0.0362359, 0.015581 -0.044739 -0.0351829, 0.015253 -0.045837 -0.0341489, 0.014773 -0.046356 -0.0336879, + 0.014123 -0.046753 -0.0333479, 0.013352 -0.047028 -0.0331499, 0.01252 -0.046478 -0.0323789, 0.013767 -0.045532 -0.0317749, + 0.014807 -0.044952 -0.0322379, 0.015465 -0.044128 -0.0329699, 0.015627 -0.043213 -0.0338439, 0.015323 -0.042419 -0.0346369, + 0.014632 -0.041809 -0.0353199, 0.013652 -0.041412 -0.0357929, 0.009378 -0.042908 -0.0375099, 0.010948 -0.042847 -0.0374489, + 0.009594 -0.041443 -0.0361209, 0.006433 -0.045135 -0.0341569, 0.00646 -0.045837 -0.0348659, 0.006433 -0.045776 -0.0349349, + 0.006342 -0.045013 -0.0356899, 0.006636 -0.04425 -0.0364069, 0.007276 -0.04361 -0.0369949, 0.008182 -0.043121 -0.0373799, + 0.009378 -0.042175 -0.0368189, 0.008053 -0.041718 -0.0359689, 0.006982 -0.042358 -0.0354229, 0.00637 -0.043243 -0.0345989, + 0.006334 -0.04422 -0.0336529, 0.009379 -0.0466 -0.0325159, 0.009084 -0.047302 -0.0332679, 0.008791 -0.047272 -0.0333059, + 0.008829 -0.04657 -0.0325739, 0.009122 -0.045898 -0.0318069, 0.008722 -0.042755 -0.0349309, 0.008199 -0.04306 -0.0346569, + 0.007912 -0.043518 -0.0342409, 0.007922 -0.044006 -0.0337679, 0.008169 -0.044678 -0.0337029, 0.008169 -0.044983 -0.0340119, + 0.008189 -0.044708 -0.0336839, 0.008447 -0.044556 -0.0331799, 0.008731 -0.044678 -0.0330469, 0.009379 -0.045471 -0.0336269, + 0.009379 -0.046173 -0.0343359, 0.008841 -0.046143 -0.0344279, 0.008374 -0.045959 -0.0346449, 0.00804 -0.045654 -0.0349619, + 0.007886 -0.045288 -0.0353319, 0.007953 -0.04483 -0.0357629, 0.008265 -0.044434 -0.0361249, 0.00877 -0.044159 -0.0363619, + 0.009378 -0.044037 -0.0364299, 0.009378 -0.043335 -0.0357209, 0.010949 -0.046112 -0.0342749, 0.012519 -0.046051 -0.0342029, + 0.010211 -0.044739 -0.0328869, 0.013156 -0.044495 -0.0328559, 0.013672 -0.044189 -0.0331079, 0.01397 -0.043762 -0.0334969, + 0.013994 -0.043304 -0.0339509, 0.013813 -0.042938 -0.0342979, 0.013477 -0.042694 -0.0345919, 0.013028 -0.042511 -0.0347939, + 0.012519 -0.043182 -0.0355869, 0.012519 -0.043915 -0.0362969, 0.01322 -0.044006 -0.0361439, 0.01376 -0.044312 -0.0357819, + 0.014009 -0.0448 -0.0352939, 0.013913 -0.045319 -0.0347979, 0.013689 -0.045593 -0.0345419, 0.013362 -0.045837 -0.0343439, + 0.012959 -0.04599 -0.0342289, 0.012519 -0.045349 -0.0334929, 0.011019 -0.042542 -0.0349459, 0.010481 -0.044006 -0.0363879, + 0.00883 -0.047363 -0.0332179, 0.00881 -0.047302 -0.0332639, 0.008829 -0.0466 -0.0325779, 0.008202 -0.044403 -0.0333709, + 0.008189 -0.044708 -0.0336909, 0.006826 -0.04538 -0.0324819, 0.006879 -0.046814 -0.0339049, 0.007298 -0.04776 -0.0329399, + 0.011646 -0.049164 -0.0297659, 0.011646 -0.049835 -0.0304949, 0.010224 -0.049744 -0.0307179, 0.008945 -0.049316 -0.0312389, + 0.007936 -0.048645 -0.0320029, 0.007272 -0.047058 -0.0322229, 0.007893 -0.047241 -0.0305649, 0.008913 -0.047943 -0.0297889, + 0.010207 -0.04837 -0.0292629, 0.014781 -0.048309 -0.0288829, 0.014745 -0.049713 -0.0303419, 0.017841 -0.04953 -0.0301649, + 0.017334 -0.048401 -0.0313549, 0.017588 -0.048981 -0.0307619, 0.017687 -0.047638 -0.0292339, 0.011645 -0.048706 -0.0316409, + 0.014491 -0.048584 -0.0315089, 0.01451 -0.047119 -0.0301249, 0.009287 -0.046509 -0.0312139, 0.00993 -0.046936 -0.0307269, + 0.010743 -0.04718 -0.0303989, 0.011645 -0.047974 -0.0309509, 0.010727 -0.048645 -0.0317839, 0.009898 -0.04837 -0.0321199, + 0.009244 -0.047943 -0.0326119, 0.008855 -0.046631 -0.0325129, 0.013596 -0.046967 -0.0331919, 0.014476 -0.04657 -0.0335079, + 0.015584 -0.0448 -0.0351259, 0.015431 -0.044128 -0.0357669, 0.014864 -0.043427 -0.0365029, 0.014152 -0.04303 -0.0369719, + 0.013505 -0.042847 -0.0372159, 0.01087 -0.042847 -0.0374529, 0.00698 -0.043823 -0.0367809, 0.006517 -0.044464 -0.0362169, + 0.006328 -0.045227 -0.0354769, 0.007214 -0.047546 -0.0331309, 0.00795 -0.048645 -0.0319879, 0.008981 -0.049347 -0.0312179, + 0.010257 -0.049744 -0.0307079, 0.0146 -0.049713 -0.0303499, 0.017584 -0.04895 -0.0307689, 0.014392 -0.048584 -0.0315129, + 0.010801 -0.048676 -0.0317629, 0.010009 -0.048431 -0.0320589, 0.009282 -0.047974 -0.0325739, 0.009086 -0.047302 -0.0332679, + 0.011279 -0.047211 -0.0331649, 0.012954 -0.043915 -0.0362319, 0.013357 -0.044037 -0.0360789, 0.013758 -0.044312 -0.0357859, + 0.013927 -0.044556 -0.0355449, 0.014019 -0.044922 -0.0351749, 0.013526 -0.045715 -0.0344279, 0.013051 -0.045959 -0.0342479, + 0.01091 -0.046112 -0.0342749, 0.008966 -0.046173 -0.0343929, 0.008579 -0.046051 -0.0345269, 0.008065 -0.045685 -0.0349269, + 0.007881 -0.045227 -0.0353809, 0.007966 -0.0448 -0.0357859, 0.008178 -0.044525 -0.0360569, 0.008492 -0.044281 -0.0362629, + 0.008894 -0.044098 -0.0363919, 0.084328 -0.011871 0.00832112, 0.08242 -0.021851 0.0183121, 0.079216 -0.031677 0.0281351, + 0.074677 -0.041229 0.0376851, 0.069824 -0.048889 0.0453681, 0.06395 -0.056213 0.0526891, 0.057053 -0.063049 0.0595251, + 0.049091 -0.069275 0.0657351, 0.038502 -0.0755 0.0719681, 0.026588 -0.080322 0.0767901, 0.0136 -0.083405 0.0798801, + 0 -0.084473 0.0809481, -0.013601 -0.083405 0.0798801, -0.026588 -0.080322 0.0767901, -0.038506 -0.0755 0.0719681, + -0.049091 -0.069275 0.0657351, -0.057053 -0.063049 0.0595251, -0.063953 -0.056213 0.0526891, -0.069824 -0.048889 0.0453681, + -0.074677 -0.041229 0.0376851, -0.079216 -0.031677 0.0281351, -0.08242 -0.021851 0.0183121, -0.084328 -0.011871 0.00832112, + -0.08432 0.00869798 -0.0122339, -0.082397 0.019104 -0.0226249, -0.079147 0.029327 -0.0328479, -0.074539 0.039276 -0.0428049, + -0.069626 0.047241 -0.0507769, -0.063667 0.054871 -0.0583919, -0.056641 0.061981 -0.0655059, -0.048492 0.068451 -0.0719829, + -0.038067 0.074677 -0.0782239, -0.026316 0.079559 -0.0830839, -0.013474 0.082672 -0.0862049, 0 0.08374 -0.0872879, + 0.013473 0.082672 -0.0862049, 0.026316 0.079559 -0.0830839, 0.038067 0.074677 -0.0782239, 0.048492 0.068451 -0.0719829, + 0.056641 0.061981 -0.0655059, 0.063667 0.054871 -0.0583919, 0.069626 0.047241 -0.0507769, 0.074539 0.039276 -0.0428049, + 0.079147 0.029327 -0.0328479, 0.082397 0.019104 -0.0226249, 0.08432 0.00869798 -0.0122339, 0.080826 -0.022339 -0.00263788, + 0.078926 -0.032532 0.00665313, 0.077789 -0.036621 0.0103711, 0.074318 -0.045441 0.0183871, 0.069016 -0.05426 0.0264341, + 0.060566 -0.063873 0.0352131, 0.049377 -0.072479 0.0431561, 0.03614 -0.079193 0.0493741, 0.026091 -0.08252 0.0524861, + 0.015779 -0.084747 0.0545771, 0.004782 -0.085907 0.0556531, -0.006337 -0.085815 0.0555731, -0.018227 -0.08432 0.0541761, + -0.029604 -0.081482 0.0515211, -0.037064 -0.078827 0.0490261, -0.04858 -0.072998 0.0436131, -0.056618 -0.067322 0.0383801, + -0.063564 -0.060852 0.0324671, -0.072533 -0.048798 0.0214521, -0.077431 -0.037781 0.0114151, -0.079247 -0.031219 0.00546513, + -0.08091 -0.021667 -0.00323888, -0.079971 0.00411998 -0.0266229, -0.075439 0.019928 -0.0409509, -0.069725 0.031769 -0.0516739, + -0.062035 0.042877 -0.0617289, -0.055443 0.050049 -0.0682139, -0.047775 0.05658 -0.0741419, -0.041306 0.061005 -0.0781399, + -0.034225 0.06485 -0.0816349, -0.026087 0.068237 -0.0846939, -0.017395 0.07074 -0.0869669, -0.00386 0.072601 -0.0886539, + 0.009886 0.072052 -0.0881729, 0.017502 0.070709 -0.0869449, 0.024828 0.068665 -0.0850829, 0.038284 0.062744 -0.0797349, + 0.047768 0.05661 -0.0741499, 0.054546 0.050903 -0.0689849, 0.060497 0.044708 -0.0633809, 0.066071 0.037537 -0.0568849, + 0.070724 0.029999 -0.0500719, 0.075447 0.019928 -0.0409359, 0.079971 0.00411998 -0.0266149, -0.067261 -0.014618 -0.0360069, + -0.063885 -0.00323503 -0.0456239, -0.058575 0.00772099 -0.0548629, -0.05122 0.017944 -0.0634989, + -0.045616 0.023743 -0.0683899, -0.039177 0.028992 -0.0728299, -0.031906 0.033569 -0.0766979, -0.023844 0.037323 -0.0798419, + -0.015284 0.039978 -0.0820849, -0.006256 0.041473 -0.0833439, 0.002977 0.041687 -0.0835339, 0.012112 0.040649 -0.0826489, + 0.0221 0.037964 -0.0803909, 0.031277 0.033905 -0.0769809, 0.039463 0.028778 -0.0726549, 0.0466 0.022797 -0.0676119, + 0.055981 0.01178 -0.0582849, 0.062706 -0.000366017 -0.0480459, 0.066933 -0.013123 -0.0372579, 0.068199 -0.040283 -0.0142319, + 0.067085 -0.046448 -0.00900387, 0.065903 -0.05069 -0.00540787, 0.061581 -0.059326 0.00193114, 0.056664 -0.065399 0.00710314, + 0.050507 -0.070801 0.0116901, 0.039089 -0.077393 0.0172961, 0.031141 -0.080322 0.0197981, 0.025721 -0.081818 0.0210611, + 0.011344 -0.08429 0.0231651, -2.7e-005 -0.084869 0.0236591, -0.011396 -0.08429 0.0231591, -0.02449 -0.082092 0.0213091, + -0.030823 -0.080444 0.0198801, -0.038792 -0.077515 0.0174061, -0.045235 -0.07428 0.0146421, -0.051048 -0.070374 0.0113431, + -0.056293 -0.065765 0.00742614, -0.060646 -0.060669 0.00307514, -0.064018 -0.055145 -0.00162386, + -0.066353 -0.049286 -0.00658087, -0.067184 -0.04599 -0.00938887, -0.068649 -0.036133 -0.0177649, + 0.045868 -0.042664 -0.0272269, 0.03056 -0.04184 -0.0325359, 0.015052 -0.040192 -0.0367889, 0.052399 -0.051239 -0.0165419, + 0.045292 -0.050476 -0.0201759, 0.029793 -0.046814 -0.0280689, 0.042557 -0.057587 -0.0137749, 0.027576 -0.051483 -0.0238439, + 0.037449 -0.063599 -0.00835086, 0.023876 -0.055603 -0.0201239, 0.010406 -0.046753 -0.0308669, 0.034595 -0.072052 0.00219814, + 0.030172 -0.068298 -0.00413786, 0.0189 -0.058929 -0.0171149, 0.007809 -0.048676 -0.0291209, 0.024189 -0.075867 0.00564514, + 0.02117 -0.071472 -0.00125086, 0.013003 -0.06134 -0.0149559, 0.005042 -0.050201 -0.0277499, 0.010965 -0.073242 0.000331141, + 0.006588 -0.062714 -0.0136999, 0.00236 -0.051178 -0.0268669, 0.009969 -0.053925 -0.0234889, 0.011324 -0.056702 -0.0203739, + 0.021971 -0.04425 -0.0319789, 0.010861 -0.043701 -0.0338439, -0.045868 -0.042664 -0.0272269, -0.030561 -0.04184 -0.0325359, + -0.015053 -0.040192 -0.0367889, -0.052402 -0.051239 -0.0165389, -0.045296 -0.050507 -0.0201739, + -0.029797 -0.046814 -0.0280669, -0.014185 -0.042328 -0.0348739, -0.042561 -0.057587 -0.0137729, + -0.012597 -0.044586 -0.0328369, -0.037449 -0.063599 -0.00835186, -0.023876 -0.055603 -0.0201239, + -0.010406 -0.046753 -0.0308669, -0.034592 -0.072052 0.00219314, -0.030167 -0.068268 -0.00414186, + -0.018896 -0.058929 -0.0171169, -0.024181 -0.075867 0.00563914, -0.021164 -0.071472 -0.00125586, -0.013 -0.06134 -0.0149579, + -0.005041 -0.050201 -0.0277499, -0.010963 -0.073242 0.000328141, -0.006586 -0.062714 -0.0137019, + -0.00236 -0.051178 -0.0268669, -0.012741 -0.055511 -0.0215379, -0.043659 -0.026947 -0.0413779, -0.029263 -0.032379 -0.0410799, + -0.014636 -0.036713 -0.0399169, -0.04134 -0.019897 -0.0477289, -0.02747 -0.027863 -0.0451429, -0.013442 -0.034729 -0.0417179, + -0.037945 -0.013397 -0.0535849, -0.024866 -0.023529 -0.0490649, -0.011732 -0.032562 -0.0436709, + -0.033264 -0.00756802 -0.0588529, -0.02142 -0.019501 -0.0527079, -0.009624 -0.030396 -0.0456349, + -0.027119 -0.00256302 -0.0633619, -0.017111 -0.015961 -0.0559119, -0.007238 -0.028381 -0.0474549, + -0.022203 0.00863598 -0.0704799, -0.019426 0.00134299 -0.0668869, -0.011986 -0.013123 -0.0584679, + -0.004717 -0.026733 -0.0489649, -0.010278 0.00387598 -0.0691909, -0.006187 -0.01123 -0.0601619, + -0.002232 -0.025574 -0.0499949, 0.010278 0.00387598 -0.0691909, 0.006187 -0.01123 -0.0601619, 0.002232 -0.025574 -0.0499949, + 0.022203 0.00863598 -0.0704799, 0.019426 0.00134299 -0.0668869, 0.011986 -0.013123 -0.0584679, 0.004716 -0.026733 -0.0489649, + 0.027117 -0.00256302 -0.0633619, 0.017111 -0.015961 -0.0559119, 0.007238 -0.028381 -0.0474549, + 0.033264 -0.00756802 -0.0588529, 0.02142 -0.019501 -0.0527079, 0.009624 -0.030396 -0.0456349, 0.037945 -0.013397 -0.0535849, + 0.024866 -0.023529 -0.0490649, 0.011732 -0.032562 -0.0436709, 0.04134 -0.019897 -0.0477289, 0.02747 -0.027863 -0.0451429, + 0.013441 -0.034729 -0.0417179, 0.043659 -0.026947 -0.0413779, 0.029261 -0.032379 -0.0410799, 0.014635 -0.036713 -0.0399169, + -0.014998 -0.061279 -0.0164619, -0.015608 -0.061188 -0.0165649, -0.016121 -0.060944 -0.0168209, + -0.016459 -0.060547 -0.0171929, -0.016567 -0.06012 -0.0176179, -0.016432 -0.059723 -0.0180399, -0.016077 -0.059357 -0.0183869, + -0.015097 -0.059143 -0.0187339, -0.014627 -0.059174 -0.0187029, -0.01419 -0.059296 -0.0185809, -0.013819 -0.059479 -0.0183769, + -0.013432 -0.059967 -0.0179019, -0.013372 -0.060303 -0.0175799, -0.013451 -0.060608 -0.0172619, + -0.013659 -0.060883 -0.0169729, -0.013979 -0.061127 -0.0167429, -0.014969 -0.060944 -0.0183049, + -0.007956 -0.061523 -0.0167349, -0.008567 -0.061462 -0.0167999, -0.009103 -0.061249 -0.0170209, + -0.009487 -0.060913 -0.0173629, -0.009664 -0.060486 -0.0177729, -0.009604 -0.060059 -0.0181979, + -0.009321 -0.059723 -0.0185619, -0.008413 -0.059387 -0.0189479, -0.00795 -0.059387 -0.0189459, -0.007504 -0.059479 -0.0188519, + -0.007114 -0.059662 -0.0186729, -0.006665 -0.06012 -0.0182339, -0.006553 -0.060425 -0.0179209, -0.006575 -0.06073 -0.0176009, + -0.006728 -0.061035 -0.0173049, -0.006997 -0.061279 -0.0170569, -0.008101 -0.061188 -0.0185639, + -0.013869 -0.055267 -0.0246719, -0.010977 -0.056763 -0.0233119, 0.020245 -0.055389 -0.0238019, 0.027521 -0.055634 -0.0224569, + -0.036987 -0.049255 -0.0253329, -0.039631 -0.049866 -0.0247379, -0.041119 -0.04718 -0.0269179, -0.032532 -0.047211 -0.0286879, + -0.030127 -0.048004 -0.0278869, -0.028337 -0.049255 -0.0266359, -0.027069 -0.052338 -0.0242879, + -0.027302 -0.053406 -0.0231989, -0.027943 -0.054413 -0.0221959, -0.032547 -0.05719 -0.0183369, -0.03278 -0.057556 -0.0179669, + -0.032856 -0.057953 -0.0175669, -0.032772 -0.05835 -0.0171659, -0.032528 -0.058746 -0.0167869, -0.032139 -0.059052 -0.0164699, + -0.028017 -0.059692 -0.0164989, -0.02537 -0.058594 -0.0175909, -0.024008 -0.061005 -0.0147259, -0.028507 -0.062225 -0.0135229, + -0.03577 -0.060303 -0.0143839, -0.036636 -0.059448 -0.0152219, -0.037167 -0.058472 -0.0161909, -0.037315 -0.057465 -0.0172019, + -0.037079 -0.056458 -0.0182039, -0.032017 -0.052765 -0.0229019, -0.031715 -0.052246 -0.0234169, + -0.031633 -0.051697 -0.0239699, -0.03178 -0.051147 -0.0245169, -0.032154 -0.050629 -0.0250299, -0.032715 -0.050201 -0.0254479, + -0.033421 -0.049927 -0.0257419, -0.032394 -0.055756 -0.0213809, -0.022511 -0.057098 -0.0216809, -0.01989 -0.058899 -0.0200369, + -0.007599 -0.054901 -0.0241579, -0.007495 -0.054321 -0.0247419, -0.007145 -0.053772 -0.0252759, + -0.006586 -0.053345 -0.0257109, -0.004053 -0.055298 -0.0238799, -0.004051 -0.05484 -0.0243739, -0.003906 -0.054657 -0.0245549, + -0.003685 -0.054535 -0.0246929, -0.002533 -0.054443 -0.0248369, -0.001687 -0.054626 -0.0246539, + -0.001018 -0.054993 -0.0242919, 0.001822 -0.053894 -0.0254459, 0.000445 -0.053192 -0.0261519, -0.006565 -0.053467 -0.0258369, + -0.003111 -0.052734 -0.0265599, 0.000441 -0.053162 -0.0261339, 0.001959 -0.057281 -0.0232319, -0.005942 -0.056458 -0.0239999, + -0.003904 -0.056976 -0.0235269, 0.016441 -0.057434 -0.0205799, 0.016447 -0.057892 -0.0201089, 0.016205 -0.05835 -0.0196589, + 0.015322 -0.058899 -0.0190979, 0.014847 -0.059052 -0.0189499, 0.014343 -0.059143 -0.0188599, 0.013057 -0.052612 -0.0259839, + 0.014343 -0.053284 -0.0253119, 0.015058 -0.054199 -0.0243849, 0.01503 -0.055389 -0.0229609, 0.014816 -0.055603 -0.0227389, + 0.014524 -0.055786 -0.0225679, 0.014775 -0.05603 -0.0221789, 0.015315 -0.056335 -0.0218769, 0.015792 -0.056702 -0.0215239, + 0.0114 -0.05542 -0.0233249, 0.011635 -0.055298 -0.0234449, 0.011818 -0.055115 -0.0236029, 0.011929 -0.054962 -0.0237829, + 0.011967 -0.054749 -0.0239749, 0.01193 -0.054565 -0.0241679, 0.011821 -0.054382 -0.0243469, 0.011639 -0.05423 -0.0245059, + 0.011404 -0.054108 -0.0246259, 0.012622 -0.057983 -0.0204139, 0.012804 -0.057892 -0.0205079, 0.012945 -0.05777 -0.0206319, + 0.01303 -0.057617 -0.0207689, 0.01306 -0.057465 -0.0209179, 0.01303 -0.057312 -0.0210689, 0.012945 -0.05719 -0.0212059, + 0.012803 -0.057068 -0.0213299, 0.012621 -0.056976 -0.0214209, 0.012449 -0.055115 -0.0249629, 0.007999 -0.057098 -0.0231509, + -0.00939 -0.047699 -0.0328479, -0.006713 -0.049622 -0.0311009, 0.002844 -0.047302 -0.0336339, -0.00067 -0.047668 -0.0333519, + 0.020676 -0.048553 -0.0294529, 0.019382 -0.048065 -0.0299239, 0.018362 -0.047333 -0.0306589, 0.016973 -0.043793 -0.0342179, + 0.017626 -0.042725 -0.0353049, 0.0189 -0.041962 -0.0360639, 0.023321 -0.041382 -0.0357479, 0.02462 -0.04187 -0.0352749, + 0.025644 -0.042603 -0.0345339, 0.027035 -0.046143 -0.0309769, 0.026381 -0.047241 -0.0298859, 0.025101 -0.048004 -0.0291209, + 0.021208 -0.047333 -0.0305439, 0.020393 -0.047058 -0.0308399, 0.019751 -0.04657 -0.0313029, 0.018652 -0.043976 -0.0339849, + 0.018995 -0.043396 -0.0345569, 0.019669 -0.042999 -0.0349619, 0.022781 -0.042664 -0.0346979, 0.023594 -0.042969 -0.0344009, + 0.024235 -0.043427 -0.0339389, 0.025328 -0.046021 -0.0312669, 0.024986 -0.0466 -0.0306969, 0.024319 -0.046997 -0.0302979, + 0.0137 -0.042175 -0.0364879, 0.014702 -0.042664 -0.0360149, 0.015372 -0.043365 -0.0353049, 0.015607 -0.044189 -0.0344699, + 0.015372 -0.045044 -0.0336339, 0.014703 -0.045746 -0.0329249, 0.013701 -0.046204 -0.0324519, 0.006344 -0.044067 -0.0350839, + 0.006905 -0.043152 -0.0360069, 0.007994 -0.04248 -0.0366549, 0.009081 -0.0466 -0.0325389, 0.008804 -0.043457 -0.0356749, + 0.008318 -0.043671 -0.0354459, 0.007993 -0.044006 -0.0351029, 0.007879 -0.044434 -0.0346949, 0.007993 -0.04483 -0.0342899, + 0.008318 -0.045166 -0.0339469, 0.008805 -0.04541 -0.0337139, 0.013093 -0.045227 -0.0335309, 0.013579 -0.044983 -0.0337599, + 0.013905 -0.044647 -0.0341069, 0.014019 -0.04425 -0.0345119, 0.013905 -0.043823 -0.0349199, 0.013579 -0.043488 -0.0352629, + 0.013093 -0.043243 -0.0354919, 0.007911 -0.047882 -0.0312179, 0.008927 -0.048615 -0.0304849, 0.010215 -0.049072 -0.0300159, + 0.010734 -0.047943 -0.0311069, 0.009913 -0.047638 -0.0314059, 0.009266 -0.04718 -0.0318739, 0.012324 -0.046448 -0.0338439, + -0.053127 -0.062195 -0.00329186, -0.050175 -0.065491 -0.000306862, -0.04726 -0.068329 0.00225214, + -0.043591 -0.071198 0.00481314, 0.043369 -0.071411 0.00500114, 0.048496 -0.067352 0.00135114, 0.048923 -0.066956 0.00100814, + 0.053463 -0.061737 -0.00368486, 0.053883 -0.061218 -0.00416486, 0.05735 -0.055023 -0.00973186, 0.012073 0.01944 -0.0767899, + 0.019609 0.017395 -0.0749439, 0.021715 0.016663 -0.0742949, 0.018627 0.017731 -0.0752489, 0.011856 0.01947 -0.0768279, + 0.015242 0.018616 -0.0760349, 0.00897 0.020081 -0.0773619, -0.018957 0.017609 -0.0751499, -0.01165 0.019531 -0.0768739, + -0.00899 0.02005 -0.0773469, -0.012286 0.019409 -0.0767589, -0.017584 0.018066 -0.0755539, -0.020687 0.017059 -0.0746309, + -0.025402 0.014923 -0.0727159, -0.035522 0.00881998 -0.0672299, -0.043144 0.00259397 -0.0616109, + -0.043278 0.00244097 -0.0614889, -0.042141 0.00363199 -0.0625419, -0.039711 0.00576798 -0.0644679, + 0.041969 0.00366197 -0.0625879, 0.039379 0.00613398 -0.0648189, 0.037994 0.00729398 -0.0658419, + -0.034283 -0.076538 0.00963214, -0.058594 -0.051239 -0.0131549, -0.057903 -0.053284 -0.0112949, 0.058296 -0.052124 -0.0123619, + 0.057823 -0.053558 -0.0110479, 0.057587 -0.054291 -0.0103909, 0.05843 -0.051697 -0.0127379, 0.057777 -0.053833 -0.0108069, + 0.057564 -0.054443 -0.0102699, 0.033798 -0.076721 0.00978214, 0.000669 -0.042938 -0.0351099, 0.002109 -0.041656 -0.0363079, + 0.003168 -0.042267 -0.0356829, 0.003328 -0.041962 -0.0359839, 0.002332 -0.043976 -0.0340959, 0.002591 -0.043457 -0.0345879, + 0.002074 -0.044495 -0.0336039, 0.003566 -0.046112 -0.0319329, 0.003971 -0.047882 -0.0301699, 0.02 -0.0513 -0.0252019, + 0.027458 -0.051453 -0.0239029, 0.025599 -0.054626 -0.0208569, 0.026449 -0.056152 -0.0190749, 0.008419 -0.05188 -0.0257569, + 0.013037 -0.04718 -0.0301929, 0.0159 -0.047028 -0.0300499, 0.013851 -0.04837 -0.0289249, 0.015516 -0.042938 -0.0341259, + -0.000986 -0.043121 -0.0349309, -0.000493 -0.043457 -0.0346219, -0.000247 -0.04364 -0.0344659, -0.00256 -0.042053 -0.0359229, + -0.004275 -0.042389 -0.0355339, -0.003703 -0.042786 -0.0351789, -0.001756 -0.044128 -0.0339579, -0.002443 -0.04364 -0.0343929, + -0.002786 -0.043427 -0.0346069, -0.001068 -0.044586 -0.0335269, -0.001412 -0.044342 -0.0337449, -0.000725 -0.04483 -0.0333099, + -0.000553 -0.044952 -0.0332029, -0.001035 -0.046356 -0.0318129, -0.001677 -0.048767 -0.0293619, + -0.001052 -0.052246 -0.0257779, -0.003015 -0.052094 -0.0258769, -0.008893 -0.055939 -0.0213299, + -0.018606 -0.053406 -0.0231589, -0.019537 -0.052338 -0.0241679, -0.017673 -0.054474 -0.0221499, -0.01539 -0.057007 -0.0196289, + -0.016066 -0.056274 -0.0203839, -0.012401 -0.058563 -0.0181829, -0.027149 -0.05127 -0.0241579, -0.025311 -0.05188 -0.0238189, + -0.023941 -0.054657 -0.0211279, -0.023506 -0.055511 -0.0202669, -0.022905 -0.058014 -0.0176109, + -0.018412 -0.058289 -0.0178889, -0.017258 -0.05835 -0.0179539, -0.020899 -0.053558 -0.0227009, -0.020264 -0.054749 -0.0215209, + -0.021534 -0.052368 -0.0238819, -0.007553 -0.048615 -0.0291899, -0.008874 -0.048584 -0.0291439, + -0.008213 -0.048584 -0.0291669, -0.007883 -0.048615 -0.0291789, -0.006232 -0.048676 -0.0292379, + -0.003982 -0.048737 -0.0293099, -0.007043 -0.046387 -0.0314769, -0.008592 -0.043396 -0.0342979, + -0.009094 -0.042419 -0.0352059, -0.011766 -0.04184 -0.0355639, -0.010305 -0.04483 -0.0327489, -0.010917 -0.043579 -0.0339319, + -0.010612 -0.04422 -0.0333399, -0.009694 -0.046082 -0.0315699, -0.009389 -0.046722 -0.0309809, -0.011323 -0.047241 -0.0302999, + -0.016539 -0.053375 -0.0263579, -0.016348 -0.053619 -0.0261519, -0.012753 -0.05484 -0.0252289, -0.012815 -0.057434 -0.0224019, + 0.020597 -0.055634 -0.0235019, 0.02025 -0.054993 -0.0242229, -0.023659 -0.056519 -0.0221139, -0.023329 -0.05719 -0.0214539, + -0.025028 -0.053772 -0.0248069, -0.024675 -0.054474 -0.0241199, -0.003676 -0.056763 -0.0237669, + -0.002441 -0.058868 -0.0214329, 0.010308 -0.056244 -0.0239239, -0.010114 -0.046539 -0.0339129, -0.009562 -0.047668 -0.0328449, + -0.009285 -0.048218 -0.0323099, -0.010666 -0.04541 -0.0349809, 0.004798 -0.04837 -0.0324549, 0.002238 -0.045471 -0.0354419, + -0.001602 -0.045593 -0.0353319, -0.002243 -0.045166 -0.0357359, -0.004086 -0.043884 -0.0368839, + -0.004686 -0.043457 -0.0372579, 0.015862 -0.048492 -0.0314349, 0.013019 -0.048645 -0.0315779, 0.010329 -0.047241 -0.0332069, + 0.011714 -0.046082 -0.0342409] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 3429 + 0.372286 0.00175664 -0.928116, 0.465493 -0.00170026 -0.88505, 0.558196 0.00171572 -0.829707, 0.651007 0.000565645 -0.759071, + 0.706638 0.00141363 -0.707574, 0.981153 0.00669829 -0.193115, 0.968792 0.00594452 -0.247804, 0.977817 0.00103872 -0.209458, + 0.979436 0.000388551 -0.201753, 0.980993 -0.000240421 -0.194042, 0.929722 0.00587571 -0.368214, + 0.818114 0.000883849 -0.575056, 0.848427 0.00126359 -0.529311, 0.978085 7.88936e-005 -0.208207, + 0.97792 3.57084e-005 -0.208979, 0.975797 0.000199847 -0.21868, 0.963588 0.00220697 -0.267381, 0.756021 0.000464524 -0.654547, + 0.990978 0.00806561 -0.133781, 0.999875 0.0157742 -0.00141817, 0.985826 0.000113661 -0.167769, + 0.974212 -2.22848e-005 -0.225635, 0.974115 0 -0.226053, 0.987934 0 -0.154876, 0.247982 -0.00429738 -0.968755, + 0.192452 0.00178699 -0.981305, 0.980901 -0.000968381 -0.194506, 0.977456 -8.7667e-008 -0.211137, + 0.980895 -0.000645556 -0.194536, 0.978198 1.41894e-005 -0.207676, 0.978086 -1.10991e-007 -0.2082, + 0.991437 -0.00107932 -0.130581, 0.986197 -0.00068975 -0.165577, 0.984468 -0.00049233 -0.175564, + 0.999937 -3.52405e-009 -0.011226, 0.999062 0.00486987 -0.0430234, 0.999581 -9.08554e-009 -0.0289422, + 0.999581 -9.08557e-009 -0.0289422, 0.999998 -0.00122698 -0.00170809, 0.999074 -0.000919927 -0.0430258, 0 0.00200541 -0.999998, + 0.112376 -0.00362171 -0.993659, 0.99856 0.00917005 0.0528578, 0.985575 0.00168642 0.169231, 0.982424 0.000564574 0.186662, + 0.983909 0.00838402 0.178473, 0.980128 -0.000187846 0.198367, 0.986979 0.00272 0.160829, 0.985761 4.50265e-008 0.16815, + 0.994149 0.0127107 0.107264, 0.978841 0.000203599 0.204622, 0.979668 1.06467e-007 0.200627, 0.991756 0.00802457 0.127886, + 0.962308 0.00617822 0.271893, 0.941243 0.00347063 0.337713, 0.835257 0.000663502 0.54986, 0.756021 0.000464925 0.654547, + 0.706638 0.00141408 0.707574, 0.91466 0.000864769 0.404224, 0.558197 0.00171626 0.829707, 0.465493 -0.00169973 0.88505, + 0.372286 0.00175723 0.928116, 0.192452 0.0017876 0.981305, 0.112376 -0.00362122 0.993659, -0.000856813 0.00196195 0.999998, + 0.247982 -0.00429694 0.968755, 0.651007 0.000566144 0.759071, 0.992849 0 0.119379, 0.991742 -0.00149262 0.128238, + 0.993975 -0.00118285 0.109598, 0.982801 -0.000835708 0.184668, 0.979668 2.12933e-007 0.200627, 0.985761 8.92826e-008 0.16815, + 0.986717 -0.000443643 0.16245, 0.985761 8.92572e-008 0.16815, 0.951577 0 0.307411, 0.960406 0.000240036 0.278604, + 0.985761 0 0.16815, 0.999581 -9.08547e-009 -0.0289422, 0.999581 -9.08534e-009 -0.0289422, 0 -3.05702e-007 -1, + 0.56427 0.000211643 -0.82559, 0.975776 0.000367423 -0.218772, 0.186625 -0.00736368 -0.982404, 0.359984 -0.00227322 -0.932956, + 0.705011 -0.00158555 -0.709195, 0.400436 -0.00286637 -0.91632, 0.979071 -0.000512624 -0.20352, + 0.975523 -0.000388212 -0.219896, 0.978298 0 -0.207202, 0.977153 -0.000201444 -0.212537, 0.979513 -4.95574e-005 -0.201381, + 0.999937 -3.52408e-009 -0.011226, 0.920635 0.00104138 -0.390424, 0.567662 0.000423582 -0.823261, + 0.890384 -0.000402774 -0.455211, 0.956727 -0.00143331 -0.290984, 0.821316 0.000302156 -0.570474, + 0.991111 -0.000902692 -0.133035, 0 -3.05659e-007 -1, 0.985204 -0.000208411 0.171389, 0.998684 -0.001572 0.0512639, + 0.982424 -8.47337e-005 0.186662, 0.991366 -0.000911304 0.131124, 0.979668 0 0.200627, 0.978808 -4.11862e-005 0.204782, + 0.980084 2.97003e-005 0.198581, 0.56427 0.000212218 0.82559, 0.956705 -0.00143376 0.291055, 0.841263 0.00151678 0.540625, + 0.705011 -0.0015851 0.709195, 0.890384 -0.00040252 0.455211, 0.567663 0.000424198 0.823261, 0.821316 0.000302454 0.570474, + 0.400434 -0.00286588 0.916321, 0.359983 -0.00227274 0.932956, 0.186626 -0.00736326 0.982404, + -0.00171119 3.05702e-007 0.999999, -0.00171119 3.05658e-007 0.999999, 0.999958 -0.00919227 2.8856e-009, + -0.116252 -0.00420411 0.993211, -0.194734 0.00187873 0.980854, -0.269015 -0.00341476 0.96313, -0.380385 0.0018691 0.924826, + -0.614939 -0.00161906 0.788573, -0.706849 0.00148708 0.707363, -0.552839 0.00173084 0.833286, -0.923858 1.23661e-007 0.382735, + -0.825726 0.000936984 0.564071, -0.859255 0.000749048 0.511547, -0.78554 -0.000181749 0.618811, + -0.479632 -0.00208488 0.877467, -0.376082 0.000180855 0.926586, -0.192627 -0.00827463 0.981237, -0.54688 -0.00360715 0.837203, + -0.706823 -5.72987e-005 0.70739, -0.924076 0.00212771 0.382202, -0.87094 0.0011664 0.491388, -0.980789 0.00106112 0.195067, + -0.999462 1.05974e-008 0.0327992, -0.980791 6.30251e-008 0.195064, -0.986664 -5.22903e-008 -0.162772, + -0.999877 0.00121315 -0.015653, -0.835257 0.000663146 -0.54986, -0.935927 -1.13793e-007 -0.352193, + -0.917983 0.00149596 -0.396616, -0.651007 0.000565645 -0.759071, -0.558196 0.00171572 -0.829707, + -0.706638 0.00141363 -0.707574, -0.756021 0.000464524 -0.654547, -0.97629 0.00121531 -0.216462, + -0.992866 0.000753409 0.119237, -0.465493 -0.00170026 -0.88505, -0.372286 0.00175664 -0.928116, + -0.954524 -0.000278833 -0.298135, -0.991021 0.000316358 -0.133706, -0.112376 -0.00362171 -0.993659, + -0.192452 0.00178699 -0.981305, -0.247982 -0.00429738 -0.968755, -0.841263 0.00151647 -0.540625, + -0.963326 0.000973936 0.268333, -0.374121 0.000361396 0.92738, -0.707054 -0.000114826 0.70716, + -0.924517 -1.69181e-005 0.381141, -0.99965 0.0262899 -0.00302828, -0.890384 -0.000402774 -0.455211, + -0.56427 0.000211643 -0.82559, -0.400436 -0.00286637 -0.91632, -0.705011 -0.00158555 -0.709195, + -0.359984 -0.00227322 -0.932956, -0.186626 -0.00736368 -0.982404, -0.821316 0.000302156 -0.570474, + -0.567662 0.000423582 -0.823261, 0.993755 0.111569 0.00211652, 0.999999 -0.00163516 0.000633897, 0.982546 0.186 0.00284469, + 0.973122 0.230281 0.00190879, 0.946237 0.323473 0.000577984, 0.841399 0.540125 -0.0176895, 0.817211 0.576078 -0.0173438, + 0.881475 0.472102 -0.0110191, 0.917704 0.397254 -0.00297236, 0.927199 0.374568 -0.000263901, 0.836603 0.547806 0.0020737, + 0.983266 0.182129 -0.00421025, -0.982776 0.184802 -0.000643623, -0.98643 0.164183 -0.000257498, + -0.952265 0.305273 0.000281499, -0.911552 0.411183 -0.00115382, -0.927659 0.373421 -0.00229663, -0.915643 0.401988 0.00188266, + -0.809482 0.587144 0.00142434, -0.756791 0.651768 -0.0496562, -0.786438 0.617665 0.00230345, -0.844944 0.533763 -0.0341489, + -0.763579 0.643873 -0.0487314, -0.999977 -0.00681371 8.93073e-005, -0.979068 0.20353 0.00080931, 0.539678 0.841871 0.00132337, + 0.643057 0.765818 0.000956844, 0.562662 0.826677 0.00408221, 0.216738 0.976106 -0.0155338, 0.215005 0.976608 0.00318247, + 0.130604 0.991428 0.00359953, 0.00598824 0.999964 0.00607901, 0.0238893 0.999715 0, 0.387257 0.921967 0.0030236, + 0.352342 0.935818 -0.0100353, 0.436332 0.899779 0.00337745, 0.75435 0.656471 0.0013837, 0.714063 0.70008 0.00138432, + 0.286019 0.958224 0.000469932, 0.999063 0.0430083 -0.00491647, -0.198991 0.979986 0.00547698, -0.206753 0.978393 0.000911402, + -0.0823707 0.996587 0.00550418, -0.337617 0.941279 0.00288824, -0.714865 0.699263 -0.000240074, -0.623561 0.781774 0.00128142, + -0.699182 0.714937 0.00310298, -0.53299 0.846116 0.00306105, -0.560622 0.828033 -0.00800885, -0.502159 0.864743 0.00754045, + -0.375784 0.926707 0.000728106, -0.448796 0.893612 0.0063584, -0.998796 0.0490618 -1.5521e-008, 0.69702 0.717031 -0.00543005, + 0.986922 -0.161198 4.67304e-005, 0.980743 -0.195293 -0.00185258, 0.956497 -0.291743 0.000501391, + 0.937518 -0.34792 -0.00343648, 0.909223 -0.416306 -0.00198332, 0.857384 -0.514677 0.000477506, 0.838006 -0.545286 -0.0202333, + 0.788015 -0.61539 -0.0181241, 0.755268 -0.654745 -0.0296569, 0.723109 -0.690727 -0.00315773, 0.769609 -0.638509 -0.00279114, + 0.663739 -0.747955 -0.0037672, 0.670756 -0.741677 0.00103209, 0.419916 -0.90756 0.0022981, 0.435931 -0.899976 0.00283891, + 0.516359 -0.856372 -0.000395398, 0.992215 -0.124532 -0.00133686, -0.990467 -0.137747 0.000661346, + -0.832604 -0.553782 -0.00979143, -0.807954 -0.589066 -0.014532, -0.884238 -0.46689 -0.0116857, + -0.928419 -0.371525 -0.00284876, -0.952548 -0.30435 -0.00485276, -0.984036 -0.177968 -0.00067833, + -0.384455 -0.923135 -0.00397176, -0.435789 -0.899944 -0.0137355, -0.443737 -0.896153 -0.00279201, + -0.571325 -0.820677 -0.00876737, -0.569148 -0.822235 -0.000391917, -0.506046 -0.862495 -0.00446611, + -0.915208 -0.40298 0.000967806, -0.857479 -0.514517 0.0012096, -0.959479 -0.281778 0.0011532, -0.729198 -0.684302 -0.0010562, + -0.785217 -0.619216 0.00244051, -0.992215 -0.124532 -0.00133686, -0.334932 -0.942231 0.0045646, + -0.279399 -0.960175 -0.00113641, -0.681242 -0.732058 0.000659028, -0.684731 -0.728781 -0.00463418, + -0.627474 -0.778634 -0.0022271, 0.348069 -0.937469 -0.000831896, 0.375534 -0.926809 -0.000192805, + 0.619348 -0.785116 -0.000592912, 0.568693 -0.822549 0.00147712, 0.160542 -0.986969 -0.0109194, 0.103435 -0.994593 -0.00931198, + 0.230251 -0.973114 -0.00576788, 0.294795 -0.955533 -0.00727873, 0.020294 -0.999791 -0.00237325, 0.00700724 -0.98486 -0.173212, + 0.073869 -0.997178 -0.0133996, 1 0 -7.98193e-017, 0.999279 -0.0377925 -0.00352232, 0.99958 -0.0289785 1.03302e-008, + 0.999405 -0.0343763 -0.0026999, 0.919233 -0.393713 -3.24279e-005, -0.230622 -0.972993 -0.00989411, + -0.229641 -0.973275 0.00123927, -0.122061 -0.992512 0.00465299, -0.0790476 -0.99687 -0.0014807, + -0.180507 -0.983572 -0.00169124, -0.99943 -0.033762 -4.31626e-005, -1 0 0, -0.998758 -0.0498225 1.77607e-008, + -0.99823 -0.0594783 5.03692e-005, 0.231737 -0.97253 -0.0220046, 0.570445 -0.821319 -0.00530097, + -0.195101 0.980783 -4.18044e-007, -0.555625 0.831433 -3.53988e-007, -0.706933 0.70728 -2.5121e-007, + -0.382888 0.923795 -3.9333e-007, -0.195101 0.980783 -4.15768e-007, -0.413187 0.910646 -3.85481e-007, + -0.831528 0.555482 -1.74792e-007, -0.923895 0.382645 -1.13949e-007, -0.849286 0.527933 -1.11738e-007, + -0.729869 0.683587 -1.44683e-007, -0.582393 0.812907 -2.89308e-007, 2.49565e-009 1 -4.24966e-007, + -0.962772 -0.171831 -0.208674, -0.983402 -0.181438 0.000145311, -0.78174 -0.548245 -0.297171, -0.882881 -0.386835 -0.266232, + -0.849181 -0.528102 2.33621e-005, -0.518524 -0.804839 -0.288735, -0.673529 -0.680146 -0.289412, + -0.582407 -0.812897 -8.4404e-005, -0.729716 -0.683751 -0.000215721, -0.931156 -0.36462 0.000147875, + -0.980796 0.195037 -5.00828e-008, -0.999901 0.0140477 0.000123559, -0.157541 -0.953083 -0.258483, + -0.339959 -0.904355 -0.258011, -0.227091 -0.973874 -0.000158911, -0.412997 -0.910732 -0.000207875, 0 -0.965945 -0.258748, + -0.0141303 -0.9999 -2.6873e-005, 0 1 -4.25699e-007, -0.986665 0.162763 -3.78044e-008, -0.999462 -0.0328088 6.94406e-009, + -0.93596 0.352106 -7.4524e-008, -0.980796 -0.195037 4.128e-008, -0.923895 -0.382645 8.09877e-008, + -0.812877 -0.582435 1.23274e-007, -0.528268 -0.849078 3.59418e-007, -0.162951 -0.986634 4.17646e-007, + -0.352173 -0.935935 3.96185e-007, -0.683229 -0.730205 2.09355e-007, 0.0329561 -0.999457 4.23074e-007, + 0.195151 -0.980773 -0.000158994, 0.367428 -0.893402 -0.258513, 0.172308 -0.939844 -0.294962, 0.382696 -0.923874 -0.000207981, + 0.534382 -0.807021 -0.251302, 0.978892 -0.204372 0.0015424, 0.979515 -0.201369 0.000547376, 0.978654 -0.205485 0.00353893, + 0.982627 -0.185585 0.00181073, 0.979183 -0.202962 0.00260503, 0.978438 -0.206507 0.00373568, 0.706775 -0.707439 -0.000215804, + 0.78174 -0.548245 -0.297171, 0.673529 -0.680146 -0.289412, 0.985821 -0.167772 0.00312971, 0.985727 -0.168321 0.00332683, + 0.958897 -0.283722 -0.00435297, 0.973193 -0.180527 -0.142494, 0.895495 -0.378152 -0.234713, 0.831418 -0.555647 2.33802e-005, + 0.555639 -0.831424 -8.44137e-005, 0.977781 -0.209627 -0.000592082, 0.981573 -0.191089 -0.000183126, + 0.974767 -0.223216 -0.00201695, 0.98498 -0.172658 -0.00174164, 0.987181 -0.15956 -0.00391729, 0.989791 -0.142462 -0.00433531, + 0.981661 -0.190632 0.000483738, 0.98121 -0.192707 0.00953442, 0.985135 -0.171777 0.00120017, 0.227042 -0.973885 4.1225e-007, + 0.413187 -0.910646 3.85481e-007, 0.729869 -0.683587 1.44683e-007, 0.933856 -0.357649 6.79769e-006, + 0.961112 -0.276159 6.65562e-008, 0.951651 -0.307181 2.27231e-007, 0.849286 -0.527933 1.11738e-007, + 0.582393 -0.812907 2.89308e-007, 0.97872 -0.205173 0.00325541, 0.98103 -0.193855 0.000124439, 0.983941 -0.178492 0.000224722, + 0.979115 -0.203309 2.55873e-007, 0.979115 -0.203309 5.11746e-007, 0.985868 -0.167512 0.0021107, + 0.995109 -0.0985553 -0.00673694, 0.999999 -0.00157806 4.23089e-005, 0.986683 0.162606 -0.00404917, + 0.990944 0.134095 -0.007034, 0.994188 0.107252 -0.00937376, 0.982675 0.185338 -0.000413611, 0.979236 0.202719 -0.00166295, + 0.966003 0.258488 -0.00472625, 0.831528 0.555482 -1.807e-007, 0.925378 0.379045 -1.00419e-007, + 0.555625 0.831433 -3.26664e-007, 0.195101 0.980783 -4.1724e-007, 0.382888 0.923795 -3.93394e-007, + 0.706933 0.70728 -2.28845e-007, 0.960086 -0.279635 0.00629621, 0.97743 -0.211261 2.65827e-005, 0.986977 0.160811 -0.00409613, + 0.985649 0.168809 -4.4996e-008, 0.99919 -0.0401567 -0.00269909, 0.999937 -0.0112521 3.53223e-009, + 0.989096 -0.14727 0.00033072, 0.986854 -0.161613 0.000175451, 0.999065 0.0429975 -0.00443106, + 0.999581 -0.0289595 9.09083e-009, 0.978507 0.206192 -0.00295606, 0.980416 0.196938 -1.04987e-007, + 0.979897 0.199503 0.000582791, 0.812877 0.582435 -1.23274e-007, 0.922172 0.386755 0.00431092, 0.528268 0.849078 -3.59418e-007, + 0.162951 0.986634 -4.18444e-007, 0.683229 0.730204 -2.09355e-007, 0.352173 0.935935 -3.96185e-007, + 0.992078 -0.124789 0.0144731, 0.983981 -0.178263 0.0019018, 0.981581 -0.191043 0.000951125, 0.984045 -0.177911 0.00190176, + 0.978979 -0.20396 1.10899e-007, 0.993184 -0.116189 0.00925591, 0.991072 -0.133329 0, 0.991072 -0.133329 4.02895e-008, + 0.976987 -0.213297 9.31212e-008, 0.965468 -0.260521 7.46484e-008, 0.976976 -0.213349 1.07623e-007, + 0.999064 -0.0429813 0.00484646, 0.999735 -0.0148827 0.0175881, 0.999581 -0.0289595 9.09078e-009, + 0.999581 -0.0289595 9.09089e-009, 0.951651 -0.30718 0, 0.933814 -0.357661 0.00832568, 0.984032 -0.17799 0.000950836, + 0.981485 -0.191537 0, 0.983074 -0.183207 0, 0.982553 -0.185985 0, 0.998554 0.0529657 0.00923524, 0.992831 0.119528 0, + 0.985649 0.168809 -8.9992e-008, 0.994134 0.107404 0.0127221, 0.991001 0.133578 0.00857931, 0.983371 0.181396 0.00873507, + 0.977653 0.210187 -0.00401431, 0.985649 0.168809 -8.99916e-008, 0.986977 0.160811 0.00409488, 0.985649 0.168809 -4.49958e-008, + 0.959722 0.280912 0.00462795, 0.951651 0.30718 0, 0.986751 0.162178 0.00455092, 0.978545 0.206031 0.00028131, + 0.979372 0.202067 -1.0766e-007, 0.980395 0.197043 6.94333e-005, 0.979372 0.202068 0, 0.982675 0.185338 0.00060146, + 0.984049 -0.1779 0, 0.137573 -0.855221 -0.499671, 0.184897 -0.849868 -0.493495, 0.297197 -0.81069 -0.504436, + 0 -0.868165 -0.496276, 0.769908 -0.0770048 -0.633492, 0.76806 -0.0768692 -0.635748, 0.333108 -0.808662 -0.484875, + 0.446289 -0.737118 -0.507428, 0.462004 -0.73395 -0.497866, 0.639275 -0.587394 -0.496281, 0.555561 -0.659613 -0.506224, + 0.253944 -0.156506 -0.954473, 0.675435 -0.563564 -0.475587, 0.830934 -0.201566 -0.518575, 0.799654 -0.352048 -0.486432, + 0.764715 -0.421787 -0.487141, 0.712142 -0.501512 -0.491264, -0.712142 -0.501512 -0.491264, -0.675435 -0.563564 -0.475587, + -0.555561 -0.659613 -0.506224, -0.639275 -0.587394 -0.496281, -0.475016 -0.725418 -0.498124, -0.446288 -0.737118 -0.507428, + -0.137573 -0.855221 -0.499671, -0.196191 -0.847039 -0.493998, -0.297197 -0.81069 -0.504436, -0.359155 -0.797333 -0.485044, + -0.764715 -0.421787 -0.487141, -0.799654 -0.352048 -0.486432, -0.830934 -0.201566 -0.518575, -0.769908 -0.0770048 -0.633492, + -0.76806 -0.0768692 -0.635748, -0.253944 -0.156506 -0.954473, 0 -2.85628e-006 -1, 0 -1.42814e-006 -1, 0 0 -1, + 0 -4.28442e-006 -1, 0 -0.705812 -0.708399, 0 -0.704948 -0.709259, 0 -0.704083 -0.710118, 0 -0.706675 -0.707538, + 0 -1 7.46552e-007, 0 -0.502741 0.864437, 0 -0.502144 0.864784, 0 -0.501548 0.86513, 0 -0.500951 0.865476, 0 -1 0, + 0 -1.71337e-006 -1, 0 -8.56687e-007 -1, 0 -2.57006e-006 -1, 0 2.19976e-006 1, 0 1.4665e-006 1, 0 7.33252e-007 1, 0 0 1, + 0 1 -3.03659e-007, 0 0.502049 -0.864839, 0 0.50452 -0.8634, 0 0.497093 -0.867697, 0 0.499573 -0.866272, 0 1 -1.25178e-006, + 0 0.711845 0.702337, 0 0.708758 0.705452, 0 0.705657 0.708553, 0 0.702543 0.711641, 0 1.84926e-006 1, 0 3.69852e-006 1, + 0 5.54778e-006 1, 0 -0.710612 0.703585, 0 -0.709441 0.704764, 0 -0.70827 0.705942, 0 -0.707096 0.707118, 0 0.683809 0.729661, + 0 0.702224 0.711956, 0 0.720193 0.693774, 0 0.73768 0.675151, 0 0.706138 -0.708074, 0 0.707526 -0.706687, + 0 0.703355 -0.710839, 0 0.704748 -0.709458, 0.979598 -0.200966 -0.00010862, 0.978132 -0.207983 0.000764493, + 0.977323 -0.211752 0.000162424, 0.98244 -0.18658 0, 0.982402 -0.186774 -0.00137601, 0.97671 -0.214555 -0.00198412, + 0.981255 -0.192689 0.00299831, 0.987385 -0.153439 -0.0390799, 0.984863 -0.16729 -0.0453824, 0.975981 -0.217844 -0.00214269, + 0.975144 -0.221574 2.7886e-007, 0.975144 -0.221574 2.21383e-007, 0.975307 -0.220845 -0.00175263, 0.98214 -0.179269 -0.057125, + 0.981173 -0.193033 -0.00622224, 0.984435 -0.175746 -0.000705198, 0.985158 -0.171645 -0.000963986, + 0.984278 -0.176538 0.00560776, 0.983744 -0.179465 0.00635827, 0.985964 -0.166959 0.000265889, 0.987678 -0.156499 0.000889207, + 0.988159 -0.153435 0.000478754, 0.988954 -0.148219 0.00144374, 0.988272 -0.152664 0.00337556, 0.979849 -0.199728 -0.00199932, + 0.983341 -0.181742 -0.00312294, 0.984254 -0.176225 -0.0137225, 0.975873 -0.218259 0.005863, 0.976939 -0.213512 0.00161992, + 0.978024 -0.208492 0, 0.97817 -0.207796 0.00210838, 0.98731 -0.15877 -0.0033508, 0.986645 -0.162875 -0.0019892, + 0.987612 -0.156915 2.37083e-008, 0.985464 -0.169885 -0.000114967, 0.986339 -0.164723 -0.00112339, + 0.986759 -0.162106 0.00536954, 0.987612 -0.156915 0, 0 -1 2.66549e-007, 0 1 -5.33098e-007, 0 1 0, 0 1 -5.32946e-007, + 0 -1 2.66473e-007, 0.983865 0.178914 -0.000623193, 0.98269 0.185256 0, 0.983493 0.180946 -0.000623158, + 0.984871 0.17329 -0.000752646, 0.988483 0.15133 0, 0.987977 0.154601 0, 0.989464 0.144783 0, 0.982306 0.187281 -0.000903173, + 0.983875 0.178856 2.25755e-006, 0.984163 0.177265 -0.000467414, 0.984976 0.172689 -1.8412e-007, 0.97852 0.206154 0, + 0.977926 0.208954 0, 0.976714 0.214547 0, 0.984556 0.175066 0.000904939, 0.983493 0.180946 0.000622647, + 0.983865 0.178914 0.000622623, 0.984163 0.177265 0.000466939, 0.982801 0.184662 0.00113122, 0.984976 0.172689 -1.84016e-007, + 0 -1 3.13915e-007, 0 0.209062 -0.977902, 0 0.208452 -0.978033, 0 0.207842 -0.978162, 0 0.207232 -0.978292, + 0 0.207821 0.978167, 0 0.208273 0.978071, 0 0.208724 0.977975, 0 0.20737 0.978263, 0 -1 3.13917e-007, + 0.999571 0.023419 0.0175678, 0.998377 -0.0564108 -0.00787209, 0.999771 -0.021418 1.57277e-005, 0.996498 -0.0836215 0, + 0.999708 0.0241733 -7.58837e-009, 0.998471 0.0311494 0.0456574, 0.999708 0.0241733 -7.5884e-009, 0.996534 0.0471919 0.0685009, + 0.998786 0.0492601 -5.15452e-009, 0.998377 -0.0564108 0.00788782, 0.999575 0.0234283 -0.01735, 0.996576 0.0472194 -0.0678771, + 0.99849 0.0311679 -0.0452419, 0.999708 0.0241733 -7.58842e-009, 1.0354e-007 -1.33275e-007 -1, 6.90267e-008 -2.67367e-007 -1, + 0 -5.35552e-007 -1, 1.0354e-007 -4.01051e-007 -1, 1.36372e-007 5.31479e-007 1, 0 1.06134e-006 1, 2.04558e-007 7.97218e-007 1, + 2.04558e-007 2.6655e-007 1, 5.69357e-011 -5.30744e-007 -1, 0 -5.30668e-007 -1, 3.79571e-011 -5.30819e-007 -1, + 0 -5.3097e-007 -1, 5.69357e-011 -5.30895e-007 -1, 0.983581 0.0130685 0.179996, 0.983471 0.0130075 0.180597, + 0.983527 0.0149561 0.180142, 0.9836 0.0143376 0.179792, 0.98424 0.0158986 0.176124, 0.983946 0.0139941 0.177917, + 0.987802 0.0148834 0.155003, 0.983487 0.0154109 0.180324, 0.982789 0.0142646 0.184183, 0.983691 0.0130103 0.179393, + 0.976004 0.0147488 0.217252, 0.977531 0.0150361 0.210257, 0.97828 0.0145925 0.206775, 0.975977 0.0155261 0.21732, + 0.989085 0.0137568 0.1467, 0.989085 0.0149654 0.146585, 0.988248 0.0153518 0.152087, 0.989049 0.0161848 0.146695, + 0.983508 0.0156355 0.18019, 0.983539 0.0149514 0.180078, 0.983517 0.0173147 0.179984, 0.983406 0.0173719 0.180586, + 0.975999 0.0139637 0.217325, 0.983037 0.0165273 0.182663, 0.983626 0.0173756 0.179381, -1.34498e-007 2.07491e-007 1, + -2.01747e-007 1.0363e-007 1, -2.01747e-007 3.11237e-007 1, 0 4.15213e-007 1, 0 -0.501244 -0.865306, 0 -0.501015 -0.865439, + 0 -0.500786 -0.865571, 0 -0.500556 -0.865704, 0 0.500422 0.865782, 0 0.49688 0.867819, 0 0.507483 0.861662, + 0 0.503957 0.863729, 2.02726e-007 -1.33274e-007 -1, 1.35151e-007 -2.66549e-007 -1, 0 -5.33099e-007 -1, + 2.02726e-007 -3.99824e-007 -1, 0.977941 0.0151625 -0.20833, 0.977751 0.0145483 -0.209264, 0.977827 0.0148058 -0.208892, + 0.978647 0.0138999 -0.205078, 0.977366 0.0135813 -0.211119, 0.979377 0.0131505 -0.201613, 0.980594 0.0124849 -0.195651, + 0.979643 0.0122452 -0.200374, 0.977582 0.0145522 -0.210052, 0.98057 0.0125263 -0.195769, 0.977996 0.0135901 -0.208181, + 0.979536 0.0156507 -0.200659, 0.980064 0.0148581 -0.198128, 0.979758 0.0148947 -0.199633, 0.979297 0.0151894 -0.201856, + 0.975445 0.0170633 -0.219583, 0.975406 0.0170272 -0.219759, 0.976891 0.0158761 -0.213147, 0.976946 0.0158004 -0.212903, + 0.978156 0.0146834 -0.207353, 0.977953 0.0147405 -0.208302, 0.980197 0.0168168 -0.197312, 0.979375 0.0167544 -0.201353, + 0 -0.978032 0.208457, 0 -0.977825 0.209423, 0 -0.978441 0.206525, 0 -0.978237 0.207491, -8.1497e-013 -3.1392e-007 -1, + 0 -3.13922e-007 -1, -5.43314e-013 -3.13918e-007 -1, 0 -3.13913e-007 -1, -8.1497e-013 -3.13916e-007 -1, + -1.51797e-013 -3.1392e-007 -1, -2.27695e-013 -3.13921e-007 -1, -2.27695e-013 -3.1392e-007 -1, 0 -3.13919e-007 -1, + 0 0.977825 0.209423, 0 0.978016 0.208528, 0 0.978207 0.207632, 0 0.978397 0.206737, 0.999505 0.0194038 0.0247537, + 0.999514 0.0189669 0.0247418, 0.999167 0.0157998 0.0376165, 0.999869 0.0157727 0.00370719, 0.996966 0.0217139 0.0747516, + 0.998612 0.015673 0.050289, 0.997122 0.0153998 0.074229, 0.999864 0.0149546 -0.00695636, 0.999828 0.0144775 0.011613, + 0.999618 0.0141309 0.0237733, 0.99917 0.0168395 0.0370819, 0.997153 0.00975801 0.0747739, 0.999548 0.0185627 0.0236332, + 0.996266 0.0138567 -0.0852175, 0.996136 0.0207611 -0.0853392, 0.997668 0.015197 -0.0665461, 0.998215 0.0181398 -0.0568963, + 0.996147 0.0234318 -0.0845083, 0.998784 0.0143049 -0.0471857, 0.995689 -0.0811565 0.044907, 0.994253 -0.0912153 0.0560424, + 0.999561 -0.028712 -0.00725819, 0.96006 -0.215549 0.178389, 0.962042 -0.209323 0.175095, 0.980585 -0.154934 0.120205, + 0.983435 -0.144737 0.109117, 0.996906 -0.0708607 0.0340243, 0.999674 -0.0184514 -0.0176682, 0.927577 -0.282506 0.244521, + 0.93695 -0.263495 0.229555, 0.966212 -0.200383 0.162112, 0.986078 -0.134149 0.0982527, 0.892145 -0.336654 0.301234, + 0.892091 -0.337443 0.30051, 0.766363 -0.473555 0.434089, 0.833336 -0.410515 0.370175, 0.783833 -0.455901 0.421616, + 0.848387 -0.391247 0.356603, 0.674643 -0.540932 0.502245, 0.570109 -0.598826 0.562479, 0.545994 -0.611226 0.572969, + 0.691909 -0.529249 0.491078, 0.379827 -0.67626 0.631192, 0.409525 -0.662891 0.626789, 0.215134 -0.718189 0.661757, + 0.215473 -0.710764 0.669616, 0.0369564 -0.72581 0.686902, 0.931131 -0.277168 0.23701, 0.992822 -0.0754642 -0.0927831, + 0.842947 -0.394648 0.365642, 0.892359 -0.335691 0.301674, 0.708559 -0.515785 0.48157, 0.439162 -0.652128 0.617953, + 0.215596 -0.707031 0.673517, 0.59384 -0.586558 0.550729, 0.778489 -0.457316 0.429903, -0.0155532 -0.724856 0.688725, + -0.409633 -0.664729 0.62477, -0.439452 -0.654037 0.615724, -0.215393 -0.712943 0.667322, -0.699104 -0.52321 0.487345, + -0.691795 -0.529856 0.490584, -0.593792 -0.587034 0.550274, -0.570156 -0.598952 0.562298, -0.180583 -0.71199 0.678572, + -0.236512 -0.70782 0.665622, -0.546015 -0.610076 0.574173, -0.6746 -0.539615 0.503716, -0.379548 -0.670597 0.637372, + -0.778633 -0.462903 0.423617, -0.842826 -0.397858 0.362427, -0.842806 -0.399301 0.360883, -0.887809 -0.34215 0.307779, + -0.892125 -0.337104 0.300788, -0.93695 -0.263495 0.229555, -0.928632 -0.280592 0.242715, -0.842934 -0.395228 0.365045, + -0.785958 -0.453196 0.420576, -0.986109 -0.133557 0.0987525, -0.966333 -0.198266 0.163985, -0.983459 -0.144515 0.109198, + -0.99692 -0.070377 0.0346086, -0.99569 -0.0810621 0.0450524, -0.961981 -0.210421 0.174115, -0.999575 -0.00815976 -0.0279843, + -0.999678 -0.0183297 -0.0175573, -0.766338 -0.46905 0.438997, 4.02541e-006 -0.724827 0.688931, -0.89927 -0.327244 0.290215, + -0.957311 -0.223822 0.182917, -0.994232 -0.091942 0.0552171, -0.986998 -0.111008 -0.11624, -0.980541 -0.155829 0.119398, + -0.931141 -0.27832 0.235616, -0.995924 0.043104 -0.0792286, -0.99457 0.0533921 -0.0893352, -0.961952 0.173806 -0.210808, + -0.963791 0.168741 -0.206478, -0.981559 0.116159 -0.151819, -0.984303 0.105506 -0.141478, -0.997072 0.0329224 -0.069024, + -0.930815 0.239681 -0.275929, -0.939689 0.222484 -0.259781, -0.967861 0.158381 -0.195347, -0.986834 0.0946805 -0.131129, + -0.896561 0.294263 -0.33104, -0.89665 0.295728 -0.329489, -0.772186 0.432891 -0.465118, -0.839048 0.367006 -0.401629, + -0.789592 0.41348 -0.453407, -0.853868 0.348111 -0.386946, -0.681014 0.499055 -0.535877, -0.577565 0.557777 -0.596074, + -0.553808 0.568947 -0.607944, -0.69802 0.487771 -0.524258, -0.386658 0.635702 -0.668115, -0.416943 0.622878 -0.661953, + -0.22038 0.666166 -0.7125, -0.219906 0.668882 -0.710097, -0.0375891 0.683204 -0.729259, -0.934233 0.232575 -0.270404, + -0.848194 0.352316 -0.395525, -0.896448 0.293883 -0.331683, -0.714727 0.471257 -0.5168, -0.446876 0.611491 -0.652978, + -0.220078 0.669797 -0.709181, -0.600788 0.547361 -0.582623, -0.784413 0.415833 -0.460195, 0.016114 0.687208 -0.726282, + 0.417162 0.623995 -0.660762, 0.447236 0.616304 -0.648189, 0.220049 0.669052 -0.709893, 0.705095 0.480729 -0.521288, + 0.698286 0.489481 -0.522307, 0.600596 0.544433 -0.585558, 0.577619 0.558216 -0.59561, 0.184504 0.676517 -0.712939, + 0.241022 0.663395 -0.708389, 0.554038 0.570665 -0.606121, 0.680971 0.496229 -0.538549, 0.38623 0.628987 -0.674686, + 0.784541 0.422011 -0.454316, 0.848371 0.35557 -0.39222, 0.848452 0.357562 -0.390229, 0.892362 0.300344 -0.336874, + 0.896631 0.296192 -0.329124, 0.939689 0.222484 -0.259781, 0.931799 0.237688 -0.274325, 0.848194 0.352316 -0.395525, + 0.791686 0.411655 -0.451413, 0.986869 0.0952332 -0.130462, 0.967898 0.158566 -0.195011, 0.984259 0.104388 -0.142608, + 0.997074 0.0329969 -0.068955, 0.995924 0.0431653 -0.0791916, 0.963767 0.168473 -0.206809, 0.772018 0.4261 -0.471622, + 4.18819e-006 0.694186 -0.719796, 0.90331 0.283817 -0.321681, 0.959461 0.179663 -0.217152, 0.994508 0.0522359 -0.0906982, + 0.981441 0.113522 -0.154553, 0.934223 0.232474 -0.270525, 0.965471 -0.228267 -0.125541, 0.965698 -0.169805 -0.196455, + 0.945206 -0.326185 -0.0137628, 0.957702 -0.28135 -0.0604006, 0.959296 -0.276212 -0.0588097, 0.966372 -0.22804 -0.118839, + 0.871257 -0.484092 0.0810288, 0.922303 -0.384875 0.0350595, 0.913973 -0.403417 0.0436925, 0.648823 -0.75409 0.101869, + 0.783046 -0.613153 0.10432, 0.730302 -0.673891 0.111934, 0.447308 -0.891711 0.0690412, 0.572854 -0.813073 0.103686, + 0.844111 -0.52823 0.0919271, 0.94599 -0.323985 -0.0116997, 0.965172 -0.160953 -0.206246, 0.961565 -0.268419 -0.0578279, + 0.967798 -0.225024 -0.112833, 0.899655 -0.432703 0.058222, 0.664451 -0.737703 0.11958, 0.405445 -0.910157 0.0850215, + 0.485319 -0.868294 0.102621, 0.806752 -0.581371 0.105639, 0.945673 -0.32504 -0.00716262, 0.289053 -0.955829 0.0532779, + 0.208139 -0.977487 0.0345962, 0.337722 -0.940445 0.0388317, -0.0585892 -0.998034 0.0222778, 0.0765414 -0.996751 0.0250682, + 0.0437701 -0.998759 0.0237706, 0.156251 -0.987188 0.0323211, -0.193221 -0.98053 0.0350151, -0.330456 -0.942936 0.0408756, + -0.197974 -0.979845 0.0266481, -0.448246 -0.89043 0.078799, -0.574881 -0.814494 0.0781744, -0.446541 -0.893057 0.0552325, + -0.550148 -0.82864 0.103409, -0.691729 -0.71633 0.0915596, -0.298988 -0.952277 0.0614405, -0.0727761 -0.997055 0.0241931, + -0.671957 -0.731713 0.114326, -0.787463 -0.609856 0.089319, 0.111525 -0.993374 0.0277627, 0.202809 -0.978193 0.0447968, + -0.876996 -0.475449 0.0694733, -0.781677 -0.612838 0.115801, -0.888909 -0.452047 0.0741292, -0.933522 -0.3582 0.0151331, + -0.960182 -0.271992 -0.0638097, -0.965355 -0.239224 -0.104217, -0.955995 -0.289976 -0.044573, -0.965523 -0.222832 -0.134577, + -0.93971 -0.341971 0.000926992, 0.317814 -0.945597 0.069575, -0.0744229 -0.996847 0.0275262, -0.172807 -0.983825 0.0471816, + 0.0199411 -0.999569 0.021531, -0.21927 -0.973279 0.068183, -0.373101 -0.923563 0.0884762, -0.650557 -0.746367 0.1404, + -0.521987 -0.842683 0.131963, -0.902136 -0.427476 0.0584366, -0.962669 -0.251243 -0.100722, -0.964189 -0.157739 -0.213209, + -0.964669 -0.18187 -0.190622, -0.947739 -0.318522 -0.01831, -0.822941 -0.556109 0.116238, -0.721762 -0.677582 0.141215, + -0.951352 -0.0995498 -0.291582, -0.903401 -0.0405165 -0.426878, -0.909738 -0.0360237 -0.413616, -0.847574 0.0105152 -0.530573, + -0.946393 -0.0994513 -0.307326, -0.763112 0.0272515 -0.645691, -0.768259 0.0382929 -0.638992, -0.682094 0.0543281 -0.729243, + -0.513384 0.0491704 -0.856749, -0.569785 0.050496 -0.820241, -0.411517 0.0444687 -0.910317, -0.679575 0.0432375 -0.732331, + -0.840959 0.00166052 -0.541096, -0.89763 -0.0450066 -0.438445, -0.941859 -0.0989078 -0.321121, -0.75837 0.0176657 -0.651585, + -0.60782 0.0493967 -0.792537, -0.592333 0.040087 -0.804695, -0.507816 0.0445054 -0.860315, -0.432791 0.0530249 -0.899934, + -0.676957 0.0333518 -0.735267, -0.83497 -0.00646884 -0.550258, -0.323272 0.0516836 -0.944894, -0.296537 0.0522801 -0.953589, + -0.211771 0.0518199 -0.975945, -0.0485939 0.0449682 -0.997806, -0.0721506 0.0466678 -0.996301, 0.106894 0.0376763 -0.993556, + -0.199272 0.0473204 -0.978801, 0.270323 0.0376417 -0.962034, 0.417718 0.0517864 -0.9071, 0.33628 0.0518377 -0.940334, + 0.545842 0.0531851 -0.836199, 0.638708 0.0490144 -0.767886, 0.581866 0.0516419 -0.811644, 0.471437 0.0587594 -0.87994, + 0.203028 0.040484 -0.978336, -0.312615 0.0436344 -0.948877, 0.73272 0.0271951 -0.679987, 0.668925 0.0444915 -0.741997, + -0.0206358 0.0437666 -0.998829, 0.0892424 0.0441517 -0.995031, -0.183578 0.043614 -0.982037, 0.82404 0.00107045 -0.566531, + 0.793447 0.0120662 -0.60852, 0.889303 -0.0301615 -0.456322, 0.936629 -0.0838588 -0.340139, 0.905443 -0.0430634 -0.422277, + 0.946647 -0.0998356 -0.306418, 0.85519 -0.00592471 -0.518281, -0.415812 0.0448443 -0.908344, 0.237629 0.0469529 -0.970221, + 0.128249 0.0456226 -0.990692, 0.341798 0.0420551 -0.938832, 0.473216 0.0504725 -0.8795, 0.736195 0.0298496 -0.676111, + 0.696781 0.0394522 -0.716198, 0.615139 0.0490467 -0.786892, 0.82205 0.0092396 -0.56934, 0.91902 -0.0551206 -0.390339, + 0.954455 -0.114987 -0.275307, 0.87157 -0.0157316 -0.490019, 0.76451 0.0267995 -0.644055, -0.605971 -0.492627 -0.624595, + -0.425877 -0.573144 -0.700096, -0.473071 -0.52515 -0.707405, -0.552031 -0.405738 -0.728449, -0.434491 -0.501329 -0.748256, + -0.466962 -0.539754 -0.700437, -0.589421 -0.44877 -0.671706, -0.604186 -0.443709 -0.661877, -0.68367 -0.69012 -0.237338, + -0.711612 -0.702572 0, -0.426693 -0.327201 -0.843133, -0.366703 -0.306649 -0.878348, -0.395083 -0.31363 -0.86345, + -0.531263 -0.426716 -0.731897, -0.354731 -0.305242 -0.883738, -0.453087 -0.33633 -0.825588, -0.410744 -0.40087 -0.818897, + -0.605259 -0.496011 -0.622604, -0.545129 -0.398701 -0.737477, -0.582258 -0.442156 -0.682257, 0 -0.283986 -0.958829, + -0.160039 -0.339983 -0.926714, -0.139224 -0.262687 -0.954784, -0.134599 -0.424389 -0.89542, -0.05948 -0.44403 -0.894035, + -0.272604 -0.282167 -0.91982, -0.0592756 -0.257689 -0.964408, -0.0166731 -0.382919 -0.923631, -0.732685 -0.435233 -0.523207, + -0.493234 -0.359821 -0.79199, 0 -0.353227 -0.935538, 0.013676 -0.256356 -0.966486, 0.0145372 -0.43073 -0.902364, + 0.085764 -0.341174 -0.936079, 0.121154 -0.464491 -0.877251, 0.141815 -0.385057 -0.911932, 0.25728 -0.278626 -0.925297, + 0 -0.278797 -0.96035, 0.252199 -0.25302 -0.934011, 0.174314 -0.266738 -0.947874, 0.140704 -0.335517 -0.931467, + 0.377795 -0.310855 -0.872147, 0.446986 -0.33261 -0.830406, 0.348105 -0.453216 -0.820621, 0.485366 -0.349618 -0.801366, + 0.402822 -0.315368 -0.859231, 0.507825 -0.532051 -0.677521, 0.451744 -0.477139 -0.753834, 0.448661 -0.455037 -0.769185, + 0.567812 -0.425772 -0.704491, 0.537187 -0.387473 -0.749196, 0.483598 -0.54861 -0.682027, 0.580772 -0.440033 -0.68489, + 0.925313 -0.379204 0, 0.795526 -0.605919 0, -0.380928 -0.309896 -0.871125, -0.324536 -0.293439 -0.899205, + -0.209224 -0.270552 -0.939695, -0.260621 -0.2795 -0.924098, -0.11789 -0.261198 -0.958059, -0.0405904 -0.257463 -0.965435, + -0.191768 -0.268808 -0.943911, -0.4349 -0.330478 -0.837643, 0.0385746 -0.257309 -0.965559, 0.0968791 -0.259865 -0.960773, + 0.119725 -0.26096 -0.957897, 0.279328 -0.282301 -0.917759, 0.201906 -0.269439 -0.941614, 0.419389 -0.322426 -0.848619, + 0.551046 -0.401765 -0.731391, 0.590041 -0.451771 -0.669145, 0.605129 -0.498467 -0.620766, 0.492122 -0.357788 -0.793602, + 0.347928 -0.298552 -0.888714, 0.605653 -0.50054 -0.618582, 0.608208 -0.545333 -0.576797, 0.587157 -0.632772 -0.504823, + 0.601881 -0.587972 -0.540396, 0.601046 -0.592518 -0.536345, 0.548823 -0.705077 -0.449066, 0.582109 -0.645792 -0.494066, + 0.608517 -0.55107 -0.57099, 0.422105 -0.838611 -0.344325, 0.491647 -0.776797 -0.393536, 0.478849 -0.788983 -0.38498, + 0.237751 -0.935271 -0.262187, 0.328334 -0.897238 -0.29523, 0.302377 -0.908981 -0.286919, 0.165308 -0.958691 -0.231485, + 0.228723 -0.938883 -0.257265, 0.396642 -0.85638 -0.330589, 0.537155 -0.722354 -0.43551, 0.598871 -0.598786 -0.531797, + 0.446203 -0.702608 -0.554297, 0.608949 -0.557251 -0.564492, 0.465764 -0.801165 -0.375763, 0.278197 -0.92009 -0.275754, + 0.17761 -0.955188 -0.236791, 0.223662 -0.941056 -0.25375, 0.227277 -0.858625 -0.459465, 0.52191 -0.740058 -0.424175, + 0.0877466 -0.973825 -0.209678, 0.0137662 -0.979963 -0.198703, 0.0848379 -0.974919 -0.205757, -0.149002 -0.962939 -0.224828, + -0.0689594 -0.976722 -0.203122, -0.0856392 -0.974078 -0.209373, -0.213759 -0.944287 -0.250258, -0.162365 -0.959518 -0.230138, + -0.00563276 -0.979698 -0.200402, -0.245994 -0.933595 -0.260553, -0.349382 -0.884721 -0.308546, -0.28172 -0.918289 -0.278171, + -0.426854 -0.834442 -0.348572, -0.467134 -0.798992 -0.378679, -0.412161 -0.844342 -0.34236, -0.476089 -0.790733 -0.384812, + -0.516872 -0.74716 -0.417847, -0.36178 -0.876474 -0.317661, -0.227474 -0.93951 -0.256081, 0.0203182 -0.9414 -0.33668, + -0.103101 -0.971482 -0.213523, -0.177456 -0.955299 -0.236458, -0.527755 -0.731901 -0.43104, -0.558294 -0.689168 -0.461904, + -0.0204016 -0.941384 -0.336718, -0.566725 -0.673656 -0.474353, -0.587041 -0.632542 -0.505245, -0.603582 -0.583637 -0.543191, + -0.609436 -0.550542 -0.570518, -0.602027 -0.589707 -0.538339, -0.609361 -0.541525 -0.579163, -0.590712 -0.6243 -0.511184, + 0.16176 -0.960043 -0.228367, 0.586361 -0.631606 -0.507203, 0.2803 -0.82756 -0.486391, 0.091291 -0.973371 -0.210274, + 0 -0.929285 -0.369363, -0.238995 -0.934906 -0.262357, -0.107276 -0.975248 -0.193347, -0.335477 -0.830734 -0.444226, + -0.388364 -0.769568 -0.506891, -0.347273 -0.730592 -0.587909, -0.167242 -0.881803 -0.440969, -0.509543 -0.665505 -0.545407, + -0.605209 -0.576904 -0.548548, -0.608896 -0.531373 -0.588973, -0.593389 -0.616351 -0.517689, -0.031434 -0.999506 0, + -0.00561939 -0.673274 -0.739372, 0.0208087 -0.655406 -0.75499, -0.215831 -0.738213 -0.639107, -0.0322502 -0.681822 -0.730807, + 0.00748866 -0.66539 -0.746458, -0.151041 -0.746665 -0.647826, -0.175934 -0.783876 -0.595471, -0.111811 -0.588431 -0.800779, + -0.0268738 -0.655373 -0.754827, -0.119187 -0.614357 -0.779974, -0.210209 -0.566684 -0.796669, -0.102205 -0.623459 -0.775147, + 0.176794 -0.784228 -0.594753, 0.0141442 -0.681664 -0.731529, 0.00736721 -0.670662 -0.741726, -0.0944214 -0.599623 -0.794693, + -0.195204 -0.513366 -0.835674, -0.473707 -0.65188 -0.592161, -0.459616 -0.677236 -0.574547, -0.444997 -0.701811 -0.556272, + 0.325896 -0.532139 -0.781421, 0.330652 -0.560261 -0.759458, 0.115344 -0.498005 -0.859469, 0.00037597 -0.67071 -0.74172, + 0.0416451 -0.583175 -0.811278, 0.0243515 -0.618801 -0.78517, 0.0550068 -0.544738 -0.8368, -0.0253842 -0.707349 -0.706409, + -0.0190852 -0.700613 -0.713286, 0.0510501 -0.547831 -0.83503, 0.00261061 -0.667712 -0.744415, 0.0316798 -0.516247 -0.855854, + 0.00892319 -0.690082 -0.723676, 0.0088934 -0.689166 -0.724549, 0.000329014 -0.654079 -0.756426, + 0.00151272 -0.683954 -0.729524, -0.00880452 -0.605956 -0.79545, -0.00146502 -0.659947 -0.751311, + -0.0084177 -0.65641 -0.754357, -0.0103968 -0.64476 -0.764314, -0.00205965 -0.666215 -0.745757, 0.00172846 -0.670664 -0.741759, + -0.00685304 -0.660909 -0.750435, -0.00963518 -0.657219 -0.753638, -0.301501 -0.594189 -0.745679, + -0.310329 -0.563904 -0.765316, 0.0195583 0.654238 0.756036, 0.0224925 0.650179 0.759448, -0.131543 0.730994 0.669585, + -0.0181349 0.680847 0.732201, -0.000755954 0.669739 0.742597, -0.684333 0.714678 0.14465, 0.0534384 0.642619 0.76432, + -0.242412 0.767035 0.594048, -0.0145263 0.662539 0.748887, -0.0291958 0.654792 0.755245, 0.057623 0.702537 0.709311, + 0.110146 0.72814 0.676521, 0.0552837 0.700845 0.711168, 0.00484158 0.67378 0.738916, 0.000147733 0.670077 0.742292, + 0.00192646 0.690238 0.72358, 0.00359113 0.708917 0.705282, 0.175142 0.884626 -0.43216, 0.0132612 0.699115 0.714886, + 0.00537156 0.681839 0.731483, -0.0367146 0.612342 0.78974, -0.0235671 0.629377 0.776743, -0.00697669 0.66305 0.748542, + 0.357525 0.119413 -0.926238, 0.432805 0.682223 0.58928, 0.242927 0.692446 0.679341, 0.0720636 0.669458 0.739346, + 0.0391316 0.671715 0.739775, 0.0427825 0.671995 0.739319, 0.100122 0.665076 0.740033, 0.059246 0.666187 0.743428, + 0.0773854 0.667444 0.740628, -0.276188 0.588746 0.75967, 0.0461513 0.661364 0.748644, 0.175876 0.621074 0.763763, + 0.288476 0.581722 0.760514, -0.0714914 0.678902 0.73074, -0.157545 0.687331 0.709053, -0.116772 0.680793 0.723108, + 0.0193037 0.669469 0.742589, 0.0266829 0.668107 0.743587, 0.0237489 0.668245 0.743562, 0.0258516 0.666418 0.74513, + 0.0141415 0.669664 0.742529, 0.0243272 0.666148 0.745423, 0.37963 0.54036 0.750928, 0.432963 0.520414 0.736011, + 0.0153202 0.604804 0.796227, 0.0116974 0.62276 0.782326, -0.0206152 0.695256 0.718466, 0.00120242 0.657285 0.753641, + -0.0334682 0.734825 0.67743, -0.00521873 0.678753 0.734348, -0.0353138 0.739761 0.671943, 0.06296 0.570846 0.81864, + 0.125708 0.455553 0.881288, -0.00709672 -0.683282 -0.73012, 0.00270249 -0.659922 -0.75133, 0.00701166 -0.682604 -0.730755, + 0.269078 -0.64286 -0.717166, 0.325332 -0.642834 -0.693486, 0.311316 -0.624667 -0.716152, 0.310176 -0.677709 -0.66671, + 0.348673 -0.671364 -0.653986, 0.00443787 -0.680625 -0.732618, 0.0229707 -0.673827 -0.738532, 0.266567 -0.623671 -0.734831, + 0.0482366 -0.682528 -0.729266, 0.17556 -0.640375 -0.747729, 0.112292 -0.740718 -0.662365, 0.124633 -0.720114 -0.68257, + 0.108554 -0.725627 -0.679471, 0.176046 -0.661223 -0.729241, 0.222277 -0.682817 -0.695956, 0.157495 -0.689509 -0.706946, + 0.158436 -0.674473 -0.721099, 0.14984 -0.698556 -0.699691, 0.229885 -0.718983 -0.655909, 0.149867 -0.636036 -0.756966, + 0.0508554 -0.719986 -0.692122, 0.0403569 -0.71884 -0.694003, 0.0520856 -0.718667 -0.693401, 0.277614 -0.74295 -0.609061, + 0.248958 -0.7719 -0.584971, 0.171223 -0.770108 -0.614505, 0.156378 -0.732959 -0.662055, 0.18201 -0.692885 -0.697698, + 0.18514 -0.686745 -0.702926, 0.103728 -0.755274 -0.647149, 0.123956 -0.758376 -0.639922, 0.175109 -0.690744 -0.701577, + 0.0985538 -0.728795 -0.677602, 0.159685 -0.669469 -0.725474, 0.129915 -0.699427 -0.702797, 0.134866 -0.697311 -0.703966, + 0.144215 -0.686715 -0.712478, 0.162254 -0.64964 -0.742726, 0.158458 -0.659976 -0.734386, 0.120793 -0.701997 -0.701862, + 0.119597 -0.702685 -0.701377, 0.158478 -0.664886 -0.72994, 0.107415 -0.707431 -0.698573, 0.108619 -0.709026 -0.696767, + 0.109969 -0.723351 -0.681667, 0.108129 -0.716754 -0.688892, 0.0987684 -0.716735 -0.690316, 0.11742 -0.72422 -0.679498, + 0.0933322 -0.714932 -0.692937, 0.0958436 -0.70731 -0.700376, 0.103806 -0.707003 -0.699551, 0.0929112 -0.710584 -0.697451, + 0.0920715 -0.729623 -0.677624, 0.10266 -0.727678 -0.678193, 0.0807824 -0.71798 -0.69136, 0.0857006 -0.711017 -0.697933, + 0.10064 -0.647893 -0.755053, 0.10088 -0.782038 -0.615012, 0.16534 -0.818749 -0.549829, 0.102115 -0.841722 -0.530167, + 0.0850861 -0.800357 -0.593455, 0.0883696 -0.764432 -0.638619, 0.0641124 -0.748589 -0.659928, 0.0754995 -0.755159 -0.65118, + 0.0681513 -0.75016 -0.657735, 0.0750439 -0.747232 -0.660312, 0.0695466 -0.756882 -0.64984, 0.0823928 -0.741023 -0.666405, + 0.0732745 -0.769275 -0.634702, 0.126043 -0.852147 -0.507896, 0.0670176 -0.849262 -0.523701, 0.039194 -0.820907 -0.569716, + 0.0323178 -0.845975 -0.532243, -9.42351e-005 -0.841961 -0.539538, 0.0585697 -0.767409 -0.638477, + 0.0235197 -0.776399 -0.629803, 0.00676053 -0.793662 -0.608321, 0.0126069 -0.779682 -0.626049, 0.0379108 -0.698026 -0.715068, + 0.044267 -0.696394 -0.716293, 0.0438278 -0.697104 -0.715629, 0.0365478 -0.757102 -0.652274, 0.0694472 -0.729659 -0.680276, + 0.0628458 -0.737923 -0.671953, 0.0592924 -0.733059 -0.677576, 0.0640714 -0.733123 -0.677072, 0.0876091 -0.722785 -0.685497, + 0.0745365 -0.728211 -0.681288, 0.0794566 -0.726071 -0.683013, 0.0886182 -0.735158 -0.672078, 0.0689094 -0.717856 -0.692773, + 0.0879912 -0.711083 -0.69758, 0.0677612 -0.715263 -0.695563, 0.0771669 -0.710816 -0.699132, 0.103041 -0.712042 -0.694535, + 0.0518438 -0.753268 -0.655667, 0.0270982 -0.742833 -0.668928, 0.0299095 -0.755082 -0.654948, 0.0573849 -0.751682 -0.657025, + 0.0383285 -0.739051 -0.672558, -0.0317621 -0.781134 -0.623555, 0.0154478 -0.768065 -0.640185, 0.059191 -0.718812 -0.69268, + -0.00121263 -0.768065 -0.640371, 0.103284 -0.66605 -0.738722, 0.120952 -0.632498 -0.76506, 0.0846198 -0.667889 -0.739435, + 0.0968132 -0.671737 -0.734436, 0.0978993 -0.688856 -0.718257, 0.0810857 -0.690503 -0.71877, 0.0837667 -0.686712 -0.722087, + 0.0769401 -0.692605 -0.717202, 0.0889628 -0.680391 -0.72743, 0.0838677 -0.692971 -0.716071, 0.0798264 -0.687667 -0.721624, + 0.0868401 -0.694318 -0.71441, 0.0839579 -0.696754 -0.71238, 0.0839816 -0.695593 -0.713511, 0.0852505 -0.680166 -0.728084, + 0.0771525 -0.705031 -0.704967, 0.0824643 -0.705831 -0.703564, 0.0987867 -0.695296 -0.711902, 0.0762425 -0.714856 -0.695103, + 0.0766231 -0.707443 -0.702605, 0.0770551 -0.714168 -0.69572, 0.0746446 -0.707012 -0.703251, 0.0772241 -0.701687 -0.708288, + 0.0634118 -0.708153 -0.703206, 0.0696246 -0.703313 -0.707462, 0.0610829 -0.708336 -0.703228, 0.0711884 -0.704449 -0.706175, + 0.061182 -0.64778 -0.759366, 0.0626669 -0.615142 -0.785922, 0.0486915 -0.642432 -0.764794, 0.0314653 -0.674791 -0.737338, + 0.0313582 -0.675542 -0.736654, 0.0664837 -0.696085 -0.714875, 0.0735881 -0.691031 -0.71907, 0.0719958 -0.697374 -0.713082, + 0.0580726 -0.702933 -0.708881, 0.0709706 -0.698479 -0.712103, 0.0695085 -0.606272 -0.792214, 0.0664454 -0.632263 -0.771899, + 0.0253145 -0.696661 -0.716954, 0.0390003 -0.673207 -0.738425, 0.0353347 -0.681432 -0.731028, 0.0250498 -0.700088 -0.713617, + 0.0251792 -0.674455 -0.737886, 0.0616574 -0.424809 -0.903181, 0.0588457 -0.717482 -0.694087, 0.0510878 -0.716388 -0.695829, + 0.0548221 -0.717393 -0.694509, 0.0473303 -0.709188 -0.703429, 0.0621027 -0.703027 -0.708446, 0.00755729 -0.722418 -0.691415, + 0.0479657 -0.707479 -0.705105, 0.0299045 -0.706551 -0.70703, 0.0330245 -0.718122 -0.695133, 0.030468 -0.719083 -0.694256, + 0.0173971 -0.718629 -0.695176, 0.033008 -0.724078 -0.688928, 0.0350986 -0.730348 -0.682173, 0.0220958 -0.720256 -0.693356, + 0.0113796 -0.723433 -0.690301, 0.0204325 -0.717669 -0.696085, 0.0389114 -0.718182 -0.694767, 0.228199 -0.680207 -0.696595, + 0.0890944 -0.711773 -0.696736, 0.226626 -0.680472 -0.696848, -0.00610049 -0.724194 -0.689569, 0.0308679 -0.713193 -0.700288, + 0.0254562 -0.716127 -0.697506, 0.00589777 -0.71536 -0.698732, 0.0227537 -0.703488 -0.710343, 0.0183895 -0.706248 -0.707726, + 0.0639346 -0.688312 -0.722592, 0.0425497 -0.696365 -0.716425, 0.0303646 -0.70147 -0.712052, 0.0348046 -0.700675 -0.712631, + 0.0355667 -0.693863 -0.719228, 0.151071 -0.707583 -0.690292, -0.103283 -0.688263 -0.718071, -0.0246503 -0.685188 -0.727949, + -0.00648232 -0.690871 -0.722949, 0.167492 -0.736693 -0.655157, 0.379948 -0.725314 -0.574073, 0.233664 -0.735459 -0.636004, + 0.0529944 -0.728573 -0.682915, 0.0429379 -0.729171 -0.682983, 0.0439088 -0.724441 -0.687937, 0.0319025 -0.728153 -0.684672, + 0.0559903 -0.722754 -0.688833, 0.0556293 -0.728761 -0.682504, 0.0459759 -0.727038 -0.685056, 0.0422347 -0.728914 -0.683301, + 0.0632358 -0.733721 -0.676502, 0.0520458 -0.731959 -0.679358, 0.0480327 -0.729021 -0.682804, 0.0493807 -0.731964 -0.679551, + 0.0444535 -0.729973 -0.682029, 0.0682933 -0.746381 -0.662006, 0.0694525 -0.744221 -0.664313, 0.0658521 -0.743584 -0.665392, + 0.0542167 -0.7379 -0.672729, 0.0594705 -0.733851 -0.676702, 0.08746 -0.755406 -0.649394, 0.0169996 -0.707854 -0.706154, + 0.0478234 -0.739346 -0.671625, 0.0468953 -0.746168 -0.664104, 0.0410902 -0.735621 -0.676146, 0.0159334 -0.72558 -0.687953, + 0.0571228 -0.732274 -0.67861, 0.0670794 -0.735447 -0.674254, 0.0460501 -0.746613 -0.663663, 0.0504269 -0.739086 -0.671721, + 0.0496567 -0.732628 -0.678815, 0.0607306 -0.741638 -0.668046, 0.139193 -0.689316 -0.710963, 0.17929 -0.684962 -0.706174, + 0.140234 -0.687188 -0.712817, 0.114365 -0.688703 -0.715967, 0.121677 -0.68173 -0.721414, 0.12301 -0.683174 -0.71982, + 0.121257 -0.683203 -0.720091, 0.118305 -0.691983 -0.712154, 0.125033 -0.687953 -0.714904, 0.124245 -0.687039 -0.715919, + 0.116874 -0.690122 -0.714193, 0.111992 -0.690643 -0.714472, 0.124251 -0.683796 -0.719017, 0.122023 -0.684028 -0.719177, + 0.122774 -0.684146 -0.718938, 0.109829 -0.689298 -0.716104, 0.110372 -0.687157 -0.718076, 0.11659 -0.684993 -0.71916, + 0.101679 -0.697645 -0.709192, 0.10048 -0.690063 -0.716741, 0.102212 -0.693417 -0.71325, 0.108554 -0.695306 -0.710468, + 0.1044 -0.687972 -0.718189, 0.106175 -0.688344 -0.717572, 0.0988353 -0.698368 -0.708882, 0.0650328 -0.697073 -0.714045, + 0.0629419 -0.695634 -0.715634, 0.0701413 -0.696017 -0.714591, 0.0464075 -0.711925 -0.70072, 0.0569832 -0.69824 -0.713592, + 0.0651746 -0.686387 -0.72431, 0.0698346 -0.697119 -0.713546, 0.0654666 -0.691265 -0.719629, 0.0825066 -0.688585 -0.720446, + 0.0672547 -0.689827 -0.720843, 0.0599962 -0.697191 -0.71437, 0.0572855 -0.697679 -0.714116, 0.0532658 -0.696534 -0.715544, + 0.0485225 -0.700479 -0.712022, 0.0637613 -0.699395 -0.711885, 0.0526205 -0.702481 -0.709755, 0.0507503 -0.703161 -0.709217, + 0.062572 -0.690371 -0.720744, 0.0239461 -0.716593 -0.69708, 0.0156871 -0.728287 -0.685093, -0.0292364 -0.75536 -0.654658, + -0.0974199 -0.804459 -0.585965, 0 -0.729163 -0.68434, 0.946563 0.0891306 -0.309959, 0.862238 -0.08621 -0.499113, + -0.31198 -0.625104 -0.715481, -0.281315 -0.619931 -0.732494, -0.018103 -0.721336 -0.692349, -0.267978 -0.642139 -0.718224, + -0.326732 -0.642746 -0.69291, -0.00482266 -0.683348 -0.730077, -0.00394116 -0.683123 -0.730293, -0.349633 -0.671783 -0.653043, + -0.311404 -0.677511 -0.666338, -0.0249148 -0.681791 -0.731122, -0.250391 -0.660314 -0.708019, -0.232074 -0.643139 -0.729736, + -0.173735 -0.658236 -0.73249, -0.242962 -0.678919 -0.692848, -0.219316 -0.695449 -0.684289, -0.233103 -0.671505 -0.703381, + -0.207159 -0.699806 -0.683635, -0.215742 -0.702199 -0.678508, -0.1923 -0.699408 -0.688367, -0.19315 -0.64213 -0.741864, + -0.234297 -0.725677 -0.646914, -0.0788422 -0.680495 -0.728499, 0.650453 -0.759547 0, -0.196947 -0.770912 -0.605728, + -0.179618 -0.744011 -0.643572, -0.19183 -0.730758 -0.655129, -0.200151 -0.713324 -0.671646, -0.116765 -0.735071 -0.66786, + -0.116897 -0.733218 -0.66987, -0.125028 -0.731651 -0.670115, -0.129199 -0.726625 -0.674776, -0.116776 -0.728986 -0.674494, + -0.0993425 -0.733707 -0.672164, -0.186781 -0.695282 -0.694043, -0.170913 -0.699226 -0.69417, -0.178372 -0.696403 -0.695131, + -0.170076 -0.698766 -0.694839, -0.163287 -0.702888 -0.692305, -0.165616 -0.70047 -0.694199, -0.158531 -0.703188 -0.693105, + -0.166803 -0.677636 -0.716231, -0.196564 -0.654159 -0.730368, -0.0787684 -0.6978 -0.711949, -0.118534 -0.695263 -0.708914, + -0.114261 -0.70226 -0.702691, -0.138463 -0.685229 -0.715045, -0.155904 -0.694293 -0.702603, -0.0851081 -0.692469 -0.71641, + -0.0906031 -0.672696 -0.734351, -0.148324 -0.707752 -0.690715, -0.115818 -0.721956 -0.682178, -0.117047 -0.727941 -0.675575, + -0.116895 -0.725281 -0.678456, -0.111511 -0.71884 -0.686173, -0.115377 -0.711243 -0.693413, -0.121134 -0.700825 -0.702973, + -0.117326 -0.717601 -0.686501, -0.119546 -0.71284 -0.691063, -0.121328 -0.713495 -0.690076, -0.116126 -0.715189 -0.689217, + -0.0876476 -0.723964 -0.684247, -0.0906868 -0.722045 -0.685877, -0.0880748 -0.724341 -0.683793, -0.0988718 -0.733912 -0.67201, + -0.103027 -0.658061 -0.745882, -0.00956517 -0.722166 -0.691653, -0.00773123 -0.720087 -0.69384, + -0.0470518 -0.710131 -0.702496, -0.146403 -0.759194 -0.634185, -0.176208 -0.818354 -0.547036, -0.11813 -0.771388 -0.625304, + -0.0868214 -0.796345 -0.598579, -0.0215154 -0.793341 -0.608397, -0.0297144 -0.791595 -0.610323, + -0.0417062 -0.771602 -0.634737, -0.115668 -0.73145 -0.672013, -0.115995 -0.731846 -0.671525, -0.0120347 -0.802889 -0.596007, + -0.092078 -0.74029 -0.665953, -0.0562433 -0.769201 -0.636526, -0.085601 -0.744524 -0.662085, -0.0807166 -0.770286 -0.63257, + -0.117039 -0.730742 -0.672546, -0.130336 -0.723257 -0.678168, -0.0370715 -0.698807 -0.714349, -0.0415634 -0.696232 -0.716612, + -0.0385436 -0.697329 -0.715714, -0.102043 -0.838324 -0.535538, -0.122823 -0.852583 -0.507954, -0.065327 -0.849463 -0.523588, + -0.0325314 -0.84617 -0.531919, -0.0272792 -0.700236 -0.71339, -0.0255116 -0.701103 -0.712603, -0.0277746 -0.700926 -0.712693, + -0.0103533 -0.705151 -0.708982, -0.0390731 -0.821032 -0.569544, -0.0711507 -0.794656 -0.602877, + -0.0533291 -0.767083 -0.639327, -0.0286172 -0.774364 -0.632093, -0.0311089 -0.700838 -0.712641, + -0.0420963 -0.698333 -0.714534, -0.0921701 -0.755539 -0.648587, -0.0969878 -0.729046 -0.677558, + -0.0934795 -0.730473 -0.676514, -0.100017 -0.727178 -0.679123, -0.0875135 -0.730319 -0.677477, -0.0783604 -0.749453 -0.657403, + -0.0590845 -0.736549 -0.673799, -0.0556181 -0.739088 -0.671309, -0.0808541 -0.736355 -0.671747, + -0.0783783 -0.744403 -0.663115, -0.0800515 -0.750025 -0.656547, -0.090637 -0.74032 -0.666117, -0.0978373 -0.731979 -0.674266, + -0.0696985 -0.73391 -0.675661, -0.0806443 -0.752269 -0.653902, -0.0888001 -0.724113 -0.68394, -0.0888372 -0.724551 -0.683472, + -0.0638329 -0.782707 -0.619108, -0.0464782 -0.772506 -0.633304, -0.0687849 -0.762439 -0.643394, + -0.0648984 -0.777105 -0.626016, -0.0634236 -0.759204 -0.647755, -0.0942559 -0.734372 -0.672171, + -0.0749435 -0.743997 -0.663966, -0.0678324 -0.740604 -0.668509, -0.0449863 -0.771941 -0.6341, -0.0411913 -0.76575 -0.641818, + -0.0492759 -0.75397 -0.655058, -0.0508548 -0.753563 -0.655405, -0.0442313 -0.757387 -0.651466, -0.0154235 -0.765403 -0.643367, + 0.00906131 -0.761245 -0.648401, -0.0352108 -0.700604 -0.712681, -0.0393663 -0.699124 -0.713916, + -0.0980633 -0.704469 -0.702927, -0.0924337 -0.70873 -0.699398, -0.106054 -0.690698 -0.715324, -0.0793952 -0.729869 -0.678961, + -0.0740012 -0.732661 -0.676559, -0.0856026 -0.726353 -0.68197, -0.0712974 -0.734304 -0.675066, -0.0736335 -0.733443 -0.675751, + -0.0710402 -0.70274 -0.707891, -0.0822718 -0.705359 -0.704059, -0.0789146 -0.70693 -0.702867, -0.0758246 -0.70939 -0.700726, + -0.0567771 -0.720235 -0.691402, -0.0664373 -0.717707 -0.693169, -0.0703511 -0.71879 -0.691658, -0.0578995 -0.723793 -0.687584, + -0.0632805 -0.716065 -0.695159, -0.0677052 -0.715333 -0.695496, -0.0517287 -0.726181 -0.685555, + -0.0570364 -0.721101 -0.690478, -0.0448907 -0.726255 -0.685958, -0.0452924 -0.737086 -0.674279, + -0.0575368 -0.730861 -0.680097, -0.0661361 -0.738532 -0.670966, -0.0446132 -0.719277 -0.69329, -0.0572555 -0.715085 -0.696689, + -0.0552655 -0.71502 -0.696917, -0.0486889 -0.716892 -0.695482, -0.0479646 -0.728854 -0.682987, -0.0458125 -0.724115 -0.688156, + -0.0792283 -0.730582 -0.678213, -0.0784311 -0.734201 -0.674387, -0.0958247 -0.729556 -0.677175, -0.0163392 -0.730964 -0.68222, + -0.13011 -0.686727 -0.715176, -0.048176 -0.717978 -0.694396, -0.0590226 -0.740521 -0.669436, -0.0407653 -0.723754 -0.688853, + -0.0564262 -0.716242 -0.695567, -0.0880249 -0.725625 -0.682436, -0.0629013 -0.660701 -0.748009, -0.06364 -0.695912 -0.715301, + -0.0585525 -0.695412 -0.716222, -0.0523141 -0.704488 -0.707785, -0.0722995 -0.687713 -0.722374, + -0.0444513 -0.695011 -0.717623, -0.041868 -0.682005 -0.730148, -0.0783355 -0.686858 -0.722558, -0.0572785 -0.702212 -0.70966, + -0.0719164 -0.689351 -0.720849, -0.0552298 -0.631565 -0.773353, -0.047666 -0.663333 -0.746805, -0.0221845 -0.675483 -0.737042, + -0.0472017 -0.693888 -0.718534, -0.0569957 -0.694515 -0.717217, -0.0392424 -0.695539 -0.717416, + -0.0388272 -0.695463 -0.717512, -0.021243 -0.676378 -0.736249, -0.0496541 -0.717679 -0.694601, -0.0471283 -0.706523 -0.706119, + -0.0551232 -0.698999 -0.712995, -0.015407 -0.678334 -0.734592, -0.0534592 -0.751408 -0.657669, -0.0551635 -0.755352 -0.652993, + -0.0541716 -0.754718 -0.653809, -0.0525172 -0.742756 -0.667499, -0.0507116 -0.73968 -0.671045, -0.0342145 -0.743207 -0.668186, + -0.0384336 -0.746828 -0.663906, -0.041022 -0.746382 -0.664252, -0.0400871 -0.748639 -0.661765, -0.0256131 -0.755721 -0.654393, + -0.0277261 -0.757983 -0.651684, -0.0499041 -0.757438 -0.650998, -0.0448971 -0.765139 -0.642298, -0.0144016 -0.768132 -0.64013, + -0.0400298 -0.754171 -0.655456, -0.00477166 -0.743277 -0.668967, -0.0310217 -0.733997 -0.678444, + -0.00589375 -0.738534 -0.674191, -0.0170177 -0.741294 -0.670965, -0.0170524 -0.73898 -0.673512, + -0.0207324 -0.744896 -0.666858, -0.0267413 -0.748495 -0.662601, -0.0214035 -0.749138 -0.662068, + -0.0592166 -0.740643 -0.669284, -0.0134568 -0.74659 -0.665148, -0.414255 -0.536638 -0.735128, -0.141343 -0.685079 -0.714625, + -0.0356658 -0.71912 -0.69397, -0.0375633 -0.732791 -0.679417, -0.0334633 -0.721458 -0.691649, -0.0128933 -0.723634 -0.690064, + -0.0205341 -0.712698 -0.70117, -0.030602 -0.718394 -0.694963, 0.0012514 -0.707969 -0.706243, -0.044918 -0.699061 -0.71365, + -0.568767 -0.413573 -0.710958, -0.0294352 -0.737763 -0.674418, -0.0272427 -0.720387 -0.693037, 0.107799 -0.713859 -0.691943, + -0.0522345 -0.719415 -0.692613, -0.0431014 -0.695874 -0.71687, -0.0486849 -0.696523 -0.715881, -0.0456958 -0.696227 -0.716366, + -0.0486337 -0.696525 -0.715882, -0.0619597 -0.739894 -0.669864, -0.0638262 -0.736167 -0.673784, -0.107546 -0.72031 -0.685265, + -0.0767026 -0.743429 -0.664402, -0.0516896 -0.694314 -0.717814, -0.05164 -0.699496 -0.712768, -0.0542645 -0.727987 -0.68344, + -0.0602173 -0.742147 -0.667526, -0.0642138 -0.729069 -0.681421, -0.0531542 -0.73467 -0.67634, -0.0577768 -0.730894 -0.680041, + -0.0573283 -0.742056 -0.667882, -0.0608961 -0.73424 -0.676153, -0.265327 -0.605856 -0.750027, -0.342904 -0.644151 -0.68373, + -0.259623 -0.580387 -0.771847, -0.172492 -0.628556 -0.758395, -0.278843 -0.5009 -0.819357, -0.212763 -0.532596 -0.819191, + -0.143395 -0.602691 -0.784985, -0.244872 -0.473809 -0.845898, -0.159932 -0.61504 -0.772106, -0.152458 -0.498935 -0.853124, + -0.744727 -0.403193 -0.531806, -0.160053 -0.42032 -0.893149, -0.141957 -0.449966 -0.881691, -0.0968485 -0.436709 -0.894374, + -0.00261389 -0.467016 -0.884245, -0.0435865 -0.447452 -0.893245, -0.0615907 -0.475778 -0.877406, -0.100893 -0.51568 -0.85082, + -0.119108 -0.592887 -0.796429, -0.0930273 -0.642706 -0.760444, -0.0860981 -0.63621 -0.766697, -0.0781356 -0.630224 -0.772472, + -0.10424 -0.570893 -0.81438, -0.0659223 -0.629733 -0.774009, -0.0665467 -0.61782 -0.783499, -0.0768351 -0.572159 -0.816536, + -0.0450181 -0.54979 -0.834089, -0.00104643 -0.549066 -0.835778, -0.0483275 -0.61319 -0.788456, -0.0264946 -0.607074 -0.794203, + 0.00339978 -0.605702 -0.795684, 0.0568484 -0.481685 -0.874499, 0.141895 -0.449668 -0.881853, 0.098487 -0.509773 -0.854653, + 0.140501 -0.489298 -0.860725, 0.0434883 -0.554301 -0.831179, 0.221584 -0.466868 -0.856116, 0.252041 -0.480985 -0.839719, + 0.611449 -0.791284 0, 0.269392 -0.577653 -0.770548, 0.210926 -0.531109 -0.82063, 0.106057 -0.579618 -0.807957, + 0.123667 -0.595688 -0.793639, 0.248237 -0.585346 -0.771848, 0.275583 -0.603332 -0.748361, 0.0775879 -0.565406 -0.821155, + 0.0312547 -0.609229 -0.792378, 0.0520309 -0.616198 -0.785871, 0.0655957 -0.622503 -0.779864, 0.155868 -0.60278 -0.782535, + 0.0659223 -0.629733 -0.774009, 0.0852342 -0.629386 -0.772404, 0.150447 -0.616317 -0.772994, 0.178642 -0.62736 -0.757962, + 0.0895115 -0.637194 -0.765488, 0.0964584 -0.644692 -0.758332, 0.279872 -0.691979 0.66546, 0.388764 -0.670228 0.632184, + 0.0156483 -0.716744 0.697161, -0.0438556 -0.720608 0.691955, -0.353351 -0.673866 0.648882, -0.405922 -0.664717 0.627199, + -0.723141 -0.50852 0.467413, -0.931355 -0.27524 0.238372, -0.723768 -0.505962 0.469214, 0.325374 -0.682399 0.654571, + -0.102009 -0.72235 0.683963, -0.467414 -0.638704 0.611213, -0.7244 -0.496944 0.477798, -0.905626 -0.315418 0.283466, + -0.951256 -0.23204 0.203148, -0.999383 -0.00140019 -0.0350832, -0.995639 0.0457181 -0.0813155, -0.911801 0.272005 -0.307624, + -0.998579 -0.0511513 0.0149452, -0.628988 0.528964 -0.569712, -0.286222 0.653388 -0.700829, -0.388687 0.636152 -0.666508, + -0.883473 0.31397 -0.347704, -0.681268 0.503186 -0.531675, -0.93578 0.229202 -0.267924, -0.352567 0.653928 -0.669384, + -0.726278 0.47081 -0.500858, -0.0817882 0.686887 -0.722147, 0.058093 0.684225 -0.726954, 0.515305 0.588274 -0.623212, + 0.400556 0.6256 -0.669462, 0.681711 0.48909 -0.544116, 0.236627 0.669246 -0.704356, 0.752642 0.444122 -0.486093, + 0.916278 0.258304 -0.306126, 0.0595977 0.689971 -0.721379, 0.399339 0.639118 -0.65731, 0.675647 0.509879 -0.53247, + 0.918083 0.265731 -0.294128, 0.982735 0.111903 -0.147339, 0.999072 -0.0418451 -0.0102451, 0.999356 -0.0358572 -0.00107887, + 0.97393 -0.177796 0.140885, 0.999623 -0.0267554 0.00620924, 0.905175 -0.325125 0.273772, 0.905184 -0.311452 0.289204, + 0.5241 -0.617782 0.58623, 0.686605 -0.537242 0.489841, 0.808816 -0.433039 0.397862, 0.685499 -0.525025 0.504421, + -0.0586416 -0.757882 -0.649751, -0.0587743 -0.76445 -0.641998, -0.0624012 -0.749422 -0.659145, -0.0648179 -0.743021 -0.666122, + -0.0659975 -0.742162 -0.666963, -0.0796286 -0.753076 -0.653097, -0.0770171 -0.748642 -0.658486, -0.0532203 -0.757485 -0.65068, + -0.0451917 -0.746821 -0.663488, -0.0664111 -0.757395 -0.649571, -0.0671495 -0.743931 -0.664874, -0.062676 -0.745773 -0.663245, + -0.0709117 -0.744654 -0.663673, -0.0603161 -0.743595 -0.665904, -0.0648881 -0.744226 -0.664769, + -0.0567343 -0.743914 -0.665863, -0.0534626 -0.750343 -0.658884, -0.0548909 -0.751752 -0.657157, 0.425197 -0.668407 0.610278, + 0.0622688 -0.722744 0.688305, 0.049112 -0.727641 0.684197, -0.32477 -0.683162 0.654075, 0.381321 -0.676416 0.630123, + -0.650823 -0.552772 0.520455, -0.700519 -0.522261 0.48633, -0.329292 -0.684852 0.650034, -0.886173 -0.345742 0.30848, + 0.0439857 -0.727399 0.684804, 0.496074 -0.623823 0.603949, -0.600985 -0.582539 0.547234, -0.335709 -0.683126 0.648566, + -0.853661 -0.385202 0.350545, -0.913919 -0.305545 0.267198, -0.994964 -0.0867638 0.050195, -0.999135 -0.0411605 0.00593202, + -0.953089 0.193887 -0.232442, -0.986613 -0.132146 0.0955618, -0.712745 0.486543 -0.505243, -0.393048 0.631286 -0.668574, + -0.501971 0.598554 -0.624306, -0.931305 0.240087 -0.273914, -0.755954 0.444577 -0.480505, -0.972556 0.14598 -0.181178, + -0.4557 0.613905 -0.64456, -0.797192 0.404706 -0.447993, -0.18906 0.676836 -0.711441, -0.0319646 0.674102 -0.737946, + 0.308954 0.643185 -0.700614, 0.145121 0.682733 -0.716111, 0.621075 0.530597 -0.57683, 0.44705 0.618147 -0.646561, + 0.699744 0.488607 -0.521173, 0.871176 0.32526 -0.367776, -0.0300313 0.703862 -0.709702, 0.317314 0.671521 -0.669605, + 0.618125 0.549481 -0.562132, 0.869627 0.335206 -0.362471, 0.953458 0.194373 -0.230514, 0.994426 0.0449134 -0.0953898, + 0.994649 0.052022 -0.0892551, 0.994304 -0.0913787 0.0548537, 0.994591 0.0611997 -0.0839282, 0.950169 -0.246829 0.190404, + 0.951211 -0.227865 0.208028, 0.630366 -0.568584 0.528536, 0.766315 -0.482173 0.424583, 0.867929 -0.369413 0.332013, + 0.770577 -0.458935 0.442255, -0.0334628 -0.761899 -0.646831, -0.0227044 -0.765177 -0.64342, -0.0398906 -0.757486 -0.651632, + -0.0494873 -0.755464 -0.653319, -0.0501017 -0.758159 -0.650142, -0.0278002 -0.766648 -0.641465, + -0.0362502 -0.770999 -0.635804, -0.0346846 -0.763796 -0.644525, -0.046663 -0.756776 -0.652007, -0.047644 -0.74541 -0.664902, + -0.0452472 -0.745891 -0.664529, -0.0585777 -0.750674 -0.65807, -0.0536347 -0.752602 -0.656287, -0.0287632 -0.757201 -0.652549, + -0.0296924 -0.759128 -0.650264, -0.0339433 -0.755578 -0.654178, -0.0395266 -0.753102 -0.656715, 0.998299 -0.0555912 0.0175853, + 0.998307 -0.0554741 0.0175127, 0.998317 -0.0551894 0.0177976, 0.998298 -0.0556341 0.0174971, 0.998326 -0.0550099 0.0178596, + 0.99833 -0.0547797 0.0183516, -0.00150127 0.686441 -0.727184, -0.00262163 0.686581 -0.727049, -0.000697348 0.685953 -0.727645, + -0.00402359 0.686889 -0.726751, -0.00490324 0.686882 -0.726753, -0.0048828 0.686869 -0.726765, -0.999668 -0.0187411 -0.017709, + -0.999669 -0.0187696 -0.0175822, -0.99967 -0.0185447 -0.0177964, -0.99967 -0.0183139 -0.0180407, + -0.999669 -0.0180719 -0.0183333, -0.999667 -0.0180488 -0.0184417, -0.0162166 0.687764 -0.725753, + -0.0368017 0.685834 -0.726827, -0.0109052 0.689241 -0.72445, 0.00184466 0.691559 -0.722317, 0.00057927 0.692635 -0.721288, + 0.00144207 0.69314 -0.720801, 0.843618 0.363231 -0.395439, 0.845201 0.359877 -0.395125, 0.845691 0.358796 -0.395059, + 0.845665 0.358816 -0.395098, 0.843537 0.36329 -0.395557, 0.845108 0.359964 -0.395244, 0.000529813 0.693665 -0.720298, + 0.00168321 0.691037 -0.722817, -0.00177992 0.692871 -0.721059, 0.000299746 0.69087 -0.722979, 0.00514629 0.68919 -0.724562, + 0.00560346 0.688729 -0.724997, -0.843782 -0.397598 0.360483, -0.843661 -0.397893 0.36044, -0.843655 -0.398333 0.359969, + -0.844018 -0.398844 0.358548, -0.843667 -0.397454 0.36091, -0.842816 -0.396282 0.364174, -0.000807728 -0.723534 0.690288, + 0.000604624 -0.724294 0.689491, 0.00351476 -0.726477 0.687182, -0.00275034 -0.721525 0.692383, 0.00470468 -0.726947 0.686678, + 0.00598004 -0.728084 0.685461, -0.999663 -0.0185291 -0.0181686, -0.999658 -0.0183938 -0.0186003, + -0.999662 -0.0184413 -0.0183338, -0.999665 -0.0186215 -0.0179965, -0.999664 -0.0186878 -0.017961, + -0.999662 -0.0186709 -0.0180839, 0.82373 0.382434 -0.418585, 0.824163 0.382277 -0.417875, 0.825838 0.38116 -0.415582, + 0.823264 0.383002 -0.418981, 0.823656 0.382808 -0.418389, 0.824447 0.382869 -0.416772, 0.0037813 -0.727664 0.685923, + 0.00581811 -0.72721 0.686391, 0.00246632 -0.725611 0.688101, 0.00669407 -0.726662 0.686963, -0.000885591 -0.724001 0.689799, + -0.00730438 -0.72139 0.69249, -0.0837174 -0.716925 -0.692106, -0.0818208 -0.716693 -0.692572, -0.0841214 -0.720421 -0.688417, + -0.080182 -0.727444 -0.681466, -0.0712825 -0.734541 -0.674809, -0.0715372 -0.732768 -0.676708, -0.0663207 -0.736884 -0.672758, + -0.0616564 -0.731893 -0.678625, -0.0638314 -0.727055 -0.683606, -0.0591097 -0.739197 -0.670891, + -0.0534072 -0.741235 -0.669117, -0.0579119 -0.739016 -0.671194, -0.0494164 -0.742506 -0.668014, -0.0442368 -0.74174 -0.669227, + -0.0426267 -0.747599 -0.662782, -0.0866746 -0.706178 -0.702709, -0.0816132 -0.722045 -0.687016, -0.055663 -0.740287 -0.669983, + -0.0496413 -0.737791 -0.673201, -0.0831654 -0.732859 -0.675279, -0.0551933 -0.729582 -0.681663, -0.0730442 -0.72091 -0.689169, + -0.0753648 -0.707803 -0.702378, -0.0470937 -0.730241 -0.681564, -0.0571106 -0.731331 -0.679628, + -0.0523415 -0.725916 -0.685789, -0.0512828 -0.726049 -0.685728, -0.0895572 -0.708505 -0.7, -0.0538846 -0.723414 -0.688308, + -0.94064 -0.259531 0.218722, -0.939894 -0.260596 0.220654, -0.940133 -0.260611 0.219616, -0.939454 -0.261112 0.221917, + -0.939368 -0.260822 0.222621, -0.939322 -0.26108 0.222513, -0.000356521 0.684516 -0.728998, -0.000715711 0.685994 -0.727607, + 0.0040523 0.693254 -0.720682, -0.000622226 0.682744 -0.730657, 0.00180852 0.684778 -0.728749, 0.00325517 0.687989 -0.725714, + 0.936655 0.228591 -0.265373, 0.936403 0.228389 -0.266434, 0.93628 0.228795 -0.266518, 0.936976 0.227707 -0.265003, + 0.937508 0.22706 -0.263672, 0.938359 0.22654 -0.261077, 0.00228957 -0.729706 0.683757, 0.00247518 -0.729583 0.683888, + 0.00153707 -0.729518 0.683959, 0.000209242 -0.729711 0.683756, -0.00169392 -0.73028 0.683145, -0.00101653 -0.729834 0.683623, + 0.939854 0.221626 -0.259915, 0.939893 0.221938 -0.259509, 0.940155 0.222574 -0.25801, 0.939986 0.221751 -0.259332, + 0.940163 0.221976 -0.258495, 0.940545 0.222949 -0.25626, 0.00266064 -0.72492 0.688828, 0.00366343 -0.723791 0.690009, + -0.00249781 -0.728274 0.685281, 0.00208941 -0.724265 0.689518, -0.00721987 -0.729659 0.683773, -0.000775507 -0.72562 0.688095, + 0.0922006 -0.719696 -0.68814, 0.0964493 -0.723628 -0.683418, 0.0929805 -0.720873 -0.686802, 0.0872404 -0.733497 -0.674071, + 0.0952489 -0.733412 -0.673078, 0.0765949 -0.73528 -0.673422, 0.0763421 -0.733034 -0.675894, 0.0723408 -0.731094 -0.678431, + 0.0877653 -0.719062 -0.689381, 0.0805023 -0.721965 -0.68723, 0.0770423 -0.726148 -0.683209, 0.0653589 -0.733928 -0.676075, + 0.0757246 -0.726777 -0.682687, 0.0806068 -0.719203 -0.690108, 0.0901135 -0.721838 -0.68617, -0.939344 -0.261476 0.221952, + -0.939498 -0.260731 0.222179, -0.939371 -0.261775 0.221485, -0.939415 -0.26006 0.223314, -0.939121 -0.259761 0.224891, + -0.939463 -0.259501 0.223761, -0.00135618 0.68907 -0.724694, -0.00059699 0.690249 -0.723572, 0.00451809 0.693785 -0.720168, + -0.00303291 0.68723 -0.726433, -0.00169334 0.687505 -0.726178, -0.000512174 0.688302 -0.725424, 0.939643 0.222363 -0.260048, + 0.939462 0.22301 -0.260148, 0.939575 0.222233 -0.260406, 0.938862 0.224312 -0.261194, 0.938538 0.225416 -0.261409, + 0.937837 0.226266 -0.263183, 0.00510416 -0.721946 0.69193, 0.00420549 -0.72212 0.691755, 0.0059008 -0.721419 0.692474, + 0.00171124 -0.723316 0.690515, -0.00158197 -0.725 0.688747, 0.000413088 -0.723735 0.690077, 0.130683 -0.723346 -0.678007, + 0.119647 -0.722174 -0.681285, 0.123589 -0.725685 -0.676837, 0.118196 -0.718037 -0.685895, 0.116393 -0.724017 -0.679891, + 0.123847 -0.724521 -0.678035, 0.121319 -0.71162 -0.69201, 0.113623 -0.71697 -0.687782, 0.107731 -0.719593 -0.685989, + 0.18141 -0.718132 0.671846, 0.213328 -0.706206 0.675103, -0.166321 -0.731084 0.661705, 0.342782 -0.680379 0.647754, + 0.108256 -0.717739 0.687846, -0.104854 -0.719624 0.686401, -0.213129 -0.683534 0.69811, 0.350489 -0.684843 0.638865, + 0.400707 -0.665739 0.629464, 0.356148 -0.670494 0.650842, 0.361797 -0.685786 0.631506, 0.415541 -0.661068 0.624752, + -0.918643 -0.296681 0.260912, -0.919222 -0.295091 0.260677, -0.918837 -0.297454 0.259344, -0.918676 -0.295638 0.261979, + -0.919332 -0.296285 0.258928, -0.920173 -0.294365 0.25813, -0.920864 -0.297131 0.252435, -0.920275 -0.290545 0.262065, + -0.341669 0.649964 -0.678829, -0.334237 0.625722 -0.70481, -0.406854 0.61842 -0.67233, -0.43267 0.619982 -0.654537, + -0.326478 0.66178 -0.674877, -0.167946 0.685427 -0.708508, -0.0752066 0.683059 -0.726481, -0.00633378 0.6188 -0.785523, + -0.311736 0.649098 -0.693896, 0.273389 0.642822 -0.715569, 0.524585 0.582061 -0.621302, 0.213677 0.672124 -0.708937, + 0.360671 0.607992 -0.707293, 0.584428 0.569571 -0.577956, 0.820818 0.386233 -0.420811, 0.780464 0.42921 -0.454593, + 0.954478 0.201839 -0.219619, 0.959248 0.183023 -0.21528, 0.650244 0.496261 -0.575246, 0.866984 0.32798 -0.375191, + 0.979654 0.0990272 -0.174562, 0.999195 -0.005021 -0.0398046, 0.997928 -0.060362 0.0222896, 0.962882 -0.211511 0.167695, + 0.887573 -0.366934 0.27852, 0.988293 -0.144877 0.0478387, 0.94423 -0.251464 0.212593, 0.769932 -0.47143 0.430068, + 0.713577 -0.517711 0.471999, 0.823247 -0.421349 0.380434, 0.84901 -0.393236 0.352912, 0.745898 -0.499097 0.441065, + 0.679823 -0.537735 0.49868, 0.677235 -0.537596 0.502338, 0.710021 -0.51542 0.479805, 0.74701 -0.486154 0.453465, + 0.853269 -0.387052 0.34946, 0.875243 -0.358476 0.324722, 0.961549 -0.212084 0.174483, 0.777927 -0.463085 0.424714, + 0.999614 -0.0142931 -0.0238287, 0.973676 -0.178741 0.141448, 0.998313 0.0195618 -0.054674, 0.947141 -0.245942 0.206001, + 0.828649 -0.416232 0.374288, 0.998804 -0.0480934 0.00884503, 0.959001 0.179338 -0.219443, 0.958822 0.18091 -0.218935, + 0.841386 0.360423 -0.402697, 0.865942 0.332122 -0.373951, 0.957092 0.187897 -0.22061, 0.609589 0.540426 -0.579949, + 0.662588 0.507824 -0.550538, 0.294914 0.65599 -0.694768, 0.811226 0.393771 -0.432268, 0.556565 0.567353 -0.606915, + 0.127375 0.686219 -0.716156, 0.212454 0.671624 -0.709778, -0.196206 0.675374 -0.710896, -0.315481 0.673881 -0.668099, + -0.366111 0.632297 -0.682761, -0.590641 0.569119 -0.572055, -0.581934 0.559133 -0.590528, -0.615339 0.568939 -0.545588, + -0.714154 0.475078 -0.514087, -0.690206 0.495759 -0.527103, -0.603118 0.524722 -0.600763, 0.950675 0.199494 -0.237527, + 0.950231 0.199862 -0.238989, 0.951101 0.194687 -0.239798, 0.950645 0.202348 -0.235223, 0.950179 0.202175 -0.237245, + 0.949802 0.202044 -0.238861, 0.949857 0.202819 -0.237985, 0.949593 0.201222 -0.240381, 0.466434 -0.660734 0.588107, + 0.438316 -0.665365 0.604291, 0.570618 -0.607488 0.552588, 0.167972 -0.725346 0.667576, 0.458392 -0.649005 0.607182, + 0.651703 -0.555765 0.516147, 0.511334 -0.610368 0.60497, 0.212747 -0.704889 0.676661, -0.320314 -0.688891 0.650252, + -0.393056 -0.667096 0.632843, 0.057013 -0.723464 0.688004, -0.245126 -0.7065 0.663906, -0.681287 -0.537589 0.496835, + -0.726411 -0.504748 0.46643, -0.87766 -0.356889 0.319911, -0.896863 -0.334943 0.288876, -0.97208 -0.183646 0.146066, + -0.632233 -0.571311 0.52334, -0.855279 -0.386232 0.34543, -0.97197 -0.181747 0.149142, -0.972198 -0.185743 0.142583, + -0.999186 0.00363892 -0.040171, -0.99955 -0.0283195 -0.00984423, -0.934878 0.229859 -0.270494, -0.95636 0.187143 -0.224394, + -0.803694 0.402203 -0.438531, -0.996664 0.0338164 -0.0742786, -0.909708 0.272549 -0.313285, -0.752895 0.447473 -0.482615, + -0.848295 0.355124 -0.392789, -0.694778 0.490535 -0.525984, -0.690148 0.493025 -0.529738, -0.775466 0.445101 -0.447814, + -0.724006 0.46911 -0.505719, -0.837569 0.3626 -0.408655, -0.785008 0.416153 -0.458889, -0.95512 0.187185 -0.229583, + -0.870053 0.334619 -0.361991, -0.998829 -0.0471661 0.010726, -0.975699 0.137268 -0.17079, -0.999741 -0.0220403 0.00574693, + -0.948957 -0.242082 0.202182, -0.960503 0.205713 -0.187391, -0.991835 -0.0985157 0.0809772, -0.928546 -0.278886 0.245001, + -0.81642 -0.42641 0.389401, -0.787625 -0.454449 0.416079, -0.64109 -0.56169 0.52298, -0.842931 -0.39974 0.360103, + -0.546864 -0.632032 0.549068, -0.384861 -0.668731 0.636145, -0.934054 -0.269787 0.234003, -0.590063 -0.571006 0.570769, + -0.22051 -0.672388 -0.70659, -0.218463 -0.673298 -0.70636, -0.234039 -0.669969 -0.704533, -0.214427 -0.672524 -0.708331, + -0.238744 -0.675041 -0.698084, -0.156336 -0.720417 -0.675691, -0.155323 -0.725207 -0.670782, -0.150344 -0.723307 -0.673962, + -0.194207 -0.676522 -0.710353, -0.182716 -0.677936 -0.712051, -0.151972 -0.727152 -0.669444, -0.144008 -0.717272 -0.681749, + -0.154182 -0.712128 -0.68491, -0.149877 -0.722622 -0.6748, -0.149355 -0.735015 -0.661397, -0.154432 -0.733393 -0.662031, + -0.154154 -0.732602 -0.662971, -0.161095 -0.723225 -0.671561, -0.147378 -0.735858 -0.660903, -0.122545 -0.744711 -0.656039, + -0.132278 -0.74383 -0.655148, -0.115042 -0.744024 -0.658174, -0.125695 -0.747807 -0.651909, -0.156082 -0.722468 -0.673557, + -0.142187 -0.721551 -0.677603, -0.10938 -0.741199 -0.662315, -0.155305 -0.688963 -0.707962, -0.153001 -0.690875 -0.706599, + -0.168445 -0.680629 -0.713001, -0.170138 -0.682225 -0.711071, -0.135935 -0.704059 -0.69701, -0.135827 -0.710833 -0.690121, + -0.137665 -0.703764 -0.696968, -0.148539 -0.714889 -0.683279, -0.143394 -0.695593 -0.70398, -0.138625 -0.699694 -0.700865, + -0.142947 -0.693338 -0.706292, -0.134595 -0.702958 -0.698379, -0.135703 -0.709355 -0.691665, -0.141808 -0.715331 -0.684245, + -0.0755384 -0.738831 -0.669644, -0.018147 -0.73309 -0.67989, 0.0707649 -0.7141 -0.696457, -0.13446 -0.71175 -0.689444, + -0.131427 -0.714407 -0.687277, -0.132668 -0.741757 -0.657416, -0.118195 -0.737964 -0.664408, 0.00158277 0.688702 -0.725043, + -0.00124619 0.688464 -0.72527, 0.000650121 0.689353 -0.724425, -0.00283109 0.687342 -0.726329, -0.00410456 0.685987 -0.727602, + -0.00550432 0.68698 -0.726655, -0.941964 -0.255167 0.218158, -0.941988 -0.255588 0.217563, -0.941866 -0.255705 0.217953, + -0.942178 -0.255106 0.217306, -0.942382 -0.254537 0.217086, -0.942533 -0.253721 0.217387, 0.0136375 0.686267 -0.727222, + 0.0203455 0.688434 -0.725014, 0.0087271 0.686779 -0.726814, 0.00289889 0.686906 -0.72674, 0.000883934 0.68832 -0.725406, + 0.00286186 0.688884 -0.724866, -0.93852 -0.262136 0.224646, -0.937534 -0.265178 0.225189, -0.937886 -0.264063 0.225036, + -0.937143 -0.26619 0.225625, -0.937181 -0.266293 0.225342, -0.937326 -0.266195 0.224858, 5.05867e-005 -0.726352 0.687323, + -0.000101299 -0.725766 0.687941, -0.000788143 -0.723571 0.690249, 0.0020045 -0.730085 0.683354, 0.00274622 -0.726869 0.68677, + 0.00193983 -0.726096 0.687591, 0.00632581 -0.727913 0.68564, 0.954634 0.192153 -0.227491, 0.954553 0.19208 -0.227889, + 0.95434 0.193159 -0.227872, 0.954949 0.190324 -0.227706, 0.955522 0.187889 -0.227322, 0.954959 0.189913 -0.228004, + -0.00217795 0.685443 -0.728123, -0.00274543 0.685709 -0.727871, 0.00213565 0.685729 -0.727854, 0.00121467 0.688503 -0.725232, + 0.00347856 0.689759 -0.72403, -0.0049409 0.693728 -0.72022, 0.935026 0.230872 -0.269119, 0.934833 0.232363 -0.268504, + 0.935177 0.231145 -0.268359, 0.935125 0.232967 -0.266961, 0.935527 0.229867 -0.268236, 0.935519 0.229926 -0.268214, + -0.108408 -0.731448 -0.673224, -0.10829 -0.73148 -0.673209, -0.107681 -0.732634 -0.672051, -0.0983353 -0.73365 -0.672375, + -0.0975597 -0.726389 -0.680324, -0.107778 -0.72367 -0.681679, -0.103107 -0.737115 -0.667856, -0.0876619 -0.740752 -0.666035, + -0.0857864 -0.735204 -0.672396, -0.0853653 -0.741365 -0.665651, -0.0736118 -0.745307 -0.662645, -0.095879 -0.725026 -0.682015, + -0.103262 -0.724584 -0.681407, -0.0821502 -0.741826 -0.665542, -0.104578 -0.719291 -0.686793, -0.104332 -0.718416 -0.687745, + -0.104955 -0.720471 -0.685497, -0.106868 -0.720022 -0.685673, -0.114656 -0.716449 -0.688153, -0.109888 -0.715588 -0.689825, + -0.0665325 -0.745064 -0.663667, -0.0645428 -0.746072 -0.66273, -0.070228 -0.743936 -0.664551, -0.964056 -0.205966 0.167849, + -0.99911 -0.0419788 0.00402434, -0.981486 -0.153154 0.115014, -0.999458 -0.00369862 -0.0327165, -0.961361 0.175426 -0.21216, + -0.945158 0.211071 -0.24925, -0.963777 -0.206668 0.168591, -0.995906 -0.0800613 0.0419625, -0.973987 0.139722 -0.178402, + -0.860164 0.340941 -0.379311, -0.818424 0.375296 -0.435127, -0.799548 0.401519 -0.44666, -0.59898 0.545775 -0.585963, + -0.447215 0.604535 -0.659193, -0.738849 0.457758 -0.49453, -0.665124 0.509818 -0.545615, -0.664587 0.485505 -0.567987, + -0.180561 0.675965 -0.714471, 0.222561 0.672684 -0.705665, -0.940568 -0.259039 0.219615, -0.940769 -0.25818 0.219766, + -0.940733 -0.258414 0.219646, -0.940773 -0.258032 0.219923, 0.000495646 -0.726602 0.687059, 0.000941184 -0.725313 0.688418, + -0.00500709 -0.721374 0.692528, 0.0018039 -0.729039 0.68447, -0.00073887 -0.728949 0.684567, -0.00108234 -0.728728 0.684803, + 0.930835 0.237941 -0.277364, 0.930695 0.238878 -0.277026, 0.93087 0.237997 -0.277198, 0.930272 0.240037 -0.277445, + 0.940659 0.220357 -0.258077, 0.949604 0.203219 -0.23865, 0.958858 0.180566 -0.219062, 0.979651 0.122056 -0.159333, + 0.984919 0.102574 -0.139332, 0.973527 0.140311 -0.180438, 0.999396 -0.0346252 -0.00282144, 0.997607 -0.0632331 0.0279504, + 0.999372 -0.00327482 -0.0352913, 0.770454 -0.466958 0.433995, 0.924481 -0.286425 0.251587, 0.945602 -0.247533 0.211101, + 0.963736 -0.208069 0.167092, 0.813442 -0.429338 0.392404, 0.730269 -0.501131 0.4643, 0.516314 -0.621101 0.589622, + 0.467954 -0.642106 0.607223, 0.22264 -0.703055 0.675386, 0.164919 -0.712581 0.681931, 0.5608 -0.598719 0.571873, + 0.27804 -0.692214 0.665984, -0.172546 -0.716447 0.675967, -0.115889 -0.714965 0.689489, -0.458549 -0.644728 0.611603, + -0.0542579 -0.716363 0.695615, -0.460428 -0.637801 0.617427, -0.458048 -0.650216 0.606144, -0.745014 -0.48769 0.455097, + -0.702451 -0.522919 0.482824, -0.885464 -0.346825 0.309298, -0.853669 -0.385615 0.350071, -0.786573 -0.453188 0.419432, + -0.914439 -0.304211 0.266941, -0.937863 -0.262674 0.226748, -0.938134 -0.262515 0.225812, -0.937473 -0.2623 0.228787, + -0.938506 -0.262458 0.224328, -0.938293 -0.262828 0.224784, -0.937385 -0.264143 0.227018, -0.937521 -0.263439 0.227276, + -0.937052 -0.264391 0.228102, 0.000587212 -0.729068 0.684441, -0.00211342 -0.729008 0.684502, 0.000385504 -0.729191 0.68431, + -0.000645836 -0.726362 0.687312, 0.00478826 -0.721211 0.692699, -0.00136323 -0.725066 0.688678, 0.939955 0.222282 -0.258988, + 0.939827 0.222143 -0.259571, 0.939743 0.221885 -0.260096, 0.940081 0.222886 -0.258009, 0.91465 0.267619 -0.302977, + 0.885755 0.307961 -0.347273, 0.776752 0.430485 -0.459715, 0.85192 0.352635 -0.387144, 0.714502 0.491897 -0.497519, + 0.688824 0.493187 -0.531309, 0.558092 0.584237 -0.589237, 0.586171 0.558819 -0.586621, 0 0.695225 -0.718792, + 0.221181 0.678807 -0.700214, 0.973279 0.15354 -0.170741, 0.585195 0.606102 -0.53869, 0.718346 0.472871 -0.510267, + 0.827288 0.380226 -0.413548, -0.95431 0.200424 -0.221638, -0.544683 0.59182 -0.594197, -0.0812104 0.693597 -0.715771, + -0.156614 0.678861 -0.71737, -0.293343 0.665924 -0.685927, -0.267926 0.659791 -0.702062, -0.157229 0.679807 -0.716339, + 0.246154 0.659325 -0.710422, 0.189533 0.673408 -0.714562, 0 0.68751 -0.726175, 0.280926 0.678729 -0.678533, + 0.404419 0.645299 -0.648101, 0.397534 0.639813 -0.657728, -0.695662 0.510519 -0.505396, 0.0246771 -0.750157 -0.660799, + 0.0198909 -0.748101 -0.663286, 0.020145 -0.749637 -0.661543, 0.0123153 -0.744306 -0.667725, 0.0128609 -0.747348 -0.664308, + 0.0188447 -0.748908 -0.662406, 0.0220571 -0.744658 -0.667082, 0.0592564 -0.741017 -0.668866, 0.0108464 -0.742779 -0.669449, + -0.0036436 -0.741481 -0.670964, 0.137082 -0.744518 -0.653377, 0.190205 -0.740449 -0.644638, -0.0150234 -0.729853 -0.683439, + -0.041777 -0.730434 -0.681705, -0.0455656 -0.736915 -0.674448, -0.0381444 -0.736847 -0.674982, -0.0361912 -0.732155 -0.680176, + -0.0421658 -0.74691 -0.663587, -0.0355428 -0.74287 -0.668492, -0.032701 -0.738433 -0.673533, -0.0237589 -0.739721 -0.672494, + -0.0101097 -0.747329 -0.664377, -0.0363605 -0.739085 -0.67263, -0.0188758 -0.735901 -0.676826, -0.020967 -0.751699 -0.659173, + -0.0267799 -0.74677 -0.664543, -0.0195438 -0.751734 -0.659177, -0.0191768 -0.751826 -0.659082, -0.0244299 -0.736071 -0.676463, + 0.0183392 -0.740764 -0.671515, -0.0325076 -0.736831 -0.675295, -0.0121405 -0.735697 -0.677202, 0.554021 -0.0461089 0.831225, + -0.0265853 -0.725644 -0.687556, -0.025489 -0.729092 -0.683941, 0.895548 -0.314509 0.314766, -0.00569989 -0.73342 -0.679752, + -0.0218391 -0.732105 -0.680841, -0.0074856 -0.728595 -0.684904, -0.0147035 -0.724543 -0.689073, -0.054973 -0.719802 -0.691999, + 0.991033 0.0721336 -0.112469, 0.870196 0.337576 -0.358889, 0.98196 0.114627 -0.150383, 0.990079 -0.115682 0.0797534, + 0.968612 0.157537 -0.192285, 0.889407 0.305718 -0.339841, 0.843092 0.347195 -0.410672, 0.98328 -0.146364 0.108346, + 0.971637 -0.185009 0.147289, 0.885397 -0.346567 0.309781, 0.823712 -0.419476 0.381495, 0.662284 -0.550832 0.507902, + 0.654887 -0.551498 0.516695, 0.813629 -0.432373 0.388665, 0.609235 -0.586297 0.533937, 0.494048 -0.636991 0.591743, + 0.473737 -0.645623 0.598953, 0.465684 -0.643071 0.607946, 0.34909 -0.678849 0.645987, 0.302819 -0.68613 0.661458, + 0.163133 -0.711941 0.683028, 0.0814565 -0.709456 0.700026, 0.0622656 -0.728281 0.682444, 0.2813 -0.700299 0.656088, + 0.0821209 -0.718592 0.690566, 0.0102177 -0.730075 0.68329, 0.00605552 -0.729509 0.683945, 0.019188 -0.728092 0.68521, + 0.00141842 -0.727135 0.686493, -0.939167 -0.260397 0.223962, -0.939299 -0.260298 0.223522, -0.938879 -0.260215 0.225378, + -0.939563 -0.260476 0.222203, -0.939671 -0.26075 0.221421, -0.939618 -0.260423 0.222032, -0.000799485 0.685391 -0.728175, + -0.000293909 0.685333 -0.72823, -0.000571776 0.685491 -0.728081, -1.80928e-005 0.685131 -0.72842, + -0.00113042 0.68542 -0.728147, 0.104733 0.679295 -0.726353, 0.1015 0.682659 -0.723653, 0.754162 0.444533 -0.483352, + 0.475371 0.592404 -0.650446, 0.411163 0.625697 -0.662909, 0.343168 0.649486 -0.67853, 0.211223 0.674212 -0.707688, + 0.703688 0.492308 -0.512305, 0.800874 0.402067 -0.443782, 0.961141 0.175032 -0.213475, 0.979285 0.124991 -0.159304, + 0.992112 -0.105166 0.0682189, 0.992439 -0.10371 0.0656465, 0.938426 0.22629 -0.261055, 0.991725 -0.10649 0.0717088, + 0.924571 -0.288009 0.249438, 0.734131 -0.491468 0.46852, 0.899675 -0.326631 0.289651, 0.872991 -0.360318 0.328721, + 0.759099 -0.477133 0.442846, 0.535652 -0.611654 0.5822, 0.466561 -0.638577 0.611998, 0.381462 -0.680169 0.625984, + 0.536746 -0.61171 0.581133, 0.711999 -0.511208 0.481377, 0.418366 -0.657547 0.626579, 0.569572 0.567497 -0.594588, + 0.551798 0.591398 -0.588019, 0.518897 0.585474 -0.622869, 0.677324 0.499407 -0.540209, 0.690499 0.482537 -0.538858, + 0.500681 0.590143 -0.633285, 0.562367 0.567495 -0.601409, 0.679755 0.514756 -0.522455, 0.770438 0.42997 -0.470692, + -0.00117286 0.686624 -0.727011, 0.00502653 0.686528 -0.727086, 0.0046681 0.686395 -0.727214, -0.000845775 0.689229 -0.724543, + -0.084501 0.686717 -0.721997, -0.15342 0.68607 -0.711176, 0.944255 0.212392 -0.25154, 0.944376 0.212091 -0.251341, + 0.944247 0.212193 -0.251738, 0.944324 0.212553 -0.251144, 0.944234 0.212835 -0.251244, 0.944454 0.212675 -0.250551, + 0.00312996 -0.721111 0.692812, -0.00456599 -0.72484 0.688902, -0.00799126 -0.726053 0.687592, -0.00848068 -0.725786 0.687868, + -0.17129 -0.712996 0.679924, -0.0804224 -0.720744 0.688521, -0.22362 0.678689 -0.699553, -0.349422 0.650428 -0.674424, + -0.412633 0.63155 -0.656414, -0.646205 0.527275 -0.551724, -0.69243 0.491333 -0.52833, -0.854955 0.34737 -0.385208, + -0.851961 0.349493 -0.389893, -0.96021 0.17701 -0.216019, -0.723962 0.471219 -0.503816, -0.974302 0.140526 -0.176032, + -0.481765 0.599575 -0.639071, -0.946829 0.208754 -0.244819, -0.998591 0.013256 -0.0513898, -0.999653 -0.0197681 -0.0174439, + -0.855015 0.353779 -0.379196, -0.998523 -0.0522297 0.014953, -0.96267 -0.209762 0.171077, -0.947993 -0.242183 0.206534, + -0.853973 -0.385517 0.349438, -0.973418 -0.179802 0.141878, -0.82585 -0.412965 0.383969, -0.366094 -0.675953 0.63958, + -0.238157 -0.701983 0.671194, -0.682883 -0.533083 0.499493, -0.663087 -0.54632 0.511712, -0.43111 -0.657131 0.618323, + -0.87993 -0.355977 0.31465, -0.71392 -0.513567 0.475991, -0.479949 -0.6409 0.59908, 0.0107096 0.687633 -0.725979, + 0.0253134 0.6859 -0.727256, 0.0149619 0.687357 -0.726166, -0.0025894 0.690365 -0.723457, -0.169353 0.687639 -0.706026, + -0.0886434 0.687097 -0.721138, 0.942167 0.217333 -0.255123, 0.94264 0.216683 -0.253927, 0.943581 0.215678 -0.251274, + 0.941509 0.218184 -0.25682, 0.941418 0.218434 -0.256941, 0.94162 0.218234 -0.256369, 0.00710753 -0.726312 0.687329, + 0.0217399 -0.728847 0.684332, 0.00255016 -0.725341 0.688385, -0.0028221 -0.725237 0.688494, -0.132486 -0.723075 0.677945, + -0.123706 -0.719254 0.683645, -0.41344 0.633575 -0.65395, -0.420963 0.628199 -0.654337, -0.648541 0.525252 -0.550914, + -0.699777 0.487829 -0.521857, -0.251425 0.66963 -0.698843, -0.87062 0.329925 -0.364926, -0.857604 0.347466 -0.379186, + -0.964348 0.168936 -0.203701, -0.830482 0.374159 -0.412681, -0.973899 0.141543 -0.177443, -0.422993 0.621158 -0.659728, + -0.687298 0.494987 -0.53161, -0.950122 0.201979 -0.237641, -0.99874 0.0114946 -0.0488533, -0.999655 -0.018323 -0.0188015, + -0.998857 -0.0463559 0.0116181, -0.960233 -0.215288 0.177773, -0.945295 -0.246076 0.214157, -0.850023 -0.38918 0.354964, + -0.972666 -0.183922 0.14175, -0.828395 -0.411504 0.380034, -0.380843 -0.672215 0.63489, -0.265792 -0.702529 0.660157, + -0.680226 -0.535128 0.500929, -0.659914 -0.549173 0.51276, -0.432981 -0.659204 0.614799, -0.87651 -0.361329 0.318074, + -0.712788 -0.513459 0.4778, -0.465643 -0.645488 0.605411, 0.0676703 -0.735782 -0.673829, 0.0825987 -0.727244 -0.681391, + 0.0482411 -0.746759 -0.663342, 0.0484077 -0.74488 -0.66544, 0.0658774 -0.731342 -0.678822, 0.0604138 -0.740806 -0.668997, + 0.0674467 -0.742923 -0.665971, 0.0640944 -0.739087 -0.670554, 0.0515297 -0.752129 -0.656999, 0.0487554 -0.744467 -0.665877, + 0.0314208 -0.756455 -0.65329, 0.0481639 -0.74851 -0.661372, 0.0613879 -0.726519 -0.684399, 0.070886 -0.723884 -0.686271, + 0.0532968 -0.731508 -0.679747, 0.0635201 -0.732156 -0.678169, 0.0646293 -0.736543 -0.673296, 0.0322514 -0.741585 -0.670083, + 0.0357541 -0.739623 -0.672071, 0.0662351 -0.735004 -0.67482, 0.0389689 -0.747719 -0.662871, 0.0508233 -0.7448 -0.665349, + 0.0366942 -0.751978 -0.658166, 0.043445 -0.745666 -0.664902, 0.045474 -0.744586 -0.665976, 0.0614009 -0.736165 -0.674011, + 0.0570301 -0.743178 -0.666659, 0.0269477 -0.756215 -0.653768, 0.0373745 -0.754609 -0.655109, 0.0440946 -0.7381 -0.673249, + 0.0335048 -0.742019 -0.669541, 0.0457187 -0.742619 -0.668152, 0.0349465 -0.738357 -0.673504, 0.0373265 -0.737228 -0.674612, + 0.060444 -0.732831 -0.677721, 0.0553782 -0.730523 -0.680639, 0.0534557 -0.737913 -0.672776, 0.0648701 -0.73228 -0.677907, + 0.0700836 -0.721014 -0.689367, 0.0781224 -0.71583 -0.693891, 0.0982574 -0.701685 -0.705679, 0.0700782 -0.733083 -0.676519, + 0.0510586 -0.736052 -0.674997, 0.0819796 -0.715036 -0.694265, 0.051241 -0.725563 -0.686246, 0.0572097 -0.750383 -0.658522, + 0.044783 -0.731835 -0.680008, 0.0600516 -0.721719 -0.689577, 0.0398932 -0.732146 -0.679979, 0.0517887 -0.727119 -0.684555, + 0.0642681 -0.73119 -0.679139, 0.0500838 -0.736715 -0.674346, 0.0380025 -0.74192 -0.66941, 0.0316972 -0.736818 -0.675348, + 0.0560071 -0.737062 -0.673501, 0.0480143 -0.730212 -0.681531, 0.0328401 -0.730553 -0.682066, 0.0244766 -0.728109 -0.685024, + 0 -0.73962 -0.673024, -0.937703 -0.262729 0.227347, -0.936908 -0.264386 0.228699, -0.938261 -0.262179 0.225672, + -0.937141 -0.264267 0.227882, -0.938949 -0.261818 0.223217, -0.93714 -0.264761 0.227312, 0.0352746 -0.727356 0.685353, + 0.0181298 -0.726295 0.687144, 0.011969 -0.725134 0.688503, -0.000111688 -0.723508 0.690316, -0.00108426 -0.722308 0.69157, + 0.00520824 -0.724092 0.689684, 0.00951695 -0.723954 0.689783, 0.00569856 -0.723121 0.690698, 0.000508305 -0.719863 0.694116, + 0.954324 0.190079 -0.230512, 0.954446 0.190341 -0.229791, 0.954574 0.189775 -0.229724, 0.954691 0.189774 -0.229239, + 0.954316 0.190906 -0.229859, 0.954074 0.191734 -0.230177, 0.0314612 0.685411 -0.727476, 0.0107145 0.685376 -0.728111, + 0.0179943 0.683693 -0.729548, -0.00792121 0.685563 -0.72797, -0.0141436 0.687375 -0.726165, -0.02444 0.686054 -0.72714, + 0.934932 0.231495 -0.268909, 0.934565 0.231267 -0.270377, 0.935092 0.231211 -0.268598, 0.934957 0.231642 -0.268695, + 0.934718 0.231565 -0.269593, 0.93458 0.231491 -0.270134, 0.93437 0.232026 -0.270401, -0.00522351 0.690185 -0.723614, + -0.00670965 0.691233 -0.722601, 0.00221954 0.68704 -0.726616, -0.00482307 0.690752 -0.723076, 0.00787948 0.685545 -0.727987, + -0.000901167 0.68947 -0.724314, -0.942104 -0.254565 0.218257, -0.94194 -0.255384 0.21801, -0.941909 -0.255311 0.21823, + -0.941933 -0.255499 0.217903, -0.942044 -0.25522 0.217752, -0.942086 -0.254909 0.217936, 0.00153832 0.685756 -0.72783, + 0.00720536 0.687169 -0.726462, 0.000690433 0.684889 -0.728647, 0.000269359 0.684965 -0.728576, 0.00246844 0.685284 -0.728272, + 0.00594215 0.687402 -0.726253, -0.0668481 -0.717074 -0.693784, -0.0698836 -0.71301 -0.697663, -0.0641977 -0.715306 -0.695857, + -0.0955277 -0.717314 -0.690171, -0.0606515 -0.714826 -0.696668, -0.0364499 -0.716569 -0.696563, + -0.0416749 -0.709103 -0.703872, -0.0454235 -0.711251 -0.701469, -0.0382704 -0.714421 -0.698669, -0.118121 -0.712616 -0.691539, + -0.0494985 -0.698375 -0.714018, -0.0843471 -0.704271 -0.704903, -0.0512338 -0.697548 -0.714705, + -0.0571162 -0.697169 -0.714628, -0.0655901 -0.695337 -0.715684, -0.0538974 -0.697486 -0.714568, -0.0497186 -0.698296 -0.71408, + -0.204774 -0.72411 -0.658584, -0.0402709 -0.718031 -0.694845, -0.0341849 -0.712394 -0.700947, -0.0423298 -0.698898 -0.713968, + -0.14175 -0.720993 -0.678289, -0.938885 0.225287 -0.26027, -0.93981 0.223086 -0.258824, -0.939501 0.22361 -0.259493, + -0.940346 0.221871 -0.257919, -0.940463 0.22184 -0.257521, -0.940499 0.221643 -0.257556, 0.00018462 -0.7287 0.684834, + -0.000847786 -0.729673 0.683796, 0.0104594 -0.727936 0.685565, -0.00223677 -0.729787 0.683671, 0.00629253 -0.728309 0.68522, + 0.00169005 -0.729971 0.683476, 0.937023 -0.2659 0.226464, 0.940325 -0.258774 0.220965, 0.935128 -0.269293 0.230253, + 0.943803 -0.251148 0.214851, 0.946033 -0.246343 0.210565, 0.942658 -0.253304 0.21733, 0.940062 -0.258604 0.222277, + 0.940197 -0.258875 0.221392, 0.940143 -0.258737 0.221778, 0.940597 -0.258789 0.219786, -0.684259 -0.5338 0.496838, + -0.680546 -0.534605 0.501054, -0.683224 -0.533583 0.498492, -0.690868 -0.531443 0.490173, -0.680841 -0.535394 0.499808, + -0.680665 -0.537034 0.498287, -0.680622 -0.538064 0.497233, -0.679549 -0.53827 0.498477, 0.00457088 -0.725589 0.688113, + -0.00514291 -0.723856 0.689932, 0.001363 -0.727765 0.685826, -0.0117357 -0.721366 0.692455, -0.0214912 -0.720244 0.693388, + -0.0184135 -0.72031 0.693408, 0.679815 0.496827 -0.539458, 0.681633 0.498191 -0.535894, 0.682604 0.497755 -0.535063, + 0.68192 0.499458 -0.534347, 0.680547 0.5 -0.53559, 0.68384 0.500703 -0.530716, 0.68178 0.500867 -0.533206, + 0.685122 0.500899 -0.528875, 0.686853 0.500137 -0.527347, 0.940643 -0.259004 0.219335, 0.941509 -0.258142 0.216617, + 0.94058 -0.258463 0.220243, 0.940277 -0.258217 0.221816, 0.940531 -0.257394 0.221697, 0.940613 -0.257406 0.221337, + 0.0133751 0.686045 -0.727437, 0.00711215 0.687076 -0.726551, 0.0118996 0.685805 -0.727688, -0.000837098 0.687482 -0.726201, + -0.0064677 0.688406 -0.725297, -0.0104719 0.687235 -0.72636, -0.940471 0.221422 -0.257852, -0.940186 0.222232 -0.258191, + -0.93973 0.223999 -0.258325, -0.940957 0.219828 -0.257441, -0.941115 0.219511 -0.257134, -0.941193 0.219221 -0.257094, + 0.690046 0.492803 -0.530078, 0.712787 0.471231 -0.519496, 0.689945 0.489922 -0.532872, 0.656816 0.517741 -0.548212, + 0.662789 0.51383 -0.544693, 0.677487 0.497996 -0.541305, 0.682368 0.49681 -0.536241, 0.684447 0.494874 -0.535381, + 0.683659 0.495874 -0.535462, 0.681457 0.496615 -0.537577, 0.00293419 0.694151 -0.719823, -0.00290225 0.69389 -0.720075, + 0.00185014 0.694553 -0.719439, -0.00209548 0.691017 -0.722835, 0.00427046 0.685901 -0.727683, -0.00515248 0.689638 -0.724136, + -0.681316 -0.538805 0.495477, -0.681617 -0.53813 0.495797, -0.682471 -0.536205 0.496706, -0.680399 -0.540836 0.494524, + -0.682592 -0.535922 0.496845, -0.682966 -0.535066 0.497255, 0.0354072 -0.714887 -0.698343, 0.0245877 -0.719655 -0.693896, + 0.0378463 -0.71094 -0.702233, 0.0422376 -0.704231 -0.708713, 0.0443863 -0.704613 -0.708202, 0.0806375 -0.706186 -0.703419, + 0.0134123 -0.702477 -0.71158, 0.0143899 -0.702942 -0.711101, 0.0240485 -0.707144 -0.706661, 0.011897 -0.712921 -0.701144, + 0.00952922 -0.702262 -0.711855, 0.0282018 -0.70129 -0.712318, 0.0180316 -0.689233 -0.724316, 0.0151793 -0.690134 -0.723523, + 0.0171566 -0.689442 -0.724138, 0.0227738 -0.687463 -0.725863, 0.0199133 -0.696256 -0.717517, 0.0118596 -0.692385 -0.721431, + 0.0170748 -0.693589 -0.720169, 0.0375835 -0.69777 -0.715335, 0.0474845 -0.698926 -0.713616, -0.00566008 -0.696214 -0.717812, + -0.0171998 -0.692308 -0.721397, -0.0242791 -0.690772 -0.722665, -0.0200105 -0.689784 -0.723739, -0.0623575 -0.70589 -0.705571, + -0.0109473 -0.706039 -0.708088, -0.000979364 -0.706375 -0.707837, -0.0139363 -0.71041 -0.70365, + -0.0176352 -0.708575 -0.705415, -0.030242 -0.711935 -0.701594, -0.0323972 -0.690833 -0.722288, -0.0334359 -0.684327 -0.728408, + -0.0305335 -0.688685 -0.724417, -0.0350922 -0.681975 -0.730533, -0.0355483 -0.68034 -0.732034, -0.0340009 -0.681382 -0.731138, + 0.00379068 -0.699682 -0.714445, 0.00323493 -0.704583 -0.709614, -0.0979689 -0.723493 0.683345, -0.365272 -0.681769 0.633851, + -0.311525 -0.692342 0.650857, -0.551897 -0.60973 0.568893, -0.595179 -0.590017 0.545565, -0.150832 -0.719298 0.67813, + -0.0439329 -0.730034 0.681997, -0.258032 -0.705106 0.660488, -0.813333 -0.429625 0.392316, -0.633871 -0.565974 0.527144, + -0.842922 -0.396382 0.363817, -0.92848 -0.280752 0.243113, -0.895783 -0.331635 0.295957, -0.782028 -0.460535 0.419927, + -0.928478 -0.280452 0.243466, -0.955783 -0.224798 0.189593, -0.955573 -0.225491 0.189827, -0.974996 -0.174768 0.137252, + -0.989153 -0.120627 0.0838173, -0.997418 -0.0658249 0.0287089, -0.995811 0.0411382 -0.0816635, -0.985563 0.100161 -0.136508, + -0.848319 0.356907 -0.391116, -0.969036 0.156379 -0.191091, -0.803517 0.403648 -0.437525, -0.454842 0.609116 -0.64969, + -0.755131 0.442116 -0.484056, -0.521201 0.587928 -0.61862, -0.16176 0.68011 -0.715041, -0.238703 0.666393 -0.706357, + -0.382742 0.630939 -0.674851, -0.0706369 0.689601 -0.720737, 0.0179992 0.693159 -0.72056, 0.0180565 0.69281 -0.720894, + 0.0610275 0.68899 -0.722197, 0.100563 0.687956 -0.718752, 0.256691 0.659363 -0.706647, 0.149898 0.677753 -0.719848, + 0.310136 0.654009 -0.689992, 0.362355 0.647581 -0.670326, 0.593572 0.552851 -0.584831, 0.634624 0.529449 -0.562971, + 0.549144 0.568138 -0.612911, 0.782161 0.42363 -0.456905, 0.81514 0.392797 -0.425743, 0.928826 0.243384 -0.279368, + 0.84393 0.36123 -0.396603, 0.895751 0.295381 -0.332236, 0.928435 0.242973 -0.281021, 0.974826 0.13905 -0.174296, + 0.954478 0.192909 -0.227505, 0.989269 0.08391 -0.119604, 0.95482 0.19159 -0.227181, 0.985632 -0.13668 0.0992432, + 0.997474 0.0294097 -0.0646623, 0.969825 -0.189969 0.152813, 0.805952 -0.435198 0.401302, 0.756664 -0.475231 0.449016, + 0.995622 -0.0825615 0.0438192, 0.849742 -0.38908 0.355747, 0.424731 -0.656332 0.623564, 0.469632 -0.645368 0.60245, + 0.196824 -0.707637 0.678609, 0.0249403 -0.723301 0.690083, 0.184272 -0.703104 0.686796, 0.520215 -0.623654 0.583466, + 0.156941 -0.715514 0.680742, 0.000255357 -0.72855 0.684993, -0.00119826 -0.726158 0.687527, 0.30315 0.653791 -0.693295, + 0.356389 0.645265 -0.675737, 0.111192 0.686016 -0.71904, 0.59355 0.55335 -0.584382, 0.542095 0.572957 -0.614697, + 0.162516 0.68321 -0.711908, 0.261501 0.667268 -0.697403, 0.0645851 0.693625 -0.717435, 0.842943 0.355496 -0.403819, + 0.635374 0.531165 -0.560503, 0.816172 0.390265 -0.426094, 0.897015 0.291918 -0.331885, 0.938253 0.224107 -0.263548, + 0.7865 0.418625 -0.45406, 0.918045 0.262935 -0.296746, 0.954976 0.190122 -0.22776, 0.955413 0.189276 -0.22663, + 0.983294 0.108426 -0.14621, 0.983215 0.109732 -0.145765, 0.997464 0.0291251 -0.0649405, 0.995944 -0.0791263 0.0428273, + 0.985891 -0.135492 0.0982883, 0.969547 -0.190483 0.153929, 0.751391 -0.484862 0.447571, 0.804234 -0.438342 0.401329, + 0.849265 -0.392782 0.352805, 0.450972 -0.650205 0.611439, 0.517194 -0.625796 0.583858, 0.153124 -0.71675 0.68031, + 0.240853 -0.707717 0.664174, 0.379442 -0.679408 0.628036, 0.0762445 -0.726826 0.682577, -0.00342311 -0.724708 0.689048, + 0.00451744 -0.722457 0.691401, -0.102946 -0.718325 0.688049, -0.050951 -0.721204 0.690846, -0.15591 -0.71172 0.684943, + -0.255274 -0.696683 0.670423, -0.310808 -0.688716 0.655033, -0.367061 -0.675797 0.639191, -0.6342 -0.563819 0.529054, + -0.59547 -0.589325 0.545995, -0.547115 -0.612748 0.570268, -0.783876 -0.460727 0.416257, -0.813009 -0.4287 0.393996, + -0.928584 -0.278246 0.245583, -0.893753 -0.332224 0.301385, -0.840943 -0.398841 0.365707, -0.928415 -0.279469 0.244833, + -0.954194 -0.230042 0.191297, -0.954459 -0.228652 0.19164, -0.974904 -0.174972 0.13765, -0.955083 -0.22622 0.191418, + -0.985758 0.098454 -0.136341, -0.969183 0.154164 -0.192138, -0.997524 -0.0644185 0.0282007, -0.804724 0.401187 -0.437571, + -0.997461 -0.0652308 0.0285702, -0.995777 0.0442888 -0.080417, -0.849555 0.354895 -0.390265, -0.755881 0.443698 -0.481432, + -0.381232 0.631298 -0.67537, -0.453164 0.610677 -0.649397, -0.234066 0.666488 -0.707818, -0.0795629 0.685362 -0.723843, + -0.519698 0.587511 -0.620278, -0.158921 0.67988 -0.715896, 0.00401594 0.690087 -0.723715, -0.00544108 0.687416 -0.726244, + 0.14067 -0.674815 -0.724456, 0.140482 -0.681779 -0.717943, 0.131884 -0.696311 -0.70552, 0.13896 -0.681186 -0.718802, + 0.143194 -0.682828 -0.716409, 0.136224 -0.68302 -0.717584, 0.138264 -0.683452 -0.716782, 0.123055 -0.696344 -0.70708, + 0.128806 -0.694233 -0.708131, 0.128301 -0.695988 -0.706498, 0.13079 -0.668343 -0.732264, 0.13471 -0.669221 -0.730751, + 0.137062 -0.669797 -0.729785, 0.118825 -0.701783 -0.702411, 0.118058 -0.692784 -0.711416, 0.110956 -0.696367 -0.709057, + 0.120252 -0.689164 -0.714558, 0.124077 -0.690272 -0.712832, 0.120507 -0.694161 -0.709661, 0.1061 -0.705604 -0.700618, + 0.127002 -0.683767 -0.718563, 0.128162 -0.684362 -0.717791, 0.125607 -0.688733 -0.714052, 0.123811 -0.691937 -0.711262, + 0.0976269 -0.702904 -0.704553, 0.105059 -0.694178 -0.712095, 0.0938674 -0.71186 -0.696021, 0.0961933 -0.709239 -0.698375, + 0.106354 -0.72805 -0.677224, 0.125356 -0.686111 -0.716615, 0.111921 -0.702716 -0.702613, 0.0989695 -0.700071 -0.707181, + 0.120924 -0.667996 -0.734274, 0.0969083 -0.694815 -0.71263, 0.0832791 -0.719739 -0.689232, 0.110358 -0.675838 -0.728742, + 0.103171 -0.677492 -0.728258, 0.0951016 -0.682654 -0.724527, 0.0969636 -0.683219 -0.723747, 0.0958334 -0.688419 -0.718955, + 0.0965966 -0.694392 -0.713084, 0.113321 -0.674969 -0.729092, 0.104887 -0.689222 -0.716918, 0.0985798 -0.698068 -0.709213, + 0.0996535 -0.695932 -0.711159, 0.0955343 -0.695455 -0.71219, 0.0980057 -0.696138 -0.711187, 0.0942549 -0.698495 -0.709381, + 0.0954556 -0.696563 -0.711117, 0.0957124 -0.693164 -0.714397, 0.0939675 -0.692841 -0.714942, 0.049043 -0.72652 0.685392, + 0.00210167 -0.722174 0.691709, 0.1362 -0.715486 0.685222, 0.00307393 -0.719756 0.69422, -0.0360779 -0.71981 0.693233, + -0.0173079 -0.719728 0.69404, 0.148955 0.662103 -0.73446, 0.387942 0.628219 -0.674419, 0.18826 0.672455 -0.715795, + 0.513957 0.559104 -0.650578, 0.306542 0.654378 -0.691247, 0.722951 0.46672 -0.509426, 0.844109 0.324419 -0.426888, + 0.936736 0.22083 -0.271587, 0.997552 -0.0317376 -0.0623168, 0.638875 0.525661 -0.561712, 0.0632711 0.686613 -0.724265, + 0.876712 0.321707 -0.357603, 0.993583 0.0661842 -0.0917153, 0.999194 -0.0397648 -0.00546689, 0.925573 -0.291193 0.241912, + 0.891131 -0.337993 0.302731, 0.732024 -0.497792 0.465128, 0.695144 -0.517456 0.499013, 0.249394 -0.703201 0.665815, + 0.182647 -0.704971 0.685314, 0.528916 -0.616382 0.583371, 0.356896 -0.67101 0.649901, 0.959252 -0.206889 0.192438, + 0.768568 -0.459564 0.445089, 0.451674 -0.644467 0.616971, 0.00308179 0.687782 -0.72591, -0.0218386 0.689765 -0.723704, + -0.140545 0.690253 -0.709787, -0.0887416 0.686396 -0.721793, -0.989103 -0.12094 0.0839592, -0.957323 -0.223002 0.183857, + -0.982609 -0.143311 0.118078, -0.998989 0.017477 -0.041413, -0.986057 0.100888 -0.132337, -0.904372 0.281399 -0.320821, + -0.961359 -0.212757 0.174711, -0.995654 -0.0835107 0.0412112, -0.954755 0.197009 -0.22278, -0.821045 0.388705 -0.418083, + -0.501065 0.598562 -0.625026, -0.677967 0.498067 -0.540639, -0.33567 0.648429 -0.683276, -0.218178 0.679225 -0.700751, + -0.733566 0.463829 -0.496733, -0.360293 0.646972 -0.672024, -0.063864 -0.718312 0.692784, -0.0527281 -0.719126 0.692877, + -0.101128 -0.718676 0.687952, -0.131817 -0.713264 0.688389, -0.16167 -0.708043 0.687414, -0.173241 -0.712919 0.67951, + -0.132989 -0.719847 0.681274, 0.770906 -0.443254 0.457417, 0.962546 -0.1848 0.198377, 0.911993 -0.288199 0.291908, + 0.453726 -0.627608 0.632646, 0.666667 -0.524827 0.529257, 0.324509 -0.669941 0.667738, 0.203139 -0.696028 0.688679, + 0.138022 -0.702012 0.698662, 0.799435 -0.433568 0.415839, 0.466184 -0.629897 0.62121, 0.999918 -0.00860781 0.00947145, + 0.844939 0.378414 -0.377995, 0.670242 0.524519 -0.52503, 0.685408 0.515203 -0.51457, 0.289963 0.678007 -0.675447, + 0.405578 0.643805 -0.648861, 0.991949 0.0927675 -0.086208, 0.88408 0.334312 -0.326556, 0.926595 0.264949 -0.266876, + 0.976395 0.143351 -0.161562, 0.0526135 0.70979 -0.702446, 0.172249 0.69745 -0.695625, 0.979362 -0.153915 0.130999, + 0.885224 0.321378 -0.336295, 0.86434 0.359059 -0.352126, 0.746087 0.476963 -0.464608, 0.105698 -0.706236 0.700042, + 0.602469 0.566508 -0.562228, 0.138858 0.696297 -0.704194, 0.779533 0.436044 -0.449661, 0.390999 0.641189 -0.6603, + 0.000809791 0.711147 -0.703043, -0.107057 0.70172 -0.704363, 0.00243889 0.711148 -0.703039, -0.0672485 0.709371 -0.70162, + -0.174783 0.694254 -0.698185, -0.254405 0.684282 -0.683401, -0.369914 0.650404 -0.663429, -0.566364 0.581145 -0.584382, + -0.690402 0.506089 -0.516932, -0.478787 0.610013 -0.631386, -0.798318 0.423099 -0.428574, -0.385888 -0.644489 0.660095, + -0.109268 -0.689523 0.715974, -0.178665 -0.690537 0.700884, -0.999508 0.024667 -0.0193782, -0.958434 0.20837 -0.194903, + -0.990662 -0.080892 0.109752, -0.499999 -0.592175 0.631926, -0.826379 -0.382493 0.413276, -0.929586 -0.257451 0.263796, + -0.907296 0.295591 -0.299064, -0.708189 -0.495733 0.50271, -0.971806 0.157112 -0.175808, -0.787957 0.427513 -0.443121, + -0.986171 -0.124091 0.109855, -0.849625 -0.376191 0.369619, -0.616683 -0.560855 0.552398, -0.292728 -0.677732 0.674529, + -0.0805232 -0.70456 0.705061, 0.00120004 -0.705431 0.708778, 0.00240902 -0.702846 0.711338, 0.952858 0.198478 -0.229497, + 0.927425 0.247902 -0.280048, 0.937872 0.229192 -0.260512, 0.950598 0.199662 -0.237693, 0.933174 0.236544 -0.270615, + 0.932369 0.237718 -0.272356, 0.842469 0.3683 -0.393194, 0.943403 0.219517 -0.248603, 0.934731 0.237486 -0.264346, + 0 0.713964 -0.700182, -0.955065 -0.22669 0.190952, -0.955079 -0.226462 0.191153, -0.938163 -0.262736 0.225433, + -0.91793 -0.297703 0.262254, -0.782724 -0.455269 0.424351, -0.813507 -0.429799 0.391765, -0.592858 -0.589064 0.549111, + -0.895279 -0.333485 0.295403, -0.842604 -0.399594 0.361031, -0.634851 -0.570672 0.520862, -0.54899 -0.609664 0.571769, + -0.311451 -0.693085 0.6501, -0.262 -0.703329 0.660821, -0.0525481 -0.721989 0.689906, -0.160128 -0.720087 0.675155, + -0.36025 -0.680045 0.63856, -0.107394 -0.724841 0.680494, -0.000610382 -0.724849 0.688907, -3.7842e-005 -0.723427 0.690401, + -0.00417142 -0.72907 0.684427, -0.000375491 -0.723069 0.690776, 0.956156 0.188226 -0.224357, 0.955241 0.18934 -0.227298, + 0.955345 0.189378 -0.226832, 0.955163 0.189344 -0.227624, 0.95548 0.188751 -0.226783, 0.955923 0.188238 -0.225338, + -0.00457604 0.687045 -0.726601, -0.00163598 0.68683 -0.726816, -0.00470547 0.686895 -0.726742, 0.001324 0.686635 -0.727001, + 0.055764 0.685651 -0.725792, 0.102595 0.684944 -0.721336, 0.307331 0.652778 -0.692408, 0.364394 0.644944 -0.671763, + 0.593387 0.554062 -0.583872, 0.545458 0.572252 -0.612375, 0.150523 0.676271 -0.721111, 0.253547 0.658974 -0.708144, + 0.843875 0.359144 -0.398611, 0.633132 0.532016 -0.56223, 0.814831 0.392988 -0.426159, 0.89799 0.292145 -0.329036, + 0.782053 0.423809 -0.456923, 0.0763798 -0.697668 -0.712338, 0.0831458 -0.68041 -0.728099, 0.0825651 -0.683948 -0.724844, + 0.0857297 -0.665942 -0.741061, 0.0777349 -0.678726 -0.730266, 0.0703014 -0.700749 -0.709936, 0.0682564 -0.69883 -0.712023, + 0.0695515 -0.699014 -0.711717, 0.069087 -0.705279 -0.705556, 0.07126 -0.697443 -0.713089, 0.0910719 -0.663527 -0.742588, + 0.0656747 -0.709499 -0.70164, 0.0747787 -0.6884 -0.721467, 0.0683655 -0.707295 -0.703604, 0.0739144 -0.697259 -0.712998, + 0.0683268 -0.697195 -0.713618, 0.0915574 -0.661912 -0.743969, 0.0722544 -0.703016 -0.707494, 0.0832736 -0.704406 -0.704895, + 0.0850977 -0.704565 -0.704519, 0.0839023 -0.704947 -0.70428, 0.0819105 -0.709651 -0.699776, 0.0680447 -0.710048 -0.700858, + 0.0754235 -0.708007 -0.702166, 0.0642022 -0.710596 -0.700665, 0.0579975 -0.714792 -0.696928, 0.0677831 -0.71073 -0.700192, + 0.0536002 -0.719019 -0.69292, 0.0589622 -0.700147 -0.71156, 0.0584444 -0.70954 -0.702238, 0.0552729 -0.701303 -0.710717, + 0.0622194 -0.699558 -0.711862, 0.0470835 -0.716502 -0.695995, 0.0554723 -0.707259 -0.704775, 0.0394568 -0.711327 -0.701753, + 0.095389 -0.679728 -0.727235, 0.104963 -0.676257 -0.72915, 0.0772833 -0.688406 -0.721196, 0.0773206 -0.673219 -0.73539, + 0.0425686 -0.693253 -0.719436, 0.0394555 -0.694028 -0.718866, 0.0515751 -0.687425 -0.724422, 0.0545326 -0.688603 -0.723085, + 0.0700759 -0.69418 -0.716383, 0.0444139 -0.684011 -0.728118, 0.052037 -0.6679 -0.742429, 0.0456044 -0.683523 -0.728503, + 0.0516251 -0.692118 -0.719935, 0.0537539 -0.692329 -0.719577, 0.0415601 -0.694388 -0.7184, 0.0294833 -0.692801 -0.720526, + 0.0584571 -0.6876 -0.723732, 0.0386614 -0.70533 -0.707824, 0.0365234 -0.705221 -0.708046, 0.0577506 -0.694532 -0.71714, + -0.0354052 -0.759718 -0.649288, 0.0481309 -0.714114 -0.698372, 0.0557562 -0.705426 -0.706587, 0.121756 -0.667729 -0.73438, + 0.0331212 -0.711383 -0.702024, 0.120359 -0.636131 -0.762136, 0.0267159 -0.717864 -0.695671, 0.036002 -0.714166 -0.69905, + 0.0421569 -0.703305 -0.709637, 0.01983 -0.725465 -0.687973] + } + coordIndex [ + 41, 6, 42, -1,40, 8, 41, -1,598, 68, 37, -1,599, 69, 37, -1,516, 39, 38, -1,88, 87, + 83, -1,80, 38, 68, -1,40, 39, 9, -1,37, 69, 598, -1,36, 96, 37, -1,70, 599, 37, -1, + 38, 37, 68, -1,68, 89, 81, -1,70, 37, 96, -1,88, 81, 89, -1,71, 70, 96, -1,43, 42, + 4, -1,75, 74, 73, -1,87, 86, 85, -1,76, 72, 94, -1,75, 73, 72, -1,83, 87, 85, -1, + 97, 36, 100, -1,97, 100, 99, -1,99, 98, 97, -1,97, 96, 36, -1,72, 96, 95, -1,93, + 519, 94, -1,95, 94, 72, -1,76, 75, 72, -1,96, 72, 71, -1,3, 0, 43, -1,101, 100, 36, -1, + 35, 51, 50, -1,35, 52, 51, -1,49, 47, 50, -1,102, 36, 35, -1,53, 52, 55, -1,46, 102, + 35, -1,50, 47, 35, -1,55, 52, 35, -1,35, 34, 56, -1,32, 19, 33, -1,34, 33, 521, -1, + 30, 22, 31, -1,28, 25, 29, -1,30, 29, 24, -1,32, 31, 20, -1,47, 46, 35, -1,102, 101, + 36, -1,102, 46, 45, -1,103, 102, 45, -1,520, 104, 44, -1,103, 45, 104, -1,104, 45, + 44, -1,35, 56, 55, -1,53, 55, 54, -1,65, 67, 66, -1,58, 57, 34, -1,34, 57, 56, -1, + 67, 520, 44, -1,49, 48, 47, -1,92, 91, 93, -1,1, 0, 3, -1,41, 8, 514, -1,81, 88, + 82, -1,4, 512, 43, -1,42, 5, 4, -1,9, 515, 40, -1,515, 8, 40, -1,41, 514, 6, -1,6, + 513, 42, -1,43, 512, 3, -1,80, 79, 518, -1,83, 85, 84, -1,76, 94, 518, -1,83, 82, + 88, -1,79, 78, 518, -1,77, 76, 518, -1,518, 78, 77, -1,93, 91, 90, -1,517, 516, 38, -1, + 5, 42, 513, -1,3, 512, 4, -1,6, 514, 7, -1,8, 515, 9, -1,7, 514, 8, -1,5, 513, 6, -1, + 11, 516, 517, -1,516, 9, 39, -1,517, 80, 12, -1,12, 80, 518, -1,9, 516, 10, -1,38, + 80, 517, -1,516, 11, 10, -1,518, 13, 12, -1,517, 12, 11, -1,518, 94, 13, -1,2, 1, + 3, -1,519, 13, 94, -1,65, 64, 67, -1,90, 105, 519, -1,520, 64, 63, -1,67, 64, 520, -1, + 15, 519, 104, -1,90, 519, 93, -1,59, 61, 60, -1,520, 59, 58, -1,61, 59, 62, -1,58, + 34, 521, -1,22, 524, 31, -1,62, 59, 520, -1,521, 16, 58, -1,520, 58, 16, -1,19, 522, + 33, -1,523, 19, 32, -1,522, 17, 521, -1,521, 33, 522, -1,520, 63, 62, -1,32, 20, + 523, -1,104, 520, 15, -1,519, 105, 104, -1,19, 523, 20, -1,524, 21, 20, -1,20, 31, + 524, -1,15, 520, 16, -1,17, 522, 18, -1,16, 521, 17, -1,19, 18, 522, -1,30, 23, 525, -1, + 24, 29, 526, -1,25, 28, 27, -1,25, 27, 26, -1,525, 22, 30, -1,526, 29, 25, -1,525, + 23, 22, -1,526, 25, 24, -1,23, 30, 24, -1,22, 21, 524, -1,14, 519, 15, -1,14, 13, + 519, -1,81, 80, 68, -1,28, 143, 106, -1,143, 142, 107, -1,141, 140, 110, -1,531, + 139, 138, -1,112, 140, 139, -1,109, 142, 141, -1,528, 107, 142, -1,28, 106, 27, -1, + 143, 107, 527, -1,529, 109, 141, -1,140, 530, 110, -1,141, 110, 529, -1,531, 138, + 532, -1,113, 531, 532, -1,530, 140, 112, -1,139, 531, 112, -1,528, 142, 109, -1,106, + 143, 527, -1,533, 532, 138, -1,533, 137, 136, -1,534, 136, 135, -1,536, 134, 133, -1, + 132, 131, 123, -1,122, 133, 132, -1,134, 535, 135, -1,534, 135, 535, -1,116, 533, + 534, -1,130, 125, 131, -1,119, 535, 536, -1,535, 118, 534, -1,535, 134, 536, -1,129, + 0, 128, -1,0, 1, 128, -1,127, 130, 129, -1,133, 537, 536, -1,533, 136, 534, -1,533, + 138, 137, -1,533, 115, 532, -1,107, 528, 108, -1,106, 527, 107, -1,529, 110, 109, -1, + 530, 112, 111, -1,530, 111, 110, -1,108, 528, 109, -1,532, 114, 113, -1,533, 116, + 115, -1,532, 115, 114, -1,118, 535, 119, -1,534, 118, 117, -1,116, 534, 117, -1,112, + 531, 113, -1,120, 119, 536, -1,537, 133, 122, -1,123, 131, 539, -1,125, 130, 540, -1, + 538, 132, 123, -1,126, 540, 130, -1,127, 541, 128, -1,128, 1, 2, -1,127, 129, 541, -1, + 541, 129, 128, -1,538, 122, 132, -1,539, 131, 125, -1,538, 123, 122, -1,537, 121, + 120, -1,121, 537, 122, -1,126, 130, 127, -1,539, 125, 124, -1,125, 540, 126, -1,539, + 124, 123, -1,537, 120, 536, -1,26, 27, 106, -1,542, 144, 184, -1,14, 184, 144, -1, + 183, 542, 184, -1,542, 183, 182, -1,181, 180, 544, -1,543, 182, 181, -1,182, 543, + 147, -1,180, 148, 544, -1,543, 181, 147, -1,544, 148, 181, -1,542, 182, 146, -1,547, + 163, 117, -1,546, 165, 164, -1,547, 164, 163, -1,546, 159, 165, -1,167, 600, 158, -1, + 159, 166, 165, -1,545, 166, 158, -1,117, 162, 547, -1,164, 159, 546, -1,547, 162, + 160, -1,547, 160, 164, -1,600, 545, 158, -1,600, 166, 545, -1,146, 144, 542, -1,150, + 178, 177, -1,174, 152, 603, -1,174, 26, 153, -1,176, 604, 151, -1,176, 150, 177, -1, + 146, 182, 147, -1,180, 179, 148, -1,147, 181, 148, -1,178, 150, 149, -1,175, 152, + 151, -1,176, 151, 150, -1,179, 149, 148, -1,146, 145, 144, -1,152, 174, 153, -1,173, + 172, 154, -1,26, 173, 153, -1,154, 172, 171, -1,157, 169, 168, -1,170, 601, 156, -1, + 171, 602, 155, -1,173, 154, 153, -1,171, 155, 154, -1,604, 175, 151, -1,169, 157, + 156, -1,603, 152, 175, -1,602, 170, 156, -1,158, 166, 159, -1,160, 162, 161, -1,155, + 602, 156, -1,159, 164, 160, -1,157, 167, 158, -1,168, 167, 157, -1,605, 178, 149, -1, + 605, 149, 179, -1,601, 169, 156, -1,548, 205, 144, -1,549, 204, 211, -1,548, 204, + 205, -1,205, 14, 144, -1,550, 203, 213, -1,549, 203, 204, -1,615, 203, 550, -1,214, + 202, 615, -1,549, 213, 203, -1,202, 215, 614, -1,200, 217, 199, -1,144, 210, 548, -1, + 548, 211, 204, -1,117, 185, 162, -1,187, 188, 551, -1,186, 187, 552, -1,185, 186, + 553, -1,225, 608, 192, -1,191, 226, 607, -1,187, 230, 552, -1,551, 229, 187, -1,186, + 552, 231, -1,228, 188, 189, -1,162, 553, 232, -1,553, 162, 185, -1,551, 188, 228, -1, + 186, 231, 553, -1,192, 193, 224, -1,189, 606, 227, -1,190, 227, 606, -1,612, 217, + 218, -1,216, 201, 215, -1,200, 216, 217, -1,219, 220, 197, -1,218, 219, 198, -1,610, + 221, 196, -1,202, 214, 215, -1,208, 209, 206, -1,145, 206, 209, -1,209, 144, 145, -1, + 208, 206, 207, -1,213, 214, 550, -1,549, 212, 213, -1,212, 549, 211, -1,223, 193, + 609, -1,211, 548, 210, -1,144, 209, 210, -1,194, 195, 222, -1,221, 222, 195, -1,195, + 196, 221, -1,194, 222, 223, -1,224, 193, 223, -1,227, 190, 226, -1,226, 191, 225, -1, + 225, 192, 224, -1,227, 228, 189, -1,230, 187, 229, -1,232, 553, 231, -1,552, 230, + 231, -1,233, 162, 232, -1,233, 234, 236, -1,235, 236, 234, -1,225, 191, 608, -1,236, + 161, 233, -1,233, 161, 162, -1,551, 228, 229, -1,609, 194, 223, -1,220, 610, 197, -1, + 221, 610, 220, -1,226, 190, 607, -1,198, 219, 611, -1,197, 611, 219, -1,217, 612, + 199, -1,198, 612, 218, -1,201, 216, 613, -1,200, 613, 216, -1,215, 201, 614, -1,214, + 615, 550, -1,554, 153, 154, -1,554, 154, 155, -1,556, 156, 157, -1,557, 157, 158, -1, + 156, 555, 155, -1,555, 156, 556, -1,249, 554, 555, -1,250, 555, 556, -1,556, 157, + 557, -1,159, 558, 158, -1,558, 557, 158, -1,159, 559, 558, -1,253, 558, 559, -1,558, + 252, 557, -1,160, 559, 159, -1,557, 251, 556, -1,554, 155, 555, -1,554, 247, 153, -1, + 234, 233, 246, -1,235, 246, 562, -1,564, 245, 244, -1,566, 243, 242, -1,243, 565, + 244, -1,245, 563, 246, -1,160, 161, 560, -1,161, 236, 561, -1,568, 241, 240, -1,242, + 241, 567, -1,235, 234, 246, -1,238, 240, 239, -1,561, 236, 235, -1,559, 160, 560, -1, + 249, 248, 247, -1,555, 250, 249, -1,161, 561, 560, -1,560, 561, 255, -1,556, 251, + 250, -1,562, 256, 561, -1,252, 251, 557, -1,235, 562, 561, -1,554, 249, 247, -1,252, + 558, 253, -1,253, 559, 254, -1,560, 255, 254, -1,562, 257, 256, -1,561, 256, 255, -1, + 559, 560, 254, -1,258, 257, 562, -1,245, 564, 563, -1,258, 563, 564, -1,259, 564, + 565, -1,244, 565, 564, -1,242, 567, 566, -1,261, 566, 567, -1,240, 238, 568, -1,263, + 568, 238, -1,568, 262, 567, -1,241, 568, 567, -1,566, 260, 565, -1,243, 566, 565, -1, + 564, 259, 258, -1,565, 260, 259, -1,567, 262, 261, -1,238, 237, 263, -1,568, 263, + 262, -1,566, 261, 260, -1,258, 562, 563, -1,246, 563, 562, -1,270, 269, 569, -1,269, + 268, 570, -1,616, 298, 295, -1,617, 575, 299, -1,267, 266, 572, -1,618, 299, 291, -1, + 265, 264, 314, -1,573, 266, 265, -1,571, 268, 267, -1,317, 316, 264, -1,315, 264, + 316, -1,264, 286, 317, -1,287, 286, 264, -1,314, 264, 315, -1,288, 287, 264, -1,239, + 270, 238, -1,619, 277, 303, -1,269, 570, 569, -1,569, 570, 271, -1,572, 571, 267, -1, + 570, 268, 571, -1,272, 570, 571, -1,266, 573, 572, -1,572, 573, 274, -1,265, 314, + 574, -1,574, 313, 312, -1,275, 573, 574, -1,265, 574, 573, -1,273, 571, 572, -1,313, + 574, 314, -1,293, 575, 294, -1,292, 299, 293, -1,292, 291, 299, -1,296, 295, 297, -1, + 575, 616, 294, -1,297, 295, 298, -1,290, 618, 291, -1,295, 294, 616, -1,575, 293, + 299, -1,237, 238, 569, -1,238, 270, 569, -1,209, 208, 356, -1,206, 145, 576, -1,356, + 208, 207, -1,340, 146, 320, -1,346, 145, 146, -1,321, 320, 146, -1,576, 207, 206, -1, + 321, 146, 322, -1,147, 326, 146, -1,148, 149, 579, -1,578, 147, 148, -1,150, 151, + 581, -1,152, 153, 583, -1,582, 151, 152, -1,580, 149, 150, -1,322, 146, 326, -1,620, + 277, 304, -1,288, 264, 356, -1,209, 356, 264, -1,319, 341, 320, -1,576, 344, 357, -1, + 289, 288, 300, -1,344, 576, 345, -1,344, 343, 357, -1,324, 323, 577, -1,576, 145, + 345, -1,290, 289, 300, -1,323, 322, 577, -1,147, 578, 326, -1,326, 577, 322, -1,579, + 149, 580, -1,281, 579, 580, -1,579, 280, 578, -1,578, 148, 579, -1,581, 151, 582, -1, + 283, 581, 582, -1,153, 247, 583, -1,583, 247, 285, -1,282, 580, 581, -1,582, 152, + 583, -1,583, 284, 582, -1,580, 150, 581, -1,207, 576, 357, -1,277, 620, 303, -1,277, + 619, 302, -1,616, 575, 617, -1,623, 307, 627, -1,311, 627, 307, -1,288, 356, 300, -1, + 300, 355, 354, -1,354, 301, 300, -1,300, 618, 290, -1,621, 306, 628, -1,278, 354, + 353, -1,300, 356, 355, -1,343, 342, 357, -1,356, 207, 357, -1,351, 353, 352, -1,353, + 351, 350, -1,350, 278, 353, -1,301, 354, 302, -1,272, 571, 273, -1,573, 275, 274, -1, + 274, 273, 572, -1,574, 305, 304, -1,275, 574, 276, -1,312, 306, 574, -1,623, 627, + 625, -1,574, 304, 276, -1,621, 628, 311, -1,277, 276, 304, -1,305, 574, 306, -1,309, + 626, 310, -1,302, 354, 278, -1,277, 302, 278, -1,309, 308, 624, -1,307, 621, 311, -1, + 309, 624, 626, -1,272, 271, 570, -1,271, 237, 569, -1,349, 278, 350, -1,146, 340, + 346, -1,340, 320, 341, -1,339, 346, 340, -1,319, 318, 341, -1,339, 348, 347, -1,348, + 339, 338, -1,338, 279, 348, -1,346, 339, 347, -1,325, 577, 326, -1,324, 577, 325, -1, + 335, 337, 336, -1,327, 578, 328, -1,337, 334, 338, -1,145, 346, 345, -1,335, 334, + 337, -1,332, 331, 329, -1,331, 330, 329, -1,349, 348, 278, -1,279, 334, 333, -1,329, + 279, 332, -1,333, 332, 279, -1,334, 279, 338, -1,348, 279, 278, -1,328, 279, 329, -1, + 280, 579, 281, -1,279, 328, 280, -1,282, 281, 580, -1,622, 623, 625, -1,282, 581, + 283, -1,284, 283, 582, -1,625, 626, 622, -1,248, 285, 247, -1,285, 284, 583, -1,328, + 578, 280, -1,326, 578, 327, -1,624, 622, 626, -1,306, 312, 628, -1,364, 584, 365, -1, + 365, 584, 358, -1,629, 209, 264, -1,363, 585, 364, -1,584, 364, 585, -1,270, 584, + 585, -1,586, 585, 363, -1,358, 221, 365, -1,267, 362, 587, -1,363, 362, 586, -1,586, + 362, 268, -1,362, 631, 587, -1,587, 631, 267, -1,586, 269, 585, -1,270, 239, 358, -1, + 585, 269, 270, -1,269, 586, 268, -1,268, 362, 267, -1,267, 631, 266, -1,265, 360, + 359, -1,359, 629, 264, -1,630, 360, 265, -1,266, 630, 265, -1,359, 264, 265, -1,361, + 266, 631, -1,630, 266, 361, -1,584, 270, 358, -1,632, 244, 370, -1,588, 369, 243, -1, + 589, 242, 369, -1,368, 589, 369, -1,221, 358, 366, -1,367, 366, 591, -1,367, 591, + 590, -1,589, 368, 590, -1,241, 590, 591, -1,368, 367, 590, -1,591, 366, 358, -1,590, + 242, 589, -1,244, 633, 370, -1,245, 372, 371, -1,372, 245, 246, -1,245, 633, 244, -1, + 241, 242, 590, -1,588, 243, 632, -1,243, 244, 632, -1,242, 243, 369, -1,241, 591, + 240, -1,358, 239, 240, -1,371, 633, 245, -1,591, 358, 240, -1,634, 246, 233, -1,634, + 372, 246, -1,588, 632, 369, -1,373, 317, 374, -1,375, 374, 286, -1,373, 316, 317, -1, + 374, 317, 286, -1,376, 315, 377, -1,373, 377, 316, -1,376, 314, 315, -1,377, 315, + 316, -1,314, 376, 378, -1,378, 312, 314, -1,380, 379, 310, -1,378, 380, 381, -1,380, + 310, 381, -1,378, 381, 312, -1,308, 379, 382, -1,379, 308, 310, -1,383, 307, 384, -1, + 382, 384, 308, -1,383, 306, 307, -1,384, 307, 308, -1,306, 383, 385, -1,385, 304, + 306, -1,386, 303, 385, -1,302, 386, 387, -1,303, 304, 385, -1,302, 303, 386, -1,387, + 388, 300, -1,300, 302, 387, -1,300, 388, 390, -1,389, 390, 391, -1,389, 300, 390, -1, + 298, 389, 391, -1,391, 392, 296, -1,296, 298, 391, -1,394, 393, 294, -1,392, 394, + 295, -1,394, 294, 295, -1,392, 295, 296, -1,395, 293, 393, -1,292, 395, 396, -1,293, + 294, 393, -1,292, 293, 395, -1,398, 397, 290, -1,396, 398, 291, -1,398, 290, 291, -1, + 396, 291, 292, -1,399, 289, 397, -1,288, 399, 400, -1,289, 290, 397, -1,288, 289, + 399, -1,288, 400, 401, -1,287, 401, 375, -1,287, 288, 401, -1,286, 287, 375, -1,394, + 373, 393, -1,393, 374, 395, -1,373, 374, 393, -1,394, 377, 373, -1,592, 640, 403, -1, + 377, 394, 392, -1,402, 392, 407, -1,402, 376, 392, -1,376, 377, 392, -1,638, 639, + 403, -1,374, 375, 396, -1,390, 635, 403, -1,375, 401, 398, -1,398, 396, 375, -1,395, + 374, 396, -1,401, 399, 397, -1,399, 401, 400, -1,397, 398, 401, -1,636, 386, 384, -1, + 391, 378, 402, -1,403, 639, 592, -1,378, 391, 403, -1,639, 640, 592, -1,384, 405, + 383, -1,386, 385, 384, -1,405, 384, 385, -1,391, 638, 403, -1,406, 379, 388, -1,640, + 390, 403, -1,390, 637, 635, -1,387, 382, 406, -1,404, 406, 382, -1,386, 382, 387, -1, + 637, 379, 635, -1,379, 637, 388, -1,379, 406, 404, -1,636, 382, 386, -1,391, 402, + 407, -1,409, 341, 408, -1,340, 409, 410, -1,341, 318, 408, -1,340, 341, 409, -1,411, + 408, 318, -1,318, 320, 411, -1,413, 321, 412, -1,320, 413, 411, -1,321, 322, 412, -1, + 320, 321, 413, -1,324, 414, 412, -1,412, 322, 324, -1,416, 325, 415, -1,324, 416, + 414, -1,325, 326, 415, -1,324, 325, 416, -1,326, 417, 415, -1,417, 326, 328, -1,417, + 329, 418, -1,419, 418, 330, -1,417, 328, 329, -1,418, 329, 330, -1,332, 420, 419, -1, + 419, 330, 332, -1,420, 333, 421, -1,422, 421, 334, -1,420, 332, 333, -1,421, 333, + 334, -1,423, 422, 336, -1,334, 336, 422, -1,423, 337, 424, -1,425, 424, 338, -1,423, + 336, 337, -1,424, 337, 338, -1,410, 425, 340, -1,338, 340, 425, -1,431, 411, 413, -1, + 424, 409, 408, -1,410, 409, 426, -1,593, 408, 414, -1,408, 431, 430, -1,412, 430, + 413, -1,430, 431, 413, -1,414, 416, 418, -1,416, 415, 429, -1,430, 414, 408, -1,424, + 426, 409, -1,424, 408, 423, -1,408, 593, 423, -1,421, 422, 427, -1,428, 427, 423, -1, + 421, 427, 428, -1,429, 418, 416, -1,419, 423, 593, -1,418, 419, 414, -1,419, 593, + 414, -1,428, 423, 419, -1,429, 417, 418, -1,428, 420, 421, -1,425, 426, 424, -1,342, + 432, 433, -1,357, 433, 434, -1,357, 342, 433, -1,356, 357, 434, -1,435, 432, 342, -1, + 342, 344, 435, -1,436, 435, 344, -1,437, 436, 345, -1,436, 344, 345, -1,437, 345, + 346, -1,348, 438, 437, -1,437, 346, 348, -1,438, 349, 439, -1,440, 439, 350, -1,438, + 348, 349, -1,439, 349, 350, -1,441, 440, 350, -1,350, 352, 441, -1,442, 441, 352, -1, + 443, 442, 353, -1,442, 352, 353, -1,443, 353, 354, -1,434, 443, 356, -1,354, 356, + 443, -1,594, 433, 432, -1,434, 433, 444, -1,435, 436, 447, -1,432, 447, 436, -1,436, + 437, 432, -1,432, 437, 446, -1,444, 433, 442, -1,594, 442, 433, -1,443, 444, 442, -1, + 594, 441, 442, -1,432, 446, 441, -1,438, 441, 446, -1,440, 445, 439, -1,439, 441, + 438, -1,439, 445, 441, -1,594, 432, 441, -1,44, 448, 449, -1,67, 449, 450, -1,67, + 44, 449, -1,66, 67, 450, -1,44, 451, 448, -1,451, 44, 46, -1,452, 451, 46, -1,453, + 452, 46, -1,454, 453, 47, -1,453, 46, 47, -1,454, 47, 48, -1,456, 454, 48, -1,456, + 50, 455, -1,50, 456, 48, -1,457, 455, 50, -1,458, 457, 51, -1,457, 50, 51, -1,458, + 51, 52, -1,54, 460, 459, -1,458, 52, 459, -1,54, 459, 52, -1,461, 460, 54, -1,462, + 461, 55, -1,461, 54, 55, -1,462, 55, 56, -1,463, 464, 58, -1,56, 58, 464, -1,56, + 464, 462, -1,60, 465, 466, -1,59, 466, 463, -1,59, 60, 466, -1,58, 59, 463, -1,62, + 468, 467, -1,465, 60, 467, -1,62, 467, 60, -1,64, 469, 470, -1,63, 470, 468, -1,63, + 64, 470, -1,62, 63, 468, -1,471, 469, 64, -1,471, 66, 450, -1,66, 471, 64, -1,456, + 455, 457, -1,456, 457, 459, -1,453, 454, 450, -1,454, 460, 595, -1,454, 456, 460, -1, + 459, 457, 458, -1,466, 461, 464, -1,461, 466, 460, -1,462, 464, 461, -1,459, 460, + 456, -1,451, 452, 453, -1,453, 450, 449, -1,448, 451, 449, -1,595, 450, 454, -1,467, + 471, 450, -1,469, 471, 470, -1,464, 463, 466, -1,466, 465, 460, -1,465, 595, 460, -1, + 467, 468, 470, -1,465, 450, 595, -1,465, 467, 450, -1,467, 470, 471, -1,451, 453, + 449, -1,473, 474, 88, -1,473, 68, 472, -1,68, 473, 88, -1,472, 69, 475, -1,476, 475, + 70, -1,472, 68, 69, -1,475, 69, 70, -1,72, 478, 477, -1,476, 70, 477, -1,72, 477, + 70, -1,480, 73, 479, -1,72, 480, 478, -1,73, 74, 479, -1,72, 73, 480, -1,76, 482, + 481, -1,479, 74, 481, -1,76, 481, 74, -1,484, 77, 483, -1,76, 484, 482, -1,77, 78, + 483, -1,76, 77, 484, -1,485, 483, 78, -1,486, 485, 79, -1,485, 78, 79, -1,486, 79, + 80, -1,486, 81, 487, -1,488, 487, 82, -1,486, 80, 81, -1,487, 81, 82, -1,84, 489, + 490, -1,83, 490, 488, -1,83, 84, 490, -1,82, 83, 488, -1,492, 489, 84, -1,492, 86, + 491, -1,86, 492, 84, -1,493, 87, 474, -1,86, 493, 491, -1,87, 88, 474, -1,86, 87, + 493, -1,493, 473, 472, -1,472, 491, 493, -1,473, 493, 474, -1,475, 491, 472, -1,477, + 480, 476, -1,475, 476, 479, -1,477, 478, 480, -1,479, 476, 480, -1,479, 491, 475, -1, + 481, 641, 492, -1,479, 492, 491, -1,641, 481, 489, -1,485, 486, 487, -1,490, 485, + 488, -1,487, 488, 485, -1,483, 485, 490, -1,482, 489, 481, -1,479, 481, 492, -1,489, + 482, 484, -1,489, 484, 483, -1,489, 483, 490, -1,90, 494, 495, -1,105, 495, 496, -1, + 105, 90, 495, -1,104, 105, 496, -1,498, 494, 90, -1,498, 92, 497, -1,92, 498, 90, -1, + 500, 93, 499, -1,92, 500, 497, -1,93, 94, 499, -1,92, 93, 500, -1,94, 501, 499, -1, + 501, 94, 96, -1,502, 501, 96, -1,502, 97, 503, -1,504, 503, 98, -1,502, 96, 97, -1, + 503, 97, 98, -1,98, 505, 504, -1,505, 98, 100, -1,506, 505, 100, -1,507, 506, 100, -1, + 508, 507, 101, -1,507, 100, 101, -1,508, 101, 102, -1,104, 496, 509, -1,508, 102, + 509, -1,104, 509, 102, -1,510, 505, 506, -1,510, 504, 505, -1,509, 596, 508, -1,508, + 596, 510, -1,596, 504, 510, -1,596, 497, 511, -1,495, 498, 497, -1,509, 496, 596, -1, + 495, 596, 496, -1,497, 596, 495, -1,495, 494, 498, -1,504, 596, 511, -1,503, 501, + 502, -1,503, 504, 597, -1,597, 501, 503, -1,500, 499, 597, -1,501, 597, 499, -1,497, + 500, 511, -1,597, 511, 500, -1,504, 511, 597, -1,642, 643, 2234, -1,644, 645, 2236, -1, + 643, 644, 2235, -1,693, 2234, 691, -1,693, 642, 2234, -1,644, 2236, 2235, -1,2235, + 2234, 643, -1,2236, 646, 2237, -1,2235, 2236, 689, -1,2236, 645, 646, -1,2234, 2235, + 690, -1,2237, 647, 2238, -1,2240, 648, 649, -1,2239, 647, 648, -1,651, 2242, 650, -1, + 649, 650, 2241, -1,2243, 651, 652, -1,2244, 652, 653, -1,2244, 653, 654, -1,647, + 2237, 646, -1,2236, 2237, 688, -1,692, 693, 691, -1,2234, 690, 691, -1,2239, 2238, + 647, -1,2237, 2238, 688, -1,686, 2238, 2239, -1,690, 2235, 689, -1,687, 688, 2238, -1, + 686, 687, 2238, -1,2236, 688, 689, -1,2239, 2240, 686, -1,2240, 2241, 684, -1,2241, + 2240, 649, -1,2242, 2243, 682, -1,2243, 2242, 651, -1,2244, 2243, 652, -1,2243, 2244, + 681, -1,2241, 650, 2242, -1,2241, 2242, 683, -1,684, 685, 2240, -1,682, 683, 2242, -1, + 681, 682, 2243, -1,684, 2241, 683, -1,681, 2244, 2245, -1,2240, 685, 686, -1,2239, + 648, 2240, -1,2244, 654, 2245, -1,655, 656, 2247, -1,657, 658, 2249, -1,656, 657, + 2248, -1,2245, 2246, 679, -1,2246, 2245, 655, -1,2247, 2248, 677, -1,2248, 2247, + 656, -1,2249, 2248, 657, -1,2248, 2249, 676, -1,2246, 655, 2247, -1,2246, 2247, 678, -1, + 658, 659, 2249, -1,655, 2245, 654, -1,659, 660, 2251, -1,2251, 661, 2252, -1,2253, + 661, 662, -1,660, 661, 2251, -1,2250, 2251, 674, -1,2250, 659, 2251, -1,2255, 663, + 664, -1,2256, 664, 665, -1,2254, 662, 663, -1,667, 665, 666, -1,659, 2250, 2249, -1, + 2249, 2250, 675, -1,680, 2245, 679, -1,2247, 677, 678, -1,678, 679, 2246, -1,674, + 2251, 2252, -1,677, 2248, 676, -1,675, 2250, 674, -1,673, 674, 2252, -1,2249, 675, + 676, -1,2252, 2253, 673, -1,2253, 2254, 671, -1,2254, 2253, 662, -1,2255, 2256, 669, -1, + 2256, 2255, 664, -1,667, 2256, 665, -1,2256, 667, 668, -1,2254, 663, 2255, -1,2254, + 2255, 670, -1,671, 672, 2253, -1,669, 670, 2255, -1,668, 669, 2256, -1,671, 2254, + 670, -1,2253, 672, 673, -1,2252, 661, 2253, -1,2245, 680, 681, -1,666, 694, 2257, -1, + 695, 696, 2259, -1,694, 695, 2258, -1,667, 2257, 739, -1,667, 666, 2257, -1,695, + 2259, 2258, -1,2258, 2257, 694, -1,2259, 697, 2260, -1,2258, 2259, 737, -1,2259, + 696, 697, -1,2257, 2258, 738, -1,2260, 698, 2261, -1,2263, 699, 700, -1,2262, 698, + 699, -1,702, 2265, 701, -1,700, 701, 2264, -1,2266, 702, 703, -1,2267, 703, 704, -1, + 2267, 704, 705, -1,698, 2260, 697, -1,2259, 2260, 736, -1,668, 667, 739, -1,2257, + 738, 739, -1,2262, 2261, 698, -1,2260, 2261, 736, -1,734, 2261, 2262, -1,738, 2258, + 737, -1,735, 736, 2261, -1,734, 735, 2261, -1,2259, 736, 737, -1,2262, 2263, 734, -1, + 2263, 2264, 732, -1,2264, 2263, 700, -1,2265, 2266, 730, -1,2266, 2265, 702, -1,2267, + 2266, 703, -1,2266, 2267, 729, -1,2264, 701, 2265, -1,2264, 2265, 731, -1,732, 733, + 2263, -1,730, 731, 2265, -1,729, 730, 2266, -1,732, 2264, 731, -1,729, 2267, 2268, -1, + 2263, 733, 734, -1,2262, 699, 2263, -1,2267, 705, 2268, -1,706, 707, 2270, -1,708, + 709, 2272, -1,707, 708, 2271, -1,2268, 2269, 727, -1,2269, 2268, 706, -1,2270, 2271, + 725, -1,2271, 2270, 707, -1,2272, 2271, 708, -1,2271, 2272, 724, -1,2269, 706, 2270, -1, + 2269, 2270, 726, -1,709, 710, 2272, -1,706, 2268, 705, -1,710, 711, 2274, -1,2274, + 712, 2275, -1,2276, 712, 713, -1,711, 712, 2274, -1,2273, 2274, 722, -1,2273, 710, + 2274, -1,2278, 714, 715, -1,2279, 715, 716, -1,2277, 713, 714, -1,693, 716, 642, -1, + 710, 2273, 2272, -1,2272, 2273, 723, -1,728, 2268, 727, -1,2270, 725, 726, -1,726, + 727, 2269, -1,722, 2274, 2275, -1,725, 2271, 724, -1,723, 2273, 722, -1,721, 722, + 2275, -1,2272, 723, 724, -1,2275, 2276, 721, -1,2276, 2277, 719, -1,2277, 2276, 713, -1, + 2278, 2279, 717, -1,2279, 2278, 715, -1,693, 2279, 716, -1,2279, 693, 692, -1,2277, + 714, 2278, -1,2277, 2278, 718, -1,719, 720, 2276, -1,717, 718, 2278, -1,692, 717, + 2279, -1,719, 2277, 718, -1,2276, 720, 721, -1,2275, 712, 2276, -1,2268, 728, 729, -1, + 740, 692, 787, -1,2281, 786, 785, -1,786, 2280, 787, -1,2283, 784, 783, -1,2285, + 782, 781, -1,2286, 781, 780, -1,782, 2284, 783, -1,784, 2282, 785, -1,787, 2280, + 740, -1,741, 740, 2280, -1,785, 2282, 2281, -1,743, 2281, 2282, -1,2281, 742, 2280, -1, + 786, 2281, 2280, -1,783, 2284, 2283, -1,745, 2283, 2284, -1,781, 2286, 2285, -1,747, + 2285, 2286, -1,748, 2286, 2287, -1,780, 2287, 2286, -1,2285, 746, 2284, -1,782, 2285, + 2284, -1,2283, 744, 2282, -1,784, 2283, 2282, -1,2288, 2287, 780, -1,2288, 779, 778, -1, + 2290, 777, 776, -1,777, 2289, 778, -1,775, 774, 2292, -1,773, 772, 2294, -1,772, + 771, 2295, -1,2293, 774, 773, -1,2291, 776, 775, -1,777, 2290, 2289, -1,2288, 778, + 2289, -1,770, 2296, 771, -1,751, 2289, 2290, -1,2289, 750, 2288, -1,2297, 770, 769, -1, + 769, 768, 2298, -1,767, 766, 2300, -1,766, 668, 2301, -1,2299, 768, 767, -1,2290, + 776, 2291, -1,2288, 780, 779, -1,2288, 749, 2287, -1,742, 2281, 743, -1,744, 2283, + 745, -1,743, 2282, 744, -1,775, 2292, 2291, -1,2291, 2292, 753, -1,754, 2292, 2293, -1, + 747, 746, 2285, -1,747, 2286, 748, -1,2284, 746, 745, -1,774, 2293, 2292, -1,741, + 2280, 742, -1,748, 2287, 749, -1,750, 2289, 751, -1,749, 2288, 750, -1,2290, 2291, + 752, -1,2292, 754, 753, -1,2293, 755, 754, -1,2291, 753, 752, -1,751, 2290, 752, -1, + 756, 755, 2293, -1,772, 2295, 2294, -1,756, 2294, 2295, -1,770, 2297, 2296, -1,758, + 2296, 2297, -1,2296, 757, 2295, -1,771, 2296, 2295, -1,768, 2299, 2298, -1,761, 2298, + 2299, -1,766, 2301, 2300, -1,763, 2300, 2301, -1,764, 2301, 765, -1,668, 765, 2301, -1, + 2300, 762, 2299, -1,767, 2300, 2299, -1,2298, 760, 2297, -1,769, 2298, 2297, -1,2295, + 757, 756, -1,2297, 759, 758, -1,2296, 758, 757, -1,2298, 761, 760, -1,2300, 763, + 762, -1,2301, 764, 763, -1,2299, 762, 761, -1,2297, 760, 759, -1,756, 2293, 2294, -1, + 773, 2294, 2293, -1,806, 764, 765, -1,804, 805, 2303, -1,806, 2302, 805, -1,802, + 803, 2305, -1,800, 801, 2308, -1,802, 2306, 801, -1,804, 2304, 803, -1,765, 2302, + 806, -1,2302, 765, 668, -1,2303, 2304, 804, -1,2304, 2303, 808, -1,2302, 807, 2303, -1, + 2302, 2303, 805, -1,2305, 2306, 802, -1,2306, 2305, 810, -1,2307, 2308, 801, -1,2308, + 2307, 812, -1,2309, 2308, 813, -1,2308, 2309, 800, -1,2306, 811, 2307, -1,2306, 2307, + 801, -1,2304, 809, 2305, -1,2304, 2305, 803, -1,800, 2309, 2310, -1,798, 799, 2310, -1, + 796, 797, 2312, -1,798, 2311, 797, -1,2315, 794, 795, -1,2317, 792, 793, -1,793, + 794, 2316, -1,795, 796, 2314, -1,2312, 797, 2311, -1,2311, 2310, 815, -1,792, 2318, + 791, -1,2313, 2312, 817, -1,2311, 816, 2312, -1,2313, 796, 2312, -1,2320, 790, 791, -1, + 2322, 788, 789, -1,2323, 741, 788, -1,789, 790, 2321, -1,2313, 2314, 796, -1,2311, + 798, 2310, -1,799, 800, 2310, -1,2309, 814, 2310, -1,808, 2303, 807, -1,810, 2305, + 809, -1,809, 2304, 808, -1,2314, 2315, 795, -1,819, 2315, 2314, -1,812, 2307, 811, -1, + 810, 811, 2306, -1,2308, 812, 813, -1,807, 2302, 668, -1,814, 2309, 813, -1,816, + 2311, 815, -1,815, 2310, 814, -1,818, 2313, 817, -1,818, 819, 2314, -1,819, 820, + 2315, -1,818, 2314, 2313, -1,817, 2312, 816, -1,2315, 820, 821, -1,2316, 2317, 793, -1, + 2317, 2316, 821, -1,2318, 2319, 791, -1,2319, 2318, 823, -1,2317, 822, 2318, -1,2317, + 2318, 792, -1,2320, 2321, 790, -1,2321, 2320, 825, -1,2322, 2323, 788, -1,2323, 2322, + 827, -1,740, 2323, 828, -1,2323, 740, 741, -1,2321, 826, 2322, -1,2321, 2322, 789, -1, + 2319, 824, 2320, -1,2319, 2320, 791, -1,821, 822, 2317, -1,823, 824, 2319, -1,822, + 823, 2318, -1,825, 826, 2321, -1,827, 828, 2323, -1,828, 692, 740, -1,826, 827, 2322, -1, + 824, 825, 2320, -1,2316, 2315, 821, -1,2315, 2316, 794, -1,858, 859, 860, -1,856, + 857, 2325, -1,858, 2324, 857, -1,854, 855, 2326, -1,2328, 852, 853, -1,2329, 851, + 852, -1,854, 2327, 853, -1,856, 2326, 855, -1,2325, 857, 2324, -1,2324, 860, 764, -1, + 2327, 854, 2326, -1,2326, 2325, 862, -1,2324, 861, 2325, -1,2326, 856, 2325, -1,2329, + 849, 850, -1,847, 848, 2332, -1,849, 2330, 848, -1,846, 847, 2333, -1,850, 851, 2329, -1, + 2326, 863, 2327, -1,2324, 858, 860, -1,2334, 845, 846, -1,2334, 843, 844, -1,844, + 845, 2334, -1,2334, 841, 842, -1,2337, 839, 840, -1,2338, 838, 839, -1,840, 841, + 2336, -1,842, 843, 2334, -1,2338, 836, 837, -1,2340, 834, 835, -1,835, 836, 2339, -1, + 2340, 832, 833, -1,2341, 830, 831, -1,2342, 829, 830, -1,831, 832, 2341, -1,833, + 834, 2340, -1,837, 838, 2338, -1,2327, 2328, 853, -1,2328, 2329, 852, -1,865, 2329, + 2328, -1,862, 2325, 861, -1,2324, 764, 861, -1,2330, 2329, 866, -1,2330, 2331, 848, -1, + 867, 2331, 2330, -1,2332, 2333, 847, -1,869, 2333, 2332, -1,870, 2334, 2333, -1,2333, + 2334, 846, -1,2332, 2331, 868, -1,2331, 2332, 848, -1,863, 2326, 862, -1,2329, 2330, + 849, -1,864, 2327, 863, -1,864, 865, 2328, -1,864, 2328, 2327, -1,866, 867, 2330, -1, + 868, 869, 2332, -1,869, 870, 2333, -1,867, 868, 2331, -1,865, 866, 2329, -1,2334, + 870, 871, -1,2335, 2336, 841, -1,2336, 2335, 872, -1,2337, 2338, 839, -1,2338, 2337, + 874, -1,2336, 873, 2337, -1,2336, 2337, 840, -1,2339, 2340, 835, -1,2340, 2339, 876, -1, + 2341, 2342, 830, -1,2342, 2341, 878, -1,880, 2342, 879, -1,2342, 880, 829, -1,2340, + 877, 2341, -1,2340, 2341, 832, -1,2338, 875, 2339, -1,2338, 2339, 836, -1,871, 872, + 2335, -1,873, 874, 2337, -1,874, 875, 2338, -1,872, 873, 2336, -1,876, 877, 2340, -1, + 878, 879, 2342, -1,879, 741, 880, -1,877, 878, 2341, -1,875, 876, 2339, -1,2335, + 2334, 871, -1,2334, 2335, 841, -1,880, 741, 930, -1,2344, 929, 928, -1,2345, 928, + 927, -1,929, 2343, 930, -1,2347, 926, 925, -1,2349, 924, 923, -1,2350, 923, 922, -1, + 924, 2348, 925, -1,926, 2346, 927, -1,930, 2343, 880, -1,829, 880, 2343, -1,928, + 2345, 2344, -1,882, 2344, 2345, -1,884, 2345, 2346, -1,927, 2346, 2345, -1,2344, + 881, 2343, -1,929, 2344, 2343, -1,925, 2348, 2347, -1,886, 2347, 2348, -1,923, 2350, + 2349, -1,889, 2349, 2350, -1,890, 2350, 2351, -1,922, 2351, 2350, -1,2349, 888, 2348, -1, + 924, 2349, 2348, -1,2347, 885, 2346, -1,926, 2347, 2346, -1,2352, 2351, 922, -1,2352, + 921, 920, -1,2354, 919, 918, -1,2355, 918, 917, -1,919, 2353, 920, -1,916, 915, 2357, -1, + 914, 913, 2359, -1,913, 912, 2360, -1,2358, 915, 914, -1,916, 2356, 917, -1,2353, + 919, 2354, -1,893, 2352, 2353, -1,2355, 917, 2356, -1,896, 2354, 2355, -1,897, 2355, + 2356, -1,911, 2361, 912, -1,2354, 895, 2353, -1,2354, 918, 2355, -1,911, 910, 2362, -1, + 909, 908, 2364, -1,908, 764, 2365, -1,2363, 910, 909, -1,916, 2357, 2356, -1,2352, + 920, 2353, -1,2352, 922, 921, -1,2352, 891, 2351, -1,881, 2344, 882, -1,883, 2345, + 884, -1,884, 2346, 885, -1,882, 2345, 883, -1,2348, 887, 886, -1,886, 885, 2347, -1, + 887, 2348, 888, -1,888, 2349, 889, -1,2350, 890, 889, -1,829, 2343, 881, -1,890, + 2351, 891, -1,892, 2352, 893, -1,893, 2353, 894, -1,891, 2352, 892, -1,895, 2354, + 896, -1,897, 2356, 898, -1,2356, 2357, 898, -1,896, 2355, 897, -1,894, 2353, 895, -1, + 899, 898, 2357, -1,914, 2359, 2358, -1,2358, 2359, 901, -1,902, 2360, 2361, -1,2360, + 901, 2359, -1,903, 2361, 2362, -1,912, 2361, 2360, -1,900, 899, 2357, -1,913, 2360, + 2359, -1,910, 2363, 2362, -1,2362, 2363, 904, -1,908, 2365, 2364, -1,2364, 2365, + 906, -1,2365, 860, 907, -1,764, 860, 2365, -1,905, 2363, 2364, -1,909, 2364, 2363, -1, + 900, 2357, 2358, -1,911, 2362, 2361, -1,2358, 901, 900, -1,2361, 903, 902, -1,2362, + 903, 903, -1,2360, 902, 901, -1,2363, 905, 904, -1,2365, 907, 906, -1,860, 859, 907, -1, + 2364, 906, 905, -1,2362, 904, 903, -1,915, 2358, 2357, -1,901, 2647, 2648, -1,2645, + 933, 903, -1,2645, 2646, 902, -1,2647, 932, 2646, -1,931, 2648, 900, -1,2652, 886, + 2651, -1,2653, 934, 2652, -1,888, 2649, 936, -1,885, 2653, 2654, -1,2649, 2650, 887, -1, + 2651, 935, 2650, -1,938, 830, 829, -1,831, 830, 938, -1,832, 831, 937, -1,938, 937, + 831, -1,2657, 941, 839, -1,940, 2660, 2655, -1,2657, 2656, 840, -1,2656, 2658, 840, -1, + 2660, 2659, 2655, -1,2659, 2661, 841, -1,2658, 2660, 940, -1,2661, 842, 939, -1,2662, + 2667, 848, -1,2663, 847, 2664, -1,2664, 946, 846, -1,2662, 848, 2666, -1,2663, 2665, + 847, -1,2666, 945, 2665, -1,944, 2667, 2668, -1,2668, 943, 944, -1,943, 2668, 942, -1, + 858, 947, 859, -1,857, 947, 858, -1,857, 856, 948, -1,947, 857, 948, -1,851, 852, + 2669, -1,2673, 949, 2672, -1,2670, 853, 2671, -1,854, 2671, 950, -1,853, 2670, 2672, -1, + 2669, 852, 2673, -1,834, 835, 2674, -1,2675, 836, 2676, -1,2676, 952, 837, -1,951, + 2675, 2674, -1,955, 895, 896, -1,896, 954, 955, -1,897, 954, 896, -1,953, 898, 2677, -1, + 897, 953, 954, -1,953, 897, 898, -1,900, 899, 2677, -1,2679, 2678, 905, -1,958, 906, + 957, -1,906, 958, 2678, -1,907, 859, 956, -1,907, 957, 906, -1,956, 957, 907, -1, + 905, 904, 2679, -1,2682, 2684, 2681, -1,883, 2681, 2684, -1,2680, 2681, 883, -1,2680, + 883, 2683, -1,881, 960, 961, -1,960, 881, 959, -1,881, 961, 829, -1,881, 882, 959, -1, + 882, 2683, 959, -1,2684, 2682, 2685, -1,2682, 884, 2685, -1,963, 892, 962, -1,893, + 962, 892, -1,892, 963, 891, -1,891, 964, 890, -1,964, 891, 963, -1,890, 964, 2686, -1, + 888, 2686, 889, -1,2687, 974, 979, -1,961, 960, 2366, -1,970, 2369, 960, -1,960, + 2369, 2366, -1,884, 2369, 970, -1,2688, 980, 974, -1,971, 829, 961, -1,974, 2687, + 978, -1,2366, 972, 971, -1,2375, 2699, 1024, -1,2367, 972, 2366, -1,961, 2366, 971, -1, + 2371, 2367, 2370, -1,2366, 2370, 2367, -1,1062, 2367, 2371, -1,2370, 2372, 1020, -1, + 2367, 1057, 972, -1,2369, 2370, 2366, -1,2700, 989, 988, -1,2372, 2370, 2369, -1, + 969, 2372, 884, -1,2372, 2369, 884, -1,969, 968, 2372, -1,2374, 2372, 968, -1,936, + 2374, 968, -1,2374, 1022, 2372, -1,1022, 1021, 2372, -1,2373, 2372, 1021, -1,1014, + 1024, 2374, -1,1023, 2374, 1024, -1,1021, 2697, 2373, -1,1022, 2374, 1023, -1,2373, + 1020, 2372, -1,2375, 1024, 1013, -1,1020, 2371, 2370, -1,1061, 2367, 1062, -1,2371, + 1020, 1065, -1,1064, 2371, 1065, -1,1063, 2371, 1064, -1,2367, 1059, 1058, -1,2367, + 1058, 1057, -1,1020, 1067, 1066, -1,2367, 1060, 1059, -1,1061, 1060, 2367, -1,1020, + 1066, 1065, -1,1068, 1020, 1019, -1,1009, 1025, 1010, -1,1010, 1025, 2698, -1,1008, + 1025, 1009, -1,1020, 2373, 2697, -1,1018, 1069, 1019, -1,1068, 1019, 1069, -1,1083, + 1018, 1008, -1,1011, 2375, 1012, -1,1008, 2696, 1084, -1,1018, 1025, 1008, -1,1068, + 1067, 1020, -1,1011, 2698, 2375, -1,1018, 1083, 1069, -1,1062, 2371, 1063, -1,1057, + 973, 972, -1,1013, 1012, 2375, -1,2374, 2377, 2378, -1,2378, 1014, 2374, -1,2377, + 888, 2381, -1,936, 888, 2377, -1,2374, 936, 2377, -1,2377, 2382, 2378, -1,2378, 1015, + 1014, -1,1016, 2379, 1045, -1,2379, 1016, 1015, -1,2378, 2379, 1015, -1,1027, 1026, + 2379, -1,2379, 1026, 1047, -1,1028, 2379, 2378, -1,1024, 1014, 1013, -1,2378, 2382, + 1028, -1,963, 2381, 964, -1,2381, 888, 964, -1,963, 962, 2385, -1,962, 893, 967, -1, + 2381, 963, 2385, -1,2385, 2383, 2382, -1,2382, 2377, 2381, -1,2386, 2383, 2385, -1, + 962, 967, 2385, -1,967, 966, 2385, -1,2386, 2385, 966, -1,1004, 2386, 966, -1,2693, + 985, 984, -1,1031, 2383, 2386, -1,2382, 2381, 2385, -1,2383, 1028, 2382, -1,1028, + 1027, 2379, -1,1040, 1044, 1043, -1,1017, 1044, 1039, -1,1044, 1016, 1045, -1,1040, + 1043, 1041, -1,1043, 1042, 1041, -1,2379, 1046, 1045, -1,1017, 1037, 1006, -1,1007, + 1006, 1085, -1,1038, 1037, 1017, -1,1039, 1044, 1040, -1,1038, 1017, 1039, -1,1046, + 2379, 1047, -1,2383, 1031, 1030, -1,1002, 1032, 1031, -1,1002, 1031, 2386, -1,1030, + 1029, 2383, -1,1001, 1032, 1002, -1,966, 1005, 1004, -1,1003, 2386, 1004, -1,1003, + 1002, 2386, -1,1028, 2383, 1029, -1,1086, 1006, 1037, -1,1016, 1044, 1017, -1,965, + 1005, 966, -1,2368, 1056, 1055, -1,2368, 1054, 1053, -1,1054, 2368, 1055, -1,1101, + 1100, 1051, -1,1051, 1100, 1052, -1,2704, 1051, 1102, -1,1103, 1102, 1050, -1,1051, + 1050, 1102, -1,1049, 1103, 1050, -1,1099, 1053, 1052, -1,1048, 1103, 1049, -1,1069, + 1082, 1081, -1,1104, 1070, 1081, -1,1082, 1069, 1083, -1,2703, 1084, 2696, -1,2702, + 1105, 1081, -1,1069, 1081, 1070, -1,1081, 1105, 1104, -1,1103, 1048, 1104, -1,1107, + 1080, 2701, -1,1106, 2702, 1080, -1,1106, 1080, 1107, -1,1104, 1048, 1070, -1,1007, + 1085, 2703, -1,1083, 1008, 1084, -1,2368, 1053, 1099, -1,1098, 2368, 1099, -1,1099, + 1052, 1100, -1,974, 973, 2368, -1,973, 1056, 2368, -1,1097, 974, 1098, -1,2368, 1098, + 974, -1,1096, 974, 1097, -1,974, 1096, 1095, -1,1095, 1094, 974, -1,1079, 2376, 1071, -1, + 1071, 1107, 1079, -1,1078, 1077, 2376, -1,2376, 1079, 1078, -1,1071, 2376, 1072, -1, + 2376, 1075, 1072, -1,982, 1093, 1092, -1,974, 1093, 982, -1,1072, 1074, 1073, -1, + 1091, 982, 1092, -1,974, 982, 981, -1,974, 1094, 1093, -1,1072, 1075, 1074, -1,1011, + 1010, 2698, -1,973, 1057, 1056, -1,1037, 1036, 1086, -1,1035, 1087, 1036, -1,1086, + 1036, 1087, -1,2380, 1087, 1035, -1,987, 1035, 2700, -1,1086, 1085, 1006, -1,1088, + 1087, 2380, -1,1075, 1077, 1076, -1,987, 983, 2380, -1,1034, 2384, 2700, -1,2700, + 988, 987, -1,1034, 990, 2384, -1,987, 2380, 1035, -1,1000, 1033, 1001, -1,1000, 999, + 2387, -1,1033, 1032, 1001, -1,998, 992, 999, -1,1034, 1033, 990, -1,994, 998, 997, -1, + 1033, 1000, 2387, -1,997, 996, 994, -1,996, 995, 994, -1,992, 2387, 999, -1,2387, + 991, 1033, -1,2384, 2695, 989, -1,1088, 983, 1089, -1,1090, 1089, 2689, -1,2689, + 1091, 1090, -1,981, 2688, 974, -1,2692, 983, 987, -1,2691, 2692, 986, -1,2692, 987, + 986, -1,974, 980, 979, -1,986, 2694, 2691, -1,2689, 1089, 983, -1,1091, 2689, 2690, -1, + 1091, 2690, 982, -1,990, 2695, 2384, -1,991, 2387, 992, -1,994, 993, 998, -1,993, + 992, 998, -1,991, 990, 1033, -1,975, 978, 977, -1,977, 976, 975, -1,978, 975, 974, -1, + 2694, 985, 2693, -1,2380, 983, 1088, -1,1075, 2376, 1077, -1,2699, 2375, 2698, -1, + 2691, 2694, 2693, -1,989, 2700, 2384, -1,2701, 1079, 1107, -1,1007, 2703, 2696, -1, + 1105, 2702, 1106, -1,1051, 2704, 1101, -1,1113, 1112, 1111, -1,1111, 1114, 1113, -1, + 1110, 1114, 1111, -1,1115, 1110, 1109, -1,2388, 1109, 1108, -1,1122, 2388, 1108, -1, + 1110, 1115, 1114, -1,1109, 2388, 1116, -1,1118, 1117, 2388, -1,1116, 2388, 1117, -1, + 1122, 1121, 2388, -1,1120, 2388, 1121, -1,1120, 1119, 1118, -1,1120, 1118, 2388, -1, + 1116, 1115, 1109, -1,1127, 1126, 1124, -1,1128, 1127, 1123, -1,1129, 1128, 1123, -1, + 1124, 1126, 1125, -1,1123, 1127, 1124, -1,1138, 2389, 1123, -1,1130, 1129, 1123, -1, + 1123, 1132, 1131, -1,1132, 1123, 1133, -1,1133, 1123, 2389, -1,1136, 2389, 1137, -1, + 2389, 1138, 1137, -1,1135, 1134, 1136, -1,2389, 1136, 1134, -1,1134, 1133, 2389, -1, + 1131, 1130, 1123, -1,1146, 1145, 1144, -1,1144, 2390, 1146, -1,1149, 1148, 2390, -1, + 2390, 1148, 1147, -1,1147, 1146, 2390, -1,1143, 2390, 1144, -1,1142, 2390, 1143, -1, + 2390, 1142, 1141, -1,2390, 1141, 1140, -1,1139, 2390, 1140, -1,1149, 2390, 1150, -1, + 1151, 2390, 1152, -1,1152, 2390, 1153, -1,1155, 1154, 2390, -1,1153, 2390, 1154, -1, + 2390, 1156, 1155, -1,1161, 2390, 1162, -1,1139, 1162, 2390, -1,1160, 2390, 1161, -1, + 2390, 1159, 1158, -1,1159, 2390, 1160, -1,1158, 1157, 2390, -1,1157, 1156, 2390, -1, + 1150, 2390, 1151, -1,1177, 1176, 1181, -1,1178, 1177, 1181, -1,1181, 1180, 1179, -1, + 1178, 1181, 1179, -1,1175, 1181, 1176, -1,1174, 1173, 1181, -1,1181, 1175, 1174, -1, + 1171, 2391, 1172, -1,1173, 1172, 2391, -1,2391, 1171, 1170, -1,1170, 1185, 2391, -1, + 1181, 1173, 2391, -1,2391, 1182, 1181, -1,2391, 1184, 1183, -1,1185, 1170, 1186, -1, + 1169, 1187, 1186, -1,1169, 1186, 1170, -1,1185, 1184, 2391, -1,1167, 1166, 1168, -1, + 1169, 1168, 1165, -1,1187, 1165, 1164, -1,1163, 1187, 1164, -1,1168, 1166, 1165, -1, + 1165, 1187, 1169, -1,1182, 2391, 1183, -1,859, 1212, 956, -1,995, 2720, 994, -1,957, + 956, 2392, -1,1215, 974, 2705, -1,957, 2395, 958, -1,2392, 2395, 957, -1,958, 2395, + 904, -1,2705, 974, 2706, -1,2392, 956, 1212, -1,2392, 1320, 1321, -1,2393, 1320, + 2392, -1,2392, 1321, 2396, -1,2396, 1322, 1278, -1,1322, 2396, 1321, -1,2396, 1278, + 1290, -1,1289, 1278, 1279, -1,2392, 2396, 2395, -1,2392, 1212, 1213, -1,2395, 2396, + 2399, -1,976, 2707, 975, -1,904, 2395, 904, -1,904, 2395, 903, -1,2401, 933, 2399, -1, + 2399, 933, 903, -1,1292, 1293, 2399, -1,2399, 1291, 1292, -1,1293, 2401, 2399, -1, + 903, 2395, 2399, -1,1290, 1291, 2399, -1,1290, 2399, 2396, -1,1310, 1304, 1305, -1, + 1305, 1306, 1310, -1,1307, 1309, 1306, -1,1289, 1290, 1278, -1,1279, 1280, 1289, -1, + 2707, 974, 975, -1,1281, 1282, 1289, -1,1283, 1288, 1282, -1,1284, 1288, 1283, -1, + 1288, 1289, 1282, -1,1285, 1288, 1284, -1,1319, 2393, 1318, -1,1319, 1320, 2393, -1, + 1325, 1316, 2400, -1,1318, 2393, 2397, -1,2397, 1316, 1317, -1,2398, 1316, 2397, -1, + 1318, 2397, 1317, -1,2393, 2394, 2397, -1,1213, 2393, 2392, -1,1285, 1287, 1288, -1, + 1287, 1285, 1286, -1,1309, 1310, 1306, -1,1310, 1329, 1304, -1,1311, 1329, 1310, -1, + 2729, 1325, 1314, -1,1325, 1315, 1316, -1,1312, 1313, 1326, -1,2730, 1314, 1325, -1, + 1312, 1326, 1311, -1,2736, 2738, 2724, -1,1307, 1308, 1309, -1,2393, 1213, 1214, -1, + 1289, 1280, 1281, -1,1223, 2719, 2413, -1,1329, 1311, 1326, -1,932, 933, 2401, -1, + 1293, 1294, 2401, -1,2404, 931, 2401, -1,2401, 931, 932, -1,1295, 2401, 1294, -1, + 1295, 2405, 2401, -1,1300, 1331, 1299, -1,1301, 1330, 1300, -1,2405, 1295, 1296, -1, + 1332, 1297, 1298, -1,2405, 1297, 1235, -1,1330, 1301, 1302, -1,1302, 1303, 1329, -1, + 2405, 1296, 1297, -1,1349, 2709, 2710, -1,1211, 900, 2407, -1,954, 1211, 2407, -1, + 895, 955, 967, -1,1347, 2712, 1346, -1,893, 894, 967, -1,895, 967, 894, -1,2711, + 1346, 2712, -1,954, 2411, 955, -1,2404, 2405, 2407, -1,2405, 2404, 2401, -1,2407, + 2405, 2408, -1,2404, 2407, 900, -1,2411, 967, 955, -1,2411, 2407, 2408, -1,2411, + 966, 967, -1,2409, 2411, 2408, -1,2408, 2405, 1235, -1,2412, 966, 2411, -1,2411, + 954, 2407, -1,900, 931, 2404, -1,1348, 2713, 1347, -1,1331, 2733, 1299, -1,1329, + 2402, 1328, -1,1329, 1326, 2731, -1,2402, 2732, 1328, -1,1331, 1300, 1330, -1,1332, + 2406, 1297, -1,1330, 1302, 1329, -1,1333, 1334, 2726, -1,1232, 1233, 2735, -1,1233, + 2406, 2735, -1,1230, 1231, 1333, -1,1232, 1333, 1231, -1,1234, 1297, 2406, -1,2737, + 2736, 2723, -1,1234, 2406, 1233, -1,1236, 2408, 1235, -1,1235, 1297, 1234, -1,2412, + 2411, 2409, -1,1260, 2412, 2409, -1,1237, 1238, 2409, -1,2408, 1237, 2409, -1,1239, + 2409, 1238, -1,2408, 1236, 1237, -1,2728, 1240, 1241, -1,1261, 2412, 1260, -1,1259, + 1260, 2409, -1,2409, 1258, 1259, -1,1240, 1277, 2409, -1,1242, 2728, 1241, -1,1239, + 1240, 2409, -1,2412, 1261, 1246, -1,1303, 1304, 1329, -1,966, 2412, 1197, -1,1219, + 1348, 2745, -1,1274, 2738, 1323, -1,1323, 1324, 2400, -1,2725, 1275, 1337, -1,1336, + 1275, 1335, -1,1336, 1337, 1275, -1,1273, 1274, 1339, -1,1272, 1273, 1340, -1,1270, + 1271, 1266, -1,1266, 1269, 1270, -1,1266, 1271, 1342, -1,1271, 1272, 1341, -1,1323, + 2400, 1274, -1,1267, 1269, 1266, -1,1268, 1269, 1267, -1,2728, 1243, 1276, -1,1244, + 1276, 1243, -1,1245, 2726, 1244, -1,1276, 1244, 2726, -1,1333, 2726, 1230, -1,1265, + 2742, 2739, -1,1190, 1263, 1343, -1,1192, 2722, 1191, -1,1190, 2410, 1189, -1,1191, + 1263, 1190, -1,1343, 1263, 1264, -1,2722, 1192, 1193, -1,2741, 1266, 2740, -1,2725, + 1337, 1338, -1,1316, 2398, 2400, -1,1352, 2398, 2394, -1,1353, 2398, 2748, -1,1324, + 1325, 2400, -1,2752, 1339, 2749, -1,1339, 1274, 2400, -1,1218, 2709, 2746, -1,2400, + 2398, 1353, -1,2403, 1355, 2754, -1,2394, 1214, 974, -1,1339, 1340, 1273, -1,1352, + 974, 1351, -1,974, 1352, 2394, -1,1351, 974, 1350, -1,1350, 974, 1218, -1,2746, 2709, + 1349, -1,974, 1217, 1218, -1,1350, 1218, 2747, -1,2714, 2718, 1222, -1,1216, 1217, + 974, -1,1341, 1272, 1340, -1,1343, 1264, 2743, -1,2753, 1354, 1355, -1,1271, 1341, + 1342, -1,974, 2708, 1216, -1,2745, 2710, 1219, -1,1219, 2713, 1348, -1,1347, 2713, + 2712, -1,974, 1215, 2708, -1,1349, 2710, 2745, -1,2410, 1190, 1343, -1,2397, 2394, + 2398, -1,2393, 1214, 2394, -1,1256, 1277, 1255, -1,1277, 1256, 1257, -1,2409, 1257, + 1258, -1,1255, 1277, 1262, -1,2409, 1277, 1257, -1,1253, 1254, 1262, -1,1262, 1254, + 1255, -1,1194, 1262, 1193, -1,1252, 1194, 1251, -1,1194, 1252, 1253, -1,1253, 1262, + 1194, -1,1251, 1194, 1250, -1,1262, 2722, 1193, -1,1250, 1194, 1195, -1,1247, 1248, + 2412, -1,1196, 2412, 1195, -1,1195, 1248, 1249, -1,2412, 1196, 1197, -1,1248, 1195, + 2412, -1,1250, 1195, 1249, -1,1247, 2412, 1246, -1,1204, 1199, 1200, -1,1206, 1198, + 1199, -1,1209, 1197, 1208, -1,1197, 1210, 965, -1,1210, 1197, 1209, -1,1208, 1197, + 1198, -1,1203, 1200, 1201, -1,1197, 965, 966, -1,1229, 1188, 2410, -1,1228, 1229, + 2410, -1,1203, 1204, 1200, -1,1205, 1199, 1204, -1,1205, 1206, 1199, -1,2413, 1227, + 2721, -1,2744, 1344, 2410, -1,2711, 1344, 1345, -1,1223, 1228, 1344, -1,1227, 2413, + 2719, -1,1344, 2715, 1223, -1,1223, 2413, 2721, -1,1346, 2711, 1345, -1,1228, 2410, + 1344, -1,1188, 1189, 2410, -1,1208, 1198, 1207, -1,1224, 2720, 1227, -1,994, 1225, + 1226, -1,2720, 1224, 1225, -1,1225, 994, 2720, -1,1344, 2711, 2715, -1,1198, 1206, + 1207, -1,2714, 2716, 2718, -1,1220, 1221, 2717, -1,2707, 2706, 974, -1,1222, 2715, + 2714, -1,1226, 993, 994, -1,1221, 2718, 2716, -1,1201, 1202, 1203, -1,2716, 2717, + 1221, -1,1227, 2719, 1224, -1,2715, 1222, 1223, -1,1223, 2721, 1228, -1,1191, 2722, + 1263, -1,2737, 2723, 2725, -1,2725, 1338, 2737, -1,1230, 2726, 1245, -1,2727, 1334, + 1335, -1,1334, 2727, 2726, -1,1275, 2727, 1335, -1,2728, 1277, 1240, -1,1243, 2728, + 1242, -1,1315, 1325, 2729, -1,1326, 1313, 2730, -1,1314, 2730, 1313, -1,1329, 2731, + 2402, -1,2738, 1274, 2724, -1,1328, 2732, 1327, -1,2732, 2402, 2731, -1,1332, 1298, + 2733, -1,1299, 2733, 1298, -1,1332, 2734, 2406, -1,1232, 2735, 1333, -1,2734, 2735, + 2406, -1,2724, 2723, 2736, -1,1265, 2739, 1264, -1,1266, 1342, 2740, -1,1266, 2741, + 1265, -1,2741, 2742, 1265, -1,1264, 2739, 2743, -1,1343, 2744, 2410, -1,1218, 2746, + 2747, -1,1352, 2748, 2398, -1,1339, 2400, 2749, -1,2400, 1353, 2750, -1,2749, 2400, + 2751, -1,2750, 2751, 2400, -1,2752, 2403, 2754, -1,1355, 2403, 2753, -1,2752, 2753, + 2403, -1,2752, 2754, 1339, -1,1357, 1358, 1359, -1,2414, 1359, 1360, -1,1357, 1359, + 2414, -1,1356, 2414, 1361, -1,1357, 2414, 1356, -1,1361, 2414, 1360, -1,1212, 859, + 947, -1,2415, 947, 948, -1,2421, 856, 855, -1,2421, 855, 854, -1,856, 2418, 948, -1, + 2415, 948, 2418, -1,1213, 1212, 2415, -1,2416, 2415, 2418, -1,2418, 856, 2421, -1, + 2424, 2421, 950, -1,2421, 854, 950, -1,2422, 2421, 2424, -1,949, 2424, 950, -1,2421, + 2419, 2418, -1,1212, 947, 2415, -1,2427, 949, 851, -1,2427, 851, 850, -1,2430, 849, + 1364, -1,2430, 1364, 1363, -1,849, 2427, 850, -1,1362, 846, 1367, -1,1362, 2434, + 1363, -1,849, 2430, 2427, -1,1363, 2434, 2430, -1,846, 845, 1367, -1,845, 844, 1367, -1, + 2431, 2427, 2430, -1,2427, 2424, 949, -1,2427, 2425, 2424, -1,2416, 1214, 1213, -1, + 2417, 2416, 2419, -1,2416, 2418, 2419, -1,2422, 2424, 2425, -1,2419, 2422, 2420, -1, + 2422, 2425, 2423, -1,2425, 2427, 2428, -1,2416, 2417, 1214, -1,2419, 2421, 2422, -1, + 2420, 974, 2417, -1,1214, 2417, 974, -1,2419, 2420, 2417, -1,2426, 974, 2423, -1, + 2420, 2423, 974, -1,2429, 974, 2426, -1,2425, 2426, 2423, -1,2422, 2423, 2420, -1, + 2429, 2426, 2425, -1,2432, 2428, 2431, -1,2428, 2427, 2431, -1,2429, 2428, 2432, -1, + 2435, 2432, 2431, -1,1367, 2435, 2434, -1,2431, 2434, 2435, -1,1366, 2435, 1367, -1, + 1362, 1367, 2434, -1,2435, 2433, 2432, -1,2430, 2434, 2431, -1,2433, 2435, 2436, -1, + 2433, 974, 2429, -1,974, 2433, 2436, -1,2435, 1366, 2436, -1,2436, 1366, 1365, -1, + 2436, 1365, 974, -1,2429, 2432, 2433, -1,2429, 2425, 2428, -1,1213, 2415, 2416, -1, + 1367, 844, 843, -1,1367, 843, 842, -1,2437, 939, 940, -1,2440, 940, 941, -1,939, + 1367, 842, -1,2440, 2437, 940, -1,941, 839, 2440, -1,1366, 1367, 2437, -1,2441, 2437, + 2440, -1,838, 2444, 839, -1,839, 2444, 2440, -1,2441, 2440, 2444, -1,2441, 2438, + 2437, -1,2437, 1367, 939, -1,2444, 837, 952, -1,2444, 952, 951, -1,2450, 834, 833, -1, + 2450, 833, 832, -1,834, 2447, 951, -1,2447, 834, 2450, -1,2445, 2444, 2447, -1,2448, + 2447, 2450, -1,832, 937, 2450, -1,937, 938, 2453, -1,938, 829, 2456, -1,2450, 937, + 2453, -1,2444, 951, 2447, -1,2444, 838, 837, -1,2444, 2442, 2441, -1,2438, 1365, + 1366, -1,2439, 2438, 2442, -1,2438, 2441, 2442, -1,2445, 2447, 2448, -1,2442, 2445, + 2443, -1,2445, 2448, 2446, -1,2448, 2450, 2451, -1,2438, 2439, 1365, -1,2442, 2444, + 2445, -1,2443, 974, 2439, -1,1365, 2439, 974, -1,2442, 2443, 2439, -1,2449, 974, + 2446, -1,2443, 2446, 974, -1,2452, 974, 2449, -1,2448, 2449, 2446, -1,2445, 2446, + 2443, -1,2452, 2449, 2448, -1,2454, 2451, 2453, -1,2451, 2450, 2453, -1,2452, 2451, + 2454, -1,2457, 2454, 2453, -1,971, 2457, 2456, -1,2453, 2456, 2457, -1,972, 2457, + 971, -1,829, 971, 2456, -1,2457, 2455, 2454, -1,938, 2456, 2453, -1,2455, 2457, 2458, -1, + 2455, 974, 2452, -1,974, 2455, 2458, -1,2457, 972, 2458, -1,2458, 972, 973, -1,2458, + 973, 974, -1,2452, 2454, 2455, -1,2452, 2448, 2451, -1,1366, 2437, 2438, -1,1370, + 1369, 1368, -1,1371, 1370, 2459, -1,2459, 1370, 1368, -1,1372, 1371, 2460, -1,2460, + 1371, 2459, -1,1372, 2461, 2462, -1,1368, 1238, 2459, -1,1238, 1382, 2459, -1,1381, + 2461, 2460, -1,1372, 2460, 2461, -1,2461, 1381, 1380, -1,1234, 2461, 1380, -1,1382, + 1381, 2460, -1,1382, 2460, 2459, -1,1373, 1372, 2462, -1,2462, 2463, 1373, -1,1374, + 1373, 2463, -1,1374, 2463, 2464, -1,1379, 2463, 2462, -1,1378, 1377, 1376, -1,1375, + 1374, 2464, -1,1375, 2465, 1376, -1,1376, 2465, 1378, -1,1234, 1379, 2462, -1,1232, + 2464, 2463, -1,1379, 1232, 2463, -1,1231, 1230, 2465, -1,1378, 2465, 1230, -1,1231, + 2464, 1232, -1,2465, 2464, 1231, -1,2465, 1375, 2464, -1,2461, 1234, 2462, -1,1378, + 2466, 1377, -1,1383, 1377, 2466, -1,1230, 2466, 1378, -1,1385, 1384, 2468, -1,2466, + 2467, 1383, -1,1384, 1383, 2467, -1,1386, 1385, 2469, -1,1230, 1394, 2466, -1,2467, + 2466, 1394, -1,1393, 2467, 1394, -1,1392, 2469, 2468, -1,1385, 2468, 2469, -1,2468, + 1393, 1392, -1,1242, 2469, 1392, -1,2467, 1393, 2468, -1,2468, 1384, 2467, -1,1242, + 1386, 2469, -1,2471, 1387, 2470, -1,1386, 2470, 1387, -1,2472, 1387, 2471, -1,1391, + 2471, 2470, -1,1240, 1388, 2472, -1,1369, 1389, 2474, -1,2473, 1389, 1388, -1,1387, + 2472, 1388, -1,1391, 2472, 2471, -1,1242, 1391, 2470, -1,1240, 2473, 1388, -1,1240, + 2472, 1391, -1,1240, 1390, 2473, -1,1238, 1368, 2474, -1,1369, 2474, 1368, -1,2474, + 1390, 1238, -1,1389, 2473, 1390, -1,1390, 2474, 1389, -1,1386, 1242, 2470, -1,2475, + 1403, 1373, -1,1373, 1404, 2475, -1,1375, 2475, 1404, -1,1401, 1402, 2475, -1,1369, + 2475, 1400, -1,2475, 1369, 1401, -1,1400, 2475, 1388, -1,1402, 1403, 2475, -1,1375, + 1376, 2475, -1,1377, 1395, 2475, -1,1396, 2475, 1395, -1,1396, 1397, 2475, -1,2475, + 1399, 1388, -1,1399, 2475, 1386, -1,1398, 1386, 2475, -1,1397, 1398, 2475, -1,1377, + 2475, 1376, -1,2476, 1407, 1406, -1,1408, 1407, 2476, -1,1405, 2476, 1406, -1,1409, + 1408, 2478, -1,2477, 1408, 2476, -1,1409, 2478, 2479, -1,1246, 1261, 1405, -1,1261, + 2476, 1405, -1,1417, 2478, 2477, -1,1408, 2477, 2478, -1,2477, 1418, 1417, -1,1258, + 2478, 1417, -1,1261, 1418, 2477, -1,1261, 2477, 2476, -1,1410, 1409, 2479, -1,2479, + 2480, 1410, -1,1411, 1410, 2480, -1,1411, 2480, 2481, -1,1416, 2480, 2479, -1,1415, + 1414, 1413, -1,1412, 1411, 2481, -1,1412, 2482, 1413, -1,1413, 2482, 1415, -1,1258, + 1416, 2479, -1,1256, 2481, 2480, -1,1416, 1256, 2480, -1,1255, 1254, 2482, -1,1415, + 2482, 1254, -1,1255, 2481, 1256, -1,2482, 2481, 1255, -1,2482, 1412, 2481, -1,2478, + 1258, 2479, -1,1415, 2483, 1414, -1,1419, 1414, 2483, -1,1254, 2483, 1415, -1,2484, + 1420, 1419, -1,1419, 2483, 2484, -1,1420, 2485, 1421, -1,1422, 1421, 2486, -1,1254, + 1430, 2483, -1,2484, 2483, 1430, -1,1429, 2484, 1430, -1,1428, 2486, 2485, -1,1421, + 2485, 2486, -1,2485, 1429, 1428, -1,1250, 2486, 1428, -1,2484, 1429, 2485, -1,2485, + 1420, 2484, -1,1250, 1422, 2486, -1,2488, 1423, 2487, -1,1422, 2487, 1423, -1,2489, + 1423, 2488, -1,1427, 2488, 2487, -1,1248, 1424, 2489, -1,1406, 1425, 2491, -1,2490, + 1425, 1424, -1,1423, 2489, 1424, -1,1427, 2489, 2488, -1,1250, 1427, 2487, -1,1248, + 2490, 1424, -1,1248, 2489, 1427, -1,1248, 1426, 2490, -1,1246, 1405, 2491, -1,1406, + 2491, 1405, -1,2491, 1426, 1246, -1,1425, 2490, 1426, -1,1426, 2491, 1425, -1,1422, + 1250, 2487, -1,2492, 1436, 1437, -1,1438, 2492, 1437, -1,1410, 2492, 1438, -1,1406, + 1436, 2492, -1,1435, 1406, 2492, -1,1435, 2492, 1424, -1,1410, 1439, 2492, -1,2492, + 1412, 1440, -1,1440, 1414, 2492, -1,1431, 2492, 1414, -1,2492, 1434, 1424, -1,1434, + 2492, 1422, -1,2492, 1433, 1422, -1,1433, 2492, 1432, -1,2492, 1431, 1432, -1,1412, + 2492, 1439, -1,1442, 1444, 1443, -1,1262, 1443, 1444, -1,1442, 1441, 1264, -1,1444, + 1442, 1264, -1,1441, 1446, 1264, -1,1447, 1264, 1446, -1,1445, 1266, 1447, -1,1446, + 1445, 1447, -1,1449, 1266, 1445, -1,1450, 1266, 1449, -1,1449, 1448, 1450, -1,1268, + 1450, 1448, -1,1453, 1268, 1448, -1,1452, 1453, 1448, -1,1451, 1270, 1452, -1,1453, + 1452, 1270, -1,1455, 1270, 1451, -1,1456, 1270, 1455, -1,1454, 1272, 1456, -1,1455, + 1454, 1456, -1,1454, 1459, 1272, -1,1458, 1459, 1454, -1,1458, 1457, 1459, -1,1274, + 1459, 1457, -1,1457, 1462, 1274, -1,1461, 1462, 1457, -1,1461, 1460, 1462, -1,1276, + 1462, 1460, -1,1463, 1464, 1460, -1,1276, 1460, 1464, -1,1463, 1443, 1262, -1,1464, + 1463, 1262, -1,1356, 1467, 1466, -1,1468, 1356, 1466, -1,1466, 1465, 1468, -1,1358, + 1468, 1465, -1,1471, 1360, 1470, -1,1470, 1360, 1469, -1,1469, 1358, 1465, -1,1469, + 1465, 1470, -1,1472, 1360, 1471, -1,1473, 1360, 1472, -1,1472, 1467, 1356, -1,1473, + 1472, 1356, -1,1476, 1457, 1477, -1,1471, 1461, 1451, -1,1471, 1470, 1461, -1,1471, + 2757, 1472, -1,1476, 1451, 1461, -1,1461, 1470, 2758, -1,1475, 1460, 1465, -1,1443, + 1475, 1474, -1,1476, 1454, 2755, -1,2494, 1465, 1481, -1,1465, 1460, 2758, -1,1465, + 1474, 1475, -1,2494, 1474, 1465, -1,1461, 2758, 1460, -1,1454, 1476, 1477, -1,1451, + 1476, 1478, -1,2757, 1448, 1472, -1,1451, 1479, 2493, -1,2494, 1467, 1441, -1,2493, + 2757, 1471, -1,1467, 1472, 1448, -1,2494, 1481, 1467, -1,1448, 1480, 1446, -1,2757, + 2493, 1479, -1,1446, 1441, 1448, -1,2755, 2756, 1476, -1,1480, 1445, 1446, -1,1448, + 1441, 1467, -1,2494, 1441, 1474, -1,1471, 1451, 2493, -1,1478, 1476, 2756, -1,1484, + 1485, 1006, -1,1483, 1485, 1484, -1,1482, 1016, 1483, -1,1485, 1483, 1016, -1,1484, + 1006, 1488, -1,1488, 1006, 1486, -1,1486, 1487, 1488, -1,1487, 1486, 1008, -1,1008, + 1491, 1487, -1,1491, 1008, 1489, -1,1489, 1010, 1490, -1,1489, 1490, 1491, -1,1492, + 1012, 1493, -1,1494, 1012, 1492, -1,1490, 1010, 1494, -1,1492, 1490, 1494, -1,1493, + 1012, 1497, -1,1497, 1012, 1495, -1,1495, 1014, 1496, -1,1495, 1496, 1497, -1,1482, + 1498, 1016, -1,1499, 1016, 1498, -1,1496, 1014, 1499, -1,1498, 1496, 1499, -1,1503, + 1490, 1502, -1,1501, 1496, 1500, -1,1501, 1500, 1482, -1,1482, 2495, 1501, -1,1503, + 1502, 1504, -1,1493, 1504, 1502, -1,1505, 1493, 2495, -1,2760, 2759, 2495, -1,1493, + 1505, 1484, -1,1484, 1504, 1493, -1,1482, 1505, 2495, -1,2760, 2495, 1493, -1,1504, + 1487, 1503, -1,2759, 1501, 2495, -1,1509, 1508, 1018, -1,1510, 1018, 1508, -1,1507, + 1506, 1510, -1,1508, 1507, 1510, -1,1509, 1018, 1513, -1,1513, 1018, 1511, -1,1511, + 1512, 1513, -1,1512, 1511, 1020, -1,1020, 1516, 1512, -1,1516, 1020, 1514, -1,1514, + 1022, 1515, -1,1514, 1515, 1516, -1,1507, 1517, 1506, -1,1518, 1506, 1517, -1,1515, + 1022, 1518, -1,1517, 1515, 1518, -1,1519, 2496, 1515, -1,1516, 1515, 2496, -1,1519, + 1507, 1508, -1,1508, 2496, 1519, -1,1516, 1520, 1512, -1,2496, 1508, 1509, -1,1520, + 1516, 1509, -1,1516, 2496, 1509, -1,1281, 1521, 2497, -1,1525, 2497, 1524, -1,1281, + 2497, 1527, -1,1527, 1525, 1526, -1,1525, 1527, 2497, -1,2497, 1521, 1522, -1,1279, + 1278, 1522, -1,1522, 2498, 2497, -1,2498, 1523, 1524, -1,1523, 2498, 1522, -1,2498, + 1524, 2497, -1,1522, 1521, 1279, -1,1278, 1528, 1522, -1,1531, 1532, 1522, -1,1522, + 1528, 1531, -1,1529, 1531, 1528, -1,1530, 1531, 1529, -1,1529, 1528, 1321, -1,1321, + 1320, 1529, -1,2499, 1530, 1529, -1,1529, 1320, 1319, -1,2499, 1319, 1533, -1,1319, + 2499, 1529, -1,1535, 1533, 1534, -1,1533, 1535, 2499, -1,2499, 1535, 1530, -1,1536, + 1317, 2500, -1,1319, 1536, 1533, -1,1534, 1533, 2500, -1,2500, 1542, 1534, -1,2501, + 1542, 2500, -1,1533, 1536, 2500, -1,2500, 1317, 2501, -1,2501, 1537, 2502, -1,1537, + 2501, 1317, -1,2502, 1315, 1538, -1,1315, 2502, 1537, -1,2501, 2502, 1541, -1,1541, + 2502, 1540, -1,1538, 1539, 1540, -1,2502, 1538, 1540, -1,2501, 1541, 1542, -1,1315, + 1543, 2503, -1,2503, 1543, 2504, -1,1315, 2503, 1538, -1,1538, 2503, 1539, -1,1549, + 2504, 1548, -1,1539, 2503, 1549, -1,2503, 2504, 1549, -1,1543, 1544, 2504, -1,1545, + 1311, 1546, -1,1544, 1545, 2505, -1,1548, 2505, 1547, -1,1548, 2504, 2505, -1,1546, + 1547, 2505, -1,2505, 1545, 1546, -1,2505, 2504, 1544, -1,1311, 1552, 1547, -1,1552, + 1311, 1550, -1,1550, 1309, 1551, -1,1550, 1551, 1552, -1,1309, 1553, 2506, -1,2506, + 1553, 2507, -1,1309, 2506, 1566, -1,2507, 1554, 2508, -1,2508, 1554, 1555, -1,1554, + 2507, 1553, -1,2506, 2507, 1564, -1,1566, 1565, 1551, -1,1566, 2506, 1565, -1,2507, + 1563, 1564, -1,1565, 2506, 1564, -1,1563, 2508, 1562, -1,2508, 1563, 2507, -1,1555, + 2509, 2508, -1,2509, 1556, 2510, -1,1556, 2509, 1306, -1,2509, 2510, 1562, -1,1306, + 2509, 1555, -1,2510, 1557, 2511, -1,1557, 2510, 1556, -1,2511, 1557, 1303, -1,2510, + 1561, 1562, -1,1561, 2510, 2511, -1,1561, 2511, 1560, -1,1560, 1558, 1559, -1,1558, + 1560, 2511, -1,2511, 1303, 1558, -1,2509, 1562, 2508, -1,1303, 1567, 1558, -1,1558, + 1567, 2512, -1,1559, 2512, 1571, -1,2512, 1559, 1558, -1,1571, 2512, 1568, -1,1567, + 1300, 2512, -1,1300, 1299, 2513, -1,2513, 1299, 1568, -1,1300, 2513, 2512, -1,1570, + 1568, 1569, -1,1570, 1571, 1568, -1,1568, 2512, 2513, -1,1299, 1572, 1568, -1,1575, + 1569, 1568, -1,1568, 1572, 1575, -1,1573, 1575, 1572, -1,1574, 1575, 1573, -1,1573, + 1572, 1297, -1,1297, 1296, 2514, -1,2514, 1296, 2515, -1,1297, 2514, 1573, -1,1573, + 1580, 1574, -1,1579, 1580, 1573, -1,1573, 2514, 2515, -1,1576, 1294, 1577, -1,1576, + 1577, 2515, -1,1579, 2515, 1578, -1,1579, 1573, 2515, -1,1578, 2515, 1577, -1,2515, + 1296, 1576, -1,1294, 1581, 2516, -1,1582, 2517, 1581, -1,1581, 2517, 2516, -1,2518, + 2517, 1582, -1,1294, 2516, 1577, -1,1578, 1577, 1591, -1,2516, 1590, 1591, -1,1591, + 1577, 2516, -1,1589, 1590, 2517, -1,2517, 1590, 2516, -1,2518, 1582, 1292, -1,2518, + 2519, 1589, -1,2519, 2518, 1583, -1,2519, 1584, 2520, -1,1584, 2519, 1583, -1,2518, + 1292, 1583, -1,2520, 1584, 1289, -1,2519, 1588, 1589, -1,1588, 2519, 2520, -1,1588, + 2520, 1587, -1,1587, 1585, 1586, -1,1585, 1587, 2520, -1,2520, 1289, 1585, -1,2518, + 1589, 2517, -1,1289, 1592, 1586, -1,1586, 1592, 1594, -1,1594, 1287, 1593, -1,1287, + 1594, 1592, -1,1605, 1287, 1595, -1,2521, 1595, 1596, -1,1605, 1595, 2521, -1,2522, + 1596, 1597, -1,2521, 1596, 2522, -1,2524, 2523, 1597, -1,2521, 1593, 1605, -1,2521, + 1604, 1593, -1,2523, 1603, 1604, -1,2523, 2522, 1597, -1,2524, 1603, 2523, -1,2523, + 1604, 2522, -1,2521, 2522, 1604, -1,2524, 1597, 1284, -1,1284, 2525, 2524, -1,2525, + 1284, 1598, -1,2526, 2525, 1598, -1,2524, 2525, 1601, -1,2527, 1599, 1281, -1,2526, + 1598, 1599, -1,1527, 2527, 1281, -1,2524, 1601, 1602, -1,2525, 2526, 1600, -1,2525, + 1600, 1601, -1,1600, 2527, 1526, -1,2527, 1600, 2526, -1,1526, 2527, 1527, -1,2526, + 1599, 2527, -1,2524, 1602, 1603, -1,1530, 1535, 1607, -1,1523, 1607, 1524, -1,1565, + 1589, 1619, -1,1534, 1524, 1607, -1,1534, 1606, 1524, -1,2528, 1619, 1620, -1,1619, + 2528, 1565, -1,1586, 1621, 2528, -1,1607, 1535, 1534, -1,1586, 2528, 1620, -1,1618, + 1562, 1612, -1,1562, 1618, 1611, -1,1618, 1612, 1613, -1,1617, 1578, 1614, -1,1613, + 1578, 1618, -1,1559, 1578, 1613, -1,1611, 1589, 1610, -1,2528, 1551, 1565, -1,1559, + 1614, 1578, -1,1611, 1618, 1589, -1,1589, 1565, 1610, -1,1617, 1614, 1615, -1,1526, + 1541, 1625, -1,1526, 1606, 1542, -1,1539, 1622, 1623, -1,2528, 1593, 1622, -1,1621, + 1593, 2528, -1,1625, 1541, 1624, -1,1541, 1526, 1542, -1,1624, 1541, 1540, -1,1603, + 1602, 1540, -1,1540, 1602, 1624, -1,1603, 1540, 1623, -1,1540, 1539, 1623, -1,1609, + 2528, 1547, -1,1609, 1551, 2528, -1,1574, 1580, 1616, -1,1617, 1615, 1616, -1,1580, + 1617, 1616, -1,2528, 1608, 1548, -1,2528, 1548, 1547, -1,1616, 1570, 1569, -1,1616, + 1615, 1570, -1,2528, 1622, 1608, -1,1622, 1539, 1608, -1,1606, 1534, 1542, -1,1325, + 1626, 1629, -1,1629, 1626, 1628, -1,1628, 1323, 1627, -1,1323, 1628, 1626, -1,1629, + 1632, 1325, -1,1631, 1632, 1629, -1,1630, 1327, 1631, -1,1632, 1631, 1327, -1,1635, + 1327, 1630, -1,1634, 1635, 1630, -1,1633, 1329, 1634, -1,1635, 1634, 1329, -1,1633, + 1638, 1329, -1,1637, 1638, 1633, -1,1637, 1636, 1638, -1,1331, 1638, 1636, -1,1641, + 1642, 1636, -1,1331, 1636, 1642, -1,1640, 1333, 1642, -1,1333, 1640, 1639, -1,1641, + 1640, 1642, -1,1639, 1645, 1333, -1,1646, 1333, 1645, -1,1644, 1643, 1646, -1,1645, + 1644, 1646, -1,1648, 1643, 1644, -1,1649, 1643, 1648, -1,1648, 1647, 1649, -1,1337, + 1649, 1647, -1,1651, 1647, 1650, -1,1337, 1647, 1651, -1,1627, 1323, 1651, -1,1650, + 1627, 1651, -1,1655, 1633, 1634, -1,2762, 2529, 1630, -1,1655, 1634, 1630, -1,1641, + 1636, 1630, -1,1647, 1641, 1630, -1,1630, 1636, 1655, -1,2529, 1647, 1630, -1,1641, + 1647, 2530, -1,1641, 2530, 1640, -1,2761, 1653, 2529, -1,1654, 2530, 1647, -1,2529, + 1653, 1647, -1,1627, 1653, 1656, -1,1629, 1652, 2763, -1,2763, 1627, 2764, -1,1627, + 2763, 1652, -1,1639, 1640, 1645, -1,1640, 1644, 1645, -1,1644, 1640, 1654, -1,2530, + 1654, 1640, -1,1653, 2761, 1656, -1,2761, 2529, 2762, -1,1656, 2764, 1627, -1,1657, + 2531, 1658, -1,1659, 1658, 2531, -1,2532, 1659, 2531, -1,1660, 1659, 2532, -1,1667, + 1657, 1193, -1,1667, 1666, 2531, -1,2531, 1657, 1667, -1,2532, 1666, 1665, -1,2531, + 1666, 2532, -1,2533, 1660, 2532, -1,1664, 1662, 1661, -1,1662, 1664, 1663, -1,2533, + 1664, 1661, -1,2532, 1665, 2533, -1,1189, 2533, 1665, -1,1189, 1188, 2534, -1,1664, + 2534, 1188, -1,2533, 1189, 2534, -1,2534, 1664, 2533, -1,1660, 2533, 1661, -1,1195, + 1669, 1670, -1,1669, 1195, 1668, -1,1668, 1193, 1658, -1,1668, 1658, 1669, -1,1673, + 1197, 1672, -1,1672, 1197, 1671, -1,1671, 1670, 1672, -1,1670, 1671, 1195, -1,1673, + 1676, 1197, -1,1675, 1676, 1673, -1,1674, 1199, 1675, -1,1676, 1675, 1199, -1,1674, + 2535, 1677, -1,2535, 1674, 1678, -1,1200, 1199, 1677, -1,1677, 2535, 1200, -1,1678, + 1679, 1680, -1,2535, 1201, 1200, -1,2535, 1680, 1201, -1,1680, 2535, 1678, -1,2536, + 1684, 2537, -1,1679, 1684, 2536, -1,1201, 1680, 1683, -1,2536, 1683, 1680, -1,1682, + 1683, 2536, -1,1680, 1679, 2536, -1,2537, 1684, 1685, -1,2537, 1685, 2538, -1,2538, + 1685, 1686, -1,1687, 1688, 1686, -1,2538, 1686, 1688, -1,1682, 2537, 1681, -1,2538, + 1205, 1681, -1,1205, 2538, 1688, -1,2537, 2538, 1681, -1,2537, 1682, 2536, -1,2539, + 1687, 1691, -1,2540, 2539, 1691, -1,1205, 1688, 1690, -1,1207, 1690, 2539, -1,2539, + 1690, 1688, -1,1688, 1687, 2539, -1,2540, 1691, 1692, -1,2540, 2541, 1207, -1,2541, + 2540, 1693, -1,1693, 1694, 2541, -1,2540, 1692, 1693, -1,2541, 1694, 1695, -1,1207, + 2541, 1689, -1,1695, 1209, 1689, -1,2541, 1695, 1689, -1,2540, 1207, 2539, -1,1004, + 1696, 1700, -1,1696, 1699, 1700, -1,1699, 1696, 965, -1,1699, 965, 1698, -1,1210, + 1209, 1697, -1,1210, 1697, 1698, -1,1697, 1209, 1694, -1,1210, 1698, 965, -1,1002, + 1701, 1703, -1,1703, 1701, 1702, -1,1702, 1004, 1700, -1,1004, 1702, 1701, -1,1705, + 1706, 1703, -1,1002, 1703, 1706, -1,1705, 1704, 1000, -1,1706, 1705, 1000, -1,1711, + 1712, 1000, -1,2542, 1712, 1711, -1,1710, 2542, 1704, -1,1711, 1704, 2542, -1,1707, + 2542, 1710, -1,2542, 998, 1712, -1,2543, 997, 998, -1,1707, 997, 2543, -1,2542, 2543, + 998, -1,1708, 1707, 1709, -1,1707, 1710, 1709, -1,2543, 2542, 1707, -1,2544, 1714, + 1663, -1,2544, 1664, 2545, -1,1714, 2544, 1715, -1,1664, 2544, 1663, -1,1229, 1664, + 1188, -1,1664, 1229, 1713, -1,2545, 1664, 1713, -1,2545, 1715, 2544, -1,1707, 1717, + 1716, -1,1717, 1707, 1708, -1,995, 1707, 1716, -1,1713, 995, 2545, -1,995, 1716, + 2545, -1,996, 997, 2546, -1,1707, 2546, 997, -1,995, 996, 2546, -1,995, 2546, 1707, -1, + 1715, 2545, 1716, -1,1718, 1719, 1703, -1,2547, 1719, 1718, -1,2547, 1700, 1722, -1, + 1722, 1698, 2547, -1,1721, 2547, 1698, -1,2547, 1718, 1700, -1,2547, 1704, 1719, -1, + 2547, 1709, 1720, -1,1721, 1709, 2547, -1,1721, 1717, 1709, -1,1708, 1709, 1717, -1, + 1721, 1716, 1717, -1,1704, 2547, 1720, -1,2548, 1734, 1714, -1,1658, 1714, 1734, -1, + 1670, 1734, 2548, -1,2548, 1679, 1678, -1,1678, 1670, 2548, -1,1724, 1662, 1723, -1, + 1714, 1658, 1723, -1,1674, 2549, 1678, -1,1670, 1732, 1733, -1,1732, 1670, 2549, -1, + 1673, 1733, 2766, -1,1733, 1732, 2766, -1,1674, 2765, 2549, -1,1698, 1726, 1721, -1, + 1670, 1678, 2549, -1,1732, 2549, 2765, -1,1679, 2548, 1731, -1,1730, 1731, 2548, -1, + 1662, 1663, 1714, -1,1730, 2548, 1725, -1,1725, 1729, 1730, -1,1714, 1725, 2548, -1, + 1723, 1662, 1714, -1,1716, 1694, 1727, -1,1694, 1721, 1726, -1,1716, 1721, 1694, -1, + 1728, 1725, 1692, -1,1725, 1728, 1687, -1,1692, 1716, 1727, -1,1716, 1692, 1725, -1, + 1687, 1729, 1725, -1,2550, 1044, 1735, -1,2551, 2550, 1735, -1,1741, 1742, 1740, -1, + 1739, 1740, 2550, -1,2550, 1740, 1742, -1,1742, 1044, 2550, -1,2551, 1735, 1046, -1, + 2551, 1046, 2552, -1,2552, 1046, 1047, -1,1026, 1736, 1047, -1,2552, 1047, 1736, -1, + 1739, 2552, 1738, -1,2552, 1739, 2551, -1,1738, 2552, 1736, -1,1736, 1737, 1738, -1, + 2551, 1739, 2550, -1,1026, 1743, 1736, -1,1736, 1743, 2553, -1,1737, 2553, 1748, -1, + 2553, 1737, 1736, -1,2554, 1748, 2553, -1,2553, 1743, 1744, -1,2555, 2554, 1744, -1, + 1744, 2554, 2553, -1,2555, 1744, 1029, -1,1747, 2555, 1746, -1,2555, 1747, 2554, -1, + 1745, 1746, 2555, -1,2555, 1029, 1745, -1,2554, 1747, 1748, -1,1750, 1749, 1031, -1, + 1751, 1031, 1749, -1,1746, 1029, 1751, -1,1749, 1746, 1751, -1,1753, 1752, 1033, -1, + 1754, 1033, 1752, -1,1750, 1031, 1754, -1,1752, 1750, 1754, -1,1033, 1758, 1753, -1, + 1758, 1033, 1755, -1,1755, 1035, 1757, -1,1756, 1757, 1035, -1,1755, 1757, 1758, -1, + 2556, 1759, 2557, -1,1035, 1759, 2556, -1,1756, 1766, 1765, -1,2556, 1765, 1766, -1, + 1764, 1765, 2556, -1,1766, 1035, 2556, -1,2557, 1759, 1037, -1,2557, 1037, 2558, -1, + 2558, 1037, 1760, -1,1039, 1761, 1760, -1,2558, 1760, 1761, -1,1764, 2557, 1763, -1, + 2558, 1762, 1763, -1,1762, 2558, 1761, -1,2557, 2558, 1763, -1,2557, 1764, 2556, -1, + 1761, 1039, 1767, -1,2559, 1767, 1768, -1,1762, 1761, 2559, -1,2559, 1773, 1762, -1, + 2560, 1773, 2559, -1,1761, 1767, 2559, -1,2559, 1768, 2560, -1,2560, 1768, 2561, -1, + 2561, 1768, 1042, -1,2561, 1042, 1769, -1,1772, 2561, 1771, -1,2561, 1772, 2560, -1, + 1770, 1771, 2561, -1,2561, 1769, 1770, -1,2560, 1772, 1773, -1,1777, 1042, 2562, -1, + 1775, 2562, 2563, -1,1777, 2562, 1770, -1,2562, 1776, 1770, -1,1776, 2562, 1775, -1, + 2562, 1042, 1774, -1,2564, 1774, 1044, -1,2564, 1044, 1742, -1,2564, 1741, 1775, -1, + 2564, 2563, 1774, -1,1741, 2564, 1742, -1,2564, 1775, 2563, -1,1774, 2563, 2562, -1, + 1781, 1121, 1780, -1,1780, 1121, 1778, -1,1778, 1108, 1779, -1,1778, 1779, 1780, -1, + 1784, 1119, 1783, -1,1783, 1119, 1782, -1,1782, 1121, 1781, -1,1782, 1781, 1783, -1, + 1786, 1119, 1784, -1,1787, 1119, 1786, -1,1785, 1117, 1787, -1,1786, 1785, 1787, -1, + 1789, 1779, 1788, -1,2566, 1790, 2565, -1,1789, 2565, 1790, -1,2565, 1789, 1788, -1, + 2568, 1791, 2567, -1,1804, 2567, 2566, -1,1791, 2566, 2567, -1,2568, 1792, 1791, -1, + 1790, 2566, 1791, -1,1805, 2566, 2565, -1,1108, 2565, 1788, -1,2566, 1805, 1804, -1, + 1108, 1805, 2565, -1,1802, 2568, 1803, -1,1792, 2568, 2569, -1,1803, 2567, 1111, -1, + 1802, 2569, 2568, -1,2567, 1804, 1111, -1,1803, 2568, 2567, -1,2569, 1793, 1792, -1, + 2571, 1794, 2570, -1,2570, 2569, 1801, -1,1794, 1793, 2570, -1,1795, 1794, 2571, -1, + 1798, 1785, 1797, -1,1796, 1795, 2572, -1,1796, 2573, 1797, -1,1797, 2573, 1798, -1, + 2570, 1801, 1114, -1,1800, 2571, 1114, -1,1802, 1801, 2569, -1,1114, 2571, 2570, -1, + 1799, 2573, 2572, -1,1796, 2572, 2573, -1,2572, 1800, 1799, -1,2573, 1799, 1117, -1, + 1117, 1798, 2573, -1,2571, 1800, 2572, -1,2572, 1795, 2571, -1,1793, 2569, 2570, -1, + 1809, 1137, 1806, -1,1809, 1806, 1808, -1,1808, 1123, 1807, -1,1123, 1808, 1806, -1, + 1811, 1135, 1810, -1,1810, 1135, 1136, -1,1136, 1137, 1809, -1,1136, 1809, 1810, -1, + 1814, 1135, 1811, -1,1813, 1814, 1811, -1,1812, 1133, 1813, -1,1814, 1813, 1133, -1, + 2574, 1816, 1807, -1,2575, 1817, 2574, -1,1816, 2574, 1817, -1,1815, 2574, 1807, -1, + 2577, 1818, 2576, -1,1126, 2576, 2575, -1,1818, 2575, 2576, -1,2577, 1819, 1818, -1, + 1817, 2575, 1818, -1,1124, 2575, 2574, -1,1124, 1815, 1123, -1,2575, 1124, 1829, -1, + 1124, 2574, 1815, -1,1828, 2577, 1127, -1,1819, 2577, 2578, -1,1127, 2576, 1126, -1, + 1828, 2578, 2577, -1,2575, 1829, 1126, -1,1127, 2577, 2576, -1,2578, 1820, 1819, -1, + 2580, 1821, 2579, -1,2579, 2578, 1129, -1,1821, 1820, 2579, -1,1822, 1821, 2580, -1, + 1825, 1812, 1824, -1,1823, 1822, 2581, -1,1823, 2582, 1824, -1,1824, 2582, 1825, -1, + 2579, 1129, 1130, -1,1827, 2580, 1130, -1,1828, 1129, 2578, -1,1130, 2580, 2579, -1, + 1826, 2582, 2581, -1,1823, 2581, 2582, -1,2581, 1827, 1826, -1,2582, 1826, 1133, -1, + 1133, 1825, 2582, -1,2580, 1827, 2581, -1,2581, 1822, 2580, -1,1820, 2578, 2579, -1, + 1841, 1739, 1831, -1,1770, 1739, 1738, -1,1738, 1737, 1770, -1,1840, 1839, 1855, -1, + 1737, 1840, 1822, -1,1741, 1841, 1830, -1,1833, 1832, 1756, -1,2583, 1832, 1770, -1, + 1831, 1830, 1841, -1,1847, 1737, 1822, -1,1831, 1739, 1770, -1,1848, 1822, 1854, -1, + 1847, 1770, 1737, -1,1822, 1840, 1855, -1,1746, 1817, 1818, -1,1839, 1746, 1818, -1, + 1746, 1838, 1809, -1,1746, 1807, 1856, -1,1856, 1817, 1746, -1,1746, 1857, 1807, -1, + 1818, 1819, 1839, -1,1820, 1839, 1819, -1,1854, 1853, 1849, -1,1837, 1838, 1750, -1, + 1809, 1857, 1746, -1,1809, 1838, 2584, -1,1849, 1853, 1812, -1,1820, 1855, 1839, -1, + 1833, 1756, 1762, -1,2767, 1812, 1852, -1,2583, 1756, 1832, -1,1764, 1834, 1835, -1, + 1794, 2583, 1770, -1,1791, 1822, 1848, -1,1846, 1770, 1847, -1,1791, 1847, 1822, -1, + 1770, 1846, 1794, -1,1854, 1849, 1848, -1,1756, 2583, 1757, -1,1794, 1795, 2583, -1, + 1795, 1845, 2583, -1,1845, 1757, 2583, -1,1757, 1844, 1785, -1,1844, 1757, 1845, -1, + 1785, 1843, 1757, -1,1756, 1835, 1762, -1,1779, 1812, 2767, -1,1851, 2584, 1811, -1, + 1852, 1811, 1781, -1,2584, 1781, 1811, -1,1838, 1837, 2584, -1,1850, 2767, 1852, -1, + 1779, 1849, 1812, -1,1784, 1757, 1843, -1,1784, 2584, 1836, -1,1842, 1781, 2584, -1, + 1842, 2584, 1784, -1,1837, 1753, 1836, -1,2584, 1837, 1836, -1,1784, 1836, 1757, -1, + 1850, 1852, 1781, -1,1851, 1809, 2584, -1,1762, 1835, 1834, -1,1860, 1859, 1861, -1, + 1862, 1861, 1859, -1,1858, 1341, 1862, -1,1859, 1858, 1862, -1,1858, 1866, 1341, -1, + 1865, 1867, 1858, -1,1866, 1858, 1867, -1,1864, 1344, 1868, -1,1865, 1864, 1868, -1, + 1863, 1344, 1864, -1,1867, 1865, 1868, -1,1863, 1871, 1344, -1,1870, 1871, 1863, -1, + 1870, 1869, 1871, -1,1346, 1871, 1869, -1,1869, 1874, 1346, -1,1873, 1874, 1869, -1, + 1872, 1348, 1873, -1,1874, 1873, 1348, -1,1877, 1348, 1872, -1,1876, 1877, 1872, -1, + 1875, 1350, 1878, -1,1878, 1876, 1875, -1,1877, 1876, 1878, -1,1352, 1879, 1881, -1, + 1881, 1879, 1880, -1,1880, 1350, 1875, -1,1350, 1880, 1879, -1,1881, 1884, 1352, -1, + 1883, 1884, 1881, -1,1882, 1354, 1883, -1,1884, 1883, 1354, -1,1886, 1354, 1882, -1, + 1885, 1886, 1882, -1,1860, 1861, 1885, -1,1886, 1885, 1861, -1,1888, 1887, 1860, -1, + 1858, 1888, 1882, -1,1888, 1858, 1887, -1,1865, 1872, 2586, -1,1882, 1872, 1865, -1, + 1865, 2586, 1890, -1,1882, 1865, 1858, -1,1882, 2585, 1872, -1,1876, 2768, 2771, -1, + 1883, 1881, 1889, -1,1875, 1876, 1883, -1,2585, 1882, 2770, -1,1875, 1883, 1889, -1, + 1876, 1872, 2585, -1,2586, 1873, 1869, -1,1890, 1863, 1865, -1,2586, 1869, 1890, -1, + 2768, 2585, 2769, -1,1876, 2585, 2768, -1,1873, 2586, 1872, -1,2770, 2769, 2585, -1, + 2771, 1883, 1876, -1,1223, 1893, 1894, -1,1893, 1223, 1891, -1,1891, 1220, 1892, -1, + 1891, 1892, 1893, -1,1894, 1896, 1223, -1,1897, 1223, 1896, -1,1895, 1225, 1897, -1, + 1896, 1895, 1897, -1,1895, 1902, 1225, -1,1895, 1901, 1902, -1,993, 1902, 1901, -1, + 1900, 993, 1901, -1,1899, 991, 1903, -1,1900, 1899, 1903, -1,1898, 991, 1899, -1, + 993, 1900, 1903, -1,1906, 1907, 991, -1,991, 1898, 1906, -1,1906, 1905, 1907, -1, + 1904, 989, 1908, -1,1908, 1905, 1904, -1,1907, 1905, 1908, -1,1904, 1910, 989, -1, + 1911, 989, 1910, -1,987, 1911, 1909, -1,1910, 1909, 1911, -1,1909, 1916, 987, -1, + 1916, 1909, 1915, -1,1915, 1917, 1916, -1,1914, 984, 1917, -1,1914, 1913, 984, -1, + 1912, 984, 1913, -1,1915, 1914, 1917, -1,1921, 1920, 1912, -1,1919, 1921, 1912, -1, + 1918, 982, 1919, -1,1921, 1919, 982, -1,980, 1923, 1924, -1,1923, 980, 1922, -1,1922, + 982, 1918, -1,1922, 1918, 1923, -1,1927, 978, 1926, -1,1926, 978, 1925, -1,1925, + 980, 1924, -1,1925, 1924, 1926, -1,1932, 1934, 978, -1,1927, 1933, 978, -1,1932, + 978, 1933, -1,1932, 976, 1934, -1,1930, 1929, 1928, -1,976, 1931, 1928, -1,1930, + 1928, 1931, -1,1932, 1931, 976, -1,1218, 1935, 1937, -1,1937, 1935, 1936, -1,1936, + 1929, 1930, -1,1929, 1936, 1935, -1,1939, 1940, 1937, -1,1218, 1937, 1940, -1,1939, + 1938, 1220, -1,1940, 1939, 1220, -1,1915, 1909, 1910, -1,1904, 2772, 1915, -1,1910, + 1904, 1915, -1,1945, 1946, 1900, -1,2772, 1904, 2587, -1,2587, 1912, 1942, -1,1941, + 1912, 2587, -1,2587, 1904, 1941, -1,1919, 1924, 1923, -1,1918, 1919, 1923, -1,1941, + 1898, 1912, -1,1912, 1943, 2773, -1,1946, 1945, 1927, -1,1943, 1898, 1927, -1,1944, + 1927, 1945, -1,1898, 1946, 1927, -1,1945, 1932, 1944, -1,1943, 1912, 1898, -1,2773, + 1924, 1919, -1,1943, 1924, 2773, -1,1942, 2772, 2587, -1,2775, 1931, 2774, -1,1950, + 1895, 1945, -1,1900, 1950, 1945, -1,1895, 1951, 2588, -1,1951, 1947, 2588, -1,1951, + 1894, 1947, -1,1932, 2774, 1931, -1,1939, 1931, 2775, -1,1931, 2776, 1930, -1,1931, + 1939, 2776, -1,1930, 2776, 2777, -1,1937, 1949, 2777, -1,2588, 1945, 1895, -1,1945, + 2588, 1938, -1,2774, 1932, 1938, -1,1938, 1932, 1945, -1,1948, 1938, 2588, -1,1947, + 1948, 2588, -1,1949, 1930, 2777, -1,2589, 1954, 1953, -1,2590, 2589, 1960, -1,1952, + 2589, 1953, -1,1961, 1952, 1068, -1,2589, 1952, 1961, -1,1961, 1960, 2589, -1,2590, + 1954, 2589, -1,1956, 1955, 2591, -1,1956, 1958, 1957, -1,1958, 1956, 2591, -1,1960, + 1959, 2590, -1,2591, 2590, 1959, -1,1959, 1048, 2591, -1,1958, 2591, 1048, -1,2591, + 1955, 2590, -1,1954, 2590, 1955, -1,1048, 1964, 1957, -1,1964, 1048, 1962, -1,1962, + 1050, 1963, -1,1962, 1963, 1964, -1,1966, 1963, 1965, -1,1967, 1966, 2592, -1,2592, + 1965, 1050, -1,1050, 1972, 2592, -1,2592, 1972, 2593, -1,2592, 1966, 1965, -1,2593, + 1967, 2592, -1,1052, 2594, 2593, -1,1968, 2593, 2594, -1,2594, 1969, 1968, -1,1968, + 1967, 2593, -1,1970, 1969, 2594, -1,1971, 2594, 1052, -1,1971, 1054, 1970, -1,1971, + 1970, 2594, -1,1972, 1052, 2593, -1,1969, 1054, 1975, -1,1975, 1054, 1973, -1,1973, + 1056, 1974, -1,1973, 1974, 1975, -1,1976, 1977, 1974, -1,2595, 1977, 1976, -1,2595, + 1056, 1984, -1,1983, 2596, 1984, -1,1984, 2596, 2595, -1,2595, 1976, 1056, -1,1978, + 1977, 2595, -1,2595, 2596, 1978, -1,1979, 1978, 2596, -1,2597, 1979, 2596, -1,1980, + 1979, 2597, -1,1981, 2597, 1982, -1,2597, 1983, 1982, -1,1982, 1060, 1981, -1,1981, + 1980, 2597, -1,2596, 1983, 2597, -1,1986, 1985, 1062, -1,1987, 1062, 1985, -1,1980, + 1060, 1987, -1,1985, 1980, 1987, -1,1988, 2598, 1986, -1,1989, 1986, 2598, -1,2599, + 1989, 2598, -1,1990, 1989, 2599, -1,1996, 1988, 1062, -1,2599, 2598, 1064, -1,2598, + 1988, 1996, -1,1064, 2598, 1996, -1,2599, 2600, 1990, -1,1992, 1991, 2600, -1,1992, + 1994, 1993, -1,1994, 1992, 2600, -1,1064, 1995, 2599, -1,1995, 2600, 2599, -1,2600, + 1995, 1066, -1,1066, 1994, 2600, -1,1991, 1990, 2600, -1,1997, 1068, 1953, -1,1998, + 1068, 1997, -1,1993, 1066, 1998, -1,1997, 1993, 1998, -1,2003, 2004, 2601, -1,2000, + 2601, 2602, -1,2003, 2601, 2002, -1,1139, 2002, 2001, -1,2001, 2002, 2601, -1,2601, + 2000, 2001, -1,2601, 2004, 2602, -1,2603, 2005, 2006, -1,2007, 2008, 2006, -1,2603, + 2006, 2008, -1,2602, 1999, 2000, -1,1999, 2602, 2603, -1,2603, 1160, 1999, -1,1160, + 2603, 2008, -1,2602, 2005, 2603, -1,2005, 2602, 2004, -1,2007, 2011, 1160, -1,2010, + 2011, 2007, -1,2009, 1158, 2010, -1,2011, 2010, 1158, -1,2009, 2016, 2015, -1,2015, + 2016, 2604, -1,1158, 2604, 2014, -1,2604, 1158, 2015, -1,2014, 2605, 2013, -1,2605, + 2014, 2604, -1,2605, 2604, 2017, -1,2604, 2016, 2017, -1,2606, 2013, 2605, -1,2605, + 2018, 2606, -1,2018, 2019, 2606, -1,2606, 2019, 2020, -1,2013, 2606, 2012, -1,2020, + 1153, 2012, -1,2606, 2020, 2012, -1,2605, 2017, 2018, -1,2022, 1153, 2019, -1,2023, + 1153, 2022, -1,2021, 1151, 2023, -1,2022, 2021, 2023, -1,2021, 2028, 2027, -1,2027, + 2028, 2607, -1,2026, 1151, 2607, -1,2026, 2608, 2025, -1,2607, 2608, 2026, -1,1151, + 2027, 2607, -1,2607, 2028, 2029, -1,2029, 2608, 2607, -1,2608, 2029, 2030, -1,2608, + 2030, 2609, -1,2609, 2030, 2031, -1,2024, 2609, 2032, -1,2024, 2025, 2609, -1,2032, + 1148, 2024, -1,2609, 2031, 2032, -1,2609, 2025, 2608, -1,1146, 2034, 2035, -1,2034, + 1146, 2033, -1,2033, 1148, 2031, -1,2033, 2031, 2034, -1,2040, 2041, 2610, -1,2610, + 2041, 2611, -1,2040, 2610, 2039, -1,1146, 2039, 2038, -1,2037, 2610, 2611, -1,2038, + 2039, 2610, -1,2038, 2610, 2037, -1,2041, 2042, 2611, -1,2612, 2042, 2043, -1,2044, + 2045, 2043, -1,2612, 2043, 2045, -1,2611, 2036, 2037, -1,2611, 2612, 2036, -1,1141, + 2036, 2612, -1,2612, 2045, 1141, -1,2612, 2611, 2042, -1,2003, 1139, 2047, -1,2047, + 1139, 2046, -1,2046, 1141, 2044, -1,2046, 2044, 2047, -1,2050, 1986, 2031, -1,2068, + 1986, 2035, -1,2069, 2035, 2049, -1,1986, 2049, 2035, -1,2070, 2069, 2049, -1,2067, + 1980, 2050, -1,2051, 2066, 2065, -1,2051, 2065, 2052, -1,2031, 1986, 2068, -1,2066, + 1980, 2067, -1,2031, 2067, 2050, -1,1980, 2066, 2051, -1,2071, 2070, 1990, -1,2049, + 1990, 2070, -1,2072, 2071, 1990, -1,2074, 2048, 1992, -1,1990, 2048, 2072, -1,1992, + 1993, 2003, -1,2072, 2048, 2073, -1,2074, 1992, 2003, -1,2044, 2048, 2074, -1,1997, + 1953, 2076, -1,1993, 1997, 2075, -1,1993, 2075, 2003, -1,2075, 1997, 2076, -1,2073, + 2048, 2044, -1,2053, 2052, 1974, -1,2065, 2054, 2052, -1,1974, 2052, 2054, -1,1969, + 2065, 2021, -1,2021, 2064, 2055, -1,2054, 2065, 1969, -1,2019, 2055, 2064, -1,1969, + 2021, 2055, -1,2063, 2055, 2019, -1,1967, 2063, 2062, -1,2056, 1967, 2061, -1,2062, + 2061, 1967, -1,1967, 2055, 2063, -1,2057, 1953, 2058, -1,1957, 2076, 1953, -1,1953, + 2057, 1957, -1,2076, 1957, 2077, -1,1964, 2007, 2077, -1,2056, 2060, 2009, -1,2061, + 2060, 2056, -1,1963, 2056, 2009, -1,1963, 2059, 2007, -1,1957, 1964, 2077, -1,1963, + 2007, 1964, -1,1963, 2009, 2059, -1,1106, 2078, 2081, -1,2081, 2078, 2080, -1,2080, + 1071, 2079, -1,1071, 2080, 2078, -1,2082, 2613, 2083, -1,2084, 2083, 2613, -1,2098, + 2613, 2082, -1,2085, 2084, 2614, -1,2614, 2084, 2613, -1,2086, 2085, 2615, -1,2098, + 2097, 2613, -1,2082, 1098, 2098, -1,2096, 2615, 2614, -1,2085, 2614, 2615, -1,2615, + 2096, 2095, -1,2616, 2615, 2095, -1,2097, 2096, 2614, -1,2613, 2097, 2614, -1,2616, + 2086, 2615, -1,2617, 2086, 2616, -1,2087, 2086, 2617, -1,2087, 2618, 2088, -1,2091, + 2081, 2090, -1,2618, 2089, 2088, -1,2089, 2619, 2090, -1,2619, 2091, 2090, -1,2093, + 2617, 2094, -1,2616, 2094, 2617, -1,2618, 2617, 2093, -1,2092, 2619, 2618, -1,2089, + 2618, 2619, -1,2619, 2092, 1106, -1,1106, 2091, 2619, -1,2093, 2092, 2618, -1,2618, + 2087, 2617, -1,2095, 2094, 2616, -1,2083, 2100, 1098, -1,2101, 1098, 2100, -1,2099, + 1096, 2101, -1,2100, 2099, 2101, -1,2104, 2103, 2102, -1,2105, 2104, 2102, -1,2106, + 2105, 2620, -1,2113, 2102, 1091, -1,2112, 2620, 2113, -1,2102, 2113, 2620, -1,2620, + 2112, 2621, -1,2620, 2105, 2102, -1,2621, 2106, 2620, -1,2107, 2621, 2622, -1,2106, + 2621, 2107, -1,2108, 2107, 2622, -1,2099, 2108, 2109, -1,2110, 2622, 2111, -1,2621, + 2111, 2622, -1,1096, 2109, 2110, -1,2622, 2110, 2109, -1,2109, 2108, 2622, -1,2112, + 2111, 2621, -1,2623, 2114, 2118, -1,2114, 1071, 2118, -1,2623, 2079, 2114, -1,2117, + 2116, 2115, -1,1073, 2117, 2623, -1,2115, 2623, 2117, -1,2118, 1073, 2623, -1,2079, + 2623, 2115, -1,2626, 2134, 2135, -1,2625, 2135, 2136, -1,2624, 2625, 2136, -1,2624, + 2137, 2138, -1,2626, 2135, 2625, -1,2626, 2625, 2120, -1,2624, 2119, 2625, -1,2136, + 2137, 2624, -1,2134, 2626, 2627, -1,2629, 2131, 2124, -1,2131, 2630, 2130, -1,2628, + 2132, 2133, -1,2132, 2124, 2131, -1,2628, 2627, 2122, -1,2629, 2630, 2131, -1,2128, + 2129, 2130, -1,2132, 2628, 2124, -1,2628, 2133, 2627, -1,2133, 2134, 2627, -1,2626, + 2121, 2627, -1,1163, 2628, 2122, -1,2627, 2121, 2122, -1,2124, 2628, 2123, -1,1163, + 2123, 2628, -1,2629, 2124, 2125, -1,2119, 2624, 1183, -1,2121, 2626, 2120, -1,2120, + 2625, 2119, -1,2126, 2630, 2629, -1,2630, 2128, 2130, -1,1170, 2128, 2630, -1,2125, + 1167, 2629, -1,2126, 2629, 1167, -1,2127, 1170, 2630, -1,2126, 2127, 2630, -1,2624, + 2138, 1183, -1,2129, 1170, 2141, -1,2139, 2141, 1172, -1,2140, 2139, 1172, -1,2129, + 2141, 2139, -1,2157, 2140, 2158, -1,2156, 2157, 2631, -1,2631, 2632, 2156, -1,2631, + 2158, 1172, -1,2632, 2631, 2142, -1,2631, 2157, 2158, -1,2156, 2632, 2155, -1,2149, + 2150, 2637, -1,2153, 2154, 2634, -1,2150, 2151, 2637, -1,2635, 2152, 2153, -1,2154, + 2155, 2633, -1,2636, 2151, 2152, -1,2155, 2632, 2633, -1,2634, 2633, 2144, -1,2142, + 2631, 1172, -1,2632, 2142, 2143, -1,2633, 2634, 2154, -1,2144, 2633, 2143, -1,2145, + 2634, 2144, -1,2633, 2632, 2143, -1,2634, 2145, 2635, -1,2635, 2636, 2152, -1,2636, + 2635, 2146, -1,2637, 2636, 2147, -1,2636, 2637, 2151, -1,2147, 2148, 2637, -1,2149, + 2148, 1181, -1,2636, 2146, 2147, -1,2635, 2145, 2146, -1,2148, 2149, 2637, -1,2634, + 2635, 2153, -1,2159, 1183, 2160, -1,1181, 2159, 2150, -1,2159, 2160, 2150, -1,2160, + 1183, 2137, -1,2116, 2163, 2162, -1,2162, 2163, 2161, -1,1074, 1075, 2161, -1,1074, + 2163, 1073, -1,2163, 1074, 2161, -1,2124, 1165, 2165, -1,2165, 2164, 1167, -1,2164, + 2165, 1165, -1,2124, 1164, 1165, -1,1164, 2124, 1163, -1,2168, 2166, 2167, -1,2166, + 2168, 1089, -1,1091, 2103, 2167, -1,1091, 2167, 2166, -1,2638, 2175, 1089, -1,2639, + 2175, 2638, -1,2174, 2638, 1089, -1,2173, 2174, 2168, -1,2639, 2638, 2172, -1,2638, + 2174, 2173, -1,2172, 2638, 2173, -1,2639, 2176, 2175, -1,2177, 2176, 2640, -1,2177, + 2169, 1085, -1,2169, 2177, 2640, -1,2172, 2171, 2639, -1,2171, 2640, 2639, -1,2640, + 2171, 2170, -1,2170, 2169, 2640, -1,2176, 2639, 2640, -1,1083, 2178, 2180, -1,2180, + 2178, 2179, -1,2179, 1085, 2170, -1,1085, 2179, 2178, -1,2180, 2183, 1083, -1,2182, + 2183, 2180, -1,2181, 1081, 2182, -1,2183, 2182, 1081, -1,2181, 2186, 1081, -1,2185, + 2186, 2181, -1,2184, 1079, 2185, -1,2186, 2185, 1079, -1,2184, 2191, 2641, -1,2188, + 2641, 2642, -1,2184, 2641, 2190, -1,1079, 2190, 2189, -1,2189, 2190, 2641, -1,2641, + 2188, 2189, -1,2641, 2191, 2642, -1,2643, 2192, 2193, -1,2161, 2194, 2193, -1,2643, + 2193, 2194, -1,2642, 2187, 2188, -1,2187, 2642, 2643, -1,2643, 1075, 2187, -1,1075, + 2643, 2194, -1,2642, 2192, 2643, -1,2192, 2642, 2191, -1,2221, 2197, 2222, -1,2198, + 2197, 2219, -1,2087, 2222, 2197, -1,2223, 2087, 2196, -1,2087, 2223, 2154, -1,2154, + 2222, 2087, -1,2224, 2223, 2196, -1,2197, 2221, 2220, -1,2220, 2219, 2197, -1,2202, + 2199, 2198, -1,2200, 2199, 2083, -1,2196, 2140, 2224, -1,2219, 2218, 2198, -1,2195, + 2140, 2196, -1,2778, 2211, 2180, -1,2778, 2181, 2211, -1,2779, 2212, 2210, -1,2180, + 2210, 2212, -1,2213, 2184, 2170, -1,2210, 2170, 2184, -1,2225, 2081, 2217, -1,2195, + 2081, 2644, -1,2644, 2081, 2225, -1,2209, 2214, 2170, -1,2214, 2213, 2170, -1,2209, + 2215, 2214, -1,2208, 2206, 2209, -1,2195, 2644, 2140, -1,2212, 2778, 2180, -1,2199, + 2202, 2083, -1,2201, 2200, 2083, -1,2198, 2218, 2202, -1,2150, 2202, 2218, -1,2160, + 2137, 2108, -1,2099, 2150, 2160, -1,2202, 2150, 2099, -1,2129, 2225, 2217, -1,2233, + 2232, 2203, -1,2137, 2233, 2108, -1,2108, 2099, 2160, -1,2108, 2233, 2203, -1,2230, + 2229, 2204, -1,2230, 2203, 2231, -1,2232, 2231, 2203, -1,2203, 2230, 2204, -1,2644, + 2781, 2140, -1,2079, 2216, 2205, -1,2116, 2205, 2216, -1,2129, 2780, 2226, -1,2215, + 2209, 2206, -1,2168, 2206, 2208, -1,2161, 2215, 2103, -1,2161, 2103, 2162, -1,2103, + 2116, 2162, -1,2205, 2227, 2079, -1,2205, 2204, 2228, -1,2205, 2228, 2227, -1,2227, + 2226, 2780, -1,2207, 2168, 2208, -1,2781, 2644, 2225, -1,2103, 2215, 2206, -1,2205, + 2116, 2103, -1,2079, 2227, 2780, -1,2228, 2204, 2229, -1,2217, 2780, 2129, -1,2779, + 2210, 2184, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,4, 3, 2, -1,7, 6, 5, -1,9, 8, 5, -1,12, 11, 10, -1,15, 14, 13, -1,16, + 10, 6, -1,4, 11, 17, -1,5, 8, 7, -1,19, 18, 5, -1,20, 9, 5, -1,10, 5, 6, -1,6, 22, + 21, -1,20, 5, 18, -1,15, 21, 22, -1,23, 20, 18, -1,25, 0, 24, -1,28, 27, 26, -1,14, + 30, 29, -1,33, 32, 31, -1,28, 26, 32, -1,13, 14, 29, -1,35, 19, 34, -1,35, 34, 36, -1, + 36, 37, 35, -1,35, 18, 19, -1,32, 18, 23, -1,39, 38, 31, -1,23, 31, 32, -1,33, 28, + 32, -1,18, 32, 23, -1,41, 40, 25, -1,42, 34, 19, -1,45, 44, 43, -1,45, 46, 44, -1, + 48, 47, 43, -1,49, 19, 45, -1,51, 46, 50, -1,52, 49, 45, -1,43, 47, 45, -1,50, 46, + 45, -1,45, 54, 53, -1,57, 56, 55, -1,54, 55, 58, -1,61, 60, 59, -1,64, 63, 62, -1, + 61, 62, 65, -1,57, 59, 66, -1,47, 52, 45, -1,49, 42, 19, -1,49, 52, 67, -1,67, 49, + 67, -1,70, 69, 68, -1,67, 67, 69, -1,69, 67, 68, -1,45, 53, 50, -1,51, 50, 71, -1, + 74, 73, 72, -1,76, 75, 54, -1,54, 75, 53, -1,73, 70, 68, -1,48, 77, 47, -1,79, 78, + 39, -1,80, 40, 41, -1,2, 3, 81, -1,21, 15, 82, -1,24, 83, 25, -1,0, 84, 24, -1,17, + 85, 4, -1,85, 3, 4, -1,2, 81, 1, -1,1, 86, 0, -1,25, 83, 41, -1,16, 88, 87, -1,13, + 29, 89, -1,33, 31, 87, -1,13, 82, 15, -1,88, 90, 87, -1,91, 33, 87, -1,87, 90, 91, -1, + 39, 78, 92, -1,93, 12, 10, -1,84, 0, 86, -1,41, 83, 24, -1,1, 81, 94, -1,3, 85, 17, -1, + 94, 81, 3, -1,84, 86, 1, -1,95, 12, 93, -1,12, 17, 11, -1,93, 16, 96, -1,96, 16, + 87, -1,17, 12, 97, -1,10, 16, 93, -1,12, 95, 97, -1,87, 98, 96, -1,93, 96, 95, -1, + 87, 31, 98, -1,99, 80, 41, -1,38, 98, 31, -1,74, 100, 73, -1,92, 101, 38, -1,70, + 100, 102, -1,73, 100, 70, -1,103, 38, 69, -1,92, 38, 39, -1,105, 104, 104, -1,70, + 105, 76, -1,104, 105, 106, -1,76, 54, 58, -1,60, 107, 59, -1,106, 105, 70, -1,58, + 108, 76, -1,70, 76, 108, -1,56, 109, 55, -1,110, 56, 57, -1,109, 111, 58, -1,58, + 55, 109, -1,70, 102, 106, -1,57, 66, 110, -1,69, 70, 103, -1,38, 101, 69, -1,56, + 110, 66, -1,107, 112, 66, -1,66, 59, 107, -1,103, 70, 108, -1,111, 109, 113, -1,108, + 58, 111, -1,56, 113, 109, -1,61, 115, 114, -1,65, 62, 116, -1,63, 64, 117, -1,63, + 117, 118, -1,114, 60, 61, -1,116, 62, 63, -1,114, 115, 60, -1,116, 63, 65, -1,115, + 61, 65, -1,60, 112, 107, -1,119, 38, 103, -1,119, 98, 38, -1,21, 16, 6, -1,64, 121, + 120, -1,121, 123, 122, -1,126, 125, 124, -1,129, 128, 127, -1,130, 125, 128, -1,131, + 123, 126, -1,132, 122, 123, -1,64, 120, 117, -1,121, 122, 133, -1,134, 131, 126, -1, + 125, 135, 124, -1,126, 124, 134, -1,129, 127, 136, -1,137, 129, 136, -1,135, 125, + 130, -1,128, 129, 130, -1,132, 123, 131, -1,120, 121, 133, -1,138, 136, 127, -1,138, + 140, 139, -1,142, 139, 141, -1,145, 144, 143, -1,148, 147, 146, -1,149, 143, 148, -1, + 144, 150, 141, -1,142, 141, 150, -1,151, 138, 142, -1,153, 152, 147, -1,154, 150, + 145, -1,150, 155, 142, -1,150, 144, 145, -1,157, 40, 156, -1,40, 80, 156, -1,158, + 153, 157, -1,143, 159, 145, -1,138, 139, 142, -1,138, 127, 140, -1,138, 160, 136, -1, + 122, 132, 161, -1,120, 133, 122, -1,134, 124, 131, -1,135, 130, 162, -1,135, 162, + 124, -1,161, 132, 131, -1,136, 163, 137, -1,138, 151, 160, -1,136, 160, 163, -1,155, + 150, 154, -1,142, 155, 164, -1,151, 142, 164, -1,130, 129, 137, -1,165, 154, 145, -1, + 159, 143, 149, -1,146, 147, 166, -1,152, 153, 167, -1,168, 148, 146, -1,169, 167, + 153, -1,158, 170, 156, -1,156, 80, 99, -1,158, 157, 170, -1,170, 157, 156, -1,168, + 149, 148, -1,166, 147, 152, -1,168, 146, 149, -1,159, 171, 165, -1,171, 159, 149, -1, + 169, 153, 158, -1,166, 152, 172, -1,152, 167, 169, -1,166, 172, 146, -1,159, 165, + 145, -1,118, 117, 120, -1,175, 174, 173, -1,119, 173, 174, -1,176, 175, 173, -1,175, + 176, 177, -1,180, 179, 178, -1,181, 177, 180, -1,177, 181, 182, -1,179, 183, 178, -1, + 181, 180, 182, -1,178, 183, 180, -1,175, 177, 184, -1,186, 185, 164, -1,189, 188, + 187, -1,186, 187, 185, -1,189, 190, 188, -1,193, 192, 191, -1,190, 194, 188, -1,195, + 194, 191, -1,164, 196, 186, -1,187, 190, 189, -1,186, 196, 197, -1,186, 197, 187, -1, + 192, 195, 191, -1,192, 194, 195, -1,184, 174, 175, -1,200, 199, 198, -1,203, 202, + 201, -1,203, 205, 204, -1,208, 207, 206, -1,208, 200, 198, -1,184, 177, 182, -1,179, + 209, 183, -1,182, 180, 183, -1,199, 200, 210, -1,211, 202, 206, -1,208, 206, 200, -1, + 209, 210, 183, -1,184, 212, 174, -1,202, 203, 204, -1,215, 214, 213, -1,205, 215, + 204, -1,213, 214, 216, -1,219, 218, 217, -1,222, 221, 220, -1,216, 224, 223, -1,215, + 213, 204, -1,216, 223, 213, -1,207, 211, 206, -1,218, 219, 220, -1,201, 202, 211, -1, + 224, 222, 220, -1,191, 194, 190, -1,197, 196, 225, -1,223, 224, 220, -1,190, 187, + 197, -1,219, 193, 191, -1,217, 193, 219, -1,226, 199, 210, -1,226, 210, 209, -1,221, + 218, 220, -1,228, 227, 174, -1,231, 230, 229, -1,228, 230, 227, -1,227, 119, 174, -1, + 234, 233, 232, -1,231, 233, 230, -1,235, 233, 234, -1,237, 236, 235, -1,231, 232, + 233, -1,236, 239, 238, -1,242, 241, 240, -1,174, 243, 228, -1,228, 229, 230, -1,164, + 244, 196, -1,247, 246, 245, -1,249, 247, 248, -1,244, 249, 250, -1,253, 252, 251, -1, + 256, 255, 254, -1,247, 257, 248, -1,245, 258, 247, -1,249, 248, 259, -1,261, 246, + 260, -1,196, 250, 262, -1,250, 196, 244, -1,245, 246, 261, -1,249, 259, 250, -1,251, + 264, 263, -1,260, 266, 265, -1,267, 265, 266, -1,269, 241, 268, -1,271, 270, 239, -1, + 242, 271, 241, -1,274, 273, 272, -1,268, 274, 275, -1,278, 277, 276, -1,236, 237, + 239, -1,281, 280, 279, -1,212, 279, 280, -1,280, 174, 212, -1,281, 279, 282, -1,232, + 237, 234, -1,231, 283, 232, -1,283, 231, 229, -1,285, 264, 284, -1,229, 228, 243, -1, + 174, 280, 243, -1,288, 287, 286, -1,277, 286, 287, -1,287, 276, 277, -1,288, 286, + 285, -1,263, 264, 285, -1,265, 267, 255, -1,255, 256, 253, -1,253, 251, 263, -1,265, + 261, 260, -1,257, 247, 258, -1,262, 250, 259, -1,248, 257, 259, -1,289, 196, 262, -1, + 289, 291, 290, -1,292, 290, 291, -1,253, 256, 252, -1,290, 225, 289, -1,289, 225, + 196, -1,245, 261, 258, -1,284, 288, 285, -1,273, 278, 272, -1,277, 278, 273, -1,255, + 267, 254, -1,275, 274, 293, -1,272, 293, 274, -1,241, 269, 240, -1,275, 269, 268, -1, + 270, 271, 294, -1,242, 294, 271, -1,239, 270, 238, -1,237, 235, 234, -1,295, 204, + 213, -1,295, 213, 223, -1,296, 220, 219, -1,297, 219, 191, -1,220, 298, 223, -1,298, + 220, 296, -1,299, 295, 298, -1,300, 298, 296, -1,296, 219, 297, -1,190, 301, 191, -1, + 301, 297, 191, -1,190, 302, 301, -1,303, 301, 302, -1,301, 304, 297, -1,197, 302, + 190, -1,297, 305, 296, -1,295, 223, 298, -1,295, 306, 204, -1,291, 289, 307, -1,292, + 307, 308, -1,311, 310, 309, -1,314, 313, 312, -1,313, 315, 309, -1,310, 316, 307, -1, + 197, 225, 317, -1,225, 290, 318, -1,321, 320, 319, -1,312, 320, 322, -1,292, 291, + 307, -1,324, 319, 323, -1,318, 290, 292, -1,302, 197, 317, -1,299, 325, 306, -1,298, + 300, 299, -1,225, 318, 317, -1,317, 318, 326, -1,296, 305, 300, -1,308, 327, 318, -1, + 304, 305, 297, -1,292, 308, 318, -1,295, 299, 306, -1,304, 301, 303, -1,303, 302, + 328, -1,317, 326, 328, -1,308, 329, 327, -1,318, 327, 326, -1,302, 317, 328, -1,330, + 329, 308, -1,310, 311, 316, -1,330, 316, 311, -1,331, 311, 315, -1,309, 315, 311, -1, + 312, 322, 314, -1,332, 314, 322, -1,319, 324, 321, -1,333, 321, 324, -1,321, 334, + 322, -1,320, 321, 322, -1,314, 335, 315, -1,313, 314, 315, -1,311, 331, 330, -1,315, + 335, 331, -1,322, 334, 332, -1,324, 336, 333, -1,321, 333, 334, -1,314, 332, 335, -1, + 330, 308, 316, -1,307, 316, 308, -1,339, 338, 337, -1,338, 341, 340, -1,344, 343, + 342, -1,347, 346, 345, -1,350, 349, 348, -1,352, 345, 351, -1,355, 354, 353, -1,356, + 349, 355, -1,357, 341, 350, -1,359, 358, 354, -1,360, 354, 358, -1,354, 361, 359, -1, + 362, 361, 354, -1,353, 354, 360, -1,363, 362, 354, -1,323, 339, 324, -1,366, 365, + 364, -1,338, 340, 337, -1,337, 340, 367, -1,348, 357, 350, -1,340, 341, 357, -1,368, + 340, 357, -1,349, 356, 348, -1,348, 356, 369, -1,355, 353, 370, -1,370, 372, 371, -1, + 373, 356, 370, -1,355, 370, 356, -1,374, 357, 348, -1,372, 370, 353, -1,376, 346, + 375, -1,377, 345, 376, -1,377, 351, 345, -1,379, 342, 378, -1,346, 344, 375, -1,378, + 342, 343, -1,380, 352, 351, -1,342, 375, 344, -1,346, 376, 345, -1,336, 324, 337, -1, + 324, 339, 337, -1,280, 281, 381, -1,279, 212, 382, -1,381, 281, 282, -1,384, 184, + 383, -1,385, 212, 184, -1,386, 383, 184, -1,382, 282, 279, -1,386, 184, 387, -1,182, + 388, 184, -1,183, 210, 389, -1,390, 182, 183, -1,200, 206, 391, -1,202, 204, 392, -1, + 393, 206, 202, -1,394, 210, 200, -1,387, 184, 388, -1,396, 365, 395, -1,363, 354, + 381, -1,280, 381, 354, -1,398, 397, 383, -1,382, 400, 399, -1,402, 363, 401, -1,400, + 382, 403, -1,400, 404, 399, -1,407, 406, 405, -1,382, 212, 403, -1,380, 402, 401, -1, + 406, 387, 405, -1,182, 390, 388, -1,388, 405, 387, -1,389, 210, 394, -1,408, 389, + 394, -1,389, 409, 390, -1,390, 183, 389, -1,391, 206, 393, -1,410, 391, 393, -1,204, + 306, 392, -1,392, 306, 411, -1,412, 394, 391, -1,393, 202, 392, -1,392, 413, 393, -1, + 394, 200, 391, -1,282, 382, 399, -1,365, 396, 364, -1,365, 366, 414, -1,344, 346, + 347, -1,417, 416, 415, -1,418, 415, 416, -1,363, 381, 401, -1,401, 420, 419, -1,419, + 421, 401, -1,401, 352, 380, -1,424, 423, 422, -1,426, 419, 425, -1,401, 381, 420, -1, + 404, 427, 399, -1,381, 282, 399, -1,428, 425, 428, -1,425, 428, 400, -1,400, 426, + 425, -1,421, 419, 414, -1,368, 357, 374, -1,356, 373, 369, -1,369, 374, 348, -1,370, + 429, 395, -1,373, 370, 430, -1,371, 423, 370, -1,417, 415, 431, -1,370, 395, 430, -1, + 424, 422, 418, -1,365, 430, 395, -1,429, 370, 423, -1,432, 433, 432, -1,414, 419, + 426, -1,365, 414, 426, -1,432, 432, 434, -1,416, 424, 418, -1,432, 434, 433, -1,368, + 367, 340, -1,367, 336, 337, -1,435, 426, 400, -1,184, 384, 385, -1,384, 383, 397, -1, + 436, 385, 384, -1,398, 437, 397, -1,436, 438, 436, -1,438, 436, 439, -1,439, 440, + 438, -1,385, 436, 436, -1,441, 405, 388, -1,407, 405, 441, -1,444, 443, 442, -1,446, + 390, 445, -1,443, 447, 439, -1,212, 385, 403, -1,444, 447, 443, -1,450, 449, 448, -1, + 449, 451, 448, -1,435, 438, 426, -1,440, 447, 452, -1,448, 440, 450, -1,452, 450, + 440, -1,447, 440, 439, -1,438, 440, 426, -1,445, 440, 448, -1,409, 389, 408, -1,440, + 445, 409, -1,412, 408, 394, -1,453, 417, 431, -1,412, 391, 410, -1,413, 410, 393, -1, + 431, 433, 453, -1,325, 411, 306, -1,411, 413, 392, -1,445, 390, 409, -1,388, 390, + 446, -1,434, 453, 433, -1,423, 371, 422, -1,456, 455, 454, -1,454, 455, 457, -1,459, + 458, 354, -1,461, 460, 456, -1,455, 456, 460, -1,339, 455, 460, -1,462, 460, 461, -1, + 457, 277, 454, -1,350, 464, 463, -1,461, 464, 462, -1,462, 464, 341, -1,465, 465, + 465, -1,463, 466, 350, -1,462, 338, 460, -1,339, 323, 457, -1,460, 338, 339, -1,338, + 462, 341, -1,341, 464, 350, -1,350, 466, 349, -1,355, 468, 467, -1,467, 459, 354, -1, + 469, 468, 355, -1,349, 469, 355, -1,467, 354, 355, -1,470, 349, 466, -1,469, 349, + 470, -1,455, 339, 457, -1,472, 309, 471, -1,474, 473, 313, -1,475, 312, 473, -1,476, + 475, 473, -1,277, 457, 477, -1,479, 477, 478, -1,479, 478, 480, -1,475, 476, 480, -1, + 320, 480, 478, -1,476, 479, 480, -1,478, 477, 457, -1,480, 312, 475, -1,309, 481, + 471, -1,310, 483, 482, -1,483, 310, 307, -1,310, 481, 309, -1,320, 312, 480, -1,474, + 313, 472, -1,313, 309, 472, -1,312, 313, 473, -1,320, 478, 319, -1,457, 323, 319, -1, + 482, 481, 310, -1,478, 457, 319, -1,485, 307, 484, -1,485, 483, 307, -1,486, 486, + 486, -1,489, 488, 487, -1,490, 487, 490, -1,489, 489, 488, -1,487, 488, 490, -1,493, + 492, 491, -1,494, 491, 494, -1,493, 493, 492, -1,491, 492, 494, -1,495, 495, 495, -1, + 495, 495, 495, -1,497, 496, 496, -1,499, 497, 498, -1,497, 496, 498, -1,499, 498, + 499, -1,500, 500, 500, -1,500, 500, 500, -1,489, 502, 501, -1,503, 501, 503, -1,489, + 489, 502, -1,501, 502, 503, -1,500, 500, 500, -1,500, 500, 500, -1,506, 505, 504, -1, + 507, 506, 507, -1,505, 504, 504, -1,507, 505, 506, -1,508, 508, 508, -1,508, 508, + 508, -1,510, 510, 509, -1,512, 509, 511, -1,512, 510, 509, -1,511, 512, 511, -1,513, + 513, 513, -1,513, 513, 513, -1,515, 514, 514, -1,517, 515, 516, -1,515, 514, 516, -1, + 517, 516, 517, -1,519, 518, 507, -1,520, 519, 520, -1,518, 507, 507, -1,520, 518, + 519, -1,522, 521, 521, -1,524, 522, 523, -1,522, 521, 523, -1,524, 523, 524, -1,527, + 526, 525, -1,528, 527, 528, -1,526, 525, 525, -1,528, 526, 527, -1,530, 530, 529, -1, + 532, 529, 531, -1,532, 530, 529, -1,531, 532, 531, -1,535, 534, 533, -1,533, 537, + 536, -1,534, 537, 533, -1,535, 538, 534, -1,541, 540, 539, -1,538, 535, 542, -1,544, + 542, 543, -1,544, 545, 542, -1,545, 538, 542, -1,547, 546, 539, -1,537, 549, 548, -1, + 551, 550, 539, -1,549, 553, 552, -1,552, 548, 549, -1,536, 537, 548, -1,553, 555, + 554, -1,555, 553, 556, -1,554, 552, 553, -1,559, 558, 557, -1,561, 560, 544, -1,539, + 546, 541, -1,560, 561, 539, -1,546, 540, 541, -1,557, 562, 562, -1,558, 563, 557, -1, + 562, 557, 563, -1,561, 547, 539, -1,566, 565, 564, -1,540, 551, 539, -1,551, 567, + 550, -1,569, 568, 566, -1,570, 566, 568, -1,558, 568, 569, -1,567, 565, 550, -1,565, + 567, 564, -1,565, 566, 570, -1,559, 568, 558, -1,561, 544, 543, -1,489, 489, 489, -1, + 489, 489, 489, -1,489, 489, 489, -1,489, 489, 489, -1,571, 571, 571, -1,571, 571, + 571, -1,489, 489, 489, -1,489, 489, 489, -1,489, 489, 489, -1,489, 489, 489, -1,572, + 572, 572, -1,572, 572, 572, -1,489, 489, 489, -1,489, 489, 489, -1,489, 489, 489, -1, + 489, 489, 489, -1,573, 573, 573, -1,573, 573, 573, -1,507, 507, 507, -1,507, 507, + 507, -1,507, 507, 507, -1,507, 507, 507, -1,574, 574, 574, -1,574, 574, 574, -1,507, + 507, 507, -1,507, 507, 507, -1,507, 507, 507, -1,507, 507, 507, -1,575, 575, 575, -1, + 575, 575, 575, -1,507, 507, 507, -1,507, 507, 507, -1,507, 507, 507, -1,507, 507, + 507, -1,500, 500, 500, -1,500, 500, 500, -1,578, 577, 576, -1,581, 580, 579, -1,582, + 580, 582, -1,584, 579, 583, -1,579, 578, 585, -1,586, 585, 576, -1,585, 578, 576, -1, + 583, 588, 587, -1,588, 589, 589, -1,585, 583, 579, -1,581, 582, 580, -1,581, 579, + 590, -1,579, 584, 590, -1,592, 577, 591, -1,593, 591, 590, -1,592, 591, 593, -1,589, + 587, 588, -1,594, 590, 584, -1,587, 594, 583, -1,594, 584, 583, -1,593, 590, 594, -1, + 589, 589, 587, -1,593, 595, 592, -1,582, 582, 581, -1,489, 489, 489, -1,489, 489, + 489, -1,489, 489, 489, -1,489, 489, 489, -1,596, 596, 596, -1,596, 596, 596, -1,598, + 597, 597, -1,600, 598, 599, -1,598, 597, 599, -1,600, 599, 600, -1,573, 573, 573, -1, + 573, 573, 573, -1,603, 602, 601, -1,604, 601, 604, -1,603, 603, 602, -1,601, 602, + 604, -1,605, 605, 605, -1,605, 605, 605, -1,507, 507, 507, -1,507, 507, 507, -1,507, + 507, 507, -1,507, 507, 507, -1,500, 500, 500, -1,500, 500, 500, -1,608, 607, 606, -1, + 609, 607, 609, -1,612, 611, 610, -1,606, 610, 611, -1,611, 613, 606, -1,606, 613, + 614, -1,609, 607, 615, -1,608, 615, 607, -1,609, 609, 615, -1,608, 616, 615, -1,606, + 614, 616, -1,617, 616, 614, -1,619, 619, 618, -1,618, 616, 617, -1,618, 619, 616, -1, + 608, 606, 616, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, + 500, -1,489, 489, 489, -1,489, 489, 489, -1,489, 489, 489, -1,573, 573, 573, -1,573, + 573, 573, -1,573, 573, 573, -1,573, 573, 573, -1,621, 489, 620, -1,621, 623, 622, -1, + 623, 621, 620, -1,573, 573, 573, -1,573, 573, 573, -1,573, 573, 573, -1,573, 573, + 573, -1,626, 625, 624, -1,507, 627, 624, -1,626, 624, 627, -1,573, 573, 573, -1,573, + 573, 573, -1,573, 573, 573, -1,573, 573, 573, -1,507, 507, 507, -1,507, 507, 507, -1, + 507, 507, 507, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, + 500, -1,507, 507, 507, -1,507, 507, 507, -1,507, 507, 507, -1,500, 500, 500, -1,500, + 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,630, 629, 628, -1,630, 632, 631, -1, + 632, 630, 628, -1,635, 634, 633, -1,635, 633, 636, -1,639, 638, 637, -1,638, 641, + 640, -1,638, 635, 641, -1,636, 633, 642, -1,645, 644, 643, -1,644, 645, 641, -1,646, + 643, 644, -1,636, 641, 635, -1,648, 647, 639, -1,639, 637, 649, -1,650, 648, 649, -1, + 640, 637, 638, -1,652, 651, 637, -1,654, 651, 653, -1,643, 655, 645, -1,645, 656, + 641, -1,656, 640, 641, -1,652, 657, 653, -1,656, 637, 640, -1,656, 652, 637, -1,652, + 653, 651, -1,648, 639, 649, -1,489, 489, 489, -1,489, 489, 489, -1,489, 489, 489, -1, + 573, 573, 573, -1,573, 573, 573, -1,573, 573, 573, -1,573, 573, 573, -1,507, 507, + 507, -1,507, 507, 507, -1,507, 507, 507, -1,500, 500, 500, -1,500, 500, 500, -1,500, + 500, 500, -1,500, 500, 500, -1,659, 507, 658, -1,661, 660, 658, -1,659, 658, 660, -1, + 500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,663, 662, + 662, -1,665, 663, 664, -1,663, 662, 664, -1,665, 664, 665, -1,573, 573, 573, -1,573, + 573, 573, -1,573, 573, 573, -1,573, 573, 573, -1,667, 667, 666, -1,669, 666, 668, -1, + 669, 667, 666, -1,668, 669, 668, -1,671, 489, 670, -1,671, 673, 672, -1,673, 671, + 670, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,676, + 675, 674, -1,674, 677, 676, -1,675, 676, 678, -1,679, 677, 674, -1,682, 681, 680, -1, + 679, 680, 683, -1,682, 684, 681, -1,683, 680, 681, -1,683, 677, 679, -1,687, 686, + 685, -1,683, 685, 677, -1,686, 687, 688, -1,691, 690, 689, -1,693, 691, 692, -1,689, + 692, 691, -1,694, 691, 693, -1,695, 688, 687, -1,683, 687, 685, -1,688, 695, 696, -1, + 688, 696, 694, -1,688, 694, 693, -1,698, 698, 697, -1,700, 697, 699, -1,700, 698, + 697, -1,699, 700, 699, -1,703, 702, 701, -1,703, 705, 704, -1,705, 703, 701, -1,500, + 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,500, 500, 500, -1,489, 489, 489, -1, + 489, 489, 489, -1,489, 489, 489, -1,573, 573, 573, -1,573, 573, 573, -1,573, 573, + 573, -1,573, 573, 573, -1,707, 706, 702, -1,706, 707, 708, -1,709, 706, 708, -1,711, + 710, 710, -1,713, 711, 712, -1,711, 710, 712, -1,713, 712, 713, -1,507, 507, 507, -1, + 507, 507, 507, -1,507, 507, 507, -1,716, 715, 714, -1,716, 717, 715, -1,720, 719, + 718, -1,718, 719, 716, -1,719, 717, 716, -1,719, 722, 721, -1,724, 723, 722, -1,720, + 725, 719, -1,724, 719, 725, -1,722, 719, 724, -1,724, 726, 723, -1,717, 719, 721, -1, + 729, 728, 727, -1,729, 717, 730, -1,730, 728, 729, -1,732, 731, 730, -1,728, 730, + 731, -1,722, 732, 721, -1,730, 721, 732, -1,717, 721, 730, -1,735, 734, 733, -1,738, + 737, 736, -1,734, 738, 739, -1,741, 733, 740, -1,741, 735, 733, -1,738, 736, 739, -1, + 739, 733, 734, -1,736, 743, 742, -1,739, 736, 744, -1,736, 737, 743, -1,733, 739, + 745, -1,742, 747, 746, -1,750, 749, 748, -1,751, 747, 749, -1,754, 753, 752, -1,748, + 752, 755, -1,757, 754, 756, -1,759, 756, 758, -1,759, 758, 760, -1,747, 742, 743, -1, + 736, 742, 761, -1,762, 741, 740, -1,733, 745, 740, -1,751, 746, 747, -1,742, 746, + 761, -1,763, 746, 751, -1,745, 739, 744, -1,764, 761, 746, -1,763, 764, 746, -1,736, + 761, 744, -1,751, 750, 763, -1,750, 755, 765, -1,755, 750, 748, -1,753, 757, 766, -1, + 757, 753, 754, -1,759, 757, 756, -1,757, 759, 767, -1,755, 752, 753, -1,755, 753, + 768, -1,765, 769, 750, -1,766, 768, 753, -1,767, 766, 757, -1,765, 755, 768, -1,767, + 759, 770, -1,750, 769, 763, -1,751, 749, 750, -1,759, 760, 770, -1,773, 772, 771, -1, + 776, 775, 774, -1,772, 776, 777, -1,770, 779, 778, -1,779, 770, 773, -1,771, 777, + 780, -1,777, 771, 772, -1,774, 777, 776, -1,777, 774, 781, -1,779, 773, 771, -1,779, + 771, 782, -1,775, 783, 774, -1,773, 770, 760, -1,783, 785, 784, -1,784, 787, 786, -1, + 789, 787, 788, -1,785, 787, 784, -1,791, 784, 790, -1,791, 783, 784, -1,794, 793, + 792, -1,796, 792, 795, -1,797, 788, 793, -1,799, 795, 798, -1,783, 791, 774, -1,774, + 791, 800, -1,801, 770, 778, -1,771, 780, 782, -1,782, 778, 779, -1,790, 784, 786, -1, + 780, 777, 781, -1,800, 791, 790, -1,802, 790, 786, -1,774, 800, 781, -1,786, 789, + 802, -1,789, 797, 803, -1,797, 789, 788, -1,794, 796, 804, -1,796, 794, 792, -1,799, + 796, 795, -1,796, 799, 805, -1,797, 793, 794, -1,797, 794, 806, -1,803, 807, 789, -1, + 804, 806, 794, -1,805, 804, 796, -1,803, 797, 806, -1,789, 807, 802, -1,786, 787, + 789, -1,770, 801, 767, -1,798, 809, 808, -1,812, 811, 810, -1,809, 812, 813, -1,799, + 808, 814, -1,799, 798, 808, -1,812, 810, 813, -1,813, 808, 809, -1,810, 816, 815, -1, + 813, 810, 817, -1,810, 811, 816, -1,808, 813, 818, -1,815, 820, 819, -1,823, 822, + 821, -1,824, 820, 822, -1,827, 826, 825, -1,821, 825, 828, -1,830, 827, 829, -1,832, + 829, 831, -1,832, 831, 833, -1,820, 815, 816, -1,810, 815, 834, -1,805, 799, 814, -1, + 808, 818, 814, -1,824, 819, 820, -1,815, 819, 834, -1,835, 819, 824, -1,818, 813, + 817, -1,836, 834, 819, -1,835, 836, 819, -1,810, 834, 817, -1,824, 823, 835, -1,823, + 828, 837, -1,828, 823, 821, -1,826, 830, 838, -1,830, 826, 827, -1,832, 830, 829, -1, + 830, 832, 839, -1,828, 825, 826, -1,828, 826, 840, -1,837, 841, 823, -1,838, 840, + 826, -1,839, 838, 830, -1,837, 828, 840, -1,839, 832, 842, -1,823, 841, 835, -1,824, + 822, 823, -1,832, 833, 842, -1,845, 844, 843, -1,848, 847, 846, -1,844, 848, 849, -1, + 842, 851, 850, -1,851, 842, 845, -1,843, 849, 852, -1,849, 843, 844, -1,846, 849, + 848, -1,849, 846, 853, -1,851, 845, 843, -1,851, 843, 854, -1,847, 855, 846, -1,845, + 842, 833, -1,855, 857, 856, -1,856, 859, 858, -1,861, 859, 860, -1,857, 859, 856, -1, + 863, 856, 862, -1,863, 855, 856, -1,866, 865, 864, -1,868, 864, 867, -1,869, 860, + 865, -1,741, 867, 735, -1,855, 863, 846, -1,846, 863, 870, -1,871, 842, 850, -1,843, + 852, 854, -1,854, 850, 851, -1,862, 856, 858, -1,852, 849, 853, -1,870, 863, 862, -1, + 872, 862, 858, -1,846, 870, 853, -1,858, 861, 872, -1,861, 869, 873, -1,869, 861, + 860, -1,866, 868, 874, -1,868, 866, 864, -1,741, 868, 867, -1,868, 741, 762, -1,869, + 865, 866, -1,869, 866, 875, -1,873, 876, 861, -1,874, 875, 866, -1,762, 874, 868, -1, + 873, 869, 875, -1,861, 876, 872, -1,858, 859, 861, -1,842, 871, 839, -1,878, 762, + 877, -1,881, 880, 879, -1,880, 882, 877, -1,885, 884, 883, -1,888, 887, 886, -1,890, + 886, 889, -1,887, 891, 883, -1,884, 892, 879, -1,877, 882, 878, -1,893, 878, 882, -1, + 879, 892, 881, -1,894, 881, 892, -1,881, 895, 882, -1,880, 881, 882, -1,883, 891, + 885, -1,896, 885, 891, -1,886, 890, 888, -1,897, 888, 890, -1,899, 890, 898, -1,889, + 898, 890, -1,888, 900, 891, -1,887, 888, 891, -1,885, 901, 892, -1,884, 885, 892, -1, + 902, 898, 889, -1,902, 904, 903, -1,907, 906, 905, -1,906, 908, 903, -1,911, 910, + 909, -1,914, 913, 912, -1,913, 916, 915, -1,917, 910, 914, -1,918, 905, 911, -1,906, + 907, 908, -1,902, 903, 908, -1,920, 919, 916, -1,921, 908, 907, -1,908, 922, 902, -1, + 924, 920, 923, -1,923, 926, 925, -1,929, 928, 927, -1,928, 805, 930, -1,931, 926, + 929, -1,907, 905, 918, -1,902, 889, 904, -1,902, 932, 898, -1,895, 881, 894, -1,901, + 885, 896, -1,894, 892, 901, -1,911, 909, 918, -1,918, 909, 933, -1,934, 909, 917, -1, + 897, 900, 888, -1,897, 890, 899, -1,891, 900, 896, -1,910, 917, 909, -1,893, 882, + 895, -1,899, 898, 932, -1,922, 908, 921, -1,932, 902, 922, -1,907, 918, 935, -1,909, + 934, 933, -1,917, 936, 934, -1,918, 933, 935, -1,921, 907, 935, -1,937, 936, 917, -1, + 913, 915, 912, -1,937, 912, 915, -1,920, 924, 919, -1,938, 919, 924, -1,919, 939, + 915, -1,916, 919, 915, -1,926, 931, 925, -1,940, 925, 931, -1,928, 930, 927, -1,941, + 927, 930, -1,943, 930, 942, -1,805, 942, 930, -1,927, 944, 931, -1,929, 927, 931, -1, + 925, 945, 924, -1,923, 925, 924, -1,915, 939, 937, -1,924, 946, 938, -1,919, 938, + 939, -1,925, 940, 945, -1,927, 941, 944, -1,930, 943, 941, -1,931, 944, 940, -1,924, + 945, 946, -1,937, 917, 912, -1,914, 912, 917, -1,947, 943, 942, -1,950, 949, 948, -1, + 947, 951, 949, -1,954, 953, 952, -1,957, 956, 955, -1,954, 958, 956, -1,950, 959, + 953, -1,942, 951, 947, -1,951, 942, 805, -1,948, 959, 950, -1,959, 948, 960, -1,951, + 961, 948, -1,951, 948, 949, -1,952, 958, 954, -1,958, 952, 962, -1,963, 955, 956, -1, + 955, 963, 964, -1,966, 955, 965, -1,955, 966, 957, -1,958, 967, 963, -1,958, 963, + 956, -1,959, 968, 952, -1,959, 952, 953, -1,957, 966, 969, -1,971, 970, 969, -1,974, + 973, 972, -1,971, 975, 973, -1,978, 977, 976, -1,981, 980, 979, -1,979, 977, 982, -1, + 976, 974, 983, -1,972, 973, 975, -1,975, 969, 984, -1,980, 986, 985, -1,988, 972, + 987, -1,975, 989, 972, -1,988, 974, 972, -1,991, 990, 985, -1,994, 993, 992, -1,995, + 893, 993, -1,992, 990, 996, -1,988, 983, 974, -1,975, 971, 969, -1,970, 957, 969, -1, + 966, 997, 969, -1,960, 948, 961, -1,962, 952, 968, -1,968, 959, 960, -1,983, 978, + 976, -1,998, 978, 983, -1,964, 963, 967, -1,962, 967, 958, -1,955, 964, 965, -1,961, + 951, 805, -1,997, 966, 965, -1,989, 975, 984, -1,984, 969, 997, -1,999, 988, 987, -1, + 999, 998, 983, -1,998, 1000, 978, -1,999, 983, 988, -1,987, 972, 989, -1,978, 1000, + 1001, -1,982, 981, 979, -1,981, 982, 1001, -1,986, 1002, 985, -1,1002, 986, 1003, -1, + 981, 1004, 986, -1,981, 986, 980, -1,991, 996, 990, -1,996, 991, 1005, -1,994, 995, + 993, -1,995, 994, 1006, -1,878, 995, 1007, -1,995, 878, 893, -1,996, 1008, 994, -1, + 996, 994, 992, -1,1002, 1009, 991, -1,1002, 991, 985, -1,1001, 1004, 981, -1,1003, + 1009, 1002, -1,1004, 1003, 986, -1,1005, 1008, 996, -1,1006, 1007, 995, -1,1007, + 762, 878, -1,1008, 1006, 994, -1,1009, 1005, 991, -1,982, 978, 1001, -1,978, 982, + 977, -1,1012, 1011, 1010, -1,1015, 1014, 1013, -1,1012, 1016, 1014, -1,1019, 1018, + 1017, -1,1022, 1021, 1020, -1,1024, 1023, 1021, -1,1026, 1025, 1020, -1,1015, 1017, + 1018, -1,1013, 1014, 1016, -1,1016, 1010, 1027, -1,1025, 1026, 1017, -1,1017, 1013, + 1028, -1,1016, 1029, 1013, -1,1017, 1015, 1013, -1,1024, 1031, 1030, -1,1034, 1033, + 1032, -1,1031, 1035, 1033, -1,1037, 1034, 1036, -1,1038, 1023, 1024, -1,1017, 1039, + 1025, -1,1016, 1012, 1010, -1,1041, 1040, 1037, -1,1041, 1040, 1040, -1,1040, 1040, + 1041, -1,1041, 1043, 1042, -1,1046, 1045, 1044, -1,1048, 1047, 1045, -1,1044, 1043, + 1049, -1,1042, 1040, 1041, -1,1048, 1051, 1050, -1,1054, 1053, 1052, -1,1052, 1051, + 1055, -1,1054, 1057, 1056, -1,1060, 1059, 1058, -1,1062, 1061, 1059, -1,1058, 1057, + 1060, -1,1064, 1064, 1063, -1,1050, 1047, 1048, -1,1025, 1022, 1020, -1,1022, 1024, + 1021, -1,1065, 1024, 1022, -1,1028, 1013, 1029, -1,1016, 1027, 1029, -1,1035, 1024, + 1066, -1,1035, 1067, 1033, -1,1068, 1067, 1035, -1,1032, 1036, 1034, -1,1069, 1036, + 1032, -1,1070, 1041, 1036, -1,1036, 1041, 1037, -1,1032, 1067, 1071, -1,1067, 1032, + 1033, -1,1039, 1017, 1028, -1,1024, 1035, 1031, -1,1072, 1025, 1039, -1,1072, 1065, + 1022, -1,1072, 1022, 1025, -1,1066, 1068, 1035, -1,1071, 1069, 1032, -1,1069, 1070, + 1036, -1,1068, 1071, 1067, -1,1065, 1066, 1024, -1,1041, 1070, 1073, -1,1074, 1049, + 1043, -1,1049, 1074, 1075, -1,1046, 1048, 1045, -1,1048, 1046, 1076, -1,1049, 1077, + 1046, -1,1049, 1046, 1044, -1,1055, 1054, 1052, -1,1054, 1055, 1078, -1,1060, 1062, + 1059, -1,1062, 1060, 1079, -1,1081, 1062, 1080, -1,1062, 1081, 1061, -1,1054, 1082, + 1060, -1,1054, 1060, 1057, -1,1048, 1083, 1055, -1,1048, 1055, 1051, -1,1073, 1075, + 1074, -1,1077, 1076, 1046, -1,1076, 1083, 1048, -1,1075, 1077, 1049, -1,1078, 1082, + 1054, -1,1079, 1080, 1062, -1,1080, 1084, 1081, -1,1082, 1079, 1060, -1,1083, 1078, + 1055, -1,1074, 1041, 1073, -1,1041, 1074, 1043, -1,1081, 1084, 1085, -1,1088, 1087, + 1086, -1,1090, 1086, 1089, -1,1087, 1091, 1085, -1,1094, 1093, 1092, -1,1097, 1096, + 1095, -1,1099, 1095, 1098, -1,1096, 1100, 1092, -1,1093, 1101, 1089, -1,1085, 1091, + 1081, -1,1061, 1081, 1091, -1,1086, 1090, 1088, -1,1102, 1088, 1090, -1,1103, 1090, + 1101, -1,1089, 1101, 1090, -1,1088, 1104, 1091, -1,1087, 1088, 1091, -1,1092, 1100, + 1094, -1,1105, 1094, 1100, -1,1095, 1099, 1097, -1,1106, 1097, 1099, -1,1108, 1099, + 1107, -1,1098, 1107, 1099, -1,1097, 1109, 1100, -1,1096, 1097, 1100, -1,1094, 1110, + 1101, -1,1093, 1094, 1101, -1,1111, 1107, 1098, -1,1111, 1113, 1112, -1,1116, 1115, + 1114, -1,1118, 1114, 1117, -1,1115, 1119, 1112, -1,1122, 1121, 1120, -1,1125, 1124, + 1123, -1,1124, 1127, 1126, -1,1128, 1121, 1125, -1,1122, 1129, 1117, -1,1119, 1115, + 1116, -1,1130, 1111, 1119, -1,1118, 1117, 1129, -1,1131, 1116, 1118, -1,1132, 1118, + 1129, -1,1134, 1133, 1127, -1,1116, 1135, 1119, -1,1116, 1114, 1118, -1,1134, 1137, + 1136, -1,1140, 1139, 1138, -1,1139, 1027, 1141, -1,1142, 1137, 1140, -1,1122, 1120, + 1129, -1,1111, 1112, 1119, -1,1111, 1098, 1113, -1,1111, 1143, 1107, -1,1104, 1088, + 1102, -1,1144, 1090, 1103, -1,1103, 1101, 1110, -1,1102, 1090, 1144, -1,1100, 1145, + 1105, -1,1105, 1110, 1094, -1,1145, 1100, 1109, -1,1109, 1097, 1106, -1,1099, 1108, + 1106, -1,1061, 1091, 1104, -1,1108, 1107, 1143, -1,1146, 1111, 1130, -1,1130, 1119, + 1147, -1,1143, 1111, 1146, -1,1135, 1116, 1131, -1,1132, 1129, 1148, -1,1129, 1120, + 1148, -1,1131, 1118, 1132, -1,1147, 1119, 1135, -1,1149, 1148, 1120, -1,1125, 1123, + 1128, -1,1128, 1123, 1150, -1,1151, 1126, 1133, -1,1126, 1150, 1123, -1,1152, 1133, + 1136, -1,1127, 1133, 1126, -1,1153, 1149, 1120, -1,1124, 1126, 1123, -1,1137, 1142, + 1136, -1,1136, 1142, 1154, -1,1139, 1141, 1138, -1,1138, 1141, 1155, -1,1141, 1010, + 1156, -1,1027, 1010, 1141, -1,1157, 1142, 1138, -1,1140, 1138, 1142, -1,1153, 1120, + 1128, -1,1134, 1136, 1133, -1,1128, 1150, 1153, -1,1133, 1152, 1151, -1,573, 573, + 573, -1,1126, 1151, 1150, -1,1142, 1157, 1154, -1,1141, 1156, 1155, -1,1010, 1011, + 1156, -1,1138, 1155, 1157, -1,1158, 1158, 1158, -1,1121, 1128, 1120, -1,1150, 1160, + 1159, -1,1162, 1161, 1152, -1,1162, 1163, 1151, -1,1160, 1164, 1163, -1,1165, 1159, + 1153, -1,1168, 1167, 1166, -1,1170, 1169, 1168, -1,1109, 1172, 1171, -1,1173, 1170, + 1173, -1,1172, 1174, 1145, -1,1166, 1175, 1174, -1,1177, 1177, 1176, -1,1178, 1177, + 1177, -1,1057, 1058, 1179, -1,1180, 1179, 1058, -1,1182, 1181, 1045, -1,1185, 1184, + 1183, -1,1182, 1186, 1044, -1,1186, 1187, 1044, -1,1184, 1188, 1183, -1,1188, 1189, + 1043, -1,1187, 1184, 1185, -1,1189, 1042, 1190, -1,1192, 1191, 1033, -1,1194, 1034, + 1193, -1,1193, 1195, 1037, -1,1192, 1033, 1196, -1,1194, 1197, 1034, -1,1196, 1198, + 1197, -1,1200, 1191, 1199, -1,1199, 1201, 1200, -1,1201, 1199, 1202, -1,1012, 1203, + 1011, -1,1014, 1203, 1012, -1,1014, 1015, 1204, -1,1203, 1014, 1204, -1,1206, 1205, + 1205, -1,1209, 1208, 1207, -1,1210, 1210, 1210, -1,1211, 1211, 1211, -1,1212, 1212, + 1207, -1,1205, 1205, 1209, -1,1214, 1214, 1213, -1,1217, 1216, 1215, -1,1215, 1218, + 1218, -1,1219, 1217, 1213, -1,1221, 1221, 1220, -1,1222, 1222, 1222, -1,1224, 1223, + 1220, -1,1227, 1226, 1225, -1,1224, 1227, 1223, -1,1227, 1224, 1226, -1,1228, 1228, + 1228, -1,1229, 1230, 1229, -1,1233, 1232, 1231, -1,1232, 1233, 1230, -1,1236, 1235, + 1234, -1,1236, 1231, 1232, -1,1234, 1231, 1236, -1,1237, 1237, 1237, -1,1240, 1239, + 1238, -1,1241, 1238, 1239, -1,1242, 1238, 1241, -1,1242, 1241, 1243, -1,1246, 1245, + 1244, -1,1245, 1246, 1247, -1,1246, 1244, 1248, -1,1246, 1249, 1247, -1,1249, 1243, + 1247, -1,1239, 1240, 1250, -1,1240, 1251, 1250, -1,1254, 1253, 1252, -1,1255, 1252, + 1253, -1,1253, 1254, 1256, -1,1256, 1258, 1257, -1,1258, 1256, 1254, -1,1257, 1258, + 1259, -1,1260, 1259, 1260, -1,1263, 1262, 1261, -1,1266, 1265, 1264, -1,1268, 1267, + 1265, -1,1265, 1267, 1264, -1,1103, 1267, 1268, -1,1270, 1269, 1262, -1,1271, 1061, + 1266, -1,1262, 1263, 1272, -1,1264, 1273, 1271, -1,1276, 1275, 1274, -1,1277, 1273, + 1264, -1,1266, 1264, 1271, -1,1279, 1277, 1278, -1,1264, 1278, 1277, -1,1280, 1277, + 1279, -1,1278, 1282, 1281, -1,1277, 1283, 1273, -1,1267, 1278, 1264, -1,1286, 1285, + 1284, -1,1282, 1278, 1267, -1,1287, 1282, 1103, -1,1282, 1267, 1103, -1,1287, 1288, + 1282, -1,1289, 1282, 1288, -1,1171, 1289, 1288, -1,1289, 1290, 1282, -1,1290, 1291, + 1282, -1,1292, 1282, 1291, -1,1293, 1274, 1289, -1,1294, 1289, 1274, -1,1291, 1295, + 1292, -1,1290, 1289, 1294, -1,1292, 1281, 1282, -1,1276, 1274, 1296, -1,1281, 1279, + 1278, -1,1297, 1277, 1280, -1,1279, 1281, 1298, -1,1299, 1279, 1298, -1,1300, 1279, + 1299, -1,1277, 1302, 1301, -1,1277, 1301, 1283, -1,1281, 1304, 1303, -1,1277, 1305, + 1302, -1,1297, 1305, 1277, -1,1281, 1303, 1298, -1,1307, 1281, 1306, -1,1310, 1309, + 1308, -1,1308, 1309, 1311, -1,1312, 1309, 1310, -1,1281, 1292, 1295, -1,1314, 1313, + 1306, -1,1307, 1306, 1313, -1,1315, 1314, 1312, -1,1317, 1276, 1316, -1,1312, 1319, + 1318, -1,1314, 1309, 1312, -1,1307, 1304, 1281, -1,1317, 1311, 1276, -1,1314, 1315, + 1313, -1,1280, 1279, 1300, -1,1283, 1320, 1273, -1,1296, 1316, 1276, -1,1289, 1322, + 1321, -1,1321, 1293, 1289, -1,1322, 1109, 1323, -1,1171, 1109, 1322, -1,1289, 1171, + 1322, -1,1322, 1324, 1321, -1,1321, 1325, 1293, -1,1328, 1327, 1326, -1,1327, 1328, + 1325, -1,1321, 1327, 1325, -1,1330, 1329, 1327, -1,1327, 1329, 1331, -1,1332, 1327, + 1321, -1,1274, 1293, 1296, -1,1321, 1324, 1332, -1,1334, 1323, 1333, -1,1323, 1109, + 1333, -1,1334, 1336, 1335, -1,1336, 1130, 1337, -1,1323, 1334, 1335, -1,1335, 1338, + 1324, -1,1324, 1322, 1323, -1,1339, 1338, 1335, -1,1336, 1337, 1335, -1,1337, 1340, + 1335, -1,1339, 1335, 1340, -1,1341, 1339, 1340, -1,1344, 1343, 1342, -1,1345, 1338, + 1339, -1,1324, 1323, 1335, -1,1338, 1332, 1324, -1,1332, 1330, 1327, -1,1348, 1347, + 1346, -1,1350, 1347, 1349, -1,1347, 1328, 1326, -1,1348, 1346, 1351, -1,1346, 1352, + 1351, -1,1327, 1353, 1326, -1,1350, 1355, 1354, -1,1357, 1354, 1356, -1,1358, 1355, + 1350, -1,1349, 1347, 1348, -1,1358, 1350, 1349, -1,1353, 1327, 1331, -1,1338, 1345, + 1359, -1,1361, 1360, 1345, -1,1361, 1345, 1339, -1,1359, 1362, 1338, -1,1363, 1360, + 1361, -1,1340, 1364, 1341, -1,1365, 1339, 1341, -1,1365, 1361, 1339, -1,1332, 1338, + 1362, -1,1366, 1354, 1355, -1,1328, 1347, 1350, -1,1367, 1364, 1340, -1,1370, 1369, + 1368, -1,1370, 1372, 1371, -1,1372, 1370, 1368, -1,1375, 1374, 1373, -1,1373, 1374, + 1376, -1,1378, 1373, 1377, -1,1380, 1377, 1379, -1,1373, 1379, 1377, -1,1381, 1380, + 1379, -1,1382, 1371, 1376, -1,1383, 1380, 1381, -1,1313, 1385, 1384, -1,1387, 1386, + 1384, -1,1385, 1313, 1315, -1,1388, 1318, 1319, -1,1390, 1389, 1384, -1,1313, 1384, + 1386, -1,1384, 1389, 1387, -1,1380, 1383, 1387, -1,1393, 1392, 1391, -1,1394, 1390, + 1392, -1,1394, 1392, 1393, -1,1387, 1383, 1386, -1,1357, 1356, 1388, -1,1315, 1312, + 1318, -1,1370, 1371, 1382, -1,1395, 1370, 1382, -1,1382, 1376, 1374, -1,1262, 1320, + 1370, -1,1320, 1369, 1370, -1,1396, 1262, 1395, -1,1370, 1395, 1262, -1,1397, 1262, + 1396, -1,1262, 1397, 1398, -1,1398, 1399, 1262, -1,1402, 1401, 1400, -1,1400, 1393, + 1402, -1,1404, 1403, 1401, -1,1401, 1402, 1404, -1,1400, 1401, 1405, -1,1401, 1406, + 1405, -1,1409, 1408, 1407, -1,1262, 1408, 1409, -1,500, 500, 500, -1,1410, 1409, + 1407, -1,1262, 1409, 1411, -1,1262, 1399, 1408, -1,1405, 1406, 1412, -1,1317, 1308, + 1311, -1,1320, 1283, 1369, -1,1355, 1413, 1366, -1,1415, 1414, 1413, -1,1366, 1413, + 1414, -1,1416, 1414, 1415, -1,1417, 1415, 1286, -1,1366, 1356, 1354, -1,1418, 1414, + 1416, -1,1406, 1403, 1419, -1,1417, 1420, 1416, -1,1422, 1421, 1286, -1,1286, 1284, + 1417, -1,1422, 1423, 1421, -1,1417, 1416, 1415, -1,1425, 1424, 1363, -1,1425, 1427, + 1426, -1,1424, 1360, 1363, -1,1429, 1428, 1427, -1,1422, 1424, 1423, -1,1431, 1429, + 1430, -1,1424, 1425, 1426, -1,1430, 1432, 1431, -1,1432, 1433, 1431, -1,1428, 1426, + 1427, -1,1426, 1434, 1424, -1,1421, 1435, 1285, -1,1418, 1420, 1436, -1,1438, 1436, + 1437, -1,1437, 1410, 1438, -1,1411, 1270, 1262, -1,1439, 1420, 1417, -1,1441, 1439, + 1440, -1,1439, 1417, 1440, -1,1262, 1269, 1261, -1,1440, 1442, 1441, -1,1437, 1436, + 1420, -1,1410, 1437, 1443, -1,1410, 1443, 1409, -1,1423, 1435, 1421, -1,1434, 1426, + 1428, -1,1431, 1444, 1429, -1,1444, 1428, 1429, -1,1434, 1423, 1424, -1,1446, 1272, + 1445, -1,1445, 1447, 1446, -1,1272, 1446, 1262, -1,1442, 1343, 1344, -1,1416, 1420, + 1418, -1,1406, 1401, 1403, -1,1275, 1276, 1311, -1,1441, 1442, 1344, -1,1285, 1286, + 1421, -1,1391, 1402, 1393, -1,1357, 1388, 1319, -1,1389, 1390, 1394, -1,1373, 1378, + 1375, -1,1450, 1449, 1448, -1,1448, 1451, 1450, -1,1452, 1451, 1448, -1,1454, 1452, + 1453, -1,1456, 1453, 1455, -1,1457, 1456, 1455, -1,1452, 1454, 1451, -1,1453, 1456, + 1458, -1,1460, 1459, 1456, -1,1458, 1456, 1459, -1,1457, 1461, 1456, -1,1462, 1456, + 1461, -1,1462, 1463, 1460, -1,1462, 1460, 1456, -1,1458, 1454, 1453, -1,1466, 1465, + 1464, -1,1468, 1466, 1467, -1,1469, 1468, 1467, -1,1464, 1465, 1470, -1,1467, 1466, + 1464, -1,1472, 1471, 1467, -1,1473, 1469, 1467, -1,1467, 1475, 1474, -1,1475, 1467, + 1476, -1,1476, 1467, 1471, -1,1478, 1471, 1477, -1,1471, 1472, 1477, -1,1480, 1479, + 1478, -1,1471, 1478, 1479, -1,1479, 1476, 1471, -1,1474, 1473, 1467, -1,1483, 1482, + 1481, -1,1481, 1484, 1483, -1,1486, 1485, 1484, -1,1484, 1485, 1487, -1,1487, 1483, + 1484, -1,1488, 1484, 1481, -1,1489, 1484, 1488, -1,1484, 1489, 1490, -1,1484, 1490, + 1491, -1,1492, 1484, 1491, -1,1486, 1484, 1493, -1,1495, 1484, 1494, -1,1494, 1484, + 1496, -1,1498, 1497, 1484, -1,1496, 1484, 1497, -1,1484, 1499, 1498, -1,1501, 1484, + 1500, -1,1492, 1500, 1484, -1,1502, 1484, 1501, -1,1484, 1504, 1503, -1,1504, 1484, + 1502, -1,1503, 1505, 1484, -1,1505, 1499, 1484, -1,1493, 1484, 1495, -1,1508, 1507, + 1506, -1,1509, 1508, 1506, -1,1506, 1511, 1510, -1,1509, 1506, 1510, -1,1512, 1506, + 1507, -1,1514, 1513, 1506, -1,1506, 1512, 1514, -1,1517, 1516, 1515, -1,1513, 1515, + 1516, -1,1516, 1517, 1518, -1,1518, 1519, 1516, -1,1506, 1513, 1516, -1,1516, 1520, + 1506, -1,1516, 1522, 1521, -1,1519, 1518, 1523, -1,1525, 1524, 1523, -1,1525, 1523, + 1518, -1,1519, 1522, 1516, -1,500, 500, 500, -1,1525, 1527, 1526, -1,1524, 1526, + 1528, -1,1528, 1524, 1528, -1,1530, 1530, 1529, -1,1526, 1524, 1525, -1,1520, 1516, + 1521, -1,1011, 1532, 1531, -1,1433, 1533, 1431, -1,1535, 1531, 1534, -1,1537, 1262, + 1536, -1,1535, 1539, 1538, -1,1534, 1539, 1535, -1,1538, 1539, 1154, -1,1536, 1262, + 1540, -1,1534, 1531, 1532, -1,1534, 1542, 1541, -1,1543, 1542, 1534, -1,1534, 1541, + 1544, -1,1544, 1546, 1545, -1,1546, 1544, 1541, -1,1544, 1545, 1547, -1,1549, 1545, + 1548, -1,1534, 1544, 1539, -1,1534, 1532, 1550, -1,1539, 1544, 1551, -1,1447, 1552, + 1446, -1,573, 573, 573, -1,1553, 1553, 1553, -1,1554, 1161, 1551, -1,1551, 1161, + 1152, -1,1556, 1555, 1551, -1,1551, 1557, 1556, -1,1555, 1554, 1551, -1,1152, 1539, + 1551, -1,1547, 1557, 1551, -1,1547, 1551, 1544, -1,1560, 1559, 1558, -1,1558, 1561, + 1560, -1,1563, 1562, 1561, -1,1549, 1547, 1545, -1,1548, 1564, 1549, -1,1552, 1262, + 1446, -1,1566, 1565, 1549, -1,1568, 1567, 1565, -1,1569, 1567, 1568, -1,1567, 1549, + 1565, -1,1570, 1567, 1569, -1,1572, 1543, 1571, -1,1572, 1542, 1543, -1,1575, 1574, + 1573, -1,1571, 1543, 1576, -1,1576, 1574, 1577, -1,1578, 1574, 1576, -1,1571, 1576, + 1577, -1,1543, 1579, 1576, -1,1550, 1543, 1534, -1,1570, 1580, 1567, -1,1580, 1570, + 1581, -1,1562, 1560, 1561, -1,1560, 1582, 1559, -1,1583, 1582, 1560, -1,1585, 1575, + 1584, -1,1575, 1586, 1574, -1,1589, 1588, 1587, -1,1590, 1584, 1575, -1,1589, 1587, + 1583, -1,1593, 1592, 1591, -1,1563, 1594, 1562, -1,1543, 1550, 1595, -1,1549, 1564, + 1566, -1,1598, 1597, 1596, -1,1582, 1583, 1587, -1,1164, 1161, 1554, -1,1555, 1599, + 1554, -1,1600, 1165, 1554, -1,1554, 1165, 1164, -1,1601, 1554, 1599, -1,1601, 1602, + 1554, -1,1605, 1604, 1603, -1,1607, 1606, 1605, -1,1602, 1601, 1608, -1,1611, 1610, + 1609, -1,1602, 1610, 1612, -1,1606, 1607, 1613, -1,1613, 1614, 1582, -1,1602, 1608, + 1610, -1,1617, 1616, 1615, -1,1619, 1153, 1618, -1,1620, 1619, 1618, -1,1135, 1621, + 1337, -1,1624, 1623, 1622, -1,1130, 1147, 1337, -1,1135, 1337, 1147, -1,1625, 1622, + 1623, -1,1620, 1626, 1621, -1,1600, 1602, 1618, -1,1602, 1600, 1554, -1,1618, 1602, + 1627, -1,1600, 1618, 1153, -1,1626, 1337, 1621, -1,1626, 1618, 1627, -1,1626, 1340, + 1337, -1,1628, 1626, 1627, -1,1627, 1602, 1612, -1,1629, 1340, 1626, -1,1626, 1620, + 1618, -1,1153, 1165, 1600, -1,1631, 1630, 1624, -1,1604, 1632, 1603, -1,1582, 1634, + 1633, -1,1582, 1587, 1635, -1,1634, 1636, 1633, -1,1604, 1605, 1606, -1,1611, 1637, + 1610, -1,1606, 1613, 1582, -1,1640, 1639, 1638, -1,1643, 1642, 1641, -1,1642, 1637, + 1641, -1,1645, 1644, 1640, -1,1643, 1640, 1644, -1,1646, 1610, 1637, -1,1648, 1593, + 1647, -1,1646, 1637, 1642, -1,1649, 1627, 1612, -1,1612, 1610, 1646, -1,1629, 1626, + 1628, -1,1650, 1629, 1628, -1,1652, 1651, 1628, -1,1627, 1652, 1628, -1,1653, 1628, + 1651, -1,1627, 1649, 1652, -1,1656, 1655, 1654, -1,1657, 1629, 1650, -1,1658, 1650, + 1628, -1,1628, 1659, 1658, -1,1655, 1660, 1628, -1,1661, 1656, 1654, -1,1653, 1655, + 1628, -1,1629, 1657, 1662, -1,1614, 1559, 1582, -1,1340, 1629, 1663, -1,1665, 1631, + 1664, -1,1667, 1592, 1666, -1,1666, 1668, 1573, -1,1671, 1670, 1669, -1,1673, 1670, + 1672, -1,1673, 1669, 1670, -1,1675, 1667, 1674, -1,1677, 1675, 1676, -1,1680, 1679, + 1678, -1,1678, 1681, 1680, -1,1678, 1679, 1682, -1,1679, 1677, 1683, -1,1666, 1573, + 1667, -1,1684, 1681, 1678, -1,1685, 1681, 1684, -1,1656, 1687, 1686, -1,1688, 1686, + 1687, -1,1689, 1638, 1688, -1,1686, 1688, 1638, -1,1640, 1638, 1645, -1,1692, 1691, + 1690, -1,1695, 1694, 1693, -1,1698, 1697, 1696, -1,1695, 1700, 1699, -1,1696, 1694, + 1695, -1,1693, 1694, 1701, -1,1697, 1698, 1702, -1,1704, 1678, 1703, -1,1671, 1669, + 1705, -1,1574, 1578, 1573, -1,1706, 1578, 1579, -1,1708, 1578, 1707, -1,1668, 1575, + 1573, -1,1710, 1674, 1709, -1,1674, 1667, 1573, -1,1712, 1616, 1711, -1,1573, 1578, + 1708, -1,1715, 1714, 1713, -1,1579, 1595, 1262, -1,1674, 1676, 1675, -1,1706, 1262, + 1716, -1,1262, 1706, 1579, -1,1716, 1262, 1717, -1,1717, 1262, 1712, -1,1711, 1616, + 1617, -1,1262, 1718, 1712, -1,1717, 1712, 1719, -1,1722, 1721, 1720, -1,1723, 1718, + 1262, -1,1683, 1677, 1676, -1,1693, 1701, 1724, -1,1726, 1725, 1714, -1,1679, 1683, + 1682, -1,1262, 1727, 1723, -1,1664, 1615, 1665, -1,1665, 1630, 1631, -1,1624, 1630, + 1623, -1,1262, 1537, 1727, -1,1617, 1615, 1664, -1,1700, 1695, 1693, -1,1576, 1579, + 1578, -1,1543, 1595, 1579, -1,1729, 1660, 1728, -1,1660, 1729, 1730, -1,1628, 1730, + 1659, -1,1728, 1660, 1731, -1,1628, 1660, 1730, -1,1733, 1732, 1731, -1,1731, 1732, + 1728, -1,1734, 1731, 1702, -1,1736, 1734, 1735, -1,1734, 1736, 1733, -1,1733, 1731, + 1734, -1,1735, 1734, 1737, -1,1731, 1697, 1702, -1,1737, 1734, 1738, -1,1740, 1739, + 1629, -1,1741, 1629, 1738, -1,1738, 1739, 1742, -1,1629, 1741, 1663, -1,1739, 1738, + 1629, -1,1737, 1738, 1742, -1,1740, 1629, 1662, -1,1745, 1744, 1743, -1,1747, 1746, + 1744, -1,1749, 1663, 1748, -1,1663, 1750, 1367, -1,1750, 1663, 1749, -1,1748, 1663, + 1746, -1,1752, 1743, 1751, -1,1663, 1367, 1340, -1,1754, 1753, 1700, -1,1755, 1754, + 1700, -1,1752, 1745, 1743, -1,1756, 1744, 1745, -1,1756, 1747, 1744, -1,1596, 1758, + 1757, -1,1760, 1759, 1700, -1,1625, 1759, 1761, -1,1598, 1755, 1759, -1,1758, 1596, + 1597, -1,1759, 1762, 1598, -1,1598, 1596, 1757, -1,1622, 1625, 1761, -1,1755, 1700, + 1759, -1,1753, 1763, 1700, -1,1748, 1746, 1764, -1,1765, 1533, 1758, -1,1431, 1767, + 1766, -1,1533, 1765, 1767, -1,1767, 1431, 1533, -1,1759, 1625, 1762, -1,1746, 1747, + 1764, -1,1722, 1768, 1721, -1,1771, 1770, 1769, -1,1552, 1540, 1262, -1,1720, 1762, + 1722, -1,1766, 1444, 1431, -1,1770, 1721, 1768, -1,1751, 1772, 1752, -1,1768, 1769, + 1770, -1,1758, 1597, 1765, -1,1762, 1720, 1598, -1,1598, 1757, 1755, -1,1696, 1697, + 1694, -1,1648, 1647, 1671, -1,1671, 1705, 1648, -1,1645, 1638, 1689, -1,1773, 1639, + 1672, -1,1639, 1773, 1638, -1,1670, 1773, 1672, -1,1656, 1660, 1655, -1,1687, 1656, + 1661, -1,1586, 1575, 1585, -1,1587, 1588, 1590, -1,1584, 1590, 1588, -1,1582, 1635, + 1634, -1,1592, 1667, 1591, -1,1633, 1636, 1774, -1,1636, 1634, 1635, -1,1611, 1609, + 1632, -1,1603, 1632, 1609, -1,1611, 1775, 1637, -1,1643, 1641, 1640, -1,1775, 1641, + 1637, -1,1591, 1647, 1593, -1,1692, 1690, 1701, -1,1678, 1682, 1703, -1,1678, 1704, + 1692, -1,1704, 1691, 1692, -1,1701, 1690, 1724, -1,1693, 1760, 1700, -1,1712, 1711, + 1719, -1,1706, 1707, 1578, -1,1674, 1573, 1709, -1,1573, 1708, 1776, -1,1709, 1573, + 1777, -1,1776, 1777, 1573, -1,1710, 1715, 1713, -1,1714, 1715, 1726, -1,1710, 1726, + 1715, -1,1710, 1713, 1674, -1,1780, 1779, 1778, -1,1782, 1778, 1781, -1,1780, 1778, + 1782, -1,1784, 1782, 1783, -1,1780, 1782, 1784, -1,1783, 1782, 1781, -1,1532, 1011, + 1203, -1,1785, 1203, 1204, -1,1786, 1015, 1018, -1,1786, 1018, 1019, -1,1015, 1787, + 1204, -1,1785, 1204, 1787, -1,1550, 1532, 1785, -1,1788, 1785, 1787, -1,1787, 1015, + 1786, -1,1790, 1786, 1789, -1,1786, 1026, 1789, -1,1791, 1786, 1790, -1,1792, 1790, + 1789, -1,1786, 1793, 1787, -1,1532, 1203, 1785, -1,1794, 1792, 1023, -1,1795, 1023, + 1038, -1,1797, 1031, 1796, -1,1797, 1796, 1798, -1,1031, 1794, 1030, -1,1800, 1037, + 1799, -1,1800, 1801, 1798, -1,1031, 1797, 1794, -1,1798, 1801, 1797, -1,1037, 1040, + 1799, -1,1040, 1040, 1799, -1,1802, 1794, 1797, -1,1794, 1790, 1792, -1,1794, 1803, + 1790, -1,1788, 1595, 1550, -1,1804, 1788, 1793, -1,1788, 1787, 1793, -1,1791, 1790, + 1803, -1,1793, 1791, 1805, -1,1791, 1803, 1806, -1,1803, 1794, 1807, -1,1788, 1804, + 1595, -1,1793, 1786, 1791, -1,1805, 1262, 1804, -1,1595, 1804, 1262, -1,1793, 1805, + 1804, -1,1808, 1262, 1806, -1,1805, 1806, 1262, -1,1809, 1262, 1808, -1,1803, 1808, + 1806, -1,1791, 1806, 1805, -1,1809, 1808, 1803, -1,1810, 1807, 1802, -1,1807, 1794, + 1802, -1,1809, 1807, 1810, -1,1811, 1810, 1802, -1,1799, 1811, 1801, -1,1802, 1801, + 1811, -1,1812, 1811, 1799, -1,1800, 1799, 1801, -1,1811, 1813, 1810, -1,1797, 1801, + 1802, -1,1813, 1811, 1814, -1,1813, 1262, 1809, -1,1262, 1813, 1814, -1,1811, 1812, + 1814, -1,1814, 1812, 1815, -1,1814, 1815, 1262, -1,1809, 1810, 1813, -1,1809, 1803, + 1807, -1,1550, 1785, 1788, -1,1799, 1040, 1040, -1,1799, 1040, 1042, -1,1816, 1190, + 1185, -1,1817, 1185, 1181, -1,1190, 1799, 1042, -1,1817, 1816, 1185, -1,1181, 1045, + 1817, -1,1812, 1799, 1816, -1,1818, 1816, 1817, -1,1047, 1819, 1045, -1,1045, 1819, + 1817, -1,1818, 1817, 1819, -1,1818, 1820, 1816, -1,1816, 1799, 1190, -1,1819, 1050, + 1821, -1,1819, 1821, 1822, -1,1823, 1064, 1064, -1,1824, 1056, 1057, -1,1053, 1825, + 1822, -1,1825, 1053, 1824, -1,1826, 1819, 1825, -1,1827, 1825, 1824, -1,1057, 1179, + 1824, -1,1179, 1180, 1828, -1,1180, 1061, 1829, -1,1824, 1179, 1828, -1,1819, 1822, + 1825, -1,1819, 1047, 1050, -1,1819, 1830, 1818, -1,1820, 1815, 1812, -1,1831, 1820, + 1830, -1,1820, 1818, 1830, -1,1826, 1825, 1827, -1,1830, 1826, 1832, -1,1826, 1827, + 1833, -1,1827, 1824, 1834, -1,1820, 1831, 1815, -1,1830, 1819, 1826, -1,1832, 1262, + 1831, -1,1815, 1831, 1262, -1,1830, 1832, 1831, -1,1835, 1262, 1833, -1,1832, 1833, + 1262, -1,1836, 1262, 1835, -1,1827, 1835, 1833, -1,1826, 1833, 1832, -1,1836, 1835, + 1827, -1,1837, 1834, 1828, -1,1834, 1824, 1828, -1,1836, 1834, 1837, -1,1838, 1837, + 1828, -1,1271, 1838, 1829, -1,1828, 1829, 1838, -1,1273, 1838, 1271, -1,1061, 1271, + 1829, -1,1838, 1839, 1837, -1,1180, 1829, 1828, -1,1839, 1838, 1840, -1,1839, 1262, + 1836, -1,1262, 1839, 1840, -1,1838, 1273, 1840, -1,1840, 1273, 1320, -1,1840, 1320, + 1262, -1,1836, 1837, 1839, -1,1836, 1827, 1834, -1,1812, 1816, 1820, -1,1843, 1842, + 1841, -1,1845, 1843, 1844, -1,1844, 1843, 1841, -1,1847, 1845, 1846, -1,1846, 1845, + 1844, -1,1847, 1849, 1848, -1,1841, 1850, 1844, -1,1850, 1851, 1844, -1,1852, 1849, + 1846, -1,1847, 1846, 1849, -1,1849, 1852, 1853, -1,1854, 1849, 1853, -1,1851, 1852, + 1846, -1,1851, 1846, 1844, -1,1855, 1847, 1848, -1,1848, 1856, 1855, -1,1857, 1855, + 1856, -1,1857, 1856, 1858, -1,1859, 1856, 1848, -1,1862, 1861, 1860, -1,1863, 1857, + 1858, -1,1863, 1864, 1860, -1,1860, 1864, 1862, -1,1854, 1859, 1848, -1,1865, 1858, + 1856, -1,1859, 1865, 1856, -1,1867, 1866, 1864, -1,1862, 1864, 1866, -1,1867, 1858, + 1865, -1,1864, 1858, 1867, -1,1864, 1863, 1858, -1,1849, 1854, 1848, -1,1862, 1868, + 1861, -1,1869, 1861, 1868, -1,1866, 1868, 1862, -1,1872, 1871, 1870, -1,1868, 1873, + 1869, -1,1871, 1869, 1873, -1,1875, 1872, 1874, -1,1866, 1876, 1868, -1,1873, 1868, + 1876, -1,1877, 1873, 1876, -1,1878, 1874, 1870, -1,1872, 1870, 1874, -1,1870, 1877, + 1878, -1,1879, 1874, 1878, -1,1873, 1877, 1870, -1,1870, 1871, 1873, -1,1879, 1875, + 1874, -1,1882, 1881, 1880, -1,1875, 1880, 1881, -1,1883, 1881, 1882, -1,1884, 1882, + 1880, -1,1886, 1885, 1883, -1,1842, 1888, 1887, -1,1889, 1888, 1885, -1,1881, 1883, + 1885, -1,1884, 1883, 1882, -1,1879, 1884, 1880, -1,1886, 1889, 1885, -1,1886, 1883, + 1884, -1,1886, 1890, 1889, -1,1850, 1841, 1887, -1,1842, 1887, 1841, -1,1887, 1890, + 1850, -1,1888, 1889, 1890, -1,1890, 1887, 1888, -1,1875, 1879, 1880, -1,1893, 1892, + 1891, -1,1891, 1894, 1893, -1,1895, 1893, 1894, -1,1897, 1896, 1893, -1,1899, 1893, + 1898, -1,1893, 1899, 1897, -1,1898, 1893, 1900, -1,1896, 1892, 1893, -1,1895, 1901, + 1893, -1,1903, 1902, 1893, -1,1904, 1893, 1902, -1,1904, 1905, 1893, -1,1893, 1906, + 1900, -1,1906, 1893, 1907, -1,1908, 1907, 1893, -1,1905, 1908, 1893, -1,1903, 1893, + 1901, -1,1911, 1910, 1909, -1,1912, 1910, 1911, -1,1913, 1911, 1909, -1,1915, 1912, + 1914, -1,1916, 1912, 1911, -1,1915, 1914, 1917, -1,1919, 1918, 1913, -1,1918, 1911, + 1913, -1,1920, 1914, 1916, -1,1912, 1916, 1914, -1,1916, 1921, 1920, -1,1922, 1914, + 1920, -1,1918, 1921, 1916, -1,1918, 1916, 1911, -1,1923, 1915, 1917, -1,1917, 1924, + 1923, -1,1925, 1923, 1924, -1,1925, 1924, 1926, -1,1927, 1924, 1917, -1,1930, 1929, + 1928, -1,1931, 1925, 1926, -1,1931, 1932, 1928, -1,1928, 1932, 1930, -1,1922, 1927, + 1917, -1,1933, 1926, 1924, -1,1927, 1933, 1924, -1,1935, 1934, 1932, -1,1930, 1932, + 1934, -1,1935, 1926, 1933, -1,1932, 1926, 1935, -1,1932, 1931, 1926, -1,1914, 1922, + 1917, -1,1930, 1936, 1929, -1,1937, 1929, 1936, -1,1934, 1936, 1930, -1,1939, 1938, + 1937, -1,1937, 1936, 1939, -1,1938, 1941, 1940, -1,1943, 1940, 1942, -1,1934, 1944, + 1936, -1,1939, 1936, 1944, -1,1945, 1939, 1944, -1,1946, 1942, 1941, -1,1940, 1941, + 1942, -1,1941, 1945, 1946, -1,1947, 1942, 1946, -1,1939, 1945, 1941, -1,1941, 1938, + 1939, -1,1947, 1943, 1942, -1,1950, 1949, 1948, -1,1943, 1948, 1949, -1,1951, 1949, + 1950, -1,1952, 1950, 1948, -1,1954, 1953, 1951, -1,1909, 1956, 1955, -1,1957, 1956, + 1953, -1,1949, 1951, 1953, -1,1952, 1951, 1950, -1,1947, 1952, 1948, -1,1954, 1957, + 1953, -1,1954, 1951, 1952, -1,1954, 1958, 1957, -1,1919, 1913, 1955, -1,1909, 1955, + 1913, -1,1955, 1958, 1919, -1,1956, 1957, 1958, -1,1958, 1955, 1956, -1,1943, 1947, + 1948, -1,1961, 1960, 1959, -1,1962, 1961, 1959, -1,1963, 1961, 1962, -1,1964, 1960, + 1961, -1,1965, 1964, 1961, -1,1965, 1961, 1966, -1,1963, 1967, 1961, -1,1961, 1969, + 1968, -1,1968, 1970, 1961, -1,1971, 1961, 1970, -1,1961, 1972, 1966, -1,1972, 1961, + 1973, -1,1961, 1974, 1973, -1,1974, 1961, 1975, -1,1961, 1971, 1975, -1,1969, 1961, + 1967, -1,1978, 1977, 1976, -1,1979, 1976, 1977, -1,1978, 1981, 1980, -1,1977, 1978, + 1980, -1,1984, 1983, 1982, -1,1985, 1982, 1983, -1,1987, 1986, 1985, -1,1983, 1987, + 1985, -1,1990, 1989, 1988, -1,1991, 1989, 1990, -1,1990, 1992, 1991, -1,1993, 1991, + 1992, -1,1996, 1995, 1994, -1,1997, 1996, 1994, -1,1999, 1998, 1997, -1,1996, 1997, + 1998, -1,2002, 2001, 2000, -1,2003, 2001, 2002, -1,2005, 2004, 2003, -1,2002, 2005, + 2003, -1,2008, 2007, 2006, -1,2009, 2007, 2008, -1,2009, 2010, 2007, -1,2011, 2007, + 2010, -1,2014, 2013, 2012, -1,2015, 2013, 2014, -1,2015, 2016, 2013, -1,2017, 2013, + 2016, -1,2020, 2019, 2018, -1,2021, 2018, 2019, -1,2020, 2023, 2022, -1,2019, 2020, + 2022, -1,2026, 2025, 2024, -1,2027, 2026, 2024, -1,2024, 2028, 2027, -1,2029, 2027, + 2028, -1,2032, 2031, 2030, -1,2030, 2031, 2033, -1,2033, 2035, 2034, -1,2033, 2034, + 2030, -1,2038, 2037, 2036, -1,2039, 2037, 2038, -1,2038, 2041, 2040, -1,2039, 2038, + 2040, -1,2044, 2043, 2042, -1,2047, 2046, 2045, -1,2047, 2048, 2046, -1,2047, 2050, + 2049, -1,2044, 2045, 2046, -1,2046, 2048, 2051, -1,2054, 2053, 2052, -1,2056, 2054, + 2055, -1,2044, 2058, 2057, -1,2060, 2052, 2059, -1,2052, 2053, 2051, -1,2052, 2055, + 2054, -1,2060, 2055, 2052, -1,2046, 2051, 2053, -1,2058, 2044, 2042, -1,2045, 2044, + 2061, -1,2050, 2062, 2049, -1,2045, 2064, 2063, -1,2060, 2066, 2065, -1,2063, 2050, + 2047, -1,2066, 2049, 2062, -1,2060, 2059, 2066, -1,2062, 2068, 2067, -1,2050, 2063, + 2064, -1,2067, 2065, 2062, -1,2057, 2069, 2044, -1,2068, 2070, 2067, -1,2062, 2065, + 2066, -1,2060, 2065, 2055, -1,2047, 2045, 2063, -1,2061, 2044, 2069, -1,2073, 2072, + 2071, -1,2074, 2072, 2073, -1,2076, 2075, 2074, -1,2072, 2074, 2075, -1,2079, 2078, + 2077, -1,2077, 2078, 2080, -1,2080, 2081, 2077, -1,2081, 2080, 2082, -1,2085, 2084, + 2083, -1,2084, 2085, 2086, -1,2086, 2088, 2087, -1,2086, 2087, 2084, -1,2091, 2090, + 2089, -1,2092, 2090, 2091, -1,2094, 2093, 2092, -1,2091, 2094, 2092, -1,2097, 2096, + 2095, -1,2095, 2096, 2098, -1,2098, 2100, 2099, -1,2098, 2099, 2095, -1,2103, 2102, + 2101, -1,2104, 2101, 2102, -1,2106, 2105, 2104, -1,2102, 2106, 2104, -1,2109, 2108, + 2107, -1,2112, 2111, 2110, -1,2112, 2110, 2113, -1,2113, 2114, 2112, -1,2109, 2107, + 2115, -1,2116, 2115, 2107, -1,2117, 2116, 2114, -1,2119, 2118, 2114, -1,2116, 2117, + 2120, -1,2120, 2115, 2116, -1,2113, 2117, 2114, -1,2119, 2114, 2116, -1,2115, 2121, + 2109, -1,2118, 2112, 2114, -1,2124, 2123, 2122, -1,2125, 2122, 2123, -1,2127, 2126, + 2125, -1,2123, 2127, 2125, -1,2130, 2129, 2128, -1,2128, 2129, 2131, -1,2131, 2132, + 2128, -1,2132, 2131, 2133, -1,2136, 2135, 2134, -1,2135, 2136, 2137, -1,2137, 2139, + 2138, -1,2137, 2138, 2135, -1,2142, 2141, 2140, -1,2143, 2140, 2141, -1,2145, 2144, + 2143, -1,2141, 2145, 2143, -1,2148, 2147, 2146, -1,2149, 2146, 2147, -1,2148, 2151, + 2150, -1,2150, 2147, 2148, -1,2149, 2153, 2152, -1,2147, 2150, 2154, -1,2153, 2149, + 2154, -1,2149, 2147, 2154, -1,2157, 2156, 2155, -1,2159, 2155, 2158, -1,2157, 2155, + 2160, -1,2160, 2159, 2161, -1,2159, 2160, 2155, -1,2155, 2156, 2162, -1,2164, 2163, + 2162, -1,2162, 2165, 2155, -1,2165, 2166, 2158, -1,2166, 2165, 2162, -1,2165, 2158, + 2155, -1,2162, 2156, 2164, -1,2169, 2168, 2167, -1,2171, 2170, 2167, -1,2167, 2168, + 2171, -1,2172, 2171, 2168, -1,2173, 2171, 2172, -1,2172, 2168, 2174, -1,2177, 2176, + 2175, -1,2179, 2178, 2175, -1,2175, 2176, 2180, -1,2179, 2180, 2181, -1,2180, 2179, + 2175, -1,2183, 2181, 2182, -1,2181, 2183, 2179, -1,2179, 2183, 2178, -1,2186, 2185, + 2184, -1,2180, 2186, 2181, -1,2182, 2181, 2184, -1,2184, 2187, 2182, -1,2188, 2187, + 2184, -1,2181, 2186, 2184, -1,2184, 2185, 2188, -1,2188, 2190, 2189, -1,2190, 2188, + 2185, -1,2189, 2192, 2191, -1,2192, 2189, 2190, -1,2188, 2189, 2193, -1,2193, 2189, + 2194, -1,2191, 2195, 2194, -1,2189, 2191, 2194, -1,2188, 2193, 2187, -1,2192, 2197, + 2196, -1,2196, 2197, 2198, -1,2192, 2196, 2191, -1,2191, 2196, 2195, -1,2200, 2198, + 2199, -1,2195, 2196, 2200, -1,2196, 2198, 2200, -1,2197, 2201, 2198, -1,2204, 2203, + 2202, -1,2201, 2204, 2205, -1,2199, 2205, 2206, -1,2199, 2198, 2205, -1,2202, 2206, + 2205, -1,2205, 2204, 2202, -1,2205, 2198, 2201, -1,2203, 2207, 2206, -1,2207, 2203, + 2208, -1,2208, 2210, 2209, -1,2208, 2209, 2207, -1,2210, 2212, 2211, -1,2211, 2212, + 2213, -1,2210, 2211, 2214, -1,2213, 2216, 2215, -1,2215, 2216, 2217, -1,2216, 2213, + 2212, -1,2211, 2213, 2218, -1,2214, 2219, 2209, -1,2214, 2211, 2219, -1,2213, 2220, + 2218, -1,2219, 2211, 2218, -1,2220, 2215, 2221, -1,2215, 2220, 2213, -1,2217, 2222, + 2215, -1,2222, 2224, 2223, -1,2224, 2222, 2225, -1,2222, 2223, 2221, -1,2225, 2222, + 2217, -1,2223, 2227, 2226, -1,2227, 2223, 2224, -1,2226, 2227, 2228, -1,2223, 2229, + 2221, -1,2229, 2223, 2226, -1,2229, 2226, 2230, -1,2230, 2232, 2231, -1,2232, 2230, + 2226, -1,2226, 2228, 2232, -1,2222, 2221, 2215, -1,2228, 2233, 2232, -1,2232, 2233, + 2234, -1,2231, 2234, 2235, -1,2234, 2231, 2232, -1,2235, 2234, 2236, -1,2233, 2237, + 2234, -1,2237, 2239, 2238, -1,2238, 2239, 2236, -1,2237, 2238, 2234, -1,2241, 2236, + 2240, -1,2241, 2235, 2236, -1,2236, 2234, 2238, -1,2244, 2243, 2242, -1,2246, 2245, + 2242, -1,2242, 2243, 2246, -1,2247, 2246, 2243, -1,2248, 2246, 2247, -1,2247, 2243, + 2249, -1,2252, 2251, 2250, -1,2250, 2251, 2253, -1,2252, 2250, 2254, -1,2254, 2256, + 2255, -1,2257, 2256, 2254, -1,2254, 2250, 2253, -1,2260, 2259, 2258, -1,2260, 2258, + 2253, -1,2257, 2253, 2261, -1,2257, 2254, 2253, -1,2261, 2253, 2258, -1,2253, 2251, + 2260, -1,2259, 2263, 2262, -1,2265, 2264, 2263, -1,2263, 2264, 2262, -1,2266, 2264, + 2265, -1,2259, 2262, 2258, -1,2261, 2258, 2267, -1,2262, 2268, 2267, -1,2267, 2258, + 2262, -1,2269, 2268, 2264, -1,2264, 2268, 2262, -1,2266, 2265, 2270, -1,2266, 2271, + 2269, -1,2271, 2266, 2272, -1,2271, 2274, 2273, -1,2274, 2271, 2272, -1,2266, 2270, + 2272, -1,2273, 2274, 2275, -1,2271, 2276, 2269, -1,2276, 2271, 2273, -1,2276, 2273, + 2277, -1,2277, 2279, 2278, -1,2279, 2277, 2273, -1,2273, 2275, 2279, -1,2266, 2269, + 2264, -1,2275, 2280, 2278, -1,2278, 2280, 2281, -1,2281, 2283, 2282, -1,2283, 2281, + 2280, -1,2285, 2283, 2284, -1,2287, 2284, 2286, -1,2285, 2284, 2287, -1,2289, 2286, + 2288, -1,2287, 2286, 2289, -1,2291, 2290, 2288, -1,2287, 2282, 2285, -1,2287, 2292, + 2282, -1,2290, 2293, 2292, -1,2290, 2289, 2288, -1,2291, 2293, 2290, -1,2290, 2292, + 2289, -1,2287, 2289, 2292, -1,2291, 2288, 2294, -1,2294, 2295, 2291, -1,2295, 2294, + 2296, -1,2297, 2295, 2296, -1,2291, 2295, 2298, -1,2300, 2299, 2157, -1,2297, 2296, + 2299, -1,2160, 2300, 2157, -1,2291, 2298, 2301, -1,2295, 2297, 2302, -1,2295, 2302, + 2298, -1,2302, 2300, 2161, -1,2300, 2302, 2297, -1,2161, 2300, 2160, -1,2297, 2299, + 2300, -1,2291, 2301, 2293, -1,2305, 2304, 2303, -1,2307, 2303, 2306, -1,2310, 2309, + 2308, -1,2311, 2306, 2303, -1,2311, 2312, 2306, -1,2314, 2308, 2313, -1,2308, 2314, + 2310, -1,2316, 2315, 2314, -1,2303, 2304, 2311, -1,2316, 2314, 2313, -1,2319, 2318, + 2317, -1,2318, 2319, 2320, -1,2319, 2317, 2321, -1,2324, 2323, 2322, -1,2321, 2323, + 2319, -1,2325, 2323, 2321, -1,2320, 2309, 2326, -1,2314, 2327, 2310, -1,2325, 2322, + 2323, -1,2320, 2319, 2309, -1,2309, 2310, 2326, -1,2324, 2322, 2328, -1,2331, 2330, + 2329, -1,2331, 2312, 2332, -1,2335, 2334, 2333, -1,2314, 2336, 2334, -1,2315, 2336, + 2314, -1,2329, 2330, 2337, -1,2330, 2331, 2332, -1,2337, 2330, 2338, -1,2340, 2339, + 2338, -1,2338, 2339, 2337, -1,2340, 2338, 2333, -1,2338, 2335, 2333, -1,2342, 2314, + 2341, -1,2342, 2327, 2314, -1,2345, 2344, 2343, -1,2324, 2328, 2343, -1,2344, 2324, + 2343, -1,2314, 2347, 2346, -1,2314, 2346, 2341, -1,2343, 2349, 2348, -1,2343, 2328, + 2349, -1,2314, 2334, 2347, -1,2334, 2335, 2347, -1,2312, 2311, 2332, -1,2352, 2351, + 2350, -1,2350, 2351, 2353, -1,2353, 2355, 2354, -1,2355, 2353, 2351, -1,2358, 2357, + 2356, -1,2359, 2357, 2358, -1,2361, 2360, 2359, -1,2357, 2359, 2360, -1,2364, 2363, + 2362, -1,2365, 2364, 2362, -1,2367, 2366, 2365, -1,2364, 2365, 2366, -1,2370, 2369, + 2368, -1,2371, 2369, 2370, -1,2371, 2372, 2369, -1,2373, 2369, 2372, -1,2376, 2375, + 2374, -1,2377, 2374, 2375, -1,2379, 2378, 2375, -1,2378, 2379, 2380, -1,2376, 2379, + 2375, -1,2383, 2382, 2381, -1,2384, 2381, 2382, -1,2386, 2385, 2384, -1,2382, 2386, + 2384, -1,2389, 2388, 2387, -1,2390, 2388, 2389, -1,2389, 2391, 2390, -1,2392, 2390, + 2391, -1,2395, 2394, 2393, -1,2396, 2394, 2395, -1,2398, 2397, 2395, -1,2393, 2398, + 2395, -1,2401, 2400, 2399, -1,2404, 2403, 2402, -1,2401, 2399, 2402, -1,2406, 2405, + 2402, -1,2407, 2406, 2402, -1,2402, 2405, 2401, -1,2403, 2407, 2402, -1,2406, 2407, + 2408, -1,2406, 2408, 2409, -1,2411, 2410, 2403, -1,2412, 2408, 2407, -1,2403, 2410, + 2407, -1,2414, 2410, 2413, -1,2417, 2416, 2415, -1,2415, 2414, 2418, -1,2414, 2415, + 2416, -1,2420, 2409, 2419, -1,2409, 2421, 2419, -1,2421, 2409, 2412, -1,2408, 2412, + 2409, -1,2410, 2411, 2413, -1,2411, 2403, 2404, -1,2413, 2418, 2414, -1,2424, 2423, + 2422, -1,2425, 2422, 2423, -1,2426, 2425, 2423, -1,2427, 2425, 2426, -1,2429, 2424, + 2428, -1,2429, 2430, 2423, -1,2423, 2424, 2429, -1,2426, 2430, 2431, -1,2423, 2430, + 2426, -1,2432, 2427, 2426, -1,2435, 2434, 2433, -1,2434, 2435, 2436, -1,2432, 2435, + 2433, -1,2426, 2431, 2432, -1,2437, 2432, 2431, -1,2437, 2439, 2438, -1,2435, 2440, + 2439, -1,2432, 2437, 2438, -1,2438, 2435, 2432, -1,2427, 2432, 2433, -1,2443, 2442, + 2441, -1,2442, 2443, 2444, -1,2444, 2428, 2422, -1,2444, 2422, 2442, -1,2447, 2446, + 2445, -1,2445, 2446, 2448, -1,2448, 2449, 2445, -1,2449, 2448, 2450, -1,2453, 2452, + 2451, -1,2454, 2452, 2453, -1,2456, 2455, 2454, -1,2452, 2454, 2455, -1,2456, 2458, + 2457, -1,2458, 2456, 2459, -1,2460, 2455, 2457, -1,2457, 2458, 2460, -1,2459, 2462, + 2461, -1,2458, 2463, 2460, -1,2458, 2461, 2463, -1,2461, 2458, 2459, -1,2466, 2465, + 2464, -1,2462, 2465, 2466, -1,2463, 2461, 2467, -1,2466, 2467, 2461, -1,2468, 2467, + 2466, -1,2461, 2462, 2466, -1,2464, 2465, 2469, -1,2464, 2469, 2470, -1,2470, 2469, + 2471, -1,2473, 2472, 2471, -1,2470, 2471, 2472, -1,2468, 2464, 2474, -1,2470, 2475, + 2474, -1,2475, 2470, 2472, -1,2464, 2470, 2474, -1,2464, 2468, 2466, -1,2477, 2473, + 2476, -1,2478, 2477, 2476, -1,2475, 2472, 2479, -1,2480, 2479, 2477, -1,2477, 2479, + 2472, -1,2472, 2473, 2477, -1,2478, 2476, 2481, -1,2478, 2482, 2480, -1,2482, 2478, + 2483, -1,2483, 2484, 2482, -1,2478, 2481, 2483, -1,2482, 2484, 2485, -1,2480, 2482, + 2486, -1,2485, 2487, 2486, -1,2482, 2485, 2486, -1,2478, 2480, 2477, -1,2490, 2489, + 2488, -1,2489, 2491, 2488, -1,2491, 2489, 2492, -1,2491, 2492, 2493, -1,2495, 2487, + 2494, -1,2495, 2494, 2493, -1,2494, 2487, 2484, -1,2495, 2493, 2492, -1,2498, 2497, + 2496, -1,2496, 2497, 2499, -1,2499, 2501, 2500, -1,2501, 2499, 2497, -1,2504, 2503, + 2502, -1,2505, 2502, 2503, -1,2504, 2507, 2506, -1,2503, 2504, 2506, -1,2509, 2508, + 2506, -1,2510, 2508, 2509, -1,2511, 2510, 2507, -1,2509, 2507, 2510, -1,2512, 2510, + 2511, -1,2510, 2513, 2508, -1,2514, 2515, 2514, -1,2512, 2516, 2516, -1,2510, 2517, + 2513, -1,2519, 2512, 2518, -1,2512, 2511, 2518, -1,2517, 2510, 2512, -1,2521, 2520, + 2436, -1,2521, 2435, 2522, -1,2524, 2521, 2523, -1,2435, 2521, 2436, -1,2525, 2435, + 2439, -1,2435, 2525, 2526, -1,2522, 2435, 2526, -1,2522, 2523, 2521, -1,2512, 2528, + 2527, -1,2528, 2512, 2529, -1,2530, 2512, 2527, -1,2526, 2530, 2522, -1,2530, 2527, + 2522, -1,2532, 2515, 2531, -1,2533, 2533, 2533, -1,2530, 2532, 2531, -1,2530, 2531, + 2512, -1,2523, 2522, 2527, -1,2536, 2535, 2534, -1,2537, 2535, 2536, -1,2537, 2539, + 2538, -1,2538, 2540, 2537, -1,2541, 2537, 2540, -1,2537, 2536, 2539, -1,2537, 2542, + 2535, -1,2537, 2544, 2543, -1,2541, 2544, 2537, -1,2541, 2545, 2544, -1,500, 500, + 500, -1,2541, 2546, 2545, -1,2542, 2537, 2543, -1,2549, 2548, 2547, -1,2550, 2547, + 2548, -1,2551, 2548, 2549, -1,2549, 2553, 2552, -1,2552, 2551, 2549, -1,2555, 2555, + 2554, -1,2547, 2550, 2554, -1,2557, 2556, 2552, -1,2551, 2559, 2558, -1,2559, 2551, + 2556, -1,2561, 2558, 2560, -1,2558, 2559, 2560, -1,2557, 2562, 2556, -1,2540, 2563, + 2541, -1,2551, 2552, 2556, -1,2559, 2556, 2562, -1,2553, 2549, 2564, -1,2565, 2564, + 2549, -1,2566, 2566, 2566, -1,2565, 2549, 2567, -1,2567, 2568, 2565, -1,2547, 2567, + 2549, -1,2569, 2569, 2569, -1,2546, 2571, 2570, -1,2571, 2541, 2563, -1,2546, 2541, + 2571, -1,2573, 2567, 2572, -1,2567, 2573, 2574, -1,2572, 2546, 2570, -1,2546, 2572, + 2567, -1,2574, 2568, 2567, -1,2577, 2576, 2575, -1,2578, 2577, 2575, -1,2581, 2580, + 2579, -1,2582, 2579, 2577, -1,2577, 2579, 2580, -1,2580, 2576, 2577, -1,2578, 2575, + 2583, -1,2578, 2583, 2584, -1,2584, 2583, 2585, -1,2587, 2586, 2585, -1,2584, 2585, + 2586, -1,2582, 2584, 2588, -1,2584, 2582, 2578, -1,2588, 2584, 2586, -1,2586, 2589, + 2588, -1,2578, 2582, 2577, -1,2587, 2590, 2586, -1,2586, 2590, 2591, -1,2589, 2591, + 2592, -1,2591, 2589, 2586, -1,2593, 2592, 2591, -1,2591, 2590, 2594, -1,2595, 2593, + 2594, -1,2594, 2593, 2591, -1,2595, 2594, 2596, -1,2598, 2595, 2597, -1,2595, 2598, + 2593, -1,2599, 2597, 2595, -1,2595, 2596, 2599, -1,2593, 2598, 2592, -1,2602, 2601, + 2600, -1,2603, 2600, 2601, -1,2597, 2596, 2603, -1,2601, 2597, 2603, -1,2606, 2605, + 2604, -1,2607, 2604, 2605, -1,2609, 2608, 2607, -1,2605, 2609, 2607, -1,2612, 2611, + 2610, -1,2611, 2612, 2613, -1,2613, 2615, 2614, -1,2616, 2614, 2615, -1,2613, 2614, + 2611, -1,2619, 2618, 2617, -1,2615, 2618, 2619, -1,2616, 2621, 2620, -1,2619, 2620, + 2621, -1,2622, 2620, 2619, -1,2621, 2615, 2619, -1,2617, 2618, 2623, -1,2617, 2623, + 2624, -1,2624, 2623, 2625, -1,2627, 2626, 2625, -1,2624, 2625, 2626, -1,2622, 2617, + 2628, -1,2624, 2629, 2628, -1,2629, 2624, 2626, -1,2617, 2624, 2628, -1,2617, 2622, + 2619, -1,2626, 2627, 2630, -1,2632, 2630, 2631, -1,2629, 2626, 2632, -1,2632, 2633, + 2629, -1,2634, 2633, 2632, -1,2626, 2630, 2632, -1,2632, 2631, 2634, -1,2634, 2631, + 2635, -1,2635, 2631, 2636, -1,2635, 2636, 2637, -1,2639, 2635, 2638, -1,2635, 2639, + 2634, -1,2640, 2638, 2635, -1,2635, 2637, 2640, -1,2634, 2639, 2633, -1,2643, 2642, + 2641, -1,2645, 2641, 2644, -1,2643, 2641, 2646, -1,2641, 2647, 2646, -1,2647, 2641, + 2645, -1,2641, 2642, 2648, -1,2649, 2648, 2576, -1,2649, 2576, 2580, -1,2649, 2581, + 2645, -1,2649, 2644, 2648, -1,2581, 2649, 2580, -1,2649, 2645, 2644, -1,2648, 2644, + 2641, -1,2652, 2651, 2650, -1,2650, 2651, 2653, -1,2653, 2655, 2654, -1,2653, 2654, + 2650, -1,2658, 2657, 2656, -1,2656, 2657, 2659, -1,2659, 2661, 2660, -1,2659, 2660, + 2656, -1,2664, 2663, 2662, -1,2665, 2663, 2664, -1,2667, 2666, 2665, -1,2664, 2667, + 2665, -1,2669, 2654, 2668, -1,2672, 2671, 2670, -1,2669, 2670, 2671, -1,2670, 2669, + 2668, -1,2675, 2674, 2673, -1,2676, 2673, 2672, -1,2674, 2672, 2673, -1,2675, 2677, + 2674, -1,2671, 2672, 2674, -1,2678, 2672, 2670, -1,2655, 2670, 2668, -1,2672, 2678, + 2676, -1,2655, 2678, 2670, -1,2680, 2675, 2679, -1,2677, 2675, 2681, -1,2679, 2673, + 2682, -1,2680, 2681, 2675, -1,2673, 2676, 2682, -1,2679, 2675, 2673, -1,2681, 2683, + 2677, -1,2686, 2685, 2684, -1,2684, 2681, 2687, -1,2685, 2683, 2684, -1,2688, 2685, + 2686, -1,2690, 2667, 2689, -1,2692, 2688, 2691, -1,2692, 2693, 2689, -1,2689, 2693, + 2690, -1,2684, 2687, 2694, -1,2695, 2686, 2694, -1,2680, 2687, 2681, -1,2694, 2686, + 2684, -1,2696, 2693, 2691, -1,2692, 2691, 2693, -1,2691, 2695, 2696, -1,2693, 2696, + 2666, -1,2666, 2690, 2693, -1,2686, 2695, 2691, -1,2691, 2688, 2686, -1,2683, 2681, + 2684, -1,2699, 2698, 2697, -1,2699, 2697, 2700, -1,2700, 2702, 2701, -1,2702, 2700, + 2697, -1,2705, 2704, 2703, -1,2703, 2704, 2706, -1,2706, 2708, 2707, -1,2706, 2707, + 2703, -1,2711, 2710, 2709, -1,2712, 2711, 2709, -1,2714, 2713, 2712, -1,2711, 2712, + 2713, -1,2716, 2715, 2701, -1,2718, 2717, 2716, -1,2715, 2716, 2717, -1,2719, 2716, + 2701, -1,2722, 2721, 2720, -1,2723, 2720, 2718, -1,2721, 2718, 2720, -1,2722, 2724, + 2721, -1,2717, 2718, 2721, -1,2725, 2718, 2716, -1,2725, 2719, 2702, -1,2718, 2725, + 2726, -1,2725, 2716, 2719, -1,2728, 2722, 2727, -1,2724, 2722, 2729, -1,2727, 2720, + 2723, -1,2728, 2729, 2722, -1,2718, 2726, 2723, -1,2727, 2722, 2720, -1,2729, 2730, + 2724, -1,2733, 2732, 2731, -1,2731, 2729, 2734, -1,2732, 2730, 2731, -1,2735, 2732, + 2733, -1,2737, 2714, 2736, -1,2739, 2735, 2738, -1,2739, 2740, 2736, -1,2736, 2740, + 2737, -1,2731, 2734, 2741, -1,2742, 2733, 2741, -1,2728, 2734, 2729, -1,2741, 2733, + 2731, -1,2743, 2740, 2738, -1,2739, 2738, 2740, -1,2738, 2742, 2743, -1,2740, 2743, + 2713, -1,2713, 2737, 2740, -1,2733, 2742, 2738, -1,2738, 2735, 2733, -1,2730, 2729, + 2731, -1,2746, 2745, 2744, -1,2748, 2745, 2747, -1,2747, 2749, 2748, -1,2752, 2751, + 2750, -1,2749, 2752, 2753, -1,2755, 2746, 2754, -1,2758, 2757, 2756, -1,2759, 2757, + 2748, -1,2744, 2754, 2746, -1,2760, 2749, 2753, -1,2744, 2745, 2748, -1,2762, 2753, + 2761, -1,2760, 2748, 2749, -1,2753, 2752, 2750, -1,2765, 2764, 2763, -1,2751, 2765, + 2763, -1,2765, 2767, 2766, -1,2765, 2769, 2768, -1,2768, 2764, 2765, -1,2765, 2770, + 2769, -1,2763, 2771, 2751, -1,2772, 2751, 2771, -1,2761, 2774, 2773, -1,2776, 2767, + 2775, -1,2766, 2770, 2765, -1,2766, 2767, 2777, -1,2773, 2774, 2778, -1,2772, 2750, + 2751, -1,2758, 2756, 2779, -1,2781, 2778, 2780, -1,2759, 2756, 2757, -1,2784, 2783, + 2782, -1,2785, 2759, 2748, -1,2786, 2753, 2762, -1,2787, 2748, 2760, -1,2786, 2760, + 2753, -1,2748, 2787, 2785, -1,2761, 2773, 2762, -1,2756, 2759, 2788, -1,2785, 2789, + 2759, -1,2789, 2790, 2759, -1,2790, 2788, 2759, -1,2788, 2792, 2791, -1,2792, 2788, + 2790, -1,2791, 2793, 2788, -1,2756, 2782, 2779, -1,2794, 2778, 2781, -1,2796, 2777, + 2795, -1,2780, 2795, 2797, -1,2777, 2797, 2795, -1,2767, 2776, 2777, -1,2798, 2781, + 2780, -1,2794, 2773, 2778, -1,2799, 2788, 2793, -1,2799, 2777, 2800, -1,2801, 2797, + 2777, -1,2801, 2777, 2799, -1,2776, 2802, 2800, -1,2777, 2776, 2800, -1,2799, 2800, + 2788, -1,2798, 2780, 2797, -1,2796, 2766, 2777, -1,2779, 2782, 2783, -1,2805, 2804, + 2803, -1,2806, 2803, 2804, -1,2808, 2807, 2806, -1,2804, 2808, 2806, -1,2811, 2810, + 2809, -1,2813, 2812, 2811, -1,2810, 2811, 2812, -1,2816, 2815, 2814, -1,2813, 2816, + 2814, -1,2817, 2815, 2816, -1,2812, 2813, 2814, -1,2820, 2819, 2818, -1,2821, 2819, + 2820, -1,2821, 2822, 2819, -1,2823, 2819, 2822, -1,2826, 2825, 2824, -1,2827, 2825, + 2826, -1,2829, 2828, 2827, -1,2825, 2827, 2828, -1,2832, 2831, 2830, -1,2833, 2832, + 2830, -1,2836, 2835, 2834, -1,2834, 2833, 2836, -1,2832, 2833, 2834, -1,2839, 2838, + 2837, -1,2837, 2838, 2840, -1,2840, 2842, 2841, -1,2842, 2840, 2838, -1,2845, 2844, + 2843, -1,2846, 2844, 2845, -1,2848, 2847, 2846, -1,2844, 2846, 2847, -1,2851, 2850, + 2849, -1,2852, 2851, 2849, -1,2854, 2853, 2852, -1,2851, 2852, 2853, -1,2857, 2856, + 2855, -1,2859, 2857, 2858, -1,2857, 2859, 2856, -1,2862, 2861, 2860, -1,2858, 2861, + 2862, -1,2862, 2860, 2863, -1,2858, 2862, 2859, -1,2858, 2864, 2861, -1,2867, 2866, + 2865, -1,2870, 2869, 2868, -1,2871, 2867, 2870, -1,2864, 2858, 2872, -1,2871, 2870, + 2868, -1,2867, 2861, 2864, -1,2860, 2874, 2873, -1,2863, 2875, 2862, -1,2860, 2873, + 2863, -1,2866, 2864, 2876, -1,2867, 2864, 2866, -1,2874, 2860, 2861, -1,2872, 2876, + 2864, -1,2865, 2870, 2867, -1,2879, 2878, 2877, -1,2878, 2879, 2880, -1,2880, 2882, + 2881, -1,2880, 2881, 2878, -1,2885, 2884, 2883, -1,2886, 2883, 2884, -1,2888, 2887, + 2886, -1,2884, 2888, 2886, -1,2891, 2890, 2889, -1,2891, 2892, 2890, -1,2893, 2890, + 2892, -1,2894, 2893, 2892, -1,2897, 2896, 2895, -1,2894, 2897, 2895, -1,2898, 2896, + 2897, -1,2893, 2894, 2895, -1,2901, 2900, 2899, -1,2899, 2902, 2901, -1,2901, 2903, + 2900, -1,2906, 2905, 2904, -1,2904, 2903, 2906, -1,2900, 2903, 2904, -1,2909, 2908, + 2907, -1,2910, 2907, 2908, -1,2912, 2910, 2911, -1,2908, 2911, 2910, -1,2915, 2914, + 2913, -1,2914, 2915, 2916, -1,2916, 2917, 2914, -1,2919, 2918, 2917, -1,2919, 2920, + 2918, -1,2921, 2918, 2920, -1,2916, 2919, 2917, -1,2924, 2923, 2922, -1,2925, 2924, + 2922, -1,2927, 2926, 2925, -1,2924, 2925, 2926, -1,2930, 2929, 2928, -1,2929, 2930, + 2931, -1,2931, 2933, 2932, -1,2931, 2932, 2929, -1,2936, 2935, 2934, -1,2934, 2935, + 2937, -1,2937, 2939, 2938, -1,2937, 2938, 2934, -1,2942, 2941, 2940, -1,2944, 2943, + 2940, -1,2942, 2940, 2943, -1,2942, 2945, 2941, -1,2948, 2947, 2946, -1,2945, 2949, + 2946, -1,2948, 2946, 2949, -1,2942, 2949, 2945, -1,2952, 2951, 2950, -1,2950, 2951, + 2953, -1,2953, 2955, 2954, -1,2955, 2953, 2951, -1,2958, 2957, 2956, -1,2959, 2956, + 2957, -1,2958, 2961, 2960, -1,2957, 2958, 2960, -1,2964, 2963, 2962, -1,2966, 2965, + 2964, -1,2962, 2966, 2964, -1,2969, 2968, 2967, -1,2965, 2966, 2970, -1,2970, 2972, + 2971, -1,2973, 2972, 2970, -1,2970, 2966, 2973, -1,2976, 2975, 2974, -1,2977, 2976, + 2974, -1,2973, 2978, 2972, -1,2972, 2980, 2979, -1,2968, 2969, 2981, -1,2980, 2978, + 2981, -1,2982, 2981, 2969, -1,2978, 2968, 2981, -1,2969, 2983, 2982, -1,2980, 2972, + 2978, -1,2979, 2975, 2976, -1,2980, 2975, 2979, -1,2971, 2965, 2970, -1,2986, 2985, + 2984, -1,2988, 2987, 2969, -1,2967, 2988, 2969, -1,2987, 2990, 2989, -1,2990, 2991, + 2989, -1,2990, 2992, 2991, -1,2983, 2984, 2985, -1,2993, 2985, 2986, -1,2985, 2995, + 2994, -1,2985, 2993, 2995, -1,2994, 2995, 2996, -1,2998, 2997, 2996, -1,2989, 2969, + 2987, -1,2969, 2989, 2999, -1,2984, 2983, 2999, -1,2999, 2983, 2969, -1,3000, 2999, + 2989, -1,2991, 3000, 2989, -1,2997, 2994, 2996, -1,3003, 3002, 3001, -1,3005, 3003, + 3004, -1,3006, 3003, 3001, -1,3008, 3006, 3007, -1,3003, 3006, 3008, -1,3008, 3004, + 3003, -1,3005, 3002, 3003, -1,3011, 3010, 3009, -1,3011, 3013, 3012, -1,3013, 3011, + 3009, -1,3004, 3014, 3005, -1,3009, 3005, 3014, -1,3014, 3015, 3009, -1,3013, 3009, + 3015, -1,3009, 3010, 3005, -1,3002, 3005, 3010, -1,3015, 3016, 3012, -1,3016, 3015, + 3017, -1,3017, 3019, 3018, -1,3017, 3018, 3016, -1,3021, 3018, 3020, -1,3023, 3021, + 3022, -1,3022, 3020, 3019, -1,3019, 3024, 3022, -1,3022, 3024, 3025, -1,3022, 3021, + 3020, -1,3025, 3023, 3022, -1,3027, 3026, 3025, -1,3028, 3025, 3026, -1,3026, 3029, + 3028, -1,3028, 3023, 3025, -1,3030, 3029, 3026, -1,3031, 3026, 3027, -1,3031, 3032, + 3030, -1,3031, 3030, 3026, -1,3024, 3027, 3025, -1,3029, 3032, 3033, -1,3033, 3032, + 3034, -1,3034, 3036, 3035, -1,3034, 3035, 3033, -1,3038, 3037, 3035, -1,3039, 3037, + 3038, -1,3039, 3036, 3040, -1,3042, 3041, 3040, -1,3040, 3041, 3039, -1,3039, 3038, + 3036, -1,3043, 3037, 3039, -1,3039, 3041, 3043, -1,3044, 3043, 3041, -1,3045, 3044, + 3041, -1,3046, 3044, 3045, -1,3048, 3045, 3047, -1,3045, 3042, 3047, -1,3047, 3049, + 3048, -1,3048, 3046, 3045, -1,3041, 3042, 3045, -1,3052, 3051, 3050, -1,3053, 3050, + 3051, -1,3046, 3049, 3053, -1,3051, 3046, 3053, -1,3055, 3054, 3052, -1,3056, 3052, + 3054, -1,3057, 3056, 3054, -1,3058, 3056, 3057, -1,3059, 3055, 3050, -1,3057, 3054, + 3060, -1,3054, 3055, 3059, -1,3060, 3054, 3059, -1,3057, 3061, 3058, -1,3063, 3062, + 3061, -1,3063, 3065, 3064, -1,3065, 3063, 3061, -1,3060, 3066, 3057, -1,3066, 3061, + 3057, -1,3061, 3066, 3067, -1,3067, 3065, 3061, -1,3062, 3058, 3061, -1,3068, 3007, + 3001, -1,3069, 3007, 3068, -1,3064, 3067, 3069, -1,3068, 3064, 3069, -1,3072, 3071, + 3070, -1,3074, 3070, 3073, -1,3072, 3070, 3075, -1,3077, 3075, 3076, -1,3076, 3075, + 3070, -1,3070, 3074, 3076, -1,3070, 3071, 3073, -1,3080, 3079, 3078, -1,3082, 3081, + 3078, -1,3080, 3078, 3081, -1,3073, 3083, 3074, -1,3083, 3073, 3080, -1,3080, 3084, + 3083, -1,3084, 3080, 3081, -1,3073, 3079, 3080, -1,3079, 3073, 3071, -1,3082, 3085, + 3084, -1,3086, 3085, 3082, -1,3088, 3087, 3086, -1,3085, 3086, 3087, -1,3088, 3090, + 3089, -1,3089, 3090, 3091, -1,3087, 3091, 3092, -1,3091, 3087, 3089, -1,3092, 3094, + 3093, -1,3094, 3092, 3091, -1,3094, 3091, 3095, -1,3091, 3090, 3095, -1,3096, 3093, + 3094, -1,3094, 3097, 3096, -1,3097, 3098, 3096, -1,3096, 3098, 3099, -1,3093, 3096, + 3100, -1,3099, 3101, 3100, -1,3096, 3099, 3100, -1,3094, 3095, 3097, -1,3102, 3101, + 3098, -1,3103, 3101, 3102, -1,3105, 3104, 3103, -1,3102, 3105, 3103, -1,3105, 3107, + 3106, -1,3106, 3107, 3108, -1,3109, 3104, 3108, -1,3109, 3111, 3110, -1,3108, 3111, + 3109, -1,3104, 3106, 3108, -1,3108, 3107, 3112, -1,3112, 3111, 3108, -1,3111, 3112, + 3113, -1,3111, 3113, 3114, -1,3114, 3113, 3115, -1,3117, 3114, 3116, -1,3117, 3110, + 3114, -1,3116, 3118, 3117, -1,3114, 3115, 3116, -1,3114, 3110, 3111, -1,3121, 3120, + 3119, -1,3120, 3121, 3122, -1,3122, 3118, 3115, -1,3122, 3115, 3120, -1,3125, 3124, + 3123, -1,3123, 3124, 3126, -1,3125, 3123, 3127, -1,3121, 3127, 3128, -1,3129, 3123, + 3126, -1,3128, 3127, 3123, -1,3128, 3123, 3129, -1,3124, 3130, 3126, -1,3132, 3130, + 3131, -1,3134, 3133, 3131, -1,3132, 3131, 3133, -1,3126, 3135, 3129, -1,3126, 3132, + 3135, -1,3136, 3135, 3132, -1,3132, 3133, 3136, -1,3132, 3126, 3130, -1,3072, 3077, + 3137, -1,3137, 3077, 3138, -1,3138, 3136, 3134, -1,3138, 3134, 3137, -1,3141, 3140, + 3139, -1,3143, 3140, 3142, -1,3145, 3142, 3144, -1,3140, 3144, 3142, -1,3146, 3145, + 3144, -1,3148, 3147, 3141, -1,3151, 3150, 3149, -1,3151, 3149, 3152, -1,3139, 3140, + 3143, -1,3150, 3147, 3148, -1,3139, 3148, 3141, -1,3147, 3150, 3151, -1,3154, 3146, + 3153, -1,3144, 3153, 3146, -1,3155, 3154, 3153, -1,3158, 3157, 3156, -1,3153, 3157, + 3155, -1,3156, 3160, 3159, -1,3155, 3157, 3161, -1,3158, 3156, 3159, -1,3162, 3157, + 3158, -1,3165, 3164, 3163, -1,3160, 3165, 3166, -1,3160, 3166, 3159, -1,3166, 3165, + 3163, -1,3161, 3157, 3162, -1,3168, 3152, 3167, -1,3149, 3169, 3152, -1,3167, 3152, + 3169, -1,3171, 3149, 3170, -1,3170, 3173, 3172, -1,3169, 3149, 3171, -1,3174, 3172, + 3173, -1,3171, 3170, 3172, -1,3175, 3172, 3174, -1,3177, 3175, 3176, -1,3179, 3177, + 3178, -1,3176, 3178, 3177, -1,3177, 3172, 3175, -1,3181, 3164, 3180, -1,3182, 3163, + 3164, -1,3164, 3181, 3182, -1,3163, 3182, 3183, -1,3185, 3184, 3183, -1,3179, 3187, + 3186, -1,3178, 3187, 3179, -1,3188, 3179, 3186, -1,3188, 3189, 3184, -1,3182, 3185, + 3183, -1,3188, 3184, 3185, -1,3188, 3186, 3189, -1,3192, 3191, 3190, -1,3190, 3191, + 3193, -1,3193, 3195, 3194, -1,3195, 3193, 3191, -1,3198, 3197, 3196, -1,3199, 3196, + 3197, -1,3200, 3197, 3198, -1,3202, 3199, 3201, -1,3201, 3199, 3197, -1,3204, 3202, + 3203, -1,3200, 3205, 3197, -1,3198, 3206, 3200, -1,3207, 3203, 3201, -1,3202, 3201, + 3203, -1,3203, 3207, 3208, -1,3209, 3203, 3208, -1,3205, 3207, 3201, -1,3197, 3205, + 3201, -1,3209, 3204, 3203, -1,3210, 3204, 3209, -1,3211, 3204, 3210, -1,3211, 3213, + 3212, -1,3215, 3190, 3214, -1,3213, 3216, 3212, -1,3216, 3217, 3214, -1,3217, 3215, + 3214, -1,3219, 3210, 3218, -1,3209, 3218, 3210, -1,3213, 3210, 3219, -1,3220, 3217, + 3213, -1,3216, 3213, 3217, -1,3217, 3220, 3192, -1,3192, 3215, 3217, -1,3219, 3220, + 3213, -1,3213, 3211, 3210, -1,3208, 3218, 3209, -1,3196, 3221, 3206, -1,3222, 3206, + 3221, -1,3224, 3223, 3222, -1,3221, 3224, 3222, -1,3227, 3226, 3225, -1,3228, 3227, + 3225, -1,3230, 3228, 3229, -1,3232, 3225, 3231, -1,3233, 3229, 3232, -1,3225, 3232, + 3229, -1,3229, 3233, 3234, -1,3229, 3228, 3225, -1,3234, 3230, 3229, -1,3236, 3234, + 3235, -1,3230, 3234, 3236, -1,3237, 3236, 3235, -1,3224, 3237, 3238, -1,3240, 3235, + 3239, -1,3234, 3239, 3235, -1,3223, 3238, 3240, -1,3235, 3240, 3238, -1,3238, 3237, + 3235, -1,3233, 3239, 3234, -1,3243, 3242, 3241, -1,3242, 3195, 3241, -1,3243, 3194, + 3242, -1,3246, 3245, 3244, -1,3247, 3246, 3243, -1,3244, 3243, 3246, -1,3241, 3247, + 3243, -1,3194, 3243, 3244, -1,3250, 3249, 3248, -1,3252, 3248, 3251, -1,3253, 3252, + 3251, -1,3253, 3255, 3254, -1,3250, 3248, 3252, -1,3250, 3252, 3256, -1,3253, 3257, + 3252, -1,3251, 3255, 3253, -1,3249, 3250, 3258, -1,3261, 3260, 3259, -1,3260, 3263, + 3262, -1,3266, 3265, 3264, -1,3265, 3259, 3260, -1,3266, 3258, 3267, -1,3261, 3263, + 3260, -1,3269, 3268, 3262, -1,3265, 3266, 3259, -1,3266, 3264, 3258, -1,3264, 3249, + 3258, -1,3250, 3270, 3258, -1,3271, 3266, 3267, -1,3258, 3270, 3267, -1,3259, 3266, + 3272, -1,3271, 3272, 3266, -1,3261, 3259, 3273, -1,3257, 3253, 3274, -1,3270, 3250, + 3256, -1,3256, 3252, 3257, -1,3275, 3263, 3261, -1,3263, 3269, 3262, -1,3276, 3269, + 3263, -1,3273, 3277, 3261, -1,3275, 3261, 3277, -1,3278, 3276, 3263, -1,3275, 3278, + 3263, -1,3253, 3254, 3274, -1,3268, 3276, 3279, -1,3281, 3279, 3280, -1,3282, 3281, + 3280, -1,3268, 3279, 3281, -1,3284, 3282, 3283, -1,3286, 3284, 3285, -1,3285, 3287, + 3286, -1,3285, 3283, 3280, -1,3287, 3285, 3288, -1,3285, 3284, 3283, -1,3286, 3287, + 3289, -1,3292, 3291, 3290, -1,3295, 3294, 3293, -1,3291, 3296, 3290, -1,3298, 3297, + 3295, -1,3294, 3289, 3299, -1,3300, 3296, 3297, -1,3289, 3287, 3299, -1,3293, 3299, + 3301, -1,3288, 3285, 3280, -1,3287, 3288, 3302, -1,3299, 3293, 3294, -1,3301, 3299, + 3302, -1,3303, 3293, 3301, -1,3299, 3287, 3302, -1,3293, 3303, 3298, -1,3298, 3300, + 3297, -1,3300, 3298, 3304, -1,3290, 3300, 3305, -1,3300, 3290, 3296, -1,3305, 3306, + 3290, -1,3292, 3306, 3307, -1,3300, 3304, 3305, -1,3298, 3303, 3304, -1,3306, 3292, + 3290, -1,3293, 3298, 3295, -1,3309, 3274, 3308, -1,3307, 3309, 3291, -1,3309, 3308, + 3291, -1,3308, 3274, 3255, -1,3312, 3311, 3310, -1,3310, 3311, 3313, -1,3315, 3314, + 3313, -1,3315, 3311, 3316, -1,3311, 3315, 3313, -1,3259, 1529, 3317, -1,3317, 3318, + 3277, -1,3318, 3317, 1529, -1,3319, 3319, 3319, -1,3319, 3319, 3319, -1,3322, 3321, + 3320, -1,3321, 3322, 3323, -1,3231, 3226, 3320, -1,3231, 3320, 3321, -1,3325, 3324, + 3323, -1,3326, 3324, 3325, -1,3327, 3325, 3323, -1,3328, 3327, 3322, -1,3326, 3325, + 3329, -1,3325, 3327, 3328, -1,3329, 3325, 3328, -1,3326, 3330, 3324, -1,3332, 3330, + 3331, -1,3332, 3334, 3333, -1,3334, 3332, 3331, -1,3329, 3335, 3326, -1,3335, 3331, + 3326, -1,3331, 3335, 3336, -1,3336, 3334, 3331, -1,3330, 3326, 3331, -1,3339, 3338, + 3337, -1,3337, 3338, 3340, -1,3340, 3333, 3336, -1,3333, 3340, 3338, -1,3343, 3342, + 3341, -1,3344, 3342, 3343, -1,3346, 3345, 3344, -1,3342, 3344, 3345, -1,3349, 3348, + 3347, -1,3350, 3348, 3349, -1,3352, 3351, 3350, -1,3348, 3350, 3351, -1,3352, 3354, + 3353, -1,3356, 3353, 3355, -1,3352, 3353, 3357, -1,3351, 3357, 3358, -1,3358, 3357, + 3353, -1,3353, 3356, 3358, -1,3353, 3354, 3355, -1,3361, 3360, 3359, -1,3313, 3362, + 3359, -1,3361, 3359, 3362, -1,3355, 3363, 3356, -1,3363, 3355, 3361, -1,3361, 3314, + 3363, -1,3314, 3361, 3362, -1,3355, 3360, 3361, -1,3360, 3355, 3354, -1,3366, 3365, + 3364, -1,3368, 3365, 3367, -1,3369, 3364, 3365, -1,3371, 3369, 3370, -1,3369, 3371, + 3372, -1,3372, 3364, 3369, -1,3373, 3371, 3370, -1,3365, 3366, 3374, -1,3374, 3367, + 3365, -1,3376, 3375, 3368, -1,3378, 3375, 3377, -1,3370, 3379, 3373, -1,3367, 3380, + 3368, -1,3381, 3379, 3370, -1,3384, 3383, 3382, -1,3384, 3385, 3383, -1,3388, 3387, + 3386, -1,3382, 3386, 3387, -1,3391, 3390, 3389, -1,3386, 3389, 3390, -1,3394, 3393, + 3392, -1,3381, 3393, 3395, -1,3395, 3393, 3394, -1,3397, 3396, 3389, -1,3396, 3391, + 3389, -1,3397, 3398, 3396, -1,3400, 3399, 3397, -1,3381, 3395, 3379, -1,3387, 3384, + 3382, -1,3375, 3376, 3377, -1,3401, 3378, 3377, -1,3368, 3380, 3376, -1,3402, 3376, + 3380, -1,3405, 3404, 3403, -1,3406, 3402, 3405, -1,3376, 3402, 3406, -1,3407, 3394, + 3392, -1,3410, 3409, 3408, -1,3404, 3410, 3403, -1,3403, 3406, 3405, -1,3403, 3410, + 3408, -1,3413, 3412, 3411, -1,3413, 3408, 3414, -1,3409, 3414, 3408, -1,3408, 3413, + 3411, -1,3395, 3415, 3379, -1,3418, 3417, 3416, -1,3419, 3416, 3417, -1,3407, 3421, + 3420, -1,3398, 3397, 3399, -1,3422, 3399, 3400, -1,3424, 3398, 3423, -1,3424, 3423, + 3425, -1,3423, 3419, 3425, -1,3416, 3426, 3418, -1,3416, 3411, 3427, -1,3416, 3427, + 3426, -1,3426, 3420, 3421, -1,3428, 3422, 3400, -1,3415, 3395, 3394, -1,3423, 3398, + 3399, -1,3416, 3419, 3423, -1,3418, 3426, 3421, -1,3427, 3411, 3412, -1,3392, 3421, + 3407, -1,3388, 3386, 3390, -1 + ] + } + } + ] +} +DEF link1c Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.533333 0.533333 0.533333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 48 + -0.084999 -0.000732005 -0.000695882, -0.084366 -0.010773 0.00936112, -0.082474 -0.020752 0.0193391, + -0.079262 -0.030609 0.0291811, -0.074715 -0.040161 0.0387571, -0.069809 -0.047913 0.0465051, -0.063877 -0.055298 0.0538861, + -0.057026 -0.062073 0.0606541, -0.049118 -0.068237 0.0668181, -0.03849 -0.074493 0.0730671, -0.026489 -0.079315 0.0779111, + -0.013556 -0.082397 0.0809781, 0 -0.083435 0.0820311, 0.013614 -0.082367 0.0809711, 0.0266 -0.079285 0.0778811, + 0.03854 -0.074463 0.0730441, 0.049118 -0.068237 0.0668181, 0.05703 -0.062073 0.0606501, 0.063885 -0.055298 0.0538751, + 0.069809 -0.047913 0.0465011, 0.074715 -0.040161 0.0387571, 0.079262 -0.030609 0.0291821, 0.082474 -0.020752 0.0193421, + 0.084366 -0.010773 0.00936312, 0.084999 -0.000732005 -0.000695882, 0.084358 0.00973498 -0.0111569, + 0.082443 0.020111 -0.0215399, 0.079193 0.030365 -0.0317779, 0.074577 0.040344 -0.0417519, 0.069603 0.048401 -0.0498119, + 0.063568 0.056091 -0.0574949, 0.056595 0.06311 -0.0645289, 0.048519 0.069519 -0.0709459, 0.038059 0.075775 -0.0772019, + 0.026228 0.080658 -0.0820769, 0.013434 0.083771 -0.0851819, 0 0.084839 -0.0862579, -0.013478 0.083771 -0.0851749, + -0.02631 0.080627 -0.0820539, -0.038097 0.075775 -0.0771869, -0.048519 0.069519 -0.0709459, -0.056606 0.06311 -0.0645219, + -0.06358 0.056061 -0.0574799, -0.069611 0.048401 -0.0498009, -0.074577 0.040344 -0.0417519, -0.079193 0.030365 -0.0317689, + -0.082443 0.020111 -0.0215209, -0.084366 0.00973498 -0.0111469] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 48 + 0.000247685 0.707065 0.707149, 0.00018817 0.707091 0.707123, 0.000267027 0.707051 0.707162, 0.000138607 0.707104 0.707109, + 0.00075532 0.706984 0.70723, 0.000559561 0.707006 0.707207, 0.000452004 0.707042 0.707171, -0.000540997 0.707232 0.706982, + -0.00928329 0.707968 0.706184, -0.00893311 0.707925 0.706231, -0.00421689 0.70751 0.706691, -0.00169433 0.707383 0.706829, + 0.00140071 0.707139 0.707073, -0.00290123 0.707691 0.706517, 0.000196579 0.70707 0.707144, -0.000410493 0.707076 0.707137, + 0.000253772 0.707133 0.707081, -0.000269967 0.707046 0.707167, -0.000365446 0.70697 0.707243, -0.000268759 0.707015 0.707199, + -0.000346579 0.707031 0.707183, 0.000486788 0.707165 0.707048, -0.000138636 0.707137 0.707077, + -7.46255e-005 0.707058 0.707156, 0.000627465 0.707238 0.706976, -0.00206291 0.707052 0.707159, 0.00327742 0.707403 0.706803, + 0.00177506 0.707541 0.70667, 0.00736569 0.70775 0.706425, 0.0080465 0.707834 0.706333, -0.000275616 0.707034 0.70718, + 1.86214e-005 0.70698 0.707233, 3.72243e-005 0.707324 0.706889, 9.44265e-006 0.707323 0.706891, 1.33913e-005 0.706975 0.707239, + -4.10022e-005 0.707145 0.707069, -3.69658e-005 0.70717 0.707043, 2.91325e-005 0.707778 0.706435, + 4.5786e-005 0.707175 0.707038, 0 0.707327 0.706886, 4.29128e-005 0.70692 0.707294, 0.000278121 0.704024 0.710176, + -0.000842942 0.704459 0.709744, -0.000352355 0.705877 0.708334, 0.000427379 0.705513 0.708697, 1.34548e-006 0.707529 0.706685, + 0.00013926 0.707086 0.707127, 0.00178455 0.700829 0.713327] + } + coordIndex [ + 17, 25, 16, -1,25, 15, 16, -1,15, 26, 14, -1,26, 13, 14, -1,25, 17, 18, -1,21, 22, + 23, -1,21, 23, 24, -1,20, 21, 24, -1,20, 24, 19, -1,24, 18, 19, -1,12, 13, 27, -1, + 9, 47, 8, -1,9, 10, 46, -1,7, 8, 47, -1,47, 6, 7, -1,46, 10, 11, -1,3, 4, 0, -1,5, + 0, 4, -1,3, 1, 2, -1,0, 1, 3, -1,0, 5, 6, -1,45, 11, 12, -1,18, 24, 25, -1,26, 27, + 13, -1,27, 45, 12, -1,29, 43, 28, -1,44, 27, 28, -1,42, 29, 30, -1,32, 40, 31, -1, + 33, 40, 32, -1,34, 35, 36, -1,33, 34, 38, -1,30, 31, 41, -1,34, 36, 38, -1,28, 43, + 44, -1,27, 44, 45, -1,9, 46, 47, -1,45, 46, 11, -1,0, 6, 47, -1,33, 38, 39, -1,33, + 39, 40, -1,41, 42, 30, -1,31, 40, 41, -1,42, 43, 29, -1,38, 36, 37, -1,25, 26, 15, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,1, 3, 0, -1,3, 5, 4, -1,5, 6, 4, -1,1, 2, 7, -1,10, 9, 8, -1,10, 8, 11, -1, + 12, 10, 11, -1,12, 11, 13, -1,11, 7, 13, -1,15, 6, 14, -1,18, 17, 16, -1,18, 20, + 19, -1,21, 16, 17, -1,17, 22, 21, -1,19, 20, 23, -1,26, 25, 24, -1,27, 24, 25, -1, + 26, 29, 28, -1,24, 29, 26, -1,24, 27, 22, -1,30, 23, 15, -1,7, 11, 1, -1,5, 14, 6, -1, + 14, 30, 15, -1,33, 32, 31, -1,34, 14, 31, -1,36, 33, 35, -1,39, 38, 37, -1,40, 38, + 39, -1,43, 42, 41, -1,40, 43, 44, -1,35, 37, 45, -1,43, 41, 44, -1,31, 32, 34, -1, + 14, 34, 30, -1,18, 19, 17, -1,30, 19, 23, -1,24, 22, 17, -1,40, 44, 46, -1,40, 46, + 38, -1,45, 36, 35, -1,37, 38, 45, -1,36, 32, 33, -1,44, 41, 47, -1,1, 5, 3, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/link2.wrl b/examples/rlsg/staeubli-tx60l/link2.wrl new file mode 100644 index 00000000..466a1d36 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link2.wrl @@ -0,0 +1,1821 @@ +#VRML V2.0 utf8 + +DEF link2 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 0.666667 0.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 1339 + -0.312933 -3.63057e-008 0.134506, -0.31275 -3.5827e-008 0.139008, -0.312567 -3.535e-008 0.143494, -0.313727 0.014213 0.143494, + -0.317175 0.028046 0.143494, -0.322821 0.041134 0.143494, -0.330542 0.053131 0.143494, -0.341498 0.064919 0.142395, + -0.3552 0.074997 0.141464, -0.366949 0.080841 0.140961, -0.379919 0.084976 0.140625, -0.391913 0.086937 0.140503, + -0.393286 0.087059 0.140503, -0.394659 0.087151 0.140503, -0.394629 0.087608 0.151001, -0.394629 0.088066 0.161499, + -0.412573 0.087334 0.161499, -0.429999 0.082977 0.161499, -0.446173 0.07518 0.161499, -0.460455 0.064262 0.161499, + -0.472235 0.050686 0.161499, -0.480994 0.035004 0.161499, -0.486395 0.017874 0.161499, -0.488226 -1.3885e-008 0.161499, + -0.487646 -1.5446e-008 0.147995, -0.487067 -1.70053e-008 0.134506, -0.485388 0.016983 0.134506, -0.480414 0.033314 0.134506, + -0.472388 0.048363 0.134506, -0.461554 0.061554 0.134506, -0.44837 0.07238 0.134506, -0.433325 0.080429 0.134506, + -0.416968 0.085381 0.134506, -0.4 0.087051 0.134506, -0.383032 0.085381 0.134506, -0.366675 0.080429 0.134506, + -0.35163 0.07238 0.134506, -0.338446 0.061554 0.134506, -0.327612 0.048363 0.134506, -0.319586 0.033314 0.134506, + -0.314612 0.016983 0.134506, -0.486395 -0.017874 0.161499, -0.480994 -0.035004 0.161499, -0.472235 -0.050686 0.161499, + -0.460455 -0.064262 0.161499, -0.446173 -0.07518 0.161499, -0.429999 -0.082977 0.161499, -0.412573 -0.087334 0.161499, + -0.394629 -0.088066 0.161499, -0.394629 -0.087608 0.151001, -0.394659 -0.087151 0.140503, -0.393286 -0.087059 0.140503, + -0.391913 -0.086937 0.140503, -0.379919 -0.084976 0.140625, -0.366949 -0.080841 0.140961, -0.3552 -0.074997 0.141464, + -0.341498 -0.064919 0.142395, -0.330542 -0.053131 0.143494, -0.322821 -0.041134 0.143494, -0.317175 -0.028046 0.143494, + -0.313727 -0.014213 0.143494, -0.314612 -0.016983 0.134506, -0.319586 -0.033314 0.134506, -0.327612 -0.048363 0.134506, + -0.338446 -0.061554 0.134506, -0.35163 -0.07238 0.134506, -0.366675 -0.080429 0.134506, -0.383032 -0.085381 0.134506, + -0.4 -0.087051 0.134506, -0.416968 -0.085381 0.134506, -0.433325 -0.080429 0.134506, -0.44837 -0.07238 0.134506, + -0.461554 -0.061554 0.134506, -0.472388 -0.048363 0.134506, -0.480414 -0.033314 0.134506, -0.485388 -0.016983 0.134506, + -0.394659 0.087151 0.176514, -0.39472 0.086235 0.191513, -0.389777 0.085785 0.191559, -0.384955 0.085068 0.191681, + -0.376013 0.082962 0.192108, -0.385748 0.085175 0.192108, -0.395697 0.08625 0.192108, -0.405676 0.086174 0.192108, + -0.415594 0.084938 0.192108, -0.425299 0.082573 0.192108, -0.434668 0.079094 0.192108, -0.443579 0.074562 0.192108, + -0.45188 0.069031 0.192108, -0.459509 0.062572 0.192108, -0.466345 0.055279 0.192108, -0.472296 0.047245 0.192108, + -0.477271 0.038578 0.192108, -0.481207 0.029394 0.192108, -0.484045 0.019817 0.192108, -0.485785 0.00997499 0.192108, + -0.486365 -1.06987e-008 0.192108, -0.485785 -0.00997501 0.192108, -0.484045 -0.019817 0.192108, -0.481207 -0.029394 0.192108, + -0.477271 -0.038578 0.192108, -0.472296 -0.047245 0.192108, -0.466345 -0.055279 0.192108, -0.459509 -0.062572 0.192108, + -0.45188 -0.069031 0.192108, -0.443579 -0.074562 0.192108, -0.434668 -0.079094 0.192108, -0.425299 -0.082573 0.192108, + -0.415594 -0.084938 0.192108, -0.405676 -0.086174 0.192108, -0.395697 -0.08625 0.192108, -0.385748 -0.085175 0.192108, + -0.376013 -0.082962 0.192108, -0.380347 -0.084106 0.191864, -0.384955 -0.085068 0.191681, -0.39472 -0.086235 0.191513, + -0.394659 -0.087151 0.176514, -0.323492 -2.75992e-008 0.202499, -0.321967 -2.7934e-008 0.201004, + -0.320471 -2.82673e-008 0.199493, -0.321844 -0.014809 0.199493, -0.325964 -0.0291 0.199493, -0.332678 -0.042374 0.199493, + -0.341742 -0.054165 0.199493, -0.346991 -0.061951 0.197433, -0.352881 -0.068497 0.195724, -0.359747 -0.074295 0.194229, + -0.367529 -0.079163 0.193008, -0.481543 -1.06446e-008 0.197418, -0.476508 -1.06395e-008 0.202499, + -0.475043 -0.014924 0.202499, -0.470679 -0.029276 0.202499, -0.463599 -0.0425 0.202499, -0.454108 -0.054092 0.202499, + -0.442511 -0.063606 0.202499, -0.429266 -0.070679 0.202499, -0.414923 -0.075027 0.202499, -0.4 -0.0765 0.202499, + -0.385077 -0.075027 0.202499, -0.370734 -0.070679 0.202499, -0.357489 -0.063606 0.202499, -0.345892 -0.054092 0.202499, + -0.336401 -0.0425 0.202499, -0.329321 -0.029276 0.202499, -0.324957 -0.014924 0.202499, -0.367529 0.079163 0.193008, + -0.359747 0.074295 0.194229, -0.352881 0.068497 0.195724, -0.346991 0.061951 0.197433, -0.341742 0.054165 0.199493, + -0.332678 0.042374 0.199493, -0.325964 0.0291 0.199493, -0.321844 0.014809 0.199493, -0.324957 0.014924 0.202499, + -0.329321 0.029276 0.202499, -0.336401 0.0425 0.202499, -0.345892 0.054092 0.202499, -0.357489 0.063606 0.202499, + -0.370734 0.070679 0.202499, -0.385077 0.075027 0.202499, -0.4 0.0765 0.202499, -0.414923 0.075027 0.202499, + -0.429266 0.070679 0.202499, -0.442511 0.063606 0.202499, -0.454108 0.054092 0.202499, -0.463599 0.0425 0.202499, + -0.470679 0.029276 0.202499, -0.475043 0.014924 0.202499, -0.071082 -6.31115e-008 0.134506, -0.071265 -6.25923e-008 0.139008, + -0.071448 -6.20748e-008 0.143494, -0.070776 -0.00959606 0.143494, -0.068884 -0.0190181 0.143494, -0.06571 -0.0280951 0.143494, + -0.061316 -0.0366631 0.143494, -0.056311 -0.0439151 0.142746, -0.05033 -0.0506441 0.142044, -0.040869 -0.0584791 0.14119, + -0.029822 -0.0647891 0.140503, -0.029761 -0.0648191 0.140503, -0.0297 -0.0648501 0.140503, -0.029822 -0.0657731 0.161469, + -0.029822 -0.0657731 0.161499, -0.021399 -0.0689771 0.161499, -0.012671 -0.0711141 0.161499, -0.00369903 -0.0721361 0.161499, + 0.00527302 -0.0720371 0.161499, 0.014185 -0.0708241 0.161499, 0.022913 -0.0685041 0.161499, 0.031274 -0.0651171 0.161499, + 0.039148 -0.0607191 0.161499, 0.04635 -0.0553741 0.161499, 0.052881 -0.0491711 0.161499, 0.058618 -0.0422021 0.161499, + 0.06344 -0.0345801 0.161499, 0.067224 -0.0264171 0.161499, 0.069971 -0.0178431 0.161499, 0.07168 -0.00899108 0.161499, + 0.072229 -7.60038e-008 0.161499, 0.071619 -7.74329e-008 0.147995, 0.071069 -7.8867e-008 0.134506, + 0.069666 -0.0138621 0.134506, 0.065637 -0.0271911 0.134506, 0.059106 -0.0394741 0.134506, 0.050256 -0.0502431 0.134506, + 0.039453 -0.0590781 0.134506, 0.027185 -0.0656431 0.134506, 0.013879 -0.0696871 0.134506, 2.40006e-005 -0.0710531 0.134506, + -0.013892 -0.0696871 0.134506, -0.027197 -0.0656431 0.134506, -0.039465 -0.0590781 0.134506, -0.050269 -0.0502431 0.134506, + -0.059058 -0.0394741 0.134506, -0.065649 -0.0271911 0.134506, -0.069678 -0.0138621 0.134506, 0.07168 0.00899092 0.161499, + 0.069971 0.0178429 0.161499, 0.067224 0.0264169 0.161499, 0.06344 0.0345799 0.161499, 0.058618 0.0422019 0.161499, + 0.052881 0.0491709 0.161499, 0.04635 0.0553739 0.161499, 0.039148 0.0607189 0.161499, 0.031274 0.0651169 0.161499, + 0.022913 0.0685039 0.161499, 0.014185 0.0708239 0.161499, 0.00527304 0.0720369 0.161499, -0.00369901 0.0721359 0.161499, + -0.012671 0.0711139 0.161499, -0.021399 0.0689769 0.161499, -0.029822 0.0657729 0.161499, -0.029761 0.0653079 0.151001, + -0.0297 0.0648499 0.140503, -0.029761 0.0648189 0.140503, -0.029822 0.0647889 0.140503, -0.040869 0.0584829 0.14119, + -0.05033 0.0506439 0.142044, -0.056311 0.0439189 0.142746, -0.061316 0.0366629 0.143494, -0.06571 0.0280949 0.143494, + -0.068884 0.0190179 0.143494, -0.070776 0.00959594 0.143494, -0.069678 0.0138619 0.134506, -0.065649 0.0271909 0.134506, + -0.059058 0.0394739 0.134506, -0.050269 0.0502429 0.134506, -0.039465 0.0590779 0.134506, -0.027197 0.0656429 0.134506, + -0.013892 0.0696869 0.134506, 2.40164e-005 0.0710529 0.134506, 0.013879 0.0696869 0.134506, 0.027185 0.0656429 0.134506, + 0.039453 0.0590779 0.134506, 0.050256 0.0502429 0.134506, 0.059106 0.0394739 0.134506, 0.065637 0.0271909 0.134506, + 0.069666 0.0138619 0.134506, -0.029517 -0.0639151 0.191513, -0.031348 -0.0630231 0.191788, -0.033057 -0.0621071 0.192078, + -0.024817 -0.0658341 0.192078, -0.01615 -0.0684811 0.192078, -0.00723901 -0.0699841 0.192078, 0.00179402 -0.0703351 0.192078, + 0.010828 -0.0695271 0.192078, 0.019678 -0.0675581 0.192078, 0.028162 -0.0644761 0.192078, 0.036218 -0.0603221 0.192078, + 0.043665 -0.0551721 0.192078, 0.050378 -0.0491071 0.192078, 0.056299 -0.0422331 0.192078, 0.061243 -0.0346571 0.192078, + 0.065149 -0.0265061 0.192078, 0.068018 -0.0179201 0.192078, 0.069788 -0.00903407 0.192078, 0.070337 -7.24048e-008 0.192078, + 0.071313 -7.42077e-008 0.176788, -0.0297 -0.0648421 0.176514, 0.069788 0.00903393 0.192078, 0.068018 0.0179199 0.192078, + 0.065149 0.0265059 0.192078, 0.061243 0.0346569 0.192078, 0.056299 0.0422329 0.192078, 0.050378 0.0491069 0.192078, + 0.043665 0.0551719 0.192078, 0.036218 0.0603219 0.192078, 0.028162 0.0644759 0.192078, 0.019678 0.0675579 0.192078, + 0.010828 0.0695269 0.192078, 0.00179403 0.0703349 0.192078, -0.00723899 0.0699839 0.192078, -0.01615 0.0684809 0.192078, + -0.024817 0.0658339 0.192078, -0.033057 0.0621069 0.192078, -0.031348 0.0630229 0.191788, -0.029517 0.0639149 0.191513, + -0.0297 0.0648419 0.176514, 0.06051 -7.01606e-008 0.202499, 0.065637 -7.12869e-008 0.197464, -0.039465 -0.0566021 0.19371, + -0.044775 -0.0503621 0.195526, -0.049048 -0.0435791 0.197479, -0.052161 -0.0364531 0.199493, -0.057104 -0.0281071 0.199493, + -0.060706 -0.0191101 0.199493, -0.062903 -0.00966606 0.199493, -0.063635 -5.6734e-008 0.199493, + -0.062109 -5.6734e-008 0.201019, -0.060522 -5.67459e-008 0.202499, -0.059363 -0.0118031 0.202499, + -0.055884 -0.0231511 0.202499, -0.05033 -0.0336111 0.202499, -0.042761 -0.0427821 0.202499, -0.033606 -0.0503041 0.202499, + -0.023169 -0.0558931 0.202499, -0.011816 -0.0593381 0.202499, 2.39957e-005 -0.0605011 0.202499, 0.011804 -0.0593381 0.202499, + 0.023157 -0.0558931 0.202499, 0.033594 -0.0503041 0.202499, 0.04281 -0.0427821 0.202499, 0.050317 -0.0336111 0.202499, + 0.055872 -0.0231511 0.202499, 0.059351 -0.0118031 0.202499, -0.062903 0.00966594 0.199493, -0.060706 0.0191099 0.199493, + -0.057104 0.0281069 0.199493, -0.052161 0.0364529 0.199493, -0.049048 0.0435789 0.197479, -0.044775 0.0503619 0.195526, + -0.039465 0.0566019 0.19371, 0.059351 0.0118029 0.202499, 0.055872 0.0231509 0.202499, 0.050317 0.0336109 0.202499, + 0.04281 0.0427819 0.202499, 0.033594 0.0503039 0.202499, 0.023157 0.0558929 0.202499, 0.011804 0.0593379 0.202499, + 2.40091e-005 0.0605009 0.202499, -0.011816 0.0593379 0.202499, -0.023169 0.0558929 0.202499, -0.033606 0.0503039 0.202499, + -0.042761 0.0427819 0.202499, -0.05033 0.0336109 0.202499, -0.055884 0.0231509 0.202499, -0.059363 0.0118029 0.202499, + -0.199133 -0.045441 0.199493, -0.199133 0.045441 0.199493, -0.197363 0.0751039 0.140503, -0.394659 0.087173 0.140503, + -0.394659 -0.087173 0.140503, -0.197363 -0.0751041 0.140503, -0.39472 0.08625 0.191513, -0.394598 0.088089 0.161499, + -0.39472 -0.08625 0.191513, -0.394598 -0.088089 0.161499, -0.029761 -0.0653081 0.150986, -0.0297 -0.0648421 0.176559, + -0.197363 -0.074181 0.191513, -0.0297 0.0648419 0.176559, -0.197363 0.074181 0.191513, -0.029761 0.0653079 0.150986, + -0.380621 -0.084167 0.191849, -0.38526 -0.085121 0.191666, -0.031287 -0.0630381 0.191788, -0.043127 -0.0525471 0.194885, + -0.050391 -0.0408781 0.198242, -0.347662 -0.062798 0.197205, -0.353613 -0.069191 0.195541, -0.360388 -0.074753 0.194122, + -0.367896 -0.079376 0.192963, -0.38999 0.085808 0.191559, -0.38526 0.085121 0.191666, -0.367896 0.079376 0.192963, + -0.360388 0.074753 0.194122, -0.353613 0.069191 0.195541, -0.347662 0.062798 0.197205, -0.050391 0.0408779 0.198242, + -0.043127 0.0525469 0.194885, -0.031287 0.0630379 0.191788, -0.374274 -0.08345 0.140747, -0.357703 -0.076431 0.141342, + -0.342932 -0.066177 0.142273, -0.05509 -0.0453951 0.142593, -0.047705 -0.0531041 0.141769, -0.03916 -0.0596201 0.141068, + -0.05509 0.0453949 0.142593, -0.047705 0.0531039 0.141769, -0.03916 0.0596199 0.141068, -0.374274 0.08345 0.140747, + -0.357703 0.076431 0.141342, -0.342932 0.066177 0.142273, -0.485968 0.017097 0.147995, -0.480963 0.033539 0.147995, + -0.472876 0.048691 0.147995, -0.461981 0.061974 0.147995, -0.448706 0.072868 0.147995, -0.433539 0.080971 0.147995, + -0.41709 0.08596 0.147995, -0.4 0.087639 0.147995, -0.4 -0.087639 0.147995, -0.41709 -0.08596 0.147995, + -0.433539 -0.080971 0.147995, -0.448706 -0.072868 0.147995, -0.461981 -0.061974 0.147995, -0.472876 -0.048691 0.147995, + -0.480963 -0.033539 0.147995, -0.485968 -0.017097 0.147995, -0.395636 -0.087189 0.176804, -0.405737 -0.087105 0.176804, + -0.415747 -0.085861 0.176804, -0.425574 -0.083466 0.176804, -0.435034 -0.079956 0.176804, -0.444037 -0.075371 0.176804, + -0.45246 -0.069778 0.176804, -0.46015 -0.063251 0.176804, -0.467078 -0.055878 0.176804, -0.473059 -0.047756 0.176804, + -0.478094 -0.038994 0.176804, -0.482092 -0.029713 0.176804, -0.484961 -0.020033 0.176804, -0.4867 -0.010084 0.176804, + -0.48728 -1.22935e-008 0.176804, -0.4867 0.010084 0.176804, -0.484961 0.020033 0.176804, -0.482092 0.029713 0.176804, + -0.478094 0.038994 0.176804, -0.473059 0.047756 0.176804, -0.467078 0.055878 0.176804, -0.46015 0.063251 0.176804, + -0.45246 0.069778 0.176804, -0.444037 0.075371 0.176804, -0.435034 0.079956 0.176804, -0.425574 0.083466 0.176804, + -0.415747 0.085861 0.176804, -0.405737 0.087105 0.176804, -0.395636 0.087189 0.176804, -0.354681 -0.06781 0.197418, + -0.368781 -0.075348 0.197418, -0.3841 -0.079987 0.197418, -0.4 -0.081551 0.197418, -0.4159 -0.079987 0.197418, + -0.431219 -0.075348 0.197418, -0.445319 -0.06781 0.197418, -0.457678 -0.057667 0.197418, -0.46781 -0.045307 0.197418, + -0.475348 -0.03121 0.197418, -0.479987 -0.01591 0.197418, -0.479987 0.01591 0.197418, -0.475348 0.03121 0.197418, + -0.46781 0.045307 0.197418, -0.457678 0.057667 0.197418, -0.445319 0.06781 0.197418, -0.431219 0.075348 0.197418, + -0.4159 0.079987 0.197418, -0.4 0.081551 0.197418, -0.3841 0.079987 0.197418, -0.368781 0.075348 0.197418, + -0.354681 0.06781 0.197418, 0.070276 -0.0139771 0.147995, 0.066187 -0.0274161 0.147995, 0.059595 -0.0398031 0.147995, + 0.050684 -0.0506591 0.147995, 0.039819 -0.0595661 0.147995, 0.027429 -0.0661851 0.147995, 0.014001 -0.0702671 0.147995, + 2.39994e-005 -0.0716401 0.147995, -0.013953 -0.0702671 0.147995, -0.027441 -0.0661851 0.147995, -0.027441 0.0661849 0.147995, + -0.013953 0.0702669 0.147995, 2.40152e-005 0.0716399 0.147995, 0.014001 0.0702669 0.147995, 0.027429 0.0661849 0.147995, + 0.039819 0.0595659 0.147995, 0.050684 0.0506589 0.147995, 0.059595 0.0398029 0.147995, 0.066187 0.0274159 0.147995, + 0.070276 0.0139769 0.147995, 0.070703 -0.00915407 0.176788, 0.068933 -0.0181581 0.176788, 0.066064 -0.0268591 0.176788, + 0.062036 -0.0351181 0.176788, 0.057031 -0.0427931 0.176788, 0.05105 -0.0497631 0.176788, 0.044275 -0.0559041 0.176788, + 0.036707 -0.0611231 0.176788, 0.028528 -0.0653311 0.176788, 0.019922 -0.0684591 0.176788, 0.01095 -0.0704501 0.176788, + 0.00185499 -0.0712741 0.176788, -0.00736102 -0.0709151 0.176788, -0.016394 -0.0693891 0.176788, -0.025122 -0.0667111 0.176788, + -0.025122 0.0667109 0.176788, -0.016394 0.0693889 0.176788, -0.007361 0.0709149 0.176788, 0.00185501 0.0712739 0.176788, + 0.01095 0.0704499 0.176788, 0.019922 0.0684589 0.176788, 0.028528 0.0653309 0.176788, 0.036707 0.0611229 0.176788, + 0.044275 0.0559039 0.176788, 0.05105 0.0497629 0.176788, 0.057031 0.0427929 0.176788, 0.062036 0.0351179 0.176788, + 0.066064 0.0268589 0.176788, 0.068933 0.0181579 0.176788, 0.070703 0.00915393 0.176788, 0.064355 -0.0128011 0.197464, + 0.060632 -0.0251101 0.197464, 0.054529 -0.0364571 0.197464, 0.046411 -0.0463981 0.197464, 0.036462 -0.0545581 0.197464, + 0.02511 -0.0606231 0.197464, 0.012781 -0.0643541 0.197464, 2.39956e-005 -0.0656201 0.197464, -0.012793 -0.0643541 0.197464, + -0.025122 -0.0606231 0.197464, -0.036475 -0.0545581 0.197464, -0.046423 -0.0463981 0.197464, -0.046423 0.0463979 0.197464, + -0.036475 0.0545579 0.197464, -0.025122 0.0606229 0.197464, -0.012793 0.0643539 0.197464, 2.40101e-005 0.0656199 0.197464, + 0.012781 0.0643539 0.197464, 0.02511 0.0606229 0.197464, 0.036462 0.0545579 0.197464, 0.046411 0.0463979 0.197464, + 0.054529 0.0364569 0.197464, 0.060632 0.0251099 0.197464, 0.064355 0.0128009 0.197464, -0.315436 0.02113 0.143494, + -0.320013 0.034592 0.143494, -0.326697 0.047131 0.143494, -0.336005 0.059025 0.142944, -0.348334 0.069954 0.141922, + -0.385901 0.08596 0.140564, -0.385901 -0.08596 0.140564, -0.348334 -0.069954 0.141922, -0.336005 -0.059025 0.142944, + -0.326697 -0.047131 0.143494, -0.320013 -0.034592 0.143494, -0.315436 -0.02113 0.143494, -0.387366 0.085426 0.19162, + -0.386145 0.085243 0.19165, -0.389838 -0.085648 0.191605, -0.387396 -0.085358 0.191635, -0.386176 -0.085213 0.191666, + -0.329321 -0.035736 0.199493, -0.337225 -0.048271 0.199493, -0.344366 -0.058056 0.198471, -0.344366 0.058056 0.198471, + -0.337225 0.048271 0.199493, -0.329321 0.035736 0.199493, -0.069861 -0.0143071 0.143494, -0.058813 -0.0402911 0.143127, + -0.035315 -0.0616381 0.140854, -0.035315 0.0616379 0.140854, -0.058813 0.0402909 0.143127, -0.069861 0.0143069 0.143494, + -0.054602 -0.0322801 0.199493, -0.058875 -0.0236071 0.199493, -0.061804 -0.0143881 0.199493, -0.061804 0.0143879 0.199493, + -0.058875 0.0236069 0.199493, -0.054602 0.0322799 0.199493, -0.00943597 -6.10973e-008 0.214325, + -0.00870397 0.00361594 0.214325, -0.00668897 0.00668194 0.214325, -0.00363799 0.00873094 0.214325, + 2.40024e-005 0.00944994 0.214325, 0.00362502 0.00873094 0.214325, 0.00667701 0.00668194 0.214325, + 0.00875203 0.00361594 0.214325, 0.00942401 -6.31877e-008 0.214325, 0.00472401 -6.26566e-008 0.214417, + 2.40013e-005 -6.21272e-008 0.214493, -0.00473597 -6.16081e-008 0.214417, 0.00875203 -0.00361606 0.214325, + 0.00667701 -0.00668206 0.214325, 0.00362502 -0.00873106 0.214325, 2.40003e-005 -0.00945006 0.214325, + -0.00363799 -0.00873106 0.214325, -0.00668897 -0.00668206 0.214325, -0.00870397 -0.00361606 0.214325, + -0.018896 -6.01029e-008 0.213837, -0.017432 0.00722794 0.213837, -0.013342 0.0133559 0.213837, -0.007239 0.0174499 0.213837, + 2.40034e-005 0.0188879 0.213837, 0.00722699 0.0174499 0.213837, 0.01333 0.0133559 0.213837, 0.01748 0.00722794 0.213837, + 0.018884 -6.42903e-008 0.213837, 0.014185 -6.37424e-008 0.214081, -0.014197 -6.05967e-008 0.214081, + 0.01748 -0.00722806 0.213837, 0.01333 -0.0133561 0.213837, 0.00722698 -0.0174501 0.213837, 2.39993e-005 -0.0188881 0.213837, + -0.00723901 -0.0174501 0.213837, -0.013342 -0.0133561 0.213837, -0.017432 -0.00722806 0.213837, + -0.028296 -5.9149e-008 0.213043, -0.027747 0.00552194 0.213043, -0.02616 0.0108319 0.213043, -0.023535 0.0157249 0.213043, + -0.019995 0.0200159 0.213043, -0.015723 0.0235349 0.213043, -0.01084 0.0261499 0.213043, -0.00553002 0.0277609 0.213043, + 2.40046e-005 0.0283049 0.213043, 0.005518 0.0277609 0.213043, 0.010828 0.0261499 0.213043, 0.01571 0.0235349 0.213043, + 0.020044 0.0200159 0.213043, 0.023523 0.0157249 0.213043, 0.026147 0.0108319 0.213043, 0.027734 0.00552193 0.213043, + 0.028284 -6.54202e-008 0.213043, 0.023584 -6.48552e-008 0.21344, -0.023596 -5.9626e-008 0.21344, + 0.027734 -0.00552207 0.213043, 0.026147 -0.0108321 0.213043, 0.023523 -0.0157251 0.213043, 0.020044 -0.0200161 0.213043, + 0.01571 -0.0235351 0.213043, 0.010828 -0.0261501 0.213043, 0.005518 -0.0277611 0.213043, 2.39983e-005 -0.0283051 0.213043, + -0.00553002 -0.0277611 0.213043, -0.01084 -0.0261501 0.213043, -0.015723 -0.0235351 0.213043, -0.019995 -0.0200161 0.213043, + -0.023535 -0.0157251 0.213043, -0.02616 -0.0108321 0.213043, -0.027747 -0.00552206 0.213043, -0.037695 -5.82324e-008 0.211914, + -0.036963 0.00735294 0.211914, -0.034827 0.0144229 0.211914, -0.031348 0.0209389 0.211914, -0.026648 0.0266509 0.211914, + -0.020911 0.0313379 0.211914, -0.014441 0.0348209 0.211914, -0.00736101 0.0369639 0.211914, 2.40057e-005 0.0376889 0.211914, + 0.007349 0.0369639 0.211914, 0.014429 0.0348209 0.211914, 0.020959 0.0313379 0.211914, 0.026636 0.0266509 0.211914, + 0.031335 0.0209389 0.211914, 0.034814 0.0144229 0.211914, 0.036951 0.00735293 0.211914, 0.037683 -6.6587e-008 0.211914, + 0.032983 -6.60035e-008 0.212479, -0.032996 -5.86906e-008 0.212479, 0.036951 -0.00735307 0.211914, + 0.034814 -0.0144231 0.211914, 0.031335 -0.0209391 0.211914, 0.026636 -0.0266511 0.211914, 0.020959 -0.0313381 0.211914, + 0.014429 -0.0348211 0.211914, 0.00734899 -0.0369641 0.211914, 2.39974e-005 -0.0376891 0.211914, + -0.00736102 -0.0369641 0.211914, -0.014441 -0.0348211 0.211914, -0.020911 -0.0313381 0.211914, -0.026648 -0.0266511 0.211914, + -0.031348 -0.0209391 0.211914, -0.034827 -0.0144231 0.211914, -0.036963 -0.00735306 0.211914, -0.047034 -5.73563e-008 0.21048, + -0.046118 0.00917494 0.21048, -0.043433 0.0179979 0.21048, -0.039099 0.0261289 0.21048, -0.03324 0.0332569 0.21048, + -0.026099 0.0391039 0.21048, -0.017981 0.0434489 0.21048, -0.009192 0.0461269 0.21048, 2.40069e-005 0.0470309 0.21048, + 0.00918 0.0461269 0.21048, 0.017969 0.0434489 0.21048, 0.026147 0.0391039 0.21048, 0.033228 0.0332569 0.21048, + 0.039087 0.0261289 0.21048, 0.043481 0.0179979 0.21048, 0.046106 0.00917493 0.21048, 0.047021 -6.7781e-008 0.21048, + 0.042383 -6.71874e-008 0.211197, -0.042334 -5.77977e-008 0.211197, 0.046106 -0.00917507 0.21048, 0.043481 -0.0179981 0.21048, + 0.039087 -0.0261291 0.21048, 0.033228 -0.0332571 0.21048, 0.026147 -0.0391041 0.21048, 0.017969 -0.0434491 0.21048, + 0.00917999 -0.0461271 0.21048, 2.39964e-005 -0.0470311 0.21048, -0.00919201 -0.0461271 0.21048, -0.017981 -0.0434491 0.21048, + -0.026099 -0.0391041 0.21048, -0.03324 -0.0332571 0.21048, -0.039099 -0.0261291 0.21048, -0.043433 -0.0179981 0.21048, + -0.046118 -0.00917506 0.21048, -0.057898 -5.63788e-008 0.208435, -0.056738 0.0112899 0.208435, -0.053442 0.0221459 0.208435, + -0.048132 0.0321499 0.208435, -0.04093 0.0409199 0.208435, -0.032141 0.0481189 0.208435, -0.022131 0.0534669 0.208435, + -0.011267 0.0567589 0.208435, 2.40083e-005 0.0578729 0.208435, 0.011316 0.0567589 0.208435, 0.022119 0.0534669 0.208435, + 0.032129 0.0481189 0.208435, 0.040918 0.0409199 0.208435, 0.04812 0.0321499 0.208435, 0.053491 0.0221459 0.208435, + 0.056787 0.0112899 0.208435, 0.057886 -6.92119e-008 0.208435, 0.052454 -6.84965e-008 0.209457, + -0.052466 -5.68676e-008 0.209457, 0.056787 -0.0112901 0.208435, 0.053491 -0.0221461 0.208435, 0.04812 -0.0321501 0.208435, + 0.040918 -0.0409201 0.208435, 0.032129 -0.0481191 0.208435, 0.022119 -0.0534671 0.208435, 0.011316 -0.0567591 0.208435, + 2.39954e-005 -0.0578731 0.208435, -0.011267 -0.0567591 0.208435, -0.022131 -0.0534671 0.208435, -0.032141 -0.0481191 0.208435, + -0.04093 -0.0409201 0.208435, -0.048132 -0.0321501 0.208435, -0.053442 -0.0221461 0.208435, -0.056738 -0.0112901 0.208435, + 0.058008 -6.97717e-008 0.203506, 0.057947 -6.94926e-008 0.205963, -0.057959 -5.6646e-008 0.205963, + -0.05802 -5.69116e-008 0.203506, -0.05686 0.0113139 0.203506, -0.053564 0.0221959 0.203506, -0.048254 0.0322229 0.203506, + -0.040991 0.0410119 0.203506, -0.032202 0.0482249 0.203506, -0.022192 0.0535849 0.203506, -0.011328 0.0568849 0.203506, + 2.40087e-005 0.0579989 0.203506, 0.011316 0.0568849 0.203506, 0.02218 0.0535849 0.203506, 0.032251 0.0482249 0.203506, + 0.04104 0.0410119 0.203506, 0.048242 0.0322229 0.203506, 0.053613 0.0221959 0.203506, 0.056909 0.0113139 0.203506, + 0.056909 -0.0113141 0.203506, 0.053613 -0.0221961 0.203506, 0.048242 -0.0322231 0.203506, 0.04104 -0.0410121 0.203506, + 0.032251 -0.0482251 0.203506, 0.02218 -0.0535851 0.203506, 0.011316 -0.0568851 0.203506, 2.39959e-005 -0.0579991 0.203506, + -0.011328 -0.0568851 0.203506, -0.022192 -0.0535851 0.203506, -0.032202 -0.0482251 0.203506, -0.040991 -0.0410121 0.203506, + -0.048254 -0.0322231 0.203506, -0.053564 -0.0221961 0.203506, -0.05686 -0.0113141 0.203506, 0.00435803 0.00180794 0.214417, + 0.00332002 0.00334094 0.214417, 0.00179402 0.00436494 0.214417, 2.40018e-005 0.00472494 0.214417, + -0.00180699 0.00436494 0.214417, -0.00333299 0.00334094 0.214417, -0.00436999 0.00180794 0.214417, + -0.00436999 -0.00180806 0.214417, -0.00333299 -0.00334106 0.214417, -0.00180699 -0.00436506 0.214417, + 2.40008e-005 -0.00472506 0.214417, 0.00179402 -0.00436506 0.214417, 0.00332002 -0.00334106 0.214417, + 0.00435803 -0.00180806 0.214417, 0.013086 0.00542194 0.214081, 0.010034 0.0100189 0.214081, 0.00539599 0.0130899 0.214081, + 2.40029e-005 0.0141689 0.214081, -0.00540801 0.0130899 0.214081, -0.010046 0.0100189 0.214081, -0.013098 0.00542194 0.214081, + -0.013098 -0.00542206 0.214081, -0.010046 -0.0100191 0.214081, -0.00540801 -0.0130901 0.214081, + 2.39998e-005 -0.0141691 0.214081, 0.00539599 -0.0130901 0.214081, 0.010034 -0.0100191 0.214081, 0.013086 -0.00542206 0.214081, + 0.023157 0.00460294 0.21344, 0.021814 0.00902994 0.21344, 0.019617 0.0131099 0.21344, 0.016687 0.0166849 0.21344, + 0.013086 0.0196209 0.21344, 0.00905798 0.0218009 0.21344, 0.004602 0.0231439 0.21344, 2.4004e-005 0.0235979 0.21344, + -0.00461401 0.0231439 0.21344, -0.00900902 0.0218009 0.21344, -0.013098 0.0196209 0.21344, -0.016699 0.0166849 0.21344, + -0.019629 0.0131099 0.21344, -0.021826 0.00902994 0.21344, -0.023169 0.00460294 0.21344, -0.023169 -0.00460306 0.21344, + -0.021826 -0.00903006 0.21344, -0.019629 -0.0131101 0.21344, -0.016699 -0.0166851 0.21344, -0.013098 -0.0196211 0.21344, + -0.00900903 -0.0218011 0.21344, -0.00461402 -0.0231441 0.21344, 2.39988e-005 -0.0235981 0.21344, + 0.00460199 -0.0231441 0.21344, 0.00905798 -0.0218011 0.21344, 0.013086 -0.0196211 0.21344, 0.016687 -0.0166851 0.21344, + 0.019617 -0.0131101 0.21344, 0.021814 -0.00903006 0.21344, 0.023157 -0.00460306 0.21344, 0.032373 0.00643693 0.212479, + 0.030481 0.0126279 0.212479, 0.027429 0.0183319 0.212479, 0.02334 0.0233329 0.212479, 0.018335 0.0274369 0.212479, + 0.012598 0.0304849 0.212479, 0.00643299 0.0323639 0.212479, 2.40051e-005 0.0329969 0.212479, -0.00644501 0.0323639 0.212479, + -0.01261 0.0304849 0.212479, -0.018347 0.0274369 0.212479, -0.023352 0.0233329 0.212479, -0.027441 0.0183319 0.212479, + -0.030493 0.0126279 0.212479, -0.032385 0.00643694 0.212479, -0.032385 -0.00643706 0.212479, -0.030493 -0.0126281 0.212479, + -0.027441 -0.0183321 0.212479, -0.023352 -0.0233331 0.212479, -0.018347 -0.0274371 0.212479, -0.01261 -0.0304851 0.212479, + -0.00644501 -0.0323641 0.212479, 2.39978e-005 -0.0329971 0.212479, 0.00643299 -0.0323641 0.212479, + 0.012598 -0.0304851 0.212479, 0.018335 -0.0274371 0.212479, 0.02334 -0.0233331 0.212479, 0.027429 -0.0183321 0.212479, + 0.030481 -0.0126281 0.212479, 0.032373 -0.00643707 0.212479, 0.041528 0.00826493 0.211197, 0.039148 0.0162109 0.211197, + 0.035242 0.0235349 0.211197, 0.029932 0.0299529 0.211197, 0.023523 0.0352209 0.211197, 0.016199 0.0391349 0.211197, + 0.00826399 0.0415459 0.211197, 2.40063e-005 0.0423579 0.211197, -0.008276 0.0415459 0.211197, -0.016211 0.0391349 0.211197, + -0.023535 0.0352209 0.211197, -0.029944 0.0299529 0.211197, -0.035193 0.0235349 0.211197, -0.03916 0.0162109 0.211197, + -0.041541 0.00826494 0.211197, -0.041541 -0.00826406 0.211197, -0.03916 -0.0162111 0.211197, -0.035193 -0.0235351 0.211197, + -0.029944 -0.0299531 0.211197, -0.023535 -0.0352211 0.211197, -0.016211 -0.0391351 0.211197, -0.00827601 -0.0415461 0.211197, + 2.39969e-005 -0.0423581 0.211197, 0.00826398 -0.0415461 0.211197, 0.016199 -0.0391351 0.211197, 0.023523 -0.0352211 0.211197, + 0.029932 -0.0299531 0.211197, 0.035242 -0.0235351 0.211197, 0.039148 -0.0162111 0.211197, 0.041528 -0.00826407 0.211197, + 0.051416 0.0102329 0.209457, 0.048486 0.0200729 0.209457, 0.043604 0.0291399 0.209457, 0.037073 0.0370859 0.209457, + 0.029138 0.0436099 0.209457, 0.020044 0.0484579 0.209457, 0.010217 0.0514409 0.209457, 2.40076e-005 0.0524519 0.209457, + -0.010229 0.0514409 0.209457, -0.020056 0.0484579 0.209457, -0.02915 0.0436099 0.209457, -0.037085 0.0370859 0.209457, + -0.043616 0.0291399 0.209457, -0.048437 0.0200729 0.209457, -0.051428 0.0102329 0.209457, -0.051428 -0.0102331 0.209457, + -0.048437 -0.0200731 0.209457, -0.043616 -0.0291401 0.209457, -0.037085 -0.0370861 0.209457, -0.02915 -0.0436101 0.209457, + -0.020056 -0.0484581 0.209457, -0.010229 -0.0514411 0.209457, 2.39959e-005 -0.0524521 0.209457, 0.010217 -0.0514411 0.209457, + 0.020044 -0.0484581 0.209457, 0.029138 -0.0436101 0.209457, 0.037073 -0.0370861 0.209457, 0.043604 -0.0291401 0.209457, + 0.048486 -0.0200731 0.209457, 0.051416 -0.0102331 0.209457, 0.056848 0.0113029 0.205963, 0.053552 0.0221709 0.205963, + 0.048181 0.0321879 0.205963, 0.040979 0.0409659 0.205963, 0.03219 0.0481719 0.205963, 0.02218 0.0535239 0.205963, + 0.011316 0.0568239 0.205963, 2.40085e-005 0.0579339 0.205963, -0.011328 0.0568239 0.205963, -0.022192 0.0535239 0.205963, + -0.032202 0.0481719 0.205963, -0.040991 0.0409659 0.205963, -0.048193 0.0321879 0.205963, -0.053503 0.0221709 0.205963, + -0.056799 0.0113029 0.205963, -0.056799 -0.0113031 0.205963, -0.053503 -0.0221711 0.205963, -0.048193 -0.0321881 0.205963, + -0.040991 -0.0409661 0.205963, -0.032202 -0.0481721 0.205963, -0.022192 -0.0535241 0.205963, -0.011328 -0.0568241 0.205963, + 2.39956e-005 -0.0579341 0.205963, 0.011316 -0.0568241 0.205963, 0.02218 -0.0535241 0.205963, 0.03219 -0.0481721 0.205963, + 0.040979 -0.0409661 0.205963, 0.048181 -0.0321881 0.205963, 0.053552 -0.0221711 0.205963, 0.056848 -0.0113031 0.205963, + -0.436987 0.064087 0.203506, -0.436957 0.064003 0.207077, -0.436896 0.063923 0.210663, -0.448676 0.055496 0.210663, + -0.458563 0.044933 0.210663, -0.466193 0.032646 0.210663, -0.471289 0.019104 0.210663, -0.473669 0.00482699 0.210663, + -0.473181 -0.00963401 0.210663, -0.469885 -0.023726 0.210663, -0.463934 -0.036907 0.210663, -0.455481 -0.048668 0.210663, + -0.444922 -0.058559 0.210663, -0.432654 -0.0662 0.210663, -0.419104 -0.071297 0.210663, -0.404822 -0.073654 0.210663, + -0.390356 -0.073181 0.210663, -0.376288 -0.069893 0.210663, -0.363104 -0.063923 0.210663, -0.363043 -0.064003 0.207077, + -0.363013 -0.064087 0.203506, -0.376227 -0.070076 0.203506, -0.390326 -0.073364 0.203506, -0.404852 -0.073845 0.203506, + -0.419165 -0.07148 0.203506, -0.432715 -0.066368 0.203506, -0.445044 -0.058708 0.203506, -0.455634 -0.04879 0.203506, + -0.464087 -0.036999 0.203506, -0.470068 -0.023787 0.203506, -0.473364 -0.00965901 0.203506, -0.473853 0.00483999 0.203506, + -0.471472 0.019154 0.203506, -0.466376 0.03273 0.203506, -0.458716 0.045048 0.203506, -0.448798 0.055637 0.203506, + -0.351324 -0.055496 0.210663, -0.341437 -0.044933 0.210663, -0.333807 -0.032646 0.210663, -0.328711 -0.019104 0.210663, + -0.326331 -0.00482703 0.210663, -0.326819 0.00963397 0.210663, -0.330115 0.023726 0.210663, -0.336066 0.036907 0.210663, + -0.344519 0.048668 0.210663, -0.355078 0.058559 0.210663, -0.367346 0.0662 0.210663, -0.380896 0.071297 0.210663, + -0.395178 0.073654 0.210663, -0.409644 0.073181 0.210663, -0.423712 0.069893 0.210663, -0.423773 0.070076 0.203506, + -0.409674 0.073364 0.203506, -0.395148 0.073845 0.203506, -0.380835 0.07148 0.203506, -0.367285 0.066368 0.203506, + -0.354956 0.058708 0.203506, -0.344366 0.04879 0.203506, -0.335913 0.036999 0.203506, -0.329932 0.023787 0.203506, + -0.326636 0.00965897 0.203506, -0.326147 -0.00484003 0.203506, -0.328528 -0.019154 0.203506, -0.333624 -0.03273 0.203506, + -0.341284 -0.045048 0.203506, -0.351202 -0.055637 0.203506, -0.433539 0.058064 0.211792, -0.430151 0.052208 0.212936, + -0.439734 0.045322 0.212936, -0.447821 0.036697 0.212936, -0.454077 0.026663 0.212936, -0.458228 0.015602 0.212936, + -0.46015 0.00394299 0.212936, -0.459753 -0.00786801 0.212936, -0.457068 -0.019377 0.212936, -0.452216 -0.030142 0.212936, + -0.445319 -0.039745 0.212936, -0.436713 -0.047825 0.212936, -0.426672 -0.054066 0.212936, -0.415594 -0.058228 0.212936, + -0.403937 -0.060154 0.212936, -0.392126 -0.059765 0.212936, -0.380621 -0.057083 0.212936, -0.369849 -0.052208 0.212936, + -0.366461 -0.058064 0.211792, -0.360266 -0.045322 0.212936, -0.352179 -0.036697 0.212936, -0.345923 -0.026663 0.212936, + -0.341772 -0.015602 0.212936, -0.33985 -0.00394302 0.212936, -0.340247 0.00786798 0.212936, -0.342932 0.019377 0.212936, + -0.347784 0.030142 0.212936, -0.354681 0.039745 0.212936, -0.363287 0.047825 0.212936, -0.373328 0.054066 0.212936, + -0.384406 0.058228 0.212936, -0.396063 0.060154 0.212936, -0.407874 0.059765 0.212936, -0.419379 0.057083 0.212936, + -0.42713 0.047016 0.21376, -0.424139 0.041821 0.214569, -0.43183 0.036308 0.214569, -0.4383 0.029398 0.214569, + -0.443304 0.021358 0.214569, -0.446661 0.012499 0.214569, -0.448187 0.00315899 0.214569, -0.447882 -0.00630301 0.214569, + -0.445715 -0.015523 0.214569, -0.441809 -0.024147 0.214569, -0.436316 -0.031841 0.214569, -0.429388 -0.038311 0.214569, + -0.421362 -0.043312 0.214569, -0.412512 -0.046646 0.214569, -0.403143 -0.048187 0.214569, -0.393683 -0.047878 0.214569, + -0.384467 -0.045731 0.214569, -0.375861 -0.041821 0.214569, -0.37287 -0.047016 0.21376, -0.36817 -0.036308 0.214569, + -0.3617 -0.029398 0.214569, -0.356696 -0.021358 0.214569, -0.353339 -0.012499 0.214569, -0.351813 -0.00315902 0.214569, + -0.352118 0.00630298 0.214569, -0.354285 0.015523 0.214569, -0.358191 0.024147 0.214569, -0.363684 0.031841 0.214569, + -0.370612 0.038311 0.214569, -0.378638 0.043312 0.214569, -0.387488 0.046646 0.214569, -0.396857 0.048187 0.214569, + -0.406317 0.047878 0.214569, -0.415533 0.045731 0.214569, -0.421149 0.03661 0.21521, -0.418127 0.031401 0.215851, + -0.423895 0.02726 0.215851, -0.428778 0.022072 0.215851, -0.432532 0.016037 0.215851, -0.435034 0.00938399 0.215851, + -0.436194 0.00237099 0.215851, -0.43595 -0.00473301 0.215851, -0.434332 -0.011655 0.215851, -0.431403 -0.018129 0.215851, + -0.427252 -0.023907 0.215851, -0.422064 -0.028765 0.215851, -0.416022 -0.03252 0.215851, -0.409369 -0.035023 0.215851, + -0.40238 -0.036179 0.215851, -0.39527 -0.03595 0.215851, -0.388342 -0.034332 0.215851, -0.381873 -0.031401 0.215851, + -0.378851 -0.03661 0.21521, -0.376105 -0.02726 0.215851, -0.371222 -0.022072 0.215851, -0.367468 -0.016037 0.215851, + -0.364966 -0.00938402 0.215851, -0.363806 -0.00237102 0.215851, -0.36405 0.00473298 0.215851, -0.365668 0.011655 0.215851, + -0.368597 0.018129 0.215851, -0.372748 0.023907 0.215851, -0.377936 0.028765 0.215851, -0.383978 0.03252 0.215851, + -0.390631 0.035023 0.215851, -0.39762 0.036179 0.215851, -0.40473 0.03595 0.215851, -0.411658 0.034332 0.215851, + -0.415106 0.026175 0.216309, -0.412085 0.02095 0.216766, -0.419196 0.014727 0.216766, -0.423376 0.00626099 0.216766, + -0.423987 -0.00315701 0.216766, -0.420935 -0.012095 0.216766, -0.41474 -0.019192 0.216766, -0.406256 -0.023367 0.216766, + -0.396857 -0.023983 0.216766, -0.387915 -0.02095 0.216766, -0.384894 -0.026175 0.216309, -0.380804 -0.014727 0.216766, + -0.376624 -0.00626102 0.216766, -0.376013 0.00315698 0.216766, -0.379065 0.012095 0.216766, -0.38526 0.019192 0.216766, + -0.393744 0.023367 0.216766, -0.403143 0.023983 0.216766, -0.409064 0.015715 0.217041, -0.406042 0.01048 0.217316, + -0.409613 0.00736698 0.217316, -0.411688 0.00313198 0.217316, -0.411993 -0.00158002 0.217316, -0.410468 -0.00605102 0.217316, + -0.407355 -0.00960102 0.217316, -0.403143 -0.011688 0.217316, -0.398413 -0.011997 0.217316, -0.393958 -0.01048 0.217316, + -0.390936 -0.015715 0.217041, -0.390387 -0.00736702 0.217316, -0.388312 -0.00313202 0.217316, -0.388007 0.00157998 0.217316, + -0.389532 0.00605098 0.217316, -0.392645 0.00960098 0.217316, -0.396857 0.011688 0.217316, -0.401587 0.011997 0.217316, + -0.403021 0.00523998 0.217407, -0.4 -1.74568e-008 0.217499, -0.396979 -0.00524002 0.217407, -0.448737 0.055565 0.207077, + -0.458624 0.044991 0.207077, -0.466284 0.032688 0.207077, -0.471381 0.019129 0.207077, -0.473761 0.00483399 0.207077, + -0.473273 -0.00964601 0.207077, -0.469977 -0.023756 0.207077, -0.463995 -0.036953 0.207077, -0.455573 -0.048729 0.207077, + -0.444983 -0.058632 0.207077, -0.432684 -0.066284 0.207077, -0.419135 -0.071388 0.207077, -0.404822 -0.073746 0.207077, + -0.390356 -0.073273 0.207077, -0.376257 -0.069984 0.207077, -0.351263 -0.055565 0.207077, -0.341376 -0.044991 0.207077, + -0.333716 -0.032688 0.207077, -0.328619 -0.019129 0.207077, -0.326239 -0.00483403 0.207077, -0.326727 0.00964597 0.207077, + -0.330023 0.023756 0.207077, -0.336005 0.036953 0.207077, -0.344427 0.048729 0.207077, -0.355017 0.058632 0.207077, + -0.367316 0.066284 0.207077, -0.380865 0.071388 0.207077, -0.395178 0.073746 0.207077, -0.409644 0.073273 0.207077, + -0.423743 0.069984 0.207077, -0.44422 0.050407 0.211792, -0.453192 0.040817 0.211792, -0.46012 0.029654 0.211792, + -0.464758 0.017353 0.211792, -0.466895 0.00438499 0.211792, -0.466467 -0.00875201 0.211792, -0.463477 -0.021551 0.211792, + -0.458075 -0.033524 0.211792, -0.450415 -0.044209 0.211792, -0.440802 -0.053192 0.211792, -0.429663 -0.060135 0.211792, + -0.417365 -0.064766 0.211792, -0.404395 -0.066902 0.211792, -0.391241 -0.066475 0.211792, -0.378455 -0.063488 0.211792, + -0.35578 -0.050407 0.211792, -0.346808 -0.040817 0.211792, -0.33988 -0.029654 0.211792, -0.335242 -0.017353 0.211792, + -0.333105 -0.00438503 0.211792, -0.333533 0.00875197 0.211792, -0.336523 0.021551 0.211792, -0.341925 0.033524 0.211792, + -0.349585 0.044209 0.211792, -0.359198 0.053192 0.211792, -0.370337 0.060135 0.211792, -0.382635 0.064766 0.211792, + -0.395605 0.066902 0.211792, -0.408759 0.066475 0.211792, -0.421545 0.063488 0.211792, -0.435797 0.040817 0.21376, + -0.44306 0.033047 0.21376, -0.448676 0.024012 0.21376, -0.452429 0.01405 0.21376, -0.454169 0.00355099 0.21376, + -0.453833 -0.00708601 0.21376, -0.451392 -0.01745 0.21376, -0.447028 -0.027143 0.21376, -0.440802 -0.035793 0.21376, + -0.433051 -0.043068 0.21376, -0.424017 -0.048691 0.21376, -0.414038 -0.052437 0.21376, -0.40354 -0.054173 0.21376, + -0.39292 -0.053822 0.21376, -0.382544 -0.051407 0.21376, -0.364203 -0.040817 0.21376, -0.35694 -0.033047 0.21376, + -0.351324 -0.024012 0.21376, -0.347571 -0.01405 0.21376, -0.345831 -0.00355102 0.21376, -0.346167 0.00708598 0.21376, + -0.348608 0.01745 0.21376, -0.352972 0.027143 0.21376, -0.359198 0.035793 0.21376, -0.366949 0.043068 0.21376, + -0.375983 0.048691 0.21376, -0.385962 0.052437 0.21376, -0.39646 0.054173 0.21376, -0.40708 0.053822 0.21376, + -0.417456 0.051407 0.21376, -0.427863 0.031784 0.21521, -0.433539 0.025736 0.21521, -0.437903 0.018698 0.21521, + -0.440833 0.010942 0.21521, -0.442175 0.00276499 0.21521, -0.441901 -0.00551801 0.21521, -0.440039 -0.013589 0.21521, + -0.436621 -0.021137 0.21521, -0.431769 -0.027874 0.21521, -0.425726 -0.033539 0.21521, -0.418707 -0.037914 0.21521, + -0.410956 -0.040836 0.21521, -0.402777 -0.042183 0.21521, -0.394476 -0.041912 0.21521, -0.38642 -0.040031 0.21521, + -0.372137 -0.031784 0.21521, -0.366461 -0.025736 0.21521, -0.362097 -0.018698 0.21521, -0.359167 -0.010942 0.21521, + -0.357825 -0.00276502 0.21521, -0.358099 0.00551798 0.21521, -0.359961 0.013589 0.21521, -0.363379 0.021137 0.21521, + -0.368231 0.027874 0.21521, -0.374274 0.033539 0.21521, -0.381293 0.037914 0.21521, -0.389044 0.040836 0.21521, + -0.397223 0.042183 0.21521, -0.405524 0.041912 0.21521, -0.41358 0.040031 0.21521, -0.419928 0.022724 0.216309, + -0.423987 0.0184 0.216309, -0.4271 0.013368 0.216309, -0.429205 0.00782299 0.216309, -0.430151 0.00197699 0.216309, + -0.429968 -0.00394501 0.216309, -0.428625 -0.00971501 0.216309, -0.426184 -0.015112 0.216309, -0.422736 -0.019928 0.216309, + -0.418402 -0.023979 0.216309, -0.413367 -0.027107 0.216309, -0.407812 -0.029194 0.216309, -0.401984 -0.030159 0.216309, + -0.396063 -0.029966 0.216309, -0.390295 -0.02862 0.216309, -0.380072 -0.022724 0.216309, -0.376013 -0.0184 0.216309, + -0.3729 -0.013368 0.216309, -0.370795 -0.00782302 0.216309, -0.369849 -0.00197702 0.216309, -0.370032 0.00394498 0.216309, + -0.371375 0.00971498 0.216309, -0.373816 0.015112 0.216309, -0.377264 0.019928 0.216309, -0.381598 0.023979 0.216309, + -0.386633 0.027107 0.216309, -0.392187 0.029194 0.216309, -0.398016 0.030159 0.216309, -0.403937 0.029966 0.216309, + -0.409705 0.02862 0.216309, -0.414404 0.011046 0.217041, -0.417517 0.00469598 0.217041, -0.417975 -0.00236802 0.217041, + -0.415717 -0.00907302 0.217041, -0.411047 -0.014396 0.217041, -0.4047 -0.017527 0.217041, -0.39762 -0.01799 0.217041, + -0.385596 -0.011046 0.217041, -0.382483 -0.00469602 0.217041, -0.382025 0.00236798 0.217041, -0.384283 0.00907298 0.217041, + -0.388953 0.014396 0.217041, -0.3953 0.017527 0.217041, -0.40238 0.01799 0.217041, -0.404791 0.00368298 0.217407, + -0.405829 0.00156598 0.217407, -0.406012 -0.000790017 0.217407, -0.405249 -0.00302502 0.217407, + -0.403693 -0.00480002 0.217407, -0.401556 -0.00584402 0.217407, -0.399207 -0.00599902 0.217407, + -0.395209 -0.00368302 0.217407, -0.394171 -0.00156602 0.217407, -0.393988 0.000789982 0.217407, -0.394751 0.00302498 0.217407, + -0.396307 0.00479998 0.217407, -0.398444 0.00584398 0.217407, -0.400793 0.00599898 0.217407] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 1527 + 0.949373 0.311489 -0.0408121, 0.974528 0.218684 -0.0497271, 0.970063 0.241797 -0.0226295, -0.974844 0.222687 0.00947967, + -0.999994 9.98922e-007 0.00342201, -0.985598 0.163554 -0.0429778, -0.912616 0.408795 0.00436855, + -0.934265 0.353793 -0.0444833, 0.991186 0.12542 -0.0426734, 0.918133 0.396068 -0.0126976, 0.919854 0.388963 -0.0507532, + -0.678973 0.734076 0.0113222, -0.817842 0.57534 0.0108977, -0.726046 0.686123 -0.045754, -0.333181 0.942838 0.00686665, + -0.510598 0.859743 0.0114919, -0.405997 0.912691 -0.0465034, -0.57723 0.815282 -0.0460566, 0.835264 0.547584 -0.0498577, + 0.881809 0.470037 -0.0384465, 0.840849 0.54115 -0.011426, -0.846989 0.529674 -0.045339, -0.998877 -0.0197482 -0.0430664, + -0.972734 0.227748 -0.0438159, -0.910009 0.41227 -0.0437811, -0.682826 0.729243 -0.0441915, -0.351763 0.935084 -0.0433703, + -0.218688 0.974652 -0.0472123, -0.527614 0.848365 -0.0435877, -0.81217 0.581774 -0.043808, -0.146918 0.989073 0.0122029, + -0.0348317 0.998462 -0.0431277, 0.0423395 0.997623 -0.0543644, 0.0301431 0.998596 -0.0435619, -0.178054 0.983893 0.0158266, + 0.784498 0.619138 -0.035084, -0.162363 0.985763 -0.043707, 0.696377 0.716056 -0.0481875, 0.607722 0.792803 -0.0462326, + 0.56771 0.822282 -0.0394588, -0.998534 0.0326684 -0.0431633, 0.732836 0.680357 -0.00808522, 0.252545 0.966305 -0.0497636, + 0.161509 0.98671 -0.0178168, 0.177873 0.982333 -0.0581594, 0.0369841 0.996478 -0.0752602, 0.0773722 0.993116 -0.0879477, + 0.115476 0.990322 -0.0769871, 0.378927 0.923141 -0.0650001, 0.504452 0.862398 -0.0424102, 0.999172 1.86882e-009 -0.0406877, + 0.998529 -1.87043e-009 -0.0542208, 0.999169 0 -0.0407633, 0.376539 0.925399 -0.0430826, 0.666691 0.742995 -0.0589966, + 0.177873 -0.982333 -0.0581594, 0.115476 -0.990322 -0.0769871, 0.161509 -0.98671 -0.0178168, -0.0242961 -0.998778 -0.0430381, + -0.146918 -0.989073 0.0122029, -0.178051 -0.983898 0.015569, 0.0301427 -0.998596 -0.0435612, -0.18667 -0.981284 -0.0472793, + 0.0145036 -0.997438 -0.0700572, 0.0423388 -0.997623 -0.0543636, -0.226737 -0.97298 -0.0435976, -0.375691 -0.925576 -0.0465269, + -0.333181 -0.942838 0.00686685, 0.696377 -0.716057 -0.0481873, 0.607721 -0.792803 -0.0462323, 0.666691 -0.742996 -0.0589961, + -0.510598 -0.859743 0.0114923, -0.678973 -0.734076 0.0113224, -0.550189 -0.83378 -0.0458665, 0.504452 -0.862398 -0.0424102, + 0.56771 -0.822282 -0.0394587, 0.784498 -0.619138 -0.035084, 0.732836 -0.680357 -0.00808509, -0.912616 -0.408795 0.00436862, + -0.817842 -0.57534 0.0108978, -0.829029 -0.557356 -0.0454357, 0.881809 -0.470037 -0.0384463, 0.835264 -0.547585 -0.0498577, + 0.840849 -0.54115 -0.011426, -0.974844 -0.222687 0.00947959, -0.979668 -0.195926 -0.0431801, -0.922287 -0.38394 -0.0444663, + -0.703219 -0.709494 -0.0458339, -0.412291 -0.91002 -0.0433528, -0.58216 -0.811883 -0.0440013, -0.848646 -0.527157 -0.0436534, + -0.985665 -0.163024 -0.0434572, -0.9349 -0.35219 -0.043858, -0.729258 -0.682818 -0.0440661, 0.970062 -0.241799 -0.0226273, + 0.974528 -0.218686 -0.0497257, 0.949373 -0.311489 -0.0408105, 0.991185 -0.125421 -0.0426731, 0.918133 -0.396068 -0.0126973, + 0.919854 -0.388964 -0.0507527, 0.378927 -0.923141 -0.0650001, 0.376539 -0.925399 -0.0430826, 0.252545 -0.966305 -0.0497636, + 0.0773722 -0.993116 -0.0879477, 0.144309 -0.954278 0.261781, 0.11384 -0.526295 0.842647, 0.1974 -0.920151 0.338165, + -0.0848391 -0.994531 0.0609144, 0.0530584 -0.944999 0.32274, -0.0519176 -0.997016 0.0571246, -0.198993 -0.978102 0.0609746, + -0.168766 -0.983863 0.0594345, 0.15042 0.947927 0.280728, 0.147217 0.988891 0.0205282, 0.146334 0.989033 0.0200035, + 0.113741 -0.991322 0.0659101, 0.113481 0.982247 0.149375, 0.0748838 -0.992606 0.095531, -0.382947 -0.921753 0.0610195, + -0.292386 -0.954357 0.0609418, -0.285228 -0.956771 0.0568725, -0.41507 -0.908018 0.0567538, -0.487051 -0.871258 0.0607529, + 0.118471 -0.992522 -0.0293991, 0.118467 -0.992542 -0.0287492, 0.158742 -0.986168 0.0476835, -0.608835 -0.791209 0.0575251, + -0.674006 -0.736189 0.0611649, -0.584374 -0.809167 0.0612939, -0.696025 -0.715397 0.0612886, -0.753677 -0.654367 0.0614393, + -0.51357 -0.855922 0.0603693, 0.029971 -0.997733 0.0602621, 0.0568547 -0.996519 0.0609649, -0.842162 -0.535903 0.0597513, + -0.884223 -0.463191 0.0600378, -0.825057 -0.561801 0.0605082, -0.893801 -0.44488 0.0565828, -0.931818 -0.357775 0.0609329, + -0.770991 -0.634239 0.0575701, -0.966982 -0.247346 0.0613583, -0.944354 -0.324006 0.056699, -0.989033 -0.134728 0.0605189, + -0.974248 -0.217318 0.0601174, -0.993526 0.0964964 0.0599489, -0.998027 -0.019135 0.0598075, -0.998097 0.0116084 0.0605614, + -0.975791 0.210045 0.0609402, -0.990819 0.122498 0.0572051, -0.993035 -0.103158 0.0569213, -0.901287 0.428972 0.0605368, + -0.94522 0.320618 0.0613518, -0.937874 0.342345 0.0564986, -0.845705 0.53027 0.0599723, -0.885025 0.462124 0.0563271, + -0.701213 0.710324 0.0611549, -0.77919 0.623801 0.0611194, -0.75862 0.648971 0.0577258, -0.615666 0.785611 0.0614077, + -0.679343 0.731257 0.0612951, -0.829426 0.555377 0.0600712, -0.969063 0.239319 0.0603643, -0.418254 0.906284 0.0609289, + -0.520145 0.851901 0.0609492, -0.49334 0.867747 0.0602536, -0.168766 0.983863 0.0594341, -0.0848387 0.994531 0.0609141, + -0.198992 0.978103 0.0609736, -0.0519176 0.997016 0.0571246, 0.0488121 0.936448 0.347394, -0.310798 0.948517 0.0609882, + -0.274719 0.959883 0.056157, 0.182389 0.978775 0.0934505, 0.121618 0.561021 0.818819, 0.0661836 0.994498 0.0812004, + 0.029971 0.997733 0.0602621, -0.593578 0.802722 0.0574711, -0.397587 0.915805 0.0568049, 0.0568547 0.996519 0.0609649, + 0.40034 -0.575078 0.713452, 0.448573 -0.54708 0.706743, 0.37531 -0.606541 0.700893, 0.412201 -0.603354 0.682682, + 0.343626 -0.638907 0.688273, 0.494946 -0.518211 0.697485, 0.501412 -0.485118 0.716412, 0.224262 -0.308405 0.924442, + 0.262952 -0.665886 0.698178, 0.278479 -0.685838 0.672365, 0.124216 -0.709049 0.694133, 0.160956 -0.690487 0.70521, + -0.00106884 -0.721205 0.692721, 0.29249 -0.645662 0.705386, -0.0557313 -0.732681 0.678286, -1.71781e-007 -0.709008 0.705201, + 0.710627 0 0.703569, 0.697435 -0.110379 0.708097, 0.702226 2.48925e-009 0.711954, 0.662832 -0.241108 0.708887, + 0.685783 -0.133754 0.71541, 0.586986 -0.382378 0.713607, 0.621448 -0.320437 0.714929, 0.590103 -0.37461 0.715154, + 0.700045 0 0.714098, 0.550216 -0.432106 0.714526, 0.640872 -0.28586 0.712437, -0.127476 -0.708431 0.694172, + -0.134004 -0.728642 0.671658, -0.214894 -0.703942 0.676968, -0.297003 -0.678684 0.671697, -0.27826 -0.662367 0.695587, + -0.363335 -0.638827 0.678151, -0.449718 -0.581349 0.678076, -0.409217 -0.591726 0.694551, -0.160956 -0.690487 0.70521, + -0.506381 -0.514926 0.691686, -0.510755 -0.53655 0.671746, -0.598276 -0.397494 0.695748, -0.566619 -0.470158 0.676679, + -0.619826 -0.405721 0.671719, -0.668352 -0.265871 0.694708, -0.654599 -0.333976 0.678204, -0.693883 -0.237658 0.679739, + -0.707021 -0.137748 0.693647, -0.719225 -0.168915 0.673931, -0.730714 -0.0811557 0.677843, -0.72145 1.24439e-009 0.692466, + -0.740305 1.86437e-009 0.672271, -0.374201 -0.602086 0.705313, -0.501449 -0.501072 0.705319, -0.270933 -0.654653 0.705709, + -0.645643 -0.292989 0.705197, -0.710112 0 0.704089, -0.691196 -0.161261 0.704445, -0.589197 -0.393494 0.705698, + -0.730714 0.0811557 0.677843, -0.703853 0.146439 0.695088, -0.693883 0.237659 0.679739, -0.719225 0.168916 0.673931, + -0.659211 0.287283 0.694917, -0.654599 0.333977 0.678203, -0.619827 0.405722 0.671717, -0.601117 0.398703 0.692599, + -0.566619 0.470159 0.676678, -0.505145 0.511439 0.695168, -0.510755 0.53655 0.671746, -0.449717 0.581349 0.678076, + -0.270075 0.667217 0.694176, -0.363335 0.638827 0.67815, -0.297004 0.678684 0.671697, -0.137062 0.708362 0.692415, + -0.214895 0.703942 0.676968, -0.134004 0.728642 0.671658, -0.389789 0.604568 0.694667, -0.0557307 0.732681 0.678286, + -0.663947 0.250109 0.704713, -0.589448 0.393679 0.705385, -0.696207 0.138605 0.704332, 0.501412 0.485118 0.716412, + 0.550216 0.432106 0.714526, 0.586986 0.382377 0.713608, -0.41301 0.576458 0.705067, -0.13819 0.695311 0.705298, + -0.292491 0.645662 0.705386, -0.501663 0.501168 0.7051, -0.000763291 0.717696 0.696356, 0.14374 0.705184 0.694301, + 0.115433 0.699735 0.705015, 0.281367 0.658279 0.698213, 0.278479 0.685838 0.672365, 0.343626 0.638907 0.688273, + 0.249379 0.66353 0.705364, 0.383393 0.602415 0.700076, 0.412201 0.603354 0.682682, 0.448573 0.54708 0.706743, + 0.494946 0.518211 0.697485, 0.384175 0.588259 0.71159, 1.75517e-007 0.709197 0.70501, 0.224262 0.308405 0.924442, + 0.640869 0.285859 0.712441, 0.621446 0.320436 0.714931, 0.662829 0.241107 0.70889, 0.697435 0.110379 0.708097, + 0.685782 0.133754 0.715411, 0.590103 0.37461 0.715154, -0.960352 -0.274211 -0.0503238, -0.97911 -0.196123 -0.0536573, + -0.979997 -0.196785 -0.0297011, 0.993831 -0.11072 0.00636937, 0.998981 1.86611e-009 -0.0451253, 0.998614 0.0144253 -0.0506214, + 0.969265 -0.245942 0.00622298, 0.982843 -0.177771 -0.0491561, -0.993104 -0.107801 -0.0460901, -0.865355 -0.498468 -0.051868, + -0.824098 -0.565642 -0.0301879, -0.826925 -0.559703 -0.0541137, 0.882385 -0.47048 0.00675591, 0.935272 -0.353482 0.0177974, + 0.930294 -0.363296 -0.0506812, -0.590935 -0.805441 -0.0453979, -0.489141 -0.870369 -0.0565519, -0.534856 -0.843703 -0.0457719, + 0.743354 -0.668879 0.00509785, 0.815672 -0.578239 0.0178732, 0.832747 -0.551414 -0.0497386, -0.426263 -0.902514 -0.0613895, + -0.470394 -0.878753 -0.0807611, -0.782892 -0.620039 -0.0513013, 0.998585 -0.0319894 -0.0424849, 0.714571 -0.697927 -0.047812, + 0.910634 -0.410881 -0.0438574, 0.972664 -0.227758 -0.0452918, -0.370821 -0.928348 -0.0257217, -0.346519 -0.936941 -0.0454519, + -0.127157 -0.99089 -0.0443649, 0.547851 -0.836393 0.0174981, 0.646661 -0.762755 0.00587647, 0.562533 -0.825218 -0.0507119, + 0.682137 -0.729865 -0.0445617, 0.4431 -0.896458 0.00510371, 0.812283 -0.581614 -0.0438334, 0.209098 -0.976598 -0.0503438, + 0.200311 -0.979569 0.0179085, 0.316639 -0.94853 0.00552315, 0.0182422 -0.99862 -0.0492456, -0.0569024 -0.99837 0.00438257, + 0.0800613 -0.996776 0.00522477, -0.175243 -0.983243 -0.0502275, -0.304007 -0.952658 0.00471603, -0.17398 -0.984603 0.0169426, + -0.198436 -0.979755 0.0265271, 0.396286 -0.916781 -0.0496921, 0.35232 -0.934847 -0.0439583, -0.032554 -0.998526 -0.0434274, + 0.162768 -0.985695 -0.0437308, -0.303828 -0.951343 -0.051331, -0.226817 -0.972975 -0.0432792, 0.527051 -0.848655 -0.0447556, + -0.446156 -0.892358 -0.0681379, -0.700985 -0.710775 -0.0584756, -0.918095 -0.393702 -0.0458265, -0.919659 -0.38784 -0.0617046, + -0.999169 3.7344e-009 -0.0407567, -0.999172 0 -0.0406843, -0.696288 -0.716428 -0.0437493, -0.998361 1.32764e-007 -0.0572372, + -0.295325 0.955381 0.00551215, -0.233764 0.972252 0.0089612, -0.355818 0.933427 -0.0459101, -0.202947 0.977897 -0.0502902, + -0.17398 0.984603 0.0169426, -0.0144897 0.998685 -0.0491752, 0.0800615 0.996776 0.00522452, -0.0569024 0.99837 0.00438257, + -0.401054 0.915065 -0.0425576, -0.407212 0.911442 -0.0587504, -0.488985 0.870448 -0.0566853, -0.5347 0.843785 -0.0460606, + 0.181492 0.982106 -0.0502881, 0.0328384 0.99851 -0.0435766, -0.16264 0.985742 -0.0431453, -0.303872 0.95133 -0.0513152, + 0.200311 0.979569 0.017908, 0.31664 0.94853 0.00552263, 0.547851 0.836393 0.0174978, 0.4431 0.896458 0.00510328, + 0.539366 0.840543 -0.0507065, 0.366008 0.929292 -0.0495359, 0.743354 0.668879 0.0050977, 0.646661 0.762755 0.00587623, + 0.691159 0.721101 -0.0480861, 0.882385 0.47048 0.00675595, 0.815672 0.578238 0.0178731, 0.816674 0.57495 -0.0497611, + 0.412624 0.909825 -0.0442682, 0.919792 0.389161 -0.0503627, 0.935272 0.353481 0.0177974, 0.72866 0.683461 -0.0439977, + 0.581493 0.812319 -0.0447565, 0.969265 0.245942 0.00622305, 0.993831 0.11072 0.00636935, 0.976583 0.209319 -0.0497034, + 0.227344 0.972826 -0.0438641, -0.993104 0.107801 -0.0460904, -0.97911 0.196123 -0.0536579, -0.979997 0.196785 -0.029702, + -0.960352 0.274211 -0.0503241, -0.919659 0.38784 -0.0617045, -0.865355 0.498468 -0.0518678, -0.918095 0.393702 -0.0458265, + -0.782933 0.619979 -0.0513912, -0.824243 0.565432 -0.0301635, -0.826994 0.559595 -0.0541776, -0.700969 0.710775 -0.0586682, + -0.590854 0.805484 -0.0456852, -0.696272 0.716444 -0.0437507, -0.470394 0.878753 -0.0807609, -0.446156 0.892358 -0.0681378, + 0.935277 0.351091 -0.0446245, 0.985732 0.162419 -0.0441943, 0.849026 0.526537 -0.0437453, 0.992306 -0.107512 0.0613953, + 0.997797 0.0221607 0.0625243, 0.998044 -0.0086668 0.0619126, 0.970057 -0.235037 0.061207, 0.986685 -0.1506 0.0614266, + 0.879302 -0.472313 0.0612268, 0.933109 -0.353993 0.0632179, 0.917594 -0.392585 0.0624328, 0.81105 -0.581885 0.0600753, + 0.858985 -0.508243 0.061913, 0.960222 -0.272292 0.0619015, 0.787065 -0.613803 0.0614353, 0.728917 -0.681887 0.0609165, + 0.703141 -0.708367 0.0617128, 0.607126 -0.792171 0.0621562, 0.531564 -0.844781 0.0615191, 0.636908 -0.768453 0.0618753, + 0.499234 -0.864193 0.0627408, 0.419051 -0.90592 0.0608721, 0.265022 -0.962217 0.0624651, 0.174303 -0.982811 0.0608291, + 0.300077 -0.951972 0.0608519, 0.13957 -0.988235 0.0625433, 0.0468267 -0.997027 0.0611879, 0.385709 -0.920491 0.0626465, + -0.208323 -0.976134 0.0613446, -0.0813528 -0.994802 0.0612416, -0.115047 -0.991371 0.0628339, 0.0124629 -0.997952 0.0627466, + -0.241557 -0.968363 0.0626444, -0.336858 -0.88428 0.323381, -0.180783 -0.518327 0.835855, -0.385027 -0.860018 0.334848, + -0.280218 -0.95328 0.112848, -0.34778 -0.935597 0.0608952, 0.99821 3.7322e-009 0.0598054, -0.380396 -0.92281 0.0609923, + -0.341921 0.865378 0.366349, -0.180783 0.518327 0.835855, -0.385027 0.860018 0.334848, -0.250582 0.966164 0.061116, + -0.339812 0.938515 0.0609707, 0.00377641 0.998113 0.0612924, -0.123901 0.990403 0.0612416, -0.0938069 0.993606 0.0628356, + 0.153317 0.986292 0.061016, 0.0337796 0.997461 0.0626974, -0.220605 0.973342 0.0627591, -0.280218 0.95328 0.112848, + -0.380394 0.922811 0.0609919, 0.149675 0.986742 0.0627522, 0.275972 0.959149 0.0622255, 0.380432 0.922812 0.0607442, + 0.279376 0.958247 0.0609257, 0.494856 0.866827 0.0610545, 0.405221 0.912065 0.0627152, 0.624126 0.778847 0.062166, + 0.699754 0.711722 0.0616127, 0.602278 0.795885 0.0618673, 0.717777 0.693563 0.0613758, 0.784753 0.616845 0.0605364, + 0.517704 0.853239 0.062977, 0.859059 0.508354 0.0599487, 0.80049 0.596211 0.0612165, 0.916221 0.395756 0.0625856, + 0.869878 0.489284 0.0625531, 0.925528 0.373444 0.0627515, 0.959391 0.275072 0.0624883, 0.989825 0.128184 0.0617676, + 0.986871 0.149656 0.0607339, 0.965765 0.252078 0.0612777, 0.753464 1.8646e-009 0.657489, 0.742867 -0.0891716 0.663473, + 0.728121 -1.31963e-007 0.685449, 0.704621 -0.140653 0.695504, 0.697671 -0.282568 0.658339, 0.665897 -0.284739 0.689569, + 0.72117 -0.199949 0.663275, 0.653108 -0.362243 0.665004, 0.589937 -0.455486 0.666713, 0.603459 -0.401339 0.689031, + 0.511885 -0.508372 0.692482, 0.537374 -0.525114 0.659912, 0.467772 -0.584052 0.663379, 0.271576 -0.670945 0.689985, + 0.373793 -0.645914 0.665638, 0.300122 -0.687147 0.661631, 0.144704 -0.710485 0.688674, 0.211513 -0.716851 0.664369, + 0.101314 -0.73839 0.66672, 0.392619 -0.604871 0.692807, 0.00481895 -0.721105 0.692809, 0.655747 -0.246534 0.713594, + 0.584251 -0.389672 0.711904, 0.688701 -0.137947 0.711802, 0.701547 -1.15763e-007 0.712623, -0.663146 -0.208383 0.718898, + -0.636459 -0.259125 0.72648, -0.663017 -0.265433 0.699967, 0.408142 -0.570289 0.712875, 0.136944 -0.688065 0.71261, + 0.289607 -0.638676 0.712896, 0.496275 -0.496975 0.711848, -0.672776 -0.145677 0.725362, -0.693626 -0.161363 0.70203, + 0.0184053 -0.749288 0.661988, -0.620422 -0.312907 0.719142, -0.5834 -0.367261 0.724406, -0.609275 -0.360849 0.706096, + -0.075815 -0.744161 0.663684, -0.185581 -0.721542 0.667036, -0.148499 -0.706168 0.692297, -0.279739 -0.667694 0.689877, + -0.114307 -0.692454 0.712349, -0.391851 -0.608281 0.690252, -0.247162 -0.656787 0.712419, -0.419626 -0.613991 0.668528, + -0.474012 -0.549745 0.687818, -0.388012 -0.582452 0.714281, -0.51384 -0.519675 0.682574, -0.53908 -0.486162 0.687779, + -0.492484 -0.485989 0.721993, 0.000174475 -0.701233 0.712932, -0.555038 -0.409649 0.723961, -0.68811 -0.0850738 0.720602, + -0.707108 2.72336e-007 0.707106, -0.694669 2.68691e-007 0.71933, -0.676056 1.51175e-007 0.73685, -0.474012 0.549745 0.687817, + -0.419626 0.613991 0.668528, -0.381951 0.610379 0.693938, -0.406542 0.569235 0.714629, -0.492484 0.485989 0.721993, + -0.51384 0.519675 0.682573, -0.53908 0.486162 0.687779, -0.261476 0.675356 0.689583, -0.18558 0.721542 0.667036, + -0.137259 0.712473 0.688144, -0.136778 0.688089 0.712619, -0.0758143 0.744161 0.663684, -0.0043906 0.723842 0.689951, + 0.0184053 0.749288 0.661988, -0.289594 0.638669 0.712907, -0.68811 0.0850741 0.720601, -0.693626 0.161363 0.702029, + -0.672776 0.145677 0.725362, -0.663146 0.208384 0.718898, -0.636459 0.259126 0.72648, -0.663017 0.265434 0.699966, + -0.620422 0.312907 0.719142, -0.5834 0.367261 0.724406, -0.555038 0.409649 0.723961, -0.609275 0.360849 0.706097, + 0.023321 0.701195 0.712588, 0.101314 0.73839 0.66672, 0.142502 0.704093 0.695663, 0.211513 0.716851 0.664369, + 0.282682 0.670222 0.686217, 0.268346 0.647934 0.712862, 0.300122 0.687147 0.661631, 0.373793 0.645915 0.665637, + 0.400294 0.596588 0.695592, 0.467772 0.584052 0.663379, 0.517085 0.512237 0.685738, 0.537374 0.525114 0.659912, + 0.589937 0.455486 0.666713, 0.673055 0.266897 0.689755, 0.653108 0.362243 0.665004, 0.697672 0.282568 0.658339, + 0.709969 0.12974 0.692179, 0.721171 0.199949 0.663275, 0.742867 0.0891713 0.663473, 0.597856 0.397702 0.69599, + 0.137048 0.688334 0.71233, 0.496582 0.49628 0.712118, 0.388568 0.582776 0.713713, 0.638244 0.290109 0.713079, + 0.683025 0.159693 0.712724, 0.585914 0.389795 0.710468, -9.58895e-008 1.99275e-007 1, -1.09973e-007 7.00386e-008 1, + -1.15983e-007 2.18309e-008 1, -1.1179e-007 4.42241e-008 1, -6.00299e-008 5.83218e-008 1, -1.22716e-007 4.84807e-007 1, + -7.70028e-008 1.42764e-007 1, 1.16626e-016 0 1, -6.78927e-008 5.26951e-007 1, -5.40787e-008 5.73612e-008 1, + -1.46374e-007 7.69517e-007 1, 3.22923e-016 0 1, -1.95296e-007 7.40543e-007 1, -1.01557e-007 3.20141e-008 1, + -1.05167e-007 1.60517e-008 1, 0.00820882 0.134211 0.990919, -9.89364e-008 4.8998e-008 1, 0.00820879 -0.134211 0.990919, + 1.76561e-007 2.06259e-006 -1, -0.00205782 -0.033644 -0.999432, -4.87949e-008 -2.14243e-006 -1, 1.43444e-007 1.72759e-006 -1, + 0 0 -1, -0.00304788 -0.0497469 -0.998757, 7.91869e-008 -1.58413e-007 -1, 7.93328e-008 -1.56035e-007 -1, + 1.43442e-007 -1.72757e-006 -1, 1.76559e-007 -2.06257e-006 -1, -0.00205781 0.0336439 -0.999432, -4.87799e-008 2.14219e-006 -1, + 7.93329e-008 1.56035e-007 -1, 7.91869e-008 1.58413e-007 -1, -0.00304787 0.0497468 -0.998757, -0.999999 0 0.00142936, + -0.5959 0.803026 0.00720909, -0.595585 0.802602 -0.0332851, -0.999991 -0.000903093 -0.00412151, + -0.99999 -0.00180618 -0.00417575, -0.595237 0.802134 0.0476914, -0.999992 0 -0.00406726, -0.99994 -0.0106885 0.00241567, + -0.999952 -0.00978546 -0.00110178, -0.999991 0.000903093 -0.00412151, -0.595237 -0.802134 0.0476914, + -0.595903 -0.803031 0.00634466, -0.59555 -0.802555 -0.035013, -0.999996 0 0.00285872, 0.0610007 -0.997192 -0.0434467, + 0.0610469 -0.997949 0.019245, 0.0609242 -0.996259 0.0612897, 0.0609354 -0.996267 0.0611498, 0.0609436 -0.99627 0.0610851, + 0.0610471 0.997949 0.0192447, 0.0609438 0.99627 0.0610849, 0.0609356 0.996267 0.0611499, 0.0609245 0.996259 0.0612897, + 0.0610022 0.997187 -0.0435489, 0.0610009 0.997192 -0.0434471, 0.0162975 -0.266531 0.963689, 0.0163072 -0.266551 0.963683, + 0.0162997 -0.266169 0.963789, 0.0164288 -0.268787 0.96306, 0.0163544 -0.267496 0.96342, 0.0163146 -0.266561 0.96368, + 0.0162899 -0.265894 0.963865, 0.0163356 -0.267368 0.963456, 0.00548428 -0.1785 0.983925, 0.0163053 -0.266695 0.963643, + 0.000103218 -0.135144 0.990826, -0.0161718 0 0.999869, 0.0163357 0.267368 0.963456, 0.0162997 0.266169 0.963789, + 0.01629 0.265894 0.963865, 0.0163146 0.266561 0.96368, 0.00800953 0.184362 0.982826, -0.00972464 0 0.999953, + 0.00399837 0.145749 0.989314, 0.0165812 0.271104 0.962407, 0.0161274 0.263588 0.964501, 0.0162976 0.266531 0.963689, + 0.0163073 0.26655 0.963683, 0.0164289 0.268786 0.96306, -0.00606536 0.0992353 -0.995046, -0.00402081 0.0658215 -0.997823, + -0.00608844 0.0994764 -0.995021, -0.0060524 0.098554 -0.995113, -0.00607829 0.0989519 -0.995074, + -0.00607953 0.099131 -0.995056, -0.00610614 0.0995473 -0.995014, -0.00150584 0.02462 -0.999696, 1.15022e-007 -6.18447e-008 -1, + 6.93709e-008 -5.55351e-007 -1, 1.17282e-007 -6.09434e-009 -1, 8.86255e-008 -5.33436e-007 -1, -0.00402082 -0.0658215 -0.997823, + 9.02532e-008 -2.88495e-007 -1, -0.00200817 -0.0328322 -0.999459, 6.15595e-008 5.37178e-009 -1, 6.16215e-008 4.22183e-009 -1, + 6.16175e-008 1.69405e-009 -1, 4.67065e-008 -3.7566e-007 -1, 6.08194e-008 -2.97587e-010 -1, 6.41287e-008 -3.94056e-007 -1, + 5.05757e-008 -5.41346e-007 -1, 6.19617e-008 8.40134e-009 -1, 1.13433e-007 -4.88814e-008 -1, -0.00608846 -0.0994764 -0.995021, + -0.00606538 -0.0992353 -0.995046, -0.00607956 -0.099131 -0.995056, -0.00607832 -0.0989519 -0.995074, + -0.00605242 -0.0985541 -0.995113, -0.00610617 -0.0995474 -0.995014, 0.032484 0.0144904 0.999367, 0.0355259 0.0011036 0.999368, + 0.0181613 0.000717407 0.999835, 0.0163823 0.00772174 0.999836, 0.0242827 0.0259563 0.999368, 6.53551e-005 -3.20185e-010 1, + 0.0126896 0.0332637 0.999366, 0.0122595 0.0133823 0.999835, 0.0062659 0.0170241 0.999835, -0.00101559 0.0355736 0.999367, + -0.000716117 0.0181134 0.999836, -0.01455 0.0324659 0.999367, -0.0133609 0.0122543 0.999836, -0.0331243 0.0125812 0.999372, + -0.025886 0.0241822 0.999372, -0.0170382 0.006301 0.999835, -0.0353821 -0.0010693 0.999373, -0.00763643 0.0164038 0.999836, + -0.0181292 -0.000792365 0.999835, -0.0324142 -0.0145035 0.999369, -0.0164207 -0.00767451 0.999836, + -0.0244189 -0.0258477 0.999368, -0.0126358 -0.0332757 0.999366, -0.0122201 -0.0133402 0.999836, + -0.00619236 -0.0170091 0.999836, 0.0011325 -0.0355667 0.999367, 0.000823305 -0.0181033 0.999836, + 0.0146055 -0.0324467 0.999367, 0.0133274 -0.0123112 0.999835, 0.0331822 -0.0125814 0.99937, 0.025884 -0.0243793 0.999368, + 0.0170467 -0.00623858 0.999835, 0.0076951 -0.0164135 0.999836, 0.0633415 0.0247531 0.997685, 0.0680957 -0.0014879 0.997678, + 0.051519 4.88338e-005 0.998672, 0.0465617 0.0467121 0.997823, 0.0476982 0.0197363 0.998667, 0.0379791 0.0351867 0.998659, + 0.0211481 0.0471983 0.998662, 0.00152673 0.0679914 0.997685, 0.0271275 0.0652323 0.997501, 5.57833e-005 0.0516359 0.998666, + -0.0247079 0.0634065 0.997682, -0.0620824 0.0273955 0.997695, -0.0469995 0.0491094 0.997687, -0.0365927 0.036583 0.998661, + -0.0197206 0.0478006 0.998662, -0.0477208 0.0197254 0.998666, -0.0680058 0.00150151 0.997684, + -0.0515187 -2.30833e-005 0.998672, -0.0631794 -0.0247065 0.997696, -0.0466347 -0.0466286 0.997823, + -0.0476651 -0.019814 0.998667, -0.0379868 -0.0350213 0.998664, -0.021107 -0.0472097 0.998662, -0.00141701 -0.0679957 0.997685, + -0.0271156 -0.0653668 0.997493, 6.04372e-005 -0.0516361 0.998666, 0.0247334 -0.063288 0.997689, 0.0622489 -0.0274357 0.997684, + 0.0469645 -0.0492375 0.997682, 0.0364694 -0.0365737 0.998665, 0.0197831 -0.0477812 0.998662, 0.0477015 -0.019772 0.998666, + 0.0996426 0.0202645 0.994817, 0.10165 0.00055872 0.99482, 0.0843026 0.00168908 0.996439, 0.0844483 0.056949 0.994799, + 0.0939388 0.039432 0.994797, 0.077157 0.033891 0.996443, 0.0714884 0.0722604 0.994821, 0.0682217 0.047301 0.996548, + 0.0815438 0.0173509 0.996519, 0.0557513 0.0849408 0.994825, 0.0578979 0.0604859 0.996489, 0.0385616 0.0942609 0.9948, + 0.0450374 0.069733 0.996549, 0.030734 0.0782188 0.996462, 0.0192794 0.0998893 0.994812, -0.0016046 0.0840243 0.996462, + -0.0204199 0.0996631 0.994812, -0.000521862 0.101708 0.994814, -0.0175764 0.0811359 0.996548, -0.039451 0.0937207 0.994817, + 0.0148252 0.081693 0.996547, -0.0472398 0.0683484 0.996543, -0.0722184 0.0714479 0.994826, -0.0568884 0.0839927 0.994841, + -0.0605244 0.0583643 0.996459, -0.0848763 0.0561898 0.994806, -0.0782079 0.0306286 0.996467, -0.0998574 0.0190995 0.994818, + -0.0941368 0.0383812 0.994819, -0.0817697 0.0147419 0.996542, -0.101645 -0.000561279 0.994821, -0.0696492 0.044979 0.996557, + -0.0337234 0.0769717 0.996463, -0.0842992 -0.00168585 0.996439, -0.0996495 -0.0202603 0.994816, + -0.0841018 -0.0570481 0.994823, -0.0939356 -0.039437 0.994797, -0.0767886 -0.0337428 0.996476, -0.0714142 -0.0722598 0.994826, + -0.0681217 -0.047308 0.996555, -0.0812791 -0.0173868 0.99654, -0.0560108 -0.0848831 0.994815, -0.0581994 -0.0606135 0.996463, + -0.0384207 -0.0941681 0.994815, -0.0448711 -0.0697986 0.996551, -0.0306613 -0.0782625 0.996461, -0.019264 -0.0998337 0.994818, + 0.00170716 -0.084019 0.996463, 0.0204728 -0.0996549 0.994811, 0.000629041 -0.101705 0.994814, 0.0175338 -0.0811834 0.996545, + 0.0394582 -0.093864 0.994803, -0.0148702 -0.0817041 0.996546, 0.0471997 -0.0681574 0.996557, 0.0722928 -0.0714528 0.994821, + 0.0569238 -0.0842981 0.994813, 0.0604076 -0.0580471 0.996485, 0.0849463 -0.0558661 0.994818, 0.078577 -0.0307789 0.996433, + 0.0998612 -0.0191017 0.994818, 0.0941334 -0.0383743 0.99482, 0.0820297 -0.0147055 0.996521, 0.0697936 -0.0451598 0.996539, + 0.0337913 -0.0769215 0.996464, 0.133094 0.0268411 0.99074, 0.135395 0.000718935 0.990791, 0.119299 2.65829e-005 0.992858, + 0.124983 0.052268 0.990781, 0.11702 0.0232191 0.992858, 0.0958495 0.0964181 0.990715, 0.112243 0.0758092 0.990785, + 0.0993266 0.0663752 0.992839, 0.0724055 0.112139 0.991051, 0.0847674 0.0844318 0.992817, 0.110221 0.0456802 0.992857, + 0.0680174 0.0980361 0.992856, 0.0471878 0.109686 0.992846, 0.025955 0.133116 0.990761, 0.0502968 0.129416 0.990314, + -0.000468507 0.135678 0.990753, 0.0233812 0.117173 0.992836, -0.0232964 0.117105 0.992846, -0.052469 0.124973 0.990772, + -0.0269505 0.132988 0.990751, -0.0457542 0.110398 0.992834, -0.0758221 0.112503 0.990754, 4.80116e-005 0.119455 0.99284, + -0.0965347 0.0959552 0.990694, -0.0663658 0.0995754 0.992814, -0.11323 0.0752104 0.990718, -0.0843901 0.0842892 0.992861, + -0.0991788 0.0662347 0.992863, -0.125428 0.0512175 0.99078, -0.117038 0.0231602 0.992857, -0.136047 -0.000525058 0.990702, + -0.133564 0.0259856 0.990699, -0.110419 0.045838 0.992828, -0.119303 -2.818e-005 0.992858, -0.133097 -0.02684 0.99074, + -0.125183 -0.0525535 0.990741, -0.11702 -0.0232188 0.992858, -0.0955309 -0.0964089 0.990747, -0.112769 -0.0759882 0.990711, + -0.0993207 -0.0663775 0.992839, -0.0723499 -0.112153 0.991054, -0.0844179 -0.0844988 0.992841, -0.110221 -0.0456795 0.992857, + -0.0682276 -0.0980712 0.992838, -0.0472971 -0.109752 0.992833, -0.0259025 -0.133122 0.990761, -0.0504923 -0.129335 0.990315, + 0.000576851 -0.135677 0.990753, -0.02333 -0.117178 0.992837, 0.0233533 -0.117097 0.992846, 0.0523879 -0.125191 0.990749, + 0.0270043 -0.13298 0.990751, 0.0456272 -0.110323 0.992848, 0.0758931 -0.112499 0.990749, 6.11867e-005 -0.119454 0.99284, + 0.0963144 -0.0956153 0.990748, 0.0662926 -0.0992827 0.992849, 0.11287 -0.0747691 0.990793, 0.0845494 -0.0846401 0.992818, + 0.0994372 -0.0662244 0.992838, 0.125435 -0.0512226 0.990779, 0.117023 -0.0231508 0.992859, 0.133218 -0.0261489 0.990742, + 0.110419 -0.0458369 0.992828, 0.165646 0.0332261 0.985625, 0.168866 0.000519808 0.985639, 0.151762 2.07725e-006 0.988417, + 0.155377 0.0649103 0.98572, 0.148695 0.0295434 0.988442, 0.119049 0.119747 0.985641, 0.139854 0.0944764 0.985655, + 0.126102 0.0844658 0.988415, 0.0901715 0.139633 0.986089, 0.107156 0.107318 0.988433, 0.140072 0.057895 0.988447, + 0.0869246 0.124468 0.988409, 0.0600686 0.139511 0.988397, 0.0324884 0.165547 0.985667, 0.0624203 0.160462 0.985066, + -0.000522539 0.168611 0.985683, 0.029618 0.148803 0.988423, -0.0296177 0.148821 0.98842, -0.0650909 0.155511 0.985687, + -0.0334824 0.165293 0.985676, -0.0581834 0.140389 0.988385, -0.0941196 0.13989 0.985684, 5.76339e-005 0.151719 0.988424, + -0.119562 0.118957 0.985675, -0.0844094 0.126187 0.988409, -0.140372 0.0929715 0.985724, -0.10726 0.10719 0.988436, + -0.126399 0.0846758 0.988359, -0.156309 0.0642864 0.985614, -0.148708 0.0292873 0.988447, -0.168226 -0.000709435 0.985748, + -0.165718 0.0325592 0.985636, -0.140498 0.0583437 0.98836, -0.151824 -6.61016e-006 0.988408, -0.16523 -0.0335263 0.985685, + -0.156044 -0.0650391 0.985606, -0.149321 -0.0294486 0.98835, -0.118641 -0.119468 0.985724, -0.13972 -0.0941677 0.985703, + -0.126142 -0.0845384 0.988403, -0.0901454 -0.13969 0.986084, -0.10759 -0.107493 0.988367, -0.140273 -0.0581394 0.988404, + -0.0867931 -0.124556 0.988409, -0.060209 -0.139452 0.988397, -0.0324352 -0.165553 0.985667, -0.0626132 -0.160381 0.985067, + 0.000630093 -0.16861 0.985683, -0.0295675 -0.14881 0.988424, 0.0296732 -0.148814 0.98842, 0.0650128 -0.155732 0.985658, + 0.0335358 -0.165286 0.985675, 0.0580398 -0.140285 0.988409, 0.0941565 -0.139837 0.985688, 5.03467e-005 -0.151719 0.988424, + 0.119612 -0.118649 0.985706, 0.0844159 -0.126182 0.988409, 0.140494 -0.0938078 0.985627, 0.107494 -0.107636 0.988362, + 0.126035 -0.0845901 0.988413, 0.156091 -0.0638291 0.985678, 0.148995 -0.0296879 0.988392, 0.165506 -0.0321186 0.985686, + 0.139897 -0.057531 0.988493, 0.181594 0.0300622 0.982914, 0.18444 -0.00620709 0.982824, 0.184807 -0.000110056 0.982775, + 0.17309 0.0649681 0.982761, 0.181313 0.0359784 0.982767, 0.135026 0.126612 0.982719, 0.157178 0.0980919 0.982687, + 0.153758 0.103192 0.982705, 0.102928 0.15416 0.98267, 0.130941 0.131016 0.982695, 0.171358 0.0707104 0.982668, + 0.106253 0.152266 0.982612, 0.0732802 0.170283 0.982667, 0.0421512 0.180273 0.982713, 0.0709788 0.171098 0.982694, + 0.00611859 0.185199 0.982682, 0.0362509 0.181743 0.982678, -0.0361773 0.181887 0.982654, -0.0652657 0.17352 0.982665, + -0.0301916 0.182945 0.98266, -0.0709382 0.17133 0.982656, -0.097873 0.157668 0.98263, 4.28642e-005 0.185377 0.982668, + -0.126618 0.135272 0.982685, -0.10285 0.153986 0.982706, -0.150523 0.107742 0.982718, -0.130823 0.130866 0.982731, + -0.154047 0.102743 0.982707, -0.168983 0.0762474 0.982665, -0.181835 0.0365617 0.982649, -0.185043 0.00626696 0.98271, + -0.180634 0.0424542 0.982634, -0.171377 0.0708412 0.982655, -0.18515 -8.67816e-005 0.98271, -0.182872 -0.030649 0.982659, + -0.173683 -0.0652077 0.98264, -0.181856 -0.0364467 0.98265, -0.135027 -0.126612 0.982719, -0.157472 -0.0975485 0.982694, + -0.154015 -0.10276 0.98271, -0.102929 -0.15416 0.98267, -0.130941 -0.131016 0.982695, -0.171397 -0.0708069 0.982654, + -0.105875 -0.15199 0.982695, -0.0732793 -0.17023 0.982676, -0.0421252 -0.180564 0.982661, -0.0708442 -0.171153 0.982694, + -0.00609035 -0.185265 0.98267, -0.0362477 -0.181874 0.982653, 0.0362481 -0.181743 0.982678, 0.0653039 -0.173312 0.9827, + 0.030258 -0.182664 0.98271, 0.0709381 -0.17133 0.982657, 0.097873 -0.157668 0.98263, 4.45144e-005 -0.185344 0.982674, + 0.126618 -0.135271 0.982685, 0.102979 -0.154341 0.982636, 0.150358 -0.107987 0.982716, 0.131048 -0.130938 0.982691, + 0.153812 -0.103151 0.982701, 0.168696 -0.0767954 0.982672, 0.181362 -0.0357433 0.982767, 0.179487 -0.0415314 0.982883, + 0.170943 -0.0708611 0.982729, 0.986512 0.161759 0.0250615, 0.999164 -0.0323825 0.0249411, 0.99969 -3.41036e-005 0.0249038, + 0.93557 0.352164 0.0262485, 0.980605 0.194342 0.0253984, 0.729802 0.683002 0.0299556, 0.848664 0.528194 0.0279562, + 0.830806 0.555815 0.0288395, 0.554889 0.831421 0.0289462, 0.706657 0.706889 0.0307029, 0.923317 0.3831 0.0268318, + 0.999167 0.0323829 0.0248405, 0.973606 0.226782 0.0257036, 0.812043 0.582843 0.0296767, 0.571284 0.820155 0.0313132, + 0.682769 0.729969 0.031158, 0.910014 0.413666 0.0274776, 0.395409 0.918093 0.0275297, 0.227398 0.973502 0.0241697, + 0.381934 0.923905 0.0229383, 0.0329111 0.999123 0.0258895, 0.195317 0.980395 0.0260077, -0.195002 0.980447 0.0264033, + -0.352533 0.935511 0.0232265, -0.162527 0.986387 0.0250315, -0.382773 0.923463 0.0264847, -0.528139 0.848939 0.0192727, + 0.000257017 0.999673 0.0255557, -0.682519 0.730726 0.0144173, -0.55529 0.831303 0.0242626, 0.352463 0.93538 0.0288912, + -0.812681 0.582254 0.0230118, -0.7063 0.707481 0.0247359, -0.832111 0.55386 0.0288311, -0.911542 0.410291 0.0274337, + -0.980068 0.197035 0.0253918, -0.999104 0.0341771 0.0249638, -0.973268 0.228226 0.025728, -0.924204 0.380954 0.0268663, + 0.527434 0.849005 0.0316898, -0.0325675 0.999131 0.0260053, -0.22714 0.973395 0.0301661, 0.163156 0.986273 0.0253946, + -0.412483 0.910448 0.0306995, -0.581836 0.812713 0.0310524, -0.729341 0.683492 0.0300215, -0.935936 0.351195 0.0261739, + -0.99969 3.5958e-005 0.0249126, -0.985881 0.165566 0.0250248, -0.849974 0.526068 0.0282272, -0.999107 -0.0341776 0.0248325, + -0.985928 -0.165279 0.025063, -0.936123 -0.350692 0.0262474, -0.980082 -0.196962 0.0253898, -0.729058 -0.684208 0.0182573, + -0.84961 -0.52667 0.0279506, -0.831808 -0.554472 0.025624, -0.555566 -0.831276 0.0180992, -0.706812 -0.707052 0.0222254, + -0.924223 -0.38091 0.0268182, -0.973202 -0.22851 0.0256948, -0.812958 -0.581565 0.0296798, -0.571375 -0.820283 0.0258115, + -0.682769 -0.729969 0.0311632, -0.911322 -0.410779 0.0274583, -0.395761 -0.91799 0.0258526, -0.227231 -0.973541 0.0241707, + -0.3831 -0.923422 0.0229264, -0.0323955 -0.99914 0.0258899, -0.194798 -0.980455 0.0276112, 0.195179 -0.980454 0.0247965, + 0.351749 -0.935806 0.0232338, 0.162867 -0.986331 0.02503, 0.38261 -0.923508 0.0272467, 0.527297 -0.849204 0.0284637, + 0.000171759 -0.999663 0.0259577, 0.683254 -0.729508 0.031351, 0.55517 -0.831141 0.0314807, -0.351952 -0.935495 0.0312962, + 0.81244 -0.582302 0.0294205, 0.706673 -0.70688 0.0305732, 0.830796 -0.555829 0.0288315, 0.910238 -0.413176 0.0274439, + 0.98059 -0.194418 0.0253962, 0.973671 -0.2265 0.0257305, 0.923297 -0.383145 0.0268772, -0.527434 -0.849004 0.0317025, + 0.0327357 -0.999146 0.0251945, 0.227668 -0.973365 0.0269636, -0.162455 -0.986302 0.0285951, 0.412956 -0.910234 0.0306963, + 0.581835 -0.812714 0.0310435, 0.729343 -0.68349 0.0300215, 0.935382 -0.352669 0.0261898, 0.986466 -0.162044 0.0250381, + 0.848303 -0.528758 0.0282273, -0.633861 0.773022 0.0256393, -0.47086 0.881843 0.0253848, -0.499517 0.865904 0.0263376, + -0.772799 0.633994 0.02887, -0.659162 0.751515 0.0270306, -0.956572 0.29024 0.0270506, -0.881555 0.47119 0.0289904, + -0.896633 0.441952 0.0269932, -0.997513 0.0655323 0.0259318, -0.965452 0.259217 0.0266291, -0.793156 0.608429 0.0268063, + -0.527606 0.849057 0.0270799, -0.683535 0.729491 0.0249592, -0.910707 0.41214 0.0274638, -0.996002 0.0854816 0.025921, + -0.973345 0.227834 0.0262835, -0.812723 0.582122 0.0248306, -0.992768 -0.117214 0.0259393, -0.956612 -0.290155 0.0265146, + -0.991044 -0.131033 0.0257281, -0.881612 -0.471136 0.0281182, -0.946504 -0.321554 0.027091, -0.751454 -0.659261 0.026318, + -0.633938 -0.772938 0.026254, -0.772962 -0.633936 0.0255756, -0.608349 -0.793209 0.0270478, -0.471507 -0.881489 0.0256745, + -0.865975 -0.499457 0.0251063, -0.290659 -0.956462 0.0264149, -0.442528 -0.896393 0.0254726, -0.986175 -0.163621 0.0262306, + -0.0978766 -0.994812 0.027754, -0.258701 -0.965583 0.0269018, -0.065204 -0.997516 0.0266669, 0.0980129 -0.994826 0.0267365, + 0.32134 -0.946598 0.0263129, 0.47086 -0.881843 0.0253848, 0.290172 -0.956594 0.0269929, 0.130503 -0.991105 0.0260726, + -0.999141 0.0324734 0.0257563, -0.849052 -0.527746 0.0243793, -0.729003 -0.683888 0.0291758, -0.93564 -0.352076 0.0249275, + -0.582485 -0.812432 0.02579, -0.41274 -0.910494 0.0254254, -0.226712 -0.973607 0.0262875, 0.163129 -0.986266 0.0258697, + 0.499516 -0.865904 0.0263377, 0.35218 -0.935543 0.0270035, -0.0326197 -0.999139 0.0256331, 0.527606 -0.849057 0.0270802, + 0.633861 -0.773022 0.0256398, 0.772799 -0.633994 0.0288702, 0.659162 -0.751515 0.0270311, 0.956571 -0.29024 0.0270532, + 0.881555 -0.471189 0.0289954, 0.896633 -0.441951 0.0269957, 0.997513 -0.0655323 0.0259318, 0.965452 -0.259217 0.0266291, + 0.793156 -0.608428 0.0268076, 0.683535 -0.729491 0.0249597, 0.910707 -0.412139 0.0274638, 0.996002 -0.0854816 0.025921, + 0.973345 -0.227834 0.0262835, 0.812723 -0.582121 0.0248306, 0.992768 0.117214 0.0259393, 0.956613 0.290154 0.0265146, + 0.991044 0.131033 0.0257281, 0.881613 0.471135 0.0281182, 0.946504 0.321553 0.027091, 0.751454 0.659261 0.0263191, + 0.633938 0.772938 0.026254, 0.772962 0.633936 0.0255756, 0.608349 0.793209 0.0270478, 0.471507 0.881489 0.0256745, + 0.865975 0.499457 0.0251087, 0.290659 0.956462 0.0264149, 0.442528 0.896393 0.0254726, 0.986175 0.163621 0.0262306, + 0.0978766 0.994812 0.027754, 0.258701 0.965583 0.0269018, 0.065204 0.997516 0.0266669, -0.0980129 0.994826 0.0267365, + -0.32134 0.946598 0.0263129, -0.290172 0.956594 0.0269929, -0.130503 0.991105 0.0260726, 0.999141 -0.0324734 0.0257563, + 0.849053 0.527745 0.024384, 0.729004 0.683888 0.0291758, 0.93564 0.352075 0.02493, 0.582485 0.812432 0.02579, + 0.41274 0.910494 0.0254254, 0.226712 0.973607 0.0262875, -0.163129 0.986266 0.0258697, -0.35218 0.935543 0.0270035, + 0.0326197 0.999139 0.0256331, -0.104531 0.127431 0.986324, -0.0776536 0.145502 0.986306, -0.0828058 0.143623 0.986162, + -0.127342 0.104423 0.986347, -0.109188 0.124428 0.986203, -0.157584 0.0479348 0.986342, -0.145201 0.0775343 0.98636, + -0.148696 0.0733814 0.986157, -0.163942 0.0107681 0.986411, -0.160064 0.0429769 0.986171, -0.131359 0.100731 0.986204, + -0.0761442 0.130771 0.988484, -0.100212 0.113454 0.988477, -0.136072 0.066567 0.98846, -0.165173 0.014102 0.986164, + -0.146377 0.0386273 0.988474, -0.120512 0.0918859 0.98845, -0.16424 -0.0193363 0.986231, -0.157541 -0.0477622 0.986357, + -0.163028 -0.0216054 0.986385, -0.145265 -0.0775354 0.98635, -0.156871 -0.0531127 0.98619, -0.124548 -0.109314 0.986174, + -0.104551 -0.127389 0.986327, -0.127469 -0.104709 0.9863, -0.100994 -0.131484 0.98616, -0.0777418 -0.145228 0.986339, + -0.143577 -0.0827557 0.986173, -0.0478556 -0.157722 0.986323, -0.0734058 -0.148636 0.986164, -0.152894 -0.0235162 0.987963, + -0.0161439 -0.163941 0.986338, -0.0428764 -0.160009 0.986184, -0.0108641 -0.165307 0.986182, 0.0161404 -0.163902 0.986345, + 0.0532334 -0.156984 0.986165, 0.0776536 -0.145502 0.986306, 0.047853 -0.157658 0.986334, 0.0216181 -0.164259 0.98618, + -0.149186 0.00740942 0.988781, -0.130947 -0.0760674 0.988467, -0.113477 -0.100291 0.988466, -0.143379 -0.0491 0.988449, + -0.0919248 -0.120451 0.988454, -0.0664868 -0.136011 0.988474, -0.0386452 -0.146381 0.988473, 0.0202928 -0.150093 0.988464, + 0.0828058 -0.143623 0.986162, 0.0491271 -0.143326 0.988455, -0.00941489 -0.15118 0.988461, 0.0761442 -0.130771 0.988484, + 0.104531 -0.127431 0.986324, 0.127342 -0.104423 0.986347, 0.109188 -0.124428 0.986203, 0.157584 -0.0479348 0.986342, + 0.145201 -0.0775341 0.98636, 0.148696 -0.0733812 0.986157, 0.163942 -0.010768 0.986411, 0.160064 -0.0429769 0.986171, + 0.131359 -0.100731 0.986204, 0.100212 -0.113454 0.988477, 0.136072 -0.066567 0.98846, 0.165173 -0.014102 0.986164, + 0.146377 -0.0386273 0.988474, 0.120512 -0.0918856 0.98845, 0.16424 0.0193365 0.986231, 0.15754 0.0477624 0.986357, + 0.163028 0.0216054 0.986385, 0.145265 0.0775354 0.98635, 0.15687 0.0531133 0.98619, 0.124548 0.109314 0.986174, + 0.104551 0.127389 0.986327, 0.127469 0.104709 0.9863, 0.100994 0.131484 0.98616, 0.0777412 0.145229 0.986339, + 0.143577 0.0827556 0.986173, 0.0478556 0.157722 0.986323, 0.0734053 0.148637 0.986164, 0.152894 0.0235169 0.987963, + 0.016144 0.163941 0.986338, 0.0428765 0.160009 0.986184, 0.0108641 0.165307 0.986182, -0.0161404 0.163902 0.986345, + -0.0532334 0.156984 0.986165, -0.047853 0.157658 0.986334, -0.0216181 0.164259 0.98618, 0.149186 -0.00740942 0.988781, + 0.130948 0.0760672 0.988467, 0.113477 0.100291 0.988466, 0.143379 0.0491007 0.988449, 0.0919243 0.120451 0.988454, + 0.0664869 0.136012 0.988474, 0.0386451 0.146382 0.988473, -0.0202928 0.150093 0.988464, -0.0491271 0.143326 0.988455, + 0.00941485 0.15118 0.988461, -0.0675351 0.116804 0.990856, -0.0890005 0.101435 0.990853, -0.120897 0.0595699 0.990876, + -0.130457 0.0350049 0.990836, -0.106973 0.0820009 0.990875, -0.0603247 0.103551 0.992793, -0.079367 0.089725 0.992799, + -0.10776 0.0527272 0.992778, -0.13435 0.0115063 0.990867, -0.115911 0.0306453 0.992787, -0.0953857 0.0726452 0.992786, + -0.134302 -0.0158358 0.990814, -0.127788 -0.0434114 0.990851, -0.101426 -0.0889786 0.990856, -0.0821026 -0.107008 0.990862, + -0.11668 -0.0674184 0.990879, -0.0596081 -0.120998 0.990861, -0.121037 -0.0187139 0.992472, -0.0348809 -0.130396 0.990848, + -0.0087656 -0.134655 0.990854, 0.0434112 -0.127783 0.990852, 0.0176512 -0.133798 0.990851, -0.117601 0.00578631 0.993044, + -0.103641 -0.0603276 0.992784, -0.0898243 -0.0793764 0.99279, -0.113343 -0.0389192 0.992793, -0.0725249 -0.0952787 0.992805, + -0.0526461 -0.107683 0.99279, -0.0305957 -0.115917 0.992788, 0.0160778 -0.118775 0.992791, 0.0675351 -0.116804 0.990856, + 0.0389912 -0.113278 0.992798, -0.00734857 -0.119611 0.992794, 0.0603246 -0.103551 0.992793, 0.0890005 -0.101435 0.990853, + 0.120897 -0.0595699 0.990876, 0.130457 -0.0350049 0.990836, 0.106973 -0.0820008 0.990875, 0.0793669 -0.0897248 0.992799, + 0.10776 -0.0527272 0.992778, 0.13435 -0.0115063 0.990867, 0.115911 -0.0306453 0.992787, 0.0953857 -0.0726451 0.992786, + 0.134302 0.0158364 0.990814, 0.127788 0.0434121 0.990851, 0.101426 0.0889784 0.990856, 0.0821026 0.107009 0.990862, + 0.11668 0.0674183 0.990879, 0.059608 0.120999 0.990861, 0.121036 0.0187147 0.992472, 0.0348802 0.130397 0.990848, + 0.00876558 0.134655 0.990854, -0.0434112 0.127783 0.990852, -0.0176512 0.133798 0.990851, 0.117601 -0.00578607 0.993044, + 0.103641 0.0603276 0.992784, 0.0898242 0.0793763 0.99279, 0.113342 0.0389196 0.992794, 0.0725249 0.0952786 0.992805, + 0.0526455 0.107683 0.99279, 0.0305948 0.115917 0.992788, -0.0160777 0.118775 0.992791, -0.0389912 0.113278 0.992798, + 0.00734856 0.119611 0.992794, -0.0529963 0.091752 0.994371, -0.0698848 0.0796293 0.994372, -0.0950834 0.0469425 0.994362, + -0.102348 0.0274075 0.994371, -0.0840928 0.0645781 0.994363, -0.0458544 0.0783332 0.995872, -0.0602408 0.0680442 0.995862, + -0.0817561 0.039747 0.99586, -0.105725 0.00897602 0.994355, -0.0879454 0.0230607 0.995858, -0.0724097 0.0550184 0.995856, + -0.105318 -0.0123465 0.994362, -0.10049 -0.0340254 0.994356, -0.0795131 -0.0698881 0.994381, -0.064562 -0.0840266 0.99437, + -0.091714 -0.0529877 0.994375, -0.0468876 -0.0949512 0.994377, -0.0899918 -0.0123504 0.995866, -0.0273932 -0.102281 0.994378, + -0.00692358 -0.105698 0.994374, 0.0340538 -0.100306 0.994374, 0.013817 -0.105012 0.994375, -0.0907414 0.00535927 0.99586, + -0.0783869 -0.0458924 0.995866, -0.0680189 -0.0603442 0.995857, -0.0858051 -0.0296399 0.995871, + -0.0549126 -0.0723774 0.995865, -0.0396989 -0.0816318 0.995872, -0.0230061 -0.0878154 0.995871, 0.012345 -0.0899846 0.995867, + 0.0529963 -0.0917519 0.994371, 0.0296551 -0.0858291 0.995869, -0.00547721 -0.0906677 0.995866, 0.0458544 -0.0783332 0.995872, + 0.0698848 -0.0796293 0.994372, 0.0950834 -0.0469425 0.994362, 0.102348 -0.0274075 0.994371, 0.0840928 -0.0645781 0.994363, + 0.0602408 -0.0680442 0.995862, 0.0817561 -0.039747 0.99586, 0.105725 -0.0089753 0.994355, 0.0879454 -0.0230607 0.995858, + 0.0724096 -0.0550184 0.995856, 0.105317 0.0123474 0.994362, 0.10049 0.0340254 0.994356, 0.0795131 0.0698881 0.994381, + 0.064562 0.0840265 0.99437, 0.091714 0.0529877 0.994375, 0.0468868 0.0949514 0.994377, 0.0899913 0.0123511 0.995866, + 0.0273929 0.102282 0.994378, 0.00692329 0.105698 0.994374, -0.0340537 0.100306 0.994374, -0.0138169 0.105012 0.994375, + 0.0907406 -0.0053578 0.99586, 0.0783869 0.0458924 0.995866, 0.0680189 0.0603442 0.995857, 0.0858051 0.0296399 0.995871, + 0.0549126 0.0723774 0.995865, 0.0396987 0.0816323 0.995872, 0.0230067 0.0878171 0.995871, -0.0123454 0.0899851 0.995867, + -0.029655 0.0858291 0.995869, 0.00547625 0.090669 0.995866, -0.0390899 0.0647509 0.997136, -0.060858 0.0447826 0.997141, + -0.0675099 0.0319236 0.997208, -0.0501416 0.0554231 0.997203, -0.0292188 0.0532477 0.998154, -0.0733631 0.0181144 0.997141, + -0.0473824 0.0380079 0.998154, -0.0745901 0.00358049 0.997208, -0.0748115 -0.0112945 0.997134, -0.0647232 -0.0390776 0.997138, + -0.0553789 -0.0502128 0.997202, -0.0703325 -0.0251697 0.997206, -0.0319165 -0.067611 0.997201, -0.0181383 -0.0734486 0.997134, + 0.0113501 -0.0747546 0.997137, 0.0251768 -0.0703269 0.997206, -0.00367036 -0.0746312 0.997204, -0.0448665 -0.0609999 0.997129, + -0.056792 0.0151967 0.99827, -0.0626877 -0.00826392 0.997999, -0.0531823 -0.0291744 0.998159, -0.0379923 -0.0473832 0.998154, + -0.0169537 -0.0583347 0.998153, 0.0066437 -0.0603706 0.998154, 0.0292182 -0.0532467 0.998154, 0.0390899 -0.0647509 0.997136, + 0.0608572 -0.044782 0.997141, 0.0675088 -0.031923 0.997208, 0.0501414 -0.0554225 0.997203, 0.0733618 -0.0181131 0.997141, + 0.0473816 -0.0380067 0.998154, 0.074589 -0.0035792 0.997208, 0.0748115 0.0112945 0.997134, 0.0647232 0.0390776 0.997138, + 0.0553789 0.0502128 0.997202, 0.0703325 0.0251697 0.997206, 0.0319179 0.0676106 0.997201, 0.0181389 0.0734489 0.997134, + -0.0113512 0.0747555 0.997137, -0.0251772 0.0703274 0.997206, 0.00366881 0.0746321 0.997204, 0.0448665 0.0609999 0.997129, + 0.0567913 -0.0151961 0.99827, 0.0626877 0.00826392 0.997999, 0.0531823 0.0291744 0.998159, 0.0379923 0.0473832 0.998154, + 0.0169537 0.0583337 0.998153, -0.00664464 0.0603713 0.998154, -0.0227193 0.0393713 0.998966, -0.0360295 0.0276696 0.998968, + -0.0159806 0.0257175 0.999542, -0.0434367 0.0134295 0.998966, -0.0246194 0.0175963 0.999542, -0.0452261 -0.00465697 0.998966, + -0.0393815 -0.022684 0.998967, -0.0117768 -0.0438925 0.998967, -0.027628 -0.0360262 0.998969, 0.0059489 -0.0450619 0.998967, + -0.0295068 0.00681041 0.999541, -0.0256657 -0.0160023 0.999543, -0.0298753 -0.00491967 0.999542, + -0.0176347 -0.0246041 0.999542, -0.0068618 -0.0294762 0.999542, 0.0227192 -0.0393704 0.998966, 0.00496326 -0.0298495 0.999542, + 0.0159806 -0.0257175 0.999542, 0.0360295 -0.0276696 0.998968, 0.0434367 -0.0134294 0.998966, 0.0246194 -0.0175963 0.999542, + 0.0452261 0.00465697 0.998966, 0.0393815 0.022684 0.998967, 0.0117768 0.0438925 0.998967, 0.027628 0.0360262 0.998969, + -0.0059493 0.0450623 0.998966, 0.0295068 -0.00681041 0.999541, 0.0256657 0.0160023 0.999543, 0.0298753 0.00491967 0.999542, + 0.0176347 0.0246041 0.999542, 0.0068618 0.0294762 0.999542, -0.00496326 0.0298495 0.999542, -0.00807254 0.0127745 0.999886, + -0.0123501 0.00868508 0.999886, -3.20181e-010 5.82147e-011 1, -0.0147542 0.00339048 0.999885, -0.014917 -0.00250772 0.999886, + -0.012792 -0.00808877 0.999885, -0.00331006 -0.0147494 0.999886, 0.0025711 -0.0148952 0.999886, + -0.00870789 -0.0123541 0.999886, 0.00807254 -0.0127745 0.999886, 0.0123501 -0.00868508 0.999886, + 0.0147542 -0.00339048 0.999885, 0.014917 0.00250772 0.999886, 0.012792 0.00808877 0.999885, 0.00331006 0.0147494 0.999886, + -0.0025711 0.0148952 0.999886, 0.00870789 0.0123541 0.999886] + } + coordIndex [ + 534, 40, 4, -1,393, 23, 22, -1,394, 22, 21, -1,40, 534, 3, -1,39, 535, 4, -1,396, + 20, 19, -1,398, 18, 17, -1,18, 397, 19, -1,536, 5, 38, -1,20, 395, 21, -1,535, 39, + 5, -1,23, 393, 24, -1,393, 394, 26, -1,394, 395, 27, -1,22, 394, 393, -1,20, 396, + 395, -1,396, 397, 29, -1,18, 398, 397, -1,398, 399, 31, -1,30, 397, 398, -1,19, 397, + 396, -1,28, 395, 396, -1,21, 395, 394, -1,399, 398, 17, -1,400, 399, 16, -1,17, 16, + 399, -1,14, 13, 400, -1,15, 400, 16, -1,400, 15, 14, -1,536, 38, 6, -1,399, 400, + 32, -1,36, 538, 37, -1,25, 24, 393, -1,537, 6, 37, -1,26, 394, 27, -1,27, 395, 28, -1, + 34, 539, 10, -1,13, 12, 33, -1,11, 33, 12, -1,28, 396, 29, -1,25, 393, 26, -1,29, + 397, 30, -1,30, 398, 31, -1,32, 400, 33, -1,11, 34, 33, -1,400, 13, 33, -1,31, 399, + 32, -1,35, 34, 10, -1,36, 8, 538, -1,39, 38, 5, -1,0, 3, 1, -1,3, 2, 1, -1,35, 9, + 8, -1,537, 37, 7, -1,8, 36, 35, -1,538, 7, 37, -1,3, 0, 40, -1,4, 40, 39, -1,37, + 6, 38, -1,35, 10, 9, -1,539, 34, 11, -1,540, 52, 67, -1,48, 47, 401, -1,49, 48, 401, -1, + 47, 402, 401, -1,401, 402, 68, -1,401, 50, 49, -1,403, 69, 402, -1,46, 402, 47, -1, + 56, 541, 64, -1,403, 46, 45, -1,404, 45, 44, -1,65, 541, 55, -1,542, 64, 57, -1,406, + 43, 42, -1,543, 63, 58, -1,408, 41, 23, -1,41, 407, 42, -1,43, 405, 44, -1,45, 404, + 403, -1,403, 404, 70, -1,404, 405, 71, -1,44, 405, 404, -1,42, 407, 406, -1,406, + 407, 73, -1,23, 24, 408, -1,408, 24, 75, -1,74, 407, 408, -1,41, 408, 407, -1,72, + 405, 406, -1,43, 406, 405, -1,403, 402, 46, -1,542, 56, 64, -1,59, 61, 545, -1,2, + 60, 1, -1,58, 62, 544, -1,61, 60, 545, -1,57, 64, 63, -1,55, 54, 66, -1,1, 60, 0, -1, + 62, 59, 544, -1,60, 61, 0, -1,59, 62, 61, -1,55, 66, 65, -1,64, 541, 65, -1,58, 63, + 62, -1,53, 66, 54, -1,66, 53, 67, -1,68, 67, 52, -1,68, 51, 50, -1,68, 402, 69, -1, + 68, 52, 51, -1,403, 70, 69, -1,67, 53, 540, -1,70, 404, 71, -1,71, 405, 72, -1,73, + 407, 74, -1,75, 24, 25, -1,74, 408, 75, -1,72, 406, 73, -1,68, 50, 401, -1,57, 63, + 543, -1,113, 112, 111, -1,410, 110, 109, -1,411, 109, 108, -1,547, 546, 81, -1,111, + 110, 548, -1,546, 78, 81, -1,115, 548, 110, -1,412, 107, 106, -1,106, 105, 413, -1, + 549, 550, 111, -1,111, 550, 114, -1,104, 103, 415, -1,103, 102, 416, -1,414, 105, + 104, -1,107, 412, 108, -1,116, 115, 409, -1,549, 111, 548, -1,110, 410, 409, -1,115, + 110, 409, -1,101, 100, 418, -1,100, 99, 419, -1,412, 411, 108, -1,47, 410, 411, -1, + 47, 411, 412, -1,102, 101, 417, -1,109, 411, 410, -1,420, 99, 98, -1,410, 48, 409, -1, + 114, 113, 111, -1,421, 98, 97, -1,423, 96, 95, -1,424, 95, 94, -1,96, 422, 97, -1, + 426, 93, 92, -1,427, 92, 91, -1,429, 90, 89, -1,430, 89, 88, -1,90, 428, 91, -1,93, + 425, 94, -1,432, 87, 86, -1,84, 83, 435, -1,83, 82, 436, -1,434, 85, 84, -1,80, 79, + 81, -1,82, 81, 78, -1,79, 547, 81, -1,77, 82, 78, -1,437, 82, 77, -1,431, 88, 87, -1, + 86, 85, 433, -1,106, 413, 412, -1,105, 414, 413, -1,45, 413, 414, -1,103, 416, 415, -1, + 44, 415, 416, -1,44, 416, 417, -1,102, 417, 416, -1,415, 45, 414, -1,104, 415, 414, -1, + 100, 419, 418, -1,43, 418, 419, -1,42, 419, 420, -1,99, 420, 419, -1,97, 422, 421, -1, + 41, 421, 422, -1,23, 422, 423, -1,96, 423, 422, -1,421, 41, 420, -1,98, 421, 420, -1, + 418, 43, 417, -1,101, 418, 417, -1,410, 47, 48, -1,46, 412, 413, -1,46, 413, 45, -1, + 415, 44, 45, -1,419, 42, 43, -1,43, 44, 417, -1,420, 41, 42, -1,41, 422, 23, -1,423, + 424, 23, -1,22, 23, 424, -1,46, 47, 412, -1,409, 48, 116, -1,95, 424, 423, -1,93, + 426, 425, -1,22, 425, 426, -1,91, 428, 427, -1,20, 427, 428, -1,20, 428, 429, -1, + 90, 429, 428, -1,427, 21, 426, -1,92, 427, 426, -1,88, 431, 430, -1,19, 430, 431, -1, + 18, 431, 432, -1,87, 432, 431, -1,85, 434, 433, -1,17, 433, 434, -1,16, 434, 435, -1, + 84, 435, 434, -1,433, 18, 432, -1,86, 433, 432, -1,430, 19, 429, -1,89, 430, 429, -1, + 21, 427, 20, -1,20, 429, 19, -1,18, 433, 17, -1,17, 434, 16, -1,19, 431, 18, -1,82, + 437, 436, -1,15, 436, 437, -1,437, 77, 76, -1,76, 15, 437, -1,16, 436, 15, -1,436, + 16, 435, -1,22, 426, 21, -1,22, 424, 425, -1,83, 436, 435, -1,94, 425, 424, -1,438, + 124, 140, -1,124, 438, 125, -1,438, 126, 125, -1,123, 141, 553, -1,112, 127, 439, -1, + 111, 112, 440, -1,110, 111, 440, -1,438, 439, 126, -1,439, 127, 126, -1,440, 439, + 138, -1,440, 112, 439, -1,440, 441, 110, -1,439, 438, 139, -1,441, 109, 110, -1,441, + 440, 137, -1,118, 120, 119, -1,144, 121, 120, -1,122, 551, 142, -1,144, 118, 117, -1, + 123, 552, 141, -1,120, 118, 144, -1,144, 143, 121, -1,551, 143, 142, -1,552, 142, + 141, -1,122, 142, 552, -1,553, 141, 124, -1,140, 124, 141, -1,138, 439, 139, -1,140, + 139, 438, -1,138, 137, 440, -1,121, 143, 551, -1,137, 442, 441, -1,442, 108, 109, -1, + 442, 107, 108, -1,107, 443, 106, -1,442, 443, 107, -1,105, 106, 443, -1,105, 444, + 104, -1,137, 136, 442, -1,103, 104, 445, -1,101, 102, 446, -1,102, 103, 445, -1,99, + 100, 447, -1,97, 98, 448, -1,98, 99, 448, -1,100, 101, 446, -1,96, 97, 128, -1,134, + 444, 443, -1,105, 443, 444, -1,104, 444, 445, -1,133, 445, 444, -1,443, 136, 135, -1, + 444, 134, 133, -1,134, 443, 135, -1,133, 446, 445, -1,442, 136, 443, -1,131, 447, + 446, -1,100, 446, 447, -1,129, 128, 448, -1,97, 448, 128, -1,448, 99, 447, -1,130, + 448, 447, -1,446, 132, 131, -1,448, 130, 129, -1,130, 447, 131, -1,133, 132, 446, -1, + 446, 102, 445, -1,109, 441, 442, -1,128, 95, 96, -1,449, 95, 128, -1,94, 449, 93, -1, + 449, 94, 95, -1,92, 93, 450, -1,92, 451, 91, -1,90, 91, 451, -1,88, 89, 452, -1,89, + 90, 452, -1,86, 87, 454, -1,84, 85, 455, -1,85, 86, 454, -1,87, 88, 453, -1,83, 84, + 455, -1,166, 450, 449, -1,93, 449, 450, -1,92, 450, 451, -1,165, 451, 450, -1,449, + 129, 167, -1,450, 166, 165, -1,166, 449, 167, -1,155, 555, 156, -1,165, 452, 451, -1, + 128, 129, 449, -1,163, 453, 452, -1,88, 452, 453, -1,161, 455, 454, -1,85, 454, 455, -1, + 454, 87, 453, -1,162, 454, 453, -1,452, 164, 163, -1,454, 162, 161, -1,162, 453, + 163, -1,456, 455, 161, -1,165, 164, 452, -1,452, 90, 451, -1,456, 83, 455, -1,457, + 81, 82, -1,457, 80, 81, -1,457, 456, 159, -1,457, 82, 456, -1,80, 457, 458, -1,146, + 145, 458, -1,80, 458, 145, -1,458, 457, 158, -1,83, 456, 82, -1,458, 459, 146, -1, + 147, 146, 459, -1,148, 147, 459, -1,148, 156, 554, -1,157, 459, 458, -1,157, 148, + 459, -1,160, 159, 456, -1,156, 149, 554, -1,159, 158, 457, -1,157, 458, 158, -1,555, + 149, 156, -1,157, 156, 148, -1,556, 155, 154, -1,154, 151, 556, -1,118, 119, 152, -1, + 153, 152, 151, -1,153, 151, 154, -1,153, 117, 118, -1,153, 118, 152, -1,150, 155, + 556, -1,555, 155, 150, -1,161, 160, 456, -1,557, 215, 172, -1,199, 198, 197, -1,460, + 197, 196, -1,215, 557, 171, -1,213, 558, 174, -1,461, 195, 194, -1,211, 559, 177, -1, + 462, 193, 192, -1,193, 462, 194, -1,178, 559, 210, -1,195, 461, 196, -1,558, 213, + 175, -1,460, 196, 461, -1,200, 199, 460, -1,462, 192, 463, -1,202, 461, 462, -1,461, + 201, 460, -1,461, 194, 462, -1,357, 469, 181, -1,464, 191, 190, -1,191, 464, 463, -1, + 204, 463, 464, -1,191, 463, 192, -1,189, 464, 190, -1,463, 203, 462, -1,199, 197, + 460, -1,188, 187, 466, -1,186, 185, 467, -1,466, 187, 186, -1,184, 183, 468, -1,183, + 182, 181, -1,185, 184, 468, -1,465, 189, 188, -1,466, 186, 467, -1,206, 465, 466, -1, + 468, 183, 469, -1,208, 467, 468, -1,467, 207, 466, -1,467, 185, 468, -1,357, 180, + 469, -1,469, 183, 181, -1,469, 209, 468, -1,465, 188, 466, -1,465, 464, 189, -1,465, + 205, 464, -1,461, 202, 201, -1,463, 204, 203, -1,462, 203, 202, -1,180, 179, 210, -1, + 179, 178, 210, -1,464, 205, 204, -1,205, 465, 206, -1,207, 467, 208, -1,206, 466, + 207, -1,209, 469, 210, -1,210, 559, 211, -1,469, 180, 210, -1,208, 468, 209, -1,212, + 211, 177, -1,214, 174, 173, -1,169, 171, 170, -1,172, 214, 173, -1,212, 176, 175, -1, + 175, 213, 212, -1,212, 177, 176, -1,174, 214, 213, -1,215, 171, 168, -1,215, 214, + 172, -1,171, 169, 168, -1,200, 460, 201, -1,470, 231, 230, -1,230, 229, 471, -1,228, + 227, 472, -1,471, 229, 228, -1,470, 232, 231, -1,247, 560, 248, -1,230, 471, 470, -1, + 248, 470, 471, -1,227, 473, 472, -1,250, 472, 473, -1,472, 249, 471, -1,228, 472, + 471, -1,470, 233, 232, -1,226, 473, 227, -1,225, 473, 226, -1,475, 224, 223, -1,224, + 474, 225, -1,476, 222, 221, -1,477, 220, 219, -1,220, 477, 221, -1,222, 475, 223, -1, + 475, 222, 476, -1,252, 474, 475, -1,218, 478, 219, -1,254, 476, 477, -1,476, 253, + 475, -1,476, 221, 477, -1,218, 217, 478, -1,216, 198, 199, -1,479, 217, 216, -1,478, + 477, 219, -1,474, 224, 475, -1,225, 474, 473, -1,474, 251, 473, -1,562, 243, 242, -1, + 562, 241, 243, -1,240, 239, 244, -1,241, 240, 244, -1,245, 561, 238, -1,237, 236, + 246, -1,246, 238, 237, -1,247, 236, 560, -1,169, 170, 242, -1,561, 245, 239, -1,242, + 243, 168, -1,243, 241, 244, -1,239, 245, 244, -1,236, 247, 246, -1,246, 245, 238, -1, + 235, 248, 560, -1,169, 242, 168, -1,248, 233, 470, -1,248, 234, 233, -1,248, 471, + 249, -1,248, 235, 234, -1,472, 250, 249, -1,217, 479, 478, -1,478, 479, 256, -1,473, + 251, 250, -1,199, 257, 479, -1,252, 251, 474, -1,216, 199, 479, -1,252, 475, 253, -1, + 254, 477, 255, -1,253, 476, 254, -1,478, 256, 255, -1,199, 200, 257, -1,479, 257, + 256, -1,477, 478, 255, -1,277, 276, 275, -1,480, 275, 274, -1,482, 273, 272, -1,483, + 272, 271, -1,273, 481, 274, -1,480, 274, 481, -1,197, 277, 480, -1,196, 480, 481, -1, + 481, 273, 482, -1,271, 484, 483, -1,483, 482, 272, -1,271, 270, 484, -1,193, 483, + 484, -1,483, 194, 482, -1,485, 484, 270, -1,482, 195, 481, -1,277, 275, 480, -1,269, + 268, 486, -1,268, 267, 487, -1,266, 265, 489, -1,265, 264, 490, -1,488, 267, 266, -1, + 492, 263, 262, -1,263, 491, 264, -1,262, 261, 493, -1,259, 261, 260, -1,261, 259, + 258, -1,494, 261, 258, -1,486, 485, 269, -1,485, 270, 269, -1,485, 192, 484, -1,197, + 480, 196, -1,196, 481, 195, -1,268, 487, 486, -1,486, 487, 190, -1,487, 488, 189, -1, + 267, 488, 487, -1,194, 195, 482, -1,198, 277, 197, -1,194, 483, 193, -1,193, 484, + 192, -1,485, 486, 191, -1,487, 189, 190, -1,486, 190, 191, -1,192, 485, 191, -1,188, + 189, 488, -1,265, 490, 489, -1,490, 491, 186, -1,491, 492, 185, -1,264, 491, 490, -1, + 262, 493, 492, -1,493, 494, 183, -1,258, 278, 494, -1,494, 278, 182, -1,492, 493, + 184, -1,261, 494, 493, -1,187, 489, 490, -1,263, 492, 491, -1,489, 187, 188, -1,490, + 186, 187, -1,492, 184, 185, -1,494, 182, 183, -1,493, 183, 184, -1,491, 185, 186, -1, + 188, 488, 489, -1,266, 489, 488, -1,295, 294, 293, -1,495, 293, 292, -1,497, 291, + 290, -1,498, 290, 289, -1,291, 496, 292, -1,495, 297, 296, -1,292, 496, 495, -1,293, + 296, 295, -1,496, 291, 497, -1,229, 496, 497, -1,498, 289, 499, -1,227, 498, 499, -1, + 498, 228, 497, -1,497, 290, 498, -1,496, 230, 495, -1,296, 293, 495, -1,500, 499, + 289, -1,500, 288, 287, -1,501, 287, 286, -1,285, 284, 503, -1,284, 283, 504, -1,502, + 286, 285, -1,505, 283, 282, -1,500, 287, 501, -1,225, 500, 501, -1,506, 282, 281, -1, + 281, 280, 507, -1,279, 276, 509, -1,508, 280, 279, -1,501, 286, 502, -1,500, 289, + 288, -1,500, 226, 499, -1,495, 230, 231, -1,496, 229, 230, -1,223, 502, 503, -1,227, + 499, 226, -1,229, 497, 228, -1,285, 503, 502, -1,231, 297, 495, -1,228, 498, 227, -1, + 226, 500, 225, -1,501, 502, 224, -1,503, 222, 223, -1,502, 223, 224, -1,225, 501, + 224, -1,504, 222, 503, -1,283, 505, 504, -1,221, 504, 505, -1,220, 505, 506, -1,282, + 506, 505, -1,280, 508, 507, -1,218, 507, 508, -1,276, 277, 509, -1,216, 509, 277, -1, + 509, 217, 508, -1,279, 509, 508, -1,507, 219, 506, -1,281, 507, 506, -1,505, 220, + 221, -1,506, 219, 220, -1,508, 217, 218, -1,277, 198, 216, -1,509, 216, 217, -1,507, + 218, 219, -1,221, 222, 504, -1,284, 504, 503, -1,299, 275, 276, -1,510, 275, 299, -1, + 274, 511, 273, -1,510, 274, 275, -1,272, 273, 511, -1,272, 512, 271, -1,270, 271, + 513, -1,269, 270, 513, -1,267, 268, 515, -1,265, 266, 516, -1,266, 267, 515, -1,268, + 269, 514, -1,265, 516, 517, -1,323, 511, 510, -1,274, 510, 511, -1,272, 511, 512, -1, + 322, 512, 511, -1,510, 298, 324, -1,511, 323, 322, -1,323, 510, 324, -1,564, 311, + 305, -1,322, 513, 512, -1,299, 298, 510, -1,320, 514, 513, -1,269, 513, 514, -1,318, + 516, 515, -1,266, 515, 516, -1,515, 268, 514, -1,319, 515, 514, -1,513, 321, 320, -1, + 515, 319, 318, -1,319, 514, 320, -1,517, 516, 318, -1,322, 321, 513, -1,513, 271, + 512, -1,565, 305, 310, -1,264, 265, 517, -1,563, 312, 304, -1,518, 262, 263, -1,519, + 261, 262, -1,518, 517, 316, -1,518, 263, 517, -1,520, 260, 519, -1,262, 518, 519, -1, + 261, 519, 260, -1,519, 518, 315, -1,264, 517, 263, -1,301, 300, 520, -1,260, 520, + 300, -1,314, 301, 520, -1,302, 301, 521, -1,301, 313, 521, -1,314, 520, 519, -1,302, + 521, 313, -1,317, 316, 517, -1,303, 302, 313, -1,316, 315, 518, -1,314, 519, 315, -1, + 303, 313, 312, -1,314, 313, 301, -1,312, 563, 303, -1,308, 307, 306, -1,565, 310, + 306, -1,564, 304, 311, -1,310, 305, 311, -1,306, 310, 309, -1,306, 309, 308, -1,312, + 311, 304, -1,318, 317, 517, -1,523, 331, 330, -1,523, 330, 342, -1,522, 343, 330, -1, + 522, 330, 329, -1,523, 294, 331, -1,524, 293, 294, -1,524, 292, 293, -1,340, 525, + 524, -1,525, 292, 524, -1,525, 526, 291, -1,290, 291, 526, -1,525, 291, 292, -1,340, + 526, 525, -1,523, 524, 294, -1,341, 524, 523, -1,308, 325, 307, -1,325, 346, 566, -1, + 566, 346, 326, -1,309, 325, 308, -1,567, 326, 345, -1,346, 325, 309, -1,346, 345, + 326, -1,345, 344, 327, -1,343, 328, 344, -1,344, 328, 568, -1,567, 345, 327, -1,329, + 328, 343, -1,522, 329, 343, -1,341, 523, 342, -1,343, 342, 330, -1,341, 340, 524, -1, + 568, 327, 344, -1,340, 339, 526, -1,526, 527, 289, -1,527, 288, 289, -1,337, 528, + 527, -1,528, 288, 527, -1,528, 286, 287, -1,528, 287, 288, -1,286, 528, 529, -1,526, + 339, 527, -1,285, 286, 529, -1,283, 284, 530, -1,284, 285, 530, -1,281, 282, 532, -1, + 279, 280, 533, -1,280, 281, 532, -1,282, 283, 531, -1,276, 279, 299, -1,338, 527, + 339, -1,337, 529, 528, -1,285, 529, 530, -1,530, 529, 335, -1,337, 527, 338, -1,529, + 336, 335, -1,336, 529, 337, -1,335, 531, 530, -1,333, 532, 531, -1,282, 531, 532, -1, + 298, 299, 533, -1,279, 533, 299, -1,533, 280, 532, -1,332, 533, 532, -1,531, 334, + 333, -1,533, 332, 298, -1,332, 532, 333, -1,335, 334, 531, -1,531, 283, 530, -1,289, + 290, 526, -1,122, 123, 347, -1,121, 347, 120, -1,347, 121, 122, -1,120, 347, 119, -1, + 348, 149, 150, -1,348, 152, 119, -1,348, 151, 152, -1,348, 150, 151, -1,119, 347, + 348, -1,307, 348, 347, -1,306, 347, 305, -1,305, 347, 304, -1,347, 306, 307, -1,348, + 325, 326, -1,325, 348, 307, -1,327, 328, 348, -1,326, 327, 348, -1,304, 347, 303, -1, + 349, 11, 12, -1,12, 13, 350, -1,350, 349, 12, -1,349, 234, 235, -1,234, 349, 233, -1, + 11, 349, 235, -1,51, 351, 50, -1,352, 51, 52, -1,51, 352, 351, -1,179, 180, 352, -1, + 352, 178, 179, -1,52, 178, 352, -1,13, 15, 350, -1,350, 15, 354, -1,354, 76, 353, -1, + 76, 354, 15, -1,76, 77, 353, -1,351, 356, 49, -1,355, 116, 356, -1,48, 356, 116, -1, + 355, 115, 116, -1,48, 49, 356, -1,351, 49, 50, -1,180, 357, 351, -1,356, 351, 357, -1, + 356, 357, 182, -1,356, 359, 355, -1,359, 356, 358, -1,358, 258, 359, -1,182, 358, + 356, -1,360, 231, 354, -1,296, 360, 361, -1,361, 354, 353, -1,354, 361, 360, -1,350, + 354, 362, -1,362, 233, 350, -1,231, 362, 354, -1,367, 303, 123, -1,123, 368, 367, -1, + 367, 368, 366, -1,112, 258, 365, -1,370, 260, 366, -1,112, 365, 260, -1,368, 369, + 366, -1,369, 370, 366, -1,371, 112, 260, -1,370, 371, 260, -1,363, 364, 258, -1,115, + 355, 364, -1,364, 355, 258, -1,112, 363, 258, -1,80, 374, 294, -1,375, 376, 379, -1, + 374, 375, 294, -1,353, 77, 372, -1,372, 373, 296, -1,353, 372, 296, -1,80, 296, 373, -1, + 377, 149, 378, -1,328, 378, 149, -1,377, 378, 379, -1,294, 375, 379, -1,296, 80, + 380, -1,380, 80, 294, -1,377, 379, 376, -1,383, 57, 384, -1,381, 382, 386, -1,52, + 381, 178, -1,383, 385, 382, -1,174, 384, 57, -1,386, 178, 381, -1,385, 386, 382, -1, + 384, 385, 383, -1,174, 57, 58, -1,173, 59, 60, -1,59, 174, 58, -1,239, 5, 6, -1,170, + 2, 3, -1,242, 3, 4, -1,241, 4, 5, -1,2, 172, 60, -1,2, 171, 172, -1,59, 173, 174, -1, + 173, 60, 172, -1,3, 242, 170, -1,5, 239, 240, -1,5, 240, 241, -1,4, 241, 242, -1, + 2, 170, 171, -1,387, 6, 392, -1,389, 391, 390, -1,235, 390, 11, -1,391, 388, 392, -1, + 6, 387, 239, -1,390, 235, 389, -1,391, 389, 388, -1,392, 388, 387, -1,578, 577, 576, -1, + 575, 776, 576, -1,578, 576, 776, -1,579, 578, 776, -1,777, 575, 574, -1,574, 573, + 778, -1,573, 572, 779, -1,571, 570, 781, -1,570, 569, 782, -1,780, 572, 571, -1,575, + 777, 776, -1,574, 778, 777, -1,579, 777, 778, -1,579, 778, 779, -1,573, 779, 778, -1, + 776, 777, 579, -1,780, 579, 779, -1,571, 781, 780, -1,579, 780, 781, -1,579, 781, + 782, -1,570, 782, 781, -1,580, 579, 782, -1,569, 580, 782, -1,572, 780, 779, -1,580, + 569, 587, -1,586, 783, 587, -1,580, 587, 783, -1,579, 580, 783, -1,784, 586, 585, -1, + 585, 584, 785, -1,584, 583, 786, -1,582, 581, 788, -1,581, 577, 789, -1,787, 583, + 582, -1,586, 784, 783, -1,585, 785, 784, -1,579, 784, 785, -1,579, 785, 786, -1,584, + 786, 785, -1,783, 784, 579, -1,787, 579, 786, -1,582, 788, 787, -1,579, 787, 788, -1, + 579, 788, 789, -1,581, 789, 788, -1,578, 579, 789, -1,577, 578, 789, -1,583, 787, + 786, -1,597, 596, 595, -1,790, 595, 594, -1,595, 790, 597, -1,577, 597, 790, -1,576, + 790, 791, -1,594, 791, 790, -1,792, 791, 594, -1,792, 593, 592, -1,592, 591, 793, -1, + 795, 590, 589, -1,590, 794, 591, -1,589, 588, 796, -1,793, 792, 592, -1,792, 594, + 593, -1,792, 575, 791, -1,573, 793, 794, -1,577, 790, 576, -1,575, 576, 791, -1,591, + 794, 793, -1,575, 792, 574, -1,793, 573, 574, -1,792, 793, 574, -1,572, 573, 794, -1, + 589, 796, 795, -1,571, 795, 796, -1,570, 796, 598, -1,588, 598, 796, -1,795, 571, + 572, -1,598, 569, 570, -1,796, 570, 571, -1,572, 794, 795, -1,590, 795, 794, -1,598, + 588, 605, -1,797, 605, 604, -1,605, 797, 598, -1,569, 598, 797, -1,587, 797, 798, -1, + 604, 798, 797, -1,799, 798, 604, -1,799, 603, 602, -1,602, 601, 800, -1,802, 600, + 599, -1,600, 801, 601, -1,599, 596, 803, -1,800, 799, 602, -1,799, 604, 603, -1,799, + 586, 798, -1,584, 800, 801, -1,569, 797, 587, -1,586, 587, 798, -1,601, 801, 800, -1, + 586, 799, 585, -1,800, 584, 585, -1,799, 800, 585, -1,583, 584, 801, -1,599, 803, + 802, -1,582, 802, 803, -1,581, 803, 597, -1,596, 597, 803, -1,802, 582, 583, -1,597, + 577, 581, -1,803, 581, 582, -1,583, 801, 802, -1,600, 802, 801, -1,623, 622, 621, -1, + 805, 620, 619, -1,806, 619, 618, -1,620, 804, 621, -1,804, 620, 805, -1,596, 623, + 804, -1,807, 618, 617, -1,806, 805, 619, -1,595, 805, 806, -1,808, 617, 616, -1,805, + 595, 804, -1,623, 621, 804, -1,616, 615, 809, -1,614, 613, 811, -1,613, 612, 812, -1, + 810, 615, 614, -1,611, 610, 814, -1,610, 609, 815, -1,608, 607, 817, -1,607, 606, + 818, -1,816, 609, 608, -1,813, 612, 611, -1,618, 807, 806, -1,617, 808, 807, -1,594, + 807, 808, -1,615, 810, 809, -1,593, 809, 810, -1,592, 810, 811, -1,614, 811, 810, -1, + 809, 593, 808, -1,616, 809, 808, -1,594, 806, 807, -1,594, 808, 593, -1,812, 592, + 811, -1,592, 593, 810, -1,591, 592, 812, -1,594, 595, 806, -1,595, 596, 804, -1,613, + 812, 811, -1,611, 814, 813, -1,591, 813, 814, -1,609, 816, 815, -1,590, 815, 816, -1, + 589, 816, 817, -1,608, 817, 816, -1,815, 590, 814, -1,610, 815, 814, -1,590, 816, + 589, -1,817, 818, 589, -1,624, 588, 818, -1,589, 818, 588, -1,606, 624, 818, -1,591, + 814, 590, -1,591, 812, 813, -1,607, 818, 817, -1,612, 813, 812, -1,624, 606, 639, -1, + 820, 638, 637, -1,821, 637, 636, -1,638, 819, 639, -1,819, 638, 820, -1,588, 624, + 819, -1,822, 636, 635, -1,821, 820, 637, -1,605, 820, 821, -1,823, 635, 634, -1,820, + 605, 819, -1,624, 639, 819, -1,634, 633, 824, -1,632, 631, 826, -1,631, 630, 827, -1, + 825, 633, 632, -1,629, 628, 829, -1,628, 627, 830, -1,626, 625, 832, -1,625, 622, + 833, -1,831, 627, 626, -1,828, 630, 629, -1,636, 822, 821, -1,635, 823, 822, -1,604, + 822, 823, -1,633, 825, 824, -1,603, 824, 825, -1,602, 825, 826, -1,632, 826, 825, -1, + 824, 603, 823, -1,634, 824, 823, -1,604, 821, 822, -1,604, 823, 603, -1,827, 602, + 826, -1,602, 603, 825, -1,601, 602, 827, -1,604, 605, 821, -1,605, 588, 819, -1,631, + 827, 826, -1,629, 829, 828, -1,601, 828, 829, -1,627, 831, 830, -1,600, 830, 831, -1, + 599, 831, 832, -1,626, 832, 831, -1,830, 600, 829, -1,628, 830, 829, -1,600, 831, + 599, -1,832, 833, 599, -1,623, 596, 833, -1,599, 833, 596, -1,622, 623, 833, -1,601, + 829, 600, -1,601, 827, 828, -1,625, 833, 832, -1,630, 828, 827, -1,657, 656, 655, -1, + 834, 655, 654, -1,836, 653, 652, -1,837, 652, 651, -1,653, 835, 654, -1,655, 834, + 657, -1,622, 657, 834, -1,621, 834, 835, -1,654, 835, 834, -1,652, 837, 836, -1,619, + 836, 837, -1,618, 837, 838, -1,651, 838, 837, -1,836, 620, 835, -1,653, 836, 835, -1, + 839, 838, 651, -1,839, 650, 649, -1,840, 649, 648, -1,647, 646, 842, -1,646, 645, + 843, -1,841, 648, 647, -1,844, 645, 644, -1,839, 649, 840, -1,616, 839, 840, -1,845, + 644, 643, -1,643, 642, 846, -1,641, 640, 848, -1,847, 642, 641, -1,840, 648, 841, -1, + 839, 651, 650, -1,839, 617, 838, -1,621, 835, 620, -1,620, 836, 619, -1,647, 842, + 841, -1,841, 842, 614, -1,842, 843, 613, -1,646, 843, 842, -1,618, 619, 837, -1,622, + 834, 621, -1,618, 838, 617, -1,617, 839, 616, -1,840, 841, 615, -1,842, 613, 614, -1, + 841, 614, 615, -1,616, 840, 615, -1,612, 613, 843, -1,644, 845, 844, -1,611, 844, + 845, -1,610, 845, 846, -1,643, 846, 845, -1,641, 848, 847, -1,608, 847, 848, -1,607, + 848, 658, -1,640, 658, 848, -1,847, 609, 846, -1,642, 847, 846, -1,844, 611, 612, -1, + 845, 610, 611, -1,847, 608, 609, -1,658, 606, 607, -1,848, 607, 608, -1,846, 609, + 610, -1,612, 843, 844, -1,645, 844, 843, -1,658, 640, 673, -1,849, 673, 672, -1,851, + 671, 670, -1,852, 670, 669, -1,671, 850, 672, -1,673, 849, 658, -1,606, 658, 849, -1, + 639, 849, 850, -1,672, 850, 849, -1,670, 852, 851, -1,637, 851, 852, -1,636, 852, + 853, -1,669, 853, 852, -1,851, 638, 850, -1,671, 851, 850, -1,854, 853, 669, -1,854, + 668, 667, -1,855, 667, 666, -1,665, 664, 857, -1,664, 663, 858, -1,856, 666, 665, -1, + 859, 663, 662, -1,854, 667, 855, -1,634, 854, 855, -1,860, 662, 661, -1,661, 660, + 861, -1,659, 656, 863, -1,862, 660, 659, -1,855, 666, 856, -1,854, 669, 668, -1,854, + 635, 853, -1,639, 850, 638, -1,638, 851, 637, -1,665, 857, 856, -1,856, 857, 632, -1, + 857, 858, 631, -1,664, 858, 857, -1,636, 637, 852, -1,606, 849, 639, -1,636, 853, + 635, -1,635, 854, 634, -1,855, 856, 633, -1,857, 631, 632, -1,856, 632, 633, -1,634, + 855, 633, -1,630, 631, 858, -1,662, 860, 859, -1,629, 859, 860, -1,628, 860, 861, -1, + 661, 861, 860, -1,659, 863, 862, -1,626, 862, 863, -1,625, 863, 657, -1,656, 657, + 863, -1,862, 627, 861, -1,660, 862, 861, -1,859, 629, 630, -1,860, 628, 629, -1,862, + 626, 627, -1,657, 622, 625, -1,863, 625, 626, -1,861, 627, 628, -1,630, 858, 859, -1, + 663, 859, 858, -1,691, 690, 689, -1,864, 689, 688, -1,866, 687, 686, -1,867, 686, + 685, -1,687, 865, 688, -1,689, 864, 691, -1,656, 691, 864, -1,655, 864, 865, -1,688, + 865, 864, -1,686, 867, 866, -1,653, 866, 867, -1,652, 867, 868, -1,685, 868, 867, -1, + 866, 654, 865, -1,687, 866, 865, -1,869, 868, 685, -1,869, 684, 683, -1,870, 683, + 682, -1,681, 680, 872, -1,680, 679, 873, -1,871, 682, 681, -1,874, 679, 678, -1,869, + 683, 870, -1,650, 869, 870, -1,875, 678, 677, -1,677, 676, 876, -1,675, 674, 878, -1, + 877, 676, 675, -1,870, 682, 871, -1,869, 685, 684, -1,869, 651, 868, -1,655, 865, + 654, -1,654, 866, 653, -1,681, 872, 871, -1,871, 872, 648, -1,872, 873, 647, -1,680, + 873, 872, -1,652, 653, 867, -1,656, 864, 655, -1,652, 868, 651, -1,651, 869, 650, -1, + 870, 871, 649, -1,872, 647, 648, -1,871, 648, 649, -1,650, 870, 649, -1,646, 647, + 873, -1,678, 875, 874, -1,645, 874, 875, -1,644, 875, 876, -1,677, 876, 875, -1,675, + 878, 877, -1,642, 877, 878, -1,641, 878, 692, -1,674, 692, 878, -1,877, 643, 876, -1, + 676, 877, 876, -1,874, 645, 646, -1,875, 644, 645, -1,877, 642, 643, -1,692, 640, + 641, -1,878, 641, 642, -1,876, 643, 644, -1,646, 873, 874, -1,679, 874, 873, -1,692, + 674, 707, -1,879, 707, 706, -1,881, 705, 704, -1,882, 704, 703, -1,705, 880, 706, -1, + 707, 879, 692, -1,640, 692, 879, -1,673, 879, 880, -1,706, 880, 879, -1,704, 882, + 881, -1,671, 881, 882, -1,670, 882, 883, -1,703, 883, 882, -1,881, 672, 880, -1,705, + 881, 880, -1,884, 883, 703, -1,884, 702, 701, -1,885, 701, 700, -1,699, 698, 887, -1, + 698, 697, 888, -1,886, 700, 699, -1,889, 697, 696, -1,884, 701, 885, -1,668, 884, + 885, -1,890, 696, 695, -1,695, 694, 891, -1,693, 690, 893, -1,892, 694, 693, -1,885, + 700, 886, -1,884, 703, 702, -1,884, 669, 883, -1,673, 880, 672, -1,672, 881, 671, -1, + 699, 887, 886, -1,886, 887, 666, -1,887, 888, 665, -1,698, 888, 887, -1,670, 671, + 882, -1,640, 879, 673, -1,670, 883, 669, -1,669, 884, 668, -1,885, 886, 667, -1,887, + 665, 666, -1,886, 666, 667, -1,668, 885, 667, -1,664, 665, 888, -1,696, 890, 889, -1, + 663, 889, 890, -1,662, 890, 891, -1,695, 891, 890, -1,693, 893, 892, -1,660, 892, + 893, -1,659, 893, 691, -1,690, 691, 893, -1,892, 661, 891, -1,694, 892, 891, -1,889, + 663, 664, -1,890, 662, 663, -1,892, 660, 661, -1,691, 656, 659, -1,893, 659, 660, -1, + 891, 661, 662, -1,664, 888, 889, -1,697, 889, 888, -1,725, 724, 723, -1,894, 723, + 722, -1,896, 721, 720, -1,897, 720, 719, -1,721, 895, 722, -1,723, 894, 725, -1,690, + 725, 894, -1,689, 894, 895, -1,722, 895, 894, -1,720, 897, 896, -1,687, 896, 897, -1, + 686, 897, 898, -1,719, 898, 897, -1,896, 688, 895, -1,721, 896, 895, -1,899, 898, + 719, -1,899, 718, 717, -1,900, 717, 716, -1,715, 714, 902, -1,714, 713, 903, -1,901, + 716, 715, -1,904, 713, 712, -1,899, 717, 900, -1,684, 899, 900, -1,905, 712, 711, -1, + 711, 710, 906, -1,709, 708, 908, -1,907, 710, 709, -1,900, 716, 901, -1,899, 719, + 718, -1,899, 685, 898, -1,689, 895, 688, -1,688, 896, 687, -1,715, 902, 901, -1,901, + 902, 682, -1,902, 903, 681, -1,714, 903, 902, -1,686, 687, 897, -1,690, 894, 689, -1, + 686, 898, 685, -1,685, 899, 684, -1,900, 901, 683, -1,902, 681, 682, -1,901, 682, + 683, -1,684, 900, 683, -1,680, 681, 903, -1,712, 905, 904, -1,679, 904, 905, -1,678, + 905, 906, -1,711, 906, 905, -1,709, 908, 907, -1,676, 907, 908, -1,675, 908, 726, -1, + 708, 726, 908, -1,907, 677, 906, -1,710, 907, 906, -1,904, 679, 680, -1,905, 678, + 679, -1,907, 676, 677, -1,726, 674, 675, -1,908, 675, 676, -1,906, 677, 678, -1,680, + 903, 904, -1,713, 904, 903, -1,726, 708, 741, -1,909, 741, 740, -1,911, 739, 738, -1, + 912, 738, 737, -1,739, 910, 740, -1,741, 909, 726, -1,674, 726, 909, -1,707, 909, + 910, -1,740, 910, 909, -1,738, 912, 911, -1,705, 911, 912, -1,704, 912, 913, -1,737, + 913, 912, -1,911, 706, 910, -1,739, 911, 910, -1,914, 913, 737, -1,914, 736, 735, -1, + 915, 735, 734, -1,733, 732, 917, -1,732, 731, 918, -1,916, 734, 733, -1,919, 731, + 730, -1,914, 735, 915, -1,702, 914, 915, -1,920, 730, 729, -1,729, 728, 921, -1,727, + 724, 923, -1,922, 728, 727, -1,915, 734, 916, -1,914, 737, 736, -1,914, 703, 913, -1, + 707, 910, 706, -1,706, 911, 705, -1,733, 917, 916, -1,916, 917, 700, -1,917, 918, + 699, -1,732, 918, 917, -1,704, 705, 912, -1,674, 909, 707, -1,704, 913, 703, -1,703, + 914, 702, -1,915, 916, 701, -1,917, 699, 700, -1,916, 700, 701, -1,702, 915, 701, -1, + 698, 699, 918, -1,730, 920, 919, -1,697, 919, 920, -1,696, 920, 921, -1,729, 921, + 920, -1,727, 923, 922, -1,694, 922, 923, -1,693, 923, 725, -1,724, 725, 923, -1,922, + 695, 921, -1,728, 922, 921, -1,919, 697, 698, -1,920, 696, 697, -1,922, 694, 695, -1, + 725, 690, 693, -1,923, 693, 694, -1,921, 695, 696, -1,698, 918, 919, -1,731, 919, + 918, -1,743, 742, 760, -1,924, 760, 759, -1,926, 758, 757, -1,927, 757, 756, -1,758, + 925, 759, -1,760, 924, 743, -1,724, 743, 924, -1,723, 924, 925, -1,759, 925, 924, -1, + 757, 927, 926, -1,721, 926, 927, -1,720, 927, 928, -1,756, 928, 927, -1,926, 722, + 925, -1,758, 926, 925, -1,929, 928, 756, -1,929, 755, 754, -1,930, 754, 753, -1,752, + 751, 932, -1,751, 750, 933, -1,931, 753, 752, -1,934, 750, 749, -1,929, 754, 930, -1, + 718, 929, 930, -1,935, 749, 748, -1,748, 747, 936, -1,746, 745, 938, -1,937, 747, + 746, -1,930, 753, 931, -1,929, 756, 755, -1,929, 719, 928, -1,723, 925, 722, -1,722, + 926, 721, -1,752, 932, 931, -1,931, 932, 716, -1,932, 933, 715, -1,751, 933, 932, -1, + 720, 721, 927, -1,724, 924, 723, -1,720, 928, 719, -1,719, 929, 718, -1,930, 931, + 717, -1,932, 715, 716, -1,931, 716, 717, -1,718, 930, 717, -1,714, 715, 933, -1,749, + 935, 934, -1,713, 934, 935, -1,712, 935, 936, -1,748, 936, 935, -1,746, 938, 937, -1, + 710, 937, 938, -1,709, 938, 744, -1,745, 744, 938, -1,937, 711, 936, -1,747, 937, + 936, -1,934, 713, 714, -1,935, 712, 713, -1,937, 710, 711, -1,744, 708, 709, -1,938, + 709, 710, -1,936, 711, 712, -1,714, 933, 934, -1,750, 934, 933, -1,744, 745, 775, -1, + 939, 775, 774, -1,941, 773, 772, -1,942, 772, 771, -1,773, 940, 774, -1,775, 939, + 744, -1,708, 744, 939, -1,741, 939, 940, -1,774, 940, 939, -1,772, 942, 941, -1,739, + 941, 942, -1,738, 942, 943, -1,771, 943, 942, -1,941, 740, 940, -1,773, 941, 940, -1, + 944, 943, 771, -1,944, 770, 769, -1,945, 769, 768, -1,767, 766, 947, -1,766, 765, + 948, -1,946, 768, 767, -1,949, 765, 764, -1,944, 769, 945, -1,736, 944, 945, -1,950, + 764, 763, -1,763, 762, 951, -1,761, 742, 953, -1,952, 762, 761, -1,945, 768, 946, -1, + 944, 771, 770, -1,944, 737, 943, -1,741, 940, 740, -1,740, 941, 739, -1,767, 947, + 946, -1,946, 947, 734, -1,947, 948, 733, -1,766, 948, 947, -1,738, 739, 942, -1,708, + 939, 741, -1,738, 943, 737, -1,737, 944, 736, -1,945, 946, 735, -1,947, 733, 734, -1, + 946, 734, 735, -1,736, 945, 735, -1,732, 733, 948, -1,764, 950, 949, -1,731, 949, + 950, -1,730, 950, 951, -1,763, 951, 950, -1,761, 953, 952, -1,728, 952, 953, -1,727, + 953, 743, -1,742, 743, 953, -1,952, 729, 951, -1,762, 952, 951, -1,949, 731, 732, -1, + 950, 730, 731, -1,952, 728, 729, -1,743, 724, 727, -1,953, 727, 728, -1,951, 729, + 730, -1,732, 948, 949, -1,765, 949, 948, -1,955, 954, 989, -1,1161, 989, 988, -1, + 1163, 987, 986, -1,1164, 986, 985, -1,987, 1162, 988, -1,989, 1161, 955, -1,956, + 955, 1161, -1,957, 1161, 1162, -1,988, 1162, 1161, -1,986, 1164, 1163, -1,959, 1163, + 1164, -1,960, 1164, 1165, -1,985, 1165, 1164, -1,1163, 958, 1162, -1,987, 1163, 1162, -1, + 1166, 1165, 985, -1,1166, 984, 983, -1,1167, 983, 982, -1,981, 980, 1169, -1,980, + 979, 1170, -1,1168, 982, 981, -1,1171, 979, 978, -1,1166, 983, 1167, -1,962, 1166, + 1167, -1,1172, 978, 977, -1,977, 976, 1173, -1,975, 974, 1175, -1,1174, 976, 975, -1, + 1167, 982, 1168, -1,1166, 985, 984, -1,1166, 961, 1165, -1,957, 1162, 958, -1,958, + 1163, 959, -1,981, 1169, 1168, -1,1168, 1169, 964, -1,1169, 1170, 965, -1,980, 1170, + 1169, -1,960, 959, 1164, -1,956, 1161, 957, -1,960, 1165, 961, -1,961, 1166, 962, -1, + 1167, 1168, 963, -1,1169, 965, 964, -1,1168, 964, 963, -1,962, 1167, 963, -1,966, + 965, 1170, -1,978, 1172, 1171, -1,967, 1171, 1172, -1,968, 1172, 1173, -1,977, 1173, + 1172, -1,975, 1175, 1174, -1,970, 1174, 1175, -1,971, 1175, 973, -1,974, 973, 1175, -1, + 1174, 969, 1173, -1,976, 1174, 1173, -1,1171, 967, 966, -1,1172, 968, 967, -1,1174, + 970, 969, -1,973, 972, 971, -1,1175, 971, 970, -1,1173, 969, 968, -1,966, 1170, 1171, -1, + 979, 1171, 1170, -1,973, 974, 1019, -1,1176, 1019, 1018, -1,1178, 1017, 1016, -1, + 1179, 1016, 1015, -1,1017, 1177, 1018, -1,1019, 1176, 973, -1,972, 973, 1176, -1, + 990, 1176, 1177, -1,1018, 1177, 1176, -1,1016, 1179, 1178, -1,992, 1178, 1179, -1, + 993, 1179, 1180, -1,1015, 1180, 1179, -1,1178, 991, 1177, -1,1017, 1178, 1177, -1, + 1181, 1180, 1015, -1,1181, 1014, 1013, -1,1182, 1013, 1012, -1,1011, 1010, 1184, -1, + 1010, 1009, 1185, -1,1183, 1012, 1011, -1,1186, 1009, 1008, -1,1181, 1013, 1182, -1, + 995, 1181, 1182, -1,1187, 1008, 1007, -1,1007, 1006, 1188, -1,1005, 954, 1190, -1, + 1189, 1006, 1005, -1,1182, 1012, 1183, -1,1181, 1015, 1014, -1,1181, 994, 1180, -1, + 990, 1177, 991, -1,991, 1178, 992, -1,1011, 1184, 1183, -1,1183, 1184, 997, -1,1184, + 1185, 998, -1,1010, 1185, 1184, -1,993, 992, 1179, -1,972, 1176, 990, -1,993, 1180, + 994, -1,994, 1181, 995, -1,1182, 1183, 996, -1,1184, 998, 997, -1,1183, 997, 996, -1, + 995, 1182, 996, -1,999, 998, 1185, -1,1008, 1187, 1186, -1,1000, 1186, 1187, -1,1001, + 1187, 1188, -1,1007, 1188, 1187, -1,1005, 1190, 1189, -1,1003, 1189, 1190, -1,1004, + 1190, 955, -1,954, 955, 1190, -1,1189, 1002, 1188, -1,1006, 1189, 1188, -1,1186, + 1000, 999, -1,1187, 1001, 1000, -1,1189, 1003, 1002, -1,955, 956, 1004, -1,1190, + 1004, 1003, -1,1188, 1002, 1001, -1,999, 1185, 1186, -1,1009, 1186, 1185, -1,1020, + 956, 957, -1,1191, 957, 958, -1,1193, 959, 960, -1,1194, 960, 961, -1,959, 1192, + 958, -1,957, 1191, 1020, -1,1021, 1020, 1191, -1,1022, 1191, 1192, -1,958, 1192, + 1191, -1,960, 1194, 1193, -1,1024, 1193, 1194, -1,1025, 1194, 1195, -1,961, 1195, + 1194, -1,1193, 1023, 1192, -1,959, 1193, 1192, -1,1196, 1195, 961, -1,1196, 962, + 963, -1,1197, 963, 964, -1,965, 966, 1199, -1,966, 967, 1200, -1,1198, 964, 965, -1, + 1201, 967, 968, -1,1196, 963, 1197, -1,1027, 1196, 1197, -1,1202, 968, 969, -1,969, + 970, 1203, -1,971, 972, 1205, -1,1204, 970, 971, -1,1197, 964, 1198, -1,1196, 961, + 962, -1,1196, 1026, 1195, -1,1022, 1192, 1023, -1,1023, 1193, 1024, -1,965, 1199, + 1198, -1,1198, 1199, 1029, -1,1199, 1200, 1030, -1,966, 1200, 1199, -1,1025, 1024, + 1194, -1,1021, 1191, 1022, -1,1025, 1195, 1026, -1,1026, 1196, 1027, -1,1197, 1198, + 1028, -1,1199, 1030, 1029, -1,1198, 1029, 1028, -1,1027, 1197, 1028, -1,1031, 1030, + 1200, -1,968, 1202, 1201, -1,1032, 1201, 1202, -1,1033, 1202, 1203, -1,969, 1203, + 1202, -1,971, 1205, 1204, -1,1035, 1204, 1205, -1,1036, 1205, 1038, -1,972, 1038, + 1205, -1,1204, 1034, 1203, -1,970, 1204, 1203, -1,1201, 1032, 1031, -1,1202, 1033, + 1032, -1,1204, 1035, 1034, -1,1038, 1037, 1036, -1,1205, 1036, 1035, -1,1203, 1034, + 1033, -1,1031, 1200, 1201, -1,967, 1201, 1200, -1,1038, 972, 990, -1,1206, 990, 991, -1, + 1208, 992, 993, -1,1209, 993, 994, -1,992, 1207, 991, -1,990, 1206, 1038, -1,1037, + 1038, 1206, -1,1039, 1206, 1207, -1,991, 1207, 1206, -1,993, 1209, 1208, -1,1041, + 1208, 1209, -1,1042, 1209, 1210, -1,994, 1210, 1209, -1,1208, 1040, 1207, -1,992, + 1208, 1207, -1,1211, 1210, 994, -1,1211, 995, 996, -1,1212, 996, 997, -1,998, 999, + 1214, -1,999, 1000, 1215, -1,1213, 997, 998, -1,1216, 1000, 1001, -1,1211, 996, 1212, -1, + 1044, 1211, 1212, -1,1217, 1001, 1002, -1,1002, 1003, 1218, -1,1004, 956, 1220, -1, + 1219, 1003, 1004, -1,1212, 997, 1213, -1,1211, 994, 995, -1,1211, 1043, 1210, -1, + 1039, 1207, 1040, -1,1040, 1208, 1041, -1,998, 1214, 1213, -1,1213, 1214, 1046, -1, + 1214, 1215, 1047, -1,999, 1215, 1214, -1,1042, 1041, 1209, -1,1037, 1206, 1039, -1, + 1042, 1210, 1043, -1,1043, 1211, 1044, -1,1212, 1213, 1045, -1,1214, 1047, 1046, -1, + 1213, 1046, 1045, -1,1044, 1212, 1045, -1,1048, 1047, 1215, -1,1001, 1217, 1216, -1, + 1049, 1216, 1217, -1,1050, 1217, 1218, -1,1002, 1218, 1217, -1,1004, 1220, 1219, -1, + 1052, 1219, 1220, -1,1053, 1220, 1020, -1,956, 1020, 1220, -1,1219, 1051, 1218, -1, + 1003, 1219, 1218, -1,1216, 1049, 1048, -1,1217, 1050, 1049, -1,1219, 1052, 1051, -1, + 1020, 1021, 1053, -1,1220, 1053, 1052, -1,1218, 1051, 1050, -1,1048, 1215, 1216, -1, + 1000, 1216, 1215, -1,1054, 1021, 1022, -1,1221, 1022, 1023, -1,1223, 1024, 1025, -1, + 1224, 1025, 1026, -1,1024, 1222, 1023, -1,1022, 1221, 1054, -1,1055, 1054, 1221, -1, + 1056, 1221, 1222, -1,1023, 1222, 1221, -1,1025, 1224, 1223, -1,1058, 1223, 1224, -1, + 1059, 1224, 1225, -1,1026, 1225, 1224, -1,1223, 1057, 1222, -1,1024, 1223, 1222, -1, + 1226, 1225, 1026, -1,1226, 1027, 1028, -1,1227, 1028, 1029, -1,1030, 1031, 1229, -1, + 1031, 1032, 1230, -1,1228, 1029, 1030, -1,1231, 1032, 1033, -1,1226, 1028, 1227, -1, + 1061, 1226, 1227, -1,1232, 1033, 1034, -1,1034, 1035, 1233, -1,1036, 1037, 1235, -1, + 1234, 1035, 1036, -1,1227, 1029, 1228, -1,1226, 1026, 1027, -1,1226, 1060, 1225, -1, + 1056, 1222, 1057, -1,1057, 1223, 1058, -1,1030, 1229, 1228, -1,1228, 1229, 1063, -1, + 1229, 1230, 1064, -1,1031, 1230, 1229, -1,1059, 1058, 1224, -1,1055, 1221, 1056, -1, + 1059, 1225, 1060, -1,1060, 1226, 1061, -1,1227, 1228, 1062, -1,1229, 1064, 1063, -1, + 1228, 1063, 1062, -1,1061, 1227, 1062, -1,1065, 1064, 1230, -1,1033, 1232, 1231, -1, + 1066, 1231, 1232, -1,1067, 1232, 1233, -1,1034, 1233, 1232, -1,1036, 1235, 1234, -1, + 1069, 1234, 1235, -1,1070, 1235, 1072, -1,1037, 1072, 1235, -1,1234, 1068, 1233, -1, + 1035, 1234, 1233, -1,1231, 1066, 1065, -1,1232, 1067, 1066, -1,1234, 1069, 1068, -1, + 1072, 1071, 1070, -1,1235, 1070, 1069, -1,1233, 1068, 1067, -1,1065, 1230, 1231, -1, + 1032, 1231, 1230, -1,1072, 1037, 1039, -1,1236, 1039, 1040, -1,1238, 1041, 1042, -1, + 1239, 1042, 1043, -1,1041, 1237, 1040, -1,1039, 1236, 1072, -1,1071, 1072, 1236, -1, + 1073, 1236, 1237, -1,1040, 1237, 1236, -1,1042, 1239, 1238, -1,1075, 1238, 1239, -1, + 1076, 1239, 1240, -1,1043, 1240, 1239, -1,1238, 1074, 1237, -1,1041, 1238, 1237, -1, + 1241, 1240, 1043, -1,1241, 1044, 1045, -1,1242, 1045, 1046, -1,1047, 1048, 1244, -1, + 1048, 1049, 1245, -1,1243, 1046, 1047, -1,1246, 1049, 1050, -1,1241, 1045, 1242, -1, + 1078, 1241, 1242, -1,1247, 1050, 1051, -1,1051, 1052, 1248, -1,1053, 1021, 1250, -1, + 1249, 1052, 1053, -1,1242, 1046, 1243, -1,1241, 1043, 1044, -1,1241, 1077, 1240, -1, + 1073, 1237, 1074, -1,1074, 1238, 1075, -1,1047, 1244, 1243, -1,1243, 1244, 1080, -1, + 1244, 1245, 1081, -1,1048, 1245, 1244, -1,1076, 1075, 1239, -1,1071, 1236, 1073, -1, + 1076, 1240, 1077, -1,1077, 1241, 1078, -1,1242, 1243, 1079, -1,1244, 1081, 1080, -1, + 1243, 1080, 1079, -1,1078, 1242, 1079, -1,1082, 1081, 1245, -1,1050, 1247, 1246, -1, + 1083, 1246, 1247, -1,1084, 1247, 1248, -1,1051, 1248, 1247, -1,1053, 1250, 1249, -1, + 1086, 1249, 1250, -1,1087, 1250, 1054, -1,1021, 1054, 1250, -1,1249, 1085, 1248, -1, + 1052, 1249, 1248, -1,1246, 1083, 1082, -1,1247, 1084, 1083, -1,1249, 1086, 1085, -1, + 1054, 1055, 1087, -1,1250, 1087, 1086, -1,1248, 1085, 1084, -1,1082, 1245, 1246, -1, + 1049, 1246, 1245, -1,1088, 1055, 1056, -1,1251, 1056, 1057, -1,1253, 1058, 1059, -1, + 1254, 1059, 1060, -1,1058, 1252, 1057, -1,1056, 1251, 1088, -1,1089, 1088, 1251, -1, + 1090, 1251, 1252, -1,1057, 1252, 1251, -1,1059, 1254, 1253, -1,1092, 1253, 1254, -1, + 1093, 1254, 1255, -1,1060, 1255, 1254, -1,1253, 1091, 1252, -1,1058, 1253, 1252, -1, + 1256, 1255, 1060, -1,1256, 1061, 1062, -1,1257, 1062, 1063, -1,1064, 1065, 1259, -1, + 1065, 1066, 1260, -1,1258, 1063, 1064, -1,1261, 1066, 1067, -1,1256, 1062, 1257, -1, + 1095, 1256, 1257, -1,1262, 1067, 1068, -1,1068, 1069, 1263, -1,1070, 1071, 1265, -1, + 1264, 1069, 1070, -1,1257, 1063, 1258, -1,1256, 1060, 1061, -1,1256, 1094, 1255, -1, + 1090, 1252, 1091, -1,1091, 1253, 1092, -1,1064, 1259, 1258, -1,1258, 1259, 1097, -1, + 1259, 1260, 1098, -1,1065, 1260, 1259, -1,1093, 1092, 1254, -1,1089, 1251, 1090, -1, + 1093, 1255, 1094, -1,1094, 1256, 1095, -1,1257, 1258, 1096, -1,1259, 1098, 1097, -1, + 1258, 1097, 1096, -1,1095, 1257, 1096, -1,1099, 1098, 1260, -1,1067, 1262, 1261, -1, + 1100, 1261, 1262, -1,1101, 1262, 1263, -1,1068, 1263, 1262, -1,1070, 1265, 1264, -1, + 1103, 1264, 1265, -1,1104, 1265, 1106, -1,1071, 1106, 1265, -1,1264, 1102, 1263, -1, + 1069, 1264, 1263, -1,1261, 1100, 1099, -1,1262, 1101, 1100, -1,1264, 1103, 1102, -1, + 1106, 1105, 1104, -1,1265, 1104, 1103, -1,1263, 1102, 1101, -1,1099, 1260, 1261, -1, + 1066, 1261, 1260, -1,1106, 1071, 1073, -1,1266, 1073, 1074, -1,1268, 1075, 1076, -1, + 1269, 1076, 1077, -1,1075, 1267, 1074, -1,1073, 1266, 1106, -1,1105, 1106, 1266, -1, + 1107, 1266, 1267, -1,1074, 1267, 1266, -1,1076, 1269, 1268, -1,1109, 1268, 1269, -1, + 1110, 1269, 1270, -1,1077, 1270, 1269, -1,1268, 1108, 1267, -1,1075, 1268, 1267, -1, + 1271, 1270, 1077, -1,1271, 1078, 1079, -1,1272, 1079, 1080, -1,1081, 1082, 1274, -1, + 1082, 1083, 1275, -1,1273, 1080, 1081, -1,1276, 1083, 1084, -1,1271, 1079, 1272, -1, + 1112, 1271, 1272, -1,1277, 1084, 1085, -1,1085, 1086, 1278, -1,1087, 1055, 1280, -1, + 1279, 1086, 1087, -1,1272, 1080, 1273, -1,1271, 1077, 1078, -1,1271, 1111, 1270, -1, + 1107, 1267, 1108, -1,1108, 1268, 1109, -1,1081, 1274, 1273, -1,1273, 1274, 1114, -1, + 1274, 1275, 1115, -1,1082, 1275, 1274, -1,1110, 1109, 1269, -1,1105, 1266, 1107, -1, + 1110, 1270, 1111, -1,1111, 1271, 1112, -1,1272, 1273, 1113, -1,1274, 1115, 1114, -1, + 1273, 1114, 1113, -1,1112, 1272, 1113, -1,1116, 1115, 1275, -1,1084, 1277, 1276, -1, + 1117, 1276, 1277, -1,1118, 1277, 1278, -1,1085, 1278, 1277, -1,1087, 1280, 1279, -1, + 1120, 1279, 1280, -1,1121, 1280, 1088, -1,1055, 1088, 1280, -1,1279, 1119, 1278, -1, + 1086, 1279, 1278, -1,1276, 1117, 1116, -1,1277, 1118, 1117, -1,1279, 1120, 1119, -1, + 1088, 1089, 1121, -1,1280, 1121, 1120, -1,1278, 1119, 1118, -1,1116, 1275, 1276, -1, + 1083, 1276, 1275, -1,1122, 1089, 1090, -1,1282, 1091, 1092, -1,1283, 1092, 1093, -1, + 1091, 1281, 1090, -1,1281, 1091, 1282, -1,1123, 1122, 1281, -1,1284, 1093, 1094, -1, + 1283, 1282, 1092, -1,1124, 1282, 1283, -1,1285, 1094, 1095, -1,1282, 1124, 1281, -1, + 1122, 1090, 1281, -1,1095, 1096, 1286, -1,1097, 1098, 1288, -1,1098, 1099, 1289, -1, + 1287, 1096, 1097, -1,1100, 1101, 1291, -1,1101, 1102, 1292, -1,1103, 1104, 1294, -1, + 1104, 1105, 1295, -1,1293, 1102, 1103, -1,1290, 1099, 1100, -1,1093, 1284, 1283, -1, + 1094, 1285, 1284, -1,1125, 1284, 1285, -1,1096, 1287, 1286, -1,1126, 1286, 1287, -1, + 1127, 1287, 1288, -1,1097, 1288, 1287, -1,1286, 1126, 1285, -1,1095, 1286, 1285, -1, + 1125, 1283, 1284, -1,1125, 1285, 1126, -1,1289, 1127, 1288, -1,1127, 1126, 1287, -1, + 1128, 1127, 1289, -1,1125, 1124, 1283, -1,1124, 1123, 1281, -1,1098, 1289, 1288, -1, + 1100, 1291, 1290, -1,1128, 1290, 1291, -1,1102, 1293, 1292, -1,1129, 1292, 1293, -1, + 1130, 1293, 1294, -1,1103, 1294, 1293, -1,1292, 1129, 1291, -1,1101, 1292, 1291, -1, + 1129, 1293, 1130, -1,1294, 1295, 1130, -1,1132, 1131, 1295, -1,1130, 1295, 1131, -1, + 1105, 1132, 1295, -1,1128, 1291, 1129, -1,1128, 1289, 1290, -1,1104, 1295, 1294, -1, + 1099, 1290, 1289, -1,1132, 1105, 1107, -1,1297, 1108, 1109, -1,1298, 1109, 1110, -1, + 1108, 1296, 1107, -1,1296, 1108, 1297, -1,1131, 1132, 1296, -1,1299, 1110, 1111, -1, + 1298, 1297, 1109, -1,1133, 1297, 1298, -1,1300, 1111, 1112, -1,1297, 1133, 1296, -1, + 1132, 1107, 1296, -1,1112, 1113, 1301, -1,1114, 1115, 1303, -1,1115, 1116, 1304, -1, + 1302, 1113, 1114, -1,1117, 1118, 1306, -1,1118, 1119, 1307, -1,1120, 1121, 1309, -1, + 1121, 1089, 1310, -1,1308, 1119, 1120, -1,1305, 1116, 1117, -1,1110, 1299, 1298, -1, + 1111, 1300, 1299, -1,1134, 1299, 1300, -1,1113, 1302, 1301, -1,1135, 1301, 1302, -1, + 1136, 1302, 1303, -1,1114, 1303, 1302, -1,1301, 1135, 1300, -1,1112, 1301, 1300, -1, + 1134, 1298, 1299, -1,1134, 1300, 1135, -1,1304, 1136, 1303, -1,1136, 1135, 1302, -1, + 1137, 1136, 1304, -1,1134, 1133, 1298, -1,1133, 1131, 1296, -1,1115, 1304, 1303, -1, + 1117, 1306, 1305, -1,1137, 1305, 1306, -1,1119, 1308, 1307, -1,1138, 1307, 1308, -1, + 1139, 1308, 1309, -1,1120, 1309, 1308, -1,1307, 1138, 1306, -1,1118, 1307, 1306, -1, + 1138, 1308, 1139, -1,1309, 1310, 1139, -1,1122, 1123, 1310, -1,1139, 1310, 1123, -1, + 1089, 1122, 1310, -1,1137, 1306, 1138, -1,1137, 1304, 1305, -1,1121, 1310, 1309, -1, + 1116, 1305, 1304, -1,1140, 1123, 1124, -1,1311, 1124, 1125, -1,1124, 1311, 1140, -1, + 1141, 1140, 1311, -1,1142, 1311, 1312, -1,1125, 1312, 1311, -1,1313, 1312, 1125, -1, + 1313, 1126, 1127, -1,1127, 1128, 1314, -1,1316, 1129, 1130, -1,1129, 1315, 1128, -1, + 1130, 1131, 1317, -1,1314, 1313, 1127, -1,1313, 1125, 1126, -1,1313, 1143, 1312, -1, + 1145, 1314, 1315, -1,1141, 1311, 1142, -1,1143, 1142, 1312, -1,1128, 1315, 1314, -1, + 1143, 1313, 1144, -1,1314, 1145, 1144, -1,1313, 1314, 1144, -1,1146, 1145, 1315, -1, + 1130, 1317, 1316, -1,1147, 1316, 1317, -1,1148, 1317, 1150, -1,1131, 1150, 1317, -1, + 1316, 1147, 1146, -1,1150, 1149, 1148, -1,1317, 1148, 1147, -1,1146, 1315, 1316, -1, + 1129, 1316, 1315, -1,1150, 1131, 1133, -1,1318, 1133, 1134, -1,1133, 1318, 1150, -1, + 1149, 1150, 1318, -1,1151, 1318, 1319, -1,1134, 1319, 1318, -1,1320, 1319, 1134, -1, + 1320, 1135, 1136, -1,1136, 1137, 1321, -1,1323, 1138, 1139, -1,1138, 1322, 1137, -1, + 1139, 1123, 1324, -1,1321, 1320, 1136, -1,1320, 1134, 1135, -1,1320, 1152, 1319, -1, + 1154, 1321, 1322, -1,1149, 1318, 1151, -1,1152, 1151, 1319, -1,1137, 1322, 1321, -1, + 1152, 1320, 1153, -1,1321, 1154, 1153, -1,1320, 1321, 1153, -1,1155, 1154, 1322, -1, + 1139, 1324, 1323, -1,1156, 1323, 1324, -1,1157, 1324, 1140, -1,1123, 1140, 1324, -1, + 1323, 1156, 1155, -1,1140, 1141, 1157, -1,1324, 1157, 1156, -1,1155, 1322, 1323, -1, + 1138, 1323, 1322, -1,1158, 1141, 1142, -1,1143, 1325, 1142, -1,1158, 1142, 1325, -1, + 1159, 1158, 1325, -1,1326, 1143, 1144, -1,1144, 1145, 1327, -1,1145, 1146, 1328, -1, + 1147, 1148, 1330, -1,1148, 1149, 1331, -1,1329, 1146, 1147, -1,1143, 1326, 1325, -1, + 1144, 1327, 1326, -1,1159, 1326, 1327, -1,1159, 1327, 1328, -1,1145, 1328, 1327, -1, + 1325, 1326, 1159, -1,1329, 1159, 1328, -1,1147, 1330, 1329, -1,1159, 1329, 1330, -1, + 1159, 1330, 1331, -1,1148, 1331, 1330, -1,1160, 1159, 1331, -1,1149, 1160, 1331, -1, + 1146, 1329, 1328, -1,1160, 1149, 1151, -1,1152, 1332, 1151, -1,1160, 1151, 1332, -1, + 1159, 1160, 1332, -1,1333, 1152, 1153, -1,1153, 1154, 1334, -1,1154, 1155, 1335, -1, + 1156, 1157, 1337, -1,1157, 1141, 1338, -1,1336, 1155, 1156, -1,1152, 1333, 1332, -1, + 1153, 1334, 1333, -1,1159, 1333, 1334, -1,1159, 1334, 1335, -1,1154, 1335, 1334, -1, + 1332, 1333, 1159, -1,1336, 1159, 1335, -1,1156, 1337, 1336, -1,1159, 1336, 1337, -1, + 1159, 1337, 1338, -1,1157, 1338, 1337, -1,1158, 1159, 1338, -1,1141, 1158, 1338, -1, + 1155, 1336, 1335, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,5, 4, 3, -1,7, 3, 6, -1,1, 2, 8, -1,10, 9, 0, -1,13, 12, 11, -1,16, 15, + 14, -1,15, 17, 11, -1,20, 19, 18, -1,12, 21, 6, -1,9, 10, 19, -1,4, 5, 22, -1,5, + 7, 23, -1,7, 21, 24, -1,3, 7, 5, -1,12, 13, 21, -1,13, 17, 25, -1,15, 16, 17, -1, + 16, 27, 26, -1,28, 17, 16, -1,11, 17, 13, -1,29, 21, 13, -1,6, 21, 7, -1,27, 16, + 14, -1,31, 27, 30, -1,14, 30, 27, -1,33, 32, 31, -1,34, 31, 30, -1,31, 34, 33, -1, + 20, 18, 35, -1,27, 31, 36, -1,39, 38, 37, -1,40, 22, 5, -1,41, 35, 37, -1,23, 7, + 24, -1,24, 21, 29, -1,44, 43, 42, -1,32, 46, 45, -1,47, 45, 46, -1,29, 13, 25, -1, + 40, 5, 23, -1,25, 17, 28, -1,28, 16, 26, -1,36, 31, 45, -1,47, 44, 45, -1,31, 32, + 45, -1,26, 27, 36, -1,48, 44, 42, -1,39, 49, 38, -1,10, 18, 19, -1,51, 8, 50, -1, + 8, 52, 50, -1,48, 53, 49, -1,41, 37, 54, -1,49, 39, 48, -1,38, 54, 37, -1,8, 51, + 1, -1,0, 1, 10, -1,37, 35, 18, -1,48, 42, 53, -1,43, 44, 47, -1,57, 56, 55, -1,60, + 59, 58, -1,61, 60, 58, -1,59, 62, 58, -1,58, 62, 63, -1,58, 64, 61, -1,66, 65, 62, -1, + 67, 62, 59, -1,70, 69, 68, -1,66, 67, 71, -1,73, 71, 72, -1,75, 69, 74, -1,77, 68, + 76, -1,80, 79, 78, -1,83, 82, 81, -1,85, 84, 4, -1,84, 86, 78, -1,79, 87, 72, -1, + 71, 73, 66, -1,66, 73, 88, -1,73, 87, 89, -1,72, 87, 73, -1,78, 86, 80, -1,80, 86, + 90, -1,4, 22, 85, -1,85, 22, 91, -1,92, 86, 85, -1,84, 85, 86, -1,93, 87, 80, -1, + 79, 80, 87, -1,66, 62, 67, -1,77, 70, 68, -1,96, 95, 94, -1,52, 97, 50, -1,81, 99, + 98, -1,95, 97, 94, -1,76, 68, 82, -1,74, 101, 100, -1,50, 97, 51, -1,99, 96, 98, -1, + 97, 95, 51, -1,96, 99, 95, -1,74, 100, 75, -1,68, 69, 75, -1,81, 82, 99, -1,102, + 100, 101, -1,100, 102, 55, -1,63, 55, 56, -1,63, 103, 64, -1,63, 62, 65, -1,63, 56, + 103, -1,66, 88, 65, -1,55, 102, 57, -1,88, 73, 89, -1,89, 87, 93, -1,90, 86, 92, -1, + 91, 22, 40, -1,92, 85, 91, -1,93, 80, 90, -1,63, 64, 58, -1,76, 82, 83, -1,106, 105, + 104, -1,109, 108, 107, -1,111, 107, 110, -1,114, 113, 112, -1,104, 108, 115, -1,113, + 116, 112, -1,117, 115, 108, -1,120, 119, 118, -1,118, 122, 121, -1,124, 123, 104, -1, + 104, 123, 125, -1,128, 127, 126, -1,127, 130, 129, -1,131, 122, 128, -1,119, 120, + 110, -1,133, 117, 132, -1,124, 104, 115, -1,108, 109, 132, -1,117, 108, 132, -1,136, + 135, 134, -1,135, 138, 137, -1,120, 111, 110, -1,59, 109, 111, -1,59, 111, 120, -1, + 130, 136, 139, -1,107, 111, 109, -1,141, 138, 140, -1,109, 60, 132, -1,125, 106, + 104, -1,143, 140, 142, -1,146, 145, 144, -1,148, 144, 147, -1,145, 149, 142, -1,152, + 151, 150, -1,154, 150, 153, -1,157, 156, 155, -1,159, 155, 158, -1,156, 160, 153, -1, + 151, 161, 147, -1,164, 163, 162, -1,167, 166, 165, -1,166, 169, 168, -1,171, 170, + 167, -1,173, 172, 112, -1,169, 112, 116, -1,172, 114, 112, -1,174, 169, 116, -1,175, + 169, 174, -1,176, 158, 163, -1,162, 170, 177, -1,118, 121, 120, -1,122, 131, 121, -1, + 71, 121, 131, -1,127, 129, 126, -1,72, 126, 129, -1,72, 129, 139, -1,130, 139, 129, -1, + 126, 71, 131, -1,128, 126, 131, -1,135, 137, 134, -1,79, 134, 137, -1,78, 137, 141, -1, + 138, 141, 137, -1,142, 149, 143, -1,84, 143, 149, -1,4, 149, 146, -1,145, 146, 149, -1, + 143, 84, 141, -1,140, 143, 141, -1,134, 79, 139, -1,136, 134, 139, -1,109, 59, 60, -1, + 67, 120, 121, -1,67, 121, 71, -1,126, 72, 71, -1,137, 78, 79, -1,79, 72, 139, -1, + 141, 84, 78, -1,84, 149, 4, -1,146, 148, 4, -1,3, 4, 148, -1,67, 59, 120, -1,132, + 60, 133, -1,144, 148, 146, -1,151, 152, 161, -1,3, 161, 152, -1,153, 160, 154, -1, + 12, 154, 160, -1,12, 160, 157, -1,156, 157, 160, -1,154, 6, 152, -1,150, 154, 152, -1, + 158, 176, 159, -1,11, 159, 176, -1,15, 176, 164, -1,163, 164, 176, -1,170, 171, 177, -1, + 14, 177, 171, -1,30, 171, 165, -1,167, 165, 171, -1,177, 15, 164, -1,162, 177, 164, -1, + 159, 11, 157, -1,155, 159, 157, -1,6, 154, 12, -1,12, 157, 11, -1,15, 177, 14, -1, + 14, 171, 30, -1,11, 176, 15, -1,169, 175, 168, -1,34, 168, 175, -1,175, 174, 178, -1, + 178, 34, 175, -1,30, 168, 34, -1,168, 30, 165, -1,3, 152, 6, -1,3, 148, 161, -1,166, + 168, 165, -1,147, 161, 148, -1,181, 180, 179, -1,180, 181, 182, -1,181, 183, 182, -1, + 186, 185, 184, -1,105, 188, 187, -1,104, 105, 189, -1,108, 104, 189, -1,181, 187, + 183, -1,187, 188, 183, -1,189, 187, 190, -1,189, 105, 187, -1,189, 191, 108, -1,187, + 181, 192, -1,191, 193, 108, -1,191, 189, 194, -1,197, 196, 195, -1,199, 198, 196, -1, + 202, 201, 200, -1,199, 197, 203, -1,186, 204, 185, -1,196, 197, 199, -1,199, 205, + 198, -1,201, 205, 200, -1,204, 200, 185, -1,202, 200, 204, -1,184, 185, 180, -1,179, + 180, 185, -1,190, 187, 192, -1,179, 192, 181, -1,190, 194, 189, -1,198, 205, 201, -1, + 194, 206, 191, -1,206, 207, 193, -1,206, 208, 207, -1,208, 210, 209, -1,206, 210, + 208, -1,211, 209, 210, -1,211, 213, 212, -1,194, 214, 206, -1,216, 212, 215, -1,219, + 218, 217, -1,218, 216, 215, -1,222, 221, 220, -1,225, 224, 223, -1,224, 222, 223, -1, + 221, 219, 217, -1,227, 225, 226, -1,228, 213, 210, -1,211, 210, 213, -1,212, 213, + 215, -1,229, 215, 213, -1,210, 214, 230, -1,213, 228, 229, -1,228, 210, 230, -1,229, + 217, 215, -1,206, 214, 210, -1,231, 220, 217, -1,221, 217, 220, -1,232, 226, 223, -1, + 225, 223, 226, -1,223, 222, 220, -1,233, 223, 220, -1,217, 234, 231, -1,223, 233, + 232, -1,233, 220, 231, -1,229, 234, 217, -1,217, 218, 215, -1,193, 191, 206, -1,226, + 235, 227, -1,236, 235, 226, -1,238, 236, 237, -1,236, 238, 235, -1,240, 237, 239, -1, + 240, 242, 241, -1,243, 241, 242, -1,246, 245, 244, -1,245, 243, 244, -1,249, 248, + 247, -1,252, 251, 250, -1,251, 249, 247, -1,248, 246, 253, -1,254, 252, 250, -1,255, + 239, 236, -1,237, 236, 239, -1,240, 239, 242, -1,256, 242, 239, -1,236, 232, 257, -1, + 239, 255, 256, -1,255, 236, 257, -1,260, 259, 258, -1,256, 244, 242, -1,226, 232, + 236, -1,261, 253, 244, -1,246, 244, 253, -1,262, 250, 247, -1,251, 247, 250, -1,247, + 248, 253, -1,263, 247, 253, -1,244, 264, 261, -1,247, 263, 262, -1,263, 253, 261, -1, + 265, 250, 262, -1,256, 264, 244, -1,244, 243, 242, -1,265, 254, 250, -1,266, 112, + 169, -1,266, 173, 112, -1,266, 265, 267, -1,266, 169, 265, -1,173, 266, 268, -1,270, + 269, 268, -1,173, 268, 269, -1,268, 266, 271, -1,254, 265, 169, -1,268, 272, 270, -1, + 273, 270, 272, -1,274, 273, 272, -1,274, 258, 275, -1,276, 272, 268, -1,276, 274, + 272, -1,277, 267, 265, -1,258, 278, 275, -1,267, 271, 266, -1,276, 268, 271, -1,259, + 278, 258, -1,276, 258, 274, -1,280, 260, 279, -1,279, 281, 280, -1,197, 195, 282, -1, + 283, 282, 281, -1,283, 281, 279, -1,283, 203, 197, -1,283, 197, 282, -1,284, 260, + 280, -1,259, 260, 284, -1,262, 277, 265, -1,287, 286, 285, -1,290, 289, 288, -1,292, + 288, 291, -1,286, 287, 293, -1,296, 295, 294, -1,299, 298, 297, -1,302, 301, 300, -1, + 305, 304, 303, -1,304, 305, 297, -1,307, 301, 306, -1,298, 299, 291, -1,295, 296, + 308, -1,292, 291, 299, -1,309, 290, 292, -1,305, 303, 310, -1,311, 299, 305, -1,299, + 312, 292, -1,299, 297, 305, -1,315, 314, 313, -1,318, 317, 316, -1,317, 318, 310, -1, + 319, 310, 318, -1,317, 310, 303, -1,320, 318, 316, -1,310, 321, 305, -1,290, 288, + 292, -1,324, 323, 322, -1,327, 326, 325, -1,322, 323, 327, -1,330, 329, 328, -1,329, + 331, 313, -1,326, 330, 328, -1,332, 320, 324, -1,322, 327, 325, -1,333, 332, 322, -1, + 328, 329, 314, -1,334, 325, 328, -1,325, 335, 322, -1,325, 326, 328, -1,315, 336, + 314, -1,314, 329, 313, -1,314, 337, 328, -1,332, 324, 322, -1,332, 318, 320, -1,332, + 338, 318, -1,299, 311, 312, -1,310, 319, 321, -1,305, 321, 311, -1,336, 339, 306, -1, + 339, 307, 306, -1,318, 338, 319, -1,338, 332, 333, -1,335, 325, 334, -1,333, 322, + 335, -1,337, 314, 306, -1,306, 301, 302, -1,314, 336, 306, -1,334, 328, 337, -1,340, + 302, 300, -1,342, 294, 341, -1,344, 293, 343, -1,285, 342, 341, -1,340, 345, 308, -1, + 308, 296, 340, -1,340, 300, 345, -1,294, 342, 296, -1,286, 293, 346, -1,286, 342, + 285, -1,293, 344, 346, -1,309, 292, 312, -1,349, 348, 347, -1,347, 351, 350, -1,354, + 353, 352, -1,350, 351, 354, -1,349, 355, 348, -1,358, 357, 356, -1,347, 350, 349, -1, + 356, 349, 350, -1,353, 359, 352, -1,360, 352, 359, -1,352, 361, 350, -1,354, 352, + 350, -1,349, 362, 355, -1,363, 359, 353, -1,364, 359, 363, -1,367, 366, 365, -1,366, + 368, 364, -1,371, 370, 369, -1,374, 373, 372, -1,373, 374, 369, -1,370, 367, 365, -1, + 367, 370, 371, -1,375, 368, 367, -1,377, 376, 372, -1,378, 371, 374, -1,371, 379, + 367, -1,371, 369, 374, -1,377, 380, 376, -1,381, 289, 290, -1,382, 380, 381, -1,376, + 374, 372, -1,368, 366, 367, -1,364, 368, 359, -1,368, 383, 359, -1,386, 385, 384, -1, + 386, 387, 385, -1,390, 389, 388, -1,387, 390, 388, -1,393, 392, 391, -1,396, 395, + 394, -1,394, 391, 396, -1,358, 395, 357, -1,344, 343, 384, -1,392, 393, 389, -1,384, + 385, 346, -1,385, 387, 388, -1,389, 393, 388, -1,395, 358, 394, -1,394, 393, 391, -1, + 397, 356, 357, -1,344, 384, 346, -1,356, 362, 349, -1,356, 398, 362, -1,356, 350, + 361, -1,356, 397, 398, -1,352, 360, 361, -1,380, 382, 376, -1,376, 382, 399, -1,359, + 383, 360, -1,290, 400, 382, -1,375, 383, 368, -1,381, 290, 382, -1,375, 367, 379, -1, + 378, 374, 401, -1,379, 371, 378, -1,376, 399, 401, -1,290, 309, 400, -1,382, 400, + 399, -1,374, 376, 401, -1,404, 403, 402, -1,406, 402, 405, -1,409, 408, 407, -1,411, + 407, 410, -1,408, 412, 405, -1,406, 405, 412, -1,288, 404, 406, -1,291, 406, 412, -1, + 412, 408, 409, -1,410, 413, 411, -1,411, 409, 407, -1,410, 414, 413, -1,304, 411, + 413, -1,411, 297, 409, -1,415, 413, 414, -1,409, 298, 412, -1,404, 402, 406, -1,418, + 417, 416, -1,417, 420, 419, -1,423, 422, 421, -1,422, 425, 424, -1,426, 420, 423, -1, + 429, 428, 427, -1,428, 430, 425, -1,427, 432, 431, -1,434, 432, 433, -1,432, 434, + 435, -1,436, 432, 435, -1,416, 415, 418, -1,415, 414, 418, -1,415, 303, 413, -1,288, + 406, 291, -1,291, 412, 298, -1,417, 419, 416, -1,416, 419, 316, -1,419, 426, 320, -1, + 420, 426, 419, -1,297, 298, 409, -1,437, 404, 288, -1,297, 411, 304, -1,304, 413, + 303, -1,415, 416, 317, -1,419, 320, 316, -1,416, 316, 317, -1,303, 415, 317, -1,324, + 320, 426, -1,422, 424, 421, -1,424, 430, 327, -1,430, 429, 326, -1,425, 430, 424, -1, + 427, 431, 429, -1,431, 436, 329, -1,435, 438, 436, -1,436, 438, 331, -1,429, 431, + 330, -1,432, 436, 431, -1,323, 421, 424, -1,428, 429, 430, -1,421, 323, 324, -1,424, + 327, 323, -1,429, 330, 326, -1,436, 331, 329, -1,431, 329, 330, -1,430, 326, 327, -1, + 324, 426, 421, -1,423, 421, 426, -1,441, 440, 439, -1,443, 439, 442, -1,446, 445, + 444, -1,448, 444, 447, -1,445, 449, 442, -1,443, 451, 450, -1,442, 449, 443, -1,439, + 450, 441, -1,449, 445, 446, -1,351, 449, 446, -1,448, 447, 452, -1,353, 448, 452, -1, + 448, 354, 446, -1,446, 444, 448, -1,449, 347, 443, -1,450, 439, 443, -1,453, 452, + 447, -1,453, 455, 454, -1,457, 454, 456, -1,460, 459, 458, -1,459, 462, 461, -1,463, + 456, 460, -1,465, 462, 464, -1,453, 454, 457, -1,364, 453, 457, -1,467, 464, 466, -1, + 466, 469, 468, -1,471, 403, 470, -1,472, 469, 471, -1,457, 456, 463, -1,453, 447, + 455, -1,453, 363, 452, -1,443, 347, 348, -1,449, 351, 347, -1,365, 463, 458, -1,353, + 452, 363, -1,351, 446, 354, -1,460, 458, 463, -1,348, 451, 443, -1,354, 448, 353, -1, + 363, 453, 364, -1,457, 463, 366, -1,458, 370, 365, -1,463, 365, 366, -1,364, 457, + 366, -1,461, 370, 458, -1,462, 465, 461, -1,369, 461, 465, -1,373, 465, 467, -1,464, + 467, 465, -1,469, 472, 468, -1,377, 468, 472, -1,403, 404, 470, -1,381, 470, 404, -1, + 470, 380, 472, -1,471, 470, 472, -1,468, 372, 467, -1,466, 468, 467, -1,465, 373, + 369, -1,467, 372, 373, -1,472, 380, 377, -1,404, 437, 381, -1,470, 381, 380, -1,468, + 377, 372, -1,369, 370, 461, -1,459, 461, 458, -1,475, 474, 473, -1,476, 474, 475, -1, + 479, 478, 477, -1,476, 479, 474, -1,480, 477, 478, -1,480, 482, 481, -1,484, 481, + 483, -1,485, 484, 483, -1,488, 487, 486, -1,491, 490, 489, -1,490, 488, 486, -1,487, + 485, 492, -1,491, 489, 493, -1,494, 478, 476, -1,479, 476, 478, -1,480, 478, 482, -1, + 495, 482, 478, -1,476, 497, 496, -1,478, 494, 495, -1,494, 476, 496, -1,500, 499, + 498, -1,495, 483, 482, -1,475, 497, 476, -1,501, 492, 483, -1,485, 483, 492, -1,502, + 489, 486, -1,490, 486, 489, -1,486, 487, 492, -1,503, 486, 492, -1,483, 504, 501, -1, + 486, 503, 502, -1,503, 492, 501, -1,493, 489, 502, -1,495, 504, 483, -1,483, 481, + 482, -1,506, 498, 505, -1,507, 491, 493, -1,510, 509, 508, -1,513, 512, 511, -1,514, + 432, 512, -1,513, 493, 515, -1,513, 511, 493, -1,516, 433, 514, -1,512, 513, 514, -1, + 432, 514, 433, -1,514, 513, 517, -1,507, 493, 511, -1,519, 518, 516, -1,433, 516, + 518, -1,520, 519, 516, -1,522, 519, 521, -1,519, 523, 521, -1,520, 516, 514, -1,522, + 521, 523, -1,524, 515, 493, -1,525, 522, 523, -1,515, 517, 513, -1,520, 514, 517, -1, + 525, 523, 509, -1,520, 523, 519, -1,509, 510, 525, -1,528, 527, 526, -1,506, 505, + 526, -1,500, 508, 499, -1,505, 498, 499, -1,526, 505, 529, -1,526, 529, 528, -1,509, + 499, 508, -1,502, 524, 493, -1,532, 531, 530, -1,532, 530, 533, -1,535, 534, 530, -1, + 535, 530, 536, -1,532, 440, 531, -1,537, 439, 440, -1,537, 538, 439, -1,540, 539, + 537, -1,539, 538, 537, -1,539, 542, 541, -1,543, 541, 542, -1,539, 541, 538, -1,540, + 542, 539, -1,532, 537, 440, -1,544, 537, 532, -1,528, 545, 527, -1,545, 547, 546, -1, + 546, 547, 548, -1,529, 545, 528, -1,550, 548, 549, -1,547, 545, 529, -1,547, 549, + 548, -1,549, 552, 551, -1,534, 553, 552, -1,552, 553, 554, -1,550, 549, 551, -1,536, + 553, 534, -1,535, 536, 534, -1,544, 532, 533, -1,534, 533, 530, -1,544, 540, 537, -1, + 554, 551, 552, -1,540, 555, 542, -1,542, 557, 556, -1,557, 558, 556, -1,560, 559, + 557, -1,559, 558, 557, -1,559, 562, 561, -1,559, 561, 558, -1,562, 559, 563, -1,542, + 555, 557, -1,564, 562, 563, -1,567, 566, 565, -1,566, 564, 565, -1,570, 569, 568, -1, + 573, 572, 571, -1,572, 570, 568, -1,569, 567, 574, -1,473, 573, 475, -1,575, 557, + 555, -1,560, 563, 559, -1,564, 563, 565, -1,565, 563, 576, -1,560, 557, 575, -1,563, + 577, 576, -1,577, 563, 560, -1,576, 574, 565, -1,578, 568, 574, -1,569, 574, 568, -1, + 497, 475, 571, -1,573, 571, 475, -1,571, 572, 568, -1,579, 571, 568, -1,574, 580, + 578, -1,571, 579, 497, -1,579, 568, 578, -1,576, 580, 574, -1,574, 567, 565, -1,556, + 543, 542, -1,582, 186, 581, -1,584, 581, 583, -1,581, 584, 582, -1,583, 581, 585, -1, + 587, 278, 586, -1,587, 588, 585, -1,587, 589, 588, -1,587, 586, 589, -1,585, 581, + 587, -1,590, 587, 581, -1,592, 581, 591, -1,591, 581, 593, -1,581, 592, 590, -1,587, + 595, 594, -1,595, 587, 590, -1,597, 596, 587, -1,594, 597, 587, -1,593, 581, 598, -1, + 601, 600, 599, -1,599, 603, 602, -1,602, 601, 599, -1,601, 605, 604, -1,605, 601, + 606, -1,600, 601, 604, -1,608, 607, 603, -1,610, 608, 609, -1,608, 610, 607, -1,612, + 611, 610, -1,610, 613, 612, -1,609, 613, 610, -1,614, 614, 614, -1,616, 34, 615, -1, + 618, 617, 617, -1,619, 615, 34, -1,617, 620, 617, -1,621, 622, 621, -1,623, 623, + 622, -1,60, 625, 624, -1,623, 620, 623, -1,60, 626, 625, -1,621, 621, 627, -1,336, + 315, 628, -1,629, 628, 315, -1,629, 315, 331, -1,629, 631, 630, -1,631, 629, 632, -1, + 632, 435, 631, -1,331, 632, 629, -1,634, 348, 633, -1,450, 634, 635, -1,635, 633, + 636, -1,633, 635, 634, -1,638, 633, 637, -1,637, 362, 638, -1,348, 637, 633, -1,639, + 598, 186, -1,186, 640, 639, -1,639, 640, 641, -1,105, 643, 642, -1,644, 433, 641, -1, + 105, 642, 433, -1,640, 645, 641, -1,645, 644, 641, -1,646, 105, 433, -1,644, 646, + 433, -1,648, 647, 643, -1,650, 649, 647, -1,647, 649, 643, -1,105, 648, 643, -1,173, + 651, 440, -1,654, 653, 652, -1,651, 654, 440, -1,657, 656, 655, -1,655, 659, 658, -1, + 657, 655, 658, -1,173, 658, 659, -1,661, 278, 660, -1,596, 660, 278, -1,661, 660, + 652, -1,440, 654, 652, -1,658, 173, 662, -1,662, 173, 440, -1,661, 652, 653, -1,665, + 664, 663, -1,668, 667, 666, -1,609, 668, 613, -1,665, 669, 667, -1,670, 663, 664, -1, + 666, 613, 668, -1,669, 666, 667, -1,663, 669, 665, -1,670, 664, 671, -1,674, 673, + 672, -1,673, 670, 671, -1,677, 676, 675, -1,680, 679, 678, -1,682, 678, 681, -1,683, + 681, 676, -1,679, 684, 672, -1,679, 685, 684, -1,673, 674, 670, -1,674, 672, 684, -1, + 678, 682, 680, -1,676, 677, 686, -1,676, 686, 683, -1,681, 683, 682, -1,679, 680, + 685, -1,688, 675, 687, -1,691, 690, 689, -1,604, 689, 600, -1,690, 692, 687, -1,675, + 688, 677, -1,689, 604, 691, -1,690, 691, 692, -1,687, 692, 688, -1,695, 694, 693, -1, + 697, 696, 693, -1,695, 693, 696, -1,698, 695, 696, -1,700, 697, 699, -1,699, 702, + 701, -1,702, 704, 703, -1,707, 706, 705, -1,706, 709, 708, -1,710, 704, 707, -1,697, + 700, 696, -1,699, 701, 700, -1,698, 700, 701, -1,698, 701, 703, -1,702, 703, 701, -1, + 696, 700, 698, -1,710, 698, 703, -1,707, 705, 710, -1,698, 710, 705, -1,698, 705, + 708, -1,706, 708, 705, -1,711, 698, 708, -1,709, 711, 708, -1,704, 710, 703, -1,711, + 709, 712, -1,714, 713, 712, -1,711, 712, 713, -1,698, 711, 713, -1,716, 714, 715, -1, + 715, 718, 717, -1,718, 720, 719, -1,723, 722, 721, -1,722, 694, 724, -1,725, 720, + 723, -1,714, 716, 713, -1,715, 717, 716, -1,698, 716, 717, -1,698, 717, 719, -1,718, + 719, 717, -1,713, 716, 698, -1,725, 698, 719, -1,723, 721, 725, -1,698, 725, 721, -1, + 698, 721, 724, -1,722, 724, 721, -1,695, 698, 724, -1,694, 695, 724, -1,720, 725, + 719, -1,728, 727, 726, -1,730, 726, 729, -1,726, 730, 728, -1,694, 728, 730, -1,693, + 730, 731, -1,729, 731, 730, -1,732, 731, 729, -1,732, 734, 733, -1,733, 736, 735, -1, + 739, 738, 737, -1,738, 740, 736, -1,737, 742, 741, -1,735, 732, 733, -1,732, 729, + 734, -1,732, 697, 731, -1,702, 735, 740, -1,694, 730, 693, -1,697, 693, 731, -1,736, + 740, 735, -1,697, 732, 699, -1,735, 702, 699, -1,732, 735, 699, -1,704, 702, 740, -1, + 737, 741, 739, -1,707, 739, 741, -1,706, 741, 743, -1,742, 743, 741, -1,739, 707, + 704, -1,743, 709, 706, -1,741, 706, 707, -1,704, 740, 739, -1,738, 739, 740, -1,743, + 742, 744, -1,746, 744, 745, -1,744, 746, 743, -1,709, 743, 746, -1,712, 746, 747, -1, + 745, 747, 746, -1,748, 747, 745, -1,748, 750, 749, -1,749, 752, 751, -1,755, 754, + 753, -1,754, 756, 752, -1,753, 727, 757, -1,751, 748, 749, -1,748, 745, 750, -1,748, + 714, 747, -1,718, 751, 756, -1,709, 746, 712, -1,714, 712, 747, -1,752, 756, 751, -1, + 714, 748, 715, -1,751, 718, 715, -1,748, 751, 715, -1,720, 718, 756, -1,753, 757, + 755, -1,723, 755, 757, -1,722, 757, 728, -1,727, 728, 757, -1,755, 723, 720, -1,728, + 694, 722, -1,757, 722, 723, -1,720, 756, 755, -1,754, 755, 756, -1,760, 759, 758, -1, + 763, 762, 761, -1,765, 761, 764, -1,762, 766, 758, -1,766, 762, 763, -1,727, 760, + 766, -1,768, 764, 767, -1,765, 763, 761, -1,726, 763, 765, -1,770, 767, 769, -1,763, + 726, 766, -1,760, 758, 766, -1,769, 772, 771, -1,775, 774, 773, -1,774, 777, 776, -1, + 778, 772, 775, -1,781, 780, 779, -1,780, 783, 782, -1,786, 785, 784, -1,785, 788, + 787, -1,789, 783, 786, -1,790, 777, 781, -1,764, 768, 765, -1,767, 770, 768, -1,729, + 768, 770, -1,772, 778, 771, -1,734, 771, 778, -1,733, 778, 773, -1,775, 773, 778, -1, + 771, 734, 770, -1,769, 771, 770, -1,729, 765, 768, -1,729, 770, 734, -1,776, 733, + 773, -1,733, 734, 778, -1,736, 733, 776, -1,729, 726, 765, -1,726, 727, 766, -1,774, + 776, 773, -1,781, 779, 790, -1,736, 790, 779, -1,783, 789, 782, -1,738, 782, 789, -1, + 737, 789, 784, -1,786, 784, 789, -1,782, 738, 779, -1,780, 782, 779, -1,738, 789, + 737, -1,784, 787, 737, -1,791, 742, 787, -1,737, 787, 742, -1,788, 791, 787, -1,736, + 779, 738, -1,736, 776, 790, -1,785, 787, 784, -1,777, 790, 776, -1,791, 788, 792, -1, + 795, 794, 793, -1,797, 793, 796, -1,794, 798, 792, -1,798, 794, 795, -1,742, 791, + 798, -1,800, 796, 799, -1,797, 795, 793, -1,744, 795, 797, -1,802, 799, 801, -1,795, + 744, 798, -1,791, 792, 798, -1,801, 804, 803, -1,807, 806, 805, -1,806, 809, 808, -1, + 810, 804, 807, -1,813, 812, 811, -1,812, 815, 814, -1,818, 817, 816, -1,817, 759, + 819, -1,820, 815, 818, -1,821, 809, 813, -1,796, 800, 797, -1,799, 802, 800, -1,745, + 800, 802, -1,804, 810, 803, -1,750, 803, 810, -1,749, 810, 805, -1,807, 805, 810, -1, + 803, 750, 802, -1,801, 803, 802, -1,745, 797, 800, -1,745, 802, 750, -1,808, 749, + 805, -1,749, 750, 810, -1,752, 749, 808, -1,745, 744, 797, -1,744, 742, 798, -1,806, + 808, 805, -1,813, 811, 821, -1,752, 821, 811, -1,815, 820, 814, -1,754, 814, 820, -1, + 753, 820, 816, -1,818, 816, 820, -1,814, 754, 811, -1,812, 814, 811, -1,754, 820, + 753, -1,816, 819, 753, -1,760, 727, 819, -1,753, 819, 727, -1,759, 760, 819, -1,752, + 811, 754, -1,752, 808, 821, -1,817, 819, 816, -1,809, 821, 808, -1,824, 823, 822, -1, + 826, 822, 825, -1,829, 828, 827, -1,831, 827, 830, -1,828, 832, 825, -1,822, 826, + 824, -1,759, 824, 826, -1,758, 826, 832, -1,825, 832, 826, -1,827, 831, 829, -1,761, + 829, 831, -1,764, 831, 833, -1,830, 833, 831, -1,829, 762, 832, -1,828, 829, 832, -1, + 834, 833, 830, -1,834, 836, 835, -1,838, 835, 837, -1,841, 840, 839, -1,840, 843, + 842, -1,844, 837, 841, -1,846, 843, 845, -1,834, 835, 838, -1,769, 834, 838, -1,848, + 845, 847, -1,847, 850, 849, -1,853, 852, 851, -1,854, 850, 853, -1,838, 837, 844, -1, + 834, 830, 836, -1,834, 767, 833, -1,758, 832, 762, -1,762, 829, 761, -1,841, 839, + 844, -1,844, 839, 775, -1,839, 842, 774, -1,840, 842, 839, -1,764, 761, 831, -1,759, + 826, 758, -1,764, 833, 767, -1,767, 834, 769, -1,838, 844, 772, -1,839, 774, 775, -1, + 844, 775, 772, -1,769, 838, 772, -1,777, 774, 842, -1,845, 848, 846, -1,781, 846, + 848, -1,780, 848, 849, -1,847, 849, 848, -1,853, 851, 854, -1,786, 854, 851, -1,785, + 851, 855, -1,852, 855, 851, -1,854, 783, 849, -1,850, 854, 849, -1,846, 781, 777, -1, + 848, 780, 781, -1,854, 786, 783, -1,855, 788, 785, -1,851, 785, 786, -1,849, 783, + 780, -1,777, 842, 846, -1,843, 846, 842, -1,855, 852, 856, -1,858, 856, 857, -1,861, + 860, 859, -1,863, 859, 862, -1,860, 864, 857, -1,856, 858, 855, -1,788, 855, 858, -1, + 792, 858, 864, -1,857, 864, 858, -1,859, 863, 861, -1,793, 861, 863, -1,796, 863, + 865, -1,862, 865, 863, -1,861, 794, 864, -1,860, 861, 864, -1,866, 865, 862, -1,866, + 868, 867, -1,870, 867, 869, -1,873, 872, 871, -1,872, 875, 874, -1,876, 869, 873, -1, + 878, 875, 877, -1,866, 867, 870, -1,801, 866, 870, -1,880, 877, 879, -1,879, 882, + 881, -1,884, 823, 883, -1,885, 882, 884, -1,870, 869, 876, -1,866, 862, 868, -1,866, + 799, 865, -1,792, 864, 794, -1,794, 861, 793, -1,873, 871, 876, -1,876, 871, 807, -1, + 871, 874, 806, -1,872, 874, 871, -1,796, 793, 863, -1,788, 858, 792, -1,796, 865, + 799, -1,799, 866, 801, -1,870, 876, 804, -1,871, 806, 807, -1,876, 807, 804, -1,801, + 870, 804, -1,809, 806, 874, -1,877, 880, 878, -1,813, 878, 880, -1,812, 880, 881, -1, + 879, 881, 880, -1,884, 883, 885, -1,818, 885, 883, -1,817, 883, 824, -1,823, 824, + 883, -1,885, 815, 881, -1,882, 885, 881, -1,878, 813, 809, -1,880, 812, 813, -1,885, + 818, 815, -1,824, 759, 817, -1,883, 817, 818, -1,881, 815, 812, -1,809, 874, 878, -1, + 875, 878, 874, -1,888, 887, 886, -1,890, 886, 889, -1,893, 892, 891, -1,895, 891, + 894, -1,892, 896, 889, -1,886, 890, 888, -1,823, 888, 890, -1,822, 890, 896, -1,889, + 896, 890, -1,891, 895, 893, -1,828, 893, 895, -1,827, 895, 897, -1,894, 897, 895, -1, + 893, 825, 896, -1,892, 893, 896, -1,898, 897, 894, -1,898, 900, 899, -1,902, 899, + 901, -1,905, 904, 903, -1,904, 907, 906, -1,908, 901, 905, -1,910, 907, 909, -1,898, + 899, 902, -1,836, 898, 902, -1,912, 909, 911, -1,911, 914, 913, -1,917, 916, 915, -1, + 918, 914, 917, -1,902, 901, 908, -1,898, 894, 900, -1,898, 830, 897, -1,822, 896, + 825, -1,825, 893, 828, -1,905, 903, 908, -1,908, 903, 837, -1,903, 906, 841, -1,904, + 906, 903, -1,827, 828, 895, -1,823, 890, 822, -1,827, 897, 830, -1,830, 898, 836, -1, + 902, 908, 835, -1,903, 841, 837, -1,908, 837, 835, -1,836, 902, 835, -1,840, 841, + 906, -1,909, 912, 910, -1,843, 910, 912, -1,845, 912, 913, -1,911, 913, 912, -1,917, + 915, 918, -1,850, 918, 915, -1,853, 915, 919, -1,916, 919, 915, -1,918, 847, 913, -1, + 914, 918, 913, -1,910, 843, 840, -1,912, 845, 843, -1,918, 850, 847, -1,919, 852, + 853, -1,915, 853, 850, -1,913, 847, 845, -1,840, 906, 910, -1,907, 910, 906, -1,919, + 916, 920, -1,922, 920, 921, -1,925, 924, 923, -1,927, 923, 926, -1,924, 928, 921, -1, + 920, 922, 919, -1,852, 919, 922, -1,856, 922, 928, -1,921, 928, 922, -1,923, 927, + 925, -1,860, 925, 927, -1,859, 927, 929, -1,926, 929, 927, -1,925, 857, 928, -1,924, + 925, 928, -1,930, 929, 926, -1,930, 932, 931, -1,934, 931, 933, -1,937, 936, 935, -1, + 936, 939, 938, -1,940, 933, 937, -1,942, 939, 941, -1,930, 931, 934, -1,868, 930, + 934, -1,944, 941, 943, -1,943, 946, 945, -1,948, 887, 947, -1,949, 946, 948, -1,934, + 933, 940, -1,930, 926, 932, -1,930, 862, 929, -1,856, 928, 857, -1,857, 925, 860, -1, + 937, 935, 940, -1,940, 935, 869, -1,935, 938, 873, -1,936, 938, 935, -1,859, 860, + 927, -1,852, 922, 856, -1,859, 929, 862, -1,862, 930, 868, -1,934, 940, 867, -1,935, + 873, 869, -1,940, 869, 867, -1,868, 934, 867, -1,872, 873, 938, -1,941, 944, 942, -1, + 875, 942, 944, -1,877, 944, 945, -1,943, 945, 944, -1,948, 947, 949, -1,882, 949, + 947, -1,884, 947, 888, -1,887, 888, 947, -1,949, 879, 945, -1,946, 949, 945, -1,942, + 875, 872, -1,944, 877, 875, -1,949, 882, 879, -1,888, 823, 884, -1,947, 884, 882, -1, + 945, 879, 877, -1,872, 938, 942, -1,939, 942, 938, -1,952, 951, 950, -1,954, 950, + 953, -1,957, 956, 955, -1,959, 955, 958, -1,956, 960, 953, -1,950, 954, 952, -1,887, + 952, 954, -1,886, 954, 960, -1,953, 960, 954, -1,955, 959, 957, -1,892, 957, 959, -1, + 891, 959, 961, -1,958, 961, 959, -1,957, 889, 960, -1,956, 957, 960, -1,962, 961, + 958, -1,962, 964, 963, -1,966, 963, 965, -1,969, 968, 967, -1,968, 971, 970, -1,972, + 965, 969, -1,974, 971, 973, -1,962, 963, 966, -1,900, 962, 966, -1,976, 973, 975, -1, + 975, 978, 977, -1,981, 980, 979, -1,982, 978, 981, -1,966, 965, 972, -1,962, 958, + 964, -1,962, 894, 961, -1,886, 960, 889, -1,889, 957, 892, -1,969, 967, 972, -1,972, + 967, 901, -1,967, 970, 905, -1,968, 970, 967, -1,891, 892, 959, -1,887, 954, 886, -1, + 891, 961, 894, -1,894, 962, 900, -1,966, 972, 899, -1,967, 905, 901, -1,972, 901, + 899, -1,900, 966, 899, -1,904, 905, 970, -1,973, 976, 974, -1,907, 974, 976, -1,909, + 976, 977, -1,975, 977, 976, -1,981, 979, 982, -1,914, 982, 979, -1,917, 979, 983, -1, + 980, 983, 979, -1,982, 911, 977, -1,978, 982, 977, -1,974, 907, 904, -1,976, 909, + 907, -1,982, 914, 911, -1,983, 916, 917, -1,979, 917, 914, -1,977, 911, 909, -1,904, + 970, 974, -1,971, 974, 970, -1,983, 980, 984, -1,986, 984, 985, -1,989, 988, 987, -1, + 991, 987, 990, -1,988, 992, 985, -1,984, 986, 983, -1,916, 983, 986, -1,920, 986, + 992, -1,985, 992, 986, -1,987, 991, 989, -1,924, 989, 991, -1,923, 991, 993, -1,990, + 993, 991, -1,989, 921, 992, -1,988, 989, 992, -1,994, 993, 990, -1,994, 996, 995, -1, + 998, 995, 997, -1,1001, 1000, 999, -1,1000, 1003, 1002, -1,1004, 997, 1001, -1,1006, + 1003, 1005, -1,994, 995, 998, -1,932, 994, 998, -1,1008, 1005, 1007, -1,1007, 1010, + 1009, -1,1012, 951, 1011, -1,1013, 1010, 1012, -1,998, 997, 1004, -1,994, 990, 996, -1, + 994, 926, 993, -1,920, 992, 921, -1,921, 989, 924, -1,1001, 999, 1004, -1,1004, 999, + 933, -1,999, 1002, 937, -1,1000, 1002, 999, -1,923, 924, 991, -1,916, 986, 920, -1, + 923, 993, 926, -1,926, 994, 932, -1,998, 1004, 931, -1,999, 937, 933, -1,1004, 933, + 931, -1,932, 998, 931, -1,936, 937, 1002, -1,1005, 1008, 1006, -1,939, 1006, 1008, -1, + 941, 1008, 1009, -1,1007, 1009, 1008, -1,1012, 1011, 1013, -1,946, 1013, 1011, -1, + 948, 1011, 952, -1,951, 952, 1011, -1,1013, 943, 1009, -1,1010, 1013, 1009, -1,1006, + 939, 936, -1,1008, 941, 939, -1,1013, 946, 943, -1,952, 887, 948, -1,1011, 948, 946, -1, + 1009, 943, 941, -1,936, 1002, 1006, -1,1003, 1006, 1002, -1,1016, 1015, 1014, -1, + 1018, 1014, 1017, -1,1021, 1020, 1019, -1,1023, 1019, 1022, -1,1020, 1024, 1017, -1, + 1014, 1018, 1016, -1,1025, 1016, 1018, -1,1026, 1018, 1024, -1,1017, 1024, 1018, -1, + 1019, 1023, 1021, -1,1027, 1021, 1023, -1,1029, 1023, 1028, -1,1022, 1028, 1023, -1, + 1021, 1030, 1024, -1,1020, 1021, 1024, -1,1031, 1028, 1022, -1,1031, 1033, 1032, -1, + 1035, 1032, 1034, -1,1038, 1037, 1036, -1,1037, 1040, 1039, -1,1041, 1034, 1038, -1, + 1043, 1040, 1042, -1,1031, 1032, 1035, -1,1044, 1031, 1035, -1,1046, 1042, 1045, -1, + 1045, 1048, 1047, -1,1051, 1050, 1049, -1,1052, 1048, 1051, -1,1035, 1034, 1041, -1, + 1031, 1022, 1033, -1,1031, 1053, 1028, -1,1026, 1024, 1030, -1,1030, 1021, 1027, -1, + 1038, 1036, 1041, -1,1041, 1036, 1054, -1,1036, 1039, 1055, -1,1037, 1039, 1036, -1, + 1029, 1027, 1023, -1,1025, 1018, 1026, -1,1029, 1028, 1053, -1,1053, 1031, 1044, -1, + 1035, 1041, 1056, -1,1036, 1055, 1054, -1,1041, 1054, 1056, -1,1044, 1035, 1056, -1, + 1057, 1055, 1039, -1,1042, 1046, 1043, -1,1058, 1043, 1046, -1,1059, 1046, 1047, -1, + 1045, 1047, 1046, -1,1051, 1049, 1052, -1,1060, 1052, 1049, -1,1062, 1049, 1061, -1, + 1050, 1061, 1049, -1,1052, 1063, 1047, -1,1048, 1052, 1047, -1,1043, 1058, 1057, -1, + 1046, 1059, 1058, -1,1052, 1060, 1063, -1,1061, 1064, 1062, -1,1049, 1062, 1060, -1, + 1047, 1063, 1059, -1,1057, 1039, 1043, -1,1040, 1043, 1039, -1,1061, 1050, 1065, -1, + 1067, 1065, 1066, -1,1070, 1069, 1068, -1,1072, 1068, 1071, -1,1069, 1073, 1066, -1, + 1065, 1067, 1061, -1,1064, 1061, 1067, -1,1074, 1067, 1073, -1,1066, 1073, 1067, -1, + 1068, 1072, 1070, -1,1075, 1070, 1072, -1,1077, 1072, 1076, -1,1071, 1076, 1072, -1, + 1070, 1078, 1073, -1,1069, 1070, 1073, -1,1079, 1076, 1071, -1,1079, 1081, 1080, -1, + 1083, 1080, 1082, -1,1086, 1085, 1084, -1,1085, 1088, 1087, -1,1089, 1082, 1086, -1, + 1091, 1088, 1090, -1,1079, 1080, 1083, -1,1092, 1079, 1083, -1,1094, 1090, 1093, -1, + 1093, 1096, 1095, -1,1098, 1015, 1097, -1,1099, 1096, 1098, -1,1083, 1082, 1089, -1, + 1079, 1071, 1081, -1,1079, 1100, 1076, -1,1074, 1073, 1078, -1,1078, 1070, 1075, -1, + 1086, 1084, 1089, -1,1089, 1084, 1101, -1,1084, 1087, 1102, -1,1085, 1087, 1084, -1, + 1077, 1075, 1072, -1,1064, 1067, 1074, -1,1077, 1076, 1100, -1,1100, 1079, 1092, -1, + 1083, 1089, 1103, -1,1084, 1102, 1101, -1,1089, 1101, 1103, -1,1092, 1083, 1103, -1, + 1104, 1102, 1087, -1,1090, 1094, 1091, -1,1105, 1091, 1094, -1,1106, 1094, 1095, -1, + 1093, 1095, 1094, -1,1098, 1097, 1099, -1,1107, 1099, 1097, -1,1108, 1097, 1016, -1, + 1015, 1016, 1097, -1,1099, 1109, 1095, -1,1096, 1099, 1095, -1,1091, 1105, 1104, -1, + 1094, 1106, 1105, -1,1099, 1107, 1109, -1,1016, 1025, 1108, -1,1097, 1108, 1107, -1, + 1095, 1109, 1106, -1,1104, 1087, 1091, -1,1088, 1091, 1087, -1,1112, 1111, 1110, -1, + 1114, 1110, 1113, -1,1117, 1116, 1115, -1,1119, 1115, 1118, -1,1116, 1120, 1113, -1, + 1110, 1114, 1112, -1,1121, 1112, 1114, -1,1122, 1114, 1120, -1,1113, 1120, 1114, -1, + 1115, 1119, 1117, -1,1123, 1117, 1119, -1,1125, 1119, 1124, -1,1118, 1124, 1119, -1, + 1117, 1126, 1120, -1,1116, 1117, 1120, -1,1127, 1124, 1118, -1,1127, 1129, 1128, -1, + 1131, 1128, 1130, -1,1134, 1133, 1132, -1,1133, 1136, 1135, -1,1137, 1130, 1134, -1, + 1139, 1136, 1138, -1,1127, 1128, 1131, -1,1140, 1127, 1131, -1,1142, 1138, 1141, -1, + 1141, 1144, 1143, -1,1147, 1146, 1145, -1,1148, 1144, 1147, -1,1131, 1130, 1137, -1, + 1127, 1118, 1129, -1,1127, 1149, 1124, -1,1122, 1120, 1126, -1,1126, 1117, 1123, -1, + 1134, 1132, 1137, -1,1137, 1132, 1150, -1,1132, 1135, 1151, -1,1133, 1135, 1132, -1, + 1125, 1123, 1119, -1,1121, 1114, 1122, -1,1125, 1124, 1149, -1,1149, 1127, 1140, -1, + 1131, 1137, 1152, -1,1132, 1151, 1150, -1,1137, 1150, 1152, -1,1140, 1131, 1152, -1, + 1153, 1151, 1135, -1,1138, 1142, 1139, -1,1154, 1139, 1142, -1,1155, 1142, 1143, -1, + 1141, 1143, 1142, -1,1147, 1145, 1148, -1,1156, 1148, 1145, -1,1158, 1145, 1157, -1, + 1146, 1157, 1145, -1,1148, 1159, 1143, -1,1144, 1148, 1143, -1,1139, 1154, 1153, -1, + 1142, 1155, 1154, -1,1148, 1156, 1159, -1,1157, 1160, 1158, -1,1145, 1158, 1156, -1, + 1143, 1159, 1155, -1,1153, 1135, 1139, -1,1136, 1139, 1135, -1,1157, 1146, 1161, -1, + 1163, 1161, 1162, -1,1166, 1165, 1164, -1,1168, 1164, 1167, -1,1165, 1169, 1162, -1, + 1161, 1163, 1157, -1,1160, 1157, 1163, -1,1170, 1163, 1169, -1,1162, 1169, 1163, -1, + 1164, 1168, 1166, -1,1171, 1166, 1168, -1,1173, 1168, 1172, -1,1167, 1172, 1168, -1, + 1166, 1174, 1169, -1,1165, 1166, 1169, -1,1175, 1172, 1167, -1,1175, 1177, 1176, -1, + 1179, 1176, 1178, -1,1182, 1181, 1180, -1,1181, 1184, 1183, -1,1185, 1178, 1182, -1, + 1187, 1184, 1186, -1,1175, 1176, 1179, -1,1188, 1175, 1179, -1,1190, 1186, 1189, -1, + 1189, 1192, 1191, -1,1194, 1111, 1193, -1,1195, 1192, 1194, -1,1179, 1178, 1185, -1, + 1175, 1167, 1177, -1,1175, 1196, 1172, -1,1170, 1169, 1174, -1,1174, 1166, 1171, -1, + 1182, 1180, 1185, -1,1185, 1180, 1197, -1,1180, 1183, 1198, -1,1181, 1183, 1180, -1, + 1173, 1171, 1168, -1,1160, 1163, 1170, -1,1173, 1172, 1196, -1,1196, 1175, 1188, -1, + 1179, 1185, 1199, -1,1180, 1198, 1197, -1,1185, 1197, 1199, -1,1188, 1179, 1199, -1, + 1200, 1198, 1183, -1,1186, 1190, 1187, -1,1201, 1187, 1190, -1,1202, 1190, 1191, -1, + 1189, 1191, 1190, -1,1194, 1193, 1195, -1,1203, 1195, 1193, -1,1204, 1193, 1112, -1, + 1111, 1112, 1193, -1,1195, 1205, 1191, -1,1192, 1195, 1191, -1,1187, 1201, 1200, -1, + 1190, 1202, 1201, -1,1195, 1203, 1205, -1,1112, 1121, 1204, -1,1193, 1204, 1203, -1, + 1191, 1205, 1202, -1,1200, 1183, 1187, -1,1184, 1187, 1183, -1,1208, 1207, 1206, -1, + 1210, 1206, 1209, -1,1213, 1212, 1211, -1,1215, 1211, 1214, -1,1212, 1216, 1209, -1, + 1206, 1210, 1208, -1,1217, 1208, 1210, -1,1218, 1210, 1216, -1,1209, 1216, 1210, -1, + 1211, 1215, 1213, -1,1219, 1213, 1215, -1,1221, 1215, 1220, -1,1214, 1220, 1215, -1, + 1213, 1222, 1216, -1,1212, 1213, 1216, -1,1223, 1220, 1214, -1,1223, 1225, 1224, -1, + 1227, 1224, 1226, -1,1230, 1229, 1228, -1,1229, 1232, 1231, -1,1233, 1226, 1230, -1, + 1235, 1232, 1234, -1,1223, 1224, 1227, -1,1236, 1223, 1227, -1,1238, 1234, 1237, -1, + 1237, 1240, 1239, -1,1243, 1242, 1241, -1,1244, 1240, 1243, -1,1227, 1226, 1233, -1, + 1223, 1214, 1225, -1,1223, 1245, 1220, -1,1218, 1216, 1222, -1,1222, 1213, 1219, -1, + 1230, 1228, 1233, -1,1233, 1228, 1246, -1,1228, 1231, 1247, -1,1229, 1231, 1228, -1, + 1221, 1219, 1215, -1,1217, 1210, 1218, -1,1221, 1220, 1245, -1,1245, 1223, 1236, -1, + 1227, 1233, 1248, -1,1228, 1247, 1246, -1,1233, 1246, 1248, -1,1236, 1227, 1248, -1, + 1249, 1247, 1231, -1,1234, 1238, 1235, -1,1250, 1235, 1238, -1,1251, 1238, 1239, -1, + 1237, 1239, 1238, -1,1243, 1241, 1244, -1,1252, 1244, 1241, -1,1254, 1241, 1253, -1, + 1242, 1253, 1241, -1,1244, 1255, 1239, -1,1240, 1244, 1239, -1,1235, 1250, 1249, -1, + 1238, 1251, 1250, -1,1244, 1252, 1255, -1,1253, 1256, 1254, -1,1241, 1254, 1252, -1, + 1239, 1255, 1251, -1,1249, 1231, 1235, -1,1232, 1235, 1231, -1,1253, 1242, 1257, -1, + 1259, 1257, 1258, -1,1262, 1261, 1260, -1,1264, 1260, 1263, -1,1261, 1265, 1258, -1, + 1257, 1259, 1253, -1,1256, 1253, 1259, -1,1266, 1259, 1265, -1,1258, 1265, 1259, -1, + 1260, 1264, 1262, -1,1267, 1262, 1264, -1,1269, 1264, 1268, -1,1263, 1268, 1264, -1, + 1262, 1270, 1265, -1,1261, 1262, 1265, -1,1271, 1268, 1263, -1,1271, 1273, 1272, -1, + 1275, 1272, 1274, -1,1278, 1277, 1276, -1,1277, 1280, 1279, -1,1281, 1274, 1278, -1, + 1283, 1280, 1282, -1,1271, 1272, 1275, -1,1284, 1271, 1275, -1,1286, 1282, 1285, -1, + 1285, 1288, 1287, -1,1290, 1207, 1289, -1,1291, 1288, 1290, -1,1275, 1274, 1281, -1, + 1271, 1263, 1273, -1,1271, 1292, 1268, -1,1266, 1265, 1270, -1,1270, 1262, 1267, -1, + 1278, 1276, 1281, -1,1281, 1276, 1293, -1,1276, 1279, 1294, -1,1277, 1279, 1276, -1, + 1269, 1267, 1264, -1,1256, 1259, 1266, -1,1269, 1268, 1292, -1,1292, 1271, 1284, -1, + 1275, 1281, 1295, -1,1276, 1294, 1293, -1,1281, 1293, 1295, -1,1284, 1275, 1295, -1, + 1296, 1294, 1279, -1,1282, 1286, 1283, -1,1297, 1283, 1286, -1,1298, 1286, 1287, -1, + 1285, 1287, 1286, -1,1290, 1289, 1291, -1,1299, 1291, 1289, -1,1300, 1289, 1208, -1, + 1207, 1208, 1289, -1,1291, 1301, 1287, -1,1288, 1291, 1287, -1,1283, 1297, 1296, -1, + 1286, 1298, 1297, -1,1291, 1299, 1301, -1,1208, 1217, 1300, -1,1289, 1300, 1299, -1, + 1287, 1301, 1298, -1,1296, 1279, 1283, -1,1280, 1283, 1279, -1,1302, 1217, 1218, -1, + 1303, 1218, 1222, -1,1304, 1219, 1221, -1,1305, 1221, 1245, -1,1219, 1306, 1222, -1, + 1218, 1303, 1302, -1,1307, 1302, 1303, -1,1308, 1303, 1306, -1,1222, 1306, 1303, -1, + 1221, 1305, 1304, -1,1309, 1304, 1305, -1,1311, 1305, 1310, -1,1245, 1310, 1305, -1, + 1304, 1312, 1306, -1,1219, 1304, 1306, -1,1313, 1310, 1245, -1,1313, 1236, 1248, -1, + 1314, 1248, 1246, -1,1247, 1249, 1315, -1,1249, 1250, 1316, -1,1317, 1246, 1247, -1, + 1318, 1250, 1251, -1,1313, 1248, 1314, -1,1319, 1313, 1314, -1,1320, 1251, 1255, -1, + 1255, 1252, 1321, -1,1254, 1256, 1322, -1,1323, 1252, 1254, -1,1314, 1246, 1317, -1, + 1313, 1245, 1236, -1,1313, 1324, 1310, -1,1308, 1306, 1312, -1,1312, 1304, 1309, -1, + 1247, 1315, 1317, -1,1317, 1315, 1325, -1,1315, 1316, 1326, -1,1249, 1316, 1315, -1, + 1311, 1309, 1305, -1,1307, 1303, 1308, -1,1311, 1310, 1324, -1,1324, 1313, 1319, -1, + 1314, 1317, 1327, -1,1315, 1326, 1325, -1,1317, 1325, 1327, -1,1319, 1314, 1327, -1, + 1328, 1326, 1316, -1,1251, 1320, 1318, -1,1329, 1318, 1320, -1,1330, 1320, 1321, -1, + 1255, 1321, 1320, -1,1254, 1322, 1323, -1,1331, 1323, 1322, -1,1333, 1322, 1332, -1, + 1256, 1332, 1322, -1,1323, 1334, 1321, -1,1252, 1323, 1321, -1,1318, 1329, 1328, -1, + 1320, 1330, 1329, -1,1323, 1331, 1334, -1,1332, 1335, 1333, -1,1322, 1333, 1331, -1, + 1321, 1334, 1330, -1,1328, 1316, 1318, -1,1250, 1318, 1316, -1,1332, 1256, 1266, -1, + 1336, 1266, 1270, -1,1337, 1267, 1269, -1,1338, 1269, 1292, -1,1267, 1339, 1270, -1, + 1266, 1336, 1332, -1,1335, 1332, 1336, -1,1340, 1336, 1339, -1,1270, 1339, 1336, -1, + 1269, 1338, 1337, -1,1341, 1337, 1338, -1,1343, 1338, 1342, -1,1292, 1342, 1338, -1, + 1337, 1344, 1339, -1,1267, 1337, 1339, -1,1345, 1342, 1292, -1,1345, 1284, 1295, -1, + 1346, 1295, 1293, -1,1294, 1296, 1347, -1,1296, 1297, 1348, -1,1349, 1293, 1294, -1, + 1350, 1297, 1298, -1,1345, 1295, 1346, -1,1351, 1345, 1346, -1,1352, 1298, 1301, -1, + 1301, 1299, 1353, -1,1300, 1217, 1354, -1,1355, 1299, 1300, -1,1346, 1293, 1349, -1, + 1345, 1292, 1284, -1,1345, 1356, 1342, -1,1340, 1339, 1344, -1,1344, 1337, 1341, -1, + 1294, 1347, 1349, -1,1349, 1347, 1357, -1,1347, 1348, 1358, -1,1296, 1348, 1347, -1, + 1343, 1341, 1338, -1,1335, 1336, 1340, -1,1343, 1342, 1356, -1,1356, 1345, 1351, -1, + 1346, 1349, 1359, -1,1347, 1358, 1357, -1,1349, 1357, 1359, -1,1351, 1346, 1359, -1, + 1360, 1358, 1348, -1,1298, 1352, 1350, -1,1361, 1350, 1352, -1,1362, 1352, 1353, -1, + 1301, 1353, 1352, -1,1300, 1354, 1355, -1,1363, 1355, 1354, -1,1364, 1354, 1302, -1, + 1217, 1302, 1354, -1,1355, 1365, 1353, -1,1299, 1355, 1353, -1,1350, 1361, 1360, -1, + 1352, 1362, 1361, -1,1355, 1363, 1365, -1,1302, 1307, 1364, -1,1354, 1364, 1363, -1, + 1353, 1365, 1362, -1,1360, 1348, 1350, -1,1297, 1350, 1348, -1,1366, 1307, 1308, -1, + 1367, 1308, 1312, -1,1368, 1309, 1311, -1,1369, 1311, 1324, -1,1309, 1370, 1312, -1, + 1308, 1367, 1366, -1,1371, 1366, 1367, -1,1372, 1367, 1370, -1,1312, 1370, 1367, -1, + 1311, 1369, 1368, -1,1373, 1368, 1369, -1,1375, 1369, 1374, -1,1324, 1374, 1369, -1, + 1368, 1376, 1370, -1,1309, 1368, 1370, -1,1377, 1374, 1324, -1,1377, 1319, 1327, -1, + 1378, 1327, 1325, -1,1326, 1328, 1379, -1,1328, 1329, 1380, -1,1381, 1325, 1326, -1, + 1382, 1329, 1330, -1,1377, 1327, 1378, -1,1383, 1377, 1378, -1,1384, 1330, 1334, -1, + 1334, 1331, 1385, -1,1333, 1335, 1386, -1,1387, 1331, 1333, -1,1378, 1325, 1381, -1, + 1377, 1324, 1319, -1,1377, 1388, 1374, -1,1372, 1370, 1376, -1,1376, 1368, 1373, -1, + 1326, 1379, 1381, -1,1381, 1379, 1389, -1,1379, 1380, 1390, -1,1328, 1380, 1379, -1, + 1375, 1373, 1369, -1,1371, 1367, 1372, -1,1375, 1374, 1388, -1,1388, 1377, 1383, -1, + 1378, 1381, 1391, -1,1379, 1390, 1389, -1,1381, 1389, 1391, -1,1383, 1378, 1391, -1, + 1392, 1390, 1380, -1,1330, 1384, 1382, -1,1393, 1382, 1384, -1,1394, 1384, 1385, -1, + 1334, 1385, 1384, -1,1333, 1386, 1387, -1,1395, 1387, 1386, -1,1397, 1386, 1396, -1, + 1335, 1396, 1386, -1,1387, 1398, 1385, -1,1331, 1387, 1385, -1,1382, 1393, 1392, -1, + 1384, 1394, 1393, -1,1387, 1395, 1398, -1,1396, 1399, 1397, -1,1386, 1397, 1395, -1, + 1385, 1398, 1394, -1,1392, 1380, 1382, -1,1329, 1382, 1380, -1,1396, 1335, 1340, -1, + 1400, 1340, 1344, -1,1401, 1341, 1343, -1,1402, 1343, 1356, -1,1341, 1403, 1344, -1, + 1340, 1400, 1396, -1,1399, 1396, 1400, -1,1404, 1400, 1403, -1,1344, 1403, 1400, -1, + 1343, 1402, 1401, -1,1405, 1401, 1402, -1,1407, 1402, 1406, -1,1356, 1406, 1402, -1, + 1401, 1408, 1403, -1,1341, 1401, 1403, -1,1409, 1406, 1356, -1,1409, 1351, 1359, -1, + 1410, 1359, 1357, -1,1358, 1360, 1411, -1,1360, 1361, 1412, -1,1413, 1357, 1358, -1, + 1414, 1361, 1362, -1,1409, 1359, 1410, -1,1415, 1409, 1410, -1,1416, 1362, 1365, -1, + 1365, 1363, 1417, -1,1364, 1307, 1418, -1,1419, 1363, 1364, -1,1410, 1357, 1413, -1, + 1409, 1356, 1351, -1,1409, 1420, 1406, -1,1404, 1403, 1408, -1,1408, 1401, 1405, -1, + 1358, 1411, 1413, -1,1413, 1411, 1421, -1,1411, 1412, 1422, -1,1360, 1412, 1411, -1, + 1407, 1405, 1402, -1,1399, 1400, 1404, -1,1407, 1406, 1420, -1,1420, 1409, 1415, -1, + 1410, 1413, 1423, -1,1411, 1422, 1421, -1,1413, 1421, 1423, -1,1415, 1410, 1423, -1, + 1424, 1422, 1412, -1,1362, 1416, 1414, -1,1425, 1414, 1416, -1,1426, 1416, 1417, -1, + 1365, 1417, 1416, -1,1364, 1418, 1419, -1,1427, 1419, 1418, -1,1428, 1418, 1366, -1, + 1307, 1366, 1418, -1,1419, 1429, 1417, -1,1363, 1419, 1417, -1,1414, 1425, 1424, -1, + 1416, 1426, 1425, -1,1419, 1427, 1429, -1,1366, 1371, 1428, -1,1418, 1428, 1427, -1, + 1417, 1429, 1426, -1,1424, 1412, 1414, -1,1361, 1414, 1412, -1,1430, 1371, 1372, -1, + 1431, 1376, 1373, -1,1432, 1373, 1375, -1,1376, 1433, 1372, -1,1433, 1376, 1431, -1, + 1434, 1430, 1433, -1,1435, 1375, 1388, -1,1432, 1431, 1373, -1,1436, 1431, 1432, -1, + 1437, 1388, 1383, -1,1431, 1436, 1433, -1,1430, 1372, 1433, -1,1383, 1391, 1438, -1, + 1389, 1390, 1439, -1,1390, 1392, 1440, -1,1441, 1391, 1389, -1,1393, 1394, 1442, -1, + 1394, 1398, 1443, -1,1395, 1397, 1444, -1,1397, 1399, 1445, -1,1446, 1398, 1395, -1, + 1447, 1392, 1393, -1,1375, 1435, 1432, -1,1388, 1437, 1435, -1,1448, 1435, 1437, -1, + 1391, 1441, 1438, -1,1449, 1438, 1441, -1,1450, 1441, 1439, -1,1389, 1439, 1441, -1, + 1438, 1449, 1437, -1,1383, 1438, 1437, -1,1448, 1432, 1435, -1,1448, 1437, 1449, -1, + 1440, 1450, 1439, -1,1450, 1449, 1441, -1,1451, 1450, 1440, -1,1448, 1436, 1432, -1, + 1436, 1434, 1433, -1,1390, 1440, 1439, -1,1393, 1442, 1447, -1,1451, 1447, 1442, -1, + 1398, 1446, 1443, -1,1452, 1443, 1446, -1,1453, 1446, 1444, -1,1395, 1444, 1446, -1, + 1443, 1452, 1442, -1,1394, 1443, 1442, -1,1452, 1446, 1453, -1,1444, 1445, 1453, -1, + 1455, 1454, 1445, -1,1453, 1445, 1454, -1,1399, 1455, 1445, -1,1451, 1442, 1452, -1, + 1451, 1440, 1447, -1,1397, 1445, 1444, -1,1392, 1447, 1440, -1,1455, 1399, 1404, -1, + 1456, 1408, 1405, -1,1457, 1405, 1407, -1,1408, 1458, 1404, -1,1458, 1408, 1456, -1, + 1454, 1455, 1458, -1,1459, 1407, 1420, -1,1457, 1456, 1405, -1,1460, 1456, 1457, -1, + 1461, 1420, 1415, -1,1456, 1460, 1458, -1,1455, 1404, 1458, -1,1415, 1423, 1462, -1, + 1421, 1422, 1463, -1,1422, 1424, 1464, -1,1465, 1423, 1421, -1,1425, 1426, 1466, -1, + 1426, 1429, 1467, -1,1427, 1428, 1468, -1,1428, 1371, 1469, -1,1470, 1429, 1427, -1, + 1471, 1424, 1425, -1,1407, 1459, 1457, -1,1420, 1461, 1459, -1,1472, 1459, 1461, -1, + 1423, 1465, 1462, -1,1473, 1462, 1465, -1,1474, 1465, 1463, -1,1421, 1463, 1465, -1, + 1462, 1473, 1461, -1,1415, 1462, 1461, -1,1472, 1457, 1459, -1,1472, 1461, 1473, -1, + 1464, 1474, 1463, -1,1474, 1473, 1465, -1,1475, 1474, 1464, -1,1472, 1460, 1457, -1, + 1460, 1454, 1458, -1,1422, 1464, 1463, -1,1425, 1466, 1471, -1,1475, 1471, 1466, -1, + 1429, 1470, 1467, -1,1476, 1467, 1470, -1,1477, 1470, 1468, -1,1427, 1468, 1470, -1, + 1467, 1476, 1466, -1,1426, 1467, 1466, -1,1476, 1470, 1477, -1,1468, 1469, 1477, -1, + 1430, 1434, 1469, -1,1477, 1469, 1434, -1,1371, 1430, 1469, -1,1475, 1466, 1476, -1, + 1475, 1464, 1471, -1,1428, 1469, 1468, -1,1424, 1471, 1464, -1,1478, 1434, 1436, -1, + 1479, 1436, 1448, -1,1436, 1479, 1478, -1,1480, 1478, 1479, -1,1482, 1479, 1481, -1, + 1448, 1481, 1479, -1,1483, 1481, 1448, -1,1483, 1449, 1450, -1,1450, 1451, 1484, -1, + 1485, 1452, 1453, -1,1452, 1486, 1451, -1,1453, 1454, 1487, -1,1484, 1483, 1450, -1, + 1483, 1448, 1449, -1,1483, 1488, 1481, -1,1489, 1484, 1486, -1,1480, 1479, 1482, -1, + 1488, 1482, 1481, -1,1451, 1486, 1484, -1,1488, 1483, 1490, -1,1484, 1489, 1490, -1, + 1483, 1484, 1490, -1,1491, 1489, 1486, -1,1453, 1487, 1485, -1,1492, 1485, 1487, -1, + 1494, 1487, 1493, -1,1454, 1493, 1487, -1,1485, 1492, 1491, -1,1493, 1495, 1494, -1, + 1487, 1494, 1492, -1,1491, 1486, 1485, -1,1452, 1485, 1486, -1,1493, 1454, 1460, -1, + 1496, 1460, 1472, -1,1460, 1496, 1493, -1,1495, 1493, 1496, -1,1498, 1496, 1497, -1, + 1472, 1497, 1496, -1,1499, 1497, 1472, -1,1499, 1473, 1474, -1,1474, 1475, 1500, -1, + 1501, 1476, 1477, -1,1476, 1502, 1475, -1,1477, 1434, 1503, -1,1500, 1499, 1474, -1, + 1499, 1472, 1473, -1,1499, 1504, 1497, -1,1505, 1500, 1502, -1,1495, 1496, 1498, -1, + 1504, 1498, 1497, -1,1475, 1502, 1500, -1,1504, 1499, 1506, -1,1500, 1505, 1506, -1, + 1499, 1500, 1506, -1,1507, 1505, 1502, -1,1477, 1503, 1501, -1,1508, 1501, 1503, -1, + 1509, 1503, 1478, -1,1434, 1478, 1503, -1,1501, 1508, 1507, -1,1478, 1480, 1509, -1, + 1503, 1509, 1508, -1,1507, 1502, 1501, -1,1476, 1501, 1502, -1,1510, 1480, 1482, -1, + 1488, 1511, 1482, -1,1510, 1482, 1511, -1,1512, 1510, 1511, -1,1513, 1488, 1490, -1, + 1490, 1489, 1514, -1,1489, 1491, 1515, -1,1492, 1494, 1516, -1,1494, 1495, 1517, -1, + 1518, 1491, 1492, -1,1488, 1513, 1511, -1,1490, 1514, 1513, -1,1512, 1513, 1514, -1, + 1512, 1514, 1515, -1,1489, 1515, 1514, -1,1511, 1513, 1512, -1,1518, 1512, 1515, -1, + 1492, 1516, 1518, -1,1512, 1518, 1516, -1,1512, 1516, 1517, -1,1494, 1517, 1516, -1, + 1519, 1512, 1517, -1,1495, 1519, 1517, -1,1491, 1518, 1515, -1,1519, 1495, 1498, -1, + 1504, 1520, 1498, -1,1519, 1498, 1520, -1,1512, 1519, 1520, -1,1521, 1504, 1506, -1, + 1506, 1505, 1522, -1,1505, 1507, 1523, -1,1508, 1509, 1524, -1,1509, 1480, 1525, -1, + 1526, 1507, 1508, -1,1504, 1521, 1520, -1,1506, 1522, 1521, -1,1512, 1521, 1522, -1, + 1512, 1522, 1523, -1,1505, 1523, 1522, -1,1520, 1521, 1512, -1,1526, 1512, 1523, -1, + 1508, 1524, 1526, -1,1512, 1526, 1524, -1,1512, 1524, 1525, -1,1509, 1525, 1524, -1, + 1510, 1512, 1525, -1,1480, 1510, 1525, -1,1507, 1526, 1523, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/link3.wrl b/examples/rlsg/staeubli-tx60l/link3.wrl new file mode 100644 index 00000000..3074532f --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link3.wrl @@ -0,0 +1,3114 @@ +#VRML V2.0 utf8 + +DEF link3a Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.533333 0.533333 0.533333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 102 + -0.07 -0.013493 0.024683, -0.07 -0.013775 0.022058, -0.07 -0.014439 0.019495, -0.07 -0.016839 0.014856, + -0.07 -0.021233 0.007532, -0.07 -0.022984 0.00362504, -0.07 -0.024422 -0.000402987, -0.07 -0.025429 -0.0291499, + -0.07 -0.022797 -0.0372069, -0.07 -0.021008 -0.041113, -0.07 -0.018921 -0.044836, -0.07 -0.017712 -0.047156, + -0.07 -0.016854 -0.049658, -0.07 -0.01627 -0.054907, -0.07 -0.017605 -0.093054, -0.07 -0.018464 -0.099463, + -0.07 -0.020554 -0.105566, -0.07 -0.0238 -0.111182, -0.07 -0.028077 -0.116064, -0.07 -0.033219 -0.119971, + -0.07 -0.039029 -0.122839, -0.07 -0.045277 -0.124487, -0.07 -0.051739 -0.124854, -0.07 -0.058148 -0.123999, + -0.07 -0.064267 -0.121924, -0.07 -0.069867 -0.118689, -0.07 -0.074719 -0.114417, -0.07 -0.078648 -0.10929, + -0.07 -0.081494 -0.10343, -0.07 -0.083157 -0.097205, -0.07 -0.083561 -0.090735, -0.07 -0.077977 0.069177, + -0.07 -0.077122 0.075586, -0.07 -0.075032 0.081689, -0.07 -0.071782 0.087305, -0.07 -0.067509 0.092126, + -0.07 -0.062367 0.096033, -0.07 -0.056553 0.098901, -0.07 -0.050305 0.100549, -0.07 -0.043847 0.100977, + -0.07 -0.037438 0.100122, -0.07 -0.031315 0.098047, -0.07 -0.025719 0.094812, -0.07 -0.020867 0.090479, + -0.07 -0.016938 0.085352, -0.07 -0.014088 0.079553, -0.07 -0.012429 0.073328, -0.07 -0.012021 0.0668581, + -0.064995 0.018556 -0.039465, -0.065002 0.01833 -0.0399539, -0.065002 0.018105 -0.040442, -0.063877 0.011771 -0.0540529, + -0.060486 0.00558198 -0.067297, -0.056129 0.000853982 -0.077429, -0.050282 -0.00357702 -0.086951, + -0.043919 -0.00711901 -0.094519, -0.036427 -0.010237 -0.101233, -0.029482 -0.012394 -0.105872, -0.021894 -0.014122 -0.109534, + -0.013781 -0.015347 -0.112158, -0.00530999 -0.016011 -0.113623, 0.00737701 -0.015904 -0.113379, 0.019642 -0.014523 -0.110388, + 0.028444 -0.012669 -0.106421, 0.036427 -0.010237 -0.101233, 0.042786 -0.00765299 -0.095679, 0.048351 -0.00475898 -0.089453, + 0.057056 0.00171802 -0.075598, 0.060547 0.00566102 -0.067114, 0.063026 0.00973802 -0.058386, 0.065002 0.018105 -0.040442, + 0.063904 0.026649 -0.022131, 0.060558 0.035088 -0.004004, 0.055923 0.041938 0.010645, 0.049408 0.048507 0.024744, + 0.043255 0.053043 0.034509, 0.035778 0.057209 0.04342, 0.029182 0.059974 0.049341, 0.021694 0.062297 0.054346, + 0.015448 0.063655 0.057214, 0.00877598 0.064582 0.059229, -0.00329601 0.064956 0.060022, -0.014594 0.063804 0.057581, + -0.025864 0.061103 0.051782, -0.033665 0.058174 0.045496, -0.040379 0.054794 0.038232, -0.047623 0.049953 0.0278561, + -0.053402 0.044771 0.016748, -0.061638 0.042667 0.0122311, -0.06752 0.040063 0.00667703, -0.071838 0.036958 -3.69549e-005, + -0.074463 0.033531 -0.00736099, -0.075348 0.029946 -0.0150509, -0.074203 0.025868 -0.023779, -0.070793 0.022023 -0.032019, + -0.069 -0.081814 0.016748, -0.06987 -0.081959 0.012598, -0.070496 -0.082104 0.00844705, -0.070999 -0.082394 2.40207e-005, + -0.070877 -0.082547 -0.00424796, -0.070496 -0.082692 -0.008398, -0.069 -0.082982 -0.01676] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 84 + 1 1.95471e-006 3.18267e-007, 1 0 0, 1 1.47256e-006 1.30026e-007, 1 1.94472e-007 2.00377e-008, 1 1.7214e-006 1.89093e-007, + 1 -6.96059e-007 7.6688e-007, 1 5.78809e-006 2.39255e-008, 1 7.44162e-006 7.91848e-008, 1 1.917e-005 -2.05942e-006, + 1 4.15464e-007 2.90888e-008, 1 2.83069e-007 -1.73397e-008, 1 6.18165e-007 5.9235e-009, 1 -2.62597e-009 -7.39948e-008, + 1 4.11174e-007 -1.46151e-008, 1 1.15214e-008 -7.08492e-008, 1 -1.70563e-008 9.91394e-009, 1 4.31635e-007 -3.4288e-009, + 1 5.39712e-007 -2.6136e-007, 1 3.54566e-007 -1.24724e-007, 1 4.6379e-007 -6.60416e-008, 1 4.46356e-007 -3.82854e-008, + 1 4.0792e-007 -2.83377e-008, 1 -6.0662e-007 -5.41099e-007, 1 -1.30923e-006 -7.48197e-007, 1 6.58629e-007 -1.60827e-008, + 1 -1.31512e-008 8.08878e-008, 1 2.01446e-006 -2.58896e-007, 1 5.8468e-006 3.65085e-007, 1 5.61981e-007 -1.15308e-007, + 1 2.7633e-009 7.70906e-008, 0.00147979 -0.905352 0.42466, 0.000580029 -0.905911 0.423467, 0.000291788 -0.906174 0.422906, + -0.000423837 -0.9066 0.42199, -0.000593735 -0.906756 0.421655, -0.000155233 -0.906368 0.422489, + 0.000194906 -0.906068 0.423133, 0.000188431 -0.905946 0.423394, -0.00444182 -0.908829 0.417146, + -0.00508025 -0.909087 0.416575, -0.0109571 -0.912888 0.408064, 0.000370418 -0.905935 0.423417, 0.000148307 -0.906122 0.423017, + -0.00108897 -0.90711 0.420893, -7.78834e-005 -0.906326 0.422579, -0.00218618 -0.907931 0.419113, -0.001285 -0.907268 0.42055, + 0.00232579 -0.905837 0.42362, 8.39735e-005 -0.906353 0.422521, 0.00250221 -0.905797 0.423705, 0.000786803 -0.906101 0.423062, + 0.000722832 -0.906175 0.422902, -0.00135133 -0.906252 0.422735, -0.00124527 -0.906404 0.422411, + 0.000962426 -0.906299 0.422635, -6.3911e-005 -0.906317 0.422599, 7.18654e-005 -0.906271 0.422697, + -5.93336e-005 -0.906323 0.422585, -7.94832e-005 -0.906421 0.422376, 1.95133e-005 -0.90639 0.422442, + 8.52048e-005 -0.90618 0.422893, -1.46237e-005 -0.906393 0.422436, 3.69226e-005 -0.906213 0.422822, + 0.000131258 -0.906173 0.422907, 0.000136096 -0.906102 0.423059, -2.6285e-006 -0.90644 0.422334, + -0.000167472 -0.906643 0.421898, -3.73734e-005 -0.90653 0.422142, -7.02455e-005 -0.906454 0.422305, + 0.000376268 -0.90596 0.423363, 0.000244402 -0.906061 0.423147, 0.00011376 -0.906269 0.422702, + -7.75375e-005 -0.906406 0.422407, 0.000344887 -0.904974 0.425466, -0.000884713 -0.909583 0.415522, + 0.000578681 -0.905864 0.423568, -0.000156004 -0.906437 0.42234, -7.7886e-005 0.999976 -0.0069679, + -0.00037381 0.999848 -0.017426, -0.000555403 0.999392 -0.0348595, 0.00529161 0.999372 -0.0350376, + -0.000302738 0.999392 -0.0348759, 0.00802304 0.999351 -0.0351135, 0.015677 0.999252 -0.0353397] + } + coordIndex [ + 47, 46, 45, -1,47, 44, 4, -1,47, 45, 44, -1,4, 44, 43, -1,0, 47, 3, -1,0, 3, 2, -1, + 47, 4, 3, -1,5, 4, 42, -1,42, 4, 43, -1,2, 1, 0, -1,6, 5, 41, -1,6, 41, 40, -1,39, + 6, 40, -1,38, 37, 6, -1,39, 38, 6, -1,42, 41, 5, -1,34, 31, 35, -1,36, 35, 31, -1, + 32, 31, 33, -1,34, 33, 31, -1,30, 36, 31, -1,36, 25, 37, -1,24, 6, 37, -1,11, 10, + 13, -1,14, 10, 9, -1,18, 9, 8, -1,8, 7, 19, -1,12, 11, 13, -1,17, 14, 9, -1,15, 14, + 16, -1,17, 9, 18, -1,16, 14, 17, -1,14, 13, 10, -1,18, 8, 19, -1,30, 26, 25, -1,27, + 26, 30, -1,21, 20, 7, -1,29, 28, 30, -1,27, 30, 28, -1,19, 7, 20, -1,22, 7, 23, -1, + 24, 23, 7, -1,30, 25, 36, -1,24, 37, 25, -1,7, 22, 21, -1,7, 6, 24, -1,54, 55, 60, -1, + 54, 61, 53, -1,52, 53, 62, -1,56, 59, 55, -1,60, 61, 54, -1,61, 62, 53, -1,58, 59, + 56, -1,59, 60, 55, -1,56, 57, 58, -1,51, 52, 63, -1,51, 64, 50, -1,50, 65, 49, -1, + 94, 48, 93, -1,93, 48, 92, -1,65, 48, 49, -1,48, 91, 92, -1,48, 90, 91, -1,89, 90, + 48, -1,48, 88, 89, -1,48, 87, 88, -1,48, 70, 87, -1,63, 52, 62, -1,64, 65, 50, -1, + 48, 65, 66, -1,67, 68, 48, -1,67, 48, 66, -1,48, 68, 69, -1,87, 70, 71, -1,72, 87, + 71, -1,86, 72, 73, -1,72, 86, 87, -1,69, 70, 48, -1,74, 85, 73, -1,85, 74, 84, -1, + 85, 86, 73, -1,84, 74, 83, -1,83, 76, 82, -1,82, 77, 81, -1,82, 76, 77, -1,77, 78, + 81, -1,81, 79, 80, -1,81, 78, 79, -1,76, 83, 75, -1,83, 74, 75, -1,64, 51, 63, -1, + 101, 95, 95, -1,96, 95, 101, -1,95, 101, 95, -1,100, 97, 96, -1,100, 99, 97, -1,98, + 97, 99, -1,101, 100, 96, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,2, 4, 3, -1,2, 0, 4, -1,3, 4, 1, -1,6, 2, 5, -1,6, 5, 7, -1,2, 3, 5, -1, + 1, 3, 1, -1,1, 3, 1, -1,7, 8, 6, -1,10, 1, 9, -1,10, 9, 11, -1,12, 10, 11, -1,14, + 13, 10, -1,12, 14, 10, -1,1, 9, 1, -1,1, 15, 1, -1,16, 1, 15, -1,1, 15, 1, -1,1, + 1, 15, -1,17, 16, 15, -1,16, 18, 13, -1,19, 10, 13, -1,1, 1, 1, -1,1, 1, 1, -1,1, + 1, 1, -1,1, 21, 20, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1, + 1, 1, 1, -1,1, 1, 20, -1,17, 22, 18, -1,23, 22, 17, -1,25, 24, 21, -1,27, 26, 17, -1, + 23, 17, 26, -1,20, 21, 24, -1,29, 21, 28, -1,19, 28, 21, -1,17, 18, 16, -1,19, 13, + 18, -1,21, 29, 25, -1,21, 10, 19, -1,32, 31, 30, -1,32, 34, 33, -1,36, 33, 35, -1, + 38, 37, 31, -1,30, 34, 32, -1,34, 35, 33, -1,39, 37, 38, -1,37, 30, 31, -1,38, 40, + 39, -1,42, 36, 41, -1,42, 44, 43, -1,43, 46, 45, -1,49, 48, 47, -1,47, 48, 50, -1, + 46, 48, 45, -1,48, 51, 50, -1,48, 52, 51, -1,53, 52, 48, -1,48, 54, 53, -1,48, 55, + 54, -1,48, 56, 55, -1,41, 36, 35, -1,44, 46, 43, -1,48, 46, 57, -1,59, 58, 48, -1, + 59, 48, 57, -1,48, 58, 60, -1,55, 56, 61, -1,62, 55, 61, -1,64, 62, 63, -1,62, 64, + 55, -1,60, 56, 48, -1,66, 65, 63, -1,65, 66, 67, -1,65, 64, 63, -1,67, 66, 68, -1, + 68, 70, 69, -1,69, 72, 71, -1,69, 70, 72, -1,72, 73, 71, -1,71, 75, 74, -1,71, 73, + 75, -1,70, 68, 76, -1,68, 66, 76, -1,44, 42, 41, -1,78, 77, 77, -1,79, 77, 78, -1, + 77, 78, 77, -1,81, 80, 79, -1,81, 82, 80, -1,83, 80, 82, -1,78, 81, 79, -1 + ] + } + } + ] +} +DEF link3b Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 0.666667 0.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 2239 + -0.084 -0.075566 -0.09104, -0.084 -0.072773 -0.011084, -0.084 -0.069981 0.068872, -0.084 -0.069294 0.073877, + -0.084 -0.067608 0.078638, -0.084 -0.065007 0.082971, -0.084 -0.061581 0.086694, -0.084 -0.053463 0.091516, + -0.084 -0.044125 0.092981, -0.084 -0.03463 0.090723, -0.084 -0.026719 0.0850461, -0.084 -0.021584 0.076746, + -0.084 -0.020016 0.067102, -0.084 -0.020752 0.046045, -0.084 -0.021489 0.024927, -0.084 -0.022015 0.022058, + -0.084 -0.023346 0.019495, -0.084 -0.028069 0.011743, -0.084 -0.031609 0.00338101, -0.084 -0.03389 -0.00540799, + -0.084 -0.034871 -0.01438, -0.084 -0.034523 -0.023474, -0.084 -0.032856 -0.032385, -0.084 -0.029908 -0.04093, + -0.084 -0.025738 -0.048987, -0.084 -0.02459 -0.051672, -0.084 -0.024266 -0.054602, -0.084 -0.024933 -0.073706, + -0.084 -0.025601 -0.092749, -0.084 -0.026303 -0.097876, -0.084 -0.028031 -0.102698, -0.084 -0.030671 -0.107031, + -0.084 -0.034131 -0.110754, -0.084 -0.042206 -0.115454, -0.084 -0.051457 -0.116858, -0.084 -0.060925 -0.114661, + -0.084 -0.068821 -0.108984, -0.084 -0.073987 -0.100684, -0.072502 -0.015671 -0.093115, -0.075424 -0.015748 -0.093115, + -0.078354 -0.015824 -0.093115, -0.078354 -0.016728 -0.09989, -0.078354 -0.018933 -0.106299, -0.078354 -0.022355 -0.112219, + -0.078354 -0.026864 -0.117346, -0.078354 -0.03228 -0.121497, -0.078354 -0.038403 -0.124487, -0.078354 -0.044995 -0.126257, + -0.078354 -0.0518 -0.126685, -0.078354 -0.058552 -0.125769, -0.078354 -0.065007 -0.123572, -0.078354 -0.070904 -0.120154, + -0.078354 -0.076024 -0.115637, -0.078354 -0.080166 -0.110205, -0.078354 -0.083165 -0.104102, -0.078354 -0.084912 -0.09751, + -0.078354 -0.085339 -0.090674, -0.075424 -0.085431 -0.090674, -0.072502 -0.085499 -0.090674, -0.072502 -0.085064 -0.09751, + -0.072502 -0.08331 -0.104163, -0.072502 -0.080288 -0.110266, -0.072502 -0.07613 -0.115698, -0.072502 -0.070996 -0.120276, + -0.072502 -0.065068 -0.123694, -0.072502 -0.05859 -0.125891, -0.072502 -0.0518 -0.126807, -0.072502 -0.044972 -0.126379, + -0.072502 -0.03835 -0.124609, -0.072502 -0.0322 -0.121619, -0.072502 -0.026757 -0.117468, -0.072502 -0.022233 -0.112341, + -0.072502 -0.018795 -0.10636, -0.072502 -0.016579 -0.09989, -0.078354 -0.079762 0.069238, -0.072502 -0.079915 0.069238, + -0.075424 -0.079838 0.069238, -0.078354 -0.078854 0.0759521, -0.078354 -0.076649 0.082422, -0.078354 -0.073231 0.088342, + -0.078354 -0.068722 0.093408, -0.078354 -0.063305 0.097559, -0.078354 -0.057179 0.100549, -0.078354 -0.050587 0.102319, + -0.078354 -0.043786 0.102747, -0.078354 -0.03703 0.101831, -0.078354 -0.030575 0.0996341, -0.078354 -0.024678 0.096216, + -0.078354 -0.019562 0.091699, -0.078354 -0.015423 0.086328, -0.078354 -0.012421 0.080164, -0.078354 -0.01067 0.073572, + -0.078354 -0.010239 0.066797, -0.075424 -0.010163 0.066797, -0.072502 -0.010087 0.066797, -0.072502 -0.010519 0.073633, + -0.072502 -0.012276 0.0802251, -0.072502 -0.015294 0.086389, -0.072502 -0.019452 0.091821, -0.072502 -0.02459 0.096338, + -0.072502 -0.030514 0.099817, -0.072502 -0.036992 0.102014, -0.072502 -0.043782 0.10293, -0.072502 -0.050618 0.102502, + -0.072502 -0.057232 0.100732, -0.072502 -0.063382 0.097681, -0.072502 -0.068829 0.09353, -0.072502 -0.073353 0.088403, + -0.072502 -0.076786 0.0824831, -0.072502 -0.079007 0.076013, -0.072502 -0.011559 0.024622, -0.078354 -0.011713 0.024622, + -0.075424 -0.011635 0.024622, -0.078354 -0.012024 0.021753, -0.078354 -0.012753 0.018945, -0.078354 -0.015389 0.013818, + -0.075424 -0.015328 0.0137571, -0.072502 -0.015263 0.013696, -0.072502 -0.012608 0.018884, -0.072502 -0.011874 0.021692, + -0.072502 -0.019082 0.00747102, -0.072502 -0.021992 0.000818014, -0.072502 -0.023938 -0.006262, -0.072502 -0.02488 -0.013464, + -0.072151 -0.024895 -0.013953, -0.071976 -0.02491 -0.014319, -0.071899 -0.024926 -0.014746, -0.071976 -0.024941 -0.015173, + -0.072151 -0.024956 -0.015601, -0.072502 -0.024971 -0.016028, -0.072502 -0.024533 -0.023291, -0.072502 -0.023083 -0.030493, + -0.072502 -0.020649 -0.037329, -0.072502 -0.017273 -0.043799, -0.075424 -0.017338 -0.04386, -0.078354 -0.017403 -0.043921, + -0.078354 -0.020916 -0.037085, -0.078354 -0.0234 -0.029883, -0.078354 -0.024804 -0.022375, -0.078354 -0.025094 -0.014746, + -0.078354 -0.02427 -0.00717795, -0.078354 -0.022347 0.000268996, -0.078354 -0.019364 0.00728804, + -0.078354 -0.015133 -0.049231, -0.078354 -0.014492 -0.054968, -0.075424 -0.014412 -0.054968, -0.072502 -0.014336 -0.054968, + -0.072502 -0.014985 -0.04917, -0.072502 -0.015934 -0.046423, -0.081177 -0.019368 0.016626, -0.084 -0.021645 0.023523, + -0.081177 -0.016602 0.024805, -0.081177 -0.021573 -0.046484, -0.084 -0.031605 0.00338101, -0.081177 -0.080449 -0.090857, + -0.084 -0.074002 -0.100684, -0.084 -0.068867 -0.108923, -0.084 -0.060948 -0.114661, -0.084 -0.041829 -0.115332, + -0.084 -0.033535 -0.110205, -0.084 -0.027836 -0.102271, -0.081177 -0.02071 -0.092932, -0.081177 -0.015126 0.06698, + -0.084 -0.026715 0.0850461, -0.084 -0.034634 0.090723, -0.084 -0.053753 0.091394, -0.084 -0.062047 0.086267, + -0.084 -0.067746 0.078394, -0.081177 -0.074872 0.069055, -0.081177 -0.019379 -0.054785, -0.072502 -0.024422 -0.000402987, + -0.072502 -0.021233 0.007532, -0.072502 -0.019181 0.011255, -0.072502 -0.016839 0.014856, -0.072502 -0.015469 0.017053, + -0.072502 -0.014439 0.019495, -0.072502 -0.013493 0.024683, -0.072502 -0.012021 0.0668581, -0.072502 -0.012429 0.073328, + -0.072502 -0.014088 0.079553, -0.072502 -0.016938 0.085352, -0.072502 -0.020867 0.090479, -0.072502 -0.025719 0.094812, + -0.072502 -0.031315 0.098047, -0.072502 -0.037438 0.100122, -0.072502 -0.043847 0.100977, -0.072502 -0.050305 0.100549, + -0.072502 -0.056553 0.098901, -0.072502 -0.062367 0.096033, -0.072502 -0.067509 0.092126, -0.072502 -0.071782 0.087305, + -0.072502 -0.075032 0.081689, -0.072502 -0.077122 0.075586, -0.072502 -0.077977 0.069177, -0.072502 -0.083561 -0.090735, + -0.072502 -0.083157 -0.097205, -0.072502 -0.081494 -0.10343, -0.072502 -0.078648 -0.10929, -0.072502 -0.074719 -0.114417, + -0.072502 -0.069867 -0.118689, -0.072502 -0.064267 -0.121924, -0.072502 -0.058148 -0.123999, -0.072502 -0.051739 -0.124854, + -0.072502 -0.045277 -0.124487, -0.072502 -0.039029 -0.122839, -0.072502 -0.033219 -0.119971, -0.072502 -0.028077 -0.116064, + -0.072502 -0.0238 -0.111182, -0.072502 -0.020554 -0.105566, -0.072502 -0.018464 -0.099463, -0.072502 -0.017605 -0.093054, + -0.072502 -0.01627 -0.054907, -0.072502 -0.016373 -0.052222, -0.072502 -0.016854 -0.049658, -0.072502 -0.018921 -0.044836, + -0.072502 -0.022797 -0.0372069, -0.072502 -0.024273 -0.03324, -0.072502 -0.025429 -0.0291499, -0.07 -0.012021 0.0668581, + -0.07 -0.013493 0.024683, -0.071251 -0.013493 0.024683, -0.071251 -0.016839 0.014856, -0.07 -0.016839 0.014856, + -0.07 -0.014439 0.019495, -0.07 -0.013775 0.022058, -0.07 -0.021233 0.007532, -0.07 -0.022984 0.00362504, + -0.07 -0.024422 -0.000402987, -0.071251 -0.024422 -0.000402987, -0.07 -0.025429 -0.0291499, -0.07 -0.022797 -0.0372069, + -0.07 -0.021008 -0.041113, -0.07 -0.018921 -0.044836, -0.071251 -0.018921 -0.044836, -0.071251 -0.025429 -0.0291499, + -0.071251 -0.01627 -0.054907, -0.07 -0.01627 -0.054907, -0.07 -0.016854 -0.049658, -0.07 -0.017712 -0.047156, + -0.07 -0.017605 -0.093054, -0.071251 -0.017605 -0.093054, -0.071251 -0.083561 -0.090735, -0.07 -0.083561 -0.090735, + -0.07 -0.083157 -0.097205, -0.07 -0.081494 -0.10343, -0.07 -0.078648 -0.10929, -0.07 -0.074719 -0.114417, + -0.07 -0.069867 -0.118689, -0.07 -0.064267 -0.121924, -0.07 -0.058148 -0.123999, -0.07 -0.051739 -0.124854, + -0.07 -0.045277 -0.124487, -0.07 -0.039029 -0.122839, -0.07 -0.033219 -0.119971, -0.07 -0.028077 -0.116064, + -0.07 -0.0238 -0.111182, -0.07 -0.020554 -0.105566, -0.07 -0.018464 -0.099463, -0.07 -0.077977 0.069177, + -0.071251 -0.077977 0.069177, -0.071251 -0.012021 0.0668581, -0.07 -0.012429 0.073328, -0.07 -0.014088 0.079553, + -0.07 -0.016938 0.085352, -0.07 -0.020867 0.090479, -0.07 -0.025719 0.094812, -0.07 -0.031315 0.098047, + -0.07 -0.037438 0.100122, -0.07 -0.043847 0.100977, -0.07 -0.050305 0.100549, -0.07 -0.056553 0.098901, + -0.07 -0.062367 0.096033, -0.07 -0.067509 0.092126, -0.07 -0.071782 0.087305, -0.07 -0.075032 0.081689, + -0.07 -0.077122 0.075586, -0.072495 -0.024971 -0.016028, -0.072037 -0.024945 -0.015356, -0.072075 -0.024903 -0.014075, + -0.072487 -0.02488 -0.013464, -0.075424 -0.016655 -0.09989, -0.075424 -0.018864 -0.10636, -0.075424 -0.022294 -0.11228, + -0.075424 -0.02681 -0.117407, -0.075424 -0.032242 -0.121558, -0.075424 -0.038376 -0.124548, -0.075424 -0.04498 -0.126318, + -0.075424 -0.0518 -0.126746, -0.075424 -0.058575 -0.12583, -0.075424 -0.065037 -0.123633, -0.075424 -0.07095 -0.120215, + -0.075424 -0.076077 -0.115698, -0.075424 -0.080227 -0.110266, -0.075424 -0.083233 -0.104102, -0.075424 -0.084988 -0.09751, + -0.075424 -0.07893 0.076013, -0.075424 -0.076718 0.0824831, -0.075424 -0.073292 0.088342, -0.075424 -0.068776 0.093469, + -0.075424 -0.063344 0.09762, -0.075424 -0.057209 0.100671, -0.075424 -0.050602 0.10238, -0.075424 -0.043782 0.102808, + -0.075424 -0.037011 0.101953, -0.075424 -0.030545 0.099695, -0.075424 -0.024636 0.096277, -0.075424 -0.019505 0.09176, + -0.075424 -0.015358 0.086328, -0.075424 -0.012349 0.0802251, -0.075424 -0.010596 0.073633, -0.075424 -0.01195 0.021692, + -0.075424 -0.012681 0.018884, -0.075424 -0.013813 0.01626, -0.075127 -0.019291 0.007227, -0.075127 -0.022267 0.00020802, + -0.075127 -0.024186 -0.00717795, -0.075127 -0.02501 -0.014746, -0.075127 -0.02472 -0.022375, -0.075127 -0.023316 -0.029883, + -0.075127 -0.020836 -0.037085, -0.075424 -0.016003 -0.046423, -0.075424 -0.015057 -0.04917, -0.075424 -0.014527 -0.052039, + -0.081177 -0.016835 0.022607, -0.081177 -0.017384 0.020532, -0.081177 -0.018235 0.018518, -0.081177 -0.023716 0.00948501, + -0.081177 -0.026978 0.00179404, -0.081177 -0.02908 -0.006262, -0.081177 -0.02998 -0.014563, -0.081177 -0.029664 -0.022925, + -0.081177 -0.028126 -0.031165, -0.081177 -0.02541 -0.039038, -0.081177 -0.021489 -0.09873, -0.081177 -0.023385 -0.104285, + -0.081177 -0.026326 -0.109351, -0.081177 -0.030198 -0.113745, -0.081177 -0.034855 -0.117346, -0.081177 -0.040116 -0.11991, + -0.081177 -0.045781 -0.121436, -0.081177 -0.051625 -0.121802, -0.081177 -0.057438 -0.121008, -0.081177 -0.062977 -0.119116, + -0.081177 -0.068051 -0.116187, -0.081177 -0.072445 -0.11228, -0.081177 -0.076001 -0.107642, -0.081177 -0.078579 -0.102393, + -0.081177 -0.080082 -0.096716, -0.081177 -0.074093 0.074854, -0.081177 -0.072201 0.080408, -0.081177 -0.069256 0.085474, + -0.081177 -0.065388 0.089868, -0.081177 -0.060727 0.093408, -0.081177 -0.05547 0.095972, -0.081177 -0.049801 0.097498, + -0.081177 -0.043957 0.097864, -0.081177 -0.038147 0.09707, -0.081177 -0.032605 0.095178, -0.081177 -0.027535 0.092249, + -0.081177 -0.02314 0.088403, -0.081177 -0.019581 0.083704, -0.081177 -0.017003 0.078455, -0.081177 -0.0155 0.072778, + -0.081177 -0.019864 -0.050452, -0.071251 -0.015469 0.017053, -0.071251 -0.014439 0.019495, -0.071251 -0.013775 0.022058, + -0.071251 -0.019181 0.011255, -0.071251 -0.021233 0.007532, -0.071251 -0.022984 0.00362504, -0.071251 -0.024273 -0.03324, + -0.071251 -0.022797 -0.0372069, -0.071251 -0.021008 -0.041113, -0.071251 -0.016373 -0.052222, -0.071251 -0.016854 -0.049658, + -0.071251 -0.017712 -0.047156, -0.071251 -0.083157 -0.097205, -0.071251 -0.081494 -0.10343, -0.071251 -0.078648 -0.10929, + -0.071251 -0.074719 -0.114417, -0.071251 -0.069867 -0.118689, -0.071251 -0.064267 -0.121924, -0.071251 -0.058148 -0.123999, + -0.071251 -0.051739 -0.124854, -0.071251 -0.045277 -0.124487, -0.071251 -0.039029 -0.122839, -0.071251 -0.033219 -0.119971, + -0.071251 -0.028077 -0.116064, -0.071251 -0.0238 -0.111182, -0.071251 -0.020554 -0.105566, -0.071251 -0.018464 -0.099463, + -0.071251 -0.012429 0.073328, -0.071251 -0.014088 0.079553, -0.071251 -0.016938 0.085352, -0.071251 -0.020867 0.090479, + -0.071251 -0.025719 0.094812, -0.071251 -0.031315 0.098047, -0.071251 -0.037438 0.100122, -0.071251 -0.043847 0.100977, + -0.071251 -0.050305 0.100549, -0.071251 -0.056553 0.098901, -0.071251 -0.062367 0.096033, -0.071251 -0.067509 0.092126, + -0.071251 -0.071782 0.087305, -0.071251 -0.075032 0.081689, -0.071251 -0.077122 0.075586, -0.065002 0.018105 -0.040442, + -0.065002 0.01833 -0.0399539, -0.064995 0.018556 -0.039465, -0.064934 0.02099 -0.038977, -0.06485 0.023424 -0.038489, + -0.064888 0.022578 -0.04032, -0.064896 0.021731 -0.042151, -0.064949 0.019918 -0.041296, -0.053402 0.044771 0.016748, + -0.047623 0.049953 0.0278561, -0.040379 0.054794 0.038232, -0.033669 0.058174 0.045496, -0.025864 0.061103 0.051782, + -0.014594 0.063804 0.057581, -0.00329601 0.064956 0.060022, 0.00877598 0.064582 0.059229, 0.01545 0.063655 0.057214, + 0.021694 0.062297 0.054346, 0.029184 0.059974 0.049341, 0.035778 0.057209 0.04342, 0.043259 0.053043 0.034509, + 0.049408 0.048507 0.024744, 0.055927 0.041938 0.010645, 0.060558 0.035088 -0.004004, 0.063904 0.026649 -0.022131, + 0.065002 0.018105 -0.040442, 0.064949 0.019918 -0.041296, 0.064896 0.021731 -0.042151, 0.06456 0.026475 -0.031958, + 0.063545 0.031203 -0.021826, 0.060455 0.038703 -0.00571299, 0.055828 0.045549 0.00893605, 0.049316 0.052112 0.023035, + 0.043171 0.056644 0.032739, 0.035698 0.060802 0.04165, 0.029116 0.063564 0.047571, 0.021641 0.065883 0.052576, + 0.015409 0.067241 0.055444, 0.00875198 0.068164 0.057458, -0.00328702 0.068534 0.058252, -0.014555 0.067386 0.055811, + -0.025801 0.064693 0.0500121, -0.033592 0.061767 0.043726, -0.040295 0.058395 0.036523, -0.047558 0.053535 0.026086, + -0.053349 0.048334 0.014917, -0.053375 0.04655 0.015833, 0.063026 0.00973802 -0.058386, 0.060547 0.00566102 -0.067114, + 0.057056 0.00171802 -0.075598, 0.048355 -0.00475898 -0.089453, 0.042786 -0.00765299 -0.095679, 0.036427 -0.010237 -0.101233, + 0.028446 -0.012669 -0.106421, 0.019642 -0.014523 -0.110388, 0.00737801 -0.015904 -0.113379, -0.00530999 -0.016011 -0.113623, + -0.013781 -0.015347 -0.112158, -0.021896 -0.014122 -0.109534, -0.029484 -0.012394 -0.105872, -0.036427 -0.010237 -0.101233, + -0.043922 -0.00711901 -0.094519, -0.050282 -0.00357702 -0.086951, -0.056129 0.000853982 -0.077429, + -0.060486 0.00558198 -0.067297, -0.063877 0.011771 -0.0540529, -0.06377 0.015403 -0.055701, -0.060387 0.00922198 -0.068945, + -0.056034 0.00449798 -0.079077, -0.050194 7.19823e-005 -0.088599, -0.043842 -0.00346401 -0.096167, + -0.036358 -0.00657901 -0.10282, -0.029428 -0.00873401 -0.107458, -0.021852 -0.010457 -0.111182, -0.013754 -0.011679 -0.113806, + -0.00529899 -0.012341 -0.11521, 0.00736301 -0.012234 -0.114966, 0.019604 -0.010857 -0.112036, 0.028391 -0.00900499 -0.108069, + 0.036358 -0.00657899 -0.10282, 0.042709 -0.00399799 -0.097327, 0.048267 -0.00110898 -0.091101, 0.056961 0.00536102 -0.077246, + 0.060444 0.00930002 -0.068762, 0.062923 0.013372 -0.060034, -0.054558 0.047851 -0.040747, -0.059578 0.035622 -0.040076, + -0.064888 0.021348 -0.042944, -0.06411 0.016423 -0.053503, -0.060341 0.00915998 -0.069067, -0.05357 0.00244498 -0.083472, + -0.04369 -0.00353901 -0.09635, -0.035095 -0.00701801 -0.103796, -0.025154 -0.00977901 -0.109717, + -0.014106 -0.011637 -0.113684, -0.00236699 -0.012433 -0.115393, 0.010829 -0.011977 -0.114417, 0.023355 -0.010161 -0.11051, + 0.034584 -0.00718899 -0.104163, 0.044151 -0.00331399 -0.095862, 0.053185 0.00215302 -0.084143, 0.05962 0.00824002 -0.071082, + 0.063507 0.014703 -0.057227, 0.064888 0.021348 -0.042944, 0.064529 0.026698 -0.03147, 0.056774 0.046329 -0.028845, + 0.049999 0.061454 -0.035925, 0.049694 0.059436 -0.0425169, 0.048538 0.057071 -0.0502689, 0.046246 0.054508 -0.05863, + 0.04287 0.052051 -0.066687, 0.042866 0.052047 -0.066687, 0.042862 0.052043 -0.066687, 0.037094 0.049202 -0.075964, + 0.029602 0.046728 -0.0840819, 0.026316 0.045917 -0.086707, 0.02631 0.045915 -0.086707, 0.026302 0.045913 -0.086768, + 0.020418 0.044775 -0.090491, 0.014008 0.043912 -0.093298, 0.00720099 0.043371 -0.095068, 0.000176992 0.04318 -0.095679, + 8.79924e-005 0.04318 -0.095679, -7.553e-009 0.04318 -0.095679, -8.70076e-005 0.04318 -0.095679, + -0.000174008 0.04318 -0.095679, -0.00152801 0.04319 -0.095679, -0.00849601 0.043447 -0.094824, -0.015213 0.044048 -0.092871, + -0.021509 0.044958 -0.08988, -0.027264 0.046136 -0.086035, -0.027269 0.046138 -0.086035, -0.027275 0.046138 -0.085974, + -0.029264 0.046638 -0.084387, -0.036736 0.049057 -0.076453, -0.042526 0.051843 -0.067358, -0.043415 0.052391 -0.065588, + -0.043415 0.052391 -0.065527, -0.043419 0.052391 -0.065527, -0.046707 0.054931 -0.057227, -0.048542 0.057071 -0.0502689, + -0.049252 0.0583 -0.04624, -0.049999 0.061454 -0.035925, -0.050392 0.060577 -0.035498, -0.050785 0.0597 -0.035071, + -0.050655 0.0597 -0.036169, -0.050514 0.0597 -0.0372069, -0.052467 0.054004 -0.038916, -0.047375 0.0597 0.00820303, + -0.05022 0.05434 0.01156, -0.05307 0.048826 0.014795, -0.053211 0.04858 0.014856, -0.048752 0.052581 0.024011, + -0.043205 0.056621 0.032678, -0.036602 0.060363 0.040735, -0.028814 0.063674 0.047815, -0.022926 0.06554 0.051843, + -0.016483 0.067043 0.055017, -0.00955002 0.06808 0.057275, -0.00228802 0.068569 0.058313, 0.00454698 0.068481 0.05813, + 0.011236 0.067878 0.056848, 0.017599 0.066818 0.05459, 0.023525 0.065372 0.051477, 0.035374 0.060958 0.042017, + 0.044769 0.05558 0.030481, 0.051823 0.049858 0.018213, 0.057182 0.043815 0.00521201, 0.061047 0.03757 -0.00815398, + 0.049583 0.063812 -0.028174, 0.048325 0.066143 -0.020544, 0.043259 0.070617 -0.00595695, 0.04324 0.070629 -0.00589597, + 0.043224 0.07064 -0.005835, 0.03627 0.074031 0.00521201, 0.026937 0.076847 0.014429, 0.026928 0.07685 0.014429, + 0.026917 0.076854 0.01449, 0.018208 0.078472 0.019739, 0.00943298 0.079399 0.022791, 0.000172981 0.079727 0.023828, + 8.69805e-005 0.079727 0.023889, -1.94615e-008 0.079727 0.023889, -7.80195e-005 0.079727 0.023889, + -0.000157019 0.079727 0.023828, -0.00172002 0.079715 0.023828, -0.012582 0.079139 0.021936, -0.022568 0.077758 0.017419, + -0.026896 0.076858 0.01449, -0.026917 0.076854 0.01449, -0.026936 0.07685 0.014429, -0.026943 0.076847 0.014429, + -0.026949 0.076847 0.014429, -0.031937 0.075515 0.010095, -0.036324 0.074012 0.00515103, -0.043243 0.070625 -0.00589597, + -0.043266 0.070613 -0.00595695, -0.043285 0.070602 -0.00601798, -0.04578 0.068801 -0.011877, -0.04895 0.065181 -0.023718, + -0.051331 0.0597 -0.019995, -0.049763 0.0597 -0.00412595, 0.048286 0.0662 -0.0203609, 0.049568 0.063846 -0.0281129, + 0.048409 0.066005 -0.021033, 0.043747 0.070301 -0.00699496, 0.020716 0.078086 0.018457, 0.014104 0.078987 0.021448, + 0.00720998 0.079536 0.023218, 0.00739398 0.079521 0.023157, 0.014373 0.078945 0.021326, 0.020924 0.078044 0.018335, + -0.025709 0.077125 0.015344, -0.019917 0.078208 0.018884, -0.013638 0.079025 0.02157, -0.00699902 0.079544 0.023279, + -0.00719202 0.079536 0.023218, -0.014084 0.078987 0.021448, -0.020697 0.07809 0.018518, -0.046185 0.068454 -0.013037, + -0.048294 0.066188 -0.020422, -0.048485 0.065898 -0.021399, -0.043598 0.070396 -0.00662798, 0.043537 0.052471 -0.065283, + 0.048462 0.05698 -0.050574, 0.048183 0.056575 -0.051855, 0.045944 0.054245 -0.059485, -0.046303 0.054569 -0.058447, + -0.048351 0.056823 -0.051062, -0.04958 0.059089 -0.043616, -0.048325 0.056766 -0.051245, -0.00750401 0.043394 -0.095007, + -0.014583 0.043985 -0.093054, -0.021215 0.044916 -0.090002, -0.021 0.04487 -0.090125, -0.014303 0.043945 -0.0931759, + -0.00731401 0.043376 -0.095007, 0.02022 0.044742 -0.090552, 0.013757 0.043886 -0.093359, 0.00703299 0.043363 -0.095068, + 0.00720499 0.043376 -0.095068, 0.01401 0.043922 -0.093237, 0.020416 0.04478 -0.09043, -0.00737502 0.079521 0.023157, + -0.014353 0.078949 0.021326, -0.020905 0.078044 0.018335, -0.036331 0.07402 0.00521201, -0.0401 0.072376 -0.000158966, + -0.043247 0.070625 -0.00589597, -0.048321 0.066131 -0.020605, -0.049576 0.063808 -0.028235, -0.037712 0.064373 -0.03678, + -0.025244 0.066467 -0.037451, -1.56889e-008 0.068149 -0.037939, -1.81376e-008 0.075664 -0.00736099, + -1.89418e-008 0.078132 0.00820303, 0.036308 0.074028 0.00521201, 0.031923 0.075527 0.010095, -0.032227 0.047475 -0.081641, + -0.036575 0.048984 -0.076697, 0.039646 0.050312 -0.072363, 0.035809 0.04869 -0.077673, 0.025244 0.066467 -0.037451, + 0.037712 0.064373 -0.03678, 0.048313 0.066139 -0.020605, 0.046211 0.068416 -0.013159, 0.014009 0.043922 -0.093237, + 0.048218 0.05664 -0.051672, 0.049549 0.059028 -0.04386, -1.21464e-008 0.057277 -0.067542, -9.97759e-009 0.050621 -0.081824, + 8.89924e-005 0.04318 -0.095679, -0.070793 0.022023 -0.032019, -0.074203 0.025868 -0.023779, -0.075348 0.029946 -0.0150509, + -0.073219 0.038982 -0.014929, -0.071091 0.048019 -0.014807, -0.069801 0.04795 -0.022559, -0.066528 0.047903 -0.029822, + -0.061325 0.04787 -0.036108, -0.064934 0.020996 -0.038977, -0.070564 0.048111 -0.007788, -0.068497 0.048236 -0.00107396, + -0.064941 0.048402 0.00509, -0.059952 0.048606 0.010461, -0.053375 0.046548 0.015833, -0.061638 0.042667 0.0122311, + -0.06752 0.040063 0.00667703, -0.071838 0.036958 -3.69549e-005, -0.074463 0.03353 -0.00736099, -0.051315 0.0597 -0.019568, + -0.055004 0.0597 0.00472403, -0.05925 0.0597 0.000940025, -0.0625 0.0597 -0.003699, -0.064568 0.0597 -0.00894797, + -0.065346 0.0597 -0.014563, -0.06459 0.0597 -0.021033, -0.062122 0.0597 -0.027075, -0.057156 0.0597 -0.0331179, + -0.050224 0.054332 0.01156, -0.059185 0.0597 0.001001, -0.062443 0.0597 -0.00357699, -0.064552 0.0597 -0.00888699, + -0.068222 0.053859 -0.014685, -0.070557 0.048111 -0.007788, -0.068466 0.048236 -0.00101298, -0.064888 0.048404 0.00515103, + -0.05254 0.053794 -0.038977, -0.061295 0.04787 -0.036108, -0.069786 0.047948 -0.02262, -0.057163 0.0597 -0.0331179, + -0.064934 0.020765 -0.039465, 0.063854 0.02846 -0.022986, 0.060509 0.036895 -0.00485796, 0.055878 0.043743 0.00979, + 0.049362 0.05031 0.023889, 0.043213 0.054843 0.033594, 0.03574 0.059005 0.042566, 0.02915 0.061771 0.048486, + 0.021667 0.06409 0.05343, 0.015429 0.065448 0.05636, 0.00876299 0.066371 0.058313, -0.00329202 0.066745 0.0591061, + -0.014574 0.065597 0.056665, -0.025833 0.062896 0.050867, -0.03363 0.05997 0.04458, -0.040337 0.056594 0.037378, + -0.047604 0.051734 0.026941, -0.063824 0.013587 -0.054846, -0.060436 0.00740198 -0.068152, -0.056084 0.00267598 -0.078284, + -0.050236 -0.00175102 -0.087744, -0.04388 -0.00529101 -0.095374, -0.036392 -0.00840801 -0.102026, + -0.029455 -0.010565 -0.106665, -0.021873 -0.012288 -0.110327, -0.013767 -0.013512 -0.112952, -0.00530499 -0.014176 -0.114417, + 0.00737001 -0.014069 -0.114172, 0.019623 -0.012688 -0.111243, 0.028418 -0.010838 -0.107214, 0.036392 -0.00840799 -0.102026, + 0.042747 -0.00582599 -0.096472, 0.048313 -0.00293398 -0.090308, 0.057007 0.00354002 -0.076392, 0.060497 0.00748002 -0.067969, + 0.062973 0.011555 -0.059241, -0.05703 0.041221 -0.041602, -0.056717 0.039209 -0.046606, -0.055408 0.035678 -0.055396, + -0.051434 0.030502 -0.068213, -0.045151 0.025751 -0.0799929, -0.036476 0.02155 -0.090369, -0.02914 0.019123 -0.09635, + -0.020792 0.017208 -0.10105, -0.011622 0.015925 -0.104163, -0.001948 0.015378 -0.105505, 0.008917 0.015692 -0.104773, + 0.019293 0.016944 -0.10166, 0.028708 0.019004 -0.096594, 0.036877 0.021707 -0.089941, 0.044807 0.025545 -0.080481, + 0.050739 0.029849 -0.069861, 0.054695 0.034449 -0.058447, 0.056717 0.039209 -0.046606, 0.05711 0.043067 -0.037024, + 0.055099 0.051185 -0.016577, 0.051895 0.055942 -0.00449198, 0.047073 0.06052 0.007043, 0.04052 0.064804 0.017847, + 0.03175 0.068759 0.027734, 0.020866 0.071922 0.0356081, 0.00987298 0.073669 0.039941, 0.00398498 0.074081 0.0409181, + -0.00200402 0.074142 0.04104, -0.00838402 0.073806 0.040247, -0.014532 0.073089 0.038477, -0.020325 0.07204 0.0359131, + -0.025692 0.070716 0.032617, -0.034061 0.067863 0.025476, -0.041012 0.064533 0.017175, -0.046608 0.060882 0.00795901, + -0.037239 0.067031 -0.0281129, -0.02483 0.068073 -0.032202, -0.012325 0.068317 -0.035925, -0.035759 0.069511 -0.019995, + -0.023609 0.069652 -0.027014, -0.01142 0.069015 -0.033606, -0.033142 0.071796 -0.012549, -0.021574 0.071174 -0.02207, + -0.010041 0.069767 -0.031165, -0.029234 0.073848 -0.005835, -0.018707 0.072582 -0.017432, -0.00828802 0.070522 -0.028662, + -0.023912 0.075592 -9.799e-005, -0.015011 0.073814 -0.013403, -0.00626902 0.07122 -0.026404, -0.017151 0.076946 0.00429702, + -0.010543 0.07479 -0.010229, -0.00410702 0.071796 -0.024512, -0.00906902 0.077823 0.00716603, + -0.00544902 0.075431 -0.00815398, -0.00195402 0.072189 -0.02323, 0.00906898 0.077823 0.00716603, + 0.00544898 0.075431 -0.00815398, 0.00195398 0.072189 -0.02323, 0.017151 0.076946 0.00429702, 0.010543 0.07479 -0.010229, + 0.00410698 0.071796 -0.024512, 0.023912 0.075592 -9.799e-005, 0.015011 0.073814 -0.013403, 0.00626898 0.07122 -0.026404, + 0.029234 0.073848 -0.005835, 0.018707 0.072582 -0.017432, 0.00828798 0.070522 -0.028662, 0.033142 0.071796 -0.012549, + 0.021574 0.071174 -0.02207, 0.010041 0.069767 -0.031165, 0.035759 0.069511 -0.019995, 0.023609 0.069652 -0.027014, + 0.01142 0.069015 -0.033606, 0.037239 0.067031 -0.0281129, 0.02483 0.068073 -0.032202, 0.012325 0.068317 -0.035925, + 0.037239 0.061714 -0.045508, 0.02483 0.064861 -0.0427, 0.012325 0.067138 -0.039771, 0.035759 0.059238 -0.053625, + 0.023609 0.063282 -0.047888, 0.01142 0.06644 -0.042029, 0.033142 0.056949 -0.061072, 0.021574 0.061763 -0.0528319, + 0.010041 0.065689 -0.04447, 0.029232 0.054901 -0.067786, 0.018705 0.060352 -0.057471, 0.00828798 0.064933 -0.046973, + 0.023911 0.053157 -0.073523, 0.01501 0.059124 -0.061499, 0.00626899 0.064235 -0.049231, 0.017149 0.051803 -0.077917, + 0.010544 0.058147 -0.0646729, 0.00410699 0.063659 -0.051123, 0.00906899 0.05093 -0.080786, 0.00544899 0.057506 -0.066748, + 0.00195399 0.06327 -0.052405, -0.00906901 0.05093 -0.080786, -0.00544901 0.057506 -0.066748, -0.00195401 0.06327 -0.052405, + -0.017151 0.051803 -0.077917, -0.010544 0.058147 -0.0646729, -0.00410701 0.063659 -0.051123, -0.023912 0.053157 -0.0734619, + -0.015011 0.059124 -0.061499, -0.00626901 0.064235 -0.049231, -0.029234 0.054901 -0.067786, -0.018707 0.060352 -0.057471, + -0.00828801 0.064933 -0.046973, -0.033142 0.056949 -0.061072, -0.021574 0.061759 -0.0528319, -0.010041 0.065689 -0.04447, + -0.035759 0.059234 -0.053625, -0.023609 0.063282 -0.047888, -0.01142 0.06644 -0.042029, -0.037239 0.061714 -0.045508, + -0.02483 0.064861 -0.0427, -0.012325 0.067138 -0.039771, -0.064339 0.033963 -0.036475, -0.069649 0.036426 -0.028784, + -0.072021 0.038564 -0.022009, -0.07235 0.041479 -0.00766599, -0.069824 0.043865 -0.000707984, -0.065712 0.046028 0.00551802, + -0.060169 0.047842 0.010645, -0.054901 0.054203 0.009363, -0.061436 0.054065 0.00380903, -0.066521 0.053939 -0.00479698, + -0.067192 0.053825 -0.021826, -0.064323 0.053802 -0.028418, -0.058769 0.053783 -0.03501, 0.045773 0.068409 -0.013159, + 0.048927 0.065021 -0.024207, 0.048607 0.065612 -0.022314, 0.048439 0.065918 -0.021338, 0.049221 0.063686 -0.028601, + 0.04837 0.06604 -0.020911, 0.046413 0.067844 -0.01499, -0.022814 0.077667 0.017114, -0.012814 0.07909 0.021753, + -0.013669 0.079021 0.02157, -0.017765 0.078487 0.0198, -0.020159 0.078163 0.0187621, -0.023039 0.077625 0.016992, + -0.024967 0.07724 0.01571, -0.044735 0.069526 -0.00949699, -0.048355 0.066017 -0.020972, -0.043762 0.070247 -0.00717795, + -0.046059 0.068134 -0.014075, 0.045998 0.054725 -0.057898, 0.048267 0.056804 -0.051123, 0.043812 0.052722 -0.06449, + -0.048187 0.056644 -0.051672, -0.045803 0.054515 -0.05863, -0.031639 0.075431 0.00979, -0.039783 0.072319 -0.000402987, + -0.036091 0.074092 0.00539601, -0.029751 0.046808 -0.083838, -0.039993 0.050687 -0.071143, -0.038284 0.049835 -0.073889, + -0.03743 0.049409 -0.075293, -0.036697 0.049045 -0.076514, -0.029978 0.046869 -0.083594, -0.033337 0.047958 -0.080054, + 0.03756 0.04943 -0.075232, 0.036739 0.049085 -0.076392, 0.033543 0.048028 -0.07981, -0.062218 0.029523 -0.039282, + -0.060898 0.032572 -0.039709, 0.055 1.79213e-008 0.109521, 0.055 1.79213e-008 0.101892, 0.055 1.79213e-008 0.094263, + 0.053566 -0.012486 0.094263, 0.049332 -0.024319 0.094263, 0.042522 -0.034882 0.094263, 0.033497 -0.043622 0.094263, + 0.02272 -0.050091 0.094263, 0.010756 -0.053936 0.094263, -0.00176798 -0.054974 0.094263, -0.0142 -0.053135 0.094263, + -0.015601 -0.052739 0.095239, -0.0224 -0.050229 0.099817, -0.028999 -0.046734 0.104028, -0.034782 -0.042603 0.103845, + -0.039959 -0.037796 0.103052, -0.046532 -0.02932 0.099939, -0.050766 -0.021157 0.094263, -0.053932 -0.010788 0.094263, + -0.054733 -0.00542102 0.094263, -0.055 -1.79213e-008 0.094263, -0.055 -1.79213e-008 0.096521, -0.055 -1.79213e-008 0.098718, + -0.054947 -0.00241102 0.099207, -0.054787 -0.00482402 0.099756, -0.054787 -0.00482402 0.1, -0.054787 -0.00482402 0.100244, + -0.054947 -0.00241302 0.100732, -0.055 -1.79213e-008 0.101282, -0.055 -1.79213e-008 0.105371, -0.055 -1.79213e-008 0.109521, + -0.053944 -0.010729 0.109521, -0.050812 -0.021046 0.109521, -0.045731 -0.030556 0.109521, -0.038891 -0.038891 0.109521, + -0.030556 -0.045727 0.109521, -0.021048 -0.050816 0.109521, -0.01073 -0.053944 0.109521, 2.44371e-008 -0.054997 0.109521, + 0.01073 -0.053944 0.109521, 0.021048 -0.050816 0.109521, 0.030556 -0.045727 0.109521, 0.038891 -0.038891 0.109521, + 0.045731 -0.030556 0.109521, 0.050812 -0.021046 0.109521, 0.053944 -0.010729 0.109521, -0.05262 -0.015999 0.099512, + -0.05262 -0.015999 0.1, -0.05262 -0.015999 0.100488, -0.05312 -0.014256 0.100488, -0.053562 -0.012501 0.100488, + -0.053562 -0.012501 0.102258, -0.053562 -0.012501 0.104028, -0.053677 -0.012 0.104028, -0.053783 -0.0115 0.104028, + -0.053783 -0.0115 0.102258, -0.053783 -0.0115 0.100488, -0.054127 -0.00975502 0.100488, -0.054417 -0.00800002 0.100488, + -0.054417 -0.00800002 0.1, -0.054417 -0.00800002 0.099512, -0.054127 -0.00975502 0.099512, -0.053783 -0.0115 0.099512, + -0.053783 -0.0115 0.097742, -0.053783 -0.0115 0.095972, -0.053677 -0.012 0.095972, -0.053562 -0.012501 0.095972, + -0.053562 -0.012501 0.097742, -0.053562 -0.012501 0.099512, -0.05312 -0.014256 0.099512, -0.054962 0.00199998 0.101709, + -0.054855 0.00399998 0.102136, -0.054855 0.00399998 0.101343, -0.054855 0.00399998 0.100488, -0.054253 0.00903798 0.100488, + -0.053188 0.014 0.100488, -0.053188 0.014 0.1, -0.053188 0.014 0.099512, -0.054253 0.00903798 0.099512, + -0.054855 0.00399998 0.099512, -0.054855 0.00399998 0.098657, -0.054855 0.00399998 0.097864, -0.054962 0.00199998 0.098291, + -0.053944 0.01073 0.094263, -0.050812 0.021048 0.094263, -0.045731 0.030556 0.094263, -0.038891 0.03889 0.094263, + -0.030556 0.04573 0.094263, -0.021048 0.050813 0.094263, -0.01073 0.053943 0.094263, -1.14044e-008 0.055 0.094263, + 0.01073 0.053943 0.094263, 0.021048 0.050813 0.094263, 0.030556 0.04573 0.094263, 0.038891 0.03889 0.094263, + 0.045731 0.030556 0.094263, 0.050812 0.021048 0.094263, 0.053944 0.01073 0.094263, 0.053944 0.01073 0.109521, + 0.050812 0.021048 0.109521, 0.045731 0.030556 0.109521, 0.038891 0.03889 0.109521, 0.030556 0.04573 0.109521, + 0.021048 0.050813 0.109521, 0.01073 0.053943 0.109521, -1.14044e-008 0.055 0.109521, -0.01073 0.053943 0.109521, + -0.021048 0.050813 0.109521, -0.030556 0.04573 0.109521, -0.038891 0.03889 0.109521, -0.045731 0.030556 0.109521, + -0.050812 0.021048 0.109521, -0.053944 0.01073 0.109521, -0.052162 0.017435 0.097498, -0.051994 0.017936 0.097498, + -0.051819 0.018435 0.097498, -0.051819 0.018435 0.101221, -0.051819 0.018435 0.105005, -0.051327 0.01976 0.105005, + -0.050804 0.021072 0.105005, -0.050171 0.022536 0.101831, -0.049488 0.024 0.098718, -0.049488 0.024 0.09762, + -0.049488 0.024 0.096521, -0.050522 0.02174 0.096521, -0.051453 0.019435 0.096521, -0.051453 0.019435 0.095728, + -0.051453 0.019435 0.094995, -0.051636 0.018936 0.094995, -0.051819 0.018435 0.094995, -0.051819 0.018435 0.095728, + -0.051819 0.018435 0.096521, -0.051994 0.017936 0.096521, -0.052162 0.017435 0.096521, -0.052162 0.017435 0.097009, + -0.051453 0.019435 0.104028, -0.051453 0.019435 0.100732, -0.051453 0.019435 0.097498, -0.050735 0.021231 0.097498, + -0.049961 0.023 0.097498, -0.049961 0.023 0.097986, -0.049961 0.023 0.098474, -0.050529 0.021718 0.101221, + -0.051064 0.020435 0.104028, -0.051258 0.019936 0.104028, -0.0509 -0.020867 0.094019, -0.051056 -0.020588 0.093713, + -0.054043 -0.010485 0.093713, -0.054798 -0.00526702 0.093713, -0.05505 -1.79376e-008 0.093713, -0.053989 0.01074 0.093713, + -0.050858 0.021066 0.093713, -0.045773 0.030584 0.093713, -0.038925 0.038925 0.093713, -0.030584 0.045772 0.093713, + -0.021067 0.050859 0.093713, -0.010739 0.053993 0.093713, -1.14204e-008 0.055049 0.093713, 0.010739 0.053993 0.093713, + 0.021067 0.050859 0.093713, 0.030584 0.045772 0.093713, 0.038925 0.038925 0.093713, 0.045773 0.030584 0.093713, + 0.050858 0.021066 0.093713, 0.053989 0.01074 0.093713, 0.05505 1.79376e-008 0.093713, 0.055012 1.79252e-008 0.094019, + 0.053635 -0.012398 0.093713, 0.049465 -0.024159 0.093713, 0.042751 -0.03468 0.093713, 0.03384 -0.043419 0.093713, + 0.023193 -0.049923 0.093713, 0.011353 -0.053868 0.093713, -0.00107098 -0.055035 0.093713, -0.01344 -0.05338 0.093713, + -0.013815 -0.05325 0.094019, -0.059174 -0.00976402 0.066797, -0.062943 -0.0106 0.045679, -0.066704 -0.011435 0.024622, + -0.067596 -0.012551 0.0187621, -0.068001 -0.015191 0.013635, -0.068016 -0.015507 0.013208, -0.068031 -0.015816 0.012781, + -0.069389 -0.00796002 0.012781, -0.069847 -2.2759e-008 0.012781, -0.06881 0.011955 0.012781, -0.067528 0.017822 0.012781, + -0.06575 0.023558 0.012781, -0.061337 0.032118 0.016077, -0.058708 0.036169 0.017603, -0.055813 0.040065 0.019006, + -0.051929 0.042808 0.026697, -0.042793 0.048681 0.040247, -0.035725 0.052406 0.047876, -0.027658 0.055759 0.054346, + -0.016224 0.058963 0.0603271, -0.010002 0.059986 0.062158, -0.00355901 0.060531 0.063135, 0.00298899 0.060554 0.063196, + 0.00946299 0.060051 0.06228, 0.016573 0.058891 0.060205, 0.023258 0.057201 0.057092, 0.031059 0.054458 0.051904, + 0.038025 0.051277 0.045618, 0.045639 0.046972 0.036584, 0.05209 0.042696 0.026392, 0.058456 0.038221 0.012781, + 0.063358 0.029388 0.012781, 0.06694 0.01994 0.012781, 0.069115 0.010075 0.012781, 0.069847 2.2759e-008 0.012781, + 0.069839 2.27564e-008 0.012781, 0.069832 2.27542e-008 0.012842, 0.062439 2.03452e-008 0.053308, -0.053493 -0.016377 0.088831, + -0.055508 -0.01299 0.083032, -0.05751 -0.010428 0.075159, 0.069397 -0.00229698 0.015039, 0.069107 -0.00358398 0.01626, + 0.068832 -0.00471698 0.017419, 0.068459 -0.00616898 0.018823, 0.067253 -0.010159 0.022729, 0.063305 -0.019707 0.032129, + 0.056698 -0.030472 0.042749, 0.048061 -0.04015 0.052271, 0.036201 -0.049115 0.06106, 0.029432 -0.052708 0.0646001, + 0.022181 -0.055592 0.067468, 0.00964403 -0.058537 0.070337, 0.00964002 -0.058461 0.070764, 0.00922003 -0.058163 0.072717, + 0.00384203 -0.057492 0.079675, -0.00428398 -0.056172 0.086694, -0.068062 -0.017247 0.010522, -0.06926 -0.012585 0.00924104, + -0.070251 -0.00637902 0.00802004, -0.070587 -2.30002e-008 0.00759304, -0.069351 0.012185 0.00911903, + -0.068054 -0.016545 0.011682, 0.062691 0.033327 2.40207e-005, 0.066284 0.02544 2.40207e-005, 0.068893 0.017174 2.40207e-005, + 0.070473 0.00865102 2.40207e-005, 0.070999 2.31344e-008 2.40207e-005, 0.070709 2.30399e-008 0.00643301, + 0.06078 0.036151 0.006311, -0.070999 -0.113499 2.40207e-005, -0.070999 -0.107075 2.40207e-005, + -0.070999 -0.100651 2.40207e-005, -0.070999 -0.099827 2.40207e-005, -0.070999 -0.099003 2.40207e-005, + -0.070824 -0.099003 0.00502902, -0.07029 -0.099003 0.00997305, -0.07029 -0.0985 0.00997305, -0.07029 -0.097996 0.00997305, + -0.070824 -0.097996 0.00502902, -0.070999 -0.097996 2.40207e-005, -0.070999 -0.097172 2.40207e-005, + -0.070999 -0.096348 2.40207e-005, -0.070999 -0.089367 2.40207e-005, -0.070999 -0.082394 2.40207e-005, + -0.070496 -0.082104 0.00844705, -0.06987 -0.081959 0.012598, -0.069 -0.081814 0.016748, -0.06498 -0.081501 0.028589, + -0.058929 -0.08128 0.039575, -0.051033 -0.081151 0.049341, -0.041546 -0.081105 0.057581, -0.028999 -0.081181 0.064783, + -0.022905 -0.07758 0.067224, -0.016691 -0.073925 0.068994, -0.016687 -0.073918 0.068994, -0.00559297 -0.067364 0.070764, + 0.00564403 -0.060803 0.070764, 0.017166 -0.057065 0.068872, 0.024317 -0.054837 0.066736, 0.036568 -0.048893 0.060876, + 0.046841 -0.041268 0.053369, 0.056366 -0.030915 0.043176, 0.06337 -0.019577 0.032007, 0.067116 -0.010581 0.023157, + 0.06778 -0.00852198 0.021143, 0.068382 -0.00643398 0.019067, 0.068939 -0.00428798 0.016992, 0.069229 -0.00303298 0.015771, + 0.069496 -0.00181398 0.014551, 0.070999 -0.041172 2.40207e-005, 0.070999 -0.082341 2.40207e-005, + 0.070999 -0.09792 2.40207e-005, 0.070999 -0.113499 2.40207e-005, 0.069633 -0.113499 0.013879, 0.065598 -0.113499 0.027185, + 0.059036 -0.113499 0.039453, 0.050205 -0.113499 0.050195, 0.039444 -0.113499 0.059045, 0.02717 -0.113499 0.065576, + 0.013851 -0.113499 0.069666, 4.34995e-008 -0.113499 0.071008, -0.013851 -0.113499 0.069666, -0.02717 -0.113499 0.065576, + -0.039444 -0.113499 0.059045, -0.050205 -0.113499 0.050195, -0.059036 -0.113499 0.039453, -0.065598 -0.113499 0.027185, + -0.069633 -0.113499 0.013879, -0.069504 -0.094502 0.01449, -0.069084 -0.094502 0.016382, -0.068611 -0.094502 0.018274, + -0.068993 -0.096302 0.016748, -0.069344 -0.098111 0.015222, -0.069077 -0.098111 0.016443, -0.068787 -0.098111 0.017603, + -0.068604 -0.09882 0.018274, -0.068413 -0.099522 0.019006, -0.068413 -0.10056 0.019006, -0.068413 -0.10159 0.019006, + -0.068535 -0.10204 0.018518, -0.068657 -0.102498 0.018091, -0.069 -0.102498 0.016748, -0.069305 -0.102498 0.015405, + -0.069443 -0.101895 0.014795, -0.069565 -0.101292 0.014185, -0.069641 -0.101643 0.013818, -0.06971 -0.102002 0.013513, + -0.069557 -0.102749 0.014246, -0.069397 -0.103497 0.0149781, -0.068993 -0.103497 0.016748, -0.06855 -0.103497 0.018518, + -0.068344 -0.102749 0.01925, -0.068123 -0.102002 0.0199831, -0.068123 -0.10056 0.0199831, -0.068123 -0.09911 0.0199831, + -0.068413 -0.098111 0.019006, -0.06868 -0.097111 0.01803, -0.068756 -0.097111 0.0177251, -0.06884 -0.097111 0.017419, + -0.068497 -0.095547 0.018701, -0.068123 -0.093998 0.0199831, -0.068123 -0.093747 0.0199831, -0.068123 -0.093503 0.0199831, + -0.068871 -0.093503 0.017236, -0.069504 -0.093503 0.01449, -0.069504 -0.093998 0.01449, 0.070297 -0.082707 -0.00992399, + 0.068214 -0.083104 -0.01969, 0.064781 -0.083523 -0.029028, 0.060074 -0.083943 -0.037817, 0.05687 -0.085064 -0.0425169, + 0.049145 -0.087582 -0.051245, 0.040115 -0.090199 -0.058569, 0.03071 -0.092518 -0.064001, 0.020523 -0.094494 -0.067969, + 0.00949704 -0.095829 -0.070349, -0.00184096 -0.096188 -0.070959, -0.010955 -0.095715 -0.070166, -0.019836 -0.094601 -0.068152, + -0.027988 -0.093113 -0.065222, -0.035683 -0.091351 -0.061377, -0.042797 -0.089459 -0.056677, -0.04929 -0.087544 -0.051123, + -0.055073 -0.085682 -0.044836, -0.060074 -0.083943 -0.037817, -0.065392 -0.083455 -0.027625, -0.067421 -0.083218 -0.022253, + -0.069 -0.082982 -0.01676, -0.070496 -0.082692 -0.008398, -0.070877 -0.082547 -0.00424796, -0.070862 -0.09718 -0.00443095, + -0.07045 -0.097996 -0.00882596, -0.07045 -0.0985 -0.00882596, -0.07045 -0.099003 -0.00882596, -0.070862 -0.099827 -0.00443095, + -0.069633 -0.113499 -0.013831, -0.065598 -0.113499 -0.027197, -0.059036 -0.113499 -0.039465, -0.050205 -0.113499 -0.050208, + -0.039444 -0.113499 -0.059058, -0.02717 -0.113499 -0.065588, -0.013851 -0.113499 -0.069617, 4.34995e-008 -0.113499 -0.071021, + 0.013851 -0.113499 -0.069617, 0.02717 -0.113499 -0.065588, 0.039444 -0.113499 -0.059058, 0.050205 -0.113499 -0.050208, + 0.059036 -0.113499 -0.039465, 0.065598 -0.113499 -0.027197, 0.069633 -0.113499 -0.013831, -0.06929 -0.094502 -0.015479, + -0.069176 -0.094502 -0.016028, -0.069054 -0.094502 -0.016516, -0.069054 -0.096249 -0.016516, -0.069054 -0.097996 -0.016516, + -0.068611 -0.097996 -0.018225, -0.068123 -0.097996 -0.019995, -0.068123 -0.0985 -0.019995, -0.068123 -0.099003 -0.019995, + -0.068611 -0.099003 -0.018225, -0.069054 -0.099003 -0.016516, -0.069054 -0.10075 -0.016516, -0.069054 -0.102498 -0.016516, + -0.069176 -0.102498 -0.016028, -0.06929 -0.102498 -0.015479, -0.06929 -0.10075 -0.015479, -0.06929 -0.099003 -0.015479, + -0.069656 -0.099003 -0.01377, -0.069977 -0.099003 -0.012, -0.069977 -0.0985 -0.012, -0.069977 -0.097996 -0.012, + -0.069656 -0.097996 -0.01377, -0.06929 -0.097996 -0.015479, -0.06929 -0.096249 -0.015479, -0.068001 -0.018933 -0.040686, + -0.068001 -0.00102902 -0.040686, -0.068001 0.016874 -0.040686, -0.069099 0.017432 -0.039526, -0.070145 0.018008 -0.038306, + -0.070145 0.018011 -0.038306, -0.070152 0.018014 -0.038245, -0.070755 0.018371 -0.037512, -0.074059 0.020783 -0.032324, + -0.076439 0.023373 -0.02677, -0.078346 0.028842 -0.0150509, -0.076439 0.034312 -0.00333297, -0.074059 0.036903 0.002222, + -0.070755 0.039314 0.00741005, -0.065521 0.041904 0.012964, -0.059082 0.043985 0.017419, -0.059074 0.043987 0.017419, + -0.059071 0.043987 0.017419, -0.057465 0.044372 0.018274, -0.055813 0.044723 0.019006, -0.055813 0.042394 0.019006, + -0.059853 0.034476 0.016992, -0.069252 0.012652 0.00924104, -0.070251 0.00640998 0.00802004, -0.070236 -0.00654802 0.00808102, + -0.069191 -0.012921 0.00930202, -0.068535 -0.017567 0.010034, -0.069 -0.017884 0.00954604, -0.069 -0.016686 0.00954604, + -0.069 -0.015492 0.00954604, -0.07299 -0.015683 0.00411403, -0.075928 -0.015892 -0.00192899, -0.077736 -0.016118 -0.00833696, + -0.078346 -0.01635 -0.0150509, -0.077736 -0.016587 -0.021704, -0.075928 -0.016812 -0.028174, -0.07299 -0.017022 -0.034216, + -0.069 -0.017212 -0.039648, -0.069 -0.018361 -0.039648, -0.069 -0.019513 -0.039648, -0.068504 -0.019223 -0.040198, + -0.069 -0.018414 -0.041724, -0.069 -0.017216 -0.043799, -0.069 -0.015873 -0.046362, -0.069 -0.014924 -0.04917, + -0.069 -0.014271 -0.054968, -0.069 -0.015606 -0.093115, -0.069 -0.016514 -0.099951, -0.069 -0.018734 -0.106421, + -0.069 -0.022179 -0.112341, -0.069 -0.026715 -0.117529, -0.069 -0.032166 -0.12168, -0.069 -0.038327 -0.12467, + -0.069 -0.044957 -0.12644, -0.069 -0.051808 -0.126868, -0.069 -0.058606 -0.125952, -0.069 -0.065098 -0.123755, + -0.069 -0.071034 -0.120337, -0.069 -0.076184 -0.115759, -0.069 -0.080349 -0.110327, -0.069 -0.083363 -0.104163, + -0.069 -0.085125 -0.09751, -0.069 -0.08556 -0.090674, -0.069 -0.079976 0.069238, -0.069 -0.079068 0.076013, + -0.069 -0.076848 0.082544, -0.069 -0.073407 0.088464, -0.069 -0.068867 0.093591, -0.069 -0.06342 0.097742, + -0.069 -0.057255 0.100793, -0.069 -0.050625 0.102563, -0.069 -0.043778 0.102991, -0.069 -0.036976 0.102075, + -0.069 -0.030488 0.099878, -0.069 -0.024552 0.096399, -0.069 -0.019402 0.0918821, -0.069 -0.015236 0.086389, + -0.069 -0.012215 0.080286, -0.069 -0.010455 0.073633, -0.069 -0.010022 0.066797, -0.069 -0.011494 0.024622, + -0.069 -0.011811 0.021692, -0.069 -0.012547 0.018884, -0.069 -0.01521 0.013696, -0.069 -0.016594 0.011621, + -0.069 -0.020733 -0.00217295, -0.069 -0.022824 -0.014807, -0.069 -0.021622 -0.027563, -0.075935 -0.015892 -0.00192899, + -0.075935 -0.016812 -0.028174, -0.054935 -0.085728 -0.044958, -0.049065 -0.087613 -0.0513059, -0.027479 -0.093213 -0.065466, + -0.019022 -0.094731 -0.068396, -0.01045 -0.095753 -0.070227, 0.00889404 -0.095883 -0.070471, 0.019585 -0.094639 -0.068274, + 0.030085 -0.092663 -0.064307, 0.049252 -0.087552 -0.051123, 0.057224 -0.08495 -0.042029, 0.052933 -0.084584 -0.050696, + 0.043503 -0.085232 -0.062048, 0.03418 -0.085743 -0.0698, 0.023575 -0.086224 -0.075598, 0.01202 -0.086651 -0.079199, + 3.48683e-008 -0.08701 -0.080176, -0.00219897 -0.086949 -0.080237, -0.012273 -0.086644 -0.079138, -0.022013 -0.086293 -0.07627, + -0.03112 -0.085896 -0.071753, -0.039379 -0.085469 -0.065833, -0.045746 -0.085095 -0.05979, -0.051331 -0.084713 -0.053015, + 0.067795 0.020906 -0.03208, 0.067947 0.019087 -0.0359859, 0.068001 0.017269 -0.039893, 0.068001 0.017234 -0.0399539, + 0.068001 0.017199 -0.040015, 0.068001 0.016936 -0.040015, 0.068001 0.016673 -0.040015, 0.067947 0.018788 -0.036047, + 0.060753 0.036184 0.00637203, 0.045738 0.046911 0.036462, 0.031115 0.054435 0.051843, 0.016594 0.058887 0.060205, + 0.00299199 0.060554 0.063196, -0.010056 0.059978 0.062158, -0.0163 0.058948 0.060266, -0.035797 0.052372 0.047815, + -0.049995 0.044139 0.029993, -0.055264 0.045274 0.020166, -0.054699 0.045822 0.021387, -0.04932 0.050367 0.031091, + -0.042793 0.054641 0.040247, -0.035801 0.058162 0.047815, -0.027658 0.061214 0.054346, -0.016287 0.063976 0.060266, + -0.010045 0.064849 0.062158, -0.00355901 0.065311 0.063135, -1.47854e-008 0.065376 0.063318, 0.00946299 0.06491 0.06228, + 0.01659 0.063922 0.060205, 0.023258 0.062473 0.057092, 0.031113 0.060039 0.051843, 0.038025 0.05714 0.045618, + 0.045746 0.052845 0.036401, 0.05209 0.048168 0.026392, 0.058754 0.041454 0.011987, 0.063484 0.034464 -0.00296599, + 0.065971 0.028879 -0.01499, 0.067467 0.023238 -0.027075, 0.066231 0.026101 -0.016577, 0.063484 0.031846 -0.00296599, + 1.3976e-008 -0.022892 -0.116125, 0.010593 -0.022461 -0.11521, 0.020746 -0.020749 -0.112524, 0.0291 -0.018757 -0.108801, + 0.038361 -0.01587 -0.102881, 0.044994 -0.012993 -0.097083, 0.050781 -0.00973698 -0.090674, 0.059803 -0.00234998 -0.07627, + 0.0634 0.00217402 -0.067542, 0.065956 0.00688702 -0.058508, 0.06749 0.011736 -0.049353, 0.06749 0.012857 -0.049353, + 0.065956 0.00856402 -0.058508, 0.0634 0.00436302 -0.067542, 0.059803 0.00030302 -0.07627, 0.05077 -0.00641698 -0.090674, + 0.044983 -0.00942299 -0.097083, 0.038361 -0.012112 -0.102881, 0.029997 -0.01466 -0.108313, 0.020746 -0.01661 -0.112524, + 0.00780101 -0.018067 -0.115637, -0.00561499 -0.018181 -0.115881, -0.014562 -0.017476 -0.114355, -0.023111 -0.016186 -0.111609, + -0.031086 -0.014374 -0.107703, -0.038361 -0.012112 -0.102881, -0.046169 -0.00886402 -0.0959229, + -0.052788 -0.00517902 -0.087988, -0.058838 -0.000596019 -0.078162, -0.063347 0.00429498 -0.067664, + -0.066483 0.00974498 -0.056006, -0.067909 0.015329 -0.044043, -0.06797 0.016102 -0.042395, -0.06797 -0.018086 -0.042273, + -0.067917 -0.017193 -0.0437379, -0.067764 -0.015839 -0.046362, -0.067513 -0.014885 -0.049109, -0.066681 -0.01421 -0.054968, + -0.063347 -0.014569 -0.067664, -0.058838 -0.014817 -0.078162, -0.052788 -0.015004 -0.087988, -0.048706 -0.015072 -0.093115, + -0.038361 -0.016507 -0.102881, -0.030876 -0.018311 -0.107825, -0.022724 -0.02031 -0.111792, -0.014373 -0.02195 -0.114417, + -0.00561499 -0.022858 -0.115881, -0.0345 -0.086468 -0.090674, 3.49849e-008 -0.087368 -0.0906129, + 3.45499e-008 -0.086033 -0.101782, 3.30361e-008 -0.081387 -0.112036, 3.05799e-008 -0.073849 -0.120398, + 2.74153e-008 -0.064137 -0.126135, 2.38356e-008 -0.053151 -0.128638, 2.018e-008 -0.041932 -0.127661, + 1.67864e-008 -0.031517 -0.123389, -0.014812 -0.021882 -0.114294, -0.023556 -0.020115 -0.111426, -0.031233 -0.018219 -0.107642, + -0.058853 -0.015339 -0.093115, -0.028999 -0.081028 0.069238, -0.0429 -0.081105 0.056604, -0.054577 -0.081196 0.045435, + -0.063431 -0.081425 0.031885, -0.051315 -0.084706 -0.053015, -0.045731 -0.085095 -0.05979, -0.031122 -0.085896 -0.071753, + -0.022026 -0.086293 -0.07627, -0.012294 -0.086644 -0.079138, -0.064087 -0.00989202 0.066797, -0.057621 -0.010329 0.074609, + -0.055771 -0.012589 0.082117, -0.053677 -0.016057 0.088403, -0.047489 -0.027745 0.099084, -0.042774 -0.034577 0.102136, + -0.036453 -0.041184 0.103662, -0.028999 -0.053364 0.103052, -0.028999 -0.059697 0.100916, -0.028999 -0.065533 0.09762, + -0.028999 -0.07066 0.093347, -0.028999 -0.074894 0.088159, -0.028999 -0.078106 0.082239, -0.028999 -0.080174 0.075891, + -0.049 -0.080502 0.069238, -0.062828 -0.010575 0.046289, -0.068504 -0.015202 0.013635, -0.067581 -0.012505 0.018884, + -0.067192 -0.011759 0.021692, -0.067856 -0.011464 0.024622, -0.06797 -0.01809 -0.042273, -0.068459 -0.017205 -0.043799, + -0.067841 -0.014241 -0.054968, -0.067505 -0.014878 -0.04917, -0.058811 -0.014817 -0.078223, -0.022942 -0.077595 0.0671631, + -0.022329 -0.050267 0.099756, -0.028999 -0.05486 0.102686, -0.028999 -0.063794 0.098779, -0.028999 -0.071354 0.092615, + -0.028999 -0.075795 0.086755, -0.028999 -0.078946 0.080103, -0.022846 -0.077473 0.069116, -0.000380973 -0.06429 0.071008, + 0.00964103 -0.058461 0.070764, 0.00691302 -0.057805 0.076379, -0.00375998 -0.056286 0.086267, 0.07299 -0.00265698 -0.076086, + 0.07338 -0.085446 -0.090674, 0.073578 -0.084843 -0.0984859, 0.073776 -0.082524 -0.105933, 0.073952 -0.07861 -0.112646, + 0.074104 -0.0733 -0.118384, 0.074219 -0.066861 -0.122717, 0.074287 -0.059605 -0.125586, 0.074318 -0.051907 -0.126746, + 0.074303 -0.04414 -0.126135, 0.074249 -0.036686 -0.123877, 0.074142 -0.029927 -0.119971, 0.074005 -0.024201 -0.114722, + 0.073837 -0.019791 -0.108252, 0.072594 -0.050587 -0.060706, 0.072609 -0.044507 -0.061316, 0.072655 -0.038666 -0.063086, + 0.072731 -0.033284 -0.065955, 0.07283 -0.028565 -0.0698, 0.072952 -0.024693 -0.074561, 0.073097 -0.021813 -0.079932, + 0.07325 -0.020043 -0.085791, 0.07341 -0.019444 -0.091833, 0.073563 -0.020043 -0.097937, 0.073715 -0.021813 -0.103735, + 0.07386 -0.024693 -0.109106, 0.073982 -0.028565 -0.113867, 0.074081 -0.033284 -0.117712, 0.074158 -0.038666 -0.120581, + 0.074203 -0.044507 -0.122351, 0.074219 -0.050587 -0.122961, 0.074203 -0.05666 -0.122351, 0.074158 -0.062504 -0.120581, + 0.074081 -0.067883 -0.117712, 0.073982 -0.072606 -0.113867, 0.07386 -0.076474 -0.109106, 0.073715 -0.079358 -0.103735, + 0.073563 -0.081128 -0.097937, 0.07341 -0.081715 -0.091833, 0.07325 -0.081128 -0.085791, 0.073097 -0.079358 -0.079932, + 0.072952 -0.076474 -0.074561, 0.07283 -0.072606 -0.0698, 0.072731 -0.067883 -0.065955, 0.072655 -0.062504 -0.063086, + 0.072609 -0.05666 -0.061316, 0.071213 -0.085507 -0.090674, 0.013111 -0.086613 -0.078955, 0.025578 -0.08614 -0.074683, + 0.035072 -0.085698 -0.069128, 0.052921 -0.084584 -0.050757, 1.54094e-008 -0.027291 -0.120398, + 1.70526e-008 -0.032334 -0.123877, 1.88597e-008 -0.03788 -0.12644, 2.07828e-008 -0.043782 -0.128088, + 2.3455e-008 -0.051983 -0.128699, 2.61028e-008 -0.060109 -0.127478, 2.85962e-008 -0.067761 -0.124426, + 3.08112e-008 -0.074559 -0.119849, 3.26382e-008 -0.080166 -0.113806, 3.39807e-008 -0.084286 -0.106665, + 3.47764e-008 -0.086728 -0.098853, 0.03669 -0.086407 -0.090674, 0.074142 -0.029931 -0.119971, 0.051468 -0.019276 -0.108557, + 0.010595 -0.022461 -0.11521, 0.067947 0.018789 -0.036047, 0.068298 0.021012 -0.031836, 0.06955 0.017212 -0.038916, + 0.071892 0.00728702 -0.057471, 0.071213 -0.019734 -0.108313, 0.045002 -0.012993 -0.097083, 0.050793 -0.00972998 -0.0906129, + 0.063416 0.00219502 -0.06748, 0.065971 0.00691802 -0.058508, 0.067497 0.01176 -0.049292, 0.067886 0.022126 -0.029456, + 0.069496 0.017392 -0.038611, 0.071877 0.00737302 -0.057288, 0.071999 -0.00132798 -0.038062, 0.066254 0.026055 -0.01676, + 0.079002 -0.050587 -0.066504, 0.079002 -0.060475 -0.0684569, 0.079002 -0.068852 -0.074072, 0.079002 -0.074452 -0.082434, + 0.079002 -0.07642 -0.092322, 0.079002 -0.074452 -0.102209, 0.079002 -0.068852 -0.110632, 0.079002 -0.060475 -0.116248, + 0.079002 -0.050587 -0.118201, 0.079002 -0.040696 -0.116248, 0.079002 -0.032315 -0.110632, 0.079002 -0.026711 -0.102209, + 0.079002 -0.024746 -0.092322, 0.079002 -0.026711 -0.082434, 0.079002 -0.032315 -0.074072, 0.079002 -0.040696 -0.0684569, + 0.075798 -0.050587 -0.063574, 0.079002 -0.059903 -0.068213, 0.079002 -0.06799 -0.073218, 0.079002 -0.073735 -0.080847, + 0.079002 -0.076329 -0.090125, 0.079002 -0.076245 -0.095374, 0.079002 -0.075085 -0.100562, 0.079002 -0.072896 -0.105383, + 0.079002 -0.069737 -0.109717, 0.079002 -0.065747 -0.113257, 0.079002 -0.061085 -0.115942, 0.079002 -0.055958 -0.117651, + 0.076614 -0.050587 -0.120581, 0.074211 -0.056401 -0.122412, 0.074165 -0.062008 -0.120825, 0.074097 -0.067212 -0.11814, + 0.074005 -0.071835 -0.1146, 0.073891 -0.075711 -0.110205, 0.073753 -0.078709 -0.1052, 0.073616 -0.080708 -0.0997069, + 0.073463 -0.081654 -0.09397, 0.073311 -0.081501 -0.08811, 0.073158 -0.080266 -0.082434, 0.073021 -0.077984 -0.077063, + 0.072891 -0.074742 -0.07218, 0.072784 -0.070645 -0.06803, 0.072693 -0.065846 -0.064734, 0.072632 -0.060513 -0.062354, + 0.072601 -0.054829 -0.061011, 0.079002 -0.045208 -0.117651, 0.079002 -0.040081 -0.115942, 0.079002 -0.03542 -0.113257, + 0.079002 -0.03143 -0.109717, 0.079002 -0.028275 -0.105383, 0.079002 -0.026082 -0.100562, 0.079002 -0.024926 -0.095374, + 0.079002 -0.024838 -0.090125, 0.079002 -0.027428 -0.080847, 0.079002 -0.033177 -0.073218, 0.079002 -0.04126 -0.068213, + 0.072601 -0.046338 -0.061011, 0.072632 -0.040654 -0.062354, 0.072693 -0.035317 -0.064734, 0.072784 -0.030518 -0.06803, + 0.072891 -0.026425 -0.07218, 0.073021 -0.023182 -0.077063, 0.073158 -0.020901 -0.082434, 0.073311 -0.019665 -0.08811, + 0.073463 -0.019516 -0.09397, 0.073616 -0.020459 -0.0997069, 0.073753 -0.022461 -0.1052, 0.073891 -0.025456 -0.110205, + 0.074005 -0.029328 -0.1146, 0.074097 -0.033951 -0.11814, 0.074165 -0.039162 -0.120825, 0.074211 -0.044774 -0.122412, + -0.054707 -0.015999 0.099512, -0.055187 -0.014256 0.099512, -0.055611 -0.012501 0.099512, -0.054707 -0.015999 0.100488, + -0.055187 -0.014256 0.100488, -0.055611 -0.012501 0.100488, -0.055611 -0.012501 0.104028, -0.055828 -0.0115 0.104028, + -0.055721 -0.012 0.104028, -0.055828 -0.0115 0.100488, -0.05616 -0.00975502 0.100488, -0.056435 -0.00800002 0.100488, + -0.056435 -0.00800002 0.099512, -0.055828 -0.0115 0.099512, -0.05616 -0.00975502 0.099512, -0.055828 -0.0115 0.095972, + -0.055721 -0.012 0.095972, -0.055611 -0.012501 0.095972, -0.055611 -0.012501 0.097742, -0.055828 -0.0115 0.097742, + -0.056435 -0.00800002 0.1, -0.055828 -0.0115 0.102258, -0.055611 -0.012501 0.102258, -0.054707 -0.015999 0.1, + -0.056858 0.00399998 0.100488, -0.056278 0.00903598 0.100488, -0.055256 0.014 0.100488, -0.056858 0.00399998 0.102136, + -0.056999 -0.000412019 0.10116, -0.056797 -0.00482402 0.100244, -0.056797 -0.00482402 0.099756, + -0.054947 -0.00241302 0.099268, -0.056999 -1.85726e-008 0.098718, -0.056858 0.00399998 0.097864, + -0.056858 0.00399998 0.099512, -0.056278 0.00903598 0.099512, -0.055256 0.014 0.099512, -0.056797 -0.00482402 0.1, + -0.056858 0.00399998 0.098657, -0.055256 0.014 0.1, -0.056858 0.00399998 0.101343, -0.056999 -1.85726e-008 0.101282, + -0.054268 0.017435 0.097498, -0.054268 0.017435 0.096521, -0.053936 0.018435 0.097498, -0.054104 0.017936 0.097498, + -0.053936 0.018435 0.105005, -0.052963 0.021072 0.105005, -0.053467 0.01976 0.105005, -0.052353 0.022545 0.101831, + -0.051701 0.024 0.098718, -0.050167 0.022546 0.101831, -0.051701 0.024 0.096521, -0.052692 0.021738 0.096521, + -0.053585 0.019435 0.096521, -0.053585 0.019435 0.094995, -0.053764 0.018936 0.094995, -0.053936 0.018435 0.094995, + -0.053936 0.018435 0.096521, -0.054104 0.017936 0.096521, -0.053211 0.020435 0.104028, -0.053398 0.019936 0.104028, + -0.053585 0.019435 0.104028, -0.050529 0.021725 0.101221, -0.052696 0.021724 0.101221, -0.052155 0.023 0.098474, + -0.052155 0.023 0.097498, -0.052898 0.02123 0.097498, -0.053585 0.019435 0.097498, -0.053936 0.018435 0.095728, + -0.053585 0.019435 0.095728, -0.051701 0.024 0.09762, -0.052357 0.022536 0.101831, -0.053936 0.018435 0.101221, + -0.054268 0.017435 0.097009, -0.0527 0.021718 0.101221, -0.052155 0.023 0.097986, -0.053585 0.019435 0.100732, + -0.071548 -0.093503 0.01449, -0.071548 -0.094502 0.01449, -0.071136 -0.094502 0.016382, -0.070679 -0.094502 0.018274, + -0.071053 -0.096302 0.016748, -0.071388 -0.098111 0.015222, -0.071129 -0.098111 0.016443, -0.070847 -0.098111 0.017603, + -0.070671 -0.09882 0.018274, -0.07048 -0.099522 0.019006, -0.07048 -0.10159 0.019006, -0.070724 -0.102498 0.018091, + -0.070602 -0.10204 0.018518, -0.068993 -0.102498 0.016748, -0.071358 -0.102498 0.015405, -0.071053 -0.102498 0.016748, + -0.071609 -0.101292 0.014185, -0.071487 -0.101895 0.014795, -0.071739 -0.102002 0.013513, -0.071678 -0.101643 0.013818, + -0.071594 -0.102749 0.014246, -0.071442 -0.103497 0.0149781, -0.071053 -0.103497 0.016748, -0.070618 -0.103497 0.018518, + -0.070419 -0.102749 0.01925, -0.070206 -0.102002 0.0199831, -0.070206 -0.09911 0.0199831, -0.070747 -0.097111 0.01803, + -0.07048 -0.098111 0.019006, -0.0709 -0.097111 0.017419, -0.070824 -0.097111 0.0177251, -0.070564 -0.095555 0.018701, + -0.070206 -0.093998 0.0199831, -0.068497 -0.095555 0.018701, -0.070206 -0.093503 0.0199831, -0.07093 -0.093503 0.017236, + -0.070206 -0.093747 0.0199831, -0.070564 -0.095562 0.018701, -0.070206 -0.10056 0.0199831, -0.071678 -0.101651 0.013818, + -0.07048 -0.10056 0.019006, -0.071548 -0.093998 0.01449, -0.071335 -0.094502 -0.015479, -0.071335 -0.097996 -0.015479, + -0.071114 -0.094502 -0.016516, -0.071228 -0.094502 -0.016028, -0.071114 -0.097996 -0.016516, -0.070206 -0.097996 -0.019995, + -0.070679 -0.097996 -0.018225, -0.070206 -0.099003 -0.019995, -0.071114 -0.099003 -0.016516, -0.070679 -0.099003 -0.018225, + -0.071114 -0.102498 -0.016516, -0.071228 -0.102498 -0.016028, -0.071335 -0.102498 -0.015479, -0.071335 -0.099003 -0.015479, + -0.072006 -0.099003 -0.012, -0.071693 -0.099003 -0.01377, -0.072006 -0.097996 -0.012, -0.071693 -0.097996 -0.01377, + -0.072006 -0.0985 -0.012, -0.071335 -0.10075 -0.015479, -0.071114 -0.10075 -0.016516, -0.070206 -0.0985 -0.019995, + -0.071114 -0.096249 -0.016516, -0.071335 -0.096249 -0.015479, -0.072464 -0.097996 -0.00882596, -0.072868 -0.09718 -0.00443095, + -0.072998 -0.096348 2.40207e-005, -0.072464 -0.099003 -0.00882596, -0.072998 -0.100651 2.40207e-005, + -0.072868 -0.099827 -0.00443095, -0.072998 -0.099003 2.40207e-005, -0.072311 -0.099003 0.00997305, + -0.07283 -0.099003 0.00502902, -0.072311 -0.097996 0.00997305, -0.07283 -0.097996 0.00502902, + -0.072998 -0.097996 2.40207e-005, -0.072998 -0.097172 2.40207e-005, -0.072311 -0.0985 0.00997305, + -0.072998 -0.099827 2.40207e-005, -0.072464 -0.0985 -0.00882596, -0.072868 -0.097172 -0.00443095, + -0.053944 -0.010729 0.101892, -0.050812 -0.021046 0.101892, -0.045731 -0.030556 0.101892, -0.021048 -0.050816 0.101892, + -0.01073 -0.053944 0.101892, 2.44371e-008 -0.054997 0.101892, 0.01073 -0.053944 0.101892, 0.021048 -0.050816 0.101892, + 0.030556 -0.045727 0.101892, 0.038891 -0.038891 0.101892, 0.045731 -0.030556 0.101892, 0.050812 -0.021046 0.101892, + 0.053944 -0.010729 0.101892, 0.053944 0.01073 0.101892, 0.050812 0.021048 0.101892, 0.045731 0.030556 0.101892, + 0.038891 0.03889 0.101892, 0.030556 0.04573 0.101892, 0.021048 0.050813 0.101892, 0.01073 0.053943 0.101892, + -1.14044e-008 0.055 0.101892, -0.01073 0.053943 0.101892, -0.021048 0.050813 0.101892, -0.030556 0.04573 0.101892, + -0.038891 0.03889 0.101892, -0.045731 0.030556 0.101892, -0.053944 0.01073 0.101892, -0.050735 0.021231 0.100732, + 0.053955 0.010732 0.094019, 0.050823 0.021052 0.094019, 0.045742 0.030563 0.094019, 0.038898 0.0389 0.094019, + 0.030563 0.045742 0.094019, 0.021051 0.050825 0.094019, 0.010733 0.053955 0.094019, -1.1408e-008 0.055011 0.094019, + -0.010733 0.053955 0.094019, -0.021051 0.050825 0.094019, -0.030563 0.045742 0.094019, -0.038898 0.0389 0.094019, + -0.045742 0.030563 0.094019, -0.050823 0.021052 0.094019, -0.053955 0.010732 0.094019, -0.055012 -1.79252e-008 0.094019, + -0.053944 -0.01079 0.094019, -0.00176798 -0.054982 0.094019, 0.010759 -0.053952 0.094019, 0.022724 -0.050099 0.094019, + 0.033504 -0.043633 0.094019, 0.042534 -0.03489 0.094019, 0.049343 -0.024323 0.094019, 0.053577 -0.012486 0.094019, + 0.061245 0.012183 0.053247, 0.057693 0.023897 0.053247, 0.051922 0.034693 0.053247, 0.044155 0.044157 0.053247, + 0.034695 0.051921 0.053247, -0.034695 0.051921 0.053247, -0.044155 0.044157 0.053247, -0.051922 0.034693 0.053247, + -0.057693 0.023897 0.053247, -0.061245 0.012183 0.053247, -0.062447 -2.03478e-008 0.053247, 0.048489 -0.039334 0.053308, + 0.056103 -0.027405 0.053308, 0.060833 -0.014061 0.053308, -0.069229 0.012027 0.010217, -0.070267 -2.28959e-008 0.010217, + -0.069725 -0.00869602 0.010217, 0.069969 0.010201 0.00643301, 0.067764 0.020188 0.00643301, 0.064148 0.029752 0.00643301, + 0.069633 -0.056752 0.013879, 0.065598 -0.056752 0.027185, 0.059036 -0.056752 0.039453, 0.050205 -0.056752 0.050195, + 0.039444 -0.056752 0.059045, 0.02717 -0.056752 0.065576, -0.069633 -0.09792 -0.013831, -0.065598 -0.09792 -0.027197, + -0.059036 -0.09792 -0.039465, -0.050205 -0.09792 -0.050208, -0.039444 -0.09792 -0.059058, -0.02717 -0.09792 -0.065588, + -0.013851 -0.09792 -0.069617, 3.84232e-008 -0.09792 -0.071021, 0.013851 -0.09792 -0.069617, 0.02717 -0.09792 -0.065588, + 0.039444 -0.09792 -0.059058, 0.050205 -0.09792 -0.050208, 0.059036 -0.09792 -0.039465, 0.065598 -0.09792 -0.027197, + 0.069633 -0.09792 -0.013831, -0.072395 0.012605 -0.035193, -0.075661 0.012605 -0.028906, -0.077667 0.012605 -0.02207, + -0.078346 0.012605 -0.0150509, -0.076775 0.012605 -0.00436997, -0.072205 0.012605 0.00539601, -0.075493 -0.018334 -0.00449198, + -0.077484 -0.019017 -0.014929, -0.075493 -0.019066 -0.025427, -0.074966 -0.019192 -0.00510299, -0.076546 -0.020115 -0.014929, + -0.074966 -0.019879 -0.024756, -0.074631 -0.019539 -0.005225, -0.075974 -0.0206 -0.014929, -0.074631 -0.020215 -0.024573, + -0.07444 -0.019696 -0.00528598, -0.075661 -0.020829 -0.014868, -0.07444 -0.020367 -0.024573, -0.074234 -0.019837 -0.00528598, + -0.07534 -0.021046 -0.014868, -0.074234 -0.020508 -0.024512, -0.07402 -0.01997 -0.00528598, -0.075012 -0.021248 -0.014868, + -0.07402 -0.020642 -0.024573, -0.073792 -0.020089 -0.005225, -0.074661 -0.021443 -0.014868, -0.073792 -0.020764 -0.024573, + -0.073288 -0.020295 -0.00510299, -0.073936 -0.021798 -0.014868, -0.073288 -0.020981 -0.024695, + -0.072105 -0.020585 -0.00449198, -0.07238 -0.022355 -0.014868, -0.072105 -0.021313 -0.025305, 0.031124 -0.090481 -0.066199, + 0.020866 -0.090687 -0.071997, 0.00964804 -0.090809 -0.075476, -0.00204896 -0.09084 -0.076331, -0.01139 -0.090802 -0.07511, + -0.020367 -0.090687 -0.07218, -0.028736 -0.090542 -0.067786, -0.036316 -0.090344 -0.06217, 0.05209 0.045517 0.026392, + 0.045742 0.04817 0.036401, -0.042793 0.049188 0.040247, -0.050007 0.046468 0.029993, -0.06678 -0.00347202 -0.054358, + -0.063347 -0.00593802 -0.067664, -0.058838 -0.00787802 -0.078162, -0.052788 -0.00969602 -0.087988, + -0.046165 -0.011158 -0.0959229, -0.038361 -0.012444 -0.102881, 0.038361 -0.012444 -0.102881, 0.044971 -0.011382 -0.0971439, + -0.0345 -0.017914 -0.106787, -0.0345 -0.021447 -0.112891, -0.0345 -0.026097 -0.11814, -0.0345 -0.031689 -0.122412, + -0.0345 -0.03801 -0.125525, -0.0345 -0.044812 -0.127356, -0.0345 -0.051838 -0.127783, -0.0345 -0.058812 -0.126868, + -0.0345 -0.065472 -0.124548, -0.0345 -0.07156 -0.121069, -0.0345 -0.07684 -0.11637, -0.0345 -0.081105 -0.110815, + -0.0345 -0.084218 -0.104468, -0.0345 -0.086018 -0.097693, -0.049 -0.079579 0.076135, -0.049 -0.077328 0.082727, + -0.049 -0.073826 0.08877, -0.049 -0.069226 0.093958, -0.049 -0.063694 0.09823, -0.049 -0.057438 0.101282, + -0.049 -0.050709 0.103052, -0.049 -0.043759 0.103479, -0.049 -0.036858 0.102563, -0.049 -0.03027 0.100305, + -0.067856 -0.01178 0.021692, -0.067856 -0.012516 0.018884, -0.067856 -0.013661 0.016138, -0.068459 -0.018399 -0.041724, + -0.068504 -0.016587 0.011621, -0.067841 -0.015843 -0.046362, -0.067841 -0.014893 -0.049109, -0.067841 -0.014355 -0.052039, + -0.00967798 -0.055035 0.090784, -0.00967797 -0.061146 0.086938, -0.00967797 -0.065281 0.082422, + -0.00967797 -0.067921 0.077722, -0.00967797 -0.069279 0.07345, 0.037159 -0.085782 -0.098669, 0.037159 -0.083401 -0.106299, + 0.037159 -0.079388 -0.113196, 0.037159 -0.073925 -0.119116, 0.037159 -0.067311 -0.123572, 0.037159 -0.059857 -0.126501, + 0.037159 -0.051945 -0.127722, 0.037159 -0.043961 -0.127112, 0.037159 -0.036301 -0.124792, 0.037159 -0.029358 -0.120764, + 0.037159 -0.023472 -0.115332, 0.071465 0.00732302 -0.038062, 0.069885 0.015845 -0.038062, 0.077255 -0.05608 -0.11936, + 0.077217 -0.061367 -0.117773, 0.077148 -0.066235 -0.115149, 0.077057 -0.070508 -0.11167, 0.076942 -0.074009 -0.107397, + 0.076813 -0.076611 -0.102515, 0.076675 -0.078213 -0.097266, 0.07653 -0.078755 -0.091772, 0.076385 -0.078213 -0.086279, + 0.076248 -0.076611 -0.080969, 0.076126 -0.074009 -0.076086, 0.076012 -0.070508 -0.071814, 0.07592 -0.066235 -0.068335, + 0.075851 -0.061367 -0.0657099, 0.075813 -0.05608 -0.064124, 0.075813 -0.045086 -0.064124, 0.075851 -0.039803 -0.0657099, + 0.07592 -0.034932 -0.068335, 0.076012 -0.030663 -0.071814, 0.076126 -0.027157 -0.076086, 0.076248 -0.024556 -0.080969, + 0.076385 -0.022953 -0.086279, 0.07653 -0.022412 -0.091772, 0.076675 -0.022953 -0.097266, 0.076813 -0.024556 -0.102515, + 0.076942 -0.027157 -0.107397, 0.077057 -0.030663 -0.11167, 0.077148 -0.034932 -0.115149, 0.077217 -0.039803 -0.117773, + 0.077255 -0.045086 -0.11936, -0.055717 -0.01203 0.1, -0.056999 -1.85726e-008 0.1, -0.07122 -0.0985 -0.016028, + -0.072998 -0.0985 2.40207e-005, -0.031893 -0.044667 0.103906, -0.030445 -0.045704 0.103967, -0.037373 -0.0402 0.103418, + -0.038666 -0.038998 0.103235, -0.053719 0.011519 0.100488, -0.053986 0.010279 0.100488, -0.053719 0.011519 0.099512, + -0.053986 0.010279 0.099512, -0.021942 0.057361 0.057336, -0.024799 0.05656 0.055872, -0.013113 0.059474 0.061243, + -0.000285013 0.060543 0.063196, 0.013019 0.059471 0.061243, 0.04213 -0.044636 0.056665, 0.039165 -0.046872 0.058862, + 0.025806 -0.05415 0.066003, 0.015912 -0.057065 0.068872, 0.012778 -0.057797 0.069604, -0.000220975 -0.056836 0.083154, + -0.070557 -0.097996 0.007532, -0.066986 -0.081654 0.022668, -0.046288 -0.081128 0.053491, -0.035271 -0.081151 0.061182, + -0.011141 -0.070637 0.06991, 2.60274e-005 -0.064084 0.070764, 0.013405 -0.057797 0.069604, 0.015285 -0.057431 0.069238, + -0.06929 -0.094502 0.015466, -0.068848 -0.094502 0.017358, -0.068962 -0.094502 0.01687, -0.068802 -0.095402 0.017542, + -0.068893 -0.09586 0.017114, -0.068848 -0.095631 0.017358, -0.069168 -0.09721 0.016016, -0.069084 -0.09676 0.016382, + -0.069206 -0.098111 0.015833, -0.068932 -0.098111 0.016992, -0.068695 -0.098469 0.017969, -0.068825 -0.102498 0.017419, + -0.069153 -0.102498 0.016077, -0.069633 -0.102383 0.013879, -0.069199 -0.103497 0.015894, -0.068542 -0.097607 0.018518, + -0.068611 -0.097363 0.018274, -0.068665 -0.096333 0.01803, -0.068748 -0.096722 0.0177251, -0.068794 -0.09692 0.017542, + -0.068581 -0.095944 0.018396, -0.068306 -0.094784 0.019373, -0.068497 -0.093503 0.01864, -0.06868 -0.093503 0.017969, + -0.069183 -0.093503 0.015894, -0.069031 -0.093503 0.016565, -0.069344 -0.093503 0.015161, -0.069473 -0.097996 -0.014624, + -0.069565 -0.097996 -0.014197, -0.069611 -0.097996 -0.013953, -0.070992 -0.015587 0.00686002, -0.07 -0.015542 0.00820303, + -0.069496 -0.015515 0.00887501, -0.042374 -0.089489 -0.056372, -0.039028 -0.090413 -0.058875, 0.035099 -0.091427 -0.061438, + 0.053238 -0.086262 -0.046606, 0.067978 0.01773 -0.038062, 0.041882 0.049093 0.04104, -0.000283013 0.060543 0.063196, + -0.039295 0.050527 0.044031, 0.055424 0.044811 0.019189, 0.061119 0.03796 0.00448, 0.062302 0.036212 0.000757039, + 0.04789 -0.011366 -0.093848, 0.055294 -0.00604298 -0.083472, 0.03418 -0.013386 -0.105627, 0.025372 -0.015633 -0.110449, + 0.027683 -0.015149 -0.109412, 0.028841 -0.014904 -0.108862, 0.014274 -0.017338 -0.114111, 0.011037 -0.017701 -0.114844, + 0.00109301 -0.018124 -0.115759, -0.00226099 -0.018151 -0.11582, -0.034725 -0.013245 -0.105322, -0.043533 -0.015789 -0.097998, + -0.040947 -0.016148 -0.100439, -0.058399 -0.010046 0.070703, -0.056698 -0.01146 0.078333, -0.056232 -0.012024 0.0802251, + -0.054722 -0.014325 0.085229, -0.054199 -0.015191 0.086816, -0.052364 -0.018322 0.091089, -0.051708 -0.019455 0.092371, + -0.049129 -0.024453 0.096704, -0.04995 -0.022805 0.095483, -0.049538 -0.023629 0.096094, -0.00853397 -0.069104 0.070032, + -0.00859998 -0.054837 0.08999, -0.01102 -0.054112 0.0918821, -0.053139 0.020587 0.096521, -0.052525 0.022115 0.097498, + -0.070732 -0.096333 0.01803, -0.070992 -0.098111 0.016992, -0.070908 -0.094502 0.017358] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 2529 + -0.976456 -0.213877 0.028116, -1 0 0, -1 -3.28246e-007 3.75722e-008, -0.965916 0.255669 -0.0404959, + -0.959371 0.0101659 0.281963, -1 -4.09102e-007 5.38953e-008, -1 -3.71623e-007 -2.65901e-010, -1 -3.33162e-007 8.89735e-009, + -1 -2.63731e-007 -9.12197e-009, -0.965967 0.258649 -0.00282093, -0.941571 -0.336593 -0.0122035, -1 -4.0419e-007 -4.62345e-008, + -0.959943 -0.0100957 -0.280014, -0.985137 0.170705 0.0191281, -1 -4.06128e-007 -4.0962e-008, -0.955284 0.285864 0.0755873, + -1 -3.10498e-007 5.05156e-009, -0.966309 0.223091 -0.128364, -0.97524 0.194279 -0.105654, -0.916219 0.400408 0.0147278, + -0.94454 0.307621 0.114949, -0.92397 0.355914 -0.140014, -0.950613 0.309291 -0.0259681, -0.974993 0.20213 0.0923686, + -0.953342 0.299317 -0.039355, -0.938804 0.344201 0.0131723, -0.939003 0.332601 0.0874674, -0.965271 0.237537 0.108757, + -0.0259099 0.909953 -0.413902, -0.0295394 0.895532 -0.444015, -0.0291656 0.811595 -0.583492, -0.0258727 0.972992 -0.229385, + -0.024306 0.968404 -0.248201, -0.0225621 0.923346 -0.383307, -0.0259426 0.996158 -0.0836497, -0.0255675 0.990843 -0.132575, + -0.0290378 0.811945 -0.583011, -0.028339 0.705912 -0.707733, -0.0274919 0.68188 -0.730947, -0.0228614 0.350311 -0.936354, + -0.024716 0.512768 -0.858171, -0.0256143 0.553682 -0.832334, -0.0211912 0.128782 -0.991446, -0.0214709 0.181295 -0.983194, + -0.0211091 -0.0358526 -0.999134, -0.026597 0.811855 -0.583252, -0.0263158 0.997364 -0.0676178, -0.0256033 0.980008 -0.197303, + -0.0268904 0.65703 -0.753385, -0.0223431 0.331846 -0.943069, -0.0234975 0.37932 -0.924967, -0.021393 0.161336 -0.986668, + -0.0253156 0.524251 -0.851188, -0.0208131 -0.0360018 -0.999135, -0.0238377 -0.430701 -0.90218, -0.0236794 -0.413388 -0.910247, + -0.0232814 -0.584429 -0.811111, -0.0216136 -0.197647 -0.980035, -0.0222388 -0.260203 -0.965298, + -0.0212353 -0.197052 -0.980163, -0.0227566 -0.382385 -0.923723, -0.026598 -0.610454 -0.791605, -0.0274104 -0.731634 -0.681147, + -0.0281222 -0.8323 -0.553612, -0.0227969 -0.731353 -0.681618, -0.0173354 -0.732115 -0.68096, -0.0213751 -0.850379 -0.525737, + -0.0238138 -0.924671 -0.380022, -0.026298 -0.986631 -0.160837, -0.0252458 -0.941297 -0.336633, + -0.0282821 -0.999597 0.00247456, -0.026591 -0.99761 -0.0637734, -0.0252401 -0.557577 -0.829741, + -0.0208498 -0.0357304 -0.999144, -0.0228329 -0.866501 -0.498652, -0.0263948 -0.986635 -0.160796, + -0.0256235 -0.986509 -0.161689, -0.0319901 -0.93585 -0.350944, -0.0252974 -0.999577 -0.0143191, + -0.0259406 -0.996085 0.0845133, -0.0265424 -0.997361 0.0675777, -0.0270986 -0.90925 0.415367, -0.026065 -0.895527 0.444244, + -0.0246109 -0.822159 0.568725, -0.0287416 -0.972949 0.229227, -0.0266771 -0.968255 0.248535, -0.0224487 -0.92272 0.384816, + -0.0265944 -0.990748 0.133083, -0.0205054 -0.791192 0.611224, -0.0258313 -0.691567 0.72185, -0.0277802 -0.680407 0.732307, + -0.0328213 -0.349978 0.936183, -0.0272232 -0.515602 0.856396, -0.0257331 -0.553603 0.832383, -0.021169 -0.128792 0.991446, + -0.0339798 -0.177775 0.983484, -0.031542 0.0336457 0.998936, -0.0265118 -0.810716 0.584839, -0.0258232 -0.979948 0.197573, + -0.0266041 -0.656945 0.753469, -0.0343316 -0.331482 0.942837, -0.0230539 -0.384337 0.922905, -0.0370682 -0.159174 0.986554, + -0.0245992 -0.527508 0.849194, -0.0208419 0.0359393 0.999137, -0.0314038 0.435127 0.899821, -0.0283355 0.415295 0.909245, + -0.0256358 0.583414 0.81177, -0.0349418 0.19466 0.980248, -0.0322904 0.259975 0.965075, -0.0283585 0.194154 0.980561, + -0.0355145 0.387213 0.921306, -0.0263639 0.610457 0.79161, -0.025792 0.730757 0.68215, -0.0284266 0.730006 0.682849, + -0.021994 0.832198 0.554042, -0.0278453 0.73073 0.682099, -0.025925 0.849899 0.526308, -0.026869 0.924424 0.380418, + -0.0279394 0.986589 0.160813, -0.0274092 0.940913 0.337538, -0.0260678 0.999658 -0.00210865, -0.0261576 0.997657 0.0632247, + -0.0312542 0.557849 0.829354, -0.0416929 0.0357483 0.998491, -0.027236 0.866436 0.498545, -0.0255819 0.986633 0.160935, + -0.0271322 0.986611 0.160821, -0.023394 0.936379 0.350209, -0.0259808 0.999563 0.0141062, -0.0260032 0.997143 -0.0709211, + -0.026713 0.996174 -0.0832151, -0.0261559 0.99393 -0.106856, -0.0271214 0.985162 -0.169469, -0.0285778 0.983264 -0.179931, + -0.0251209 0.978578 -0.204339, -0.0264892 0.950188 -0.310551, -0.0468097 0.939179 -0.340224, -0.0278997 0.888867 -0.457316, + -0.0513824 0.865643 -0.498019, -0.00172169 0.929147 -0.369706, -0.00592351 0.866539 -0.499075, -0.0276265 0.854064 -0.519433, + -0.0284871 0.875791 -0.48185, -0.0269969 0.935355 -0.352679, -0.0230787 0.949291 -0.313551, -0.0305511 0.975975 -0.215732, + -0.0237574 0.89517 -0.445092, 0.00702555 0.999308 -0.036515, 0.00812753 0.999309 -0.0362787, 0.00254247 0.999333 -0.0364311, + -0.016737 0.997488 -0.0688226, -0.0138316 0.999877 -0.0074549, -0.0153733 0.99926 -0.0352673, -0.0209428 0.986914 -0.159884, + -0.0291088 0.889339 -0.456321, -0.0266533 0.978682 -0.203647, -0.029537 0.946507 -0.32133, -0.0260056 0.999042 -0.0352099, + 0.00370066 0.999367 -0.0353899, 0.00355405 0.999309 -0.0369875, -0.0216855 0.995662 0.0904861, -0.0284949 0.957615 0.286637, + -0.0324147 0.988552 0.147358, -0.0221225 0.968726 0.247147, -0.0220929 0.923913 0.381963, -0.0286737 0.907124 0.419885, + -0.0293246 0.888275 0.458376, -0.0258134 0.887833 0.459442, -0.0257819 0.990444 0.135485, -0.0251586 0.966469 0.255547, + -0.0248871 0.919219 0.39296, -0.0539544 0.897807 0.437072, -0.0660737 0.964948 0.253987, -0.0415076 0.918096 0.394178, + -0.0240202 0.919198 0.393063, -0.0261505 0.962829 0.268842, -0.0265539 0.993485 0.110827, -0.0447726 0.998797 0.0200136, + -0.0266271 0.998876 0.0392179, -0.000339443 0.97826 0.207383, -0.0020439 0.999255 0.0385499, -0.866046 0.499085 -0.0296284, + -0.865637 0.500431 0.0155649, -0.865409 0.498232 -0.0532125, -0.866041 0.491753 -0.0902838, -0.86604 0.492952 -0.0835045, + -0.865938 0.489614 -0.102123, -0.865827 0.477548 -0.149305, -0.86495 0.446963 -0.228221, -0.863527 0.46883 -0.185796, + -0.862669 0.437225 -0.254236, -0.865461 0.428651 -0.2593, -0.865907 0.445086 -0.228261, -0.865258 0.451438 -0.218018, + -0.865676 0.471449 -0.168345, -0.865694 0.477723 -0.149514, -0.865931 0.489626 -0.102129, -0.866163 0.493669 -0.0778015, + -0.866132 0.473227 -0.160845, -0.866041 0.499084 -0.029817, -0.86597 0.500067 -0.00542762, -0.86604 0.497437 0.0503186, + -0.866073 0.495313 0.0676914, -0.866061 0.485174 0.120602, -0.866315 0.454527 0.20713, -0.866301 0.479642 0.139524, + -0.865976 0.464407 0.185503, -0.864511 0.453494 0.216713, -0.86489 0.454314 0.213459, -0.868977 0.481665 -0.113478, + -0.865997 0.461588 -0.192316, -0.866493 0.485821 -0.114753, -0.86588 0.498483 -0.0420233, -0.865928 0.451063 -0.216127, + -0.866119 0.415242 -0.278231, -0.865125 0.49709 -0.0667878, -0.865848 0.17545 -0.468535, -0.865913 0.175407 -0.468431, + -0.86575 0.24888 -0.434207, -0.866466 0.341203 -0.36444, -0.869302 0.267602 -0.415576, -0.865748 0.0975539 -0.490881, + -0.869242 0.396429 -0.295401, -0.865914 -0.0181469 -0.499863, -0.869873 0.0713451 -0.488089, -0.877439 0.436577 -0.198748, + -0.877109 0.328182 -0.350679, -0.865868 0.34223 -0.364899, -0.878108 0.167271 -0.448272, -0.867202 -0.0182293 -0.497622, + -0.866172 -0.206719 -0.454987, -0.866338 -0.206698 -0.454681, -0.865994 -0.130534 -0.482717, -0.869812 -0.105384 -0.481998, + -0.878337 -0.197845 -0.435181, -0.865919 -0.278497 -0.415479, -0.866256 -0.493163 -0.079944, -0.866135 -0.473679 -0.159494, + -0.868885 -0.488637 -0.0792072, -0.866016 -0.464801 -0.184327, -0.865982 -0.4336 -0.249131, -0.86955 -0.415281 -0.267253, + -0.866368 -0.365625 -0.340183, -0.869829 -0.295391 -0.395149, -0.865664 -0.500398 -0.0150691, -0.878306 -0.349958 -0.325741, + -0.866777 -0.365222 -0.339575, -0.877634 -0.448898 -0.168077, -0.864953 -0.500871 -0.0313739, -0.868819 -0.481971 0.113395, + -0.865623 -0.462453 0.191924, -0.865863 -0.486938 0.114772, -0.865864 -0.498494 0.042235, -0.865964 -0.451031 0.216049, + -0.866185 -0.414591 0.278996, -0.865214 -0.496939 0.0667553, -0.86586 -0.175444 0.468514, -0.865853 -0.175399 0.468545, + -0.865774 -0.248856 0.434173, -0.86547 -0.341072 0.366923, -0.869241 -0.266487 0.41642, -0.865733 -0.0975373 0.49091, + -0.869433 -0.39568 0.295844, -0.865915 0.0181394 0.499862, -0.869252 -0.0718922 0.489114, -0.877716 -0.435966 0.198867, + -0.878243 -0.325675 0.350179, -0.865928 -0.340659 0.366224, -0.877806 -0.168043 0.448574, -0.865863 0.0183299 0.499945, + -0.866198 0.206725 0.454935, -0.866338 0.206697 0.454681, -0.866015 0.130483 0.482693, -0.869188 0.106001 0.482987, + -0.877712 0.198436 0.436171, -0.86599 0.278527 0.415312, -0.866258 0.493091 0.0803695, -0.866011 0.47404 0.159097, + -0.868923 0.488502 0.0796129, -0.866203 0.46464 0.183855, -0.866753 0.432345 0.248629, -0.869494 0.415792 0.266639, + -0.865751 0.365789 0.341576, -0.869235 0.294757 0.396924, -0.87797 0.3501 0.326494, -0.865791 0.366117 0.341123, + -0.86509 0.500577 0.0322895, -0.865985 0.483471 0.127773, -0.865685 0.48395 0.127992, -0.863657 0.500955 0.0560395, + -0.865437 0.500646 0.0192777, 1 0 0, 1 3.09316e-007 1.90507e-007, 1 9.76209e-010 3.10271e-008, 1 7.32157e-010 2.32703e-008, + 1 4.88105e-010 1.55135e-008, 1 6.70422e-007 3.24418e-007, 1 3.61106e-007 1.33911e-007, 1 3.94587e-007 8.91483e-007, + 1 1.31366e-006 2.31566e-006, 1 7.8754e-007 1.12702e-006, 1 2.6565e-006 1.94888e-007, 1 1.37983e-006 -3.03407e-008, + 1 1.27667e-006 2.25228e-007, 1 3.32368e-007 -1.5041e-007, 1 7.08445e-007 -2.38268e-007, 1 6.69888e-007 3.29852e-007, + 1 3.594e-007 1.3787e-007, 1 3.10488e-007 1.91982e-007, 1 3.76078e-007 -8.78585e-008, 1 2.06215e-007 -3.26921e-007, + 1 3.32683e-007 -6.67911e-007, 1 9.71229e-007 -1.38005e-007, 1 1.26468e-007 -3.4099e-007, 1 2.72413e-006 3.41016e-008, + 1 1.07187e-006 1.63581e-007, -4.95024e-007 0.998264 -0.0588929, -6.19987e-007 0.999539 0.0303622, + -2.48267e-007 0.999997 -0.00227795, -0.0511662 0.992964 -0.106791, -1.25584e-006 0.843457 -0.537197, + -6.2665e-007 0.843457 -0.537197, -4.22311e-007 0.875262 -0.483649, 0.027365 0.893506 -0.448216, -0.0384632 0.952102 -0.303352, + -0.0306895 0.98333 -0.17922, -4.26543e-007 0.951804 -0.306707, 0.0100448 0.858582 -0.512578, 0.054888 0.928635 -0.366913, + -7.32402e-007 0.983797 -0.179284, -4.9347e-007 0.994279 -0.106815, -1.26751e-006 0.851298 -0.524682, + -0.0206216 0.860527 -0.508987, 0.0266393 0.927547 -0.372756, 0.0333328 0.898683 -0.43733, 0.0224358 0.989479 -0.142925, + -5.3297e-007 0.898572 -0.438825, -0.0412972 0.882351 -0.468777, 0 0.927878 -0.372884, -4.67414e-007 0.941785 -0.336216, + -0.000278602 0.990587 -0.136885, -1.42138e-006 0.954636 0.297777, -9.55193e-007 0.962302 0.271984, + 0.00299987 0.999644 0.0265203, -0.0226415 0.948185 0.31691, 0.027656 0.891145 0.452875, 0.0345971 0.919406 0.391786, + -0.00445415 0.893015 0.450006, -5.50184e-007 0.92099 0.389585, -0.0346357 0.990984 0.129427, -0.0453369 0.932341 0.358727, + 0 0.891474 0.453072, -4.36578e-007 0.879655 0.475613, 0 0.879655 0.475613, -9.92539e-007 0.999944 -0.0105451, + -9.91883e-007 0.999265 0.0383331, -1.48324e-006 0.996189 0.0872263, 0.025707 0.991992 0.123654, -0.0391865 0.961379 0.272423, + -0.0312686 0.918536 0.394099, -5.7581e-007 0.963124 0.269059, 0.0514446 0.997964 0.0377068, 0.0515675 0.976893 0.207413, + 0 0.918953 0.394367, -4.96537e-007 0.997708 -0.0676699, -1.23314e-006 0.994954 -0.100328, 0 -0.991756 -0.128141, + 0 -0.999906 -0.0137275, 0 -0.998056 -0.0623205, 0 -0.947761 -0.31898, 0 -0.986954 -0.161003, 0 -0.752606 -0.658471, + 0 -0.868184 -0.496243, 0 -0.850955 -0.525238, 0 -0.583378 -0.812201, 0 -0.73075 -0.682646, 0 -0.937095 -0.349074, + 0 -0.981063 -0.193687, 0 -0.832759 -0.553636, 0 -0.5994 -0.80045, 0 -0.708117 -0.706095, 0 -0.925474 -0.378812, + 0 -0.425488 -0.904964, 0 -0.259262 -0.965807, 0 -0.412677 -0.910877, 0 -0.06953 -0.99758, 0 -0.227763 -0.973717, + 0 0.156663 -0.987652, 0 0.319 -0.947755, 0 0.123368 -0.992361, 0 0.350604 -0.936524, 0 0.498782 -0.866727, + 0 -0.0379349 -0.99928, -6.76624e-007 0.657018 -0.753875, -1.5082e-007 0.52622 -0.850348, 0 -0.382481 -0.923963, + -1.18132e-006 0.793406 -0.608693, -5.26111e-007 0.682047 -0.731309, -6.19301e-007 0.812855 -0.582467, + -1.33451e-006 0.896294 -0.443461, -7.30205e-007 0.973303 -0.229523, -1.43715e-006 0.965232 -0.261393, + -6.87621e-007 0.910209 -0.41415, 0 -0.556172 -0.831068, 0 -0.00630174 -0.99998, 0 0.189781 -0.981826, 0 -0.196024 -0.980599, + 0 0.381813 -0.92424, 0 0.553121 -0.833101, 0 0.7063 -0.707912, 0 0.923165 -0.384403, -4.91908e-007 0.991137 -0.132843, + 0 0.980322 -0.197404, 0 0.831437 -0.555619, 0 -0.996494 0.0836661, 0 0.991729 0.128352, -2.47663e-007 0.998018 0.0629352, + 0 0.947393 0.320073, -3.69354e-007 0.986953 0.161011, -1.12286e-006 0.754144 0.656709, -8.4299e-007 0.866627 0.498956, + -7.3155e-007 0.849724 0.527227, -6.85763e-007 0.586357 0.810053, -5.29891e-007 0.733148 0.680069, + -5.76628e-007 0.93638 0.350987, -7.30395e-007 0.981101 0.193495, 0 0.831899 0.554927, -3.49141e-007 0.602878 0.797834, + 0 0.711429 0.702758, -4.64484e-007 0.92436 0.381522, -1.06963e-007 0.425571 0.904925, 0 0.259133 0.965842, + 0 0.412728 0.910854, 0 0.0664034 0.997793, 0 0.227666 0.973739, 0 -0.161324 0.986902, 0 -0.318914 0.947784, + 0 -0.129625 0.991563, 0 -0.350476 0.936572, 0 -0.498624 0.866818, 0 0.0332173 0.999448, 0 -0.655574 0.755131, + 0 -0.526104 0.85042, 0 0.382453 0.923975, 0 -0.790945 0.611888, 0 -0.679934 0.733274, 0 -0.811015 0.585026, + 0 -0.896136 0.44378, 0 -0.973374 0.229224, 0 -0.965286 0.261196, 0 -0.910098 0.414392, 0 0.558282 0.829651, 0 -5.61754e-006 1, + 0 -0.192857 0.981227, 0 0.195959 0.980612, 0 -0.381644 0.924309, 0 -0.553046 0.833151, 0 -0.703566 0.71063, + 0 -0.923097 0.384566, 0 -0.991218 0.132235, 0 -0.980403 0.197003, 0 -0.830173 0.557506, 0.00744346 0.999349 -0.0353157, + -3.91474e-005 0.999382 -0.0351608, -0.00277823 0.999388 -0.0348803, 0.00191263 0.999384 -0.0350423, + -0.999611 0.0272893 -0.00567945, -0.967059 0.227809 -0.113577, -0.89049 0.250713 -0.379698, -0.999553 0.0292979 -0.00603344, + -0.999656 0.0251421 -0.00746676, -0.986808 0.134357 -0.0903245, -0.999235 0.0128065 -0.0369626, + -0.999581 0.0283505 -0.00593158, -0.998958 0.00804584 -0.0449185, 0.999861 -0.000148569 -0.0166983, + 0.998261 0.0158257 0.0567832, 0.964733 0.232515 -0.123398, 0.993268 0.0474619 0.105674, 0.977463 0.204157 0.053725, + 0.97502 0.108804 0.193641, 0.974331 0.119367 0.190867, 0.995496 0.0619123 0.0718004, 0.943177 0.162674 0.289749, + 0.943204 0.163088 0.289428, 0.886972 0.215653 0.40838, 0.901734 0.204007 0.381126, 0.821657 0.264965 0.504651, + 0.752302 0.301603 0.585728, 0.735982 0.320311 0.596432, 0.838798 0.253698 0.481722, 0.630515 0.355071 0.690199, + 0.659854 0.344424 0.667806, 0.525497 0.372057 0.765132, 0.535575 0.381914 0.753194, 0.975073 0.116008 0.189145, + 0.998492 0.00337568 -0.0547928, 0.896424 0.211594 0.389426, 0.943161 0.16284 0.289708, 0.767352 0.294167 0.569769, + 0.649284 0.341642 0.679494, 0.833366 0.267238 0.483823, 0.503185 0.391403 0.77046, 0.385464 0.41186 0.825705, + 0.19301 0.439937 0.877042, 0.154674 0.425957 0.891424, -0.102968 0.439718 0.892214, -0.0810786 0.429568 0.899387, + 0.233514 0.436735 0.868754, 0.385146 0.415915 0.823819, -0.410301 0.408155 0.815514, -0.322695 0.41003 0.853079, + -0.0294235 0.455775 0.889609, -0.599363 0.360834 0.714537, -0.716348 0.311694 0.624254, -0.553658 0.365156 0.748414, + -0.705896 0.326515 0.628569, -0.581882 0.377662 0.720268, -0.886389 0.218028 0.408386, -0.820208 0.261332 0.508885, + -0.876547 0.225921 0.425001, -0.80111 0.274689 0.53176, -0.660842 0.401457 0.634129, -0.904512 0.204164 0.374399, + -0.322154 0.433243 0.841735, 0.385265 0.400496 0.831369, -0.733135 0.316524 0.601935, -0.866257 0.233498 0.441676, + -0.80575 0.279469 0.522172, -0.807465 0.268143 0.525453, -0.988232 -0.0391384 -0.147868, -0.984088 -0.0494593 -0.170658, + -0.952139 -0.104568 -0.287223, -0.955054 -0.0964284 -0.280309, -0.991674 -0.0269354 -0.125927, -0.898343 -0.163065 -0.407909, + -0.913941 -0.140812 -0.380637, -0.961983 -0.0914892 -0.257331, -0.836831 -0.210841 -0.505233, -0.836862 -0.208766 -0.506042, + -0.630358 -0.299679 -0.71613, -0.733587 -0.258137 -0.628662, -0.656203 -0.292247 -0.695693, -0.760238 -0.25461 -0.597672, + -0.514671 -0.34241 -0.786046, -0.405536 -0.366869 -0.837226, -0.384102 -0.38717 -0.838192, -0.53338 -0.329329 -0.779133, + -0.259427 -0.406328 -0.876125, -0.261394 -0.393791 -0.88125, -0.115966 -0.401991 -0.90827, -0.904375 -0.158829 -0.396079, + -0.750884 -0.257158 -0.608312, -0.836365 -0.200507 -0.510187, -0.553523 -0.323334 -0.767507, -0.26216 -0.381331 -0.886487, + -0.426722 -0.354253 -0.832114, -0.649331 -0.292023 -0.702205, -0.0683236 -0.395696 -0.915837, 0.353872 -0.376323 -0.856245, + 0.385672 -0.370424 -0.845011, 0.139243 -0.392452 -0.909172, 0.52773 -0.336992 -0.779704, 0.621688 -0.309514 -0.719518, + 0.518443 -0.355202 -0.777849, 0.101129 -0.394466 -0.913329, 0.163606 -0.3957 -0.90369, 0.494145 -0.347279 -0.797006, + 0.321525 -0.389325 -0.863161, 0.657796 -0.292031 -0.694278, 0.74374 -0.259472 -0.616056, 0.825302 -0.215578 -0.521922, + 0.721783 -0.275068 -0.635111, 0.916535 -0.146495 -0.37216, 0.90075 -0.160129 -0.403742, 0.815547 -0.220267 -0.535131, + 0.735698 -0.2606 -0.625169, 0.988336 -0.0378024 -0.147522, 0.958702 -0.0901878 -0.269736, 0.98424 -0.0485222 -0.17005, + 0.953537 -0.103106 -0.283084, 0.62125 -0.302202 -0.722995, -0.083213 -0.395545 -0.914669, 0.840977 -0.20839 -0.49933, + 0.948065 -0.110536 -0.298251, 0.979561 -0.0619756 -0.191361, 0.90545 -0.148867 -0.39749, -0.909241 0.371299 -0.188198, + -0.917784 0.379768 -0.115966, -0.911164 0.377207 -0.165815, -0.899048 0.366843 -0.239037, -0.869001 0.348719 -0.351045, + -0.898013 0.355264 -0.25954, -0.871984 0.356679 -0.335296, -0.830631 0.347174 -0.435341, -0.817079 0.354247 -0.454852, + -0.895725 0.359517 -0.261579, -0.938973 0.343991 0, -0.714459 0.343058 -0.609803, -0.768024 0.342269 -0.541287, + -0.706845 0.34723 -0.61628, -0.605201 0.340886 -0.719394, 0 0.121798 -0.992555, -0.911766 0.366576 -0.185215, + -0.925083 0.361967 -0.114895, -0.923867 0.37777 -0.0613166, -0.923134 0.377049 -0.0752202, -0.91218 0.364641 -0.186987, + -0.927205 0.363273 -0.0912307, -0.885219 0.456948 -0.0870995, 0.0605221 0.151249 -0.986641, -0.327123 0.289096 -0.899674, + -0.287057 0.336147 -0.896997, -0.413516 0.338897 -0.845076, -0.351265 0.335665 -0.874038, -0.478166 0.338063 -0.810599, + -0.150003 0.333821 -0.930625, -0.208467 0.334192 -0.919161, -0.533513 0.338213 -0.775226, -0.591904 0.341655 -0.730014, + -0.0299144 0.333401 -0.94231, -0.0502173 0.333376 -0.941456, 0 0.333228 -0.942846, 0.00122985 0.333158 -0.94287, + 0.0422442 0.332262 -0.942241, 0.131735 0.333755 -0.93341, 0.142732 0.335358 -0.931216, 0.304426 0.33482 -0.891751, + 0.395218 0.336771 -0.854627, 0.262283 0.334956 -0.904993, 0.374638 0.343998 -0.860995, 0.471217 0.278644 -0.836846, + -0.111353 0.333955 -0.935989, 0.682456 0.348221 -0.642647, 0.713001 0.346883 -0.609345, 0.607086 0.341997 -0.717276, + 0.779345 0.353904 -0.517082, 0.745565 0.346064 -0.569537, 0.530889 0.335537 -0.778185, 0.569348 0.342176 -0.747502, + -0.104429 0.104381 -0.98904, -0.224301 0.224301 -0.948355, -0.224348 0.224243 -0.948358, 0.849083 0.360181 -0.386429, + 0.863404 0.348681 -0.364629, 0.826997 0.349381 -0.440465, 0.897395 0.363318 -0.250363, 0.912468 0.360667 -0.193189, + 0.890419 0.347428 -0.29402, 0.918068 0.368021 -0.147347, 0.922425 0.370359 -0.109389, -0.224395 0.224186 -0.948361, + 0.933781 0.332048 -0.133407, 0.981644 0.136436 -0.133269, -0.913603 0.370112 -0.168363, -0.863175 0.360818 -0.353185, + -0.798068 0.354622 -0.487165, -0.898625 0.369646 -0.236295, -0.913772 0.370344 -0.16693, -0.695886 0.348745 -0.627789, + -0.573964 0.343622 -0.743296, -0.3139 0.336764 -0.887726, -0.164555 0.33555 -0.927539, -0.449679 0.339018 -0.826351, + -0.00054184 0.334504 -0.942394, 0.176655 0.33451 -0.925687, 0.485196 0.339965 -0.805611, 0.34051 0.336752 -0.877867, + 0.614751 0.343704 -0.709894, 0.727153 0.348537 -0.591414, 0.814575 0.354803 -0.458892, 0.920577 0.374317 -0.111464, + 0.922277 0.381396 -0.0627887, 0.875721 0.362306 -0.319134, 0.90304 0.367531 -0.222352, 0.913776 0.406194 0.00436339, + 0.867204 0.484168 0.116358, 0.887965 0.451954 0.085175, 0.836672 0.524459 0.157867, 0.909717 0.414318 0.0274747, + 0.694947 0.676713 0.243122, 0.751259 0.622223 0.22011, 0.618207 0.7387 0.268595, 0.356599 0.881677 0.309002, + 0.451896 0.842868 0.29217, 0.286916 0.910504 0.29776, 0.176664 0.935817 0.305019, 0.201315 0.931536 0.30284, + 0.547625 0.786123 0.286561, 0.804812 0.564273 0.18405, 0.918946 0.393711 -0.0230267, 0.84395 0.515414 0.14865, + 0.670156 0.692219 0.267815, 0.887985 0.453384 0.0769759, 0.183932 0.932592 0.31055, 0.0744213 0.94845 0.308066, + 0.0667768 0.94929 0.307229, 0.319948 0.944242 0.0777196, -0.0204197 0.950769 0.309228, -0.143804 0.941642 0.304352, + -0.261437 0.917609 0.299408, -0.152278 0.939139 0.307943, -0.369776 0.882005 0.292117, -0.475413 0.83416 0.279571, + -0.356309 0.882919 0.305775, -0.591304 0.7628 0.261719, -0.47228 0.828287 0.301483, -0.26973 0.912748 0.306816, + -0.701096 0.673426 0.23444, -0.808464 0.55789 0.187471, -0.702033 0.667569 0.247995, -0.835745 0.518641 0.180394, + -0.832022 0.526284 0.175398, -0.490009 0.792766 0.36251, -0.0434298 0.951002 0.306119, -0.0659647 0.95017 0.304672, + -0.217033 0.926428 0.307618, -0.356672 0.87904 0.316346, -0.825356 0.537381 0.173229, -0.818083 0.546304 0.1797, + -0.770507 0.600372 0.21418, -0.591411 0.745499 0.307352, -0.230804 0.969444 0.0831103, 0.0464974 0.994939 0.0890736, + 0.847833 0.509506 0.146909, 0.800172 0.563994 0.20405, 0.336288 0.934443 0.117164, 0.774823 0.624396 0.098894, + 0.28314 0.902329 0.325015, 0.191307 0.97907 0.0694543, 0.0412536 0.992858 0.111942, -4.25758e-005 0.994309 0.106532, + -0.035628 0.994381 0.0996861, -0.042351 0.994178 0.0990756, -0.781503 0.583664 0.220429, -0.667907 0.726745 0.160443, + -0.36699 0.925063 0.0978645, -0.180475 0.816795 0.547973, -0.154607 0.81147 0.563572, -0.832821 0.52595 0.172585, + -0.850721 0.504618 0.147086, -0.914413 0.404762 -0.00398524, -0.900497 0.431854 0.0510645, -0.867841 0.480566 0.126128, + -0.182998 0.961707 0.204037, -0.700699 0.661791 0.266558, -0.820736 0.542287 0.179773, 0.0852075 0.954963 -0.284227, + 0.0496424 0.959065 -0.2788, 0.0285227 0.956848 -0.289186, -0.0282533 0.955631 -0.293208, 0.0244376 0.956981 -0.289119, + 0.140535 0.967741 -0.209111, 0.0291532 0.958222 -0.284536, 0.0748285 0.960233 -0.268985, 0.0070982 0.961802 -0.273656, + 0.0408047 0.961713 -0.271003, 0.130418 0.949844 -0.284233, 0.0744646 0.960526 -0.268039, -0.0794998 0.892933 -0.443114, + 0.0242144 0.974092 -0.224852, 0.045863 0.97387 -0.222426, -0.405219 0.0555826 -0.912528, -0.230653 -0.971251 -0.0589119, + 0.0405644 0.991772 -0.121418, 0.0269014 0.988029 -0.151905, 0.028329 0.980373 -0.195104, 0.0216885 -0.997822 0.0622974, + 0.207977 -0.807249 -0.552353, 0.16952 -0.903929 -0.392652, -0.0618806 0.977588 -0.20123, 0.0735681 0.89388 -0.442229, + 0.0200023 0.943448 -0.330917, 0.0819189 0.884127 -0.460009, 0.124903 -0.967768 -0.218686, -0.0761251 0.98067 -0.180254, + 0.141868 0.803573 -0.578052, -0.0140612 0.961715 -0.273691, -0.243115 0.954241 -0.174124, -0.292567 0.941407 -0.167801, + -0.172997 0.958996 -0.224495, -0.00499743 0.956712 -0.290992, -0.020272 0.958169 -0.285483, 0.00660818 0.955825 -0.293863, + 0.0102714 0.955002 -0.296421, 0.0729984 0.950842 -0.300951, 0.128621 0.944478 -0.302354, -0.127388 0.946026 -0.298004, + -0.0160957 0.95571 -0.293868, -0.0580457 0.956463 -0.286025, 0.00757146 0.955399 -0.295222, 0.00355505 0.956021 -0.293276, + -0.00761003 0.957219 -0.289264, 0.0609682 0.947169 -0.314888, 0.205126 0.912104 -0.354951, 0.126106 0.93236 -0.338824, + -0.0693196 0.950259 -0.30365, -0.197294 0.927061 -0.318799, -0.208896 0.924866 -0.317782, -0.00475147 0.955502 -0.294946, + -0.146046 0.930556 -0.335763, -0.156347 0.937432 -0.31109, -0.0829906 0.876055 -0.475016, -0.0890872 -0.940333 -0.328385, + -0.164433 -0.976699 -0.137916, -0.0747929 0.883724 -0.461994, -0.0178997 0.937149 -0.348471, -0.0290971 0.896647 -0.44179, + -0.0768402 -0.811064 -0.579888, -0.282466 -0.949182 -0.138802, -0.257821 -0.949019 -0.181361, -0.232553 -0.946559 -0.223482, + -0.134599 0.8276 -0.544941, -0.117224 0.862768 -0.491824, 0.485741 0.214977 -0.847255, -0.0171735 0.966657 -0.255498, + -0.01206 0.96458 -0.263516, -0.0221474 0.970425 -0.240385, 0.0719291 0.906683 -0.415635, 0.0753708 -0.997118 0.00860431, + 0.0731043 -0.967134 -0.24353, 0.023852 0.904638 -0.425513, 0.0661244 -0.874793 -0.479963, -0.241254 0.934011 -0.263475, + -0.206798 0.935609 -0.286131, -0.242932 0.941986 -0.231616, -0.200792 0.950992 -0.235154, -0.193868 0.973276 -0.123078, + -0.187276 0.964488 -0.186252, -0.205841 0.942531 -0.263182, -0.123608 0.949013 -0.289991, -0.139113 0.953178 -0.268513, + -0.210689 0.965979 -0.149984, -0.216648 0.962665 -0.162293, -0.187858 0.973073 -0.133557, -0.152687 0.970996 -0.183991, + -0.121329 0.959945 -0.252557, -0.133944 0.981966 -0.133421, -0.198718 0.971997 -0.125433, -0.0732603 0.992193 -0.100925, + -0.0884772 0.986528 -0.137599, -0.0720236 0.992158 -0.102155, -0.107413 0.988543 -0.106044, -0.0444461 0.990052 -0.133497, + -0.0321038 0.994312 -0.101551, -0.00119201 0.993147 -0.116866, -0.0781814 0.945731 -0.315405, -0.10717 0.965162 -0.2387, + -0.0844285 0.969315 -0.230867, -0.0574893 0.964478 -0.257831, -0.0809077 0.975309 -0.205491, -0.0646237 0.962317 -0.264138, + -3.80394e-007 0.9562 -0.292714, -0.0483732 0.965386 -0.256301, -0.04842 0.968114 -0.245788, -0.0547739 0.978411 -0.19928, + -0.0303028 0.981498 -0.189057, -0.0353258 0.969878 -0.241015, 0.0332403 0.971521 -0.234612, 0.00221831 0.980557 -0.196224, + 0.014281 -0.960348 0.278438, 0.0144093 -0.960312 0.278554, 0.096792 -0.971948 0.214354, 0.141024 -0.971466 0.1907, + 0.192778 -0.96982 0.149283, 0.0364675 -0.961611 0.271981, 0.0938214 -0.968029 0.232631, 0.0372728 -0.961304 0.272955, + -0.0487152 -0.964652 0.258986, -0.0762976 -0.96805 0.238867, -0.0761074 -0.965636 0.248504, 0.00661906 -0.954447 0.298306, + -0.0349829 -0.963847 0.264151, 0.0119009 -0.953719 0.300464, 0.0239309 -0.95153 0.306625, 0.0603323 -0.942654 0.328275, + 0.00538209 -0.955226 0.29583, 0.00445074 -0.956159 0.292815, -0.040322 -0.962644 0.267752, 0.0230708 -0.949429 0.313133, + 0.0409152 -0.943818 0.327924, 0.0862797 -0.926458 0.366375, -0.0141852 -0.958644 0.284255, 0.777442 -0.295986 0.554956, + -0.00859771 -0.958296 0.285648, 0.60201 -0.43593 0.668991, -0.0125888 -0.959015 0.283075, -0.0876258 -0.934444 0.34516, + -0.082356 -0.936289 0.341438, -0.178279 -0.901524 0.394298, 0.0146543 -0.958692 0.284069, 0.0087911 -0.958241 0.285827, + 0.0135277 -0.960004 0.279658, 0.00405396 -0.956416 0.291979, 0.0385936 0.990568 -0.131473, 0.0845495 0.987204 -0.135199, + 0.123536 0.98177 -0.144456, 0.0333248 0.982163 -0.185055, 0.172718 0.976626 -0.127947, 0.211919 0.965857 -0.14903, + 0.202421 0.968444 -0.145401, 0.162864 0.971302 -0.173343, 0.186172 0.964359 -0.188022, 0.196081 0.972321 -0.12706, + 0.0771991 0.973816 -0.213829, 0.238668 0.948676 -0.207487, 0.196259 0.951883 -0.235373, 0.244577 0.939334 -0.240488, + 0.204781 0.943254 -0.261412, 0.0574183 0.977881 -0.201129, -0.0201954 0.972498 -0.232033, 0.09095 0.969095 -0.22931, + 0.0381013 0.969122 -0.24362, 0.0476689 0.967147 -0.249708, 0.0483737 0.965386 -0.256302, 0.0631605 0.964116 -0.257858, + 0.117001 0.963673 -0.240094, 0.123378 0.959127 -0.254664, 0.206919 0.935612 -0.286033, 0.133612 0.953787 -0.269144, + 0.0677727 0.961785 -0.265285, 0.0745904 0.942254 -0.326486, 0.123549 0.948357 -0.292155, 0.241409 0.921549 -0.304086, + 0.242889 0.910191 -0.335497, 0.200873 0.919663 -0.337447, -0.337446 0.337288 -0.878844, 0.205946 0.928612 -0.308651, + 0.139409 0.940616 -0.309525, 0.184121 0.911952 -0.366665, 0.220568 0.891048 -0.396716, 0.214604 0.888915 -0.404691, + 0.161123 0.905838 -0.391787, 0.120754 0.937013 -0.327759, 0.0705254 0.898386 -0.433508, -0.0521862 0.871289 -0.487988, + 0.185842 0.881249 -0.434583, 0.848048 0.514195 -0.128135, 0.0865575 0.894606 -0.438393, 0.120325 0.879342 -0.460738, + -0.273783 0.821094 -0.500847, 0.0719213 0.879672 -0.470111, 0.045005 0.895507 -0.442766, 0.00827334 0.880999 -0.473046, + 0.00200815 0.888585 -0.458707, 0 0.880985 -0.473144, 0.106995 0.93346 -0.342351, 0.0782837 0.960265 -0.267886, + 0.0883736 0.93116 -0.35374, 0.063339 0.945152 -0.320431, 0.0586959 0.944052 -0.324532, 0.0484939 0.943902 -0.326645, + 0.0470958 0.939931 -0.3381, 0.0752191 0.924146 -0.374562, 0.053638 0.922534 -0.382169, 0.0313034 0.919404 -0.392066, + 0.0358311 0.938868 -0.342408, -0.0311288 0.936742 -0.348633, -0.00243933 0.922817 -0.385231, -0.00881772 0.880997 -0.47304, + -0.0400637 0.894936 -0.444392, -0.0848152 0.894093 -0.439778, -0.0341702 0.917685 -0.395837, 0.0227282 0.870066 -0.492412, + -0.0589559 0.895499 -0.441142, 0.316101 0.789958 -0.525401, -0.172692 0.881402 -0.439668, -0.157129 0.878729 -0.450716, + -0.195885 0.90565 -0.376068, -0.318853 0.924704 -0.207978, -0.209463 0.886042 -0.413588, -0.405561 0.914068 0, + -0.154765 0.904101 -0.398308, 0 0.698978 -0.715144, -0.0769964 0.92682 -0.367527, -0.196028 0.920527 -0.337939, + -0.205003 0.928307 -0.310194, -0.833889 0.5458 -0.082049, -0.0564921 0.922891 -0.380895, 0.0190305 0.93605 -0.351351, + -0.0919795 0.93194 -0.350753, -0.0383315 0.939833 -0.339476, -0.0464133 0.941353 -0.334217, -0.0484907 0.943903 -0.326643, + -0.0638641 0.943588 -0.324905, -0.116898 0.933022 -0.340302, -0.122575 0.937433 -0.325876, -0.133702 0.941452 -0.309504, + -0.0671792 0.945599 -0.318324, -0.0747553 0.96337 -0.257545, -0.634912 0.172759 -0.753021, -0.714166 0.17244 -0.678404, + -0.579274 0.175277 -0.796065, -0.527835 0.317851 -0.78763, -0.642528 0.173383 -0.746388, -0.627221 0.16549 -0.761056, + -0.805402 0.273955 -0.52562, -0.925844 0.206731 -0.316345, -0.862337 0.189836 -0.4694, -0.939692 0.331933 -0.0824577, + -0.944833 0.21249 -0.249276, -0.781719 0.166903 -0.600882, -0.744792 0.152436 -0.649653, -0.745528 0.148574 -0.649703, + -0.9174 0.191683 -0.348761, -0.970118 0.239739 -0.0373633, -0.967235 0.218341 -0.129549, -0.946956 0.272298 0.170668, + -0.913876 0.282423 0.291663, -0.964739 0.249703 0.0832272, -0.749905 0.351241 0.5606, -0.595928 0.382055 0.706331, + -0.810046 0.323591 0.488994, -0.608163 0.365284 0.704773, -0.873839 0.312266 0.372687, -0.517088 0.397295 0.75814, + -0.568436 0.456545 0.684432, -0.483936 0.459159 0.744969, -0.432708 0.539999 0.721917, -0.960212 0.249137 0.126189, + -0.900021 0.28412 0.330512, -0.791814 0.328762 0.514729, -5.35616e-007 1 1.03743e-007, -4.2122e-007 1 9.99637e-008, + -5.71642e-007 1 8.24085e-008, -3.8191e-007 1 6.73198e-009, -6.12054e-007 1 -8.3143e-008, -6.09401e-007 1 -7.74892e-008, + -5.07291e-007 1 -8.88786e-008, -5.98833e-007 1 -4.60185e-008, -1.63839e-007 1 5.77074e-008, -5.40559e-007 1 -4.19252e-008, + -1.12714e-006 1 -7.37329e-009, -9.04881e-007 1 1.64739e-009, 0 1 0, -0.338559 0.613985 0.713022, -0.349774 0.612802 0.708612, + -0.430834 0.587576 0.684935, -0.485721 0.561745 0.669715, -0.630311 0.533049 0.564417, -0.656685 0.533924 0.532626, + -0.686412 0.535262 0.492273, -0.759771 0.494079 0.42265, -0.825123 0.483117 0.292865, -0.77607 0.51423 0.365079, + -0.868919 0.453002 0.199423, -0.891934 0.450665 0.0368081, -0.90052 0.43321 -0.0373128, -0.867981 0.472342 0.153302, + -0.876402 0.423447 -0.229372, -0.878961 0.41982 -0.226228, -0.781613 0.402261 -0.476725, -0.859145 0.414047 -0.300725, + -0.774646 0.407154 -0.48389, -0.610806 0.392773 -0.687492, -0.569487 0.391922 -0.722552, -0.490099 0.393523 -0.777781, + -0.480369 0.398884 -0.781113, -0.64695 0.395182 -0.65214, -0.632244 -0.774741 0.0066271, -0.570883 -0.82101 0.00584885, + -0.581401 -0.813476 -0.0151299, -0.995295 -0.0961272 0.0121577, -0.999786 0.0206729 8.91989e-005, + -0.999193 -0.0399789 -0.0039598, -0.999999 -0.00149111 0, -0.990757 -0.135601 -0.00367951, -0.975763 -0.218099 0.0178507, + -0.979832 -0.199822 0.000524516, -0.976465 -0.215557 -0.00717236, -0.981117 -0.193413 0, -0.982332 -0.187147 -0.000470726, + -0.963162 -0.267064 -0.0315442, -0.941386 -0.337191 0.00972176, -0.994624 -0.10355 7.0257e-005, + -0.580727 -0.813961 -0.0149769, -0.993282 -0.115716 0, -0.989972 -0.141025 0.0082416, -0.994662 -0.102528 0.011684, + -0.982226 -0.187373 0.0110958, -0.981763 -0.190104 0.00153377, -0.983976 -0.178243 0.00460134, + -0.980012 -0.198913 -0.00314753, -0.00252308 -0.999997 -0.00053953, 0.195327 -0.980545 0.0194815, + -0.0611324 -0.99722 0.0426168, 0.354823 -0.934933 -0.000635033, 0.440233 -0.897773 0.014114, -0.690668 -0.723144 0.00634292, + -0.679432 -0.733646 -0.0116394, -0.679915 -0.733195 -0.0118561, -0.184851 -0.980295 0.0696623, + -0.169057 -0.985606 -0.000436854, 0.69337 -0.720574 0.00323141, 0.785002 -0.619242 0.0176724, 0.628239 -0.777802 0.0184379, + 0.920718 -0.390224 0.00208295, 0.971509 -0.236119 0.0204578, 0.893937 -0.448115 0.00832578, 0.980239 -0.197817 -0.000578473, + 0.999782 -0.00541437 0.0201749, 0.823839 -0.566815 0.00324168, 0.535176 -0.844738 0.00210809, -0.969718 -0.244227 0, + -0.966989 -0.254756 -0.00556081, -0.966989 -0.254756 0.00556081, -0.949743 -0.312674 -0.0149523, + -0.925468 -0.378826 9.5101e-005, -0.297734 -0.954648 0.00145842, -0.857307 -0.51463 -0.0134379, -0.941416 -0.337247 0, + -0.950721 -0.309823 0.0117706, -0.964226 -0.264615 0.0157278, -0.408227 -0.912864 -0.00553938, + -0.364698 -0.931081 -0.00914638, -0.999284 -0.0375845 0.00429284, -0.999899 -0.00336722 0.0138333, + -0.505731 -0.862655 0.00792566, -0.978885 -0.20441 0, -0.978678 -0.205403 0.000145524, -0.928612 -0.370783 0.0141501, + -0.821609 -0.569991 0.00832241, -0.999999 -0.001482 0, -0.799559 -0.599975 -0.0271232, -0.753896 -0.65674 -0.0182555, + -0.976487 -0.215563 0.00241391, -0.392298 -0.919767 0.0114122, -0.182085 -0.983272 0.00456792, + 0.175461 -0.984486 -0.000145886, 0.0326948 -0.999465 0, 0.226943 -0.973908 0, 0.582536 -0.812805 0, 0.729869 -0.683587 0, + 0.935911 -0.352238 0, 1 -4.19248e-006 0, 0.986654 -0.162828 0, 0.84932 -0.527879 0, 0.413083 -0.910693 0, + 0.999462 0.0327849 0, -0.977672 0.209882 0.0103599, -0.97756 0.210407 0.0102558, -0.980141 0.196965 -0.0229956, + 0.931043 0.364408 0.0191481, 0.923862 0.382726 0, 0.84901 0.52775 0.025721, -0.976992 0.209736 -0.0387049, + -0.978073 0.206972 -0.0231468, -0.976894 0.210263 -0.0383169, 0.71666 0.696789 0.029724, 0.707086 0.707128 0, + 0.555377 0.831156 0.027146, 0.555589 0.831457 0, 0.382618 0.923564 0.0251707, -0.988671 0.150001 -0.00545109, + 0.831486 0.555546 0, -0.963768 0.266723 -0.00316567, 0.19504 0.980493 0.024367, 0.195102 0.980783 0, + 4.01454e-005 0.999726 0.0234051, -0.175703 0.984235 0.0202269, -3.48129e-007 1 0, -0.195102 0.980783 0, + -0.369479 0.928764 0.0297243, -0.395683 0.918387 0, -0.555386 0.831146 0.0272621, -0.989699 0.143153 -0.00200532, + 0.382719 0.923865 0, -0.827292 0.561729 0.00700373, -0.823175 0.567788 0, -0.867632 0.497207 0, -0.886372 0.461534 -0.0364814, + -0.873458 0.486828 0.00832457, -0.926164 0.37622 -0.0260693, -0.707086 0.707127 0, -0.692883 0.720781 0.019681, + -0.929308 0.369305 0, -0.933693 0.356671 -0.0316806, -0.928267 0.371908 0.00215507, -0.937074 0.342969 -0.0652984, + -0.918514 0.395376 -0.00320302, -0.571849 0.820359 0, 0.980775 0.195144 0, 0.980514 0.195064 0.0232743, + -0.947735 0.309715 -0.0766472, -0.943653 0.330938 0, -0.945158 0.326609 -0.0015885, -0.999555 0.0293753 -0.00515628, + -0.994875 0.0978243 -0.0255922, -0.958457 0.284684 -0.0177404, -0.958171 0.286195 0, -0.964392 0.264473 -0.00169366, + -0.955791 0.294038 0.00223501, -0.950933 0.309385 0.00279392, -0.945905 0.324442 0.000976653, -0.992936 0.118648 0, + 0.910825 0.412792 0, 0.812797 0.582547 0, 0.973833 0.227263 0, 0.528021 0.849231 0, 0.352188 0.935929 0, + -0.0328189 0.999461 0, -0.227177 0.973853 0, 0.162816 0.986656 0, 0.683503 0.729948 0, -0.382719 0.923865 0, + -0.555589 0.831457 0, -0.854729 0.518965 0.0106993, -0.729907 0.683546 0, -0.895289 0.445253 0.0143897, + -0.952945 0.302599 0.0181553, -0.995134 0.0976417 0.0132345, -0.99955 0.0298808 0.00278812, -0.933246 0.359217 0.00397515, + -0.923304 0.38407 0.000405883, -0.92637 0.376344 0.0143079, -0.97979 0.199188 0.0183032, -0.916146 0.400846 0, + -0.92122 0.389041 0, -0.928548 0.371213 0, -0.929926 0.367747 -0.000594636, -0.917056 0.398753 -0.00195208, + -0.922824 0.38522 -0.00143154, -0.920246 0.391334 -0.00206068, -0.927462 0.373916 -0.000412781, + -0.931969 0.362538 3.12968e-005, -0.9319 0.362716 0, 0.977526 0.194347 0.0816828, 0.915486 0.394282 0.0801639, + 0.995307 -0.0230782 0.0939736, 0.971875 0.179171 0.152832, 0.817747 0.570043 0.0796289, 0.913561 0.378151 0.149697, + 0.717785 0.690192 0.0917566, 0.580382 0.809719 0.0866704, 0.194389 0.977016 0.0874782, 0.394011 0.914492 0.0919752, + 0.019686 0.996804 0.0774187, -0.180673 0.980168 0.0814106, 0.814746 0.561038 0.146371, 0.988408 -0.00749864 0.151635, + 0.678656 0.718911 0.150308, 0.536008 0.829709 0.155813, 0.197518 0.967055 0.160597, -0.00128062 0.988186 0.153252, + 0.377224 0.911664 0.163003, -0.198996 0.966742 0.160655, -0.553434 0.828379 0.086599, -0.714554 0.694851 0.0812108, + -0.380843 0.919453 0.0977947, -0.537389 0.828806 0.155865, -0.83964 0.537295 0.0794886, -0.695135 0.702053 0.154627, + -0.912296 0.398976 0.0923784, -0.995261 0.0491721 0.0838852, -0.97061 0.226451 0.0814663, -0.954383 -0.209827 0.212429, + -0.946408 -0.286911 0.148303, -0.83013 0.538015 0.146373, -0.365534 0.916502 0.162508, -0.925442 0.348092 0.149629, + -0.975741 0.161099 0.148245, -0.988132 0.0250384 0.151554, -0.686158 -0.0679165 -0.724275, -0.96265 -0.0990452 0.251983, + -0.703797 -0.0696625 0.706977, -0.946236 -0.281767 0.158887, -0.962707 -0.21534 0.163778, -0.141606 -0.97563 0.167615, + -0.0289306 -0.994738 0.0982779, 0.173155 -0.974615 0.141929, 0.37667 -0.919224 0.114659, -0.134995 -0.984705 0.110151, + -0.00453241 -0.991969 0.1264, 0.214495 -0.966489 0.141036, 0.575518 -0.810311 0.110338, 0.412794 -0.899953 0.140304, + 0.627487 -0.765399 0.142915, 0.744418 -0.658758 0.108993, 0.885887 -0.454221 0.0942715, 0.963355 -0.247371 0.103704, + 0.772772 -0.617217 0.147876, 0.90066 -0.407887 0.149797, 0.97098 -0.186234 0.150048, -0.281851 0.942522 0.179479, + -0.347854 0.921437 0.173064, 0 0 1, -3.1498e-009 0.00967211 0.999953, 0.992862 0.0349297 0.114038, + 0.987403 0.0253187 0.156186, 0.981687 0.115655 0.151377, 0.963596 0.195959 0.181889, 0.949542 0.271353 0.157279, + -0.45053 0.874884 0.177764, -0.34873 0.921088 0.173161, 0.827976 0.530332 0.182219, 0.916642 0.271256 0.293576, + 0.893596 0.420174 0.157922, 0.758757 0.625342 0.182304, 0.716153 0.673834 0.18186, 0.682225 0.708523 0.180454, + 0.916438 0.356696 0.181411, 0.982855 -0.0227405 0.182973, 0.600577 0.779695 0.177152, 0.536745 0.825874 0.172733, + 0.48443 0.856982 0.175811, -0.956443 0.253053 0.145537, -0.960603 0.210665 0.181282, -0.975129 0.137748 0.173636, + -0.906902 0.379896 0.182228, -0.935598 0.329315 0.127307, -0.985158 0.0284582 0.169277, -0.983632 0.00184215 0.18018, + -0.978012 -0.127191 0.165271, -0.0712194 0.980638 0.18242, -0.00510734 0.984157 0.177226, 0.271325 0.945197 0.181617, + 0.208562 0.961873 0.176922, -0.97264 -0.167713 0.160763, -0.972626 -0.158622 0.169817, -0.973142 -0.168145 0.157234, + -0.975087 -0.168556 0.144199, -0.978107 -0.1028 0.18094, 0.155479 0.971143 0.180854, -0.874782 0.448933 0.182249, + -0.837585 0.515519 0.180809, -0.811512 0.55496 0.182943, -0.641056 0.746119 0.17987, -0.55144 0.814714 0.179317, + -0.549411 0.81603 0.179563, -0.723486 0.666492 0.179879, -0.747456 0.639198 0.18093, -0.973238 -0.145276 0.178052, + -0.801144 0.570585 0.180556, -0.210342 0.96135 0.177656, 0.375321 0.909265 0.179921, -0.160629 0.970362 0.180542, + 0.0650348 0.981026 0.182646, -0.978463 -0.104156 0.178218, -0.970033 -0.162053 0.18104, -0.957376 -0.222977 0.183607, + -0.942857 -0.26033 0.207965, 0.848366 -0.502014 0.168095, 0.746831 -0.644403 0.164281, 0.79339 -0.586384 0.163357, + 0.909307 -0.375181 0.179998, 0.931748 -0.316484 0.178, 0.983037 -0.0317483 0.18064, 0.982052 -0.0507303 0.18166, + 0.981085 -0.0629908 0.183043, 0.953216 -0.240365 0.183315, 0.971421 -0.149297 0.184533, 0.978086 -0.0913562 0.187086, + 0.672454 -0.71939 0.174023, 0.678701 -0.712668 0.177399, 0.363642 -0.895249 0.257476, 0.33679 -0.827018 0.450126, + 0.279455 -0.94304 0.180502, 0.263238 -0.949514 0.170672, 0.229398 -0.95749 0.1749, -0.0727411 -0.978727 0.19184, + -0.0160119 -0.98585 0.166863, 0.489866 -0.852389 0.182932, 0.422994 -0.888976 0.175496, 0.346063 -0.919727 0.18532, + 0.605754 -0.775248 0.179034, 0.384985 -0.908117 0.164653, -0.979734 0.173001 0.100955, -0.979011 0.13787 0.1501, + -0.989595 0.00455073 0.143812, -0.914602 0.00688642 0.404297, -0.970095 -0.180302 0.162503, -0.980007 -0.12087 0.158038, + -0.974427 -0.173188 0.143174, -0.967992 -0.211711 0.134795, -0.988525 -0.0819606 0.126889, 0.990286 0.0353619 0.134471, + 0.995 0.0383662 0.0922113, 0.982251 0.161839 0.0948239, 0.999344 0.020378 0.0299257, 0.991762 0.123599 0.0336524, + 0.966893 0.25369 0.027539, 0.949668 0.298209 0.0959275, 0.907859 0.410396 0.0858295, 0.874862 0.469957 0.117289, + 0.932705 0.359606 0.0272909, 0.960165 0.218436 0.174268, 0.99696 -0.00234626 0.0778862, 0.981609 -0.00202589 0.190892, + -6.29931e-009 0.0193433 0.999813, 0.979112 -4.52629e-005 0.203322, 0.975052 -0.000484895 0.221975, + -0.987276 0.00131461 0.159013, -0.930255 0.00370886 0.366894, -0.944977 0.00665656 0.327068, -0.973604 -0.000394566 0.228245, + -0.969215 0.000162804 0.246217, -0.969932 2.96878e-005 0.243375, -0.940998 -0.0111598 0.338228, + -0.904562 0.000546674 0.426342, 0.96987 -0.0016256 0.243618, 0.956621 -0.00520856 0.29129, 0.964059 -0.00342326 0.265668, + 0.932646 -0.00221942 0.360787, 0.883315 0.00177006 0.468777, 0.936154 -0.000105185 0.351589, 0.720731 0.00512959 0.693196, + 0.647979 0.006634 0.761629, 0.78233 0.00426366 0.622849, 0.861401 0.000243042 0.507926, 0.984433 4.2149e-007 0.175759, + 0.713477 -0.00200828 0.700675, 0.825053 -0.00122181 0.565054, 0.910757 3.39354e-007 0.412943, 0.575383 0.00736164 0.817851, + 0.489678 0.0149365 0.871775, -0.160139 0.00450528 0.987084, -0.168901 0.000914846 0.985633, -0.0543908 0.0010247 0.998519, + 0.564389 -0.00212244 0.825506, 0.999373 4.49243e-005 0.0354171, 0.411124 0.0188541 0.911384, 0.376222 -0.00257913 0.926526, + 0.358222 0.0172201 0.933478, 0.257525 -0.00204324 0.96627, 0.190703 0.00261944 0.981644, 0.178758 -0.000918429 0.983893, + 0.149676 -0.000613533 0.988735, 0.0673688 -0.00154394 0.997727, 0.190553 0.00262051 0.981673, -0.00288414 0.00493964 0.999984, + -0.00144536 -0.000567998 0.999999, -0.0847793 0.000887733 0.996399, -0.090487 -0.00168092 0.995896, + -0.410083 -0.00299943 0.912043, -0.436369 -0.0026186 0.899764, -0.313142 -0.00351107 0.9497, -0.83058 -0.0013531 0.556897, + -0.830009 0.000644078 0.557749, -0.73847 7.191e-005 0.674286, -0.9383 -0.00347312 0.345806, -0.974024 -0.000962155 0.226443, + -0.97026 -0.000602897 0.242063, -0.964057 0.00152043 0.265691, -0.966244 0.000459005 0.257629, -0.920838 0 0.389945, + -0.95962 0.000129554 0.281298, -0.934406 0 0.35621, -0.941023 -0.000125068 0.338342, -0.989405 -0.000368531 0.145183, + -0.994381 0.00115009 0.105857, -0.984022 0.00117688 0.178046, -0.998704 0.000924749 0.0508816, + -0.999993 -0.000131493 -0.00379893, -0.999756 0.00261408 0.0219272, -0.977694 0.000217797 0.210034, + -0.976008 -0.000628226 0.217732, -0.977761 -0.000712206 0.209721, -0.982801 -0.000376709 0.184668, -0.972597 0 0.232498, + -0.972777 0.000218654 0.231745, -0.968333 -0.000364207 0.24966, -0.488513 0.000760026 0.872556, + -0.56668 -0.000189303 0.823938, -0.578027 -0.000628577 0.816017, -0.648934 -0.00230487 0.760841, + -0.691188 -0.000590714 0.722675, -0.962785 -0.00035414 0.270267, -0.953594 -0.0219269 0.300297, -0.960874 -0.0215113 0.27615, + -0.964459 -0.0023709 0.264221, -0.964188 -0.00113819 0.265218, -0.969081 -0.000863461 0.246741, -0.970139 0 0.24255, + -0.967555 -0.000381968 0.252661, -0.962763 -0.000640255 0.270347, -0.963539 -0.000666262 0.267567, + -0.966465 -0.00131752 0.256796, -0.967946 0.012902 0.250828, -0.966144 0.0190495 0.257301, -0.971781 0.019575 0.235073, + -0.967305 -0.00138348 0.253611, 0.99946 4.77987e-007 -0.0328464, 0.999893 -0.00366228 -0.0141355, + -0.975946 0.000424682 0.218011, -0.976245 0.000238462 0.216671, -0.975537 0.000193553 0.219837, -0.974401 -0.0033219 0.224793, + -0.974228 -0.00171853 0.225561, -0.977254 0 0.212072, -0.9695 -0.00323092 0.245069, -0.976257 -0.000492724 0.216616, + -0.968121 0.00172741 0.250479, -0.96914 0.000863713 0.24651, -0.97476 -0.00162376 0.223249, -0.980374 -0.00837531 0.196971, + -0.977321 0.000498694 0.211762, -0.978504 0.000149496 0.206228, -0.999915 0 0.0130565, -0.999389 0 0.0349435, + -0.994213 -0.00236844 0.1074, -0.989674 -0.00587827 0.143218, -0.986842 0 0.161686, -0.998321 -0.00633412 0.0575716, + -0.97162 -0.00150541 0.236543, -0.970276 -0.00096336 0.241999, -0.97799 -0.00082108 0.208649, -0.979876 -0.000163298 0.199606, + -0.975343 0.000521124 0.220696, -0.976406 0.000232155 0.215941, -0.978137 -0.000186517 0.207964, + -0.977219 -0.000263939 0.212232, -0.999915 -7.73154e-007 0.0130566, -0.999939 -0.0109932 0.00105483, + -0.999998 -5.799e-007 0.00210485, -0.971088 -0.00631575 0.238639, -0.974837 -0.00260771 0.222904, + -0.978904 -6.56118e-007 0.204321, -0.965435 0.00572235 0.260583, -0.969399 0.0339186 0.243135, -0.968958 0.0409002 0.24382, + -0.962492 0.0617165 0.264198, -0.998755 -0.000178056 -0.0498751, -0.995282 0.00076497 -0.0970179, + -0.990344 0.00321252 -0.138596, -0.971552 -0.0161357 -0.236274, -0.99812 -0.000229607 -0.0612833, + -0.95627 0.000907094 -0.292483, -0.947269 0.000183683 -0.320438, -0.857958 -0.139506 -0.494416, + -0.837355 -0.00506098 -0.546637, -0.774722 -0.00510706 -0.632281, -0.922364 -0.00172974 -0.386319, + -0.912654 0.000904707 -0.408731, -0.729097 -0.00549782 -0.684389, -0.694607 -0.00218485 -0.719386, + -0.615191 -0.000643145 -0.788378, -0.957452 -0.0116787 -0.288356, -0.981074 0.00740004 -0.193494, + -0.974826 0.000725743 -0.222968, -0.947017 -0.0179216 -0.320682, -0.990995 0.000190867 -0.1339, -0.98638 0.0067322 -0.164345, + -0.967141 0.00156434 -0.254235, -0.968007 0 -0.250923, -0.966704 0.00259183 -0.255884, -0.812423 -3.88537e-007 -0.583069, + -0.691007 -0.00404778 -0.722837, -0.553686 -0.00621152 -0.832702, -0.550739 0.00610735 -0.834655, + -0.919795 -0.00581443 -0.392357, -0.977757 -0.000112273 -0.209742, -0.977851 0 -0.209303, -0.487417 -0.000525608 -0.873169, + 0.782973 -0.00180686 -0.622053, 0.673048 -0.00269045 -0.739594, 0.702608 -0.00384104 -0.711566, + -0.392923 0.00315767 -0.919566, -0.390178 0.00157876 -0.920738, 0.566296 0.00298469 -0.824196, 0.580339 -0.00128319 -0.814374, + 0.980481 -0.00427874 -0.196568, 0.992018 -0.00241655 -0.126076, 0.959523 -0.000758209 -0.281629, + 0.91228 -0.000318206 -0.409567, 0.915152 -0.00474813 -0.403081, 0.861821 -0.13117 -0.489958, 0.445874 0.00809443 -0.895059, + -0.147802 0.00524689 -0.989003, -0.282249 0.00760973 -0.959311, -0.213462 0.0136467 -0.976856, 0.0292598 0.0298816 -0.999125, + -0.0233733 0.0280021 -0.999335, -0.010043 -0.00729189 -0.999923, -0.204111 -0.00796632 -0.978915, + -0.384426 -0.00756845 -0.923125, 0.118167 0.0302033 -0.992534, 0.820971 -0.00422901 -0.570954, 0.202558 0.0258658 -0.978929, + 0.285408 0.0200646 -0.958196, 0.367601 0.0137486 -0.929882, 0.377417 -0.00779979 -0.926011, 0.199522 -0.00877587 -0.979854, + 0.560606 -0.00313045 -0.828077, -0.989078 0 -0.147395, -0.990829 -0.00682117 -0.134953, -0.987475 -0.00188872 -0.157762, + -0.981032 -0.0109306 -0.193539, -0.977827 0 -0.209415, -0.979517 -0.00037208 -0.201359, -0.978355 -0.000201515 -0.206935, + -0.997869 -0.0111115 -0.0643006, -0.974818 -0.00403431 -0.222966, -0.966704 -0.0025911 -0.255884, + -0.966049 -0.00801899 -0.258235, -0.954476 -0.00942367 -0.29814, -0.943683 0 -0.33085, 0.729797 3.49022e-007 -0.683664, + 0.849007 4.06034e-007 -0.528381, 0.936219 4.47742e-007 -0.351416, 0.980906 4.69113e-007 -0.194482, + -0.97565 0.0574008 -0.21169, -0.858178 -0.00414723 -0.513335, -0.73026 0.000581269 -0.683169, + -0.731614 -2.94133e-005 -0.681719, -0.696314 -2.89765e-007 -0.717737, -0.742605 0 -0.669729, -0.83077 0.00314673 -0.556606, + -0.844742 -0.249425 -0.473496, -0.882377 0.0074552 -0.470484, -0.915219 0.00157531 -0.402954, -0.74787 -0.00123565 -0.663844, + -0.944671 -0.00175844 -0.328016, -0.962886 -0.219472 -0.157105, -0.983626 0.00641765 -0.180109, -0.999863 0.0023727 0.0163752, + -0.987827 -0.155473 0.00506068, -0.955272 0.0112547 -0.295513, -0.808264 0.00507303 -0.588798, -0.968547 0.00246511 0.24882, + -0.921502 -0.000512092 0.388373, -0.960391 -0.211754 0.181133, -0.720485 0.00752252 0.69343, -0.713163 0.00650829 0.700968, + -0.750152 0.00322697 0.661257, -0.723951 0 0.689851, -0.739298 0.00507675 0.673359, -0.80665 -0.0099393 0.590945, + -0.801888 -0.0129384 0.597334, -0.817569 -0.00672136 0.575791, -0.796172 -0.00866506 0.605008, -0.792528 0.000188928 0.609836, + -0.839003 -0.000617107 0.544126, -0.797027 -0.358917 0.485722, -0.999913 0.0108521 0.00754208, 0.760729 0 0.649069, + -0.743451 -0.00219626 -0.668786, -0.896121 -0.000266668 0.44381, -0.920707 -0.0145776 -0.389983, + -0.99326 -0.0280033 -0.112475, -0.726239 -3.02234e-007 -0.687442, -0.960425 0.00155956 0.278535, + -0.789607 0.00250685 0.613607, -0.649479 0.0005226 0.760379, -0.739433 0.00257386 0.673225, -0.651564 0.0041123 0.758582, + -0.352563 -0.0165128 0.935642, -0.428227 -0.00338494 0.903665, -0.418705 -0.00626079 0.908101, 0.0114459 -0.0457837 0.998886, + 0.00572305 -0.0453181 0.998956, -0.242117 -0.0236406 0.969959, -0.405114 0 0.914266, -0.571009 0.00943501 0.82089, + -0.0162367 0.987503 -0.156763, -0.0148869 0.998905 -0.0443578, -1 -4.3579e-007 -2.38115e-008, -1 2.0532e-006 1.0947e-006, + -1 -1.7422e-008 3.69591e-007, -1 5.70253e-006 1.92726e-006, -1 4.13252e-006 1.635e-006, -1 2.3446e-006 1.28529e-006, + -1 -2.97111e-007 8.26993e-009, -1 -4.26281e-007 4.77566e-008, -1 -2.17734e-006 3.99571e-007, -1 -9.68029e-007 -1.34078e-007, + -1 -1.8362e-006 -2.98524e-007, -1 -1.07596e-006 2.82657e-009, -1 -1.44996e-006 -5.5887e-009, -1 -9.84313e-008 -3.41528e-007, + -1 -1.13427e-006 -2.9614e-007, -1 -2.60604e-007 -2.87683e-008, -1 -2.59497e-008 1.38803e-007, -1 -1.78092e-007 -1.61179e-008, + -1 -6.74964e-008 -5.64997e-008, -1 -1.16447e-007 3.43282e-008, -1 -6.28687e-007 3.14255e-008, -1 -5.86265e-007 5.58978e-009, + -1 -5.73561e-007 -2.62347e-008, -1 3.34024e-008 2.28334e-007, -1 5.78081e-008 7.86012e-008, -1 -1.47545e-006 -1.21084e-008, + -1 -9.19429e-007 2.83393e-010, -1 -1.85334e-006 -3.01859e-007, -1 -5.59414e-007 -8.7163e-008, -1 -4.35643e-007 -2.7096e-008, + -1 -9.92478e-009 6.11286e-008, -1 -5.45654e-007 1.18696e-007, -1 -6.80777e-007 1.54607e-007, -0.73473 -0.603208 0.310342, + -0.486356 -0.776541 0.400552, -0.854791 -0.517295 0.0416849, -0.684029 -0.674472 0.277835, -0.716043 -0.69773 0.0213374, + -0.603326 -0.756716 0.251752, -0.812133 -0.485946 0.32295, -0.738431 -0.627133 -0.247836, -0.657432 -0.7193 -0.224477, + -0.631631 -0.775262 -0.0034071, -0.584938 -0.809635 0.0483663, -0.530023 -0.806364 0.262397, -0.546428 -0.786651 0.287396, + -0.507422 -0.82112 0.261314, -0.539763 -0.841311 0.0291813, -0.465934 -0.845956 0.259355, -0.511732 -0.858634 0.0296383, + -0.556347 -0.804381 -0.208445, -0.455859 -0.889516 0.0308775, -0.400611 -0.879463 0.257014, -0.313751 -0.913774 0.258025, + -0.381897 -0.923634 0.0324829, -0.215802 -0.946082 0.241576, -0.241861 -0.969754 0.0328584, -0.604492 -0.766885 -0.215584, + -0.811692 -0.508785 -0.286871, -0.490307 -0.799962 -0.34592, -0.532095 -0.821359 -0.205532, -0.507303 -0.837327 -0.203782, + -0.386626 -0.901117 -0.196238, -0.273836 -0.942187 -0.193127, -0.147256 -0.989037 -0.0110075, -0.444227 -0.873871 -0.197515, + -0.247362 -0.94573 -0.21073, 0.653587 -0.651381 -0.385393, 0.701022 -0.60797 -0.372748, 0.590677 -0.693449 -0.412587, + 0.617117 -0.710757 -0.337625, 0.528553 -0.692414 -0.491116, 0.521136 -0.698736 -0.490087, 0.40731 -0.704086 -0.581689, + 0.438539 -0.704106 -0.558496, 0.321409 -0.702501 -0.634971, 0.0438364 -0.706974 -0.70588, -0.0642918 -0.706959 -0.704326, + -0.0180606 -0.710878 -0.703083, 0.177324 -0.701744 -0.690009, 0.2927 -0.70627 -0.6446, 0.47545 -0.699949 -0.532933, + 0.13988 -0.708975 -0.691222, 0.402027 -0.700078 -0.590141, 0.268052 -0.70377 -0.657918, 0.109213 -0.706727 -0.699006, + -0.021631 -0.70894 -0.704937, -0.572649 -0.711609 -0.407045, -0.525942 -0.735651 -0.426852, -0.53133 -0.722444 -0.44245, + -0.162353 -0.706667 -0.688667, -0.529164 -0.712959 -0.460082, -0.388078 -0.705334 -0.593212, -0.300903 -0.707569 -0.639378, + -0.405328 -0.703793 -0.583426, -0.183741 -0.705594 -0.684381, -0.28422 -0.70518 -0.649569, -0.139336 -0.708365 -0.691957, + -0.480466 -0.703895 -0.523148, -0.497546 -0.705028 -0.505355, -0.647215 -0.648593 -0.400549, -0.683572 -0.620723 -0.383968, + -0.266622 -0.704549 -0.657665, -0.374872 -0.701312 -0.606327, -0.472122 -0.705297 -0.528827, 0.999716 -0.00212874 0.023758, + 0.999909 -0.000671371 0.0134794, 0.999528 -0.00614397 0.0300983, 0.999038 -0.00876972 0.0429614, + 0.999902 -0.000845309 -0.0139511, 0.999471 0 -0.0325182, 0.999965 0.00027724 0.00830394, 0.999626 0 -0.0273309, + 0.468514 0.000112408 0.883456, 0.376238 0.000186656 0.926523, 0.328209 0.000186691 0.944605, 0.594848 0.000146081 0.803838, + 0.51278 6.62759e-005 0.85852, 0.0201294 -0.00122822 0.999797, 0.177457 0.0146418 0.98402, 0.0839568 0.00619715 0.99645, + 0.233566 7.42685e-005 0.972341, -0.0231581 -0.0158267 0.999607, -0.10563 0.000112133 0.994406, + -0.0729463 -0.00741996 0.997308, 0.719392 0.000776509 0.694604, 0.632845 0.000146081 0.774279, 0.794937 0.000494805 0.606691, + 0.816833 0.0100217 0.576788, 0.768003 0.00763959 0.640401, 0.867156 -0.000240922 0.498037, 0.718736 0 0.695283, + -0.196406 0.000331077 0.980523, -0.348767 0.000869805 0.937209, -0.24357 0.000581658 0.969883, -0.518831 0.000399681 0.854877, + -0.406336 0.000650533 0.913723, -0.573638 -0.000144871 0.819109, -0.681893 -0.000298336 0.731452, + -0.734315 -0.00018936 0.678808, -0.681841 -0.000471161 0.7315, -0.762373 -8.35177e-005 0.647138, + -0.784822 -0.0038725 0.619709, -0.83747 0.000337401 0.546484, -0.890475 -0.00119623 0.45503, -0.842812 -0.00154738 0.538206, + 0.960987 0.0732291 0.266723, 0.959076 0.0589514 0.276943, -0.906127 0.00235146 0.423, -0.906007 0.00156763 0.423259, + -0.903884 0 0.427777, 0.822881 0.0171603 0.567955, 0.908105 0.00613343 0.418698, 0.940094 0.0324423 0.339368, + 0.88829 0.00235902 0.459277, 0.872239 0.00461543 0.489058, 0.956321 0.0524557 0.287573, 0.97559 0.162777 0.147406, + 0.969207 0.0196819 0.245459, 0.984811 0.00101075 0.173627, 0.96938 0.241305 0.045549, 0.987264 0.00151667 0.159084, + -0.791424 -0.00140659 0.611266, -0.859542 -0.0117601 0.51093, -0.893006 -0.0132523 0.449849, -0.984199 0.00193053 -0.177056, + -0.996672 0.00260202 -0.0814783, -0.993035 0.00281561 -0.117789, -0.977635 -0.000683462 -0.210308, + -0.945773 -0.000484561 -0.324828, -0.944662 0 -0.328044, -0.898532 0 -0.438907, -0.752973 -0.0101424 -0.657974, + -0.724448 0.0057874 -0.689305, -0.814095 0.00495721 -0.58071, -0.630799 -0.000387748 -0.775946, -0.686239 -0.014331 -0.727235, + -0.876046 -2.7611e-007 -0.482228, -0.999631 -0.000899206 -0.0271422, -0.999437 0.000506013 -0.0335514, + -0.976511 0.00139659 -0.215464, -0.818415 -3.37484e-007 -0.574627, -0.829803 -1.52632e-007 -0.558057, + -0.898532 -5.82587e-007 -0.438907, -0.612877 0 -0.790178, -0.618531 -0.0193312 -0.785522, -0.553877 -0.00281414 -0.832594, + -0.999836 -4.16095e-007 -0.0181367, 0.979553 0 -0.201187, 0.971535 0 -0.236898, 0.991702 0 -0.128561, 0.951074 0 -0.308962, + 0.938501 0 -0.345278, 0.889046 0.000532203 -0.457818, 0.9966 0 -0.0823904, 0.694264 0.000408178 -0.71972, + 0.716522 0.0108766 -0.69748, 0.620765 0.00652271 -0.783969, 0.889227 0 -0.457466, 0.796833 0.00109541 -0.604199, + 0.84702 0.00164259 -0.531559, 0.744718 0.000271205 -0.66738, 0.795873 0.00263801 -0.605458, -0.945638 -8.16308e-007 -0.325221, + -0.394513 0.00567422 -0.918873, -0.494616 0.000551294 -0.869111, -0.495419 -0.00200989 -0.868652, + -0.25765 0.00697539 -0.966213, -0.347997 0.00438127 -0.937485, -0.998964 0.00337604 -0.0453789, + -0.998146 0.00181821 -0.0608453, -0.999624 0.000731995 -0.0273991, -0.999809 -4.16061e-007 -0.019531, + -0.2112 0.00238248 -0.97744, -0.105175 0.00220098 -0.994451, 0.546135 -0.00889467 -0.83765, 0.615106 -0.00383663 -0.788435, + 0.689219 -0.0112019 -0.724466, 0.584389 -0.00543855 -0.811455, 0.325043 1.46277e-007 -0.945699, 0.32757 0.00751905 -0.944797, + 0.408035 0.0029527 -0.912962, 0.112992 0.0283333 -0.993192, 0.0199441 0.0370005 -0.999116, 0.197002 0.0235383 -0.98012, + -0.00245965 0.0387594 -0.999246, -0.0634688 0.0145956 -0.997877, 0.460173 0.000328501 -0.887829, 0.23483 0.0273012 -0.971653, + 0.22335 0.0540063 -0.973241, 0.486608 -0.00248365 -0.873617, 0.417456 0.0100748 -0.908641, 0.426487 0.0143427 -0.90438, + 0.017538 0.0725341 -0.997212, -0.0214111 0.986983 -0.159394, -0.0259123 0.984748 -0.172048, -0.0156865 0.986715 -0.161702, + -0.0261637 0.9943 -0.103363, -0.018582 0.954426 -0.297869, -0.0278963 0.914376 -0.403905, -0.0212306 0.897136 -0.441244, + -0.0277042 0.83144 -0.554924, -0.0263688 0.780964 -0.624019, -0.0256239 0.705248 -0.708498, -0.025211 0.552112 -0.833389, + -0.0258359 0.681559 -0.731307, -0.0260108 0.380247 -0.924519, -0.0260746 0.509067 -0.860332, -0.0177359 0.926883 -0.374931, + -0.0267109 0.194194 -0.980599, -0.0253126 0.341406 -0.939575, -0.0262815 0.839741 -0.542351, -0.0289499 0.774593 -0.631797, + -0.0295861 0.735743 -0.676615, -0.0207822 0.522418 -0.852436, 0.00271431 0.70469 -0.70951, -0.0202921 0.243881 -0.969593, + -0.0248691 0.132234 -0.990907, -0.0258247 -0.213109 -0.976687, -0.0265688 -0.262055 -0.964687, -0.0259135 -0.39569 -0.918018, + -0.0267917 -0.0353066 -0.999017, -0.0263064 -0.0348579 -0.999046, -0.0205615 -0.0516287 -0.998455, + -0.0256247 -0.440277 -0.897496, -0.0249889 -0.933028 -0.358936, -0.0261204 -0.866756 -0.498047, -0.0263 -0.936681 -0.349195, + -0.0263581 -0.980874 -0.192852, -0.0260619 -0.612032 -0.790404, -0.0260057 -0.753131 -0.657357, + -0.0249358 -0.722936 -0.690465, -0.0258584 -0.838803 -0.54382, -0.0242101 -0.557327 -0.82994, -0.0251021 -0.990146 -0.137769, + -0.0262138 -0.999512 0.0169651, -0.0206739 -0.39217 -0.919661, -0.0202744 -0.643651 -0.76505, -0.0202988 -0.843121 -0.53734, + -0.0205347 -0.964102 -0.264737, -0.00424965 -0.99999 -0.00154989, -0.0260833 -0.997612 -0.0639587, + -0.0262089 -0.997365 0.0676493, 0.311815 -0.946773 0.0799531, -0.0260004 -0.999052 0.034904, 0.24672 -0.968516 0.0332619, + -0.0266642 -0.99903 0.0350472, -0.0262761 -0.999048 0.0348373, -0.0253006 -0.999068 0.0349835, -0.0263762 -0.999042 0.034915, + -0.026183 -0.999048 0.0348814, -0.0265581 -0.99903 0.0351273, -0.028093 -0.998998 0.0348434, -0.0263726 -0.999046 0.0348053, + -0.0248304 -0.999087 0.0347772, -0.0256506 -0.999062 0.034895, -0.000799612 -0.999412 0.0342811, -0.02753 -0.999025 0.034507, + -0.0259562 -0.999042 0.0352242, -0.0263604 -0.999039 0.0350304, -0.0260007 -0.999047 0.0350696, -0.0265839 -0.905637 0.423219, + -0.026085 -0.965179 0.260286, -0.0256251 -0.909875 0.41409, -0.0153476 0.590292 0.807044, -0.0214787 0.586865 0.8094, + -0.0153288 0.590304 0.807036, -0.0257621 -0.829515 0.55789, -0.0267212 -0.973609 0.226654, -0.0254074 -0.92825 0.371087, + -0.0266635 -0.991047 0.130822, -0.0273589 -0.79468 0.606411, -0.025735 -0.703733 0.709998, -0.0271388 -0.555765 0.830896, + -0.0278643 -0.663067 0.748042, -0.0276706 -0.50766 0.861113, -0.0260341 -0.723272 0.690073, -0.0271406 -0.328337 0.944171, + -0.0267419 -0.381467 0.923995, -0.0252204 -0.192336 0.981005, -0.0273089 -0.140394 0.989719, -0.0246694 0.0354894 0.999066, + -0.0252407 -0.842233 0.538522, -0.0262428 -0.981324 0.190562, -0.0129416 0.957304 0.288793, -0.020226 0.94715 0.320153, + -0.0226201 0.959434 0.281025, -0.0235631 -0.41778 0.908243, -0.0240104 -0.240459 0.970362, -0.0244502 -0.582653 0.812353, + -0.0239779 0.813502 0.581068, -0.0243762 0.864534 0.501983, -0.0166005 0.875383 0.483146, 0.103239 -0.08072 0.991376, + -0.0298196 0.0354802 0.998925, -0.0227261 0.997041 0.0734347, -0.0235011 0.98441 0.17431, -0.0250302 0.999528 0.0178235, + -0.026277 0.728837 0.684183, -0.030063 0.627592 0.777962, -0.0132745 0.314873 0.949041, -0.0272786 0.235307 0.971538, + -0.0280752 0.409915 0.911692, -0.0115472 0.490232 0.871516, -0.0174674 0.752496 0.658366, -0.0161359 0.87317 0.487148, + -0.0270303 0.981722 0.188393, -0.0153585 0.585394 0.810604, -0.0261694 0.996656 0.0774024, -0.0216467 0.911988 0.409646, + -0.0261406 0.999434 0.0211705, -0.0184514 0.746936 0.66464, -0.0163081 0.752619 0.658255, -0.0255102 0.172355 0.984704, + -0.0250845 0.127775 0.991486, -0.00730793 0.410802 0.911695, -0.0305766 0.684576 0.7283, -0.0260841 0.99905 -0.0349216, + -0.0262705 0.997115 -0.071209, -0.0253635 0.997193 -0.0704543, -0.0275051 0.99391 -0.106709, -0.0290835 0.987394 -0.155588, + -0.0300621 0.983073 -0.180729, -0.0354588 0.954058 -0.297515, -0.0265104 0.978337 -0.205314, -0.0306661 0.951335 -0.30663, + -0.092509 0.926732 -0.364156, -0.0991013 0.848109 -0.520471, -0.0765659 0.889238 -0.450991, -0.0259077 0.829687 -0.557627, + 0.959289 0.212822 -0.185663, -0.0181437 0.829594 -0.558072, -0.0233554 0.88127 0.472036, -0.0231948 0.875384 0.482871, + -0.039886 0.881255 0.470956, -0.0323846 0.867888 0.495703, 0.00205049 0.883794 0.467872, -0.0159993 0.874202 0.485299, + -0.0312246 0.8734 0.486001, -0.0648089 0.876653 0.476739, -0.0178115 0.87594 0.482091, -0.0120117 0.807136 -0.590244, + -0.0152436 0.838833 -0.544175, 0.0124197 0.822575 -0.568521, -0.0219426 0.853159 -0.521189, -0.00622279 0.844628 -0.535318, + -0.0237088 0.850211 -0.525908, -0.0162078 0.844039 -0.536036, -0.0248685 0.848993 -0.527819, -0.021871 0.908428 0.417469, + -0.0778194 0.968665 0.235864, -0.0427786 0.918745 0.392526, -0.0262135 0.928593 0.370172, -0.0243934 0.962928 0.268652, + -0.00975486 0.993094 0.116912, -0.0714221 0.997252 0.0196656, 0.0853559 0.971922 0.219278, 0.0657064 0.996569 0.0503391, + -0.0262764 0.998898 0.0388784, -0.0261983 0.999045 -0.0349811, -0.0174825 0.999575 -0.0233335, -0.0261345 0.999057 -0.0346684, + 0.500309 -0.865371 0.028698, 0.500061 -0.865548 0.0276825, 0.489484 -0.164537 0.856349, 0.49581 -0.265868 0.826733, + 0.500338 -0.224867 0.83612, 0.554417 -0.354517 0.752954, 0.503028 -0.459199 0.732188, 0.519499 -0.27112 0.810317, + 0.502182 -0.1987 0.841624, 0.499543 -0.545821 0.672708, 0.497455 -0.630376 0.595957, 0.498254 -0.277963 0.821267, + 0.560761 -0.377017 0.73716, 0.48786 -0.388029 0.781938, 0.503842 -0.46751 0.726346, 0.501015 -0.738809 0.450716, + 0.500153 -0.713378 0.490856, 0.496714 -0.861359 0.106469, 0.497177 -0.846569 0.190094, 0.497594 -0.855076 0.145755, + 0.499157 -0.745775 0.441205, 0.496258 -0.826009 0.267276, 0.500704 -0.788517 0.357121, 0.00985747 -0.0513352 -0.998633, + 0.0295332 -0.0168818 0.999421, 0.499753 -0.846451 0.183759, 0.499769 -0.862811 0.0760757, 0.999658 -0.000487963 0.0261461, + 0.999657 0.000344723 0.0262031, 0.999659 0.00078961 0.0261193, 0.999656 -0.000116707 0.0262163, + 0.999657 -0.00011417 0.0261903, 0.999656 2.31553e-005 0.0262382, 0.999655 8.75747e-006 0.0262593, + 0.999672 0.000114938 0.0256227, 0.99967 8.9243e-005 0.025675, 0.999663 0.000266512 0.025964, 0.99966 0.000438479 0.0260586, + 0.999658 0.000528855 0.0261473, 0.999656 -1.77113e-005 0.026242, 0.999655 8.06922e-005 0.0262591, + 0.999663 0.000171142 0.0259664, 0.999657 9.56349e-005 0.0261937, 0.999629 0.00855394 0.0258412, + 0.999653 0.000243857 0.0263452, 0.999645 0.000236473 0.0266349, 0.999653 0.000101011 0.026363, 0.999662 6.43297e-005 0.025989, + 0.999669 0.000911403 0.0256916, 0.99965 -0.000321745 0.0264729, 0.999646 0.000293674 0.0265932, 0.99964 0.000630828 0.0268331, + 0.999652 0.000148665 0.0263709, 0.999655 0.000181408 0.0262825, 0.999648 0.000549615 0.0265371, + 0.999624 0.000718949 0.0274125, 0.999631 0.000732321 0.0271706, 0.999645 0.000544624 0.0266236, + 0.999628 0.000769648 0.0272526, 0.99966 0.000364326 0.0260891, 0.999659 -7.95248e-005 0.0261293, + 0.999662 6.96981e-006 0.0260119, 0.999655 -5.2318e-005 0.026252, 0.999647 -0.000156478 0.0265705, + 0.999659 -0.00026884 0.0261104, 0.999663 -5.13709e-005 0.0259509, 0.999657 -1.23989e-005 0.0262044, + 0.999642 -0.000532041 0.0267602, 0.999636 -0.000216727 0.0269633, 0.999649 -0.000347293 0.0265067, + 0.999651 -0.000157118 0.0264031, 0.999637 -0.000516712 0.0269433, 0.99963 -0.000377786 0.0272043, + 0.026329 -0.999037 0.0350894, 0.025942 -0.99904 0.0352867, 0.0269377 -0.99901 0.0354095, 0.026423 -0.999625 0.00721335, + 0.0265702 -0.999027 0.0351905, 0.0260516 -0.999053 0.0348417, 0.0262522 -0.999042 0.0350091, 0.0253806 -0.999072 0.034798, + 0.0257495 -0.999064 0.0347568, 0.0268448 -0.99903 0.0349149, 0.0265628 -0.999038 0.0349011, 0.0263773 -0.999043 0.0348942, + 0.0261523 -0.974049 -0.224821, 0.0259257 -0.899288 -0.436588, 0.0260291 -0.915248 -0.40205, 0.0260789 -0.981755 -0.188355, + 0.0257964 -0.929788 -0.367191, 0.0259458 -0.996714 -0.0767351, 0.0261551 -0.816917 -0.576162, 0.0261992 -0.465576 -0.88462, + 0.0260377 -0.620708 -0.783609, 0.0258755 -0.432864 -0.901088, 0.0259098 -0.78167 -0.623154, 0.0261048 -0.663156 -0.748026, + 0.0257793 -0.224369 -0.974163, 0.0262845 -0.282448 -0.958923, 0.0262388 -0.804272 -0.593682, 0.0259797 -0.988108 -0.151551, + 0.0259725 -0.498252 -0.866643, 0.02665 -0.260896 -0.964999, 0.0260723 -0.649858 -0.759609, 0.0264226 -0.03743 -0.99895, + 0.0262753 -0.0355376 -0.999023, 0.0265513 0.148974 -0.988485, 0.0273042 0.216196 -0.975968, 0.0265368 0.140361 -0.989745, + 0.0267277 0.36229 -0.931682, 0.0275242 0.419377 -0.907395, 0.0264425 0.326821 -0.944716, 0.0263042 -0.0373665 -0.998955, + 0.0265115 0.562251 -0.826542, 0.0275297 0.603388 -0.796973, 0.0272707 0.764826 -0.64366, 0.0284274 0.855699 -0.516693, + 0.027825 0.839034 -0.543367, 0.0275116 0.818925 -0.573241, 0.0261167 0.497436 -0.867108, 0.0267794 0.649117 -0.760217, + 0.026928 0.733579 -0.679071, 0.0257133 0.869521 -0.493226, 0.0265815 0.774651 -0.63183, 0.0268029 0.882598 -0.469363, + 0.0261624 0.882521 -0.469544, 0.0256604 0.882676 -0.469282, 0.0263221 0.883014 -0.468608, 0.027264 0.882735 -0.469079, + 0.0265316 0.882339 -0.469866, 0.0264256 0.882819 -0.46897, 0.0263142 0.882392 -0.469779, 0.0273587 0.882178 -0.470121, + 0.0260847 0.882928 -0.468784, 0.0269295 0.882708 -0.46915, 0.0260205 0.88254 -0.469518, 0.0358182 0.882536 -0.468878, + 0.0327266 0.882438 -0.469288, 0.0417071 0.882131 -0.469155, 0.990255 0.138432 0.0152291, 0.997736 0.063166 0.0230919, + 0.9937 0.109872 0.0220915, 0.97809 0.207705 0.0141115, 0.954414 0.297938 0.0180667, 0.965796 0.259147 0.0090189, + 0.95001 0.311728 0.0174919, 0.923768 0.382752 0.0123735, 1 7.88929e-007 9.44307e-007, 1 1.6134e-006 1.08126e-006, + 1 5.22869e-007 1.22597e-007, 1 4.86201e-007 -1.00175e-007, 1 1.87275e-007 -6.24248e-008, 1 2.66377e-007 3.59884e-007, + 1 1.60414e-006 -1.06726e-006, 1 7.8584e-007 -9.39851e-007, 1 2.66377e-007 -3.60386e-007, 1 3.76691e-007 1.90781e-006, + 1 1.56063e-007 7.76868e-008, 1 3.76691e-007 -1.90775e-006, 0.703804 -0.169159 -0.68996, 0.703905 -5.40318e-005 -0.710294, + 0.70536 -0.139948 -0.694897, 0.709932 -0.306914 -0.633877, 0.706564 -0.277832 -0.650827, 0.703551 -0.537429 -0.464958, + 0.706046 -0.428425 -0.563871, 0.700762 -0.512089 -0.496686, 0.700922 -0.623415 -0.3465, 0.697508 -0.603824 -0.385848, + 0.704505 -0.401387 -0.585288, 0.707588 -0.246969 -0.662061, 0.703705 -0.374367 -0.603861, 0.696051 -0.580786 -0.422138, + 0.694546 -0.670348 -0.261228, 0.693272 -0.653103 -0.304682, 0.700552 -0.484189 -0.524202, 0.707545 -2.75019e-005 -0.706669, + 0.698303 -0.68257 -0.215574, 0.712468 -0.635874 0.296738, 0.689188 -0.59261 0.416934, 0.70602 -0.484023 0.516969, + 0.705297 -0.703491 0.0874987, 0.696878 -0.698165 0.164093, 0.701537 -0.261639 0.662865, 0.679974 -0.142871 0.719182, + 0.701924 -6.39374e-005 0.712252, 0.682586 -0.397116 0.613494, 0.695791 -0.71445 -0.0737328, 0.688293 -0.725249 0.0163315, + 0.691652 -0.711239 -0.125527, 0.685939 -0.726615 -0.0389533, 0.68529 -0.66604 0.294566, 0.677738 -0.696529 0.235622, + 0.67253 -0.644754 0.363313, 0.682482 -0.723993 0.100259, 0.678632 -0.510066 0.52848, 0.689553 -0.702544 -0.175924, + 0.704884 5.81366e-006 -0.709322, 0.707185 -0.113323 -0.697888, 0.666277 -0.46733 0.581101, 0.669198 -0.567254 0.479997, + 0.671898 -0.281097 0.685228, 0.661843 -0.355448 0.660015, 0.660366 -0.227756 0.715573, 0.666382 -0.098453 0.739082, + 0.674449 -4.91358e-005 0.738321, 0.666958 -4.31235e-005 0.745095, 0.679955 0.14287 0.719201, 0.666379 0.0983922 0.739093, + 0.701367 0.261709 0.663018, 0.682639 0.397145 0.613416, 0.70577 0.48416 0.517183, 0.71219 0.636139 0.296837, + 0.689042 0.592622 0.417158, 0.671878 0.281052 0.685267, 0.662125 0.355208 0.659861, 0.678708 0.510026 0.52842, + 0.666739 0.467233 0.580649, 0.685095 0.666221 0.294609, 0.672551 0.644756 0.36327, 0.696786 0.698257 0.164092, + 0.677718 0.696534 0.235665, 0.669406 0.567066 0.479929, 0.660452 0.227707 0.715509, 0.705367 0.70346 0.08719, + 0.696289 0.713976 -0.0736233, 0.688372 0.725178 0.016164, 0.698573 0.682305 -0.215536, 0.691771 0.711152 -0.125358, + 0.697582 0.603756 -0.385821, 0.703436 0.53747 -0.465085, 0.701408 0.623017 -0.346232, 0.700779 0.512084 -0.496668, + 0.705859 0.428655 -0.56393, 0.694594 0.670257 -0.261334, 0.685648 0.726888 -0.0389847, 0.689372 0.7027 -0.176007, + 0.704618 0.401365 -0.585167, 0.709727 0.306961 -0.634084, 0.7065 0.277783 -0.650918, 0.70372 0.169202 -0.690035, + 0.705296 0.139936 -0.694964, 0.68243 0.724066 0.100092, 0.693002 0.653345 -0.304776, 0.701056 0.484031 -0.523675, + 0.703909 0.374096 -0.603792, 0.707053 0.113274 -0.69803, 0.707504 0.246859 -0.662192, 0.696211 0.580716 -0.42197, 0 0 -1, + 8.925e-007 -1 0, 0 -1 0, -4.55414e-007 1 0, -4.61508e-007 1 0, -0.9773 -0.211861 0.00025603, -0.977859 -0.209265 0, + -0.97744 -0.211214 0.000192022, -0.979689 -0.200519 -0.00155965, -0.986205 -0.165527 0, -0.985292 -0.170879 0, + -0.987944 -0.154809 0, -0.975946 -0.218007 -0.00155961, -0.977254 -0.212073 0, -0.977112 -0.212727 0.00025603, + -0.976734 -0.214454 0, -0.974907 -0.222605 0.00155964, -0.968193 -0.250203 0, -0.964109 -0.265505 0, + -0.978654 -0.205507 0.00155962, -0.977486 -0.210998 -0.00025603, -0.9773 -0.211861 -0.00025603, + -0.977158 -0.212512 -0.000192022, -0.966859 -0.255311 0, -4.64964e-007 1 0, -0.00244441 -0.207973 0.978132, + -0.00792544 -0.212439 0.977142, -0.0151543 -0.215481 0.97639, -0.00812252 -0.211009 0.97745, -0.00383771 -0.212275 0.977202, + 0.00314184 -0.20069 0.97965, 9.19164e-008 -0.198376 0.980126, 9.70836e-008 -0.208798 0.977959, 4.63344e-007 -1 0, + 1.1177e-007 -0.208798 -0.977959, 0.00385618 -0.21239 -0.977177, 7.02237e-008 -0.215515 -0.976501, + 0.00514171 -0.210118 -0.977663, 0.0077123 -0.204052 -0.97893, 1.33638e-007 -0.208798 -0.977959, + 9.70836e-008 -0.208798 -0.977959, 9.19164e-008 -0.198376 -0.980126, -0.999379 0.0352278 0, -0.999873 0.0159704 0, + -0.997756 0.0669529 0, -0.998483 0.0550569 0, -0.987409 0.158188 0, -0.999961 -0.00881584 0, -0.999124 -0.0418373 0, + -0.979457 0.201653 0, -0.98497 0.172723 0, -0.000208285 0.907041 0.421043, -7.8257e-007 0.90708 0.420959, + -0.000277294 0.906682 0.421815, -0.000277033 0.906335 0.422559, -0.000106357 0.976218 0.216793, 0 0.976228 0.216748, + 0.000279353 -0.908135 -0.418677, 0 -0.908765 -0.417309, 0.000209712 -0.908718 -0.41741, 0.00010718 -0.976476 -0.215626, + 0.000279353 -0.907566 -0.419909, 0 -0.976488 -0.215571, -0.923166 0.384397 -0.00167618, -0.913248 0.407335 -0.00744859, + -0.914988 0.403478 -0.00150869, -0.941272 0.33765 0, -0.942803 0.333346 0.00165223, -0.943563 0.331189 0.00165224, + -0.941437 0.337188 0, -0.938508 0.345255 -0.00121774, -0.944409 0.328772 0, -0.932879 0.360164 -0.00439512, + -0.922025 0.387042 0.00825387, -0.910554 0.413389 0, -0.944129 0.329573 0.00123917, -0.9293 0.369321 -0.00184688, + -0.945813 0.324711 0, -0.945666 0.325139 0, -0.950378 0.311099 0, -0.949502 0.31376 0, -0.949062 0.315089 0, + -0.943564 0.331191 0, -0.910624 0.413236 0.000757203, -0.914421 0.404764 0.000140288, -0.918462 0.395509 0.000708632, + -0.925077 0.379778 -0.000795435, -0.929021 0.370027 0.000872057, -0.933553 0.358439 -0.000670282, + -0.941702 0.336449 -7.9311e-005, -0.936632 0.350302 -0.00304813, -0.937407 0.348237 -2.19445e-005, + -0.943126 0.332433 0.00142857, 0 0.646038 -0.763306, 0 0.646663 -0.762776, 0 0.644785 -0.764364, 0 0.645412 -0.763835, + 8.67415e-007 -0.710469 -0.703729, 0 -0.68736 -0.726317, 0 -0.699004 -0.715118, 2.60156e-006 -0.721747 -0.692157, + 1.30078e-006 -0.721745 -0.692159, -1.7037e-006 0.700108 -0.714037, -1.22901e-006 0.681928 -0.731419, + -2.58754e-006 0.717855 -0.696193, -2.64984e-006 0.735138 -0.677917, 0 0.681931 -0.731417, 0 0.711173 0.703017, + 0 0.673332 -0.73934, 0 0.647461 -0.762099, 0 0.698433 -0.715676, 0 0.722674 -0.691189, 0 -0.699747 -0.714391, + 0 -0.700394 -0.713756, 0 -0.700071 -0.714074, 0 -0.699423 -0.714708, 1.20093e-006 -1 1.10254e-006, + 3.60279e-006 -1 3.30761e-006, 1.80139e-006 -1 1.6538e-006, 2.51048e-006 -0.700071 0.714073, 2.51563e-006 -0.699424 0.714707, + 2.51537e-006 -0.699747 0.71439, 2.5052e-006 -0.700394 0.713756, 2.51003e-006 -0.700394 0.713756, + 2.51987e-006 -0.699424 0.714707, -1.67931e-006 0.698705 0.71541, -1.25881e-006 0.698455 0.715654, + -2.51295e-006 0.698955 0.715166, -2.51062e-006 0.699204 0.714923, -2.50094e-006 0.699204 0.714923, 0 0.698454 0.715655, + 2.28562e-006 -0.635724 0.771917, 1.14602e-006 -0.635875 0.771792, 1.52775e-006 -0.6358 0.771854, + 2.27362e-006 -0.635649 0.771978, 2.28242e-006 -0.635649 0.771978, 0 -0.635876 0.771792, -1.19228e-006 1 -5.79419e-007, + -1.78842e-006 1 -8.69129e-007, -3.57684e-006 1 -1.73826e-006, -0.977046 -0.00465089 0.212977, -0.973613 -0.00266179 0.22819, + -0.978671 -0.00626532 0.20534, -0.97326 0 0.229708, -0.969023 0.00318814 0.246948, -0.981059 -0.0020224 0.193696, + -0.980087 -0.00371309 0.198536, -0.966818 0.00333926 0.255444, -0.966359 -0.0012333 0.257194, -0.969566 0.00301595 0.24481, + -0.981667 -0.00212095 0.190592, -0.981593 -0.000642873 0.190986, -0.980796 0.000995679 0.195033, + -0.967782 0.00673115 0.251699, -0.967443 0.00707688 0.25299, -0.962478 0.00338615 0.271339, -0.966706 0.00580338 0.255824, + -0.964567 0.00169517 0.263831, -0.962856 0 0.270017, -0.964072 0 0.265641, -0.971645 0.0124871 0.236113, + -0.971965 0.00730367 0.235011, -0.965557 -0.00204393 0.260184, -0.972378 -0.000313865 0.23341, -0.970587 -0.00793973 0.24062, + -0.973072 -0.00419811 0.230463, -0.97439 0.00302965 0.224843, -0.978216 0.00611471 0.207498, -0.972987 0.00334133 0.230836, + -0.977102 0 0.212771, -0.975903 0.00495818 0.218149, -0.976334 0.00674403 0.216164, -0.970024 -0.00732573 0.242899, + -0.968342 -0.00723931 0.249524, -0.96769 -0.00471816 0.252098, -0.963867 0.00129249 0.266382, -0.96377 0 0.266736, + -0.965336 0.0109248 0.260783, -1.78842e-006 1 1.61158e-006, -3.57684e-006 1 3.22316e-006, -1.19228e-006 1 1.07439e-006, + 1.19228e-006 -1 -1.07439e-006, 1.78842e-006 -1 -1.61158e-006, 3.57684e-006 -1 -3.22316e-006, -0.973783 0 -0.227478, + -0.977007 0.00139855 -0.213202, -0.977894 0.00186489 -0.209095, -0.975729 -0.000974068 -0.218982, -0.967616 0 -0.252426, + -0.974466 0.000777728 -0.224535, -0.9661 0 -0.25817, -0.978398 -0.000649291 -0.20673, -0.978014 -1.94368e-006 -0.208538, + -0.979233 0.00186474 -0.202729, -0.981531 0 -0.191303, -0.981861 0 -0.189605, -0.982841 0 -0.184452, -0.984722 0 -0.174132, + -0.967115 0 -0.254341, -0.978326 0.000777594 -0.207069, -0.977007 -0.00139935 -0.213202, -0.977894 -0.00186594 -0.209095, + -0.979233 -0.00186579 -0.202729, 0 0.983197 -0.182546, 0 0.983133 -0.182892, 0 0.983069 -0.183238, 0 0.983004 -0.183583, + 0 -0.983173 -0.182676, 0 -0.983321 -0.181876, 0 -0.983024 -0.183476, 0 -0.982875 -0.184276, -0.999574 0 -0.0291696, + -0.997685 0.0554501 -0.0393707, -0.994724 0.0831985 -0.0600214, -0.998827 0.0332598 -0.0351971, -0.998185 0 -0.0602302, + -0.999911 0 -0.0133557, -0.997615 0 0.0690183, -0.994535 0 0.104402, -0.996649 -0.0554447 -0.0601376, + -0.998716 -0.0415939 -0.0289083, -0.997685 -0.0554506 -0.0393707] + } + coordIndex [ + 4, 5, 2, -1,2, 3, 4, -1,5, 6, 2, -1,7, 8, 19, -1,6, 7, 1, -1,18, 19, 8, -1,18, 8, + 9, -1,2, 6, 1, -1,19, 20, 7, -1,0, 1, 36, -1,0, 36, 37, -1,36, 1, 35, -1,1, 34, 35, -1, + 21, 34, 1, -1,21, 33, 34, -1,32, 33, 22, -1,22, 33, 21, -1,21, 1, 20, -1,1, 7, 20, -1, + 17, 13, 16, -1,13, 17, 10, -1,18, 9, 17, -1,17, 9, 10, -1,11, 12, 13, -1,16, 14, + 15, -1,16, 13, 14, -1,13, 10, 11, -1,23, 31, 32, -1,31, 27, 30, -1,29, 30, 28, -1, + 27, 31, 23, -1,23, 32, 22, -1,24, 25, 26, -1,27, 28, 30, -1,27, 24, 26, -1,27, 23, + 24, -1,282, 42, 281, -1,280, 281, 41, -1,42, 41, 281, -1,72, 281, 280, -1,39, 41, + 40, -1,282, 43, 42, -1,280, 41, 39, -1,283, 44, 282, -1,45, 284, 46, -1,283, 45, + 44, -1,46, 286, 47, -1,287, 47, 286, -1,43, 282, 44, -1,71, 282, 281, -1,73, 39, + 38, -1,71, 283, 282, -1,73, 72, 280, -1,280, 39, 73, -1,71, 281, 72, -1,71, 70, 283, -1, + 68, 285, 284, -1,46, 284, 285, -1,46, 285, 286, -1,67, 286, 285, -1,284, 70, 69, -1, + 285, 68, 67, -1,68, 284, 69, -1,287, 286, 67, -1,283, 70, 284, -1,284, 45, 283, -1, + 48, 47, 287, -1,290, 50, 289, -1,288, 50, 49, -1,65, 288, 287, -1,49, 287, 288, -1, + 50, 288, 289, -1,64, 289, 288, -1,290, 51, 50, -1,48, 287, 49, -1,291, 53, 52, -1, + 62, 291, 290, -1,290, 291, 51, -1,54, 53, 292, -1,292, 53, 291, -1,54, 293, 55, -1, + 57, 56, 55, -1,52, 51, 291, -1,63, 290, 289, -1,66, 65, 287, -1,292, 291, 62, -1, + 65, 64, 288, -1,63, 289, 64, -1,62, 290, 63, -1,62, 61, 292, -1,294, 293, 59, -1, + 55, 293, 294, -1,55, 294, 57, -1,57, 294, 59, -1,293, 61, 60, -1,57, 59, 58, -1,59, + 293, 60, -1,292, 61, 293, -1,293, 54, 292, -1,67, 66, 287, -1,56, 75, 74, -1,75, + 56, 58, -1,297, 78, 296, -1,295, 296, 77, -1,78, 77, 296, -1,108, 296, 295, -1,76, + 77, 74, -1,297, 79, 78, -1,295, 77, 76, -1,80, 79, 298, -1,81, 299, 82, -1,298, 81, + 80, -1,82, 301, 83, -1,302, 83, 301, -1,297, 298, 79, -1,107, 297, 296, -1,109, 76, + 75, -1,107, 298, 297, -1,109, 108, 295, -1,295, 76, 109, -1,107, 296, 108, -1,107, + 106, 298, -1,104, 300, 299, -1,82, 299, 300, -1,82, 300, 301, -1,103, 301, 300, -1, + 299, 106, 105, -1,300, 104, 103, -1,104, 299, 105, -1,302, 301, 103, -1,298, 106, + 299, -1,299, 81, 298, -1,84, 83, 302, -1,305, 86, 304, -1,303, 86, 85, -1,101, 303, + 302, -1,85, 302, 303, -1,86, 303, 304, -1,100, 304, 303, -1,305, 87, 86, -1,84, 302, + 85, -1,89, 88, 306, -1,98, 306, 305, -1,305, 306, 87, -1,90, 89, 307, -1,307, 89, + 306, -1,90, 308, 91, -1,93, 92, 91, -1,88, 87, 306, -1,99, 305, 304, -1,102, 101, + 302, -1,307, 306, 98, -1,101, 100, 303, -1,99, 304, 100, -1,98, 305, 99, -1,98, 97, + 307, -1,309, 308, 95, -1,91, 308, 309, -1,91, 309, 93, -1,93, 309, 95, -1,308, 97, + 96, -1,93, 95, 94, -1,95, 308, 96, -1,307, 97, 308, -1,308, 90, 307, -1,103, 102, + 302, -1,92, 94, 110, -1,110, 111, 92, -1,310, 111, 112, -1,113, 111, 310, -1,119, + 310, 110, -1,112, 110, 310, -1,311, 310, 119, -1,310, 114, 113, -1,312, 114, 311, -1, + 115, 114, 312, -1,310, 311, 114, -1,117, 312, 118, -1,311, 118, 312, -1,312, 117, + 116, -1,116, 115, 312, -1,119, 118, 311, -1,117, 120, 116, -1,122, 314, 121, -1,120, + 121, 313, -1,124, 125, 127, -1,129, 123, 124, -1,315, 123, 316, -1,315, 122, 123, -1, + 116, 313, 142, -1,313, 116, 120, -1,142, 115, 116, -1,313, 314, 142, -1,314, 315, + 140, -1,315, 314, 122, -1,140, 141, 314, -1,140, 315, 139, -1,314, 141, 142, -1,313, + 121, 314, -1,126, 127, 125, -1,128, 129, 124, -1,317, 316, 129, -1,316, 123, 129, -1, + 124, 127, 128, -1,318, 130, 131, -1,131, 132, 319, -1,130, 317, 129, -1,134, 132, + 133, -1,317, 318, 138, -1,318, 317, 130, -1,138, 139, 317, -1,318, 137, 138, -1,317, + 139, 316, -1,319, 134, 136, -1,134, 319, 132, -1,137, 318, 136, -1,135, 136, 134, -1, + 136, 318, 319, -1,318, 131, 319, -1,316, 139, 315, -1,320, 143, 135, -1,321, 320, + 148, -1,134, 320, 135, -1,133, 148, 134, -1,320, 134, 148, -1,321, 143, 320, -1,321, + 322, 143, -1,144, 143, 322, -1,145, 144, 322, -1,147, 322, 321, -1,147, 146, 322, -1, + 145, 322, 146, -1,148, 147, 321, -1,144, 146, 38, -1,38, 40, 144, -1,12, 92, 111, -1, + 111, 14, 12, -1,111, 113, 151, -1,151, 113, 323, -1,14, 323, 150, -1,323, 14, 151, -1, + 150, 323, 324, -1,113, 324, 323, -1,324, 114, 325, -1,325, 114, 115, -1,114, 324, + 113, -1,15, 325, 16, -1,325, 15, 324, -1,149, 16, 325, -1,325, 115, 149, -1,324, + 15, 150, -1,115, 142, 326, -1,326, 142, 327, -1,115, 326, 149, -1,328, 327, 141, -1, + 141, 327, 142, -1,328, 141, 140, -1,326, 327, 153, -1,149, 17, 16, -1,149, 326, 17, -1, + 328, 329, 19, -1,329, 328, 140, -1,19, 153, 328, -1,329, 20, 19, -1,153, 17, 326, -1, + 328, 153, 327, -1,140, 139, 329, -1,139, 138, 330, -1,330, 138, 331, -1,330, 20, + 329, -1,332, 137, 136, -1,332, 331, 137, -1,137, 331, 138, -1,136, 135, 152, -1,330, + 331, 22, -1,20, 330, 21, -1,21, 330, 22, -1,332, 152, 23, -1,152, 332, 136, -1,24, + 23, 152, -1,332, 23, 22, -1,332, 22, 331, -1,330, 329, 139, -1,41, 42, 333, -1,41, + 333, 40, -1,334, 333, 42, -1,43, 334, 42, -1,40, 333, 161, -1,45, 46, 338, -1,45, + 337, 44, -1,47, 338, 46, -1,43, 44, 335, -1,339, 47, 48, -1,334, 335, 160, -1,335, + 334, 43, -1,333, 28, 161, -1,333, 160, 28, -1,335, 159, 160, -1,160, 333, 334, -1, + 336, 337, 159, -1,337, 336, 44, -1,338, 337, 45, -1,337, 338, 158, -1,337, 158, 159, -1, + 158, 338, 339, -1,34, 158, 339, -1,338, 47, 339, -1,336, 159, 335, -1,335, 44, 336, -1, + 339, 48, 340, -1,49, 50, 342, -1,340, 341, 34, -1,340, 48, 341, -1,342, 341, 49, -1, + 341, 342, 157, -1,50, 51, 342, -1,341, 48, 49, -1,347, 54, 55, -1,53, 54, 346, -1, + 52, 53, 345, -1,343, 51, 52, -1,342, 51, 343, -1,347, 55, 56, -1,343, 344, 156, -1, + 344, 343, 52, -1,34, 341, 157, -1,156, 157, 343, -1,344, 345, 156, -1,157, 342, 343, -1, + 345, 346, 155, -1,346, 345, 53, -1,347, 346, 54, -1,346, 347, 155, -1,347, 0, 155, -1, + 0, 347, 154, -1,347, 56, 154, -1,345, 155, 156, -1,344, 52, 345, -1,340, 34, 339, -1, + 77, 78, 348, -1,77, 348, 74, -1,349, 348, 78, -1,79, 349, 78, -1,74, 348, 168, -1, + 81, 82, 353, -1,81, 352, 80, -1,83, 353, 82, -1,79, 80, 350, -1,354, 83, 84, -1,349, + 350, 167, -1,350, 349, 79, -1,348, 2, 168, -1,348, 167, 2, -1,350, 166, 167, -1,167, + 348, 349, -1,351, 352, 166, -1,352, 351, 80, -1,353, 352, 81, -1,352, 353, 165, -1, + 352, 165, 166, -1,165, 353, 354, -1,8, 165, 354, -1,353, 83, 354, -1,351, 166, 350, -1, + 350, 80, 351, -1,354, 84, 355, -1,85, 86, 357, -1,355, 356, 8, -1,355, 84, 356, -1, + 357, 356, 85, -1,356, 357, 164, -1,86, 87, 357, -1,356, 84, 85, -1,362, 90, 91, -1, + 89, 90, 361, -1,88, 89, 360, -1,358, 87, 88, -1,357, 87, 358, -1,362, 91, 92, -1, + 358, 359, 163, -1,359, 358, 88, -1,8, 356, 164, -1,163, 164, 358, -1,359, 360, 163, -1, + 164, 357, 358, -1,360, 361, 11, -1,361, 360, 89, -1,362, 361, 90, -1,361, 362, 11, -1, + 362, 12, 11, -1,12, 362, 162, -1,362, 92, 162, -1,360, 11, 163, -1,359, 88, 360, -1, + 355, 8, 354, -1,135, 143, 152, -1,363, 24, 152, -1,152, 143, 363, -1,169, 363, 143, -1, + 363, 26, 25, -1,26, 363, 169, -1,363, 25, 24, -1,169, 143, 144, -1,26, 144, 40, -1, + 40, 28, 26, -1,0, 56, 74, -1,74, 2, 0, -1,107, 108, 191, -1,106, 107, 190, -1,190, + 107, 191, -1,189, 105, 106, -1,190, 189, 106, -1,58, 194, 75, -1,109, 75, 193, -1, + 109, 193, 192, -1,108, 109, 192, -1,192, 191, 108, -1,75, 194, 193, -1,105, 189, + 188, -1,103, 104, 187, -1,102, 103, 186, -1,186, 103, 187, -1,102, 185, 184, -1,186, + 185, 102, -1,101, 102, 184, -1,104, 188, 187, -1,182, 100, 183, -1,101, 184, 183, -1, + 99, 100, 182, -1,183, 100, 101, -1,105, 188, 104, -1,195, 59, 60, -1,58, 59, 194, -1, + 194, 59, 195, -1,61, 196, 60, -1,60, 196, 195, -1,197, 196, 61, -1,61, 62, 197, -1, + 198, 197, 62, -1,63, 198, 62, -1,64, 199, 63, -1,198, 63, 199, -1,199, 64, 200, -1, + 205, 204, 68, -1,70, 206, 69, -1,205, 69, 206, -1,206, 70, 207, -1,69, 205, 68, -1, + 66, 201, 65, -1,200, 65, 201, -1,202, 201, 66, -1,203, 67, 204, -1,202, 66, 203, -1, + 67, 203, 66, -1,204, 67, 68, -1,64, 65, 200, -1,181, 98, 99, -1,180, 98, 181, -1, + 98, 180, 97, -1,97, 180, 179, -1,121, 171, 170, -1,120, 171, 121, -1,122, 121, 170, -1, + 120, 173, 172, -1,173, 120, 117, -1,171, 120, 172, -1,117, 174, 173, -1,178, 96, + 179, -1,97, 179, 96, -1,95, 96, 178, -1,94, 95, 177, -1,178, 177, 95, -1,110, 94, + 177, -1,175, 117, 118, -1,175, 174, 117, -1,176, 175, 118, -1,118, 119, 176, -1,110, + 176, 119, -1,110, 177, 176, -1,129, 217, 130, -1,217, 131, 130, -1,122, 170, 123, -1, + 216, 131, 217, -1,215, 131, 216, -1,71, 208, 207, -1,132, 215, 214, -1,72, 208, 71, -1, + 215, 132, 131, -1,70, 71, 207, -1,213, 133, 214, -1,132, 214, 133, -1,148, 133, 213, -1, + 212, 147, 213, -1,148, 213, 147, -1,146, 147, 212, -1,209, 72, 73, -1,209, 208, 72, -1, + 210, 209, 73, -1,38, 146, 211, -1,212, 211, 146, -1,38, 210, 73, -1,211, 210, 38, -1, + 181, 99, 182, -1,177, 218, 219, -1,219, 176, 177, -1,174, 221, 173, -1,364, 221, + 174, -1,366, 175, 176, -1,174, 175, 364, -1,364, 175, 365, -1,364, 222, 221, -1,365, + 223, 364, -1,222, 364, 223, -1,224, 223, 365, -1,176, 220, 366, -1,224, 366, 220, -1, + 220, 219, 224, -1,224, 365, 366, -1,175, 366, 365, -1,173, 221, 172, -1,172, 221, + 367, -1,170, 171, 369, -1,367, 171, 172, -1,368, 171, 367, -1,221, 222, 367, -1,367, + 225, 368, -1,225, 367, 222, -1,368, 225, 226, -1,369, 228, 170, -1,228, 369, 226, -1, + 226, 227, 228, -1,369, 368, 226, -1,368, 369, 171, -1,217, 234, 216, -1,216, 234, + 370, -1,214, 215, 372, -1,370, 215, 216, -1,371, 215, 370, -1,234, 229, 370, -1,370, + 230, 371, -1,230, 370, 229, -1,371, 230, 231, -1,372, 233, 214, -1,233, 372, 231, -1, + 231, 232, 233, -1,372, 371, 231, -1,371, 372, 215, -1,212, 235, 211, -1,373, 235, + 212, -1,375, 213, 214, -1,212, 213, 373, -1,373, 213, 374, -1,373, 236, 235, -1,374, + 237, 373, -1,236, 373, 237, -1,238, 237, 374, -1,214, 233, 375, -1,238, 375, 233, -1, + 233, 232, 238, -1,238, 374, 375, -1,213, 375, 374, -1,211, 236, 239, -1,239, 210, + 211, -1,241, 194, 195, -1,376, 195, 196, -1,378, 197, 198, -1,379, 198, 199, -1,197, + 377, 196, -1,195, 376, 241, -1,242, 241, 376, -1,243, 376, 377, -1,196, 377, 376, -1, + 198, 379, 378, -1,245, 378, 379, -1,246, 379, 380, -1,199, 380, 379, -1,378, 244, + 377, -1,197, 378, 377, -1,381, 380, 199, -1,381, 200, 201, -1,382, 201, 202, -1,203, + 204, 384, -1,204, 205, 385, -1,383, 202, 203, -1,386, 205, 206, -1,381, 201, 382, -1, + 248, 381, 382, -1,387, 206, 207, -1,207, 208, 388, -1,209, 210, 390, -1,389, 208, + 209, -1,382, 202, 383, -1,381, 199, 200, -1,381, 247, 380, -1,243, 377, 244, -1,244, + 378, 245, -1,203, 384, 383, -1,383, 384, 250, -1,384, 385, 251, -1,204, 385, 384, -1, + 246, 245, 379, -1,242, 376, 243, -1,246, 380, 247, -1,247, 381, 248, -1,382, 383, + 249, -1,384, 251, 250, -1,383, 250, 249, -1,248, 382, 249, -1,252, 251, 385, -1,206, + 387, 386, -1,253, 386, 387, -1,254, 387, 388, -1,207, 388, 387, -1,209, 390, 389, -1, + 256, 389, 390, -1,257, 390, 240, -1,210, 240, 390, -1,389, 255, 388, -1,208, 389, + 388, -1,386, 253, 252, -1,387, 254, 253, -1,389, 256, 255, -1,240, 239, 257, -1,390, + 257, 256, -1,388, 255, 254, -1,252, 385, 386, -1,205, 386, 385, -1,242, 258, 193, -1, + 193, 194, 242, -1,260, 177, 178, -1,391, 178, 179, -1,393, 180, 181, -1,394, 181, + 182, -1,180, 392, 179, -1,178, 391, 260, -1,218, 260, 391, -1,261, 391, 392, -1,179, + 392, 391, -1,181, 394, 393, -1,263, 393, 394, -1,264, 394, 395, -1,182, 395, 394, -1, + 393, 262, 392, -1,180, 393, 392, -1,396, 395, 182, -1,396, 183, 184, -1,397, 184, + 185, -1,186, 187, 399, -1,187, 188, 400, -1,398, 185, 186, -1,401, 188, 189, -1,396, + 184, 397, -1,266, 396, 397, -1,402, 189, 190, -1,190, 191, 403, -1,192, 193, 405, -1, + 404, 191, 192, -1,397, 185, 398, -1,396, 182, 183, -1,396, 265, 395, -1,261, 392, + 262, -1,262, 393, 263, -1,186, 399, 398, -1,398, 399, 268, -1,399, 400, 269, -1,187, + 400, 399, -1,264, 263, 394, -1,218, 391, 261, -1,264, 395, 265, -1,265, 396, 266, -1, + 397, 398, 267, -1,399, 269, 268, -1,398, 268, 267, -1,266, 397, 267, -1,270, 269, + 400, -1,189, 402, 401, -1,271, 401, 402, -1,272, 402, 403, -1,190, 403, 402, -1,192, + 405, 404, -1,274, 404, 405, -1,275, 405, 259, -1,193, 259, 405, -1,404, 273, 403, -1, + 191, 404, 403, -1,401, 271, 270, -1,402, 272, 271, -1,404, 274, 273, -1,259, 258, + 275, -1,405, 275, 274, -1,403, 273, 272, -1,270, 400, 401, -1,188, 401, 400, -1,126, + 217, 277, -1,217, 126, 229, -1,170, 227, 126, -1,126, 227, 229, -1,170, 126, 278, -1, + 276, 217, 129, -1,279, 123, 170, -1,279, 170, 278, -1,276, 277, 217, -1,410, 411, + 409, -1,409, 717, 408, -1,717, 409, 411, -1,411, 412, 717, -1,413, 408, 717, -1,407, + 408, 413, -1,406, 407, 413, -1,413, 717, 412, -1,433, 434, 432, -1,434, 435, 718, -1, + 434, 718, 432, -1,719, 718, 435, -1,719, 435, 436, -1,432, 718, 430, -1,719, 437, + 720, -1,721, 437, 438, -1,440, 723, 439, -1,438, 439, 722, -1,724, 440, 441, -1,725, + 441, 442, -1,437, 719, 436, -1,718, 719, 429, -1,431, 432, 430, -1,719, 720, 429, -1, + 721, 720, 437, -1,427, 720, 721, -1,430, 718, 429, -1,427, 428, 720, -1,429, 720, + 428, -1,721, 722, 427, -1,722, 723, 425, -1,723, 722, 439, -1,724, 723, 440, -1,723, + 724, 424, -1,426, 722, 425, -1,424, 725, 423, -1,424, 425, 723, -1,725, 424, 724, -1, + 724, 441, 725, -1,722, 426, 427, -1,721, 438, 722, -1,442, 443, 725, -1,443, 444, + 727, -1,444, 445, 728, -1,726, 727, 421, -1,726, 443, 727, -1,728, 446, 729, -1,728, + 727, 444, -1,446, 728, 445, -1,727, 728, 420, -1,726, 423, 725, -1,447, 448, 730, -1, + 730, 448, 731, -1,729, 730, 418, -1,729, 447, 730, -1,733, 449, 450, -1,732, 448, + 449, -1,452, 450, 451, -1,447, 729, 446, -1,728, 729, 419, -1,726, 422, 423, -1,730, + 731, 418, -1,726, 421, 422, -1,421, 727, 420, -1,419, 729, 418, -1,728, 419, 420, -1, + 731, 417, 418, -1,415, 732, 733, -1,733, 732, 449, -1,452, 733, 450, -1,414, 733, + 452, -1,416, 417, 732, -1,414, 415, 733, -1,416, 732, 415, -1,732, 417, 731, -1,731, + 448, 732, -1,726, 725, 443, -1,412, 472, 734, -1,472, 473, 735, -1,413, 734, 471, -1, + 413, 412, 734, -1,735, 474, 736, -1,735, 734, 472, -1,474, 735, 473, -1,734, 735, + 470, -1,736, 475, 737, -1,739, 476, 477, -1,738, 475, 476, -1,479, 741, 478, -1,477, + 478, 740, -1,742, 479, 480, -1,742, 480, 481, -1,475, 736, 474, -1,735, 736, 469, -1, + 406, 413, 471, -1,734, 470, 471, -1,738, 737, 475, -1,469, 736, 737, -1,467, 737, + 738, -1,470, 735, 469, -1,467, 468, 737, -1,469, 737, 468, -1,738, 739, 467, -1,739, + 740, 465, -1,740, 739, 477, -1,741, 742, 463, -1,742, 741, 479, -1,740, 478, 741, -1, + 740, 741, 464, -1,465, 466, 739, -1,463, 464, 741, -1,465, 740, 464, -1,463, 742, + 743, -1,739, 466, 467, -1,738, 476, 739, -1,742, 481, 743, -1,482, 483, 745, -1,484, + 485, 746, -1,483, 484, 746, -1,743, 744, 461, -1,744, 743, 482, -1,745, 746, 459, -1, + 746, 745, 483, -1,744, 482, 745, -1,744, 745, 460, -1,485, 747, 746, -1,482, 743, + 481, -1,486, 487, 748, -1,750, 487, 488, -1,748, 487, 749, -1,747, 748, 457, -1,747, + 486, 748, -1,752, 489, 490, -1,751, 488, 489, -1,432, 490, 433, -1,486, 747, 485, -1, + 746, 747, 458, -1,462, 743, 461, -1,745, 459, 460, -1,460, 461, 744, -1,749, 457, + 748, -1,459, 746, 458, -1,456, 457, 749, -1,747, 457, 458, -1,749, 750, 456, -1,750, + 751, 454, -1,751, 750, 488, -1,752, 432, 431, -1,432, 752, 490, -1,751, 489, 752, -1, + 751, 752, 453, -1,454, 455, 750, -1,431, 453, 752, -1,454, 751, 453, -1,750, 455, + 456, -1,749, 487, 750, -1,743, 462, 463, -1,552, 548, 547, -1,546, 545, 754, -1,545, + 544, 755, -1,411, 547, 546, -1,543, 542, 756, -1,541, 540, 756, -1,540, 539, 757, -1, + 756, 542, 541, -1,756, 544, 543, -1,552, 547, 553, -1,552, 551, 548, -1,549, 551, + 550, -1,553, 547, 491, -1,538, 537, 758, -1,537, 536, 758, -1,760, 535, 534, -1,535, + 759, 536, -1,761, 534, 533, -1,758, 539, 538, -1,551, 549, 548, -1,533, 532, 762, -1, + 531, 530, 762, -1,530, 529, 762, -1,762, 532, 531, -1,528, 527, 762, -1,527, 526, + 763, -1,525, 524, 764, -1,524, 523, 765, -1,763, 526, 525, -1,762, 529, 528, -1,522, + 521, 765, -1,520, 519, 767, -1,519, 518, 768, -1,766, 521, 520, -1,517, 516, 768, -1, + 516, 515, 769, -1,514, 513, 770, -1,513, 512, 771, -1,770, 515, 514, -1,768, 518, + 517, -1,765, 523, 522, -1,491, 547, 753, -1,410, 753, 547, -1,411, 546, 754, -1,544, + 495, 494, -1,755, 493, 754, -1,495, 756, 757, -1,755, 544, 494, -1,492, 491, 753, -1, + 545, 755, 754, -1,539, 758, 757, -1,757, 758, 496, -1,758, 759, 497, -1,536, 759, + 758, -1,534, 761, 760, -1,760, 761, 499, -1,761, 762, 500, -1,533, 762, 761, -1,498, + 759, 760, -1,535, 760, 759, -1,753, 410, 492, -1,540, 757, 756, -1,410, 547, 411, -1, + 754, 493, 412, -1,755, 494, 493, -1,754, 412, 411, -1,757, 496, 495, -1,758, 497, + 496, -1,760, 499, 498, -1,761, 500, 499, -1,759, 498, 497, -1,544, 756, 495, -1,501, + 500, 762, -1,525, 764, 763, -1,763, 764, 502, -1,504, 765, 766, -1,765, 503, 764, -1, + 505, 766, 767, -1,521, 766, 765, -1,501, 762, 763, -1,524, 765, 764, -1,519, 768, + 767, -1,767, 768, 506, -1,768, 769, 507, -1,516, 769, 768, -1,513, 771, 770, -1,770, + 771, 433, -1,771, 511, 510, -1,512, 511, 771, -1,508, 769, 770, -1,515, 770, 769, -1, + 763, 502, 501, -1,520, 767, 766, -1,764, 503, 502, -1,766, 505, 504, -1,767, 506, + 505, -1,765, 504, 503, -1,769, 508, 507, -1,770, 509, 508, -1,771, 510, 433, -1,511, + 435, 510, -1,770, 433, 509, -1,768, 507, 506, -1,527, 763, 762, -1,574, 435, 511, -1, + 572, 573, 773, -1,574, 772, 573, -1,570, 571, 775, -1,568, 569, 777, -1,567, 568, + 778, -1,570, 776, 569, -1,572, 774, 571, -1,773, 573, 772, -1,772, 511, 575, -1,775, + 571, 774, -1,774, 773, 577, -1,775, 774, 580, -1,776, 570, 775, -1,772, 576, 773, -1, + 774, 572, 773, -1,568, 585, 778, -1,569, 776, 777, -1,778, 566, 567, -1,585, 568, + 777, -1,779, 778, 585, -1,778, 779, 566, -1,776, 583, 777, -1,566, 779, 780, -1,775, + 580, 776, -1,772, 574, 511, -1,781, 563, 564, -1,783, 561, 562, -1,784, 560, 561, -1, + 562, 563, 782, -1,786, 558, 559, -1,558, 557, 451, -1,556, 557, 558, -1,785, 559, + 560, -1,564, 565, 780, -1,782, 563, 781, -1,781, 780, 591, -1,784, 561, 783, -1,783, + 782, 592, -1,784, 783, 593, -1,785, 560, 784, -1,781, 592, 782, -1,783, 562, 782, -1, + 556, 558, 555, -1,558, 554, 555, -1,558, 787, 554, -1,786, 785, 599, -1,787, 558, + 786, -1,785, 786, 559, -1,784, 594, 785, -1,781, 564, 780, -1,565, 566, 780, -1,779, + 586, 780, -1,576, 772, 575, -1,578, 774, 577, -1,579, 774, 578, -1,577, 773, 576, -1, + 581, 776, 580, -1,583, 776, 582, -1,584, 777, 583, -1,582, 776, 581, -1,580, 774, + 579, -1,586, 779, 585, -1,588, 780, 587, -1,589, 780, 588, -1,587, 780, 586, -1,591, + 780, 590, -1,593, 783, 592, -1,594, 784, 593, -1,592, 781, 591, -1,590, 780, 589, -1, + 585, 777, 584, -1,601, 554, 787, -1,596, 785, 595, -1,597, 785, 596, -1,594, 595, + 785, -1,607, 554, 603, -1,550, 605, 549, -1,606, 605, 550, -1,606, 607, 604, -1,598, + 785, 597, -1,599, 785, 598, -1,600, 787, 786, -1,600, 601, 787, -1,600, 786, 599, -1, + 603, 554, 602, -1,604, 605, 606, -1,605, 548, 549, -1,603, 604, 607, -1,602, 554, + 601, -1,575, 511, 512, -1,889, 888, 887, -1,889, 886, 609, -1,611, 885, 577, -1,886, + 889, 887, -1,885, 611, 891, -1,888, 890, 610, -1,512, 889, 609, -1,891, 608, 890, -1, + 617, 616, 612, -1,613, 612, 616, -1,612, 583, 617, -1,615, 586, 614, -1,614, 613, + 615, -1,615, 613, 616, -1,622, 590, 621, -1,621, 893, 622, -1,624, 896, 892, -1,895, + 623, 894, -1,894, 620, 893, -1,892, 897, 624, -1,896, 619, 895, -1,897, 898, 618, -1, + 618, 898, 594, -1,901, 628, 603, -1,899, 901, 902, -1,626, 625, 902, -1,626, 902, + 900, -1,900, 548, 627, -1,902, 625, 899, -1,512, 630, 904, -1,632, 903, 631, -1,629, + 516, 905, -1,905, 903, 632, -1,904, 631, 903, -1,636, 634, 906, -1,633, 906, 907, -1, + 635, 548, 634, -1,636, 635, 634, -1,907, 544, 633, -1,642, 641, 637, -1,637, 641, + 638, -1,637, 531, 642, -1,640, 536, 639, -1,641, 640, 638, -1,639, 638, 640, -1,643, + 648, 523, -1,644, 647, 643, -1,648, 643, 647, -1,645, 646, 644, -1,646, 647, 644, -1, + 646, 645, 527, -1,657, 548, 656, -1,791, 655, 603, -1,794, 603, 602, -1,655, 788, + 656, -1,788, 655, 791, -1,658, 657, 788, -1,789, 788, 791, -1,791, 603, 794, -1,653, + 794, 654, -1,794, 602, 654, -1,797, 653, 652, -1,794, 792, 791, -1,657, 656, 788, -1, + 652, 598, 800, -1,598, 597, 800, -1,596, 595, 800, -1,595, 594, 800, -1,800, 597, + 596, -1,651, 650, 803, -1,650, 649, 806, -1,590, 589, 661, -1,589, 588, 661, -1,661, + 649, 590, -1,803, 594, 651, -1,653, 797, 794, -1,789, 791, 792, -1,790, 658, 789, -1, + 790, 789, 792, -1,792, 794, 795, -1,798, 795, 797, -1,795, 794, 797, -1,796, 795, + 798, -1,801, 798, 797, -1,795, 793, 792, -1,658, 788, 789, -1,793, 659, 790, -1,658, + 790, 659, -1,792, 793, 790, -1,799, 659, 796, -1,793, 796, 659, -1,802, 659, 799, -1, + 798, 799, 796, -1,795, 796, 793, -1,802, 799, 798, -1,803, 801, 800, -1,797, 800, + 801, -1,804, 801, 803, -1,594, 803, 800, -1,807, 806, 661, -1,803, 806, 804, -1,804, + 806, 807, -1,649, 661, 806, -1,804, 802, 801, -1,650, 806, 803, -1,807, 805, 804, -1, + 802, 804, 805, -1,805, 659, 802, -1,808, 805, 807, -1,659, 808, 660, -1,807, 660, + 808, -1,805, 808, 659, -1,661, 660, 807, -1,802, 798, 801, -1,652, 800, 797, -1,908, + 598, 599, -1,908, 599, 910, -1,910, 652, 600, -1,653, 909, 600, -1,654, 909, 653, -1, + 653, 600, 652, -1,579, 662, 580, -1,580, 663, 581, -1,663, 580, 662, -1,912, 542, + 541, -1,540, 914, 913, -1,540, 913, 541, -1,915, 665, 917, -1,541, 913, 912, -1,539, + 538, 911, -1,915, 914, 540, -1,664, 917, 665, -1,539, 911, 916, -1,664, 916, 917, -1, + 519, 918, 919, -1,666, 518, 918, -1,521, 520, 920, -1,667, 919, 920, -1,661, 588, + 587, -1,661, 586, 615, -1,809, 615, 616, -1,586, 661, 587, -1,616, 812, 809, -1,661, + 615, 809, -1,660, 661, 809, -1,617, 812, 616, -1,815, 583, 582, -1,617, 583, 812, -1, + 812, 583, 815, -1,812, 810, 809, -1,815, 581, 663, -1,818, 662, 579, -1,579, 578, + 821, -1,662, 818, 663, -1,821, 578, 577, -1,815, 663, 818, -1,816, 815, 818, -1,821, + 577, 671, -1,671, 670, 824, -1,670, 512, 827, -1,818, 579, 821, -1,815, 582, 581, -1, + 815, 813, 812, -1,810, 812, 813, -1,811, 660, 810, -1,816, 818, 819, -1,814, 813, + 816, -1,817, 816, 819, -1,818, 821, 819, -1,813, 811, 810, -1,813, 815, 816, -1,814, + 659, 811, -1,660, 811, 659, -1,813, 814, 811, -1,820, 659, 817, -1,814, 817, 659, -1, + 823, 659, 820, -1,819, 820, 817, -1,816, 817, 814, -1,823, 820, 819, -1,824, 822, + 821, -1,819, 821, 822, -1,825, 822, 824, -1,671, 824, 821, -1,828, 827, 669, -1,824, + 827, 825, -1,825, 827, 828, -1,512, 669, 827, -1,825, 823, 822, -1,670, 827, 824, -1, + 828, 826, 825, -1,823, 825, 826, -1,826, 659, 823, -1,829, 826, 828, -1,659, 829, + 668, -1,828, 668, 829, -1,826, 829, 659, -1,669, 668, 828, -1,823, 819, 822, -1,660, + 809, 810, -1,669, 512, 674, -1,833, 673, 516, -1,836, 516, 517, -1,673, 830, 674, -1, + 830, 673, 833, -1,668, 669, 830, -1,831, 830, 833, -1,833, 516, 836, -1,666, 836, + 518, -1,836, 517, 518, -1,839, 836, 666, -1,836, 834, 833, -1,669, 674, 830, -1,667, + 521, 842, -1,522, 523, 842, -1,523, 648, 845, -1,842, 521, 522, -1,848, 672, 646, -1, + 672, 845, 648, -1,676, 646, 527, -1,527, 677, 676, -1,677, 529, 676, -1,667, 842, + 839, -1,839, 666, 667, -1,839, 837, 836, -1,831, 833, 834, -1,832, 668, 831, -1,837, + 839, 840, -1,835, 834, 837, -1,838, 837, 840, -1,839, 842, 840, -1,834, 832, 831, -1, + 834, 836, 837, -1,835, 659, 832, -1,668, 832, 659, -1,834, 835, 832, -1,841, 659, + 838, -1,835, 838, 659, -1,844, 659, 841, -1,840, 841, 838, -1,837, 838, 835, -1,844, + 841, 840, -1,845, 843, 842, -1,840, 842, 843, -1,846, 843, 845, -1,523, 845, 842, -1, + 849, 848, 676, -1,845, 848, 846, -1,846, 848, 849, -1,646, 676, 848, -1,846, 844, + 843, -1,672, 848, 845, -1,849, 847, 846, -1,844, 846, 847, -1,847, 659, 844, -1,850, + 847, 849, -1,659, 850, 675, -1,849, 675, 850, -1,847, 850, 659, -1,676, 675, 849, -1, + 844, 840, 843, -1,668, 830, 831, -1,676, 529, 530, -1,676, 531, 637, -1,851, 637, + 638, -1,531, 676, 530, -1,851, 638, 854, -1,675, 676, 851, -1,852, 851, 854, -1,638, + 639, 854, -1,854, 639, 536, -1,536, 537, 857, -1,857, 854, 536, -1,676, 637, 851, -1, + 857, 538, 664, -1,665, 542, 863, -1,542, 543, 863, -1,665, 860, 664, -1,863, 543, + 544, -1,857, 664, 860, -1,858, 857, 860, -1,863, 544, 633, -1,633, 634, 866, -1,634, + 548, 869, -1,665, 863, 860, -1,857, 537, 538, -1,857, 855, 854, -1,852, 854, 855, -1, + 853, 675, 852, -1,858, 860, 861, -1,856, 855, 858, -1,859, 858, 861, -1,860, 863, + 861, -1,855, 853, 852, -1,855, 857, 858, -1,856, 659, 853, -1,675, 853, 659, -1,855, + 856, 853, -1,862, 659, 859, -1,856, 859, 659, -1,865, 659, 862, -1,861, 862, 859, -1, + 858, 859, 856, -1,865, 862, 861, -1,866, 864, 863, -1,861, 863, 864, -1,867, 864, + 866, -1,633, 866, 863, -1,870, 869, 657, -1,866, 869, 867, -1,867, 869, 870, -1,548, + 657, 869, -1,867, 865, 864, -1,634, 869, 866, -1,870, 868, 867, -1,865, 867, 868, -1, + 868, 659, 865, -1,871, 868, 870, -1,659, 871, 658, -1,870, 658, 871, -1,868, 871, + 659, -1,657, 658, 870, -1,865, 861, 864, -1,675, 851, 852, -1,410, 872, 921, -1,685, + 491, 492, -1,922, 685, 492, -1,873, 683, 684, -1,872, 873, 684, -1,683, 874, 682, -1, + 684, 685, 872, -1,921, 872, 922, -1,410, 686, 678, -1,408, 678, 686, -1,678, 873, + 872, -1,873, 874, 683, -1,874, 873, 679, -1,874, 680, 681, -1,680, 874, 679, -1,873, + 678, 679, -1,874, 681, 682, -1,678, 872, 410, -1,685, 922, 872, -1,695, 694, 875, -1, + 693, 692, 877, -1,451, 878, 692, -1,876, 694, 693, -1,691, 692, 414, -1,451, 557, + 690, -1,557, 556, 690, -1,691, 451, 692, -1,681, 680, 695, -1,695, 875, 681, -1,687, + 681, 875, -1,688, 875, 876, -1,682, 681, 687, -1,687, 875, 688, -1,694, 876, 875, -1, + 692, 878, 877, -1,690, 877, 878, -1,690, 689, 877, -1,689, 876, 877, -1,689, 688, + 876, -1,451, 690, 878, -1,693, 877, 876, -1,607, 697, 554, -1,696, 697, 607, -1,704, + 551, 552, -1,696, 550, 704, -1,704, 550, 551, -1,698, 697, 696, -1,699, 698, 703, -1, + 702, 700, 699, -1,704, 703, 696, -1,699, 703, 702, -1,700, 702, 701, -1,698, 696, + 703, -1,879, 705, 554, -1,879, 554, 697, -1,880, 697, 706, -1,556, 879, 690, -1,879, + 556, 705, -1,690, 880, 712, -1,880, 690, 879, -1,879, 697, 880, -1,706, 707, 880, -1, + 711, 880, 881, -1,881, 707, 708, -1,881, 708, 709, -1,709, 708, 701, -1,880, 711, + 712, -1,710, 709, 682, -1,710, 711, 881, -1,709, 710, 881, -1,881, 880, 707, -1,701, + 702, 882, -1,702, 703, 882, -1,682, 709, 882, -1,882, 715, 682, -1,883, 715, 882, -1, + 709, 701, 882, -1,882, 703, 883, -1,883, 703, 884, -1,884, 703, 716, -1,552, 713, + 716, -1,884, 716, 713, -1,684, 883, 714, -1,884, 491, 714, -1,491, 884, 713, -1,883, + 884, 714, -1,883, 684, 715, -1,2137, 958, 937, -1,946, 943, 942, -1,946, 945, 944, -1, + 943, 946, 944, -1,942, 941, 983, -1,988, 987, 941, -1,984, 987, 986, -1,941, 989, + 988, -1,941, 987, 984, -1,940, 989, 941, -1,947, 946, 942, -1,958, 2137, 2138, -1, + 947, 983, 982, -1,942, 983, 947, -1,954, 949, 981, -1,948, 947, 982, -1,949, 948, + 982, -1,986, 985, 984, -1,981, 980, 1907, -1,980, 979, 1907, -1,981, 949, 982, -1, + 941, 984, 983, -1,932, 931, 1912, -1,931, 930, 1914, -1,2140, 2139, 957, -1,1911, + 933, 932, -1,2139, 937, 957, -1,929, 928, 1916, -1,927, 926, 1918, -1,926, 925, 1919, -1, + 1917, 928, 927, -1,1915, 930, 929, -1,992, 991, 990, -1,973, 972, 974, -1,989, 969, + 992, -1,1908, 969, 940, -1,934, 933, 1911, -1,1908, 940, 939, -1,969, 1908, 970, -1, + 971, 970, 1908, -1,975, 972, 971, -1,940, 969, 989, -1,989, 992, 990, -1,934, 1910, + 935, -1,953, 950, 949, -1,2138, 936, 958, -1,978, 1907, 979, -1,977, 1907, 978, -1, + 974, 972, 975, -1,975, 971, 955, -1,956, 955, 939, -1,952, 950, 953, -1,1908, 939, + 955, -1,938, 1909, 939, -1,938, 2140, 957, -1,956, 1909, 938, -1,954, 977, 976, -1, + 949, 954, 953, -1,1907, 977, 954, -1,1907, 954, 981, -1,975, 954, 976, -1,938, 957, + 956, -1,954, 975, 955, -1,1909, 956, 939, -1,1908, 955, 971, -1,957, 937, 958, -1, + 959, 958, 936, -1,936, 935, 959, -1,959, 1910, 934, -1,934, 960, 959, -1,1912, 931, + 1913, -1,961, 1912, 1913, -1,962, 1913, 1914, -1,1913, 931, 1914, -1,1912, 960, 1911, -1, + 1911, 932, 1912, -1,1915, 929, 1916, -1,964, 1915, 1916, -1,965, 1916, 1917, -1,1916, + 928, 1917, -1,1918, 926, 1919, -1,967, 1918, 1919, -1,968, 1919, 924, -1,1919, 925, + 924, -1,1918, 966, 1917, -1,1917, 927, 1918, -1,1915, 963, 1914, -1,1914, 930, 1915, -1, + 934, 1911, 960, -1,1913, 962, 961, -1,1914, 963, 962, -1,1912, 961, 960, -1,1916, + 965, 964, -1,1917, 966, 965, -1,1919, 968, 967, -1,924, 923, 968, -1,1918, 967, 966, -1, + 1915, 964, 963, -1,1910, 959, 935, -1,951, 950, 952, -1,1006, 2144, 2143, -1,1018, + 1921, 1019, -1,2142, 1933, 2141, -1,1016, 1923, 1017, -1,1015, 1924, 1016, -1,1933, + 2142, 997, -1,1018, 1017, 1922, -1,2143, 1000, 1006, -1,1013, 1926, 1014, -1,1927, + 1013, 1012, -1,1012, 1011, 1928, -1,1011, 1010, 1929, -1,2144, 1006, 1001, -1,1015, + 1014, 1925, -1,1045, 1932, 1008, -1,1046, 1045, 1008, -1,1045, 1044, 1932, -1,1007, + 1046, 1008, -1,1009, 1008, 1931, -1,1050, 1049, 1007, -1,1048, 1007, 1049, -1,1051, + 1050, 1007, -1,1046, 1007, 1047, -1,1007, 1048, 1047, -1,1010, 1009, 1930, -1,1020, + 1019, 1920, -1,1007, 1006, 1052, -1,1055, 1054, 1053, -1,1055, 1053, 1052, -1,944, + 1005, 943, -1,943, 1004, 1006, -1,1000, 1056, 1006, -1,1052, 1006, 1056, -1,1056, + 1055, 1052, -1,1000, 1057, 1056, -1,1051, 1007, 1052, -1,1039, 1036, 998, -1,1036, + 1000, 999, -1,1036, 999, 998, -1,1037, 1036, 1039, -1,1001, 1004, 1003, -1,943, 1005, + 1004, -1,1001, 1003, 1002, -1,1004, 1001, 1006, -1,944, 945, 1005, -1,1933, 998, + 2141, -1,1000, 1036, 1057, -1,1038, 1037, 1039, -1,924, 925, 1020, -1,1920, 1019, + 1921, -1,923, 924, 1920, -1,1922, 1017, 1923, -1,1022, 1921, 1922, -1,1023, 1922, + 1923, -1,1923, 1016, 1924, -1,1921, 1021, 1920, -1,1921, 1018, 1922, -1,1925, 1014, + 1926, -1,1025, 1924, 1925, -1,1026, 1925, 1926, -1,1926, 1013, 1927, -1,1928, 1011, + 1929, -1,1028, 1927, 1928, -1,1029, 1928, 1929, -1,1929, 1010, 1930, -1,1927, 1027, + 1926, -1,1927, 1012, 1928, -1,1924, 1024, 1923, -1,1924, 1015, 1925, -1,1920, 1021, + 923, -1,1922, 1023, 1022, -1,1923, 1024, 1023, -1,1921, 1022, 1021, -1,1925, 1026, + 1025, -1,1926, 1027, 1026, -1,1928, 1029, 1028, -1,1929, 1030, 1029, -1,1927, 1028, + 1027, -1,1924, 1025, 1024, -1,1031, 1030, 1929, -1,1008, 1932, 1931, -1,1932, 1044, + 1033, -1,1032, 1931, 1932, -1,1033, 1044, 1043, -1,1931, 1031, 1930, -1,995, 997, + 996, -1,998, 1040, 1039, -1,997, 995, 994, -1,952, 993, 951, -1,1931, 1930, 1009, -1, + 1034, 1042, 1041, -1,1033, 1032, 1932, -1,1033, 1043, 1034, -1,1043, 1042, 1034, -1, + 1040, 1034, 1041, -1,994, 1035, 997, -1,998, 1035, 1040, -1,1035, 998, 1933, -1,1933, + 997, 1035, -1,993, 952, 953, -1,1035, 994, 953, -1,1035, 1034, 1040, -1,994, 993, + 953, -1,1032, 1031, 1931, -1,1031, 1929, 1930, -1,924, 1020, 1920, -1,1061, 1063, + 1062, -1,1059, 1061, 1060, -1,1063, 1061, 1064, -1,1064, 1061, 1934, -1,1066, 1065, + 1934, -1,1064, 1934, 1065, -1,1059, 1066, 1934, -1,1058, 1067, 1059, -1,1066, 1059, + 1067, -1,1061, 1059, 1934, -1,1935, 1020, 925, -1,1936, 1019, 1020, -1,1087, 1935, + 1089, -1,1935, 925, 1089, -1,1937, 1018, 1936, -1,1020, 1935, 1936, -1,1019, 1936, + 1018, -1,1086, 1936, 1935, -1,1938, 1017, 1937, -1,1016, 1017, 1939, -1,1015, 1941, + 1014, -1,1940, 1015, 1016, -1,1013, 1014, 1942, -1,1012, 1013, 1943, -1,1018, 1937, + 1017, -1,1085, 1937, 1936, -1,1087, 1089, 1088, -1,1937, 1085, 1938, -1,1017, 1938, + 1939, -1,1939, 1938, 1084, -1,1086, 1935, 1087, -1,1938, 1085, 1084, -1,1086, 1085, + 1936, -1,1084, 1083, 1939, -1,1081, 1941, 1940, -1,1015, 1940, 1941, -1,1080, 1943, + 1942, -1,1013, 1942, 1943, -1,1942, 1014, 1941, -1,1080, 1942, 1941, -1,1940, 1083, + 1082, -1,1941, 1081, 1080, -1,1081, 1940, 1082, -1,1080, 1079, 1943, -1,1939, 1083, + 1940, -1,1940, 1016, 1939, -1,1943, 1011, 1012, -1,1945, 1010, 1011, -1,1946, 1009, + 1010, -1,1077, 1945, 1944, -1,1945, 1011, 1944, -1,1947, 1008, 1946, -1,1010, 1945, + 1946, -1,1009, 1946, 1008, -1,1076, 1946, 1945, -1,1943, 1079, 1944, -1,1948, 1007, + 1947, -1,942, 943, 1950, -1,943, 1006, 1950, -1,1006, 1007, 1949, -1,942, 1951, 941, -1, + 941, 1068, 940, -1,1068, 941, 1951, -1,1008, 1947, 1007, -1,1075, 1947, 1946, -1, + 1079, 1078, 1944, -1,1948, 1947, 1075, -1,1078, 1077, 1944, -1,1076, 1945, 1077, -1, + 1948, 1075, 1074, -1,1076, 1075, 1946, -1,1074, 1949, 1948, -1,1074, 1073, 1949, -1, + 1950, 1949, 1073, -1,1072, 1950, 1073, -1,942, 1950, 1951, -1,1950, 1006, 1949, -1, + 1951, 1950, 1071, -1,1950, 1072, 1071, -1,1951, 1070, 1069, -1,1070, 1951, 1071, -1, + 1069, 1068, 1951, -1,1949, 1007, 1948, -1,1011, 1943, 1944, -1,1098, 932, 933, -1, + 1952, 932, 1098, -1,931, 1952, 1953, -1,932, 1952, 931, -1,930, 931, 1954, -1,1097, + 1952, 1098, -1,1097, 1096, 1952, -1,1953, 1952, 1096, -1,1095, 1953, 1096, -1,1094, + 1955, 1954, -1,930, 1954, 1955, -1,1954, 1095, 1094, -1,1094, 1093, 1955, -1,1953, + 1095, 1954, -1,1954, 931, 1953, -1,1955, 929, 930, -1,1956, 928, 929, -1,1957, 928, + 1956, -1,1955, 1093, 1956, -1,1957, 926, 927, -1,925, 926, 1089, -1,1957, 1958, 926, -1, + 928, 1957, 927, -1,1092, 1957, 1956, -1,1092, 1956, 1093, -1,1091, 1957, 1092, -1, + 1090, 1089, 1958, -1,926, 1958, 1089, -1,1089, 1090, 1088, -1,1091, 1090, 1958, -1, + 1957, 1091, 1958, -1,929, 1955, 1956, -1,2145, 1078, 1118, -1,1134, 1133, 1132, -1, + 1132, 1135, 1134, -1,1132, 1131, 1959, -1,2146, 1117, 1078, -1,1130, 1129, 1961, -1, + 1129, 1128, 1961, -1,1128, 1127, 1962, -1,1130, 1960, 1131, -1,1136, 1132, 1959, -1, + 1078, 2145, 2146, -1,1130, 1961, 1960, -1,1959, 1131, 1960, -1,1961, 1128, 1962, -1, + 1086, 1960, 1961, -1,1085, 1961, 1962, -1,1127, 1126, 1962, -1,1960, 1087, 1959, -1, + 1083, 1126, 1963, -1,1126, 1125, 1963, -1,1083, 1963, 1125, -1,1084, 1962, 1126, -1, + 1136, 1135, 1132, -1,1108, 1968, 1109, -1,1110, 1109, 1967, -1,1969, 1108, 1107, -1, + 1107, 1106, 1969, -1,2148, 1120, 1080, -1,2149, 1081, 1123, -1,1102, 1106, 1103, -1, + 1105, 1104, 1106, -1,1103, 1106, 1104, -1,1106, 1100, 1969, -1,1081, 2149, 1122, -1, + 1966, 1112, 1111, -1,1964, 1116, 1115, -1,1964, 1117, 1116, -1,1115, 1114, 1965, -1, + 1102, 1101, 1106, -1,1966, 1113, 1112, -1,1106, 1101, 1100, -1,1111, 1110, 1967, -1, + 1114, 1113, 1966, -1,1077, 1964, 1115, -1,2147, 1118, 1079, -1,1084, 1085, 1962, -1, + 1123, 1082, 1124, -1,2147, 1079, 1119, -1,1122, 1121, 1081, -1,1080, 1121, 2148, -1, + 1120, 1119, 1079, -1,1087, 1088, 1136, -1,1087, 1960, 1086, -1,1084, 1126, 1083, -1, + 1083, 1125, 1082, -1,1086, 1961, 1085, -1,1123, 1081, 1082, -1,1120, 1079, 1080, -1, + 1118, 1078, 1079, -1,1121, 1080, 1081, -1,1125, 1124, 1082, -1,1114, 1966, 1965, -1, + 1967, 1075, 1966, -1,1969, 1073, 1968, -1,1074, 1967, 1968, -1,1965, 1966, 1076, -1, + 1109, 1968, 1967, -1,1964, 1077, 1117, -1,1111, 1967, 1966, -1,1969, 1100, 1099, -1, + 1099, 1139, 1071, -1,1099, 1071, 1969, -1,1138, 1070, 1139, -1,1115, 1076, 1077, -1, + 1108, 1969, 1968, -1,1076, 1966, 1075, -1,1074, 1968, 1073, -1,1073, 1969, 1072, -1, + 1075, 1967, 1074, -1,1139, 1070, 1071, -1,1071, 1072, 1969, -1,1138, 1137, 1070, -1, + 1137, 1069, 1070, -1,1076, 1115, 1965, -1,1077, 1078, 1117, -1,1087, 1136, 1959, -1, + 1970, 1147, 1146, -1,1971, 1091, 1146, -1,1970, 1146, 1092, -1,1970, 1092, 1147, -1, + 1145, 1971, 1146, -1,1141, 1140, 1136, -1,1140, 1135, 1136, -1,1136, 1142, 1141, -1, + 1144, 1972, 1145, -1,1971, 1145, 1972, -1,1136, 1144, 1143, -1,1972, 1144, 1136, -1, + 1142, 1136, 1143, -1,1136, 1090, 1972, -1,2150, 1093, 2151, -1,1972, 1091, 1971, -1, + 1095, 1154, 1153, -1,1095, 2154, 2153, -1,1152, 1095, 1153, -1,1096, 1097, 1155, -1, + 2155, 1096, 1155, -1,1096, 1154, 1095, -1,1096, 2155, 1154, -1,1095, 2153, 1094, -1, + 2152, 1149, 1094, -1,1094, 2153, 1150, -1,1149, 1148, 1093, -1,1093, 1094, 1149, -1, + 1150, 2152, 1094, -1,1092, 2150, 1147, -1,1091, 1972, 1090, -1,1090, 1136, 1088, -1, + 1092, 1146, 1091, -1,1093, 1148, 2151, -1,1152, 2154, 1095, -1,1152, 1151, 2154, -1, + 1093, 2150, 1092, -1,1160, 1109, 1110, -1,1973, 1108, 1109, -1,1974, 1973, 1160, -1, + 1109, 1160, 1973, -1,1973, 1974, 1107, -1,1106, 1107, 1974, -1,1107, 1108, 1973, -1, + 1159, 1974, 1160, -1,1161, 1105, 1106, -1,1975, 1161, 1106, -1,1156, 1161, 1157, -1, + 1158, 1974, 1159, -1,1158, 1157, 1975, -1,1161, 1975, 1157, -1,1974, 1158, 1975, -1, + 1106, 1974, 1975, -1,1167, 1132, 1133, -1,1976, 1132, 1167, -1,1165, 1167, 1166, -1, + 1165, 1164, 1976, -1,1976, 1164, 1977, -1,1165, 1976, 1167, -1,1131, 1132, 1976, -1, + 1976, 1977, 1131, -1,1130, 1131, 1977, -1,1978, 1130, 1977, -1,1129, 1130, 1168, -1, + 1162, 1978, 1163, -1,1977, 1163, 1978, -1,1978, 1162, 1168, -1,1168, 1130, 1978, -1, + 1164, 1163, 1977, -1,1209, 1166, 1167, -1,1167, 1133, 1979, -1,1979, 1134, 1135, -1, + 1134, 1979, 1133, -1,1135, 1208, 1979, -1,1207, 1979, 1208, -1,1262, 2157, 1186, -1, + 1241, 2173, 1233, -1,1187, 2157, 1226, -1,1207, 1206, 1979, -1,1205, 1204, 1979, -1, + 1979, 1206, 1205, -1,1203, 1202, 1980, -1,1201, 1200, 1982, -1,1981, 1202, 1201, -1, + 1980, 1204, 1203, -1,1979, 1209, 1167, -1,1202, 1981, 1980, -1,1979, 1204, 1980, -1, + 1979, 1980, 1213, -1,1982, 1216, 1201, -1,1981, 1201, 1215, -1,1981, 1214, 1980, -1, + 1200, 1199, 1983, -1,1200, 1216, 1982, -1,1194, 1221, 2160, -1,1200, 1983, 1217, -1, + 1210, 1209, 1979, -1,1218, 1199, 1984, -1,1199, 1198, 1984, -1,1218, 1198, 1197, -1, + 1151, 1219, 2162, -1,1219, 1151, 1196, -1,2162, 1219, 2163, -1,1195, 1220, 2161, -1, + 1218, 1984, 1198, -1,1217, 1983, 1199, -1,1221, 1194, 1193, -1,1192, 1191, 1222, -1, + 1192, 1221, 1193, -1,1189, 1188, 1225, -1,1188, 1187, 1225, -1,2157, 1252, 1226, -1, + 1263, 1186, 2189, -1,2187, 2186, 1186, -1,1262, 1186, 2186, -1,2157, 1262, 1261, -1, + 1254, 1260, 2185, -1,1260, 2157, 1261, -1,1185, 1184, 1177, -1,1183, 1182, 1178, -1, + 1186, 1185, 1264, -1,2188, 2189, 1186, -1,1246, 1265, 1264, -1,1183, 1178, 1184, -1, + 1231, 1229, 2171, -1,1185, 1246, 1264, -1,1186, 1186, 2189, -1,1190, 1223, 2159, -1, + 1224, 2158, 1189, -1,1979, 1213, 1210, -1,1190, 2158, 1223, -1,2185, 1255, 1254, -1, + 1253, 2157, 1254, -1,2157, 1253, 1252, -1,1226, 1252, 1251, -1,1250, 1226, 1251, -1, + 1259, 2179, 1255, -1,1239, 1237, 1236, -1,2174, 1240, 1235, -1,1236, 1235, 1239, -1, + 2182, 1256, 2181, -1,1237, 1239, 1238, -1,1235, 1240, 1239, -1,1220, 1219, 1196, -1, + 2184, 2179, 1259, -1,1211, 1213, 1212, -1,2170, 2164, 1232, -1,1213, 1980, 1214, -1, + 1215, 1201, 1216, -1,2169, 2165, 2168, -1,1217, 1199, 1218, -1,2168, 2165, 2166, -1, + 1216, 1200, 1217, -1,1233, 2176, 1241, -1,1214, 1981, 1215, -1,1220, 1195, 1221, -1, + 2167, 1230, 2165, -1,1223, 1222, 2159, -1,2189, 1186, 1186, -1,1221, 1192, 1222, -1, + 1224, 1189, 1225, -1,2166, 1231, 2168, -1,2157, 1260, 1254, -1,1186, 2190, 2188, -1, + 1226, 1225, 1187, -1,2166, 1229, 1231, -1,1224, 1223, 2158, -1,1218, 1197, 1219, -1, + 2171, 1229, 2170, -1,1227, 1226, 1250, -1,2167, 2165, 2169, -1,1229, 2164, 2170, -1, + 1232, 1228, 1243, -1,1185, 1177, 1246, -1,1178, 1182, 1181, -1,1178, 1181, 1180, -1, + 1180, 1179, 1178, -1,2156, 1177, 1184, -1,1176, 1175, 1246, -1,1174, 1227, 1175, -1, + 1178, 2156, 1184, -1,1246, 1177, 1176, -1,2160, 1221, 1195, -1,2173, 2175, 1234, -1, + 1228, 1265, 1245, -1,1244, 1243, 1228, -1,1243, 1242, 1232, -1,2172, 2176, 1233, -1, + 1227, 1248, 1247, -1,2173, 1241, 2175, -1,1172, 1174, 1173, -1,1265, 1246, 1245, -1, + 1174, 1172, 1171, -1,1175, 1227, 1246, -1,2161, 1220, 1196, -1,1174, 1169, 1227, -1, + 1169, 1174, 1170, -1,2163, 1219, 1197, -1,1174, 1171, 1170, -1,1227, 1250, 1249, -1, + 1244, 1228, 1245, -1,1228, 1232, 2164, -1,1213, 1211, 1210, -1,2172, 1232, 1242, -1, + 1191, 2159, 1222, -1,1240, 2174, 2175, -1,1234, 2175, 2174, -1,1227, 1249, 2178, -1, + 2176, 2172, 1242, -1,2177, 1227, 1247, -1,1227, 2177, 1246, -1,2178, 1248, 1227, -1, + 1256, 2180, 2181, -1,1257, 1256, 2182, -1,1257, 2182, 2183, -1,2183, 1258, 1257, -1, + 2184, 2180, 2179, -1,2180, 2184, 2181, -1,2185, 1259, 1255, -1,2187, 1186, 1263, -1, + 2190, 1186, 1264, -1,1182, 1183, 1289, -1,1310, 1288, 1287, -1,1288, 1290, 1289, -1, + 1287, 1286, 1316, -1,1283, 1987, 1284, -1,1286, 1285, 1986, -1,1986, 1285, 1284, -1, + 1283, 1282, 1988, -1,1281, 1988, 1282, -1,1290, 1182, 1289, -1,1310, 2192, 1985, -1, + 1287, 1311, 1310, -1,1310, 1985, 1331, -1,1290, 1288, 1291, -1,1288, 1310, 1330, -1, + 1290, 1181, 1182, -1,1986, 1316, 1286, -1,1315, 1313, 1312, -1,1284, 1987, 1986, -1, + 1987, 1283, 1988, -1,1297, 1987, 1988, -1,1988, 1281, 1298, -1,1281, 1989, 1299, -1, + 1987, 1296, 1986, -1,1316, 1312, 1287, -1,1333, 2191, 1310, -1,1287, 1312, 1311, -1, + 1280, 1989, 1281, -1,1996, 1271, 1270, -1,1990, 1280, 1279, -1,1995, 1272, 1271, -1, + 1266, 1211, 1999, -1,1266, 1999, 1267, -1,1267, 1998, 1268, -1,1268, 1998, 1269, -1, + 1211, 1266, 1210, -1,1995, 1273, 1272, -1,1991, 1278, 1277, -1,1302, 1276, 1992, -1, + 1991, 1301, 1278, -1,1990, 1278, 1300, -1,1991, 1277, 1301, -1,1302, 1277, 1276, -1, + 1990, 1279, 1278, -1,1275, 1992, 1276, -1,1270, 1269, 1997, -1,1275, 1274, 1993, -1, + 1994, 1274, 1273, -1,1994, 1304, 1274, -1,1993, 1274, 1303, -1,1994, 1273, 1304, -1, + 1273, 1995, 1305, -1,1303, 1275, 1993, -1,1271, 1996, 1995, -1,1302, 1992, 1275, -1, + 1300, 1280, 1990, -1,2192, 1310, 2191, -1,1299, 1989, 1280, -1,1329, 1292, 1291, -1, + 1328, 1293, 1329, -1,1292, 1329, 1293, -1,1295, 1293, 1328, -1,1330, 1329, 1291, -1, + 1333, 1332, 2191, -1,1327, 1326, 1325, -1,1310, 1331, 1330, -1,1295, 1328, 1327, -1, + 1313, 1315, 1314, -1,1324, 1295, 1327, -1,1171, 1294, 1170, -1,1327, 1325, 1324, -1, + 1294, 1295, 1169, -1,1170, 1294, 1169, -1,1323, 1295, 1324, -1,1321, 1320, 1319, -1, + 1295, 1323, 1322, -1,1319, 1322, 1321, -1,1322, 1319, 1318, -1,1318, 1295, 1322, -1, + 1293, 1295, 1294, -1,1316, 1986, 1317, -1,1986, 1296, 1318, -1,1318, 1317, 1986, -1, + 1318, 1296, 1295, -1,1987, 1297, 1296, -1,1270, 1997, 1996, -1,1996, 1997, 1306, -1, + 1997, 1998, 1307, -1,1269, 1998, 1997, -1,1308, 1998, 1999, -1,1302, 1301, 1277, -1, + 1299, 1298, 1281, -1,1988, 1298, 1297, -1,1267, 1999, 1998, -1,1316, 1315, 1312, -1, + 1299, 1280, 1300, -1,1300, 1278, 1301, -1,1303, 1274, 1304, -1,1304, 1273, 1305, -1, + 1302, 1275, 1303, -1,1996, 1306, 1305, -1,1997, 1307, 1306, -1,1999, 1309, 1308, -1, + 2192, 2193, 1985, -1,1999, 1212, 1309, -1,1985, 2193, 1331, -1,1998, 1308, 1307, -1, + 1995, 1996, 1305, -1,1211, 1212, 1999, -1,1291, 1288, 1330, -1,1335, 1374, 1371, -1, + 1334, 1374, 1335, -1,1372, 1371, 1374, -1,1374, 1373, 1372, -1,1370, 2000, 1371, -1, + 2001, 1342, 1370, -1,1335, 1371, 1338, -1,2000, 1370, 1342, -1,1369, 2001, 1370, -1, + 2002, 1369, 1368, -1,2002, 1368, 2003, -1,1367, 2003, 1368, -1,1343, 1369, 2002, -1, + 1343, 2001, 1369, -1,1371, 2000, 1341, -1,1366, 1365, 2004, -1,1359, 1360, 1156, -1, + 1361, 1360, 1362, -1,1362, 1360, 1363, -1,2194, 2195, 1358, -1,2196, 1359, 1358, -1, + 2005, 1159, 1357, -1,1364, 2005, 1365, -1,2005, 2194, 1159, -1,2194, 1358, 1159, -1, + 1363, 1360, 1359, -1,2003, 1366, 2004, -1,2003, 1367, 1366, -1,2003, 1344, 2002, -1, + 2005, 1364, 2194, -1,1339, 1338, 1371, -1,1337, 1335, 1338, -1,2005, 1346, 1365, -1, + 1340, 1371, 1341, -1,1339, 1371, 1340, -1,2004, 1365, 1346, -1,1336, 1335, 1337, -1, + 1342, 2001, 1343, -1,1341, 2000, 1342, -1,1344, 2004, 1345, -1,1345, 2004, 1346, -1, + 1344, 2003, 2004, -1,1343, 2002, 1344, -1,1347, 1346, 2005, -1,1348, 1356, 1110, -1, + 1347, 1357, 1356, -1,1348, 1110, 1355, -1,1355, 1113, 1352, -1,1356, 1348, 1347, -1, + 1355, 1350, 1349, -1,1355, 1351, 1350, -1,1354, 1352, 1113, -1,1352, 1351, 1355, -1, + 1354, 1353, 1352, -1,1359, 2196, 1363, -1,1348, 1355, 1349, -1,2195, 2196, 1358, -1, + 1347, 2005, 1357, -1,1380, 1380, 1381, -1,1375, 1379, 1380, -1,1379, 1377, 1378, -1, + 1376, 1377, 1379, -1,1380, 1381, 1382, -1,1376, 1379, 1375, -1,1382, 1383, 1380, -1, + 1380, 1383, 1373, -1,1373, 1421, 1371, -1,1385, 1421, 1373, -1,1380, 1373, 1375, -1, + 1373, 1383, 1384, -1,1414, 1415, 1416, -1,1412, 1413, 1411, -1,1413, 1410, 1411, -1, + 1414, 1418, 1413, -1,1414, 1416, 1417, -1,1363, 1419, 1361, -1,1409, 1361, 1408, -1, + 1418, 1414, 1417, -1,1418, 1409, 1413, -1,1409, 1410, 1413, -1,1409, 1418, 1361, -1, + 1407, 1361, 1419, -1,1387, 1420, 1421, -1,1387, 1388, 1420, -1,1421, 1385, 1386, -1, + 1386, 1387, 1421, -1,1389, 1287, 1388, -1,1287, 1389, 1390, -1,1287, 1391, 1392, -1, + 1396, 1392, 1393, -1,1392, 1396, 1287, -1,1396, 1393, 1394, -1,1395, 1396, 1394, -1, + 1391, 1287, 1390, -1,1420, 1388, 1287, -1,1407, 1408, 1361, -1,1419, 1406, 1407, -1, + 1420, 1405, 1419, -1,1419, 1405, 1406, -1,1404, 1405, 1420, -1,1403, 1404, 1420, -1, + 1420, 1186, 1403, -1,1397, 1401, 1186, -1,1399, 1397, 1398, -1,1402, 1186, 1401, -1, + 1400, 1401, 1397, -1,1399, 1400, 1397, -1,1186, 1402, 1403, -1,1420, 1287, 1186, -1, + 1385, 1373, 1384, -1,1363, 1364, 2006, -1,2009, 2006, 2007, -1,2012, 2009, 2010, -1, + 1363, 2006, 2009, -1,1364, 1422, 2006, -1,1363, 2009, 2012, -1,1366, 2007, 2006, -1, + 2010, 2009, 2007, -1,2010, 2007, 2008, -1,2013, 2010, 2011, -1,2013, 2012, 2010, -1, + 1366, 1367, 2007, -1,1422, 1366, 2006, -1,2012, 2013, 2016, -1,1363, 2015, 2018, -1, + 2015, 1363, 2012, -1,2021, 1363, 2018, -1,2021, 2018, 2019, -1,2024, 1363, 2021, -1, + 2015, 2016, 2018, -1,2024, 2021, 2022, -1,2019, 2018, 2016, -1,2019, 2016, 2017, -1, + 2027, 2024, 2025, -1,2027, 2030, 1363, -1,2028, 2030, 2027, -1,2031, 1419, 2030, -1, + 2030, 1419, 1363, -1,2021, 2019, 2022, -1,2024, 2027, 1363, -1,2015, 2012, 2016, -1, + 2013, 2014, 2016, -1,1368, 2008, 2007, -1,1423, 2008, 1368, -1,2008, 1423, 1370, -1, + 2011, 2008, 1371, -1,2011, 2010, 2008, -1,2013, 2011, 2014, -1,1371, 2008, 1370, -1, + 2011, 1371, 2014, -1,2017, 1371, 2020, -1,1371, 2017, 2014, -1,2020, 1371, 2023, -1, + 2017, 2020, 2019, -1,2014, 2017, 2016, -1,2019, 2020, 2022, -1,2022, 2025, 2024, -1, + 2025, 2022, 2023, -1,2028, 2031, 2030, -1,2031, 2028, 2029, -1,1420, 2031, 2032, -1, + 2031, 1420, 1419, -1,2025, 2026, 2028, -1,2025, 2028, 2027, -1,2023, 2026, 2025, -1, + 2023, 1371, 2026, -1,2026, 1371, 2029, -1,2026, 2029, 2028, -1,2032, 1371, 1421, -1, + 2032, 2029, 1371, -1,2032, 1421, 1420, -1,2029, 2032, 2031, -1,2022, 2020, 2023, -1, + 2007, 1367, 1368, -1,1433, 1434, 1269, -1,2200, 1432, 1434, -1,1435, 1434, 1432, -1, + 1435, 1432, 1272, -1,1437, 1436, 2033, -1,2036, 1440, 1439, -1,2034, 1438, 1437, -1, + 1436, 1435, 2199, -1,1439, 1438, 2035, -1,1431, 2033, 2199, -1,1272, 2199, 1435, -1, + 2034, 2033, 1431, -1,1436, 2199, 2033, -1,1430, 2035, 2034, -1,2034, 1437, 2033, -1, + 1430, 1429, 2035, -1,2036, 2035, 1429, -1,1276, 2036, 1429, -1,2034, 2035, 1438, -1, + 1431, 1430, 2034, -1,2035, 2036, 1439, -1,1445, 2197, 1425, -1,2036, 2037, 1440, -1, + 2198, 2197, 1445, -1,1443, 1442, 2039, -1,2038, 1441, 2037, -1,1441, 2038, 1442, -1, + 2037, 2036, 1428, -1,1444, 1443, 2040, -1,1424, 1284, 1446, -1,1445, 1425, 1446, -1, + 1424, 1446, 1425, -1,1426, 2038, 1427, -1,1442, 2038, 2039, -1,1428, 2036, 1276, -1, + 1428, 1427, 2037, -1,1426, 2039, 2038, -1,1427, 2038, 2037, -1,1444, 2040, 2198, -1, + 1444, 2198, 1445, -1,1280, 2039, 1426, -1,2040, 2039, 1280, -1,2040, 1443, 2039, -1, + 2200, 1434, 1433, -1,1441, 1440, 2037, -1,2198, 2040, 1280, -1,1454, 2201, 1448, -1, + 1454, 1448, 1447, -1,2201, 1453, 1452, -1,2201, 1449, 1448, -1,1450, 1452, 1451, -1, + 1449, 1452, 1450, -1,1452, 1449, 2201, -1,1475, 1458, 1476, -1,1476, 1124, 1477, -1, + 1459, 1474, 1473, -1,1459, 1122, 1474, -1,1474, 1122, 1475, -1,1472, 1120, 2203, -1, + 1457, 1478, 1477, -1,2202, 2042, 1479, -1,2042, 1480, 1479, -1,1478, 1457, 1126, -1, + 1458, 1475, 1122, -1,1457, 1477, 1124, -1,1458, 1124, 1476, -1,2203, 1459, 1473, -1, + 2202, 1479, 1478, -1,1471, 1120, 1472, -1,2203, 1473, 1472, -1,1460, 1471, 1470, -1, + 1461, 1470, 1469, -1,1469, 1468, 1117, -1,1462, 1468, 2204, -1,1460, 1120, 1471, -1, + 1461, 1469, 1117, -1,1466, 2043, 1467, -1,1117, 1468, 1462, -1,2044, 1466, 1465, -1, + 2207, 2206, 1162, -1,1354, 1465, 1464, -1,1353, 1354, 1464, -1,1467, 2204, 1468, -1, + 1460, 1470, 1461, -1,2202, 1456, 2042, -1,1481, 2205, 1129, -1,2205, 1128, 1129, -1, + 1480, 2042, 2041, -1,1456, 2041, 2042, -1,2041, 1456, 1128, -1,1128, 2205, 2041, -1, + 1455, 2206, 1481, -1,1480, 2041, 2205, -1,1483, 1482, 1486, -1,1483, 1485, 1484, -1, + 1485, 1483, 1486, -1,1455, 1481, 1129, -1,1482, 1162, 1486, -1,2206, 1455, 1162, -1, + 2207, 1162, 1482, -1,2044, 1115, 2043, -1,1115, 2204, 2043, -1,2204, 1467, 2043, -1, + 2044, 1465, 1463, -1,1465, 1113, 1463, -1,1465, 1354, 1113, -1,1463, 1115, 2044, -1, + 1466, 2044, 2043, -1,1126, 2202, 1478, -1,1523, 1518, 2045, -1,1518, 1517, 2045, -1, + 1516, 2046, 1517, -1,2046, 1516, 1515, -1,1514, 1513, 1528, -1,2049, 1513, 1512, -1, + 1514, 2047, 1515, -1,1335, 1519, 1518, -1,1517, 2046, 2045, -1,1524, 2045, 2046, -1, + 1514, 2048, 2047, -1,1527, 2047, 2048, -1,2047, 1526, 2046, -1,1515, 2047, 2046, -1, + 1512, 2050, 2049, -1,1529, 2049, 2050, -1,2050, 1512, 2218, -1,2048, 1514, 1528, -1, + 2049, 1528, 1513, -1,1335, 1336, 1519, -1,1497, 1496, 1499, -1,1500, 1499, 1496, -1, + 1496, 1495, 1500, -1,1501, 1500, 1495, -1,1498, 1451, 1452, -1,1497, 1498, 1453, -1, + 1452, 1453, 1498, -1,1499, 1498, 1497, -1,1504, 1503, 2052, -1,1495, 1494, 1501, -1, + 2209, 1502, 1501, -1,1493, 2208, 1502, -1,1503, 1502, 2208, -1,2209, 1493, 1502, -1, + 1528, 2049, 1529, -1,1528, 1527, 2048, -1,1526, 2047, 1527, -1,2046, 1526, 1525, -1, + 1530, 1511, 1510, -1,1531, 1510, 1509, -1,1530, 2218, 1511, -1,1530, 1510, 1531, -1, + 1529, 2218, 1530, -1,1335, 1522, 1521, -1,1335, 1521, 1520, -1,1520, 1334, 1335, -1, + 1509, 1532, 1531, -1,1524, 2046, 1525, -1,1523, 2045, 1524, -1,1522, 1518, 1523, -1, + 1508, 1532, 1509, -1,2051, 2210, 1504, -1,1492, 2052, 2208, -1,2052, 1492, 2051, -1, + 1504, 2052, 2051, -1,2210, 2051, 1491, -1,2052, 1503, 2208, -1,2211, 1489, 1506, -1, + 1488, 1487, 1507, -1,1487, 1533, 2217, -1,1533, 1532, 1508, -1,1492, 1491, 2051, -1, + 1490, 2210, 1491, -1,1490, 1489, 2211, -1,1506, 1489, 2214, -1,1488, 1507, 2215, -1, + 2217, 1533, 1508, -1,1494, 2209, 1501, -1,1522, 1335, 1518, -1,1490, 1505, 2210, -1, + 2212, 1490, 2211, -1,2213, 1490, 2212, -1,1490, 2213, 1505, -1,1489, 1488, 2214, -1, + 2215, 2214, 1488, -1,1487, 2216, 1507, -1,2217, 2216, 1487, -1,2050, 2218, 1529, -1, + 1380, 2219, 1381, -1,1380, 1546, 2219, -1,1381, 2219, 2220, -1,1546, 1528, 2219, -1, + 2220, 1529, 1381, -1,1529, 1382, 1381, -1,1383, 1382, 1545, -1,1384, 1383, 2054, -1, + 2055, 1385, 1384, -1,2056, 1386, 1385, -1,1529, 2053, 1382, -1,1386, 2057, 1387, -1, + 2053, 1545, 1382, -1,1544, 2054, 1383, -1,1545, 1544, 1383, -1,1529, 1545, 2053, -1, + 2054, 1544, 1543, -1,1543, 1533, 2055, -1,2055, 2054, 1543, -1,1542, 2056, 2055, -1, + 1385, 2055, 2056, -1,1386, 2056, 2057, -1,1542, 2057, 2056, -1,2055, 1487, 1542, -1, + 2057, 1542, 1541, -1,2058, 2057, 1541, -1,1533, 1487, 2055, -1,2055, 1384, 2054, -1, + 2058, 1387, 2057, -1,2061, 1389, 2060, -1,2060, 1389, 1388, -1,1540, 2059, 2058, -1, + 1388, 2058, 2059, -1,1388, 2059, 2060, -1,1540, 2060, 2059, -1,1390, 1389, 2061, -1, + 1387, 2058, 1388, -1,1394, 1393, 2065, -1,1394, 2065, 1395, -1,2063, 1392, 1391, -1, + 1393, 1392, 2064, -1,2062, 1391, 1390, -1,1396, 1395, 2066, -1,1539, 2062, 2061, -1, + 1390, 2061, 2062, -1,1391, 2062, 2063, -1,1538, 2063, 2062, -1,1539, 2060, 1540, -1, + 2062, 1539, 1538, -1,1538, 1537, 2063, -1,2061, 2060, 1539, -1,1537, 2065, 2064, -1, + 1393, 2064, 2065, -1,1395, 2065, 2066, -1,1536, 2066, 2065, -1,1536, 2065, 1537, -1, + 2066, 1536, 1535, -1,2066, 1535, 1534, -1,1534, 1396, 2066, -1,2063, 1537, 2064, -1, + 2064, 1392, 2063, -1,1541, 1540, 2058, -1,1548, 1547, 1397, -1,1191, 1547, 1548, -1, + 1397, 1549, 1548, -1,1397, 1186, 1550, -1,1397, 1550, 1549, -1,1396, 1444, 1552, -1, + 1396, 1552, 1551, -1,1396, 1286, 1287, -1,1396, 1284, 1285, -1,1396, 1285, 1286, -1, + 1284, 1396, 1551, -1,1440, 1535, 1439, -1,1555, 1535, 1440, -1,1396, 1554, 1553, -1, + 1555, 1554, 1535, -1,1396, 1535, 1554, -1,1444, 1396, 1553, -1,1399, 1398, 2068, -1, + 2229, 1408, 2230, -1,1400, 1399, 2068, -1,1397, 2067, 1398, -1,2068, 1398, 2067, -1, + 1568, 2068, 2067, -1,1570, 2067, 1397, -1,2068, 2069, 1400, -1,2070, 1402, 1401, -1, + 2071, 1402, 2070, -1,1566, 2070, 2069, -1,2070, 1401, 2069, -1,1404, 1403, 2072, -1, + 1403, 1402, 2071, -1,1405, 1404, 2073, -1,1400, 2069, 1401, -1,1567, 2069, 2068, -1, + 1547, 1569, 1570, -1,1569, 2067, 1570, -1,1568, 2067, 1569, -1,2069, 1567, 1566, -1, + 1568, 1567, 2068, -1,2222, 1411, 2223, -1,1564, 2072, 2071, -1,1403, 2071, 2072, -1, + 1404, 2072, 2073, -1,1563, 2073, 2072, -1,2071, 1565, 1564, -1,2225, 1410, 1559, -1, + 2073, 1563, 936, -1,1563, 2072, 1564, -1,2074, 2073, 936, -1,2070, 1566, 1565, -1, + 2071, 2070, 1565, -1,2074, 1405, 2073, -1,1413, 1412, 2221, -1,1408, 940, 1409, -1, + 1410, 1409, 1559, -1,1407, 1406, 1561, -1,1407, 1560, 1408, -1,2226, 1559, 1409, -1, + 2225, 2224, 1410, -1,1557, 1412, 2222, -1,2228, 1408, 1560, -1,1556, 1413, 2221, -1, + 1412, 1411, 2222, -1,2223, 1411, 1558, -1,1412, 1557, 2221, -1,1556, 2221, 1099, -1, + 2224, 1558, 1410, -1,2227, 1409, 1069, -1,1410, 1558, 1411, -1,1562, 2075, 2074, -1, + 2074, 2075, 1405, -1,1561, 2076, 1407, -1,2075, 1561, 1406, -1,2075, 1562, 1561, -1, + 1407, 2076, 1560, -1,1560, 2076, 1561, -1,2230, 1408, 2228, -1,936, 1562, 2074, -1, + 940, 1068, 1409, -1,940, 1408, 2229, -1,2226, 1409, 2227, -1,1068, 1069, 1409, -1, + 1406, 1405, 2075, -1,1413, 1099, 1571, -1,1571, 1101, 1414, -1,1571, 1414, 1413, -1, + 1574, 1575, 1101, -1,1573, 2077, 1574, -1,1575, 1574, 2077, -1,2077, 1414, 1575, -1, + 2077, 1415, 1414, -1,1416, 1415, 2078, -1,2079, 1417, 1416, -1,1417, 2079, 1572, -1, + 2079, 2078, 1573, -1,2078, 2077, 1573, -1,1573, 1103, 2079, -1,1416, 2078, 2079, -1, + 2079, 1103, 1572, -1,1415, 2077, 2078, -1,1334, 2080, 1374, -1,2080, 1334, 1576, -1, + 1375, 1373, 1374, -1,1374, 2080, 1375, -1,1576, 1521, 1577, -1,1375, 1577, 1376, -1, + 1375, 2080, 1577, -1,1577, 2080, 1576, -1,1103, 1104, 1572, -1,1417, 1572, 2081, -1, + 1105, 1572, 1104, -1,2081, 1572, 1105, -1,1161, 1156, 2081, -1,2081, 1156, 1360, -1, + 2081, 1418, 1417, -1,1418, 1360, 1361, -1,1360, 1418, 2081, -1,2081, 1105, 1161, -1, + 1577, 1377, 1376, -1,2082, 1378, 1377, -1,2082, 1577, 1521, -1,1521, 1522, 2082, -1, + 2082, 1522, 2083, -1,2082, 1377, 1577, -1,2083, 1378, 2082, -1,2084, 1378, 2083, -1, + 1379, 1378, 2084, -1,1524, 2084, 1579, -1,2083, 1579, 2084, -1,2084, 1524, 1578, -1, + 1578, 1379, 2084, -1,1522, 1579, 2083, -1,1379, 1525, 1380, -1,1379, 1524, 1525, -1, + 1525, 1580, 1380, -1,1527, 1528, 1380, -1,1380, 1580, 1380, -1,1380, 1580, 1527, -1, + 1193, 1547, 1581, -1,1191, 1581, 1547, -1,936, 1583, 1582, -1,1582, 1583, 934, -1, + 2233, 1584, 2085, -1,934, 1583, 933, -1,1584, 1585, 2086, -1,1098, 933, 1583, -1, + 1584, 2233, 1583, -1,2085, 1584, 2232, -1,2233, 1097, 1583, -1,1098, 1583, 1097, -1, + 1585, 1154, 2086, -1,2086, 1592, 1584, -1,1154, 1592, 2086, -1,2087, 1591, 1154, -1, + 2232, 1584, 1592, -1,2087, 1154, 1585, -1,1589, 2089, 2231, -1,1585, 1586, 2087, -1, + 2088, 1586, 1587, -1,2089, 1587, 1547, -1,1588, 1194, 1547, -1,1193, 1194, 1588, -1, + 1588, 1547, 1547, -1,2088, 2089, 1153, -1,2089, 2088, 1587, -1,1153, 1591, 2088, -1, + 2089, 1590, 1153, -1,1591, 2087, 2088, -1,2231, 2089, 1547, -1,1151, 1590, 1589, -1, + 1589, 1590, 2089, -1,1194, 2231, 1547, -1,2232, 2233, 2085, -1,2088, 2087, 1586, -1, + 1210, 1634, 1635, -1,1634, 1210, 1633, -1,1210, 1635, 1636, -1,1637, 1638, 1210, -1, + 1636, 1637, 1210, -1,1210, 1638, 1607, -1,1594, 1595, 1631, -1,1631, 1595, 1630, -1, + 1594, 1631, 1632, -1,1632, 1633, 1594, -1,1594, 1633, 1210, -1,1608, 1609, 1166, -1, + 1608, 1166, 1210, -1,1166, 1610, 1611, -1,1610, 1166, 1609, -1,1166, 1611, 1593, -1, + 1608, 1210, 1607, -1,1613, 1614, 1593, -1,1612, 1613, 1593, -1,1593, 1615, 1616, -1, + 1615, 1593, 1614, -1,1593, 1616, 1606, -1,1612, 1593, 1611, -1,1630, 1595, 1596, -1, + 1628, 1629, 1596, -1,1596, 1629, 1630, -1,1628, 1596, 1597, -1,1627, 1628, 1597, -1, + 1598, 1626, 1627, -1,1627, 1597, 1598, -1,1599, 1625, 1626, -1,1625, 1599, 1600, -1, + 1599, 1626, 1598, -1,1624, 1600, 1601, -1,1600, 1624, 1625, -1,1624, 1601, 1623, -1, + 1605, 1619, 1604, -1,1618, 1619, 1605, -1,1618, 1606, 1617, -1,1606, 1618, 1605, -1, + 1617, 1606, 1616, -1,1619, 1620, 1604, -1,1622, 1623, 1602, -1,1602, 1623, 1601, -1, + 1622, 1602, 1621, -1,1620, 1603, 1604, -1,1603, 1620, 1621, -1,1603, 1621, 1602, -1, + 1640, 1439, 1535, -1,1641, 1640, 1535, -1,1639, 1594, 1643, -1,1639, 1642, 1641, -1, + 1641, 1535, 1639, -1,1642, 1639, 1435, -1,1594, 1269, 1643, -1,1639, 1643, 1435, -1, + 1594, 1267, 1268, -1,1594, 1210, 1266, -1,1594, 1266, 1267, -1,1594, 1268, 1269, -1, + 2091, 1596, 1595, -1,1594, 2090, 1595, -1,2091, 1595, 2090, -1,1653, 2091, 2090, -1, + 1655, 2090, 1594, -1,2091, 2092, 1596, -1,1599, 1598, 2094, -1,2093, 1597, 2092, -1, + 1597, 2093, 1598, -1,1596, 2092, 1597, -1,2095, 1600, 1599, -1,1652, 2092, 2091, -1, + 1654, 1655, 1535, -1,2090, 1655, 1654, -1,2091, 1653, 1652, -1,1654, 1653, 2090, -1, + 1650, 2094, 2093, -1,1598, 2093, 2094, -1,1599, 2094, 2095, -1,1649, 2095, 2094, -1, + 2093, 1651, 1650, -1,2094, 1650, 1649, -1,1649, 2096, 2095, -1,1652, 1651, 2093, -1, + 2092, 1652, 2093, -1,2095, 2096, 1600, -1,2096, 1602, 1601, -1,1647, 2097, 2096, -1, + 1602, 2096, 2097, -1,2097, 2098, 1603, -1,1646, 2098, 2097, -1,1603, 1602, 2097, -1, + 1649, 1648, 2096, -1,2098, 2099, 1656, -1,1657, 1606, 1605, -1,2099, 1605, 1656, -1, + 1603, 2098, 1656, -1,1657, 1605, 1489, -1,1648, 1647, 2096, -1,2098, 1645, 2099, -1, + 1646, 2097, 1647, -1,1645, 2098, 1646, -1,1645, 1644, 2099, -1,2100, 1489, 1605, -1, + 1490, 1657, 1489, -1,1658, 1489, 2100, -1,1644, 1487, 2100, -1,1658, 2100, 1487, -1, + 2099, 1644, 2100, -1,2100, 1605, 2099, -1,1601, 1600, 2096, -1,1490, 1491, 1663, -1, + 1664, 1665, 1663, -1,1491, 1664, 1663, -1,1606, 1663, 1593, -1,1593, 1494, 1666, -1, + 1494, 1593, 1663, -1,1663, 1665, 1494, -1,1666, 1667, 1662, -1,1667, 1668, 1662, -1, + 1668, 1661, 1662, -1,1661, 1668, 1453, -1,1661, 1659, 1660, -1,1659, 1661, 1453, -1, + 1660, 1659, 1447, -1,1666, 1662, 1593, -1,1672, 1593, 1671, -1,1671, 2101, 1672, -1, + 2101, 2102, 1165, -1,2102, 2101, 1671, -1,1164, 1670, 1660, -1,1671, 1670, 2102, -1, + 2102, 1670, 1164, -1,1166, 1672, 2101, -1,2102, 1164, 1165, -1,1166, 2101, 1165, -1, + 1660, 1669, 1164, -1,1163, 1164, 1669, -1,1163, 1484, 1673, -1,1162, 1163, 1486, -1, + 1673, 1486, 1163, -1,1163, 1669, 1484, -1,1687, 1688, 1689, -1,1677, 1685, 1687, -1, + 1689, 1675, 1687, -1,1686, 1687, 1685, -1,1683, 1684, 1685, -1,1685, 1681, 1683, -1, + 1689, 1674, 1675, -1,1675, 1676, 1677, -1,1679, 1685, 1677, -1,1679, 1677, 1678, -1, + 1683, 1681, 1682, -1,1679, 1680, 1681, -1,1679, 1681, 1685, -1,1687, 1675, 1677, -1, + 2103, 1682, 1701, -1,2104, 1701, 1700, -1,2106, 1699, 1698, -1,2107, 1698, 1697, -1, + 1699, 2105, 1700, -1,1701, 2104, 2103, -1,1704, 2103, 2104, -1,1705, 2104, 2105, -1, + 1700, 2105, 2104, -1,1698, 2107, 2106, -1,1707, 2106, 2107, -1,1708, 2107, 2108, -1, + 1697, 2108, 2107, -1,2106, 1706, 2105, -1,1699, 2106, 2105, -1,2103, 1702, 1682, -1, + 1696, 2108, 1697, -1,1692, 2113, 1693, -1,1693, 2111, 1694, -1,1674, 2117, 1691, -1, + 2115, 1692, 1691, -1,2110, 1695, 1694, -1,1695, 2110, 2109, -1,2108, 1696, 2109, -1, + 1710, 2109, 2110, -1,1694, 2111, 2110, -1,2111, 1693, 2112, -1,1712, 2111, 2112, -1, + 1713, 2112, 2113, -1,2112, 1693, 2113, -1,2111, 1711, 2110, -1,1696, 1695, 2109, -1, + 1692, 2114, 2113, -1,2109, 1709, 2108, -1,1703, 1623, 1702, -1,2103, 1704, 1703, -1, + 1705, 2105, 1706, -1,1704, 2104, 1705, -1,2106, 1707, 1706, -1,1708, 2108, 1709, -1, + 1707, 2107, 1708, -1,2111, 1712, 1711, -1,1710, 2110, 1711, -1,2109, 1710, 1709, -1, + 2112, 1713, 1712, -1,1715, 2114, 2115, -1,1714, 1713, 2113, -1,1716, 2115, 2116, -1, + 1692, 2115, 2114, -1,1691, 2117, 2116, -1,2116, 2117, 1717, -1,2117, 1690, 1718, -1, + 1674, 1690, 2117, -1,2114, 1714, 2113, -1,1691, 2116, 2115, -1,2115, 1716, 1715, -1, + 2116, 1717, 1716, -1,1717, 2117, 1718, -1,1718, 1690, 1607, -1,1715, 1714, 2114, -1, + 2103, 1703, 1702, -1,2118, 1690, 1674, -1,1730, 1690, 2118, -1,1729, 2118, 1674, -1, + 1728, 2120, 1729, -1,2122, 1728, 1727, -1,2118, 1729, 2119, -1,1729, 2120, 2119, -1, + 1732, 2119, 2120, -1,1733, 2120, 2121, -1,1728, 2121, 2120, -1,1727, 2123, 2122, -1, + 1735, 2122, 2123, -1,1736, 2123, 2124, -1,1727, 2124, 2123, -1,2122, 1734, 2121, -1, + 1728, 2122, 2121, -1,2119, 1731, 2118, -1,1726, 2124, 1727, -1,2125, 1726, 1725, -1, + 2126, 1725, 1724, -1,1723, 1722, 2128, -1,1722, 1721, 2129, -1,1723, 2127, 1724, -1, + 2126, 1724, 2127, -1,1738, 2125, 2126, -1,1739, 2126, 2127, -1,1720, 2130, 1721, -1, + 1720, 1719, 2131, -1,1719, 1682, 2132, -1,2127, 1723, 2128, -1,2125, 1725, 2126, -1, + 2125, 2124, 1726, -1,2125, 1737, 2124, -1,1735, 2123, 1736, -1,1736, 2124, 1737, -1, + 2127, 1740, 1739, -1,1738, 1737, 2125, -1,1738, 2126, 1739, -1,1735, 1734, 2122, -1, + 2119, 1732, 1731, -1,1734, 1733, 2121, -1,1732, 2120, 1733, -1,1730, 2118, 1731, -1, + 2127, 2128, 1740, -1,1722, 2129, 2128, -1,2129, 2130, 1742, -1,2130, 2131, 1743, -1, + 1721, 2130, 2129, -1,1702, 1745, 2132, -1,2132, 1744, 2131, -1,1682, 1702, 2132, -1, + 1719, 2132, 2131, -1,1741, 2128, 2129, -1,1720, 2131, 2130, -1,2130, 1743, 1742, -1, + 2129, 1742, 1741, -1,2132, 1745, 1744, -1,1702, 1623, 1745, -1,2131, 1744, 1743, -1, + 1741, 1740, 2128, -1,1607, 1690, 1730, -1,1747, 992, 1746, -1,991, 1747, 1748, -1, + 992, 969, 1746, -1,991, 992, 1747, -1,1749, 1746, 969, -1,969, 971, 1749, -1,1749, + 972, 1750, -1,1751, 1750, 973, -1,1749, 971, 972, -1,1750, 972, 973, -1,1752, 1751, + 973, -1,973, 975, 1752, -1,977, 1753, 1754, -1,976, 1754, 1752, -1,976, 977, 1754, -1, + 975, 976, 1752, -1,979, 1755, 1753, -1,1753, 977, 979, -1,1755, 980, 1756, -1,1757, + 1756, 981, -1,1755, 979, 980, -1,1756, 980, 981, -1,983, 1758, 1757, -1,1757, 981, + 983, -1,1760, 984, 1759, -1,983, 1760, 1758, -1,984, 985, 1759, -1,983, 984, 1760, -1, + 987, 1761, 1759, -1,1759, 985, 987, -1,1762, 1761, 987, -1,1763, 1762, 988, -1,1762, + 987, 988, -1,1763, 988, 989, -1,1748, 1763, 991, -1,989, 991, 1763, -1,1765, 1761, + 1762, -1,1756, 1760, 1759, -1,1758, 1760, 1766, -1,2133, 1759, 1748, -1,1759, 1765, + 1748, -1,1763, 1764, 1762, -1,1764, 1765, 1762, -1,1748, 1747, 1751, -1,1747, 1746, + 1769, -1,1764, 1748, 1765, -1,1756, 1766, 1760, -1,1756, 1759, 1755, -1,1759, 2133, + 1755, -1,1754, 1753, 1767, -1,1768, 1767, 1755, -1,1754, 1767, 1768, -1,1769, 1750, + 1747, -1,1751, 1755, 2133, -1,1750, 1751, 1747, -1,1751, 2133, 1748, -1,1768, 1755, + 1751, -1,1769, 1749, 1750, -1,1768, 1752, 1754, -1,1757, 1766, 1756, -1,1771, 1770, + 996, -1,1772, 1771, 997, -1,1771, 996, 997, -1,1772, 997, 998, -1,996, 1770, 1773, -1, + 1773, 994, 996, -1,951, 1774, 950, -1,993, 1774, 951, -1,1774, 993, 1773, -1,1774, + 1775, 950, -1,949, 950, 1775, -1,993, 994, 1773, -1,1775, 1776, 949, -1,947, 949, + 1776, -1,945, 1778, 1005, -1,1777, 1778, 945, -1,1778, 1777, 1776, -1,1778, 1779, + 1005, -1,1004, 1005, 1779, -1,1777, 947, 1776, -1,1002, 1779, 1780, -1,1779, 1002, + 1004, -1,1002, 1780, 1781, -1,1001, 1781, 1782, -1,1001, 1002, 1781, -1,1000, 1001, + 1782, -1,1000, 1782, 1772, -1,1772, 998, 1000, -1,1778, 1784, 1779, -1,1781, 1780, + 1770, -1,2134, 1780, 1778, -1,1784, 1778, 1780, -1,1783, 2134, 1776, -1,1778, 1776, + 2134, -1,1770, 1780, 2134, -1,1785, 1782, 1781, -1,1771, 1772, 1785, -1,1771, 1781, + 1770, -1,1787, 1770, 2134, -1,1783, 1775, 2134, -1,1773, 1786, 1787, -1,1775, 1787, + 2134, -1,1787, 1786, 1770, -1,1771, 1785, 1781, -1,1788, 1789, 1056, -1,1056, 1036, + 1788, -1,1791, 1037, 1790, -1,1036, 1791, 1788, -1,1037, 1038, 1790, -1,1036, 1037, + 1791, -1,1792, 1790, 1038, -1,1038, 1040, 1792, -1,1794, 1041, 1793, -1,1040, 1794, + 1792, -1,1041, 1042, 1793, -1,1040, 1041, 1794, -1,1795, 1793, 1042, -1,1796, 1795, + 1797, -1,1795, 1042, 1797, -1,1796, 1797, 1044, -1,1046, 1798, 1796, -1,1796, 1044, + 1046, -1,1798, 1047, 1799, -1,1800, 1799, 1048, -1,1798, 1046, 1047, -1,1799, 1047, + 1048, -1,1050, 1801, 1800, -1,1800, 1048, 1050, -1,1801, 1051, 1802, -1,1803, 1802, + 1052, -1,1801, 1050, 1051, -1,1802, 1051, 1052, -1,1804, 1803, 1052, -1,1052, 1054, + 1804, -1,1804, 1055, 1805, -1,1789, 1805, 1056, -1,1804, 1054, 1055, -1,1805, 1055, + 1056, -1,1806, 1067, 1807, -1,1808, 1807, 1058, -1,1806, 1066, 1067, -1,1807, 1067, + 1058, -1,1066, 1806, 1810, -1,1809, 1810, 1811, -1,1809, 1066, 1810, -1,1064, 1809, + 1811, -1,1811, 1812, 1062, -1,1062, 1064, 1811, -1,1813, 1061, 1812, -1,1060, 1813, + 1814, -1,1061, 1062, 1812, -1,1060, 1061, 1813, -1,1060, 1814, 1808, -1,1808, 1058, + 1060, -1,1812, 1798, 1799, -1,1802, 1816, 1801, -1,1790, 1814, 1800, -1,1814, 2234, + 1800, -1,1812, 1799, 2235, -1,1812, 1817, 1798, -1,1815, 1800, 1816, -1,1814, 1813, + 2234, -1,1815, 1802, 1803, -1,1816, 1802, 1815, -1,1800, 1815, 1804, -1,1791, 1805, + 1820, -1,1805, 1791, 1804, -1,2235, 1799, 1813, -1,1805, 1789, 1820, -1,1790, 1804, + 1791, -1,1804, 1790, 1800, -1,1790, 1823, 1814, -1,2234, 1813, 1799, -1,1822, 1796, + 1817, -1,1796, 1822, 1811, -1,1811, 1818, 1796, -1,1793, 1818, 1821, -1,1793, 1821, + 1806, -1,1818, 1811, 1821, -1,1808, 1823, 1819, -1,1820, 1788, 1791, -1,1819, 1823, + 1790, -1,1794, 1806, 1807, -1,1792, 1794, 1808, -1,1807, 1808, 1794, -1,1819, 1792, + 1808, -1,1794, 1793, 1806, -1,1817, 1812, 1822, -1,1824, 1264, 1228, -1,1228, 1825, + 1824, -1,1826, 1228, 1229, -1,1827, 1229, 1230, -1,1827, 1826, 1229, -1,1825, 1228, + 1826, -1,1827, 1230, 1231, -1,1828, 1231, 1232, -1,1232, 1829, 1828, -1,1827, 1231, + 1828, -1,1830, 1232, 1233, -1,1831, 1233, 1234, -1,1831, 1830, 1233, -1,1829, 1232, + 1830, -1,1832, 1234, 1235, -1,1833, 1235, 1236, -1,1833, 1832, 1235, -1,1831, 1234, + 1832, -1,1236, 1238, 1833, -1,1834, 1833, 1238, -1,1239, 1240, 1836, -1,1238, 1239, + 1834, -1,1239, 1836, 1834, -1,1836, 1240, 1835, -1,1837, 1242, 1839, -1,1240, 1837, + 1835, -1,1837, 1839, 1835, -1,1839, 1242, 1838, -1,1243, 1244, 1841, -1,1242, 1243, + 1838, -1,1243, 1841, 1838, -1,1841, 1244, 1840, -1,1245, 1246, 1843, -1,1244, 1245, + 1840, -1,1245, 1843, 1840, -1,1843, 1246, 1842, -1,1844, 1246, 1247, -1,1845, 1247, + 1248, -1,1845, 1844, 1247, -1,1842, 1246, 1844, -1,1846, 1248, 1249, -1,1847, 1249, + 1250, -1,1847, 1846, 1249, -1,1845, 1248, 1846, -1,1848, 1250, 1251, -1,1849, 1251, + 1252, -1,1849, 1848, 1251, -1,1847, 1250, 1848, -1,1849, 1252, 1254, -1,1254, 1850, + 1849, -1,1255, 1256, 1852, -1,1254, 1255, 1850, -1,1255, 1852, 1850, -1,1852, 1256, + 1851, -1,1257, 1258, 1854, -1,1256, 1257, 1851, -1,1257, 1854, 1851, -1,1854, 1258, + 1853, -1,1855, 1258, 1857, -1,1856, 1857, 1260, -1,1856, 1855, 1857, -1,1853, 1258, + 1855, -1,1856, 1260, 1262, -1,1262, 1858, 1856, -1,1263, 1264, 1859, -1,1262, 1263, + 1858, -1,1263, 1859, 1858, -1,1859, 1264, 1824, -1,1845, 1846, 1838, -1,1835, 1839, + 1846, -1,1846, 1839, 1838, -1,1841, 1844, 1845, -1,2236, 1861, 1827, -1,1863, 1844, + 1840, -1,1841, 1845, 1838, -1,1840, 1844, 1841, -1,1863, 1842, 1844, -1,1836, 1835, + 1847, -1,1846, 1847, 1835, -1,1834, 1848, 1849, -1,1847, 1848, 1836, -1,1836, 1848, + 1834, -1,1862, 1833, 1864, -1,1834, 1862, 1864, -1,1850, 1833, 1862, -1,2238, 1827, + 1859, -1,1849, 1862, 1834, -1,1852, 1833, 1850, -1,2237, 1831, 1853, -1,1828, 1829, + 1830, -1,1828, 1830, 2237, -1,1853, 1828, 2237, -1,2236, 1828, 1853, -1,1826, 1865, + 1825, -1,1859, 1824, 1826, -1,1865, 1826, 1824, -1,1826, 2238, 1859, -1,1851, 1854, + 1831, -1,1853, 1831, 1854, -1,1852, 1851, 1832, -1,1831, 1832, 1851, -1,1833, 1852, + 1832, -1,1856, 1827, 1861, -1,1827, 1856, 1860, -1,1827, 1860, 1858, -1,1858, 1859, + 1827, -1,2236, 1827, 1828, -1,1332, 1310, 1866, -1,1866, 1867, 1332, -1,1311, 1312, + 1868, -1,1310, 1311, 1869, -1,1869, 1866, 1310, -1,1869, 1311, 1868, -1,1312, 1314, + 1868, -1,1870, 1868, 1314, -1,1315, 1316, 1871, -1,1314, 1315, 1872, -1,1872, 1870, + 1314, -1,1872, 1315, 1871, -1,1871, 1316, 1318, -1,1318, 1873, 1871, -1,1319, 1320, + 1875, -1,1318, 1319, 1873, -1,1319, 1875, 1873, -1,1875, 1320, 1874, -1,1320, 1322, + 1874, -1,1876, 1874, 1322, -1,1876, 1322, 1323, -1,1877, 1323, 1324, -1,1324, 1878, + 1877, -1,1876, 1323, 1877, -1,1324, 1326, 1879, -1,1879, 1878, 1324, -1,1327, 1328, + 1881, -1,1326, 1327, 1879, -1,1327, 1881, 1879, -1,1881, 1328, 1880, -1,1328, 1330, + 1882, -1,1882, 1880, 1328, -1,1331, 1332, 1867, -1,1330, 1331, 1883, -1,1883, 1882, + 1330, -1,1883, 1331, 1867, -1,1877, 1886, 1876, -1,1870, 1875, 1874, -1,1873, 1875, + 1887, -1,2135, 1874, 1879, -1,1879, 1874, 1886, -1,1878, 1885, 1877, -1,1885, 1886, + 1877, -1,1879, 1881, 1883, -1,1881, 1880, 1884, -1,1885, 1879, 1886, -1,1872, 1887, + 1875, -1,1875, 1870, 1872, -1,1871, 1887, 1872, -1,2135, 1870, 1874, -1,1867, 1870, + 2135, -1,1888, 1870, 1867, -1,1868, 1888, 1869, -1,1881, 1884, 1883, -1,1883, 1867, + 1879, -1,1882, 1883, 1884, -1,1889, 1866, 1869, -1,1888, 1867, 1889, -1,1889, 1869, + 1888, -1,1867, 2135, 1879, -1,1290, 1291, 1890, -1,1181, 1290, 1891, -1,1891, 1892, + 1181, -1,1891, 1290, 1890, -1,1291, 1293, 1893, -1,1893, 1890, 1291, -1,1294, 1171, + 1895, -1,1293, 1294, 1893, -1,1294, 1895, 1893, -1,1895, 1171, 1894, -1,1894, 1171, + 1173, -1,1173, 1896, 1894, -1,1174, 1175, 1897, -1,1173, 1174, 1898, -1,1898, 1896, + 1173, -1,1898, 1174, 1897, -1,1897, 1175, 1177, -1,1177, 1899, 1897, -1,1899, 1177, + 1178, -1,1900, 1178, 1179, -1,1179, 1901, 1900, -1,1899, 1178, 1900, -1,1901, 1179, + 1181, -1,1181, 1892, 1901, -1,1895, 1894, 1904, -1,1896, 1893, 1895, -1,1893, 1896, + 1905, -1,1895, 1904, 1896, -1,1896, 1898, 2136, -1,1897, 1903, 1898, -1,1905, 1896, + 2136, -1,1901, 1890, 2136, -1,1905, 2136, 1890, -1,1902, 1906, 1901, -1,1890, 1901, + 1906, -1,1900, 1901, 2136, -1,1899, 1900, 1903, -1,1900, 1898, 1903, -1,1906, 1902, + 1892, -1,2136, 1898, 1900, -1 + ] + normalPerVertex TRUE + normalIndex [ + 1, 1, 0, -1,0, 1, 1, -1,1, 2, 0, -1,5, 4, 3, -1,2, 5, 6, -1,7, 3, 4, -1,7, 4, 8, -1, + 0, 2, 6, -1,3, 9, 5, -1,10, 6, 1, -1,10, 1, 1, -1,1, 6, 11, -1,6, 12, 11, -1,13, + 12, 6, -1,13, 14, 12, -1,16, 14, 15, -1,15, 14, 13, -1,13, 6, 9, -1,6, 5, 9, -1,18, + 1, 17, -1,1, 18, 1, -1,7, 8, 18, -1,18, 8, 1, -1,20, 19, 1, -1,17, 22, 21, -1,17, + 1, 22, -1,1, 1, 20, -1,23, 1, 16, -1,1, 1, 1, -1,1, 1, 24, -1,1, 1, 23, -1,23, 16, + 15, -1,27, 26, 25, -1,1, 24, 1, -1,1, 27, 25, -1,1, 23, 27, -1,30, 29, 28, -1,32, + 28, 31, -1,29, 31, 28, -1,33, 28, 32, -1,35, 31, 34, -1,30, 36, 29, -1,32, 31, 35, -1, + 38, 37, 30, -1,41, 40, 39, -1,38, 41, 37, -1,39, 43, 42, -1,44, 42, 43, -1,36, 30, + 37, -1,45, 30, 28, -1,47, 35, 46, -1,45, 38, 30, -1,47, 33, 32, -1,32, 35, 47, -1, + 45, 28, 33, -1,45, 48, 38, -1,50, 49, 40, -1,39, 40, 49, -1,39, 49, 43, -1,51, 43, + 49, -1,40, 48, 52, -1,49, 50, 51, -1,50, 40, 52, -1,44, 43, 51, -1,38, 48, 40, -1, + 40, 41, 38, -1,53, 42, 44, -1,56, 55, 54, -1,58, 55, 57, -1,59, 58, 44, -1,57, 44, + 58, -1,55, 58, 54, -1,60, 54, 58, -1,56, 61, 55, -1,53, 44, 57, -1,64, 63, 62, -1, + 65, 64, 56, -1,56, 64, 61, -1,67, 63, 66, -1,66, 63, 64, -1,67, 69, 68, -1,71, 70, + 68, -1,62, 61, 64, -1,72, 56, 54, -1,73, 59, 44, -1,66, 64, 65, -1,59, 60, 58, -1, + 72, 54, 60, -1,65, 56, 72, -1,65, 74, 66, -1,76, 69, 75, -1,68, 69, 76, -1,68, 76, + 71, -1,71, 76, 75, -1,69, 74, 77, -1,71, 75, 78, -1,75, 69, 77, -1,66, 74, 69, -1, + 69, 67, 66, -1,51, 73, 44, -1,70, 80, 79, -1,80, 70, 78, -1,83, 82, 81, -1,85, 81, + 84, -1,82, 84, 81, -1,86, 81, 85, -1,87, 84, 79, -1,83, 88, 82, -1,85, 84, 87, -1, + 90, 88, 89, -1,93, 92, 91, -1,89, 93, 90, -1,91, 95, 94, -1,96, 94, 95, -1,83, 89, + 88, -1,97, 83, 81, -1,98, 87, 80, -1,97, 89, 83, -1,98, 86, 85, -1,85, 87, 98, -1, + 97, 81, 86, -1,97, 99, 89, -1,101, 100, 92, -1,91, 92, 100, -1,91, 100, 95, -1,102, + 95, 100, -1,92, 99, 103, -1,100, 101, 102, -1,101, 92, 103, -1,96, 95, 102, -1,89, + 99, 92, -1,92, 93, 89, -1,104, 94, 96, -1,107, 106, 105, -1,109, 106, 108, -1,110, + 109, 96, -1,108, 96, 109, -1,106, 109, 105, -1,111, 105, 109, -1,107, 112, 106, -1, + 104, 96, 108, -1,115, 114, 113, -1,116, 113, 107, -1,107, 113, 112, -1,118, 115, + 117, -1,117, 115, 113, -1,118, 120, 119, -1,122, 121, 119, -1,114, 112, 113, -1,123, + 107, 105, -1,124, 110, 96, -1,117, 113, 116, -1,110, 111, 109, -1,123, 105, 111, -1, + 116, 107, 123, -1,116, 125, 117, -1,127, 120, 126, -1,119, 120, 127, -1,119, 127, + 122, -1,122, 127, 126, -1,120, 125, 128, -1,122, 126, 129, -1,126, 120, 128, -1,117, + 125, 120, -1,120, 118, 117, -1,102, 124, 96, -1,121, 129, 130, -1,130, 131, 121, -1, + 133, 131, 132, -1,134, 131, 133, -1,135, 133, 130, -1,132, 130, 133, -1,136, 133, + 135, -1,133, 137, 134, -1,138, 137, 136, -1,139, 137, 138, -1,133, 136, 137, -1,141, + 138, 140, -1,136, 140, 138, -1,138, 141, 142, -1,142, 139, 138, -1,135, 140, 136, -1, + 141, 143, 142, -1,146, 145, 144, -1,143, 144, 147, -1,150, 149, 148, -1,152, 151, + 150, -1,154, 151, 153, -1,154, 146, 151, -1,142, 147, 155, -1,147, 142, 143, -1,155, + 139, 142, -1,147, 145, 155, -1,145, 154, 156, -1,154, 145, 146, -1,156, 157, 145, -1, + 156, 154, 158, -1,145, 157, 155, -1,147, 144, 145, -1,159, 148, 149, -1,160, 152, + 150, -1,161, 153, 152, -1,153, 151, 152, -1,150, 148, 160, -1,164, 163, 162, -1,162, + 166, 165, -1,163, 161, 152, -1,168, 166, 167, -1,161, 164, 169, -1,164, 161, 163, -1, + 169, 158, 161, -1,164, 170, 169, -1,161, 158, 153, -1,165, 168, 171, -1,168, 165, + 166, -1,170, 164, 171, -1,172, 171, 168, -1,171, 164, 165, -1,164, 162, 165, -1,153, + 158, 154, -1,174, 173, 172, -1,176, 174, 175, -1,168, 174, 172, -1,167, 175, 168, -1, + 174, 168, 175, -1,176, 173, 174, -1,176, 177, 173, -1,178, 173, 177, -1,179, 178, + 177, -1,180, 177, 176, -1,180, 181, 177, -1,179, 177, 181, -1,175, 180, 176, -1,178, + 181, 46, -1,46, 34, 178, -1,19, 183, 182, -1,182, 22, 19, -1,182, 185, 184, -1,184, + 185, 186, -1,22, 186, 187, -1,186, 22, 184, -1,187, 186, 188, -1,185, 188, 186, -1, + 188, 190, 189, -1,189, 190, 191, -1,190, 188, 185, -1,21, 189, 17, -1,189, 21, 188, -1, + 192, 17, 189, -1,189, 191, 192, -1,188, 21, 187, -1,191, 194, 193, -1,193, 194, 195, -1, + 191, 193, 192, -1,197, 195, 196, -1,196, 195, 194, -1,197, 196, 198, -1,193, 195, + 199, -1,192, 18, 17, -1,192, 193, 18, -1,197, 200, 3, -1,200, 197, 198, -1,3, 199, + 197, -1,200, 9, 3, -1,199, 18, 193, -1,197, 199, 195, -1,198, 201, 200, -1,201, 203, + 202, -1,202, 203, 204, -1,202, 9, 200, -1,207, 206, 205, -1,207, 204, 206, -1,206, + 204, 203, -1,205, 209, 208, -1,202, 204, 15, -1,9, 202, 13, -1,13, 202, 15, -1,207, + 208, 23, -1,208, 207, 205, -1,27, 23, 208, -1,207, 23, 15, -1,207, 15, 204, -1,202, + 200, 201, -1,212, 211, 210, -1,212, 210, 213, -1,214, 210, 211, -1,215, 214, 211, -1, + 213, 210, 216, -1,219, 218, 217, -1,219, 221, 220, -1,222, 217, 218, -1,215, 220, + 223, -1,225, 222, 224, -1,214, 223, 226, -1,223, 214, 215, -1,210, 24, 216, -1,210, + 226, 24, -1,223, 227, 226, -1,226, 210, 214, -1,228, 221, 227, -1,221, 228, 220, -1, + 217, 221, 219, -1,221, 217, 229, -1,221, 229, 227, -1,229, 217, 225, -1,12, 229, + 225, -1,217, 222, 225, -1,228, 227, 223, -1,223, 220, 228, -1,225, 224, 230, -1,233, + 232, 231, -1,230, 234, 12, -1,230, 224, 234, -1,231, 234, 233, -1,234, 231, 235, -1, + 232, 236, 231, -1,234, 224, 233, -1,239, 238, 237, -1,241, 238, 240, -1,243, 241, + 242, -1,244, 236, 243, -1,231, 236, 244, -1,239, 237, 245, -1,244, 247, 246, -1,247, + 244, 243, -1,12, 234, 235, -1,246, 235, 244, -1,247, 242, 246, -1,235, 231, 244, -1, + 242, 240, 248, -1,240, 242, 241, -1,239, 240, 238, -1,240, 239, 248, -1,239, 10, + 248, -1,10, 239, 249, -1,239, 245, 249, -1,242, 248, 246, -1,247, 243, 242, -1,230, + 12, 225, -1,252, 251, 250, -1,252, 250, 253, -1,254, 250, 251, -1,255, 254, 251, -1, + 253, 250, 256, -1,259, 258, 257, -1,259, 261, 260, -1,262, 257, 258, -1,255, 260, + 263, -1,265, 262, 264, -1,254, 263, 266, -1,263, 254, 255, -1,250, 0, 256, -1,250, + 266, 0, -1,263, 267, 266, -1,266, 250, 254, -1,268, 261, 267, -1,261, 268, 260, -1, + 257, 261, 259, -1,261, 257, 269, -1,261, 269, 267, -1,269, 257, 265, -1,4, 269, 265, -1, + 257, 262, 265, -1,268, 267, 263, -1,263, 260, 268, -1,265, 264, 270, -1,273, 272, + 271, -1,270, 274, 4, -1,270, 264, 274, -1,271, 274, 273, -1,274, 271, 275, -1,272, + 276, 271, -1,274, 264, 273, -1,279, 278, 277, -1,281, 278, 280, -1,283, 281, 282, -1, + 284, 276, 283, -1,271, 276, 284, -1,279, 277, 183, -1,284, 286, 285, -1,286, 284, + 283, -1,4, 274, 275, -1,285, 275, 284, -1,286, 282, 285, -1,275, 271, 284, -1,282, + 280, 20, -1,280, 282, 281, -1,279, 280, 278, -1,280, 279, 20, -1,279, 19, 20, -1, + 19, 279, 287, -1,279, 183, 287, -1,282, 20, 285, -1,286, 283, 282, -1,270, 4, 265, -1, + 209, 288, 208, -1,289, 27, 208, -1,208, 288, 289, -1,290, 289, 288, -1,289, 25, 26, -1, + 25, 289, 290, -1,289, 26, 27, -1,290, 288, 291, -1,25, 291, 213, -1,213, 24, 25, -1, + 10, 245, 253, -1,253, 0, 10, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1, + 292, 293, 292, -1,292, 292, 292, -1,295, 295, 294, -1,292, 294, 296, -1,292, 296, + 292, -1,292, 292, 292, -1,292, 292, 292, -1,294, 295, 296, -1,293, 292, 297, -1,292, + 297, 298, -1,299, 292, 292, -1,292, 292, 298, -1,299, 292, 300, -1,292, 292, 299, -1, + 300, 299, 300, -1,297, 297, 298, -1,292, 292, 301, -1,300, 300, 301, -1,292, 292, + 292, -1,301, 292, 300, -1,293, 297, 297, -1,303, 292, 302, -1,295, 292, 295, -1,295, + 292, 303, -1,304, 302, 302, -1,302, 302, 303, -1,292, 302, 304, -1,304, 292, 292, -1, + 292, 292, 292, -1,292, 292, 292, -1,305, 292, 292, -1,292, 292, 292, -1,292, 305, + 306, -1,307, 308, 307, -1,292, 292, 309, -1,307, 309, 292, -1,292, 292, 292, -1,309, + 307, 307, -1,292, 310, 306, -1,306, 306, 310, -1,292, 310, 292, -1,292, 292, 308, -1, + 292, 292, 292, -1,292, 292, 292, -1,308, 292, 307, -1,305, 306, 306, -1,292, 292, + 292, -1,311, 292, 292, -1,292, 311, 312, -1,312, 311, 312, -1,292, 292, 292, -1,292, + 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 313, -1,292, 292, 292, -1, + 313, 292, 292, -1,292, 314, 312, -1,312, 312, 314, -1,292, 314, 292, -1,292, 292, + 292, -1,292, 292, 292, -1,292, 292, 292, -1,315, 313, 315, -1,315, 292, 313, -1,316, + 315, 315, -1,315, 292, 316, -1,292, 316, 292, -1,292, 292, 316, -1,292, 292, 292, -1, + 292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, + 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, + 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1, + 292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, + 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,292, 292, 292, -1,319, + 318, 317, -1,317, 320, 319, -1,323, 322, 321, -1,324, 322, 323, -1,326, 325, 320, -1, + 323, 325, 324, -1,324, 325, 327, -1,324, 328, 322, -1,327, 329, 324, -1,328, 324, + 329, -1,330, 329, 327, -1,320, 331, 326, -1,330, 326, 331, -1,331, 317, 330, -1,330, + 327, 326, -1,325, 326, 327, -1,321, 322, 332, -1,332, 322, 333, -1,336, 335, 334, -1, + 333, 335, 332, -1,337, 335, 333, -1,322, 328, 333, -1,333, 338, 337, -1,338, 333, + 328, -1,337, 338, 339, -1,334, 340, 336, -1,340, 334, 339, -1,339, 341, 340, -1,334, + 337, 339, -1,337, 334, 335, -1,344, 343, 342, -1,342, 343, 345, -1,348, 347, 346, -1, + 345, 347, 342, -1,349, 347, 345, -1,343, 350, 345, -1,345, 351, 349, -1,351, 345, + 350, -1,349, 351, 352, -1,346, 353, 348, -1,353, 346, 352, -1,352, 354, 353, -1,346, + 349, 352, -1,349, 346, 347, -1,357, 356, 355, -1,358, 356, 357, -1,360, 359, 348, -1, + 357, 359, 358, -1,358, 359, 361, -1,358, 362, 356, -1,361, 363, 358, -1,362, 358, + 363, -1,364, 363, 361, -1,348, 353, 360, -1,364, 360, 353, -1,353, 354, 364, -1,364, + 361, 360, -1,359, 360, 361, -1,355, 362, 365, -1,365, 366, 355, -1,369, 368, 367, -1, + 371, 367, 370, -1,374, 373, 372, -1,376, 372, 375, -1,373, 377, 370, -1,367, 371, + 369, -1,368, 369, 371, -1,378, 371, 377, -1,370, 377, 371, -1,372, 376, 374, -1,379, + 374, 376, -1,381, 376, 380, -1,375, 380, 376, -1,374, 382, 377, -1,373, 374, 377, -1, + 383, 380, 375, -1,383, 385, 384, -1,387, 384, 386, -1,390, 389, 388, -1,389, 392, + 391, -1,393, 386, 390, -1,395, 392, 394, -1,383, 384, 387, -1,396, 383, 387, -1,398, + 394, 397, -1,397, 400, 399, -1,402, 366, 401, -1,403, 400, 402, -1,387, 386, 393, -1, + 383, 375, 385, -1,383, 404, 380, -1,378, 377, 382, -1,382, 374, 379, -1,390, 388, + 393, -1,393, 388, 405, -1,388, 391, 406, -1,389, 391, 388, -1,381, 379, 376, -1,368, + 371, 378, -1,381, 380, 404, -1,404, 383, 396, -1,387, 393, 407, -1,388, 406, 405, -1, + 393, 405, 407, -1,396, 387, 407, -1,408, 406, 391, -1,394, 398, 395, -1,409, 395, + 398, -1,410, 398, 399, -1,397, 399, 398, -1,402, 401, 403, -1,411, 403, 401, -1,413, + 401, 412, -1,366, 412, 401, -1,403, 414, 399, -1,400, 403, 399, -1,395, 409, 408, -1, + 398, 410, 409, -1,403, 411, 414, -1,412, 365, 413, -1,401, 413, 411, -1,399, 414, + 410, -1,408, 391, 395, -1,392, 395, 391, -1,368, 415, 415, -1,415, 368, 368, -1,417, + 319, 416, -1,419, 416, 418, -1,422, 421, 420, -1,424, 420, 423, -1,421, 425, 418, -1, + 416, 419, 417, -1,318, 417, 419, -1,426, 419, 425, -1,418, 425, 419, -1,420, 424, + 422, -1,427, 422, 424, -1,429, 424, 428, -1,423, 428, 424, -1,422, 430, 425, -1,421, + 422, 425, -1,431, 428, 423, -1,431, 433, 432, -1,435, 432, 434, -1,438, 437, 436, -1, + 437, 440, 439, -1,441, 434, 438, -1,443, 440, 442, -1,431, 432, 435, -1,444, 431, + 435, -1,446, 442, 445, -1,445, 448, 447, -1,450, 415, 449, -1,451, 448, 450, -1,435, + 434, 441, -1,431, 423, 433, -1,431, 452, 428, -1,426, 425, 430, -1,430, 422, 427, -1, + 438, 436, 441, -1,441, 436, 453, -1,436, 439, 454, -1,437, 439, 436, -1,429, 427, + 424, -1,318, 419, 426, -1,429, 428, 452, -1,452, 431, 444, -1,435, 441, 455, -1,436, + 454, 453, -1,441, 453, 455, -1,444, 435, 455, -1,456, 454, 439, -1,442, 446, 443, -1, + 457, 443, 446, -1,458, 446, 447, -1,445, 447, 446, -1,450, 449, 451, -1,459, 451, + 449, -1,461, 449, 460, -1,415, 460, 449, -1,451, 462, 447, -1,448, 451, 447, -1,443, + 457, 456, -1,446, 458, 457, -1,451, 459, 462, -1,460, 415, 461, -1,449, 461, 459, -1, + 447, 462, 458, -1,456, 439, 443, -1,440, 443, 439, -1,159, 344, 463, -1,344, 159, + 350, -1,336, 341, 159, -1,159, 341, 350, -1,336, 159, 464, -1,465, 344, 152, -1,466, + 151, 336, -1,466, 336, 464, -1,465, 463, 344, -1,469, 468, 467, -1,467, 471, 470, -1, + 471, 467, 468, -1,468, 472, 471, -1,473, 470, 471, -1,474, 470, 473, -1,475, 474, + 473, -1,473, 471, 472, -1,478, 477, 476, -1,477, 480, 479, -1,477, 479, 476, -1,481, + 479, 480, -1,481, 480, 482, -1,476, 479, 483, -1,481, 485, 484, -1,487, 485, 486, -1, + 490, 489, 488, -1,486, 488, 491, -1,493, 490, 492, -1,495, 492, 494, -1,485, 481, + 482, -1,479, 481, 496, -1,497, 476, 483, -1,481, 484, 496, -1,487, 484, 485, -1,498, + 484, 487, -1,483, 479, 496, -1,498, 499, 484, -1,496, 484, 499, -1,487, 491, 498, -1, + 491, 489, 500, -1,489, 491, 488, -1,493, 489, 490, -1,489, 493, 501, -1,502, 491, + 500, -1,501, 495, 503, -1,501, 500, 489, -1,495, 501, 493, -1,493, 492, 495, -1,491, + 502, 498, -1,487, 486, 491, -1,494, 504, 495, -1,504, 506, 505, -1,506, 508, 507, -1, + 510, 505, 509, -1,510, 504, 505, -1,507, 512, 511, -1,507, 505, 506, -1,512, 507, + 508, -1,505, 507, 513, -1,510, 503, 495, -1,516, 515, 514, -1,514, 515, 517, -1,511, + 514, 518, -1,511, 516, 514, -1,521, 520, 519, -1,522, 515, 520, -1,524, 519, 523, -1, + 516, 511, 512, -1,507, 511, 525, -1,510, 526, 503, -1,514, 517, 518, -1,510, 509, + 526, -1,509, 505, 513, -1,525, 511, 518, -1,507, 525, 513, -1,517, 527, 518, -1,528, + 522, 521, -1,521, 522, 520, -1,524, 521, 519, -1,529, 521, 524, -1,530, 527, 522, -1, + 529, 528, 521, -1,530, 522, 528, -1,522, 527, 517, -1,517, 515, 522, -1,510, 495, + 504, -1,472, 532, 531, -1,532, 534, 533, -1,473, 531, 535, -1,473, 472, 531, -1,533, + 537, 536, -1,533, 531, 532, -1,537, 533, 534, -1,531, 533, 538, -1,536, 540, 539, -1, + 543, 542, 541, -1,544, 540, 542, -1,547, 546, 545, -1,541, 545, 548, -1,550, 547, + 549, -1,550, 549, 551, -1,540, 536, 537, -1,533, 536, 552, -1,475, 473, 535, -1,531, + 538, 535, -1,544, 539, 540, -1,552, 536, 539, -1,553, 539, 544, -1,538, 533, 552, -1, + 553, 554, 539, -1,552, 539, 554, -1,544, 543, 553, -1,543, 548, 555, -1,548, 543, + 541, -1,546, 550, 556, -1,550, 546, 547, -1,548, 545, 546, -1,548, 546, 557, -1,555, + 558, 543, -1,556, 557, 546, -1,555, 548, 557, -1,556, 550, 559, -1,543, 558, 553, -1, + 544, 542, 543, -1,550, 551, 559, -1,562, 561, 560, -1,565, 564, 563, -1,561, 565, + 563, -1,559, 567, 566, -1,567, 559, 562, -1,560, 563, 568, -1,563, 560, 561, -1,567, + 562, 560, -1,567, 560, 569, -1,564, 570, 563, -1,562, 559, 551, -1,573, 572, 571, -1, + 575, 572, 574, -1,571, 572, 576, -1,570, 571, 577, -1,570, 573, 571, -1,580, 579, + 578, -1,581, 574, 579, -1,476, 578, 478, -1,573, 570, 564, -1,563, 570, 582, -1,583, + 559, 566, -1,560, 568, 569, -1,569, 566, 567, -1,576, 577, 571, -1,568, 563, 582, -1, + 584, 577, 576, -1,570, 577, 582, -1,576, 575, 584, -1,575, 581, 585, -1,581, 575, + 574, -1,580, 476, 497, -1,476, 580, 578, -1,581, 579, 580, -1,581, 580, 586, -1,585, + 587, 575, -1,497, 586, 580, -1,585, 581, 586, -1,575, 587, 584, -1,576, 572, 575, -1, + 559, 583, 556, -1,590, 589, 588, -1,593, 592, 591, -1,592, 595, 594, -1,468, 588, + 593, -1,598, 597, 596, -1,600, 599, 596, -1,599, 602, 601, -1,596, 597, 600, -1,603, + 603, 603, -1,590, 588, 604, -1,590, 605, 589, -1,607, 605, 606, -1,604, 588, 608, -1, + 610, 610, 609, -1,611, 612, 611, -1,615, 614, 613, -1,614, 616, 612, -1,618, 613, + 617, -1,620, 602, 619, -1,605, 607, 589, -1,617, 622, 621, -1,624, 623, 621, -1,623, + 623, 621, -1,621, 622, 624, -1,623, 625, 621, -1,625, 627, 626, -1,630, 629, 628, -1, + 629, 632, 631, -1,626, 627, 630, -1,621, 623, 623, -1,633, 633, 631, -1,636, 635, + 634, -1,635, 638, 637, -1,640, 639, 636, -1,643, 642, 641, -1,646, 645, 644, -1,649, + 648, 647, -1,648, 651, 650, -1,647, 645, 649, -1,641, 652, 643, -1,654, 653, 653, -1, + 608, 588, 655, -1,469, 655, 588, -1,468, 593, 591, -1,595, 657, 656, -1,594, 658, + 591, -1,657, 596, 601, -1,594, 595, 656, -1,659, 608, 655, -1,592, 594, 591, -1,602, + 620, 601, -1,601, 620, 660, -1,620, 616, 661, -1,612, 616, 620, -1,613, 618, 615, -1, + 615, 618, 662, -1,618, 621, 663, -1,617, 621, 618, -1,664, 616, 615, -1,614, 615, + 616, -1,655, 469, 659, -1,599, 601, 596, -1,469, 588, 468, -1,591, 658, 472, -1,594, + 656, 658, -1,591, 472, 468, -1,601, 660, 657, -1,620, 661, 660, -1,615, 662, 664, -1, + 618, 663, 662, -1,616, 664, 661, -1,595, 596, 657, -1,665, 663, 621, -1,630, 628, + 626, -1,626, 628, 666, -1,667, 631, 640, -1,631, 668, 628, -1,669, 640, 634, -1,639, + 640, 631, -1,665, 621, 626, -1,629, 631, 628, -1,635, 637, 634, -1,634, 637, 670, -1, + 637, 644, 671, -1,646, 644, 637, -1,648, 650, 647, -1,647, 650, 478, -1,650, 673, + 672, -1,651, 673, 650, -1,674, 644, 647, -1,645, 647, 644, -1,626, 666, 665, -1,636, + 634, 640, -1,628, 668, 666, -1,640, 669, 667, -1,634, 670, 669, -1,631, 667, 668, -1, + 644, 674, 671, -1,647, 675, 674, -1,650, 672, 478, -1,673, 480, 672, -1,647, 478, + 675, -1,637, 671, 670, -1,625, 626, 621, -1,676, 480, 673, -1,679, 678, 677, -1,676, + 680, 678, -1,683, 682, 681, -1,686, 685, 684, -1,688, 686, 687, -1,683, 689, 685, -1, + 679, 690, 682, -1,677, 678, 680, -1,680, 673, 691, -1,681, 682, 690, -1,690, 677, + 692, -1,681, 690, 693, -1,689, 683, 681, -1,680, 694, 677, -1,690, 679, 677, -1,686, + 695, 687, -1,685, 689, 684, -1,687, 696, 688, -1,695, 686, 684, -1,697, 687, 695, -1, + 687, 697, 696, -1,689, 698, 684, -1,696, 697, 699, -1,681, 693, 689, -1,680, 676, + 673, -1,702, 701, 700, -1,705, 704, 703, -1,707, 706, 704, -1,703, 701, 708, -1,711, + 710, 709, -1,710, 712, 523, -1,713, 712, 710, -1,714, 709, 706, -1,700, 715, 699, -1, + 708, 701, 702, -1,702, 699, 716, -1,707, 704, 705, -1,705, 708, 717, -1,707, 705, + 718, -1,714, 706, 707, -1,702, 717, 708, -1,705, 703, 708, -1,713, 710, 719, -1,710, + 720, 719, -1,710, 721, 720, -1,711, 714, 722, -1,721, 710, 711, -1,714, 711, 709, -1, + 707, 723, 714, -1,702, 700, 699, -1,715, 696, 699, -1,697, 724, 699, -1,694, 680, + 691, -1,725, 690, 692, -1,726, 690, 725, -1,692, 677, 694, -1,727, 689, 693, -1,698, + 689, 728, -1,729, 684, 698, -1,730, 689, 727, -1,693, 690, 726, -1,724, 697, 695, -1, + 732, 699, 731, -1,733, 699, 732, -1,731, 699, 724, -1,716, 699, 734, -1,718, 705, + 717, -1,723, 707, 718, -1,717, 702, 716, -1,734, 699, 733, -1,695, 684, 729, -1,735, + 720, 721, -1,737, 714, 736, -1,738, 714, 737, -1,723, 739, 714, -1,741, 720, 740, -1, + 606, 742, 607, -1,743, 742, 606, -1,743, 741, 744, -1,745, 714, 738, -1,722, 714, + 745, -1,746, 721, 711, -1,746, 735, 721, -1,746, 711, 722, -1,740, 720, 747, -1,744, + 742, 743, -1,742, 589, 607, -1,740, 744, 741, -1,747, 720, 735, -1,691, 673, 651, -1, + 750, 749, 748, -1,750, 752, 751, -1,754, 754, 753, -1,752, 750, 748, -1,754, 754, + 755, -1,749, 757, 756, -1,758, 750, 751, -1,755, 759, 757, -1,762, 761, 760, -1,763, + 763, 763, -1,764, 764, 764, -1,766, 724, 765, -1,765, 767, 766, -1,766, 767, 761, -1, + 768, 768, 768, -1,769, 770, 769, -1,771, 772, 771, -1,774, 773, 773, -1,775, 775, + 770, -1,771, 776, 771, -1,772, 777, 774, -1,776, 778, 778, -1,778, 778, 723, -1,781, + 780, 779, -1,783, 781, 782, -1,785, 784, 782, -1,785, 782, 786, -1,786, 788, 787, -1, + 782, 784, 783, -1,758, 790, 789, -1,793, 792, 791, -1,796, 795, 794, -1,794, 792, + 793, -1,789, 791, 792, -1,799, 798, 797, -1,801, 797, 800, -1,802, 788, 798, -1,799, + 802, 798, -1,800, 803, 801, -1,804, 805, 804, -1,808, 807, 806, -1,804, 809, 804, -1, + 811, 810, 810, -1,805, 811, 812, -1,814, 806, 813, -1,815, 815, 632, -1,818, 817, + 816, -1,819, 816, 817, -1,821, 821, 820, -1,822, 817, 818, -1,821, 821, 823, -1,825, + 788, 824, -1,827, 826, 779, -1,829, 779, 828, -1,826, 830, 824, -1,830, 826, 827, -1, + 831, 825, 830, -1,832, 830, 827, -1,827, 779, 829, -1,834, 829, 833, -1,829, 828, + 833, -1,836, 834, 835, -1,829, 837, 827, -1,825, 824, 830, -1,835, 745, 838, -1,745, + 839, 838, -1,737, 840, 838, -1,840, 723, 838, -1,838, 839, 737, -1,843, 842, 841, -1, + 842, 845, 844, -1,734, 733, 846, -1,733, 732, 846, -1,846, 845, 734, -1,841, 723, + 843, -1,834, 836, 829, -1,832, 827, 837, -1,847, 831, 832, -1,847, 832, 837, -1,837, + 829, 848, -1,849, 848, 836, -1,848, 829, 836, -1,850, 848, 849, -1,851, 849, 836, -1, + 848, 852, 837, -1,831, 830, 832, -1,852, 853, 847, -1,831, 847, 853, -1,837, 852, + 847, -1,854, 853, 850, -1,852, 850, 853, -1,855, 853, 854, -1,849, 854, 850, -1,848, + 850, 852, -1,855, 854, 849, -1,841, 851, 838, -1,836, 838, 851, -1,856, 851, 841, -1, + 723, 841, 838, -1,857, 844, 846, -1,841, 844, 856, -1,856, 844, 857, -1,845, 846, + 844, -1,856, 855, 851, -1,842, 844, 841, -1,857, 858, 856, -1,855, 856, 858, -1,858, + 853, 855, -1,859, 858, 857, -1,853, 859, 860, -1,857, 860, 859, -1,858, 859, 853, -1, + 846, 860, 857, -1,855, 849, 851, -1,835, 838, 836, -1,861, 862, 861, -1,861, 861, + 863, -1,863, 865, 864, -1,867, 866, 864, -1,868, 866, 867, -1,867, 864, 865, -1,871, + 870, 869, -1,869, 873, 872, -1,873, 869, 870, -1,876, 875, 874, -1,879, 878, 877, -1, + 879, 877, 874, -1,882, 881, 880, -1,874, 877, 876, -1,883, 883, 883, -1,884, 884, + 884, -1,885, 880, 881, -1,886, 886, 886, -1,885, 887, 880, -1,890, 889, 888, -1,891, + 891, 889, -1,893, 893, 892, -1,894, 888, 892, -1,846, 732, 731, -1,846, 724, 766, -1, + 895, 766, 761, -1,724, 846, 731, -1,761, 896, 895, -1,846, 766, 895, -1,860, 846, + 895, -1,762, 896, 761, -1,897, 698, 730, -1,762, 698, 896, -1,896, 698, 897, -1,896, + 898, 895, -1,897, 727, 899, -1,902, 901, 900, -1,900, 904, 903, -1,901, 902, 899, -1, + 903, 904, 753, -1,897, 899, 902, -1,905, 897, 902, -1,903, 753, 906, -1,906, 908, + 907, -1,908, 758, 909, -1,902, 900, 903, -1,897, 730, 727, -1,897, 910, 896, -1,898, + 896, 910, -1,911, 860, 898, -1,905, 902, 912, -1,913, 910, 905, -1,914, 905, 912, -1, + 902, 903, 912, -1,910, 911, 898, -1,910, 897, 905, -1,913, 853, 911, -1,860, 911, + 853, -1,910, 913, 911, -1,915, 853, 914, -1,913, 914, 853, -1,916, 853, 915, -1,912, + 915, 914, -1,905, 914, 913, -1,916, 915, 912, -1,907, 917, 903, -1,912, 903, 917, -1, + 918, 917, 907, -1,906, 907, 903, -1,920, 909, 919, -1,907, 909, 918, -1,918, 909, + 920, -1,758, 919, 909, -1,918, 916, 917, -1,908, 909, 907, -1,920, 921, 918, -1,916, + 918, 921, -1,921, 853, 916, -1,922, 921, 920, -1,853, 922, 923, -1,920, 923, 922, -1, + 921, 922, 853, -1,919, 923, 920, -1,916, 912, 917, -1,860, 895, 898, -1,919, 758, + 924, -1,926, 925, 795, -1,927, 642, 643, -1,925, 928, 924, -1,928, 925, 926, -1,923, + 919, 928, -1,929, 928, 926, -1,926, 795, 930, -1,932, 930, 931, -1,927, 643, 652, -1, + 933, 930, 932, -1,930, 934, 926, -1,919, 924, 928, -1,937, 936, 935, -1,653, 653, + 938, -1,940, 819, 939, -1,935, 936, 941, -1,943, 942, 822, -1,942, 939, 819, -1,945, + 822, 944, -1,944, 946, 945, -1,946, 946, 945, -1,937, 935, 933, -1,933, 932, 937, -1, + 933, 947, 930, -1,929, 926, 934, -1,948, 923, 929, -1,947, 933, 949, -1,950, 934, + 947, -1,951, 947, 949, -1,933, 935, 949, -1,934, 948, 929, -1,934, 930, 947, -1,950, + 853, 948, -1,923, 948, 853, -1,934, 950, 948, -1,952, 853, 951, -1,950, 951, 853, -1, + 953, 853, 952, -1,949, 952, 951, -1,947, 951, 950, -1,953, 952, 949, -1,939, 954, + 935, -1,949, 935, 954, -1,955, 954, 939, -1,940, 939, 935, -1,956, 943, 945, -1,939, + 943, 955, -1,955, 943, 956, -1,822, 945, 943, -1,955, 953, 954, -1,942, 943, 939, -1, + 956, 957, 955, -1,953, 955, 957, -1,957, 853, 953, -1,958, 957, 956, -1,853, 958, + 959, -1,956, 959, 958, -1,957, 958, 853, -1,945, 959, 956, -1,953, 949, 954, -1,923, + 928, 929, -1,945, 946, 946, -1,945, 960, 808, -1,961, 808, 806, -1,960, 945, 946, -1, + 961, 806, 962, -1,959, 945, 961, -1,963, 961, 962, -1,806, 814, 962, -1,962, 814, + 964, -1,964, 966, 965, -1,965, 962, 964, -1,945, 808, 961, -1,965, 968, 967, -1,971, + 970, 969, -1,970, 972, 969, -1,971, 973, 967, -1,969, 974, 803, -1,965, 967, 973, -1, + 975, 965, 973, -1,969, 803, 801, -1,801, 798, 976, -1,798, 788, 977, -1,971, 969, + 973, -1,978, 610, 610, -1,965, 979, 962, -1,963, 962, 979, -1,980, 959, 963, -1,975, + 973, 981, -1,982, 979, 975, -1,983, 975, 981, -1,973, 969, 981, -1,979, 980, 963, -1, + 979, 965, 975, -1,982, 853, 980, -1,959, 980, 853, -1,979, 982, 980, -1,984, 853, + 983, -1,982, 983, 853, -1,985, 853, 984, -1,981, 984, 983, -1,975, 983, 982, -1,985, + 984, 981, -1,976, 986, 969, -1,981, 969, 986, -1,987, 986, 976, -1,801, 976, 969, -1, + 988, 977, 825, -1,976, 977, 987, -1,987, 977, 988, -1,788, 825, 977, -1,987, 985, + 986, -1,798, 977, 976, -1,988, 989, 987, -1,985, 987, 989, -1,989, 853, 985, -1,990, + 989, 988, -1,853, 990, 831, -1,988, 831, 990, -1,989, 990, 853, -1,825, 831, 988, -1, + 985, 981, 986, -1,959, 961, 963, -1,469, 992, 991, -1,995, 994, 993, -1,996, 995, + 993, -1,999, 998, 997, -1,992, 999, 997, -1,998, 1001, 1000, -1,997, 995, 992, -1, + 991, 992, 996, -1,469, 1003, 1002, -1,1004, 1002, 1003, -1,1002, 999, 992, -1,999, + 1001, 998, -1,1001, 999, 1005, -1,1001, 1007, 1006, -1,1007, 1001, 1005, -1,999, + 1002, 1005, -1,1001, 1006, 1000, -1,1002, 992, 469, -1,995, 996, 992, -1,1010, 1009, + 1008, -1,1013, 1012, 1011, -1,523, 1014, 1012, -1,1015, 1009, 1013, -1,1016, 1012, + 529, -1,523, 1018, 1017, -1,1018, 1019, 1017, -1,1016, 523, 1012, -1,1006, 1007, + 1010, -1,1010, 1008, 1006, -1,1020, 1006, 1008, -1,1021, 1008, 1015, -1,1000, 1006, + 1020, -1,1020, 1008, 1021, -1,1009, 1015, 1008, -1,1012, 1014, 1011, -1,1017, 1011, + 1014, -1,1017, 1022, 1011, -1,1022, 1015, 1011, -1,1022, 1021, 1015, -1,523, 1017, + 1014, -1,1013, 1011, 1015, -1,1025, 1024, 1023, -1,1026, 1024, 1025, -1,1029, 1028, + 1027, -1,1026, 1030, 1029, -1,1029, 1030, 1028, -1,1031, 1024, 1026, -1,1033, 1031, + 1032, -1,1033, 1034, 1033, -1,1029, 1032, 1026, -1,1033, 1032, 1033, -1,1034, 1033, + 1035, -1,1031, 1026, 1032, -1,1038, 1037, 1036, -1,1038, 1036, 1039, -1,1041, 1039, + 1040, -1,1019, 1038, 1017, -1,1038, 1019, 1037, -1,1017, 1041, 1042, -1,1041, 1017, + 1038, -1,1038, 1039, 1041, -1,1040, 1043, 1041, -1,1045, 1041, 1044, -1,1044, 1043, + 1046, -1,1044, 1046, 1047, -1,1047, 1046, 1048, -1,1041, 1045, 1042, -1,1049, 1047, + 1000, -1,1049, 1045, 1044, -1,1047, 1049, 1044, -1,1044, 1041, 1043, -1,1048, 1051, + 1050, -1,1051, 1052, 1050, -1,1000, 1047, 1050, -1,1050, 1053, 1000, -1,1054, 1053, + 1050, -1,1047, 1048, 1050, -1,1050, 1052, 1054, -1,1054, 1052, 1055, -1,1055, 1052, + 1056, -1,1058, 1057, 1056, -1,1055, 1056, 1057, -1,997, 1054, 1059, -1,1055, 994, + 1059, -1,994, 1055, 1057, -1,1054, 1055, 1059, -1,1054, 997, 1053, -1,1062, 1061, + 1060, -1,1065, 1064, 1063, -1,1065, 1066, 1066, -1,1064, 1065, 1066, -1,1063, 1068, + 1067, -1,1070, 1069, 1068, -1,1072, 1069, 1071, -1,1068, 1073, 1070, -1,1068, 1069, + 1072, -1,1074, 1073, 1068, -1,1075, 1065, 1063, -1,1061, 1062, 1076, -1,1075, 1067, + 1077, -1,1063, 1067, 1075, -1,1080, 1079, 1078, -1,1077, 1075, 1077, -1,1079, 1077, + 1077, -1,1071, 1071, 1072, -1,1078, 1082, 1081, -1,1082, 1083, 1081, -1,1078, 1079, + 1077, -1,1068, 1072, 1067, -1,1086, 1085, 1084, -1,1085, 1088, 1087, -1,1091, 1090, + 1089, -1,1093, 1092, 1086, -1,1090, 1060, 1089, -1,1096, 1095, 1094, -1,1099, 1098, + 1097, -1,1098, 1101, 1100, -1,1102, 1095, 1099, -1,1103, 1088, 1096, -1,1105, 1104, + 1104, -1,1104, 1106, 1104, -1,1073, 1107, 1105, -1,1108, 1107, 1074, -1,1109, 1092, + 1093, -1,1108, 1074, 1110, -1,1107, 1108, 1111, -1,1112, 1111, 1108, -1,1113, 1106, + 1112, -1,1074, 1107, 1073, -1,1073, 1105, 1104, -1,1109, 1115, 1114, -1,1117, 1116, + 1079, -1,1076, 1118, 1061, -1,1119, 1081, 1083, -1,1120, 1081, 1119, -1,1104, 1106, + 1113, -1,1113, 1112, 1121, -1,1122, 1121, 1110, -1,1123, 1116, 1117, -1,1108, 1110, + 1121, -1,1125, 1124, 1110, -1,1125, 1091, 1089, -1,1122, 1124, 1125, -1,1080, 1120, + 1126, -1,1079, 1080, 1117, -1,1081, 1120, 1080, -1,1081, 1080, 1078, -1,1113, 1080, + 1126, -1,1125, 1089, 1122, -1,1080, 1113, 1121, -1,1124, 1122, 1110, -1,1108, 1121, + 1112, -1,1089, 1060, 1061, -1,1127, 1061, 1118, -1,1118, 1114, 1127, -1,1127, 1115, + 1109, -1,1109, 1128, 1127, -1,1084, 1085, 1129, -1,1130, 1084, 1129, -1,1131, 1129, + 1087, -1,1129, 1085, 1087, -1,1084, 1128, 1093, -1,1093, 1086, 1084, -1,1103, 1096, + 1094, -1,1132, 1103, 1094, -1,1133, 1094, 1102, -1,1094, 1095, 1102, -1,1097, 1098, + 1100, -1,1134, 1097, 1100, -1,1136, 1100, 1135, -1,1100, 1101, 1135, -1,1097, 1137, + 1102, -1,1102, 1099, 1097, -1,1103, 1138, 1087, -1,1087, 1088, 1103, -1,1109, 1093, + 1128, -1,1129, 1131, 1130, -1,1087, 1138, 1131, -1,1084, 1130, 1128, -1,1094, 1133, + 1132, -1,1102, 1137, 1133, -1,1100, 1136, 1134, -1,1135, 1139, 1136, -1,1097, 1134, + 1137, -1,1103, 1132, 1138, -1,1115, 1127, 1114, -1,1123, 1116, 1123, -1,1142, 1141, + 1140, -1,1145, 1144, 1143, -1,1148, 1147, 1146, -1,1151, 1150, 1149, -1,1153, 1152, + 1151, -1,1147, 1148, 1154, -1,1145, 1149, 1155, -1,1140, 1156, 1142, -1,1159, 1158, + 1157, -1,1161, 1159, 1160, -1,1160, 1163, 1162, -1,1163, 1165, 1164, -1,1141, 1142, + 1166, -1,1153, 1157, 1167, -1,1170, 1169, 1168, -1,1171, 1170, 1168, -1,1170, 1172, + 1169, -1,1173, 1171, 1168, -1,1175, 1168, 1174, -1,1177, 1176, 1173, -1,1178, 1173, + 1176, -1,1179, 1177, 1173, -1,1171, 1173, 1180, -1,1173, 1178, 1180, -1,1165, 1175, + 1181, -1,1183, 1143, 1182, -1,1173, 1142, 1184, -1,1186, 1185, 1185, -1,1186, 1185, + 1184, -1,1066, 1187, 1064, -1,1064, 1188, 1142, -1,1156, 1189, 1142, -1,1184, 1142, + 1189, -1,1189, 1186, 1184, -1,1156, 1190, 1189, -1,1179, 1173, 1184, -1,1193, 1192, + 1191, -1,1192, 1156, 1190, -1,1192, 1190, 1191, -1,1194, 1192, 1193, -1,1166, 1188, + 1195, -1,1064, 1187, 1188, -1,1166, 1195, 1195, -1,1188, 1166, 1142, -1,1066, 1066, + 1187, -1,1147, 1191, 1146, -1,1156, 1192, 1190, -1,1185, 1194, 1193, -1,1135, 1101, + 1183, -1,1182, 1143, 1144, -1,1139, 1135, 1182, -1,1155, 1149, 1150, -1,1196, 1144, + 1155, -1,1197, 1155, 1150, -1,1150, 1151, 1152, -1,1144, 1198, 1182, -1,1144, 1145, + 1155, -1,1167, 1157, 1158, -1,1199, 1152, 1167, -1,1200, 1167, 1158, -1,1158, 1159, + 1161, -1,1162, 1163, 1164, -1,1201, 1161, 1162, -1,1202, 1162, 1164, -1,1164, 1165, + 1181, -1,1161, 1203, 1158, -1,1161, 1160, 1162, -1,1152, 1204, 1150, -1,1152, 1153, + 1167, -1,1182, 1198, 1139, -1,1155, 1197, 1196, -1,1150, 1204, 1197, -1,1144, 1196, + 1198, -1,1167, 1200, 1199, -1,1158, 1203, 1200, -1,1162, 1202, 1201, -1,1164, 1205, + 1202, -1,1161, 1201, 1203, -1,1152, 1199, 1204, -1,1206, 1205, 1164, -1,1168, 1169, + 1174, -1,1169, 1172, 1207, -1,1208, 1174, 1169, -1,1207, 1172, 1209, -1,1174, 1206, + 1181, -1,1195, 1154, 1195, -1,1191, 1210, 1193, -1,1154, 1195, 1211, -1,1123, 1212, + 1123, -1,1174, 1181, 1175, -1,1215, 1214, 1213, -1,1207, 1208, 1169, -1,1207, 1209, + 1215, -1,1209, 1214, 1215, -1,1210, 1215, 1213, -1,1211, 1216, 1154, -1,1191, 1216, + 1210, -1,1216, 1191, 1147, -1,1147, 1154, 1216, -1,1212, 1123, 1117, -1,1216, 1211, + 1117, -1,1216, 1215, 1210, -1,1211, 1212, 1117, -1,1208, 1206, 1174, -1,1206, 1164, + 1181, -1,1135, 1183, 1182, -1,1218, 1217, 1217, -1,1220, 1218, 1219, -1,1217, 1218, + 1221, -1,1221, 1218, 1222, -1,1224, 1223, 1222, -1,1221, 1222, 1223, -1,1220, 1224, + 1222, -1,1226, 1225, 1220, -1,1224, 1220, 1225, -1,1218, 1220, 1222, -1,1227, 1183, + 1101, -1,1228, 1143, 1183, -1,1230, 1227, 1229, -1,1227, 1101, 1229, -1,1231, 1145, + 1228, -1,1183, 1227, 1228, -1,1143, 1228, 1145, -1,1232, 1228, 1227, -1,1233, 1149, + 1231, -1,1151, 1149, 1234, -1,1153, 1235, 1157, -1,1236, 1153, 1151, -1,1159, 1157, + 1237, -1,1160, 1159, 1238, -1,1145, 1231, 1149, -1,1239, 1231, 1228, -1,1230, 1229, + 1240, -1,1231, 1239, 1233, -1,1149, 1233, 1234, -1,1234, 1233, 1241, -1,1232, 1227, + 1230, -1,1233, 1239, 1241, -1,1232, 1239, 1228, -1,1241, 1242, 1234, -1,1243, 1235, + 1236, -1,1153, 1236, 1235, -1,1244, 1238, 1237, -1,1159, 1237, 1238, -1,1237, 1157, + 1235, -1,1244, 1237, 1235, -1,1236, 1242, 1245, -1,1235, 1243, 1244, -1,1243, 1236, + 1245, -1,1244, 1246, 1238, -1,1234, 1242, 1236, -1,1236, 1151, 1234, -1,1238, 1163, + 1160, -1,1247, 1165, 1163, -1,1248, 1175, 1165, -1,1250, 1247, 1249, -1,1247, 1163, + 1249, -1,1251, 1168, 1248, -1,1165, 1247, 1248, -1,1175, 1248, 1168, -1,1252, 1248, + 1247, -1,1238, 1246, 1249, -1,1253, 1173, 1251, -1,1063, 1064, 1254, -1,1064, 1142, + 1254, -1,1142, 1173, 1255, -1,1063, 1256, 1068, -1,1068, 1257, 1074, -1,1257, 1068, + 1256, -1,1168, 1251, 1173, -1,1258, 1251, 1248, -1,1246, 1259, 1249, -1,1253, 1251, + 1258, -1,1259, 1250, 1249, -1,1252, 1247, 1250, -1,1253, 1258, 1260, -1,1252, 1258, + 1248, -1,1260, 1255, 1253, -1,1260, 1261, 1255, -1,1254, 1255, 1261, -1,1262, 1254, + 1261, -1,1263, 1263, 1263, -1,1254, 1142, 1255, -1,1256, 1265, 1264, -1,1254, 1262, + 1264, -1,1256, 1267, 1266, -1,1267, 1256, 1264, -1,1266, 1257, 1256, -1,1255, 1173, + 1253, -1,1163, 1238, 1249, -1,1268, 1086, 1092, -1,1269, 1086, 1268, -1,1085, 1269, + 1270, -1,1086, 1269, 1085, -1,1088, 1085, 1271, -1,1272, 1269, 1268, -1,1272, 1273, + 1269, -1,1270, 1269, 1273, -1,1274, 1270, 1273, -1,1276, 1275, 1271, -1,1088, 1271, + 1275, -1,1271, 1274, 1276, -1,1276, 1277, 1275, -1,1270, 1274, 1271, -1,1271, 1085, + 1270, -1,1275, 1096, 1088, -1,1278, 1095, 1096, -1,1279, 1095, 1278, -1,1275, 1277, + 1278, -1,1279, 1098, 1099, -1,1101, 1098, 1229, -1,1279, 1280, 1098, -1,1095, 1279, + 1099, -1,1281, 1279, 1278, -1,1281, 1278, 1277, -1,1282, 1279, 1281, -1,1283, 1229, + 1280, -1,1098, 1280, 1229, -1,1229, 1283, 1240, -1,1282, 1283, 1280, -1,1279, 1282, + 1280, -1,1096, 1275, 1278, -1,1285, 1259, 1284, -1,1287, 1287, 1286, -1,1290, 1289, + 1288, -1,1290, 1292, 1291, -1,1294, 1293, 1259, -1,1297, 1296, 1295, -1,1296, 1298, + 1295, -1,1298, 1300, 1299, -1,1297, 1301, 1292, -1,1302, 1290, 1291, -1,1259, 1285, + 1294, -1,1297, 1295, 1301, -1,1291, 1292, 1301, -1,1295, 1298, 1299, -1,1232, 1301, + 1295, -1,1239, 1295, 1299, -1,1300, 1303, 1299, -1,1301, 1230, 1291, -1,1242, 1303, + 1304, -1,1303, 1305, 1304, -1,1242, 1304, 1305, -1,1241, 1299, 1303, -1,1302, 1289, + 1290, -1,1308, 1307, 1306, -1,1310, 1306, 1309, -1,1312, 1308, 1311, -1,1311, 1313, + 1312, -1,1315, 1314, 1244, -1,1317, 1243, 1316, -1,1319, 1313, 1318, -1,1321, 1320, + 1313, -1,1318, 1313, 1320, -1,1313, 1322, 1312, -1,1243, 1317, 1323, -1,1326, 1325, + 1324, -1,1329, 1328, 1327, -1,1329, 1293, 1328, -1,1327, 1331, 1330, -1,1319, 1332, + 1313, -1,1326, 1333, 1325, -1,1313, 1332, 1322, -1,1324, 1310, 1309, -1,1331, 1333, + 1326, -1,1250, 1329, 1327, -1,1334, 1284, 1246, -1,1241, 1239, 1299, -1,1316, 1245, + 1335, -1,1334, 1246, 1336, -1,1323, 1337, 1243, -1,1244, 1337, 1315, -1,1314, 1336, + 1246, -1,1230, 1240, 1302, -1,1230, 1301, 1232, -1,1241, 1303, 1242, -1,1242, 1305, + 1245, -1,1232, 1295, 1239, -1,1316, 1243, 1245, -1,1314, 1246, 1244, -1,1284, 1259, + 1246, -1,1337, 1244, 1243, -1,1305, 1335, 1245, -1,1331, 1326, 1330, -1,1309, 1258, + 1326, -1,1312, 1261, 1307, -1,1260, 1309, 1307, -1,1330, 1326, 1252, -1,1306, 1307, + 1309, -1,1329, 1250, 1293, -1,1324, 1309, 1326, -1,1312, 1322, 1338, -1,1338, 1339, + 1264, -1,1338, 1264, 1312, -1,1340, 1267, 1339, -1,1327, 1252, 1250, -1,1308, 1312, + 1307, -1,1252, 1326, 1258, -1,1260, 1307, 1261, -1,1261, 1312, 1262, -1,1258, 1309, + 1260, -1,1339, 1267, 1264, -1,1264, 1262, 1312, -1,1340, 1341, 1267, -1,1341, 1266, + 1267, -1,1252, 1327, 1330, -1,1250, 1259, 1293, -1,1230, 1302, 1291, -1,1344, 1343, + 1342, -1,1345, 1282, 1342, -1,1344, 1342, 1281, -1,1344, 1281, 1343, -1,1346, 1345, + 1342, -1,1348, 1347, 1302, -1,1347, 1289, 1302, -1,1302, 1349, 1348, -1,1351, 1350, + 1346, -1,1345, 1346, 1350, -1,1302, 1351, 1352, -1,1350, 1351, 1302, -1,1349, 1302, + 1352, -1,1302, 1283, 1350, -1,1354, 1277, 1353, -1,1350, 1282, 1345, -1,1274, 1356, + 1355, -1,1274, 1358, 1357, -1,1359, 1274, 1355, -1,1273, 1272, 1360, -1,1361, 1273, + 1360, -1,1273, 1356, 1274, -1,1273, 1361, 1356, -1,1274, 1357, 1276, -1,1363, 1362, + 1276, -1,1276, 1357, 1364, -1,1362, 1365, 1277, -1,1277, 1276, 1362, -1,1364, 1363, + 1276, -1,1281, 1354, 1343, -1,1282, 1350, 1283, -1,1283, 1302, 1240, -1,1281, 1342, + 1282, -1,1277, 1365, 1353, -1,1359, 1358, 1274, -1,1359, 1366, 1358, -1,1277, 1354, + 1281, -1,1367, 1306, 1310, -1,1368, 1308, 1306, -1,1369, 1368, 1367, -1,1306, 1367, + 1368, -1,1368, 1369, 1311, -1,1313, 1311, 1369, -1,1311, 1308, 1368, -1,1370, 1369, + 1367, -1,1371, 1321, 1313, -1,1372, 1371, 1313, -1,1374, 1371, 1373, -1,1375, 1369, + 1370, -1,1375, 1373, 1372, -1,1371, 1372, 1373, -1,1369, 1375, 1372, -1,1313, 1369, + 1372, -1,1377, 1290, 1376, -1,1378, 1290, 1377, -1,1380, 1377, 1379, -1,1380, 1381, + 1378, -1,1378, 1381, 1382, -1,1380, 1378, 1377, -1,1292, 1290, 1378, -1,1378, 1382, + 1292, -1,1297, 1292, 1382, -1,1383, 1297, 1382, -1,1296, 1297, 1384, -1,1386, 1383, + 1385, -1,1382, 1385, 1383, -1,1383, 1386, 1384, -1,1384, 1297, 1383, -1,1381, 1385, + 1382, -1,1387, 1379, 1377, -1,1377, 1376, 1388, -1,1388, 1288, 1289, -1,1287, 1389, + 1287, -1,1289, 1390, 1388, -1,1391, 1388, 1390, -1,1394, 1393, 1392, -1,1397, 1396, + 1395, -1,1399, 1393, 1398, -1,1391, 1400, 1388, -1,1402, 1401, 1388, -1,1388, 1400, + 1402, -1,1405, 1404, 1403, -1,1408, 1407, 1406, -1,1409, 1404, 1408, -1,1403, 1401, + 1405, -1,1388, 1387, 1377, -1,1404, 1409, 1403, -1,1388, 1401, 1403, -1,1388, 1403, + 1410, -1,1406, 1411, 1408, -1,1409, 1408, 1412, -1,1409, 1413, 1403, -1,1407, 1415, + 1414, -1,1407, 1411, 1406, -1,1418, 1417, 1416, -1,1407, 1414, 1419, -1,1420, 1387, + 1388, -1,1422, 1415, 1421, -1,1415, 1423, 1421, -1,1422, 1423, 1424, -1,1427, 1426, + 1425, -1,1426, 1427, 1428, -1,1425, 1426, 1429, -1,1432, 1431, 1430, -1,1422, 1421, + 1423, -1,1419, 1414, 1415, -1,1417, 1418, 1433, -1,1436, 1435, 1434, -1,1436, 1417, + 1433, -1,1439, 1438, 1437, -1,1438, 1399, 1437, -1,1393, 1440, 1398, -1,1442, 1392, + 1441, -1,1444, 1443, 1392, -1,1394, 1392, 1443, -1,1393, 1394, 1445, -1,1448, 1447, + 1446, -1,1447, 1393, 1445, -1,1451, 1450, 1449, -1,1454, 1453, 1452, -1,1392, 1451, + 1455, -1,1456, 1441, 1392, -1,1458, 1457, 1455, -1,1454, 1452, 1450, -1,1461, 1460, + 1459, -1,1451, 1458, 1455, -1,1035, 1035, 1035, -1,1464, 1463, 1462, -1,1466, 1465, + 1439, -1,1388, 1410, 1420, -1,1464, 1465, 1463, -1,1446, 1467, 1448, -1,1445, 1393, + 1448, -1,1393, 1445, 1440, -1,1398, 1440, 1468, -1,1469, 1398, 1468, -1,1471, 1470, + 1467, -1,1474, 1473, 1472, -1,1477, 1476, 1475, -1,1472, 1475, 1474, -1,1480, 1479, + 1478, -1,1473, 1474, 1473, -1,1475, 1476, 1474, -1,1431, 1426, 1428, -1,1481, 1470, + 1471, -1,1483, 1410, 1482, -1,1486, 1485, 1484, -1,1410, 1403, 1413, -1,1412, 1408, + 1411, -1,1489, 1488, 1487, -1,1419, 1415, 1422, -1,1487, 1488, 1490, -1,1411, 1407, + 1419, -1,1395, 1491, 1397, -1,1413, 1409, 1412, -1,1431, 1432, 1417, -1,1493, 1492, + 1488, -1,1463, 1434, 1462, -1,1035, 1035, 1035, -1,1417, 1436, 1434, -1,1466, 1439, + 1437, -1,1490, 1461, 1487, -1,1393, 1447, 1448, -1,1392, 1494, 1456, -1,1398, 1437, + 1399, -1,1490, 1460, 1461, -1,1466, 1463, 1465, -1,1422, 1424, 1426, -1,1459, 1460, + 1486, -1,1495, 1398, 1469, -1,1493, 1488, 1489, -1,1460, 1485, 1486, -1,1484, 1497, + 1496, -1,1451, 1449, 1458, -1,1452, 1453, 1498, -1,1452, 1498, 1499, -1,1499, 1499, + 1452, -1,1500, 1449, 1450, -1,1502, 1501, 1458, -1,1503, 1495, 1501, -1,1452, 1500, + 1450, -1,1458, 1449, 1502, -1,1416, 1417, 1432, -1,1396, 1505, 1504, -1,1497, 1457, + 1506, -1,1507, 1496, 1497, -1,1496, 1508, 1484, -1,1509, 1491, 1395, -1,1495, 1511, + 1510, -1,1396, 1397, 1505, -1,1499, 1503, 1499, -1,1457, 1458, 1506, -1,1503, 1499, + 1512, -1,1501, 1495, 1458, -1,1430, 1431, 1428, -1,1503, 1513, 1495, -1,1513, 1503, + 1514, -1,1429, 1426, 1424, -1,1503, 1512, 1514, -1,1495, 1469, 1515, -1,1507, 1497, + 1506, -1,1497, 1484, 1485, -1,1410, 1483, 1420, -1,1509, 1484, 1508, -1,1435, 1462, + 1434, -1,1476, 1477, 1505, -1,1504, 1505, 1477, -1,1495, 1515, 1516, -1,1491, 1509, + 1508, -1,1517, 1495, 1510, -1,1495, 1517, 1458, -1,1516, 1511, 1495, -1,1479, 1518, + 1478, -1,1519, 1479, 1480, -1,1519, 1480, 1520, -1,1520, 1521, 1519, -1,1481, 1518, + 1470, -1,1518, 1481, 1478, -1,1446, 1471, 1467, -1,1444, 1392, 1442, -1,1494, 1392, + 1455, -1,1453, 1454, 1522, -1,1525, 1524, 1523, -1,1524, 1526, 1522, -1,1523, 1528, + 1527, -1,1531, 1530, 1529, -1,1528, 1533, 1532, -1,1532, 1533, 1529, -1,1531, 1535, + 1534, -1,1536, 1534, 1535, -1,1526, 1453, 1522, -1,1525, 1538, 1537, -1,1523, 1539, + 1525, -1,1525, 1537, 1540, -1,1526, 1524, 1541, -1,1524, 1525, 1542, -1,1526, 1498, + 1453, -1,1532, 1527, 1528, -1,1545, 1544, 1543, -1,1529, 1530, 1532, -1,1530, 1531, + 1534, -1,1546, 1530, 1534, -1,1534, 1536, 1547, -1,1536, 1549, 1548, -1,1530, 1550, + 1532, -1,1527, 1543, 1523, -1,1552, 1551, 1525, -1,1523, 1543, 1539, -1,1553, 1549, + 1536, -1,1556, 1555, 1554, -1,1558, 1553, 1557, -1,1560, 1559, 1555, -1,1562, 1483, + 1561, -1,1562, 1561, 1563, -1,1563, 1565, 1564, -1,1564, 1565, 1566, -1,1483, 1562, + 1420, -1,1560, 1567, 1559, -1,1570, 1569, 1568, -1,1573, 1572, 1571, -1,1570, 1574, + 1569, -1,1558, 1569, 1575, -1,1570, 1568, 1574, -1,1573, 1568, 1572, -1,1558, 1557, + 1569, -1,1576, 1571, 1572, -1,1554, 1566, 1577, -1,1576, 1579, 1578, -1,1580, 1579, + 1567, -1,1580, 1581, 1579, -1,1578, 1579, 1582, -1,1580, 1567, 1581, -1,1567, 1560, + 1583, -1,1582, 1576, 1578, -1,1555, 1556, 1560, -1,1573, 1571, 1576, -1,1575, 1553, + 1558, -1,1538, 1525, 1551, -1,1548, 1549, 1553, -1,1584, 1584, 1541, -1,1586, 1585, + 1584, -1,1584, 1584, 1585, -1,1587, 1585, 1586, -1,1542, 1584, 1541, -1,1552, 1552, + 1551, -1,1589, 1588, 1588, -1,1525, 1540, 1542, -1,1587, 1586, 1589, -1,1544, 1545, + 1544, -1,1590, 1587, 1589, -1,1512, 1591, 1514, -1,1589, 1588, 1590, -1,1591, 1587, + 1513, -1,1514, 1591, 1513, -1,1592, 1587, 1590, -1,1544, 1544, 1593, -1,1587, 1592, + 1594, -1,1593, 1594, 1544, -1,1594, 1593, 1595, -1,1595, 1587, 1594, -1,1585, 1587, + 1591, -1,1527, 1532, 1596, -1,1532, 1550, 1595, -1,1595, 1596, 1532, -1,1595, 1550, + 1587, -1,1530, 1546, 1550, -1,1554, 1577, 1556, -1,1556, 1577, 1597, -1,1577, 1565, + 1598, -1,1566, 1565, 1577, -1,1599, 1565, 1561, -1,1573, 1574, 1568, -1,1548, 1547, + 1536, -1,1534, 1547, 1546, -1,1563, 1561, 1565, -1,1527, 1545, 1543, -1,1548, 1553, + 1575, -1,1575, 1569, 1574, -1,1582, 1579, 1581, -1,1581, 1567, 1583, -1,1573, 1576, + 1582, -1,1556, 1597, 1583, -1,1577, 1598, 1597, -1,1561, 1600, 1599, -1,1538, 1601, + 1537, -1,1561, 1482, 1600, -1,1537, 1601, 1540, -1,1565, 1599, 1598, -1,1560, 1556, + 1583, -1,1483, 1482, 1561, -1,1541, 1524, 1542, -1,1604, 1603, 1602, -1,1605, 1603, + 1604, -1,1606, 1602, 1603, -1,1603, 1606, 1606, -1,1608, 1607, 1602, -1,1610, 1609, + 1608, -1,1604, 1602, 1611, -1,1607, 1608, 1609, -1,1612, 1610, 1608, -1,1614, 1612, + 1613, -1,1614, 1613, 1615, -1,1616, 1615, 1613, -1,1617, 1612, 1614, -1,1617, 1610, + 1612, -1,1602, 1607, 1618, -1,1621, 1620, 1619, -1,1624, 1623, 1622, -1,1625, 1623, + 1625, -1,1625, 1623, 1626, -1,1629, 1628, 1627, -1,1630, 1624, 1627, -1,1632, 1370, + 1631, -1,1633, 1632, 1620, -1,1632, 1629, 1370, -1,1629, 1627, 1370, -1,1626, 1623, + 1624, -1,1615, 1621, 1619, -1,1615, 1616, 1621, -1,1615, 1634, 1614, -1,1632, 1633, + 1629, -1,1635, 1635, 1635, -1,1636, 1604, 1611, -1,1632, 1637, 1620, -1,1638, 1602, + 1618, -1,1639, 1602, 1638, -1,1619, 1620, 1637, -1,1640, 1604, 1636, -1,1609, 1610, + 1617, -1,1618, 1607, 1609, -1,1634, 1619, 1641, -1,1641, 1619, 1637, -1,1634, 1615, + 1619, -1,1617, 1614, 1634, -1,1642, 1637, 1632, -1,1645, 1644, 1643, -1,1642, 1631, + 1644, -1,1645, 1643, 1646, -1,1646, 1648, 1647, -1,1644, 1645, 1642, -1,1646, 1650, + 1649, -1,1646, 1651, 1650, -1,1652, 1647, 1648, -1,1647, 1651, 1646, -1,1652, 1652, + 1647, -1,1624, 1630, 1626, -1,1645, 1646, 1653, -1,1628, 1630, 1627, -1,1642, 1632, + 1631, -1,1655, 1655, 1654, -1,1658, 1657, 1656, -1,1657, 1660, 1659, -1,1661, 1660, + 1657, -1,1656, 1, 1, -1,1661, 1657, 1658, -1,1, 1, 1656, -1,1656, 1, 1, -1,1, 1662, + 1602, -1,1663, 1662, 1, -1,1656, 1, 1658, -1,1, 1, 1, -1,1665, 1, 1664, -1,1, 1667, + 1666, -1,1667, 1668, 1666, -1,1665, 1669, 1667, -1,1665, 1664, 1670, -1,1, 1671, + 1, -1,1672, 1, 1, -1,1669, 1665, 1670, -1,1669, 1672, 1667, -1,1672, 1668, 1667, -1, + 1672, 1669, 1, -1,1, 1, 1671, -1,1674, 1673, 1662, -1,1674, 1675, 1673, -1,1662, + 1663, 1676, -1,1676, 1674, 1662, -1,1677, 1523, 1675, -1,1523, 1677, 1678, -1,1523, + 1680, 1679, -1,1682, 1679, 1681, -1,1679, 1682, 1523, -1,1682, 1681, 1683, -1,1, + 1682, 1683, -1,1680, 1523, 1678, -1,1673, 1675, 1523, -1,1, 1, 1, -1,1671, 1684, + 1, -1,1673, 1685, 1671, -1,1671, 1685, 1684, -1,1686, 1685, 1673, -1,1687, 1686, + 1673, -1,1673, 1392, 1687, -1,1, 1, 1392, -1,1, 1, 1, -1,1688, 1392, 1, -1,1, 1, + 1, -1,1, 1, 1, -1,1392, 1688, 1687, -1,1673, 1523, 1392, -1,1663, 1, 1, -1,1690, + 1633, 1689, -1,1692, 1689, 1691, -1,1694, 1692, 1693, -1,1690, 1689, 1692, -1,1633, + 1695, 1689, -1,1690, 1692, 1694, -1,1621, 1691, 1689, -1,1693, 1692, 1691, -1,1693, + 1691, 1696, -1,1698, 1693, 1697, -1,1698, 1694, 1693, -1,1621, 1616, 1691, -1,1695, + 1621, 1689, -1,1694, 1698, 1699, -1,1690, 1701, 1700, -1,1701, 1690, 1694, -1,1702, + 1690, 1700, -1,1702, 1700, 1703, -1,1704, 1690, 1702, -1,1701, 1699, 1700, -1,1704, + 1702, 1705, -1,1703, 1700, 1699, -1,1703, 1699, 1706, -1,1708, 1704, 1707, -1,1708, + 1709, 1690, -1,1710, 1709, 1708, -1,1712, 1711, 1709, -1,1709, 1711, 1690, -1,1702, + 1703, 1705, -1,1704, 1708, 1690, -1,1701, 1694, 1699, -1,1698, 1713, 1699, -1,1613, + 1696, 1691, -1,1714, 1696, 1613, -1,1696, 1714, 1608, -1,1697, 1696, 1715, -1,1697, + 1693, 1696, -1,1698, 1697, 1713, -1,1715, 1696, 1608, -1,1697, 1715, 1713, -1,1706, + 1715, 1716, -1,1715, 1706, 1713, -1,1716, 1715, 1717, -1,1706, 1716, 1703, -1,1713, + 1706, 1699, -1,1703, 1716, 1705, -1,1705, 1707, 1704, -1,1707, 1705, 1717, -1,1710, + 1712, 1709, -1,1712, 1710, 1718, -1,1720, 1712, 1719, -1,1712, 1720, 1711, -1,1707, + 1721, 1710, -1,1707, 1710, 1708, -1,1717, 1721, 1707, -1,1717, 1715, 1721, -1,1721, + 1715, 1718, -1,1721, 1718, 1710, -1,1719, 1715, 1722, -1,1719, 1718, 1715, -1,1719, + 1722, 1720, -1,1718, 1719, 1712, -1,1705, 1716, 1717, -1,1691, 1616, 1613, -1,1724, + 1723, 1566, -1,1726, 1725, 1723, -1,1727, 1723, 1725, -1,1727, 1725, 1728, -1,1731, + 1730, 1729, -1,1734, 1733, 1732, -1,1736, 1735, 1731, -1,1730, 1727, 1737, -1,1732, + 1735, 1738, -1,1739, 1729, 1737, -1,1728, 1737, 1727, -1,1736, 1729, 1739, -1,1730, + 1737, 1729, -1,1740, 1738, 1736, -1,1736, 1731, 1729, -1,1740, 1741, 1738, -1,1734, + 1738, 1741, -1,1742, 1734, 1741, -1,1736, 1738, 1735, -1,1739, 1740, 1736, -1,1738, + 1734, 1732, -1,1745, 1744, 1743, -1,1734, 1746, 1733, -1,1747, 1744, 1745, -1,1750, + 1749, 1748, -1,1752, 1751, 1746, -1,1751, 1752, 1749, -1,1746, 1734, 1753, -1,1755, + 1750, 1754, -1,1757, 1529, 1756, -1,1745, 1743, 1756, -1,1757, 1756, 1743, -1,1759, + 1752, 1758, -1,1749, 1752, 1748, -1,1753, 1734, 1742, -1,1753, 1758, 1746, -1,1759, + 1748, 1752, -1,1758, 1752, 1746, -1,1755, 1754, 1747, -1,1755, 1747, 1745, -1,1760, + 1748, 1759, -1,1754, 1748, 1760, -1,1754, 1750, 1748, -1,1726, 1723, 1724, -1,1751, + 1733, 1746, -1,1747, 1754, 1760, -1,1763, 1762, 1761, -1,1763, 1761, 1764, -1,1762, + 1766, 1765, -1,1762, 1767, 1761, -1,292, 1765, 1768, -1,1767, 1765, 292, -1,1765, + 1767, 1762, -1,1771, 1770, 1769, -1,1769, 1773, 1772, -1,1776, 1775, 1774, -1,1776, + 1777, 1775, -1,1775, 1777, 1771, -1,1780, 1779, 1778, -1,1782, 1781, 1772, -1,1785, + 1784, 1783, -1,1784, 1786, 1783, -1,1781, 1782, 1787, -1,1770, 1771, 1777, -1,1782, + 1772, 1773, -1,1770, 1773, 1769, -1,1778, 1776, 1774, -1,1785, 1783, 1781, -1,1788, + 1779, 1780, -1,1778, 1774, 1780, -1,1790, 1788, 1789, -1,1792, 1789, 1791, -1,1791, + 1794, 1793, -1,1796, 1794, 1795, -1,1790, 1779, 1788, -1,1792, 1791, 1793, -1,1799, + 1798, 1797, -1,1793, 1794, 1796, -1,1801, 1799, 1800, -1,1803, 1802, 1386, -1,1805, + 1800, 1804, -1,1806, 1805, 1804, -1,1797, 1795, 1794, -1,1790, 1789, 1792, -1,1785, + 1807, 1784, -1,1809, 1808, 1296, -1,1808, 1810, 1296, -1,1786, 1784, 1811, -1,1807, + 1811, 1784, -1,1811, 1807, 1810, -1,1810, 1808, 1811, -1,1812, 1802, 1809, -1,1786, + 1811, 1808, -1,1815, 1814, 1813, -1,1815, 1817, 1816, -1,1817, 1815, 1813, -1,1812, + 1809, 1296, -1,1814, 1386, 1813, -1,1802, 1812, 1386, -1,1803, 1386, 1814, -1,1801, + 1818, 1798, -1,1818, 1795, 1798, -1,1795, 1797, 1798, -1,1801, 1800, 1819, -1,1800, + 1820, 1819, -1,1800, 1805, 1820, -1,1819, 1818, 1801, -1,1799, 1801, 1798, -1,1787, + 1785, 1781, -1,1823, 1822, 1821, -1,1822, 1824, 1821, -1,1826, 1825, 1824, -1,1825, + 1826, 1827, -1,1830, 1829, 1828, -1,1832, 1829, 1831, -1,1830, 1833, 1827, -1,1835, + 1834, 1822, -1,1824, 1825, 1821, -1,1836, 1821, 1825, -1,1830, 1837, 1833, -1,1838, + 1833, 1837, -1,1833, 1839, 1825, -1,1827, 1833, 1825, -1,1831, 1840, 1832, -1,1841, + 1832, 1840, -1,1840, 1831, 1842, -1,1837, 1830, 1828, -1,1832, 1828, 1829, -1,1835, + 1843, 1834, -1,1846, 1845, 1844, -1,1847, 1844, 1845, -1,1845, 1848, 1847, -1,1849, + 1847, 1848, -1,1850, 1768, 1765, -1,1846, 1850, 1766, -1,1765, 1766, 1850, -1,1844, + 1850, 1846, -1,1853, 1852, 1851, -1,1848, 1854, 1849, -1,1856, 1855, 1849, -1,1858, + 1857, 1855, -1,1852, 1855, 1857, -1,1856, 1858, 1855, -1,1828, 1832, 1841, -1,1828, + 1838, 1837, -1,1839, 1833, 1838, -1,1825, 1839, 1859, -1,1862, 1861, 1860, -1,1864, + 1860, 1863, -1,1862, 1842, 1861, -1,1862, 1860, 1864, -1,1841, 1842, 1862, -1,1835, + 1866, 1865, -1,1835, 1865, 1867, -1,1867, 1868, 1835, -1,1863, 1869, 1864, -1,1836, + 1825, 1859, -1,1823, 1821, 1836, -1,1866, 1822, 1823, -1,1870, 1869, 1863, -1,1872, + 1871, 1853, -1,1873, 1851, 1857, -1,1851, 1873, 1872, -1,1853, 1851, 1872, -1,1871, + 1872, 1874, -1,1851, 1852, 1857, -1,1877, 1876, 1875, -1,1880, 1879, 1878, -1,1879, + 1882, 1881, -1,1882, 1869, 1870, -1,1873, 1874, 1872, -1,1883, 1871, 1874, -1,1883, + 1876, 1877, -1,1875, 1876, 1884, -1,1880, 1878, 1885, -1,1881, 1882, 1870, -1,1854, + 1856, 1849, -1,1866, 1835, 1822, -1,1883, 1886, 1871, -1,1887, 1883, 1877, -1,1888, + 1883, 1887, -1,1883, 1888, 1886, -1,1876, 1880, 1884, -1,1885, 1884, 1880, -1,1879, + 1889, 1878, -1,1881, 1889, 1879, -1,1840, 1842, 1841, -1,1655, 1890, 1654, -1,1655, + 1891, 1890, -1,1654, 1890, 1892, -1,1891, 1893, 1890, -1,1892, 1894, 1654, -1,1894, + 1895, 1654, -1,1897, 1895, 1896, -1,1899, 1897, 1898, -1,1901, 1900, 1899, -1,1903, + 1902, 1900, -1,1894, 1904, 1895, -1,1902, 1906, 1905, -1,1904, 1896, 1895, -1,1907, + 1898, 1897, -1,1896, 1907, 1897, -1,1894, 1896, 1904, -1,1898, 1907, 1908, -1,1908, + 1909, 1901, -1,1901, 1898, 1908, -1,1910, 1903, 1901, -1,1900, 1901, 1903, -1,1902, + 1903, 1906, -1,1910, 1906, 1903, -1,1901, 1911, 1910, -1,1906, 1910, 1912, -1,1913, + 1906, 1912, -1,1909, 1911, 1901, -1,1901, 1899, 1898, -1,1913, 1905, 1906, -1,1916, + 1915, 1914, -1,1914, 1915, 1917, -1,1919, 1918, 1913, -1,1917, 1913, 1918, -1,1917, + 1918, 1914, -1,1919, 1914, 1918, -1,1920, 1915, 1916, -1,1905, 1913, 1917, -1,1923, + 1922, 1921, -1,1923, 1921, 1924, -1,1927, 1926, 1925, -1,1922, 1926, 1928, -1,1929, + 1925, 1920, -1,1931, 1924, 1930, -1,1932, 1929, 1916, -1,1920, 1916, 1929, -1,1925, + 1929, 1927, -1,1933, 1927, 1929, -1,1932, 1914, 1919, -1,1929, 1932, 1933, -1,1933, + 1934, 1927, -1,1916, 1914, 1932, -1,1934, 1921, 1928, -1,1922, 1928, 1921, -1,1924, + 1921, 1930, -1,1935, 1930, 1921, -1,1935, 1921, 1934, -1,1930, 1935, 1936, -1,1930, + 1936, 1937, -1,1937, 1931, 1930, -1,1927, 1934, 1928, -1,1928, 1926, 1927, -1,1912, + 1919, 1913, -1,1940, 1939, 1938, -1,1941, 1939, 1940, -1,1938, 1942, 1940, -1,1938, + 1944, 1943, -1,1938, 1943, 1942, -1,1931, 1946, 1945, -1,1931, 1945, 1947, -1,1931, + 1949, 1948, -1,1931, 1951, 1950, -1,1931, 1950, 1949, -1,1951, 1931, 1947, -1,1953, + 1936, 1952, -1,1954, 1936, 1953, -1,1931, 1956, 1955, -1,1954, 1956, 1936, -1,1931, + 1936, 1956, -1,1946, 1931, 1955, -1,1959, 1958, 1957, -1,1962, 1961, 1960, -1,1963, + 1959, 1957, -1,1938, 1964, 1958, -1,1957, 1958, 1964, -1,1965, 1957, 1964, -1,1966, + 1964, 1938, -1,1957, 1967, 1963, -1,1970, 1969, 1968, -1,1971, 1969, 1970, -1,1972, + 1970, 1967, -1,1970, 1968, 1967, -1,1975, 1974, 1973, -1,1974, 1969, 1971, -1,1977, + 1975, 1976, -1,1963, 1967, 1968, -1,1978, 1967, 1957, -1,1939, 1979, 1966, -1,1979, + 1964, 1966, -1,1965, 1964, 1979, -1,1967, 1978, 1972, -1,1965, 1978, 1957, -1,1982, + 1981, 1980, -1,1983, 1973, 1971, -1,1974, 1971, 1973, -1,1975, 1973, 1976, -1,1984, + 1976, 1973, -1,1971, 1985, 1983, -1,1988, 1987, 1986, -1,1976, 1984, 1989, -1,1984, + 1973, 1983, -1,1990, 1976, 1989, -1,1970, 1972, 1985, -1,1971, 1970, 1985, -1,1990, + 1977, 1976, -1,1993, 1992, 1991, -1,1961, 1995, 1994, -1,1987, 1994, 1986, -1,1998, + 1997, 1996, -1,1998, 1999, 1961, -1,2000, 1986, 1994, -1,1988, 2001, 1987, -1,2002, + 1992, 1982, -1,2003, 1961, 1999, -1,2004, 1993, 1991, -1,1992, 1981, 1982, -1,1980, + 1981, 2005, -1,1992, 2002, 1991, -1,2004, 1991, 2006, -1,2001, 2005, 1987, -1,2008, + 1994, 2007, -1,1987, 2005, 1981, -1,2010, 2009, 1990, -1,1990, 2009, 1977, -1,1996, + 2011, 1998, -1,2009, 1996, 1997, -1,2009, 2010, 1996, -1,1998, 2011, 1999, -1,1999, + 2011, 1996, -1,1960, 1961, 2003, -1,1989, 2010, 1990, -1,1995, 2012, 1994, -1,1995, + 1961, 1962, -1,2000, 1994, 2008, -1,2012, 2007, 1994, -1,1997, 1977, 2009, -1,1993, + 2006, 2013, -1,2013, 2015, 2014, -1,2013, 2014, 1993, -1,2017, 2016, 2015, -1,2019, + 2018, 2017, -1,2016, 2017, 2018, -1,2018, 2014, 2016, -1,2018, 2020, 2014, -1,2022, + 2020, 2021, -1,2024, 2023, 2022, -1,2023, 2024, 2025, -1,2024, 2021, 2019, -1,2021, + 2018, 2019, -1,2026, 2026, 2026, -1,2022, 2021, 2024, -1,2024, 2027, 2025, -1,2020, + 2018, 2021, -1,2030, 2029, 2028, -1,2029, 2030, 2031, -1,2033, 2032, 2028, -1,2028, + 2029, 2033, -1,2031, 2035, 2034, -1,2033, 2034, 2036, -1,2033, 2029, 2034, -1,2034, + 2029, 2031, -1,2027, 2037, 2025, -1,2023, 2025, 2038, -1,2039, 2025, 2037, -1,2038, + 2025, 2039, -1,2041, 2040, 2038, -1,2038, 2040, 2042, -1,2038, 2043, 2023, -1,2043, + 2042, 2044, -1,2042, 2043, 2038, -1,2038, 2039, 2041, -1,2034, 2045, 2036, -1,2047, + 2046, 2045, -1,2047, 2034, 2035, -1,2035, 2048, 2047, -1,2047, 2048, 2049, -1,2047, + 2045, 2034, -1,2049, 2046, 2047, -1,2050, 2046, 2049, -1,2051, 2046, 2050, -1,2053, + 2050, 2052, -1,2049, 2052, 2050, -1,2050, 2053, 2054, -1,2054, 2051, 2050, -1,2048, + 2052, 2049, -1,2051, 2055, 1655, -1,2051, 2053, 2055, -1,2055, 2056, 1655, -1,2057, + 1893, 1655, -1,1655, 2056, 1655, -1,1655, 2056, 2057, -1,2059, 1939, 2058, -1,1941, + 2058, 1939, -1,1989, 2061, 2060, -1,2060, 2061, 2062, -1,2065, 2064, 2063, -1,2062, + 2061, 2066, -1,2064, 2068, 2067, -1,2069, 2066, 2061, -1,2064, 2065, 2061, -1,2063, + 2064, 2070, -1,2065, 2071, 2061, -1,2069, 2061, 2071, -1,2068, 1356, 2067, -1,2067, + 2072, 2064, -1,1356, 2072, 2067, -1,2074, 2073, 1356, -1,2070, 2064, 2072, -1,2074, + 1356, 2068, -1,2077, 2076, 2075, -1,2068, 2078, 2074, -1,2080, 2078, 2079, -1,2076, + 2079, 1939, -1,2081, 2081, 2081, -1,1433, 1418, 2082, -1,1035, 1035, 1035, -1,2080, + 2076, 1355, -1,2076, 2080, 2079, -1,1355, 2073, 2080, -1,2076, 2083, 1355, -1,2073, + 2074, 2080, -1,2075, 2076, 1939, -1,1366, 2083, 2077, -1,2077, 2083, 2076, -1,2084, + 2075, 1939, -1,2070, 2065, 2063, -1,2080, 2074, 2078, -1,1420, 2086, 2085, -1,2086, + 1420, 2087, -1,1420, 2085, 2088, -1,2090, 2089, 1420, -1,2088, 2090, 1420, -1,1420, + 2089, 2091, -1,2094, 2093, 2092, -1,2092, 2093, 2095, -1,2094, 2092, 2096, -1,2096, + 2087, 2094, -1,2094, 2087, 1420, -1,2098, 2097, 1379, -1,2098, 1379, 1420, -1,1379, + 2100, 2099, -1,2100, 1379, 2097, -1,1379, 2099, 2101, -1,2098, 1420, 2091, -1,2103, + 2102, 2101, -1,2104, 2103, 2101, -1,2101, 2106, 2105, -1,2106, 2101, 2102, -1,2101, + 2105, 2107, -1,2104, 2101, 2099, -1,2095, 2093, 2108, -1,2110, 2109, 2108, -1,2108, + 2109, 2095, -1,2110, 2108, 2111, -1,2112, 2110, 2111, -1,2114, 2113, 2112, -1,2112, + 2111, 2114, -1,2116, 2115, 2113, -1,2115, 2116, 2117, -1,2116, 2113, 2114, -1,2119, + 2117, 2118, -1,2117, 2119, 2115, -1,2119, 2118, 2120, -1,2123, 2122, 2121, -1,2124, + 2122, 2123, -1,2124, 2107, 2125, -1,2107, 2124, 2123, -1,2125, 2107, 2105, -1,2122, + 2126, 2121, -1,2128, 2120, 2127, -1,2127, 2120, 2118, -1,2128, 2127, 2129, -1,2126, + 2130, 2121, -1,2130, 2126, 2129, -1,2130, 2129, 2127, -1,2131, 1952, 1936, -1,2132, + 2131, 1936, -1,2135, 2134, 2133, -1,2135, 2136, 2132, -1,2132, 1936, 2135, -1,2136, + 2135, 2137, -1,2134, 2138, 2133, -1,2135, 2133, 2137, -1,2134, 2140, 2139, -1,2134, + 2142, 2141, -1,2134, 2141, 2140, -1,2134, 2139, 2138, -1,2145, 2144, 2143, -1,2134, + 2146, 2143, -1,2145, 2143, 2146, -1,2147, 2145, 2146, -1,2148, 2146, 2134, -1,2145, + 2149, 2144, -1,2152, 2151, 2150, -1,2154, 2153, 2149, -1,2153, 2154, 2151, -1,2144, + 2149, 2153, -1,2156, 2155, 2152, -1,2157, 2149, 2145, -1,2158, 2148, 1936, -1,2146, + 2148, 2158, -1,2145, 2147, 2157, -1,2158, 2147, 2146, -1,2159, 2150, 2154, -1,2151, + 2154, 2150, -1,2152, 2150, 2156, -1,2160, 2156, 2150, -1,2154, 2161, 2159, -1,2150, + 2159, 2160, -1,2160, 2162, 2156, -1,2157, 2161, 2154, -1,2149, 2157, 2154, -1,2156, + 2162, 2155, -1,2162, 2164, 2163, -1,2166, 2165, 2162, -1,2164, 2162, 2165, -1,2165, + 2168, 2167, -1,2169, 2168, 2165, -1,2167, 2164, 2165, -1,2160, 2170, 2162, -1,2168, + 2172, 2171, -1,2175, 2174, 2173, -1,2172, 2173, 2171, -1,2167, 2168, 2171, -1,2175, + 2173, 2176, -1,2170, 2166, 2162, -1,2168, 2177, 2172, -1,2169, 2165, 2166, -1,2177, + 2168, 2169, -1,2177, 2178, 2172, -1,2179, 2176, 2173, -1,2180, 2175, 2176, -1,2181, + 2176, 2179, -1,2178, 1911, 2179, -1,2181, 2179, 1911, -1,2172, 2178, 2179, -1,2179, + 2173, 2172, -1,2163, 2155, 2162, -1,2180, 2183, 2182, -1,2185, 2184, 2182, -1,2183, + 2185, 2182, -1,2174, 2182, 2186, -1,2186, 2188, 2187, -1,2188, 2186, 2182, -1,2182, + 2184, 2188, -1,2187, 2190, 2189, -1,2190, 2191, 2189, -1,2191, 2192, 2189, -1,2192, + 2191, 2193, -1,2192, 2195, 2194, -1,2195, 2192, 2193, -1,2194, 2195, 2196, -1,2187, + 2189, 2186, -1,2198, 2101, 2197, -1,2197, 2199, 2198, -1,2199, 2200, 1380, -1,2200, + 2199, 2197, -1,1381, 2202, 2201, -1,2197, 2202, 2200, -1,2200, 2202, 1381, -1,1379, + 2198, 2199, -1,2200, 1381, 1380, -1,1379, 2199, 1380, -1,2201, 2203, 1381, -1,1385, + 1381, 2203, -1,1385, 1816, 2204, -1,1386, 1385, 1813, -1,2204, 1813, 1385, -1,1385, + 2203, 1816, -1,2207, 2206, 2205, -1,2209, 2208, 2207, -1,2205, 2210, 2207, -1,292, + 2207, 2208, -1,2212, 2211, 2208, -1,2208, 2213, 2212, -1,2205, 2214, 2210, -1,2210, + 292, 2209, -1,2215, 2208, 2209, -1,2215, 2209, 292, -1,2212, 2213, 2216, -1,2215, + 292, 2213, -1,2215, 2213, 2208, -1,2207, 2210, 2209, -1,2219, 2218, 2217, -1,2221, + 2217, 2220, -1,2224, 2223, 2222, -1,2226, 2222, 2225, -1,2223, 2227, 2220, -1,2217, + 2221, 2219, -1,2228, 2219, 2221, -1,2229, 2221, 2227, -1,2220, 2227, 2221, -1,2222, + 2226, 2224, -1,2230, 2224, 2226, -1,2232, 2226, 2231, -1,2225, 2231, 2226, -1,2224, + 2233, 2227, -1,2223, 2224, 2227, -1,2219, 2234, 2218, -1,2235, 2231, 2225, -1,2238, + 2237, 2236, -1,2236, 2240, 2239, -1,2243, 2242, 2241, -1,2244, 2238, 2241, -1,2246, + 2245, 2239, -1,2245, 2246, 2247, -1,2231, 2235, 2247, -1,2248, 2247, 2246, -1,2239, + 2240, 2246, -1,2240, 2236, 2249, -1,2250, 2240, 2249, -1,2251, 2249, 2237, -1,2249, + 2236, 2237, -1,2240, 2252, 2246, -1,2235, 2245, 2247, -1,2238, 2253, 2237, -1,2247, + 2254, 2231, -1,2256, 2255, 2234, -1,2219, 2228, 2256, -1,2229, 2227, 2233, -1,2228, + 2221, 2229, -1,2224, 2230, 2233, -1,2232, 2231, 2254, -1,2230, 2226, 2232, -1,2240, + 2250, 2252, -1,2248, 2246, 2252, -1,2247, 2248, 2254, -1,2249, 2251, 2250, -1,2257, + 2253, 2244, -1,2258, 2251, 2237, -1,2260, 2244, 2259, -1,2238, 2244, 2253, -1,2241, + 2242, 2259, -1,2259, 2242, 2261, -1,2242, 2263, 2262, -1,2243, 2263, 2242, -1,2253, + 2258, 2237, -1,2241, 2259, 2244, -1,2244, 2260, 2257, -1,2259, 2261, 2260, -1,2261, + 2242, 2262, -1,2262, 2263, 2264, -1,2257, 2258, 2253, -1,2219, 2256, 2234, -1,2265, + 2263, 2243, -1,2266, 2263, 2265, -1,2267, 2265, 2243, -1,2269, 2268, 2267, -1,2271, + 2269, 2270, -1,2265, 2267, 2272, -1,2267, 2268, 2272, -1,2273, 2272, 2268, -1,2275, + 2268, 2274, -1,2269, 2274, 2268, -1,2270, 2276, 2271, -1,2277, 2271, 2276, -1,2279, + 2276, 2278, -1,2270, 2278, 2276, -1,2271, 2280, 2274, -1,2269, 2271, 2274, -1,2272, + 2281, 2265, -1,2282, 2278, 2270, -1,2284, 2282, 2283, -1,2286, 2283, 2285, -1,2289, + 2288, 2287, -1,2288, 2291, 2290, -1,2289, 2292, 2285, -1,2286, 2285, 2292, -1,2293, + 2284, 2286, -1,2294, 2286, 2292, -1,2296, 2295, 2291, -1,2296, 2298, 2297, -1,2298, + 2218, 2299, -1,2292, 2289, 2287, -1,2284, 2283, 2286, -1,2284, 2278, 2282, -1,2284, + 2300, 2278, -1,2277, 2276, 2279, -1,2279, 2278, 2300, -1,2292, 2301, 2294, -1,2293, + 2300, 2284, -1,2293, 2286, 2294, -1,2277, 2280, 2271, -1,2272, 2273, 2281, -1,2280, + 2275, 2274, -1,2273, 2268, 2275, -1,2266, 2265, 2281, -1,2292, 2287, 2301, -1,2288, + 2290, 2287, -1,2290, 2295, 2302, -1,2295, 2297, 2303, -1,2291, 2295, 2290, -1,2234, + 2304, 2299, -1,2299, 2305, 2297, -1,2218, 2234, 2299, -1,2298, 2299, 2297, -1,2306, + 2287, 2290, -1,2296, 2297, 2295, -1,2295, 2303, 2302, -1,2290, 2302, 2306, -1,2299, + 2304, 2305, -1,2234, 2255, 2304, -1,2297, 2305, 2303, -1,2306, 2301, 2287, -1,2264, + 2263, 2266, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2308, 2308, 2308, -1,2308, 2308, 2308, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,2309, 2309, 2309, -1,2309, + 2309, 2309, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,2310, 2310, 2310, -1,2310, 2310, 2310, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,2311, 2311, 2311, -1,2311, + 2311, 2311, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2310, 2310, 2310, -1,2310, 2310, 2310, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2309, 2309, 2309, -1,2309, + 2309, 2309, -1,2314, 2313, 2312, -1,2317, 2316, 2315, -1,2318, 2316, 2318, -1,2320, + 2315, 2319, -1,2315, 2314, 2319, -1,2322, 2321, 2312, -1,2321, 2314, 2312, -1,2319, + 2324, 2323, -1,2324, 2325, 2325, -1,2321, 2319, 2314, -1,2317, 2318, 2316, -1,2317, + 2315, 2326, -1,2315, 2320, 2326, -1,2328, 2313, 2327, -1,2329, 2327, 2326, -1,2328, + 2327, 2329, -1,2325, 2330, 2324, -1,2323, 2326, 2320, -1,2330, 2323, 2324, -1,2323, + 2320, 2319, -1,2329, 2326, 2323, -1,2325, 2325, 2330, -1,2329, 2322, 2328, -1,2318, + 2318, 2317, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,2331, 2331, 2331, -1,2331, 2331, 2331, -1,2334, 2333, 2332, -1,2335, + 2333, 2334, -1,2333, 2335, 2336, -1,2333, 2337, 2332, -1,2338, 2332, 2337, -1,2335, + 2339, 2336, -1,2340, 2340, 2340, -1,2340, 2340, 2340, -1,2343, 2342, 2341, -1,2344, + 2342, 2343, -1,2342, 2344, 2345, -1,2342, 2346, 2341, -1,2347, 2341, 2346, -1,2344, + 2348, 2345, -1,2331, 2331, 2331, -1,2331, 2331, 2331, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,1035, 1035, 1035, -1,1035, + 1035, 1035, -1,2350, 2349, 2349, -1,2353, 2352, 2351, -1,2354, 2352, 2350, -1,2349, + 2350, 2352, -1,2355, 2354, 2355, -1,2350, 2355, 2354, -1,2351, 2352, 2354, -1,2356, + 2356, 2353, -1,2357, 2356, 2356, -1,2357, 2353, 2351, -1,2350, 2351, 2354, -1,2355, + 2355, 2354, -1,2349, 2349, 2350, -1,2355, 2350, 2354, -1,2350, 2349, 2351, -1,2357, + 2356, 2353, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,2309, 2309, 2309, -1,2309, + 2309, 2309, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,2360, 2359, 2358, -1,2362, 2360, 2361, -1,2360, 2358, 2361, -1,2362, + 2361, 2363, -1,1035, 1035, 2362, -1,2362, 2363, 1035, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,1035, 1035, 1035, -1,1035, + 1035, 1035, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2366, 2365, 2364, -1,2368, + 2364, 2367, -1,2368, 2366, 2364, -1,2369, 2368, 2367, -1,2367, 2309, 2309, -1,2309, + 2369, 2367, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,2372, 2371, 2370, -1,2375, + 2374, 2373, -1,2378, 2377, 2376, -1,2377, 2379, 2376, -1,2372, 2370, 2380, -1,2372, + 2381, 2371, -1,2382, 2376, 2374, -1,2377, 2383, 2379, -1,2382, 2375, 2384, -1,2374, + 2375, 2382, -1,2376, 2382, 2385, -1,2388, 2387, 2386, -1,2387, 2388, 2385, -1,2380, + 2370, 2383, -1,2387, 2386, 2386, -1,2378, 2385, 2388, -1,2385, 2378, 2376, -1,2378, + 2389, 2377, -1,2379, 2383, 2370, -1,2381, 2390, 2381, -1,2390, 2381, 2391, -1,2391, + 2392, 2390, -1,2394, 2392, 2393, -1,2394, 2393, 2395, -1,2392, 2391, 2393, -1,2396, + 2389, 2389, -1,2386, 2386, 2388, -1,2389, 2389, 2378, -1,2398, 2395, 2397, -1,2399, + 2398, 2396, -1,2397, 2396, 2398, -1,2389, 2399, 2396, -1,2398, 2394, 2395, -1,2381, + 2372, 2381, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2309, 2309, 2309, -1,2309, + 2309, 2309, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,2401, 2401, 2400, -1,2403, + 2400, 2402, -1,2402, 2402, 2403, -1,2401, 2400, 2403, -1,2309, 2309, 2309, -1,2309, + 2309, 2309, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,2406, 2405, 2404, -1,2408, + 2404, 2407, -1,2408, 2406, 2404, -1,2405, 2405, 2406, -1,2307, 2307, 2307, -1,2307, + 2307, 2307, -1,2411, 2410, 2409, -1,2412, 2411, 2412, -1,2411, 2409, 2412, -1,2409, + 2410, 2413, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,1035, + 1035, 1035, -1,2414, 2414, 2414, -1,2414, 2414, 2414, -1,2414, 2414, 2414, -1,2414, + 2414, 2414, -1,2417, 2416, 2415, -1,2418, 2417, 2418, -1,2417, 2415, 2418, -1,2415, + 2416, 2416, -1,2421, 2420, 2419, -1,2422, 2419, 2422, -1,2422, 2421, 2419, -1,2420, + 2420, 2421, -1,2309, 2309, 2423, -1,2425, 2423, 2424, -1,2425, 2309, 2423, -1,2309, + 2309, 2309, -1,2428, 2427, 2426, -1,2430, 2426, 2429, -1,2430, 2428, 2426, -1,2431, + 2427, 2428, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,2434, 2433, 2432, -1,2436, + 2434, 2435, -1,2434, 2432, 2435, -1,2432, 2433, 2437, -1,1035, 1035, 1035, -1,1035, + 1035, 1035, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,2440, 2439, 2438, -1,2442, + 2438, 2441, -1,2442, 2440, 2438, -1,2443, 2439, 2440, -1,1286, 1286, 1286, -1,1286, + 1286, 1286, -1,2444, 1035, 1035, -1,2446, 2444, 2445, -1,2444, 1035, 2445, -1,1035, + 1035, 1035, -1,2449, 2448, 2447, -1,2451, 2450, 2448, -1,2448, 2450, 2447, -1,2453, + 2452, 2449, -1,2456, 2455, 2454, -1,2458, 2452, 2457, -1,2453, 2449, 2447, -1,2457, + 2452, 2453, -1,2458, 2459, 2452, -1,2461, 2451, 2460, -1,2448, 2460, 2451, -1,2464, + 2463, 2462, -1,2460, 2463, 2461, -1,2461, 2463, 2464, -1,2465, 2466, 2465, -1,2464, + 2465, 2465, -1,2465, 2466, 2465, -1,2468, 2454, 2467, -1,2462, 2465, 2464, -1,2469, + 2466, 2465, -1,2472, 2471, 2470, -1,2475, 2474, 2473, -1,2475, 2473, 2472, -1,2470, + 2475, 2472, -1,2456, 2475, 2470, -1,2477, 2476, 2476, -1,2467, 2478, 2477, -1,2476, + 2477, 2478, -1,2477, 2468, 2467, -1,2480, 2479, 2471, -1,2470, 2471, 2479, -1,2469, + 2480, 2481, -1,2471, 2481, 2480, -1,2466, 2469, 2481, -1,2482, 2454, 2455, -1,2454, + 2482, 2483, -1,2454, 2483, 2484, -1,2484, 2467, 2454, -1,2456, 2454, 2475, -1,1286, + 1286, 1286, -1,1286, 1286, 1286, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,1035, + 1035, 1035, -1,1035, 1035, 1035, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2487, + 2486, 2485, -1,1035, 2487, 1035, -1,1035, 1035, 1035, -1,1035, 2487, 2485, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2488, 2309, 2309, -1,2490, 2488, 2489, -1,2488, + 2309, 2489, -1,2309, 2309, 2309, -1,2307, 2307, 2307, -1,2307, 2307, 2307, -1,2309, + 2309, 2309, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,1286, + 1286, 1286, -1,1286, 1286, 1286, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,2309, + 2309, 2309, -1,2309, 2309, 2309, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,1035, + 1035, 1035, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,2493, + 2492, 2491, -1,2496, 2495, 2494, -1,2497, 2495, 2497, -1,2499, 2494, 2498, -1,2498, + 2494, 2492, -1,2501, 2500, 2493, -1,2500, 2492, 2493, -1,2498, 2503, 2502, -1,2503, + 2504, 2504, -1,2500, 2498, 2492, -1,2505, 2497, 2495, -1,2495, 2496, 2505, -1,2497, + 2497, 2505, -1,2499, 2496, 2494, -1,2506, 2496, 2499, -1,2507, 2496, 2506, -1,2491, + 2507, 2508, -1,2503, 2504, 2502, -1,2502, 2506, 2498, -1,2504, 2502, 2504, -1,2509, + 2501, 2508, -1,2507, 2506, 2509, -1,2509, 2508, 2507, -1,2506, 2499, 2498, -1,2511, + 2510, 2510, -1,2513, 2511, 2512, -1,2512, 2513, 2513, -1,2512, 2511, 2510, -1,2307, + 2307, 2307, -1,2307, 2307, 2307, -1,2516, 2515, 2514, -1,2517, 2516, 2517, -1,2516, + 2514, 2517, -1,2514, 2515, 2515, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,2309, + 2309, 2309, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,2309, 2309, 2309, -1,1286, + 1286, 1286, -1,1286, 1286, 1286, -1,1035, 1035, 1035, -1,1035, 1035, 1035, -1,1035, + 1035, 1035, -1,1035, 1035, 1035, -1,1286, 1286, 1286, -1,1286, 1286, 1286, -1,2519, + 2518, 2518, -1,2521, 2520, 2519, -1,2520, 2521, 2522, -1,2519, 2518, 2521, -1,2521, + 2524, 2523, -1,2525, 2525, 2524, -1,2522, 2521, 2523, -1,2527, 2526, 2523, -1,2522, + 2523, 2526, -1,2518, 2528, 2527, -1,2526, 2527, 2528, -1,2524, 2527, 2523, -1,2525, + 2524, 2525, -1,2524, 2524, 2525, -1,2528, 2518, 2518, -1,2523, 2524, 2524, -1 + ] + } + } + ] +} +DEF link3c Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.000000 1.000000 0.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 130 + 0.067467 0.023238 -0.027075, 0.065971 0.028883 -0.01499, 0.063484 0.034464 -0.00296599, 0.05875 0.04146 0.011987, + 0.05209 0.048168 0.026392, 0.045742 0.052848 0.036401, 0.038025 0.05714 0.045618, 0.031111 0.060039 0.051843, + 0.023258 0.062473 0.057092, 0.016588 0.063922 0.060205, 0.00946299 0.06491 0.06228, -1.47854e-008 0.065376 0.063318, + -0.00355901 0.065311 0.063135, -0.010039 0.064849 0.062158, -0.016279 0.063976 0.0603271, -0.027658 0.061214 0.054346, + -0.035797 0.058162 0.047815, -0.042793 0.054641 0.040247, -0.049316 0.050369 0.031091, -0.054699 0.045822 0.021387, + -0.05526 0.045274 0.020166, -0.055813 0.044723 0.019006, -0.057461 0.044374 0.018274, -0.059071 0.043987 0.017419, + -0.059074 0.043987 0.017419, -0.059082 0.043985 0.017419, -0.066887 0.041328 0.011743, -0.072823 0.037914 0.00441903, + -0.077003 0.033448 -0.00516397, -0.078346 0.028677 -0.015417, -0.077782 0.025842 -0.02146, -0.076218 0.023074 -0.027441, + -0.073662 0.020442 -0.033057, -0.070152 0.018014 -0.038245, -0.070145 0.018011 -0.038306, -0.070145 0.018008 -0.038306, + -0.069099 0.01743 -0.039526, -0.068001 0.016874 -0.040686, -0.06797 0.016102 -0.042395, -0.067909 0.015329 -0.044043, + -0.066483 0.00974798 -0.056006, -0.063347 0.00429498 -0.067664, -0.058838 -0.000597019 -0.078162, + -0.052788 -0.00517902 -0.087988, -0.046165 -0.00886602 -0.0959229, -0.038361 -0.012112 -0.102881, + -0.031055 -0.014382 -0.107764, -0.023067 -0.016198 -0.111609, -0.014528 -0.017479 -0.114417, -0.00561499 -0.018181 -0.115881, + 0.00778901 -0.018067 -0.115637, 0.020746 -0.01661 -0.112524, 0.029985 -0.014664 -0.108374, 0.038361 -0.012112 -0.102881, + 0.044971 -0.00942799 -0.0971439, 0.050758 -0.00642398 -0.090674, 0.059803 0.00030302 -0.07627, 0.063404 0.00436802 -0.067542, + 0.065964 0.00857102 -0.058508, 0.06749 0.012864 -0.049292, 0.068001 0.017199 -0.040015, 0.068001 0.017269 -0.039893, + 0.067947 0.019088 -0.0359859, 0.067795 0.020906 -0.03208, 0.068298 0.021012 -0.031836, 0.067886 0.022126 -0.029456, + -0.070999 -0.113499 2.40207e-005, -0.069633 -0.113499 -0.013831, -0.065598 -0.113499 -0.027197, -0.059032 -0.113499 -0.039465, + -0.050205 -0.113499 -0.050208, -0.039444 -0.113499 -0.059058, -0.02717 -0.113499 -0.065588, -0.013851 -0.113499 -0.069617, + 4.34995e-008 -0.113499 -0.071021, 0.013851 -0.113499 -0.069617, 0.02717 -0.113499 -0.065588, 0.039444 -0.113499 -0.059058, + 0.050205 -0.113499 -0.050208, 0.059032 -0.113499 -0.039465, 0.065598 -0.113499 -0.027197, 0.069633 -0.113499 -0.013831, + 0.070999 -0.113499 2.40207e-005, 0.069633 -0.113499 0.013879, 0.065598 -0.113499 0.027185, 0.059032 -0.113499 0.039453, + 0.050205 -0.113499 0.050195, 0.039444 -0.113499 0.059045, 0.02717 -0.113499 0.065576, 0.013851 -0.113499 0.069666, + 4.34995e-008 -0.113499 0.071008, -0.013851 -0.113499 0.069666, -0.02717 -0.113499 0.065576, -0.039444 -0.113499 0.059045, + -0.050205 -0.113499 0.050195, -0.059032 -0.113499 0.039453, -0.065598 -0.113499 0.027185, -0.069633 -0.113499 0.013879, + 0.055 1.79213e-008 0.109521, 0.053944 0.01073 0.109521, 0.050812 0.021048 0.109521, 0.045731 0.030556 0.109521, + 0.038891 0.03889 0.109521, 0.030556 0.04573 0.109521, 0.021048 0.050813 0.109521, 0.01073 0.053943 0.109521, + -1.14044e-008 0.055 0.109521, -0.01073 0.053943 0.109521, -0.021048 0.050813 0.109521, -0.030556 0.04573 0.109521, + -0.038891 0.03889 0.109521, -0.045731 0.030556 0.109521, -0.050812 0.021048 0.109521, -0.053944 0.01073 0.109521, + -0.055 -1.79213e-008 0.109521, -0.053944 -0.010729 0.109521, -0.050812 -0.021046 0.109521, -0.045731 -0.030556 0.109521, + -0.038891 -0.038891 0.109521, -0.030556 -0.045727 0.109521, -0.021048 -0.050816 0.109521, -0.01073 -0.053944 0.109521, + 2.44371e-008 -0.054997 0.109521, 0.01073 -0.053944 0.109521, 0.021048 -0.050816 0.109521, 0.030556 -0.045727 0.109521, + 0.038891 -0.038891 0.109521, 0.045731 -0.030556 0.109521, 0.050812 -0.021046 0.109521, 0.053944 -0.010729 0.109521] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 102 + 0.00147251 0.907373 -0.420325, 0.000483275 0.906674 -0.421832, 0.00107152 0.90716 -0.420785, 0.000703182 0.906428 -0.422359, + -0.0022349 0.904716 -0.42601, -0.000127924 0.906286 -0.422665, -0.000136334 0.906265 -0.42271, + -0.000488034 0.906062 -0.423144, -0.000468389 0.906052 -0.423165, -0.000312308 0.90613 -0.423, 0.0116744 0.913307 -0.407105, + 0.00166567 0.906785 -0.42159, -0.000720836 0.905782 -0.423743, 0.00122726 0.907139 -0.42083, 0.0031778 0.908381 -0.418132, + 0.450854 0.891872 -0.0359897, 0.31967 0.933443 -0.162774, 0.214639 0.942349 -0.256725, -0.00159637 0.909927 -0.414765, + -0.00369743 0.904766 -0.425894, 0.993495 0 0.113878, 0.00518118 0.906903 -0.421308, 0.00378695 0.906988 -0.42114, + -0.00144124 0.905807 -0.423688, 0.00184407 0.906389 -0.42244, 0.000522945 0.906274 -0.422691, -0.000403095 0.906271 -0.422696, + 0.00365846 0.905977 -0.42331, -0.112721 0.906947 -0.405883, -0.113282 0.906927 -0.405771, 0.00139382 0.906173 -0.422905, + -0.00566843 0.902022 -0.431654, -9.51744e-005 0.906291 -0.422654, -3.77631e-005 0.906432 -0.422353, + 0.000101921 0.906483 -0.422243, -0.000149992 0.906318 -0.422597, 3.07659e-005 0.906588 -0.422018, + 4.07358e-005 0.906573 -0.42205, -0.00014125 0.906227 -0.422791, -0.022398 0.887248 -0.460748, -0.022081 0.887575 -0.460133, + 0.000265355 0.906588 -0.422016, 0.0057811 0.906565 -0.422027, 0.0136639 0.906519 -0.421944, 0.0113618 0.906576 -0.421891, + 0.00295345 0.90637 -0.422475, 0.00137825 0.908121 -0.418705, 0.000544448 0.907118 -0.420877, -6.2722e-005 0.906142 -0.422973, + -0.000219402 0.905853 -0.423593, -2.55367e-005 0.906175 -0.422903, 0.000136333 0.906462 -0.422288, + 0.00102435 0.907681 -0.41966, -1.35228e-005 0.906241 -0.422761, 5.66776e-005 0.906398 -0.422425, + 4.54252e-005 0.90631 -0.422614, -0.000309769 0.906139 -0.422981, -8.69671e-005 0.906109 -0.423045, + -0.000921001 0.904894 -0.425635, 5.09184e-006 0.906536 -0.422129, -0.000312583 0.906408 -0.422404, + 0.0018795 0.908745 -0.417348, 0.000177669 0.905608 -0.424117, 0.00221967 0.909247 -0.416252, -0.00191902 0.902079 -0.431566, + -0.00429749 0.897057 -0.441894, 2.68955e-007 -1 -8.46613e-007, 4.09956e-007 -1 1.59032e-008, 7.25471e-008 -1 5.31049e-007, + 2.68955e-007 -1 -2.65336e-006, 3.06523e-007 -1 -1.15393e-007, 8.51505e-007 -1 -4.7102e-007, 1.08446e-006 -1 7.36083e-008, + 2.13519e-006 -1 -1.75438e-006, 9.64671e-007 -1 8.2304e-008, 1.2201e-006 -1 1.34657e-006, 1.29664e-006 -1 2.43719e-006, + 2.13519e-006 -1 1.75438e-006, 4.0574e-008 -1 2.77089e-008, 2.42151e-008 -1 -2.14988e-007, -2.38898e-006 -1 -1.27862e-006, + 5.4848e-007 -1 -3.06518e-007, 0 -1 0, 9.23245e-007 -1 0, 2.742e-006 -1 -2.70341e-007, 7.36558e-007 -1 1.19424e-007, + 2.73604e-006 -1 2.69753e-007, 7.69588e-007 -1 5.14831e-007, 3.9863e-008 -1 -6.85413e-007, 6.59117e-007 -1 3.07218e-007, + -2.57853e-007 -1 -2.66134e-006, 3.66013e-007 -1 -1.0011e-006, 8.64479e-007 -1 -2.1378e-007, 7.69588e-007 -1 -5.14831e-007, + 7.0327e-007 -1 -7.74425e-007, 5.28005e-007 -1 1.02219e-007, 9.77464e-017 0 1, -3.35596e-016 0 1, 0 0 1, -4.47462e-016 0 1, + 6.75537e-016 0 1, 4.05322e-016 0 1] + } + coordIndex [ + 44, 43, 49, -1,48, 45, 44, -1,50, 43, 42, -1,51, 42, 41, -1,51, 41, 40, -1,45, 47, + 46, -1,44, 49, 48, -1,43, 50, 49, -1,53, 40, 39, -1,42, 51, 50, -1,47, 45, 48, -1, + 38, 53, 39, -1,33, 36, 35, -1,37, 53, 38, -1,37, 36, 33, -1,32, 37, 33, -1,34, 33, + 35, -1,32, 31, 37, -1,31, 30, 37, -1,29, 37, 30, -1,28, 37, 29, -1,37, 28, 27, -1, + 27, 26, 37, -1,24, 23, 37, -1,37, 25, 24, -1,37, 26, 25, -1,22, 37, 23, -1,22, 21, + 37, -1,52, 51, 40, -1,37, 54, 53, -1,37, 55, 54, -1,56, 55, 37, -1,58, 57, 37, -1, + 59, 37, 21, -1,37, 59, 58, -1,56, 37, 57, -1,60, 59, 21, -1,62, 61, 21, -1,65, 64, + 63, -1,63, 62, 21, -1,63, 21, 0, -1,2, 1, 19, -1,0, 21, 1, -1,65, 63, 0, -1,21, 61, + 60, -1,3, 2, 18, -1,19, 18, 2, -1,18, 17, 3, -1,1, 20, 19, -1,16, 15, 4, -1,13, 7, + 14, -1,14, 5, 15, -1,17, 16, 4, -1,20, 1, 21, -1,6, 14, 7, -1,14, 6, 5, -1,12, 7, + 13, -1,8, 12, 11, -1,10, 9, 11, -1,8, 11, 9, -1,8, 7, 12, -1,4, 15, 5, -1,17, 4, + 3, -1,52, 40, 53, -1,76, 73, 75, -1,73, 74, 75, -1,76, 77, 79, -1,73, 79, 82, -1, + 76, 79, 73, -1,77, 78, 79, -1,82, 79, 80, -1,72, 73, 71, -1,69, 70, 71, -1,71, 73, + 69, -1,68, 69, 67, -1,67, 69, 73, -1,73, 93, 67, -1,67, 97, 66, -1,80, 81, 82, -1, + 82, 83, 84, -1,73, 84, 93, -1,86, 84, 85, -1,87, 88, 84, -1,84, 88, 93, -1,84, 86, + 87, -1,90, 88, 89, -1,94, 95, 96, -1,94, 96, 93, -1,96, 97, 67, -1,90, 91, 92, -1, + 92, 93, 90, -1,67, 93, 96, -1,88, 90, 93, -1,73, 82, 84, -1,123, 125, 98, -1,123, + 124, 125, -1,125, 126, 127, -1,129, 98, 128, -1,127, 128, 98, -1,98, 125, 127, -1, + 115, 123, 106, -1,119, 121, 118, -1,119, 120, 121, -1,122, 123, 121, -1,117, 118, + 115, -1,115, 116, 117, -1,121, 123, 118, -1,115, 118, 123, -1,123, 98, 106, -1,99, + 100, 101, -1,99, 101, 103, -1,103, 101, 102, -1,103, 104, 106, -1,105, 106, 104, -1, + 106, 98, 103, -1,115, 106, 113, -1,111, 112, 113, -1,111, 113, 110, -1,114, 115, + 113, -1,107, 108, 109, -1,109, 110, 107, -1,110, 113, 106, -1,107, 110, 106, -1,98, + 99, 103, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,4, 3, 2, -1,6, 1, 5, -1,8, 5, 7, -1,8, 7, 9, -1,3, 11, 10, -1,2, 0, 4, -1, + 1, 6, 0, -1,13, 9, 12, -1,5, 8, 6, -1,11, 3, 4, -1,14, 13, 12, -1,17, 16, 15, -1, + 18, 13, 14, -1,18, 16, 17, -1,19, 18, 17, -1,20, 20, 20, -1,19, 21, 18, -1,21, 22, + 18, -1,23, 18, 22, -1,24, 18, 23, -1,18, 24, 25, -1,25, 26, 18, -1,28, 27, 18, -1, + 18, 29, 28, -1,18, 26, 29, -1,30, 18, 27, -1,30, 31, 18, -1,32, 8, 9, -1,18, 33, + 13, -1,18, 34, 33, -1,35, 34, 18, -1,37, 36, 18, -1,38, 18, 31, -1,18, 38, 37, -1, + 35, 18, 36, -1,39, 38, 31, -1,41, 40, 31, -1,44, 43, 42, -1,42, 41, 31, -1,42, 31, + 45, -1,48, 47, 46, -1,45, 31, 47, -1,44, 42, 45, -1,31, 40, 39, -1,50, 48, 49, -1, + 46, 49, 48, -1,49, 51, 50, -1,47, 52, 46, -1,55, 54, 53, -1,58, 57, 56, -1,56, 59, + 54, -1,51, 55, 53, -1,52, 47, 31, -1,60, 56, 57, -1,56, 60, 59, -1,61, 57, 58, -1, + 63, 61, 62, -1,65, 64, 62, -1,63, 62, 64, -1,63, 57, 61, -1,53, 54, 59, -1,51, 53, + 50, -1,32, 9, 13, -1,68, 67, 66, -1,67, 69, 66, -1,68, 71, 70, -1,67, 70, 72, -1, + 68, 70, 67, -1,71, 73, 70, -1,72, 70, 74, -1,76, 67, 75, -1,78, 77, 75, -1,75, 67, + 78, -1,80, 78, 79, -1,79, 78, 67, -1,67, 81, 79, -1,79, 83, 82, -1,74, 84, 72, -1, + 72, 86, 85, -1,67, 85, 81, -1,87, 85, 82, -1,89, 88, 85, -1,85, 88, 81, -1,85, 87, + 89, -1,91, 88, 90, -1,93, 82, 92, -1,93, 92, 81, -1,92, 83, 79, -1,91, 95, 94, -1, + 94, 81, 91, -1,79, 81, 92, -1,88, 91, 81, -1,67, 72, 85, -1,98, 97, 96, -1,98, 98, + 97, -1,97, 98, 99, -1,98, 96, 98, -1,99, 98, 96, -1,96, 97, 99, -1,98, 98, 98, -1, + 98, 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1,98, 98, + 98, -1,98, 98, 98, -1,98, 96, 98, -1,100, 98, 98, -1,100, 98, 101, -1,101, 98, 98, -1, + 101, 98, 98, -1,98, 98, 98, -1,98, 96, 101, -1,98, 98, 98, -1,98, 98, 98, -1,98, + 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1,98, 98, 98, -1, + 96, 100, 101, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/link4.wrl b/examples/rlsg/staeubli-tx60l/link4.wrl new file mode 100644 index 00000000..e371ae22 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link4.wrl @@ -0,0 +1,12773 @@ +#VRML V2.0 utf8 + +DEF link4a Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 0.666667 0.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 2171 + -0.0349162 -0.289514 4.92761e-008, -0.0353512 -0.28866 4.94139e-008, -0.0360112 -0.288049 4.95929e-008, + -0.0368352 -0.287622 4.98016e-008, -0.0377432 -0.2875 5.00162e-008, -0.0370182 -0.2875 0.00736305, + -0.0348702 -0.2875 0.014443, -0.0313822 -0.2875 0.0209701, -0.0266902 -0.2875 0.026688, -0.0209692 -0.2875 0.031384, + -0.0144432 -0.2875 0.034871, -0.0073632 -0.2875 0.037018, -2.027e-007 -0.2875 0.037743, 0.0073628 -0.2875 0.037018, + 0.0144428 -0.2875 0.034871, 0.0209688 -0.2875 0.031384, 0.0266898 -0.2875 0.026688, 0.0313818 -0.2875 0.02097, + 0.0348698 -0.2875 0.014443, 0.0370178 -0.2875 0.00736303, 0.0377428 -0.2875 3.26239e-008, 0.0368348 -0.287622 3.28277e-008, + 0.0360108 -0.288049 3.29987e-008, 0.0353508 -0.28866 3.31239e-008, 0.0349158 -0.289514 3.31864e-008, + 0.0342448 -0.289514 0.00681203, 0.0322568 -0.289514 0.01336, 0.0290298 -0.289514 0.019398, 0.0246888 -0.289514 0.024689, + 0.0193978 -0.289514 0.02903, 0.0133608 -0.289514 0.032258, 0.0068118 -0.289514 0.034245, -2.02887e-007 -0.289514 0.034916, + -0.0068122 -0.289514 0.034245, -0.0133612 -0.289514 0.032258, -0.0193982 -0.289514 0.02903, -0.0246892 -0.289514 0.024689, + -0.0290302 -0.289514 0.019398, -0.0322572 -0.289514 0.01336, -0.0342452 -0.289514 0.00681205, -0.0470012 -0.2875 5.21493e-008, + -0.0460972 -0.2875 -0.00916895, -0.0434232 -0.2875 -0.0179859, -0.0390782 -0.2875 -0.0261119, -0.0332342 -0.2875 -0.033234, + -0.0261122 -0.2875 -0.039079, -0.0179862 -0.2875 -0.043422, -0.00917022 -0.2875 -0.046096, -2.22225e-007 -0.2875 -0.047, + 0.00916978 -0.2875 -0.046096, 0.0179858 -0.2875 -0.043422, 0.0261118 -0.2875 -0.039079, 0.0332338 -0.2875 -0.033234, + 0.0390778 -0.2875 -0.026112, 0.0434228 -0.2875 -0.017986, 0.0460968 -0.2875 -0.00916897, 0.0470008 -0.2875 3.04908e-008, + 0.0460968 -0.2875 0.00916903, 0.0434228 -0.2875 0.017987, 0.0390778 -0.2875 0.026112, 0.0332338 -0.2875 0.033234, + 0.0261118 -0.2875 0.039078, 0.0179858 -0.2875 0.043423, 0.0091698 -0.2875 0.046093, -2.00567e-007 -0.2875 0.047001, + -0.0091702 -0.2875 0.046093, -0.0179862 -0.2875 0.043423, -0.0261122 -0.2875 0.039078, -0.0332342 -0.2875 0.033234, + -0.0390782 -0.2875 0.0261121, -0.0434232 -0.2875 0.0179871, -0.0460972 -0.2875 0.00916905, 0.0370178 -0.2875 -0.00736397, + 0.0348698 -0.2875 -0.014444, 0.0313818 -0.2875 -0.020969, 0.0266898 -0.2875 -0.026689, 0.0209688 -0.2875 -0.031382, + 0.0144428 -0.2875 -0.034871, 0.00736278 -0.2875 -0.037017, -2.20093e-007 -0.2875 -0.037744, -0.00736322 -0.2875 -0.037017, + -0.0144432 -0.2875 -0.034871, -0.0209692 -0.2875 -0.031382, -0.0266902 -0.2875 -0.026689, -0.0313822 -0.2875 -0.020969, + -0.0348702 -0.2875 -0.014444, -0.0370182 -0.2875 -0.00736395, 0.0498278 -0.289514 2.97507e-008, + 0.0493928 -0.28866 2.98885e-008, 0.0487328 -0.288049 3.00675e-008, 0.0479088 -0.287622 3.02762e-008, + -0.0479092 -0.287622 5.23531e-008, -0.0487332 -0.288049 5.25241e-008, -0.0493932 -0.28866 5.26493e-008, + -0.0498282 -0.289514 5.27119e-008, -0.0488702 -0.289514 0.00972005, -0.0460362 -0.289514 0.0190701, + -0.0414312 -0.289514 0.027684, -0.0352332 -0.289514 0.0352331, -0.0276832 -0.289514 0.041432, -0.0190682 -0.289514 0.046032, + -0.0097212 -0.289514 0.048871, -1.99451e-007 -0.289514 0.049832, 0.0097208 -0.289514 0.048871, 0.0190678 -0.289514 0.046032, + 0.0276828 -0.289514 0.041432, 0.0352328 -0.289514 0.035233, 0.0414308 -0.289514 0.027684, 0.0460358 -0.289514 0.01907, + 0.0488698 -0.289514 0.00972003, -0.0550002 -0.289514 5.39035e-008, -0.0550002 -0.247278 5.5765e-008, + -0.0550002 -0.20498 5.76293e-008, -0.0549622 -0.205103 0.00202006, -0.0548522 -0.204675 0.00403506, + -0.0544172 -0.20199 0.00797906, -0.0536312 -0.19668 0.0122001, -0.0525932 -0.189355 0.0160951, -0.0509492 -0.177393 0.0207141, + -0.0490952 -0.163599 0.0247961, -0.0454902 -0.136499 0.0309111, -0.0416372 -0.107202 0.0359311, + -0.0352943 -0.058496 0.0421831, -0.0349083 -0.0586181 0.0425041, -0.0345153 -0.05874 0.0428201, + -0.0368842 -0.080713 0.0407991, -0.0447922 -0.153833 0.0319141, -0.0474132 -0.177637 0.0278781, + -0.0477522 -0.185083 0.0272911, -0.0468862 -0.190332 0.0287521, -0.0445902 -0.193994 0.0321971, + -0.0401042 -0.196313 0.0376401, -0.0400962 -0.196313 0.0376441, -0.0400922 -0.196313 0.0376521, + -0.0304262 -0.199121 0.0458191, -0.0234262 -0.200891 0.049763, -0.0159222 -0.2026 0.052647, -0.00806022 -0.204309 0.054409, + -2.17527e-007 -0.205896 0.054997, 0.0123098 -0.20791 0.053608, 0.0240568 -0.209619 0.049458, 0.0306108 -0.176416 0.045697, + 0.0370828 -0.143701 0.040619, 0.0431588 -0.113428 0.034092, 0.0481378 -0.08877 0.026608, 0.0481407 -0.08877 0.026597, + 0.0481448 -0.08877 0.026589, 0.0481828 -0.089746 0.02652, 0.0510218 -0.159937 0.020543, 0.0526888 -0.200342 0.015778, + 0.0540118 -0.231226 0.010386, 0.0545228 -0.242517 0.00721403, 0.0548208 -0.248376 0.00442903, 0.0548968 -0.249597 0.00338403, + 0.0549508 -0.25033 0.00229903, 0.0549738 -0.250452 0.00172303, 0.0549888 -0.250452 0.00114503, + 0.0549998 -0.250024 3.02995e-008, 0.0549998 -0.269739 2.94306e-008, 0.0549998 -0.289514 2.8559e-008, + 0.0539438 -0.289514 0.010729, 0.0508118 -0.289514 0.021046, 0.0457308 -0.289514 0.030556, 0.0388908 -0.289514 0.038891, + 0.0305558 -0.289514 0.045727, 0.0210478 -0.289514 0.050816, 0.0107298 -0.289514 0.053944, -1.98261e-007 -0.289514 0.054997, + -0.0107302 -0.289514 0.053944, -0.0210482 -0.289514 0.050816, -0.0305562 -0.289514 0.0457271, -0.0388912 -0.289514 0.038891, + -0.0457312 -0.289514 0.0305561, -0.0508122 -0.289514 0.0210461, -0.0539442 -0.289514 0.0107291, + -0.0312652 -0.180078 0.0638011, -0.0370672 -0.190698 0.0468791, -0.0362972 -0.197412 0.0413211, -0.0345542 -0.1979 0.0427901, + -0.0337452 -0.198145 0.0434311, -0.0293832 -0.199365 0.0464901, -0.0192722 -0.201868 0.0515101, + -0.0109402 -0.203699 0.0538981, -0.00230922 -0.205408 0.054951, 0.00116878 -0.206079 0.054989, 0.00219778 -0.206262 0.054959, + 0.00378078 -0.206628 0.054867, 0.00649078 -0.207056 0.054615, 0.0154728 -0.208398 0.052777, 0.0252378 -0.203394 0.049908, + 0.0264188 -0.19729 0.050366, 0.0129918 -0.195581 0.062489, 0.0123558 -0.195459 0.063069, 0.0114848 -0.195337 0.063855, + 0.0110088 -0.195215 0.06429, 0.0102628 -0.194849 0.064999, 0.00965978 -0.194971 0.064999, 0.00934278 -0.194971 0.064999, + 0.00862278 -0.194849 0.064999, 0.00523778 -0.194116 0.064999, -0.0114152 -0.189233 0.0649991, -0.0218852 -0.184839 0.0649991, + -0.0266842 -0.18252 0.0649991, -0.0272692 -0.182153 0.0649991, -0.0275922 -0.182031 0.0649151, -0.0295432 -0.180933 0.0643581, + 0.0262888 -0.080835 0.064999, -0.0150402 -0.06582 0.0649991, 0.00908278 -0.194849 0.064999, 0.00935178 -0.194971 0.064999, + 0.0190328 -0.090479 0.0649991, 0.0187508 -0.09646 0.0649991, 0.0159038 -0.101587 0.0649991, 0.0158778 -0.101587 0.0649991, + 0.0116878 -0.0996341 0.0649991, 0.0117558 -0.099512 0.0649991, 0.0141818 -0.09646 0.0649991, 0.0148698 -0.092554 0.0649991, + 0.0143668 -0.091089 0.0649991, 0.0138368 -0.090479 0.0649991, 0.0131638 -0.090112 0.0649991, 0.0124278 -0.0898681 0.0649991, + 0.0116628 -0.0898681 0.0649991, 0.0109268 -0.090112 0.0649991, 0.0102748 -0.090479 0.0649991, 0.00596376 -0.0940191 0.0649991, + 0.00434376 -0.094995 0.0649991, 0.00251976 -0.0954831 0.0649991, 0.000617759 -0.0954831 0.0649991, + -0.00121624 -0.094995 0.0649991, -0.00378724 -0.093286 0.0649991, -0.00563024 -0.090845 0.0649991, + -0.00659924 -0.087793 0.0649991, -0.00648524 -0.084497 0.0649991, -0.00358324 -0.077539 0.0649991, + -0.00355625 -0.077417 0.0649991, 8.27557e-005 -0.0796141 0.0649991, 5.17557e-005 -0.0796141 0.0649991, + -0.00147824 -0.0829101 0.0649991, -0.00200024 -0.086328 0.0649991, -0.00185824 -0.087427 0.0649991, + -0.00143824 -0.088403 0.0649991, -0.000763242 -0.0892581 0.0649991, 0.000123758 -0.0898681 0.0649991, + 0.00110376 -0.090234 0.0649991, 0.00213376 -0.090234 0.0649991, 0.00313176 -0.08999 0.0649991, 0.00401976 -0.089502 0.0649991, + 0.00816476 -0.0862061 0.0649991, 0.0113078 -0.084741 0.0649991, 0.0130398 -0.084741 0.0649991, 0.0147228 -0.085107 0.0649991, + 0.0162908 -0.0859621 0.0649991, 0.0175758 -0.087183 0.0649991, 0.00838376 -0.098413 0.0649991, 0.0108838 -0.099756 0.0649991, + 0.00937076 -0.110498 0.0649991, 0.00684876 -0.109399 0.0649991, 0.00726776 -0.106348 0.0649991, + -0.00176124 -0.101465 0.0649991, -0.00118224 -0.097314 0.0649991, 0.00787776 -0.102075 0.0649991, + 0.0128478 -0.113428 0.0649991, 0.0124008 -0.113916 0.0649991, 0.0117758 -0.114282 0.0649991, 0.0110718 -0.114282 0.0649991, + 0.0104018 -0.11416 0.0649991, 0.00985076 -0.113672 0.0649991, 0.00951776 -0.112939 0.0649991, 0.00944876 -0.112207 0.0649991, + 0.00965976 -0.111597 0.0649991, 0.0101068 -0.110986 0.0649991, 0.0107318 -0.11062 0.0649991, 0.0114348 -0.11062 0.0649991, + 0.0121058 -0.110864 0.0649991, 0.0126568 -0.111353 0.0649991, 0.0129898 -0.111963 0.0649991, 0.0130598 -0.112695 0.0649991, + 0.0115488 -0.122095 0.0649991, 0.0110628 -0.122583 0.0649991, 0.0104268 -0.122827 0.0649991, 0.00971877 -0.122705 0.0649991, + 0.00907477 -0.122461 0.0649991, 0.00857877 -0.121973 0.0649991, 0.00830577 -0.12124 0.0649991, 0.00829876 -0.120508 0.0649991, + 0.00857177 -0.119897 0.0649991, 0.00905776 -0.119409 0.0649991, 0.00969376 -0.119165 0.0649991, 0.0104018 -0.119165 0.0649991, + 0.0110448 -0.119531 0.0649991, 0.0115408 -0.12002 0.0649991, 0.0118138 -0.12063 0.0649991, 0.0118218 -0.121362 0.0649991, + 0.00814176 -0.119287 0.0649991, -0.00412024 -0.118188 0.0649991, -0.00357724 -0.114404 0.0649991, + -0.000597236 -0.114771 0.0649991, 2.97627e-005 -0.110254 0.0649991, -0.00268524 -0.108057 0.0649991, + -0.00211724 -0.103906 0.0649991, 0.00896576 -0.113428 0.0649991, -0.000837233 -0.129053 0.0649991, + 0.00666077 -0.133081 0.0649991, 0.00607277 -0.137231 0.0649991, -0.00237323 -0.132715 0.0649991, + -0.00398023 -0.131494 0.0649991, -0.00455723 -0.130518 0.0649991, -0.00495823 -0.129663 0.0649991, + -0.00495923 -0.129541 0.0649991, -0.00508523 -0.125146 0.0649991, -0.00324023 -0.121118 0.0649991, + -0.00323723 -0.121118 0.0649991, -0.00323423 -0.121118 0.0649991, -0.00240223 -0.120508 0.0649991, + -0.00144123 -0.120264 0.0649991, -0.000435235 -0.120264 0.0649991, 0.000516765 -0.12063 0.0649991, + 0.00787177 -0.124414 0.0649991, 0.00726177 -0.128809 0.0649991, 2.37661e-005 -0.124658 0.0649991, + -0.000415234 -0.124536 0.0649991, -0.000883234 -0.124414 0.0649991, -0.00128623 -0.124414 0.0649991, + -0.00166223 -0.124536 0.0649991, -0.00196823 -0.12478 0.0649991, -0.00217423 -0.125146 0.0649991, + -0.00240223 -0.126245 0.0649991, -0.00222623 -0.127344 0.0649991, -0.00168623 -0.12832 0.0649991, + 0.000102772 -0.150171 0.0649991, -0.00110323 -0.148828 0.0649991, -0.00154323 -0.147974 0.0649991, + -0.00186523 -0.147119 0.0649991, -0.00207423 -0.147607 0.0649991, -0.00241123 -0.147974 0.0649991, + -0.00284723 -0.148218 0.0649991, -0.00334123 -0.14834 0.0649991, -0.00512123 -0.147974 0.0649991, + -0.00657723 -0.146875 0.0649991, -0.00750123 -0.145166 0.0649991, -0.00763423 -0.143213 0.0649991, + -0.00630423 -0.133691 0.0649991, 0.00524677 -0.139917 0.0649991, 0.00413177 -0.147852 0.0649991, + 0.00375777 -0.14895 0.0649991, 0.00342877 -0.149561 0.0649991, 0.00301377 -0.150049 0.0649991, 0.00234677 -0.150415 0.0649991, + 0.00156677 -0.150659 0.0649991, 0.000788772 -0.150537 0.0649991, -0.00707923 -0.15835 0.0649991, + -0.00957823 -0.157007 0.0649991, -0.00837323 -0.148462 0.0649991, 0.00317677 -0.154565 0.0649991, + 0.00261077 -0.158594 0.0649991, -0.00644023 -0.153833 0.0649991, 0.00122378 -0.168481 0.0649991, + -0.0103262 -0.162378 0.0649991, -0.00978323 -0.158472 0.0649991, 0.00176778 -0.164697 0.0649991, + 0.00191276 -0.115015 0.0649991, 0.00580576 -0.115503 0.0649991, 0.00228776 -0.112329 0.0649991, + 0.00237577 -0.145532 0.0649991, 0.00274177 -0.142847 0.0649991, 0.00057577 -0.141748 0.0649991, + 9.37708e-005 -0.145166 0.0649991, 0.000113771 -0.145654 0.0649991, 0.000299771 -0.146021 0.0649991, + 0.000632771 -0.146387 0.0649991, 0.00106577 -0.146509 0.0649991, 0.00152577 -0.146509 0.0649991, + 0.00193377 -0.146265 0.0649991, 0.00222977 -0.145898 0.0649991, -0.00178323 -0.140527 0.0649991, + -0.00451923 -0.139062 0.0649991, -0.00501723 -0.142725 0.0649991, -0.00497823 -0.143457 0.0649991, + -0.00469323 -0.143945 0.0649991, -0.00429323 -0.144312 0.0649991, -0.00379523 -0.144434 0.0649991, + -0.00321923 -0.144434 0.0649991, -0.00270923 -0.144189 0.0649991, -0.00233923 -0.143701 0.0649991, + -0.00215723 -0.143213 0.0649991, 0.0435098 -0.111719 0.033646, 0.0378608 -0.139795 0.039895, 0.0313258 -0.172754 0.045208, + 0.0476568 -0.08877 0.045048, 0.0479998 -0.08877 0.032063, 0.0398028 -0.130029 0.038998, 0.0400888 -0.128442 0.039303, + 0.0403138 -0.127222 0.040173, 0.0404468 -0.126367 0.04147, 0.0404658 -0.126001 0.043, 0.0403668 -0.126367 0.044529, + 0.0401688 -0.127222 0.045826, 0.0398978 -0.128442 0.046696, 0.0395998 -0.129907 0.047001, 0.0393138 -0.131494 0.046696, + 0.0390888 -0.132715 0.045826, 0.0389558 -0.133569 0.044529, 0.0389368 -0.133936 0.043, 0.0390358 -0.133569 0.04147, + 0.0392338 -0.132715 0.040173, 0.0395048 -0.131494 0.039303, -0.0341722 -0.058862 0.0563701, -0.0436902 -0.149438 0.0563701, + -0.0447622 -0.157495 0.0481531, -0.0467992 -0.172998 0.0325471, -0.0416412 -0.12478 0.0359311, + -0.0382352 -0.0932861 0.0395361, -0.0211542 -0.124048 0.0649991, -0.0365642 -0.17605 0.0616651, + -0.0396082 -0.172266 0.0600701, -0.0422362 -0.166772 0.0583691, -0.0436362 -0.160791 0.0571561, -0.0389332 -0.10415 0.0563701, + -0.0296672 -0.060449 0.0591401, -0.0249562 -0.0622801 0.0615121, 0.0476528 -0.088647 0.045071, 0.0120958 -0.195459 0.063298, + -0.0477412 -0.185327 0.0273101, -0.0468482 -0.190454 0.0288171, -0.0446552 -0.193872 0.0321091, + -0.0357442 -0.188257 0.0508161, -0.0312632 -0.180078 0.0638011, -0.0359312 -0.17666 0.0619551, -0.0421602 -0.167017 0.0584231, + -0.0435942 -0.161035 0.0572091, -0.0359883 -0.058252 0.0146911, -0.0435982 -0.122095 0.0335281, + -0.0469932 -0.147852 0.0285731, -0.0498312 -0.169092 0.0232781, -0.0520712 -0.185571 0.0177081, + -0.0536922 -0.197168 0.0119231, -0.0546722 -0.203699 0.00599706, -0.0549162 -0.20498 0.00300306, + -0.0372663 -0.06521 5.97036e-008, -0.0370943 -0.0647221 0.00388806, -0.0368233 -0.0633791 0.00768906, + 0.0505218 -0.136743 0.00564004, 0.0502358 -0.136499 0.016392, 0.0491518 -0.110986 0.020543, 0.0489348 -0.105371 0.020657, + 0.0487747 -0.100244 0.019249, 0.0487017 -0.096582 0.016617, 0.0487057 -0.0954831 0.015004, 0.0487367 -0.095117 0.013298, + 0.0490647 -0.094629 3.85159e-008, 0.0488507 -0.089136 3.88074e-008, 0.0511088 -0.162012 0.020321, 0.0532568 -0.213831 0.01373, + 0.0540198 -0.231409 0.010346, 0.0545618 -0.243311 0.00692003, 0.0548898 -0.249536 0.00346603, 0.0549388 -0.250146 0.00260003, + 0.0549738 -0.250452 0.00173403, 0.0549928 -0.250391 0.00086603, 0.0540998 -0.226465 3.15452e-008, + 0.0540498 -0.22616 0.00153003, 0.0539818 -0.225244 0.00282903, 0.0539048 -0.223901 0.00369503, 0.0538408 -0.222375 0.00400003, + 0.0537868 -0.220789 0.00369503, 0.0537608 -0.219446 0.00282903, 0.0537608 -0.218591 0.00153003, + 0.0537868 -0.218347 3.19751e-008, 0.0529058 -0.195215 3.31977e-008, 0.0528978 -0.195215 0.000308033, + 0.0528368 -0.194971 0.00240603, 0.0527688 -0.194238 0.00384903, 0.0526918 -0.19314 0.00501303, 0.0524748 -0.188989 0.00742203, + 0.0517538 -0.173486 0.012223, 0.0514678 -0.166895 0.013657, 0.0511738 -0.160181 0.015091, 0.0511128 -0.158838 0.015393, + 0.0508648 -0.153223 0.016591, 0.0509608 -0.153101 0.012887, 0.0509188 -0.151636 0.01236, 0.0508688 -0.150049 0.011944, + 0.0507388 -0.145898 0.01084, 0.0506398 -0.142236 0.00938804, 0.0655818 -0.163477 3.16759e-008, + 0.0592458 -0.179346 3.24363e-008, 0.0528868 -0.195215 0.000775033, 0.0510978 -0.158472 0.015465, 0.0510748 -0.157861 0.01558, + 0.0510518 -0.157373 0.01569, 0.0510288 -0.156885 0.015805, 0.0510028 -0.156274 0.015919, 0.0509798 -0.155786 0.01603, + 0.0509568 -0.155298 0.016144, 0.0509338 -0.154687 0.016259, 0.0509108 -0.154199 0.016373, 0.0508878 -0.153711 0.016484, + 0.0509568 -0.153223 0.016579, 0.0511928 -0.153345 0.016541, 0.0516278 -0.153589 0.016472, 0.0525278 -0.154077 0.016335, + 0.0526888 -0.154199 0.016312, 0.0521618 -0.155054 0.01614, 0.0516198 -0.15603 0.015965, 0.0525468 -0.156519 0.01582, + 0.0532568 -0.156885 0.015709, 0.0548018 -0.157739 0.01537, 0.0565378 -0.158594 0.014763, 0.0594938 -0.160181 0.013035, + 0.0624308 -0.161768 0.00997803, 0.0645218 -0.162866 0.00601603, 0.0652538 -0.163232 0.00343003, + 0.0655208 -0.163354 0.00148803, 0.0655818 -0.163477 0.000189032, 0.0526888 -0.154199 0.016308, 0.0520858 -0.153711 0.014428, + 0.0515818 -0.153467 0.013604, 0.0517768 -0.153711 0.016449, -0.0343593 -0.05874 0.0122111, -0.0332953 -0.059229 0.0549661, + -0.0331693 -0.059229 0.0554391, -0.0330282 -0.059229 0.0556381, -0.0328453 -0.059351 0.0557901, + -0.0289732 -0.060693 0.0580941, -0.0249582 -0.0622801 0.0600931, -0.0165822 -0.06521 0.0631601, + -0.0153802 -0.065698 0.0634121, -0.0141562 -0.066187 0.0635041, 0.0250048 -0.0803471 0.063504, 0.0253368 -0.080469 0.063435, + 0.0254878 -0.0805911 0.063359, 0.0256248 -0.0805911 0.063252, 0.0455968 -0.0879151 0.044621, 0.0458258 -0.088037 0.044293, + 0.0458908 -0.088037 0.044102, 0.0459138 -0.088037 0.043896, 0.0470917 -0.088403 3.92449e-008, 0.0459137 -0.088037 -0.043897, + 0.0458907 -0.088037 -0.044101, 0.0458257 -0.088037 -0.044296, 0.0455967 -0.087915 -0.044622, 0.0256247 -0.0805911 -0.063251, + 0.0254877 -0.0805911 -0.063358, 0.0253367 -0.080469 -0.063434, 0.0250047 -0.0803471 -0.063499, + -0.0141563 -0.066187 -0.0634989, -0.0153803 -0.065698 -0.0634149, -0.0165823 -0.06521 -0.0631589, + -0.0249583 -0.0622801 -0.0600919, -0.0289733 -0.060693 -0.0580939, -0.0328453 -0.059351 -0.0557929, + -0.0330283 -0.059229 -0.0556369, -0.0331693 -0.059229 -0.0554419, -0.0332953 -0.059229 -0.0549659, + -0.0343593 -0.05874 -0.0122099, -0.0351333 -0.058496 -0.0134709, -0.0359883 -0.058252 -0.0146899, + -0.0352943 -0.058496 -0.0421819, -0.0349083 -0.0586181 -0.0425029, -0.0345153 -0.05874 -0.0428209, + -0.0341723 -0.058862 -0.0563729, -0.0296693 -0.060449 -0.0591389, -0.0249563 -0.0622801 -0.0615119, + -0.0150403 -0.06582 -0.0649979, 0.0262887 -0.080835 -0.064998, 0.0476527 -0.088647 -0.045068, 0.0479997 -0.08877 -0.032062, + 0.0481377 -0.08877 -0.026607, 0.0481407 -0.08877 -0.026598, 0.0481447 -0.08877 -0.026589, -0.0296692 -0.060449 0.0591401, + -0.0351333 -0.058496 0.0134701, -0.0158992 -0.0633791 0.0631601, -0.0242752 -0.0603271 0.0600931, + -0.0282883 -0.058862 0.0580941, -0.0321583 -0.05752 0.0557901, -0.0325013 -0.0583741 0.0557901, + -0.0162412 -0.064355 0.0631601, -0.0134732 -0.0642331 0.0635041, -0.0138142 -0.06521 0.0635041, + -0.0146962 -0.063867 0.0634121, 0.0256898 -0.078516 0.063504, 0.0263078 -0.07876 0.063252, 0.0259668 -0.079736 0.063252, + 0.0253468 -0.079492 0.063504, 0.0258578 -0.0786381 0.063481, 0.0260198 -0.0786381 0.063435, 0.0462798 -0.085962 0.044621, + 0.0465998 -0.086084 0.043896, 0.0462568 -0.087061 0.043896, 0.0459368 -0.086938 0.044621, 0.0464098 -0.086084 0.044468, + 0.0465088 -0.086084 0.044293, 0.0477747 -0.086572 3.91683e-008, -0.0336343 -0.056909 0.0138671, + -0.0326123 -0.0572751 0.0549661, -0.0340043 -0.057886 0.0130471, -0.0329513 -0.058252 0.0549661, + -0.0325783 -0.0572751 0.0552111, -0.0324863 -0.057397 0.0554391, -0.0342452 -0.289514 -0.00681195, + -0.0322572 -0.289514 -0.013361, -0.0290302 -0.289514 -0.019398, -0.0246892 -0.289514 -0.024689, -0.0193982 -0.289514 -0.02903, + -0.0133612 -0.289514 -0.032258, -0.00681222 -0.289514 -0.034244, -2.18977e-007 -0.289514 -0.034915, + 0.00681178 -0.289514 -0.034244, 0.0133608 -0.289514 -0.032258, 0.0193978 -0.289514 -0.02903, 0.0246888 -0.289514 -0.024689, + 0.0290298 -0.289514 -0.019398, 0.0322568 -0.289514 -0.013361, 0.0342448 -0.289514 -0.00681197, + 0.0488698 -0.289514 -0.00972097, 0.0460358 -0.289514 -0.019068, 0.0414308 -0.289514 -0.027683, 0.0352328 -0.289514 -0.035234, + 0.0276828 -0.289514 -0.041431, 0.0190678 -0.289514 -0.046035, 0.00972078 -0.289514 -0.048872, + -2.22413e-007 -0.289514 -0.049829, -0.00972122 -0.289514 -0.048872, -0.0190682 -0.289514 -0.046035, + -0.0276832 -0.289514 -0.041431, -0.0352332 -0.289514 -0.035234, -0.0414312 -0.289514 -0.0276829, + -0.0460362 -0.289514 -0.0190679, -0.0488702 -0.289514 -0.00972095, 0.0549888 -0.250452 -0.00114597, + 0.0549738 -0.250452 -0.00172397, 0.0549508 -0.25033 -0.00229797, 0.0548968 -0.249597 -0.00338297, + 0.0548208 -0.248376 -0.00442897, 0.0545228 -0.242517 -0.00721497, 0.0540118 -0.231226 -0.010386, + 0.0526888 -0.200342 -0.015777, 0.0510218 -0.159937 -0.020541, 0.0481827 -0.089746 -0.02652, 0.0431587 -0.113428 -0.034093, + 0.0370827 -0.143701 -0.040618, 0.0306108 -0.176416 -0.045694, 0.0240568 -0.209619 -0.049459, 0.0123098 -0.20791 -0.053604, + -2.4287e-007 -0.205896 -0.055, -0.00806024 -0.204309 -0.054405, -0.0159222 -0.2026 -0.052646, -0.0234262 -0.200891 -0.0497619, + -0.0304262 -0.199121 -0.0458179, -0.0400922 -0.196313 -0.0376509, -0.0400962 -0.196313 -0.0376449, + -0.0401042 -0.196313 -0.0376409, -0.0445902 -0.193994 -0.0321969, -0.0468862 -0.190332 -0.0287529, + -0.0477522 -0.185083 -0.0272899, -0.0474132 -0.177637 -0.0278779, -0.0447922 -0.153833 -0.0319159, + -0.0368843 -0.080713 -0.0407999, -0.0416373 -0.107202 -0.0359329, -0.0454903 -0.136499 -0.0309119, + -0.0490952 -0.163599 -0.0247949, -0.0509492 -0.177393 -0.0207129, -0.0525932 -0.189355 -0.0160959, + -0.0536312 -0.19668 -0.0121989, -0.0544172 -0.20199 -0.00797894, -0.0548522 -0.204675 -0.00403494, + -0.0549622 -0.205103 -0.00202094, -0.0539442 -0.289514 -0.0107299, -0.0508122 -0.289514 -0.0210479, + -0.0457312 -0.289514 -0.0305559, -0.0388912 -0.289514 -0.03889, -0.0305562 -0.289514 -0.04573, -0.0210482 -0.289514 -0.050813, + -0.0107302 -0.289514 -0.053943, -2.23604e-007 -0.289514 -0.055, 0.0107298 -0.289514 -0.053943, 0.0210478 -0.289514 -0.050813, + 0.0305558 -0.289514 -0.04573, 0.0388908 -0.289514 -0.03889, 0.0457308 -0.289514 -0.030556, 0.0508118 -0.289514 -0.021048, + 0.0539438 -0.289514 -0.01073, -0.0312653 -0.180078 -0.0637999, -0.0295433 -0.180933 -0.0643529, + -0.0275923 -0.182031 -0.0649139, -0.0272693 -0.182153 -0.0649979, -0.0266843 -0.18252 -0.0649979, + -0.0218852 -0.184839 -0.0649979, -0.0114152 -0.189233 -0.064998, 0.00523775 -0.194116 -0.064998, + 0.00862275 -0.194849 -0.064998, 0.00934275 -0.194971 -0.064998, 0.00965975 -0.194971 -0.064998, 0.0102628 -0.194849 -0.064998, + 0.0110088 -0.195215 -0.064292, 0.0114848 -0.195337 -0.063858, 0.0123558 -0.195459 -0.063064, 0.0129918 -0.195581 -0.062488, + 0.0264188 -0.19729 -0.050363, 0.0252378 -0.203394 -0.049911, 0.0154728 -0.208398 -0.05278, 0.00649076 -0.207056 -0.054615, + 0.00378076 -0.206628 -0.05487, 0.00219776 -0.206262 -0.054958, 0.00116876 -0.206079 -0.054988, -0.00230924 -0.205408 -0.05495, + -0.0109402 -0.203699 -0.0539009, -0.0192722 -0.201868 -0.051513, -0.0293832 -0.199365 -0.0464929, + -0.0337452 -0.198145 -0.0434319, -0.0345542 -0.1979 -0.0427909, -0.0362972 -0.197412 -0.0413219, + -0.0370672 -0.190698 -0.0468779, 0.00935175 -0.194971 -0.064998, 0.00908275 -0.194849 -0.064998, + 0.00874675 -0.163721 -0.064998, 0.0101067 -0.157861 -0.064998, 0.00880374 -0.152124 -0.064998, 0.00878674 -0.152124 -0.064998, + 0.00419474 -0.152856 -0.064998, 0.00424574 -0.152979 -0.064998, 0.00572874 -0.156641 -0.064998, + 0.00532574 -0.160547 -0.064998, 0.00442775 -0.161768 -0.064998, 0.00375474 -0.162256 -0.064998, 0.00298974 -0.1625 -0.064998, + 0.00222474 -0.1625 -0.064998, 0.00148974 -0.162256 -0.064998, 0.000840745 -0.16189 -0.064998, 0.000324745 -0.161279 -0.064998, + -0.00285326 -0.156763 -0.064998, -0.00413426 -0.155298 -0.064998, -0.00574126 -0.154321 -0.0649979, + -0.00756326 -0.153711 -0.0649979, -0.00946426 -0.153711 -0.0649979, -0.0124043 -0.154687 -0.0649979, + -0.0148583 -0.156519 -0.0649979, -0.0166493 -0.159204 -0.0649979, -0.0174393 -0.162378 -0.0649979, + -0.0165793 -0.169946 -0.0649979, -0.0165633 -0.169946 -0.0649979, -0.0124633 -0.168848 -0.0649979, + -0.0124803 -0.168848 -0.0649979, -0.0130733 -0.165308 -0.0649979, -0.0126123 -0.16189 -0.0649979, + -0.0121803 -0.160913 -0.0649979, -0.0115023 -0.160059 -0.0649979, -0.0106203 -0.159448 -0.0649979, + -0.00959726 -0.159082 -0.0649979, -0.00856726 -0.15896 -0.0649979, -0.00756826 -0.159204 -0.0649979, + -0.00668126 -0.159814 -0.0649979, -0.00597226 -0.160547 -0.064998, -0.00289025 -0.164819 -0.064998, + -0.000253254 -0.167017 -0.064998, 0.00139775 -0.167505 -0.064998, 0.00312875 -0.167627 -0.064998, + 0.00487275 -0.167261 -0.064998, 0.00645275 -0.166406 -0.064998, 0.000699743 -0.153101 -0.064998, + 0.00347374 -0.15249 -0.064998, 0.00498574 -0.141748 -0.064998, 0.00223474 -0.142236 -0.064998, 0.00181574 -0.145166 -0.064998, + -0.00822626 -0.147363 -0.0649979, -0.00880526 -0.151514 -0.0649979, 0.00120574 -0.149561 -0.064998, + 0.00554174 -0.140894 -0.064998, 0.00582174 -0.141504 -0.064998, 0.00633174 -0.141992 -0.064998, + 0.00699274 -0.142236 -0.064998, 0.00769874 -0.142236 -0.064998, 0.00835974 -0.14187 -0.064998, 0.00885874 -0.141382 -0.064998, + 0.00912374 -0.140649 -0.064998, 0.00911374 -0.139917 -0.064998, 0.00883374 -0.139307 -0.064998, + 0.00832474 -0.138818 -0.064998, 0.00766374 -0.138574 -0.064998, 0.00695774 -0.138574 -0.064998, 0.00629674 -0.13894 -0.064998, + 0.00579774 -0.139429 -0.064998, 0.00553274 -0.140161 -0.064998, 0.0102547 -0.13125 -0.064998, 0.00991774 -0.13064 -0.064998, + 0.00937474 -0.130273 -0.064998, 0.00868574 -0.130151 -0.064998, 0.00798474 -0.130151 -0.064998, + 0.00736274 -0.130518 -0.064998, 0.00691574 -0.131128 -0.064998, 0.00670974 -0.13186 -0.064998, 0.00678774 -0.132593 -0.064998, + 0.00712474 -0.133081 -0.064998, 0.00766874 -0.133569 -0.064998, 0.00835774 -0.133691 -0.064998, + 0.00905874 -0.133569 -0.064998, 0.00968074 -0.133203 -0.064998, 0.0101277 -0.132715 -0.064998, 0.0103327 -0.131982 -0.064998, + 0.00621574 -0.132959 -0.064998, -0.00586726 -0.13064 -0.0649979, -0.00641126 -0.134546 -0.0649979, + -0.00343126 -0.134912 -0.0649979, -0.00405826 -0.139429 -0.0649979, -0.00730226 -0.140894 -0.0649979, + -0.00787026 -0.144922 -0.0649979, 0.00539074 -0.138818 -0.064998, -0.000761263 -0.129663 -0.0649979, + 0.00737574 -0.127954 -0.064998, 0.00798674 -0.12356 -0.064998, -9.42637e-005 -0.125513 -0.0649979, + -0.000572264 -0.125635 -0.0649979, -0.00105526 -0.125635 -0.0649979, -0.00144126 -0.125513 -0.0649979, + -0.00176226 -0.125269 -0.0649979, -0.00198426 -0.124902 -0.0649979, -0.00208626 -0.124536 -0.0649979, + -0.00199726 -0.123437 -0.0649979, -0.00151726 -0.122339 -0.0649979, -0.000735265 -0.121606 -0.0649979, + 0.000271735 -0.121118 -0.0649979, 0.00858673 -0.119409 -0.064998, 0.00917573 -0.115137 -0.064998, + -0.000175266 -0.11709 -0.0649979, -0.00208527 -0.117944 -0.0649979, -0.00288027 -0.118677 -0.0649979, + -0.00353227 -0.119409 -0.0649979, -0.00353427 -0.119409 -0.0649979, -0.00488326 -0.123682 -0.0649979, + -0.00422726 -0.128076 -0.0649979, -0.00422526 -0.128076 -0.0649979, -0.00422326 -0.128076 -0.0649979, + -0.00357926 -0.128931 -0.0649979, -0.00273626 -0.129419 -0.0649979, -0.00176626 -0.129663 -0.0649979, + 0.00698873 -0.101099 -0.064998, 0.00545573 -0.102075 -0.064998, 0.00481373 -0.102686 -0.064998, + 0.00426973 -0.103418 -0.0649979, 0.00419473 -0.10293 -0.0649979, 0.00397473 -0.102563 -0.0649979, + 0.00362473 -0.102197 -0.0649979, 0.00317573 -0.101953 -0.0649979, 0.00136873 -0.101831 -0.0649979, + -0.000330269 -0.102441 -0.0649979, -0.00169027 -0.103784 -0.0649979, -0.00235327 -0.105615 -0.0649979, + -0.00368427 -0.115137 -0.0649979, 0.00910973 -0.112329 -0.064998, 0.0102247 -0.104517 -0.064998, + 0.0101937 -0.103174 -0.064998, 0.0100237 -0.102563 -0.064998, 0.00975473 -0.102075 -0.064998, 0.00923573 -0.101465 -0.064998, + 0.00853473 -0.101099 -0.064998, 0.00775473 -0.100977 -0.064998, 0.0111797 -0.097681 -0.064998, 0.0117447 -0.093652 -0.064998, + 0.00172573 -0.095728 -0.0649979, 0.00236373 -0.0912111 -0.0649979, -0.000410271 -0.0918211 -0.0649979, + -0.00161427 -0.100366 -0.0649979, -0.000205272 -0.090356 -0.0649979, 0.0125887 -0.087671 -0.064998, + 0.0131327 -0.083765 -0.064998, 0.000338727 -0.08645 -0.0649979, -0.000965261 -0.1354 -0.064998, + 0.00292774 -0.136011 -0.064998, -0.00134126 -0.138086 -0.064998, 0.00252273 -0.109888 -0.0649979, + -0.000493267 -0.110498 -0.0649979, 3.9732e-005 -0.106836 -0.0649979, 0.000224732 -0.106226 -0.0649979, + 0.000595732 -0.105737 -0.0649979, 0.00110773 -0.105493 -0.0649979, 0.00168373 -0.105493 -0.0649979, + 0.00218073 -0.105615 -0.0649979, 0.00257873 -0.105981 -0.0649979, 0.00286073 -0.106592 -0.0649979, + 0.00289773 -0.107202 -0.0649979, 0.00789973 -0.106226 -0.064998, 0.00753373 -0.108789 -0.064998, + 0.00513973 -0.109277 -0.064998, 0.00561673 -0.105859 -0.064998, 0.00576373 -0.105493 -0.064998, + 0.00605873 -0.105127 -0.064998, 0.00646673 -0.104883 -0.064998, 0.00692673 -0.104883 -0.064998, + 0.00735973 -0.105005 -0.064998, 0.00769273 -0.105371 -0.064998, 0.00787973 -0.105737 -0.064998, 0.0476567 -0.08877 -0.045051, + 0.0313258 -0.172754 -0.045208, 0.0378607 -0.139795 -0.039894, 0.0435097 -0.111719 -0.033644, 0.0398027 -0.130029 -0.038999, + 0.0395047 -0.131494 -0.039304, 0.0392337 -0.132715 -0.040172, 0.0390357 -0.133569 -0.041469, 0.0389367 -0.133936 -0.043001, + 0.0389557 -0.133569 -0.04453, 0.0390887 -0.132715 -0.045829, 0.0393137 -0.131494 -0.046695, 0.0395997 -0.129907 -0.047, + 0.0398977 -0.128442 -0.046695, 0.0401687 -0.127222 -0.045829, 0.0403667 -0.126367 -0.04453, 0.0404657 -0.126001 -0.043001, + 0.0404467 -0.126367 -0.041469, 0.0403137 -0.127222 -0.040172, 0.0400887 -0.128442 -0.039304, -0.0382353 -0.093286 -0.0395369, + -0.0416413 -0.12478 -0.0359319, -0.0467992 -0.172998 -0.0325469, -0.0447623 -0.157495 -0.0481559, + -0.0436903 -0.149438 -0.0563729, -0.0296673 -0.060449 -0.0591389, -0.0389333 -0.10415 -0.0563729, + -0.0436363 -0.160791 -0.0571589, -0.0422363 -0.166772 -0.0583639, -0.0396083 -0.172266 -0.0600729, + -0.0365642 -0.17605 -0.0616599, -0.0312633 -0.180078 -0.0637999, -0.0211543 -0.124048 -0.0649979, + 0.0120958 -0.195459 -0.063301, -0.0435943 -0.161035 -0.0572089, -0.0421603 -0.167017 -0.0584249, + -0.0359312 -0.17666 -0.0619539, -0.0357442 -0.188257 -0.0508149, -0.0446552 -0.193872 -0.0321079, + -0.0468482 -0.190454 -0.0288169, -0.0477412 -0.185327 -0.0273109, -0.0549162 -0.20498 -0.00300394, + -0.0546722 -0.203699 -0.00599694, -0.0536922 -0.197168 -0.0119229, -0.0520712 -0.185571 -0.0177069, + -0.0498312 -0.169092 -0.0232789, -0.0469932 -0.147852 -0.0285739, -0.0435983 -0.122095 -0.0335279, + -0.0364493 -0.061182 -0.0113169, -0.0368233 -0.0633791 -0.00768894, 0.0502358 -0.136499 -0.016391, + 0.0505218 -0.136743 -0.00564096, 0.0506398 -0.142236 -0.00938796, 0.0507388 -0.145898 -0.010839, + 0.0508688 -0.150049 -0.011944, 0.0509188 -0.151636 -0.012358, 0.0509608 -0.153101 -0.012886, 0.0508648 -0.153223 -0.016591, + 0.0511128 -0.158838 -0.015393, 0.0511738 -0.160181 -0.01509, 0.0514678 -0.166895 -0.013656, 0.0517538 -0.173486 -0.012221, + 0.0524748 -0.188989 -0.00742097, 0.0526918 -0.19314 -0.00501397, 0.0527688 -0.194238 -0.00384897, + 0.0528368 -0.194971 -0.00240497, 0.0528978 -0.195215 -0.000306966, 0.0537608 -0.218591 -0.00153097, + 0.0537608 -0.219446 -0.00282797, 0.0537868 -0.220789 -0.00369597, 0.0538408 -0.222375 -0.00399997, + 0.0539048 -0.223901 -0.00369597, 0.0539818 -0.225244 -0.00282797, 0.0540498 -0.22616 -0.00153097, + 0.0549928 -0.250391 -0.00086697, 0.0549738 -0.250452 -0.00173297, 0.0549388 -0.250146 -0.00260097, + 0.0548898 -0.249536 -0.00346697, 0.0545618 -0.243311 -0.00691897, 0.0540198 -0.231409 -0.010345, 0.0532568 -0.213831 -0.01373, + 0.0511088 -0.162012 -0.020321, 0.0487367 -0.095117 -0.0133, 0.0487057 -0.0954831 -0.015003, 0.0487017 -0.096582 -0.016617, + 0.0487747 -0.100244 -0.01925, 0.0489347 -0.105371 -0.020656, 0.0491517 -0.110986 -0.020544, 0.0516198 -0.15603 -0.015964, + 0.0521618 -0.155054 -0.016139, 0.0526888 -0.154199 -0.01631, 0.0525278 -0.154077 -0.016335, 0.0516278 -0.153589 -0.016474, + 0.0511928 -0.153345 -0.016541, 0.0509568 -0.153223 -0.016577, 0.0508878 -0.153711 -0.016485, 0.0509108 -0.154199 -0.016372, + 0.0509338 -0.154687 -0.016258, 0.0509568 -0.155298 -0.016145, 0.0509798 -0.155786 -0.016031, 0.0510028 -0.156274 -0.015918, + 0.0510288 -0.156885 -0.015804, 0.0510518 -0.157373 -0.015691, 0.0510748 -0.157861 -0.015578, 0.0510978 -0.158472 -0.015464, + 0.0528868 -0.195215 -0.000773967, 0.0655818 -0.163477 -0.000187967, 0.0655208 -0.163354 -0.00148897, + 0.0652538 -0.163232 -0.00343097, 0.0645218 -0.162866 -0.00601497, 0.0624308 -0.161768 -0.00997797, + 0.0594938 -0.160181 -0.013033, 0.0565378 -0.158594 -0.014764, 0.0548018 -0.157739 -0.01537, 0.0532568 -0.156885 -0.015708, + 0.0525468 -0.156519 -0.01582, 0.0515818 -0.153467 -0.013602, 0.0520858 -0.153711 -0.014428, 0.0517768 -0.153711 -0.016451, + -0.0321583 -0.05752 -0.0557929, -0.0282883 -0.058862 -0.0580939, -0.0242753 -0.0603271 -0.0600919, + -0.0158993 -0.063379 -0.0631589, -0.0162413 -0.064355 -0.0631589, -0.0325013 -0.0583741 -0.0557929, + -0.0138143 -0.06521 -0.0634989, -0.0134733 -0.0642331 -0.0634989, -0.0146963 -0.063867 -0.0634149, + 0.0256897 -0.078516 -0.063499, 0.0253467 -0.079492 -0.063499, 0.0259667 -0.079736 -0.063251, 0.0263077 -0.07876 -0.063251, + 0.0261727 -0.07876 -0.063358, 0.0260197 -0.0786381 -0.063434, 0.0462797 -0.085962 -0.044622, 0.0459367 -0.086938 -0.044622, + 0.0462567 -0.087061 -0.043897, 0.0465997 -0.086084 -0.043897, 0.0465737 -0.086084 -0.044101, 0.0465087 -0.086084 -0.044296, + -0.0326123 -0.0572751 -0.0549659, -0.0336343 -0.056909 -0.0138679, -0.0340043 -0.057886 -0.0130479, + -0.0329513 -0.058252 -0.0549659, -0.0323413 -0.057397 -0.0556369, -0.0324863 -0.057397 -0.0554419, + 0.00875774 -0.152124 -0.067001, 0.00428774 -0.152979 -0.067001, 0.00578074 -0.156641 -0.067001, + 0.00581674 -0.158594 -0.067001, 0.00537474 -0.160547 -0.067001, 0.00446074 -0.16189 -0.067001, 0.00377574 -0.162256 -0.067001, + 0.00299674 -0.1625 -0.067001, 0.00221774 -0.1625 -0.067001, 0.00146874 -0.162256 -0.067001, 0.000807744 -0.16189 -0.067001, + 0.000281744 -0.161279 -0.067001, -0.00289626 -0.156763 -0.067001, -0.00416826 -0.155298 -0.067001, + -0.00576326 -0.154321 -0.0670009, -0.00757126 -0.153833 -0.0670009, -0.00945826 -0.153833 -0.0670009, + -0.0123813 -0.154687 -0.0670009, -0.0148203 -0.156519 -0.0670009, -0.0166003 -0.159326 -0.0670009, + -0.0173853 -0.162378 -0.0670009, -0.0173213 -0.166162 -0.0670009, -0.0165293 -0.169946 -0.0670009, + -0.0125303 -0.168848 -0.0670009, -0.0131253 -0.165308 -0.0670009, -0.0130253 -0.163599 -0.0670009, + -0.0126643 -0.16189 -0.0670009, -0.0122243 -0.160791 -0.0670009, -0.0115383 -0.159937 -0.0670009, + -0.0106433 -0.159326 -0.0670009, -0.00960626 -0.15896 -0.0670009, -0.00856226 -0.15896 -0.0670009, + -0.00754826 -0.159204 -0.0670009, -0.00664926 -0.159692 -0.0670009, -0.00592926 -0.160547 -0.067001, + -0.00284826 -0.164819 -0.067001, -0.000231255 -0.167017 -0.067001, 0.00140675 -0.167505 -0.067001, + 0.00312375 -0.167627 -0.067001, 0.00485575 -0.167139 -0.067001, 0.00642275 -0.166406 -0.067001, + 0.00869974 -0.163599 -0.067001, 0.0100547 -0.157861 -0.067001, 0.00973774 -0.154932 -0.067001, 0.00877174 -0.152124 -0.066001, + 0.00872274 -0.163721 -0.066001, 0.00642175 -0.166406 -0.067001, 0.00485475 -0.167139 -0.067001, + -0.000230255 -0.167017 -0.067001, -0.00286925 -0.164819 -0.066001, 0.00645175 -0.166406 -0.064998, + -0.00595126 -0.160547 -0.066001, -0.00856126 -0.15896 -0.0670009, -0.0106443 -0.159326 -0.0670009, + -0.0122253 -0.160791 -0.0670009, -0.0126373 -0.16189 -0.0660009, -0.0124963 -0.168848 -0.0660009, + -0.0165463 -0.169946 -0.0660009, -0.0174123 -0.162378 -0.0660009, -0.00946126 -0.153711 -0.0660009, + -0.00287526 -0.156763 -0.066001, 0.000302744 -0.161279 -0.066001, 0.00146774 -0.162256 -0.067001, + 0.00221674 -0.1625 -0.067001, 0.00377674 -0.162256 -0.067001, 0.00446174 -0.16189 -0.067001, 0.00535074 -0.160547 -0.066001, + 0.00424074 -0.152979 -0.066001, 0.00342674 -0.15249 -0.067001, 0.00492374 -0.141748 -0.067001, 0.00228074 -0.142236 -0.067001, + 0.00186274 -0.145166 -0.067001, -0.00817926 -0.147485 -0.0670009, -0.00874226 -0.151514 -0.0670009, + 0.00126874 -0.149438 -0.067001, 0.000761742 -0.153101 -0.067001, 0.00559374 -0.140771 -0.067001, + 0.00586474 -0.141504 -0.067001, 0.00635974 -0.141992 -0.067001, 0.00700074 -0.142236 -0.067001, + 0.00768574 -0.142114 -0.067001, 0.00832874 -0.14187 -0.067001, 0.00881374 -0.141382 -0.067001, 0.00907174 -0.140649 -0.067001, + 0.00906274 -0.139917 -0.067001, 0.00879074 -0.139307 -0.067001, 0.00829574 -0.138818 -0.067001, + 0.00765474 -0.138574 -0.067001, 0.00696974 -0.138696 -0.067001, 0.00632674 -0.13894 -0.067001, 0.00584174 -0.139429 -0.067001, + 0.00558374 -0.140161 -0.067001, 0.00556774 -0.140894 -0.066001, 0.00908874 -0.139917 -0.066001, + 0.00829674 -0.138818 -0.067001, 0.00765574 -0.138574 -0.067001, 0.00683774 -0.132471 -0.067001, + 0.00716374 -0.133081 -0.067001, 0.00769074 -0.133447 -0.067001, 0.00835974 -0.133691 -0.067001, + 0.00904074 -0.133569 -0.067001, 0.00967974 -0.133203 -0.067001, 0.0101207 -0.132593 -0.067001, 0.0102837 -0.131982 -0.067001, + 0.0102047 -0.13125 -0.067001, 0.00987874 -0.130762 -0.067001, 0.00935174 -0.130273 -0.067001, 0.00868274 -0.130151 -0.067001, + 0.00800174 -0.130273 -0.067001, 0.00736274 -0.13064 -0.067001, 0.00692174 -0.13125 -0.067001, 0.00675774 -0.13186 -0.067001, + 0.00681274 -0.132593 -0.066001, 0.00964574 -0.133203 -0.067001, 0.0100817 -0.132593 -0.067001, 0.0102817 -0.131982 -0.067001, + 0.0102297 -0.13125 -0.066001, 0.00736174 -0.130518 -0.064998, 0.00868374 -0.130151 -0.067001, 0.00739674 -0.13064 -0.067001, + 0.00696174 -0.131128 -0.067001, 0.00676174 -0.13186 -0.067001, -0.00582326 -0.13064 -0.0670009, + -0.00635126 -0.134424 -0.0670009, -0.00337226 -0.134912 -0.0670009, -0.00401026 -0.139429 -0.0670009, + -0.00725526 -0.140894 -0.0670009, -0.00780526 -0.1448 -0.0670009, 0.00534174 -0.138818 -0.067001, + 0.00615674 -0.133081 -0.067001, 0.00310174 -0.136011 -0.067001, -0.00140626 -0.138208 -0.067001, + -0.00101026 -0.1354 -0.067001, 0.00732874 -0.127954 -0.067001, 0.00792374 -0.123682 -0.067001, + -8.22641e-005 -0.125635 -0.0670009, -0.000569264 -0.125635 -0.0670009, -0.00106126 -0.125635 -0.0670009, + -0.00150726 -0.125513 -0.0670009, -0.00186426 -0.125146 -0.0670009, -0.00205026 -0.124902 -0.0670009, + -0.00213826 -0.124536 -0.0670009, -0.00204826 -0.123315 -0.0670009, -0.00156026 -0.122339 -0.0670009, + -0.000764265 -0.121484 -0.0670009, 0.000260735 -0.121118 -0.0670009, 0.00853973 -0.119287 -0.067001, + 0.00911273 -0.115259 -0.067001, -0.000164266 -0.117212 -0.0670009, -0.00205527 -0.117944 -0.0670009, + -0.00284327 -0.118677 -0.0670009, -0.00348927 -0.119531 -0.0670009, -0.00483026 -0.123682 -0.0670009, + -0.00475726 -0.125879 -0.0670009, -0.00417826 -0.128076 -0.0670009, -0.00354526 -0.128809 -0.0670009, + -0.00271526 -0.129419 -0.0670009, -0.00176026 -0.129663 -0.0670009, -0.000772263 -0.129541 -0.0670009, + -8.82639e-005 -0.125513 -0.0660009, -0.00105826 -0.125635 -0.0660009, -0.00146526 -0.125513 -0.0670009, + -0.00180026 -0.125269 -0.0670009, -0.00203226 -0.124902 -0.0670009, -0.00211226 -0.124536 -0.0660009, + 0.000265735 -0.121118 -0.0660009, -0.00351027 -0.119409 -0.0660009, -0.000169266 -0.11709 -0.0660009, + -0.00420126 -0.128076 -0.0660009, -0.000767263 -0.129663 -0.0660009, -0.00271426 -0.129419 -0.0670009, + 0.00420473 -0.103662 -0.0670009, 0.00418273 -0.103174 -0.0670009, 0.00398773 -0.102686 -0.0670009, + 0.00363473 -0.102197 -0.0670009, 0.00316073 -0.101953 -0.0670009, 0.00137473 -0.101831 -0.0670009, + -0.000302269 -0.102441 -0.0670009, -0.00164627 -0.103784 -0.0670009, -0.00230127 -0.105615 -0.0670009, + -0.00362227 -0.115015 -0.0670009, 0.00906373 -0.112329 -0.067001, 0.0101727 -0.104395 -0.067001, + 0.0101417 -0.103174 -0.067001, 0.00997473 -0.102686 -0.067001, 0.00970873 -0.102075 -0.067001, 0.00920273 -0.101465 -0.067001, + 0.00851773 -0.101099 -0.067001, 0.00775773 -0.100977 -0.067001, 0.00700973 -0.101221 -0.067001, + 0.00541273 -0.102197 -0.067001, 0.00475273 -0.10293 -0.067001, -0.000555268 -0.110498 -0.0670009, + -1.22685e-005 -0.106836 -0.0670009, 0.000178731 -0.106226 -0.0670009, 0.000563731 -0.105737 -0.0670009, + 0.00109473 -0.105493 -0.0670009, 0.00169073 -0.105371 -0.0670009, 0.00218273 -0.105615 -0.0670009, + 0.00258573 -0.105981 -0.0670009, 0.00290473 -0.10647 -0.0670009, 0.00294873 -0.107202 -0.0670009, + 0.00256973 -0.109888 -0.0670009, 0.00757973 -0.108789 -0.067001, 0.00507673 -0.109399 -0.067001, + 0.00556473 -0.105859 -0.067001, 0.00571773 -0.105371 -0.067001, 0.00602673 -0.105005 -0.067001, + 0.00645373 -0.104761 -0.067001, 0.00693373 -0.104761 -0.067001, 0.00738673 -0.105005 -0.067001, + 0.00773473 -0.105249 -0.067001, 0.00792973 -0.105737 -0.067001, 0.00795173 -0.106226 -0.067001, + 0.00424073 -0.10354 -0.0660009, 0.00699973 -0.101099 -0.066001, 0.00316873 -0.101953 -0.0660009, + 0.00363373 -0.102197 -0.0670009, 0.00398673 -0.102686 -0.0670009, 0.00397373 -0.102563 -0.0649979, + -0.00232727 -0.105615 -0.0660009, -0.00164527 -0.103784 -0.0670009, 0.00137573 -0.101831 -0.0670009, + 0.00973173 -0.102075 -0.066001, 0.0101997 -0.104517 -0.066001, 0.00920173 -0.101465 -0.067001, 0.00923473 -0.101465 -0.064998, + 0.00292273 -0.107202 -0.0660009, 0.00292473 -0.106592 -0.0670009, 0.00268473 -0.106104 -0.0670009, + 0.00225373 -0.105615 -0.0670009, 0.00109273 -0.105493 -0.0670009, 0.000562731 -0.105737 -0.0670009, + 1.37318e-005 -0.106836 -0.0660009, 0.00222573 -0.105737 -0.0649979, 0.00264173 -0.106104 -0.0649979, + 0.00287373 -0.106592 -0.0649979, 0.00559073 -0.105859 -0.066001, 0.00571673 -0.105371 -0.067001, + 0.00602573 -0.105005 -0.067001, 0.00645273 -0.104761 -0.067001, 0.00738773 -0.105005 -0.067001, + 0.00773573 -0.105249 -0.067001, 0.00793073 -0.105737 -0.067001, 0.00792573 -0.106226 -0.066001, 0.0116827 -0.093652 -0.067001, + 0.00166373 -0.09585 -0.0670009, 0.00230173 -0.0912111 -0.0670009, -0.000363272 -0.0918211 -0.0670009, + -0.00155227 -0.100366 -0.0670009, 0.0111337 -0.097681 -0.067001, 0.0125437 -0.087549 -0.067001, 0.0130707 -0.083887 -0.067001, + 0.000385727 -0.0865721 -0.0670009, -0.000143272 -0.090234 -0.0670009, 0.0158648 -0.101587 0.066998, + 0.0175818 -0.099146 0.066998, 0.0186998 -0.096338 0.066998, 0.0189818 -0.090479 0.066998, 0.0175358 -0.0873051 0.066998, + 0.0162598 -0.086084 0.066998, 0.0147048 -0.085229 0.066998, 0.0130338 -0.084741 0.066998, 0.0113148 -0.0848631 0.066998, + 0.00819776 -0.0862061 0.066998, 0.00405176 -0.089502 0.066998, 0.00315076 -0.08999 0.066998, 0.00213976 -0.090234 0.066998, + 0.00109476 -0.090234 0.066998, 0.000100759 -0.08999 0.066998, -0.000798242 -0.0892581 0.066998, + -0.00148324 -0.088403 0.066998, -0.00190824 -0.087427 0.066998, -0.00205224 -0.086328 0.066998, + -0.00192124 -0.0846191 0.066998, -0.00152824 -0.082788 0.066998, 7.75614e-006 -0.0796141 0.066998, + -0.00354024 -0.077539 0.066998, -0.00532324 -0.080835 0.066998, -0.00643324 -0.084497 0.066998, + -0.00654724 -0.087793 0.066998, -0.00558424 -0.090845 0.066998, -0.00375224 -0.093286 0.066998, + -0.00119524 -0.094995 0.066998, 0.00062476 -0.0954831 0.066998, 0.00251176 -0.0954831 0.066998, + 0.00432376 -0.0948731 0.066998, 0.00593076 -0.093896 0.066998, 0.0102418 -0.090479 0.066998, 0.0109068 -0.08999 0.066998, + 0.0116568 -0.0898681 0.066998, 0.0124358 -0.0898681 0.066998, 0.0131848 -0.08999 0.066998, 0.0138688 -0.090479 0.066998, + 0.0144088 -0.091089 0.066998, 0.0149218 -0.092554 0.066998, 0.0148118 -0.094629 0.066998, 0.0142298 -0.09646 0.066998, + 0.0117868 -0.0996341 0.066998, 0.0190088 -0.090479 0.065999, 0.0175798 -0.099146 0.066998, 0.0158718 -0.101587 0.065999, + 0.0130388 -0.084741 0.0649991, 0.00818176 -0.0862061 0.065999, 0.0113158 -0.0848631 0.066998, 0.0162578 -0.086084 0.066998, + 0.0175338 -0.0873051 0.066998, -0.00202624 -0.086328 0.065999, -0.000799242 -0.0892581 0.066998, 0.00315176 -0.08999 0.066998, + 0.00403576 -0.089502 0.065999, 4.57559e-005 -0.0796141 0.065999, -0.00354824 -0.077417 0.065999, + -0.00645924 -0.084497 0.065999, -0.00120524 -0.094995 0.065999, -0.00375124 -0.093286 0.066998, + 0.00594776 -0.0940191 0.065999, 0.00432276 -0.0948731 0.066998, 0.0116618 -0.0898681 0.0649991, + 0.0124268 -0.0898681 0.0649991, 0.0148958 -0.092554 0.065999, 0.0144098 -0.091089 0.066998, 0.0138708 -0.090479 0.066998, + 0.0124348 -0.0898681 0.066998, 0.0116558 -0.0898681 0.066998, 0.0109058 -0.08999 0.066998, 0.0102588 -0.090479 0.065999, + 0.0117368 -0.0996341 0.065999, 0.0108258 -0.099756 0.066998, 0.00842576 -0.0985351 0.066998, 0.00791876 -0.102075 0.066998, + -0.00114124 -0.097437 0.066998, -0.00170524 -0.101343 0.066998, 0.00732476 -0.106348 0.066998, 0.00690676 -0.109277 0.066998, + 0.00932876 -0.110498 0.066998, 0.0128018 -0.113306 0.066998, 0.0130058 -0.112695 0.066998, 0.0129398 -0.111963 0.066998, + 0.0126158 -0.111353 0.066998, 0.0120798 -0.110864 0.066998, 0.0114288 -0.11062 0.066998, 0.0107468 -0.110742 0.066998, + 0.0101398 -0.110986 0.066998, 0.00970576 -0.111597 0.066998, 0.00950076 -0.112207 0.066998, 0.00956776 -0.112939 0.066998, + 0.00989176 -0.11355 0.066998, 0.0104268 -0.114038 0.066998, 0.0110788 -0.114282 0.066998, 0.0117618 -0.11416 0.066998, + 0.0123668 -0.113916 0.066998, 0.0114358 -0.11062 0.0649991, 0.00968276 -0.111597 0.065999, 0.0107458 -0.110742 0.066998, + 0.0128248 -0.113428 0.065999, 0.00944976 -0.112207 0.0649991, 0.0110778 -0.114282 0.066998, 0.0115058 -0.121973 0.066998, + 0.0117618 -0.121484 0.066998, 0.0117798 -0.120752 0.066998, 0.0115218 -0.12002 0.066998, 0.0110148 -0.119531 0.066998, + 0.0103898 -0.119287 0.066998, 0.00970277 -0.119165 0.066998, 0.00908677 -0.119409 0.066998, 0.00861477 -0.119897 0.066998, + 0.00835877 -0.120508 0.066998, 0.00834077 -0.121118 0.066998, 0.00859777 -0.121851 0.066998, 0.00910677 -0.122461 0.066998, + 0.00972977 -0.122705 0.066998, 0.0104178 -0.122705 0.066998, 0.0110338 -0.122461 0.066998, 0.0115418 -0.12002 0.0649991, + 0.00905877 -0.119409 0.0649991, 0.00859377 -0.119897 0.065999, 0.0103888 -0.119287 0.066998, 0.0114968 -0.12002 0.066998, + 0.0117638 -0.12063 0.066998, 0.0117698 -0.121362 0.066998, 0.0115268 -0.122095 0.065999, 0.00973077 -0.122705 0.066998, + 0.00862277 -0.121851 0.066998, 0.00835676 -0.12124 0.066998, 0.00834977 -0.120508 0.066998, -0.00406024 -0.118188 0.066998, + 0.00809577 -0.119287 0.066998, 0.00891076 -0.113428 0.066998, -0.00207924 -0.104028 0.066998, -0.00262924 -0.107935 0.066998, + 8.57632e-005 -0.110254 0.066998, -0.000552236 -0.114771 0.066998, -0.00353224 -0.114404 0.066998, + 0.00596576 -0.115625 0.066998, 0.00185376 -0.115015 0.066998, 0.00224976 -0.112207 0.066998, 0.00660377 -0.133081 0.066998, + -0.000862232 -0.129053 0.066998, -0.00172523 -0.12832 0.066998, -0.00227523 -0.127466 0.066998, + -0.00245523 -0.126245 0.066998, -0.00222323 -0.125146 0.066998, -0.00200723 -0.12478 0.066998, -0.00168723 -0.124536 0.066998, + -0.00129523 -0.124292 0.066998, -0.000874234 -0.124292 0.066998, -0.000398234 -0.124414 0.066998, + 4.97665e-005 -0.124658 0.066998, 0.00722077 -0.128687 0.066998, 0.00781477 -0.124414 0.066998, 0.000491766 -0.12063 0.066998, + -0.000445235 -0.120264 0.066998, -0.00143423 -0.120264 0.066998, -0.00238023 -0.12063 0.066998, + -0.00319823 -0.121118 0.066998, -0.00434823 -0.123071 0.066998, -0.00503423 -0.125146 0.066998, + -0.00490823 -0.129541 0.066998, -0.00451123 -0.130518 0.066998, -0.00394023 -0.131372 0.066998, + -0.00234923 -0.132715 0.066998, 0.00603077 -0.137109 0.066998, -0.00236123 -0.132715 0.065999, -0.00393923 -0.131372 0.066998, + -0.00493323 -0.129541 0.065999, -0.00503323 -0.125146 0.066998, -0.00321823 -0.121118 0.065999, + -0.00143323 -0.120264 0.066998, -0.000444234 -0.120264 0.066998, 0.000503765 -0.12063 0.065999, + -0.000879234 -0.124414 0.065999, 3.67663e-005 -0.124658 0.065999, -0.00219823 -0.125146 0.065999, + -0.00200823 -0.12478 0.066998, -0.00168923 -0.124536 0.066998, -0.00129623 -0.124292 0.066998, + -0.000849233 -0.129053 0.065999, -0.00172623 -0.12832 0.066998, -0.00187123 -0.146875 0.066998, + -0.00155923 -0.147852 0.066998, -0.00111523 -0.148706 0.066998, 0.000136772 -0.150049 0.066998, + 0.000805772 -0.150415 0.066998, 0.00156477 -0.150537 0.066998, 0.00232677 -0.150415 0.066998, 0.00297777 -0.149927 0.066998, + 0.00338677 -0.149561 0.066998, 0.00371177 -0.14895 0.066998, 0.00407977 -0.147852 0.066998, 0.00518977 -0.139917 0.066998, + -0.00626223 -0.133813 0.066998, -0.00758323 -0.143213 0.066998, -0.00745123 -0.145166 0.066998, + -0.00653823 -0.146875 0.066998, -0.00510023 -0.147852 0.066998, -0.00334323 -0.148218 0.066998, + -0.00281723 -0.148096 0.066998, -0.00236623 -0.147852 0.066998, -0.00204023 -0.147363 0.066998, 0.00279977 -0.142847 0.066998, + 0.00242777 -0.145532 0.066998, 0.00227477 -0.146021 0.066998, 0.00196577 -0.146387 0.066998, 0.00153877 -0.146509 0.066998, + 0.00105777 -0.146631 0.066998, 0.000605772 -0.146387 0.066998, 0.000257771 -0.146143 0.066998, + 6.27714e-005 -0.145654 0.066998, 4.17712e-005 -0.145166 0.066998, 0.00053377 -0.141748 0.066998, + -0.00456123 -0.139062 0.066998, -0.00172623 -0.140527 0.066998, -0.00210523 -0.143213 0.066998, + -0.00229423 -0.143701 0.066998, -0.00267723 -0.144189 0.066998, -0.00320623 -0.144434 0.066998, + -0.00380323 -0.144556 0.066998, -0.00429423 -0.144312 0.066998, -0.00469823 -0.144067 0.066998, + -0.00502123 -0.143457 0.066998, -0.00506923 -0.142725 0.066998, 0.000119772 -0.150171 0.065999, + -0.00111423 -0.148706 0.066998, -0.00186623 -0.146997 0.065999, -0.00236723 -0.147852 0.066998, + -0.00281823 -0.148096 0.066998, -0.00334223 -0.14834 0.065999, -0.00509923 -0.147852 0.066998, -0.00760823 -0.143213 0.065999, + 0.00410577 -0.147852 0.065999, 0.00371077 -0.14895 0.066998, 0.00299577 -0.150049 0.065999, 0.00232577 -0.150415 0.066998, + 0.00240177 -0.145532 0.065999, 0.00196677 -0.146387 0.066998, 0.00153977 -0.146509 0.066998, 0.000604772 -0.146387 0.066998, + 0.000256771 -0.146143 0.066998, 6.17714e-005 -0.145654 0.066998, 6.7771e-005 -0.145166 0.065999, + 0.000112771 -0.145654 0.0649991, -0.00213123 -0.143213 0.065999, -0.00267623 -0.144189 0.066998, + -0.00320523 -0.144434 0.066998, -0.00436623 -0.144312 0.066998, -0.00479923 -0.143945 0.066998, + -0.00504223 -0.143335 0.066998, -0.00504323 -0.142725 0.065999, -0.00499123 -0.143335 0.0649991, + -0.00475623 -0.143823 0.0649991, -0.00433823 -0.144312 0.0649991, -0.00952123 -0.157007 0.066998, + -0.00712023 -0.15835 0.066998, -0.00648223 -0.153711 0.066998, 0.00256977 -0.158594 0.066998, 0.00311977 -0.154687 0.066998, + -0.00833223 -0.148584 0.066998, -0.0102692 -0.162378 0.066998, 0.00118278 -0.168481 0.066998, 0.00171078 -0.164697 0.066998, + -0.00974123 -0.158594 0.066998, -0.0361252 -0.287622 0.00718505, -0.0353202 -0.288049 0.00702505, + -0.0346722 -0.28866 0.00689705, -0.0340312 -0.287622 0.014096, -0.0332722 -0.288049 0.013779, -0.0326612 -0.28866 0.0135271, + -0.0306262 -0.287622 0.020462, -0.0299422 -0.288049 0.020009, -0.0293922 -0.28866 0.019639, -0.0260472 -0.287622 0.026047, + -0.0254632 -0.288049 0.025464, -0.0249962 -0.28866 0.024998, -0.0204642 -0.287622 0.030629, -0.0200062 -0.288049 0.029942, + -0.0196402 -0.28866 0.029393, -0.0140962 -0.287622 0.034031, -0.0137812 -0.288049 0.033268, -0.0135282 -0.28866 0.032658, + -0.0071862 -0.287622 0.036126, -0.0070252 -0.288049 0.035321, -0.0068962 -0.28866 0.034672, -2.02881e-007 -0.287622 0.036835, + -2.02973e-007 -0.288049 0.036011, -2.02984e-007 -0.28866 0.035351, 0.0071858 -0.287622 0.036126, 0.0070248 -0.288049 0.035321, + 0.0068958 -0.28866 0.034672, 0.0140958 -0.287622 0.034031, 0.0137808 -0.288049 0.033268, 0.0135278 -0.28866 0.032658, + 0.0204638 -0.287622 0.030629, 0.0200058 -0.288049 0.029942, 0.0196398 -0.28866 0.029393, 0.0260468 -0.287622 0.026047, + 0.0254628 -0.288049 0.025464, 0.0249958 -0.28866 0.024998, 0.0306258 -0.287622 0.020462, 0.0299418 -0.288049 0.020009, + 0.0293918 -0.28866 0.019639, 0.0340308 -0.287622 0.014096, 0.0332718 -0.288049 0.013779, 0.0326608 -0.28866 0.013527, + 0.0361248 -0.287622 0.00718503, 0.0353198 -0.288049 0.00702503, 0.0346718 -0.28866 0.00689703, -0.0484432 -0.28866 0.00963605, + -0.0477942 -0.288049 0.00950705, -0.0469892 -0.287622 0.00934605, -0.0456312 -0.28866 0.0189021, + -0.0450212 -0.288049 0.0186511, -0.0442622 -0.287622 0.0183341, -0.0410692 -0.28866 0.0274401, -0.0405202 -0.288049 0.027073, + -0.0398332 -0.287622 0.026616, -0.0349272 -0.28866 0.034924, -0.0344582 -0.288049 0.034459, -0.0338782 -0.287622 0.033875, + -0.0274412 -0.28866 0.041069, -0.0270752 -0.288049 0.04052, -0.0266172 -0.287622 0.039834, -0.0189022 -0.28866 0.045636, + -0.0186482 -0.288049 0.045025, -0.0183332 -0.287622 0.044262, -0.0096362 -0.28866 0.048443, -0.0095072 -0.288049 0.047795, + -0.0093472 -0.287622 0.046986, -1.9975e-007 -0.28866 0.049389, -2.00041e-007 -0.288049 0.048733, + -2.0033e-007 -0.287622 0.047909, 0.0096358 -0.28866 0.048443, 0.0095068 -0.288049 0.047795, 0.0093468 -0.287622 0.046986, + 0.0189018 -0.28866 0.045636, 0.0186478 -0.288049 0.045025, 0.0183328 -0.287622 0.044262, 0.0274408 -0.28866 0.041069, + 0.0270748 -0.288049 0.04052, 0.0266168 -0.287622 0.039834, 0.0349268 -0.28866 0.034924, 0.0344578 -0.288049 0.034459, + 0.0338778 -0.287622 0.033875, 0.0410688 -0.28866 0.02744, 0.0405198 -0.288049 0.027073, 0.0398328 -0.287622 0.026616, + 0.0456308 -0.28866 0.018902, 0.0450208 -0.288049 0.018651, 0.0442618 -0.287622 0.018334, 0.0484428 -0.28866 0.00963603, + 0.0477938 -0.288049 0.00950703, 0.0469888 -0.287622 0.00934603, 0.0508118 -0.173975 0.021046, 0.0457308 -0.173975 0.030556, + 0.0388908 -0.173975 0.038891, 0.0176178 -0.202417 0.054638, 0.00980278 -0.201196 0.058629, 0.00746278 -0.20083 0.059666, + 0.00598078 -0.200525 0.060048, 0.00496578 -0.200403 0.060086, 0.00153478 -0.199609 0.06007, -0.00698022 -0.197656 0.0595521, + -0.0152692 -0.195459 0.058384, -0.0255642 -0.191919 0.0559201, -0.0301482 -0.19021 0.0544171, -0.0310082 -0.189844 0.0540591, + -0.0328562 -0.189111 0.0530511, -0.0359192 -0.12002 0.0591401, -0.0310802 -0.120508 0.0615121, -0.0260602 -0.120996 0.0634661, + -0.0440412 -0.162744 0.0544481, 0.0590478 -0.178369 0.00384003, 0.0586778 -0.176172 0.00633903, 0.0578958 -0.17251 0.00913103, + 0.0564608 -0.167627 0.012003, 0.0546568 -0.1625 0.014142, 0.0529288 -0.158105 0.015461, -0.0286312 -0.059839 0.0580941, + -0.0246162 -0.061304 0.0600931, -0.0204792 -0.0627691 0.0617871, -0.0150382 -0.0647221 0.0634121, + 0.0258308 -0.079614 0.063359, 0.0256788 -0.079614 0.063435, 0.0255168 -0.079492 0.063481, 0.0462338 -0.087061 0.044102, + 0.0461688 -0.087061 0.044293, 0.0460698 -0.087061 0.044468, -0.0326842 -0.0583741 0.0556381, -0.0328253 -0.058252 0.0554391, + -0.0329173 -0.058252 0.0552111, 0.0361248 -0.287622 -0.00718597, 0.0353198 -0.288049 -0.00702497, + 0.0346718 -0.28866 -0.00689697, 0.0340308 -0.287622 -0.014096, 0.0332718 -0.288049 -0.013781, 0.0326608 -0.28866 -0.013528, + 0.0306258 -0.287622 -0.020464, 0.0299418 -0.288049 -0.020007, 0.0293918 -0.28866 -0.01964, 0.0260468 -0.287622 -0.026046, + 0.0254628 -0.288049 -0.025464, 0.0249958 -0.28866 -0.024997, 0.0204638 -0.287622 -0.030627, 0.0200058 -0.288049 -0.029942, + 0.0196398 -0.28866 -0.029393, 0.0140958 -0.287622 -0.03403, 0.0137808 -0.288049 -0.03327, 0.0135278 -0.28866 -0.03266, + 0.00718578 -0.287622 -0.036127, 0.00702478 -0.288049 -0.03532, 0.00689578 -0.28866 -0.034671, + -2.19855e-007 -0.287622 -0.036834, -2.19567e-007 -0.288049 -0.036011, -2.19274e-007 -0.28866 -0.03535, + -0.00718622 -0.287622 -0.036127, -0.00702522 -0.288049 -0.03532, -0.00689622 -0.28866 -0.034671, + -0.0140962 -0.287622 -0.03403, -0.0137812 -0.288049 -0.03327, -0.0135282 -0.28866 -0.03266, -0.0204642 -0.287622 -0.030627, + -0.0200062 -0.288049 -0.029942, -0.0196402 -0.28866 -0.029393, -0.0260472 -0.287622 -0.026046, -0.0254632 -0.288049 -0.025464, + -0.0249962 -0.28866 -0.024997, -0.0306262 -0.287622 -0.020464, -0.0299422 -0.288049 -0.020007, -0.0293922 -0.28866 -0.01964, + -0.0340312 -0.287622 -0.014096, -0.0332722 -0.288049 -0.013781, -0.0326612 -0.28866 -0.013528, + -0.0361252 -0.287622 -0.00718595, -0.0353202 -0.288049 -0.00702495, -0.0346722 -0.28866 -0.00689695, + 0.0484428 -0.28866 -0.00963597, 0.0477938 -0.288049 -0.00950797, 0.0469888 -0.287622 -0.00934697, + 0.0456308 -0.28866 -0.018902, 0.0450208 -0.288049 -0.018649, 0.0442618 -0.287622 -0.018334, 0.0410688 -0.28866 -0.027441, + 0.0405198 -0.288049 -0.027074, 0.0398328 -0.287622 -0.026617, 0.0349268 -0.28866 -0.034925, 0.0344578 -0.288049 -0.034459, + 0.0338778 -0.287622 -0.033877, 0.0274408 -0.28866 -0.041069, 0.0270748 -0.288049 -0.040519, 0.0266168 -0.287622 -0.039835, + 0.0189018 -0.28866 -0.045633, 0.0186478 -0.288049 -0.045023, 0.0183328 -0.287622 -0.044261, 0.00963578 -0.28866 -0.048444, + 0.00950678 -0.288049 -0.047796, 0.00934678 -0.287622 -0.046989, -2.22509e-007 -0.28866 -0.049392, + -2.22498e-007 -0.288049 -0.048732, -2.22406e-007 -0.287622 -0.047908, -0.00963622 -0.28866 -0.048444, + -0.00950722 -0.288049 -0.047796, -0.00934722 -0.287622 -0.046989, -0.0189022 -0.28866 -0.045633, + -0.0186482 -0.288049 -0.045023, -0.0183332 -0.287622 -0.044261, -0.0274412 -0.28866 -0.041069, -0.0270752 -0.288049 -0.040519, + -0.0266172 -0.287622 -0.039835, -0.0349272 -0.28866 -0.034925, -0.0344582 -0.288049 -0.034459, -0.0338782 -0.287622 -0.033877, + -0.0410692 -0.28866 -0.0274409, -0.0405202 -0.288049 -0.0270739, -0.0398332 -0.287622 -0.0266169, + -0.0456312 -0.28866 -0.0189019, -0.0450212 -0.288049 -0.0186489, -0.0442622 -0.287622 -0.0183339, + -0.0484432 -0.28866 -0.00963595, -0.0477942 -0.288049 -0.00950795, -0.0469892 -0.287622 -0.00934695, + 0.0508118 -0.173975 -0.021048, 0.0457308 -0.173975 -0.030556, 0.0388908 -0.173975 -0.03889, 0.0176178 -0.202417 -0.054637, + 0.00980275 -0.201196 -0.058624, 0.00746275 -0.20083 -0.059669, 0.00598075 -0.200525 -0.060047, 0.00496575 -0.200403 -0.060089, + 0.00153475 -0.199609 -0.06007, -0.00698025 -0.197656 -0.0595549, -0.0152692 -0.195459 -0.058383, + -0.0255642 -0.191919 -0.0559189, -0.0301482 -0.19021 -0.0544159, -0.0310082 -0.189844 -0.0540609, + -0.0328562 -0.189111 -0.0530539, -0.0359193 -0.12002 -0.0591389, -0.0310803 -0.120508 -0.0615119, + -0.0260603 -0.120996 -0.0634679, -0.0415343 -0.16958 -0.0580779, -0.0441933 -0.163721 -0.0533289, + 0.0591998 -0.179224 -0.00159597, 0.0591388 -0.178979 -0.00269997, 0.0590478 -0.178369 -0.00384097, + 0.0586778 -0.176172 -0.00633897, 0.0564608 -0.167627 -0.012003, 0.0529288 -0.158105 -0.015463, + -0.0286313 -0.059839 -0.0580939, -0.0246163 -0.061304 -0.0600919, -0.0204793 -0.0627691 -0.0617819, + -0.0150383 -0.0647221 -0.0634149, 0.0258307 -0.079614 -0.063358, 0.0256787 -0.079614 -0.063434, 0.0255167 -0.079492 -0.063484, + 0.0462337 -0.087061 -0.044101, 0.0461687 -0.087061 -0.044296, 0.0460697 -0.087061 -0.044471, -0.0326843 -0.0583741 -0.0556369, + -0.0328253 -0.058252 -0.0554419, -0.0329173 -0.058252 -0.0552099, 0.00877974 -0.152124 -0.066001, + 0.0100797 -0.157861 -0.066001, 0.00643675 -0.166406 -0.066001, 0.00486375 -0.167261 -0.066001, 0.00312575 -0.167627 -0.066001, + 0.00140275 -0.167505 -0.066001, -0.000242254 -0.167017 -0.066001, -0.00666526 -0.159814 -0.0660009, + -0.00755826 -0.159204 -0.0660009, -0.00856426 -0.15896 -0.0660009, -0.00960226 -0.15896 -0.0660009, + -0.0106323 -0.159326 -0.0660009, -0.0115193 -0.160059 -0.0660009, -0.0122023 -0.160791 -0.0660009, + -0.0131003 -0.165308 -0.0660009, -0.0125053 -0.168848 -0.0660009, -0.0165543 -0.169946 -0.0660009, + -0.0166243 -0.159204 -0.0660009, -0.0148393 -0.156519 -0.0660009, -0.0123923 -0.154687 -0.0660009, + -0.00756726 -0.153711 -0.0660009, -0.00575226 -0.154321 -0.0660009, -0.00415126 -0.155298 -0.066001, + 0.000823744 -0.16189 -0.066001, 0.00147874 -0.162256 -0.066001, 0.00222074 -0.1625 -0.066001, 0.00299274 -0.1625 -0.066001, + 0.00376574 -0.162256 -0.066001, 0.00444574 -0.161768 -0.066001, 0.00575474 -0.156641 -0.066001, + 0.00426674 -0.152979 -0.066001, 0.00909774 -0.140649 -0.066001, 0.00883574 -0.141382 -0.066001, 0.00834474 -0.14187 -0.066001, + 0.00769174 -0.142114 -0.066001, 0.00699674 -0.142236 -0.066001, 0.00634574 -0.141992 -0.066001, + 0.00584374 -0.141504 -0.066001, 0.00555774 -0.140161 -0.066001, 0.00581974 -0.139429 -0.066001, 0.00631174 -0.13894 -0.066001, + 0.00696374 -0.138574 -0.066001, 0.00765874 -0.138574 -0.066001, 0.00830974 -0.138818 -0.066001, + 0.00881274 -0.139307 -0.066001, 0.0103067 -0.131982 -0.066001, 0.0101037 -0.132715 -0.066001, 0.00966374 -0.133203 -0.066001, + 0.00904874 -0.133569 -0.066001, 0.00835874 -0.133691 -0.066001, 0.00767974 -0.133569 -0.066001, + 0.00714474 -0.133081 -0.066001, 0.00672774 -0.131982 -0.066001, 0.00680374 -0.131494 -0.066001, + 0.00702874 -0.131006 -0.066001, 0.00737974 -0.13064 -0.066001, 0.00816174 -0.130151 -0.066001, 0.00868474 -0.130151 -0.066001, + 0.00920074 -0.130273 -0.066001, 0.00965074 -0.130518 -0.066001, 0.0100027 -0.130762 -0.066001, + -0.000571264 -0.125635 -0.0660009, -0.00200826 -0.124902 -0.0660009, -0.00178126 -0.125269 -0.0660009, + -0.00145326 -0.125513 -0.0660009, -0.000750265 -0.121606 -0.0660009, -0.00153926 -0.122339 -0.0660009, + -0.00202326 -0.123315 -0.0660009, -0.00286127 -0.118677 -0.0660009, -0.00207027 -0.117944 -0.0660009, + -0.00116127 -0.117456 -0.0660009, -0.00420226 -0.128076 -0.0660009, -0.00485726 -0.123682 -0.0660009, + -0.00351127 -0.119409 -0.0660009, -0.00420026 -0.128076 -0.0660009, -0.00356226 -0.128931 -0.0660009, + -0.00272526 -0.129419 -0.0660009, -0.00176326 -0.129663 -0.0660009, 0.00473273 -0.10293 -0.066001, + 0.00539473 -0.102197 -0.066001, 0.00615673 -0.101587 -0.066001, 0.00364973 -0.102197 -0.0660009, + 0.00400873 -0.102563 -0.0660009, 0.00420873 -0.103174 -0.0660009, -0.00166827 -0.103784 -0.0660009, + -0.000316269 -0.102441 -0.0660009, 0.00137173 -0.101831 -0.0660009, 0.00999873 -0.102563 -0.066001, + 0.0101677 -0.103174 -0.066001, 0.0102337 -0.103784 -0.066001, 0.00775573 -0.100977 -0.066001, 0.00852673 -0.101099 -0.066001, + 0.00921873 -0.101465 -0.066001, 0.00289973 -0.106592 -0.0660009, 0.00266373 -0.106104 -0.0660009, + 0.00223973 -0.105615 -0.0660009, 0.00168773 -0.105493 -0.0660009, 0.00110073 -0.105493 -0.0660009, + 0.000578732 -0.105737 -0.0660009, 0.000201732 -0.106226 -0.0660009, 0.00790473 -0.105737 -0.066001, + 0.00771473 -0.105249 -0.066001, 0.00737373 -0.105005 -0.066001, 0.00693073 -0.104761 -0.066001, + 0.00645973 -0.104883 -0.066001, 0.00604173 -0.105005 -0.066001, 0.00574073 -0.105371 -0.066001, 0.0158848 -0.101587 0.065999, + 0.0187238 -0.09646 0.065999, 0.0175548 -0.0873051 0.065999, 0.0162728 -0.0859621 0.065999, 0.0147138 -0.085107 0.065999, + 0.0130358 -0.084741 0.065999, 0.0113118 -0.084741 0.065999, 0.00314176 -0.08999 0.065999, 0.00213676 -0.090234 0.065999, + 0.00109876 -0.090234 0.065999, 0.000112758 -0.0898681 0.065999, -0.000781242 -0.0892581 0.065999, + -0.00146124 -0.088403 0.065999, -0.00188324 -0.087427 0.065999, -0.00150324 -0.0829101 0.065999, + 2.97559e-005 -0.0796141 0.065999, -0.00356224 -0.077539 0.065999, -0.00657324 -0.087793 0.065999, + -0.00560724 -0.090845 0.065999, -0.00376924 -0.093286 0.065999, 0.00062176 -0.0954831 0.065999, + 0.00251576 -0.0954831 0.065999, 0.00433376 -0.094995 0.065999, 0.0109168 -0.08999 0.065999, 0.0116588 -0.0898681 0.065999, + 0.0124308 -0.0898681 0.065999, 0.0131738 -0.08999 0.065999, 0.0138538 -0.090479 0.065999, 0.0143878 -0.091089 0.065999, + 0.0142058 -0.09646 0.065999, 0.0117708 -0.099512 0.065999, 0.0130318 -0.112695 0.065999, 0.0129648 -0.111963 0.065999, + 0.0126368 -0.111353 0.065999, 0.0120928 -0.110864 0.065999, 0.0114318 -0.11062 0.065999, 0.0107388 -0.110742 0.065999, + 0.0101238 -0.110986 0.065999, 0.00947576 -0.112207 0.065999, 0.00954176 -0.112939 0.065999, 0.00987076 -0.11355 0.065999, + 0.0104148 -0.114038 0.065999, 0.0110758 -0.114282 0.065999, 0.0117678 -0.114282 0.065999, 0.0123838 -0.113916 0.065999, + 0.0117958 -0.121362 0.065999, 0.0117888 -0.12063 0.065999, 0.0115188 -0.12002 0.065999, 0.0110298 -0.119531 0.065999, + 0.0103958 -0.119165 0.065999, 0.00969777 -0.119165 0.065999, 0.00907177 -0.119409 0.065999, 0.00836677 -0.120386 0.065999, + 0.00829277 -0.120874 0.065999, 0.00837477 -0.121362 0.065999, 0.00860076 -0.121851 0.065999, 0.00923777 -0.122461 0.065999, + 0.00972477 -0.122705 0.065999, 0.0102478 -0.122827 0.065999, 0.0107478 -0.122705 0.065999, 0.0111858 -0.122461 0.065999, + -0.00453423 -0.130518 0.065999, -0.00396023 -0.131372 0.065999, -0.00322723 -0.132227 0.065999, + -0.00321923 -0.121118 0.065999, -0.00505923 -0.125146 0.065999, -0.000440235 -0.120264 0.065999, + -0.00143723 -0.120264 0.065999, -0.00239123 -0.120508 0.065999, -0.00321623 -0.121118 0.065999, + -0.000407234 -0.124536 0.065999, -0.00129123 -0.124414 0.065999, -0.00167523 -0.124536 0.065999, + -0.00198823 -0.12478 0.065999, -0.00242823 -0.126245 0.065999, -0.00225123 -0.127344 0.065999, -0.00170623 -0.12832 0.065999, + -0.00158323 -0.147852 0.065999, -0.00113723 -0.148706 0.065999, -0.000565228 -0.149438 0.065999, + -0.00280823 -0.148218 0.065999, -0.00234923 -0.147852 0.065999, -0.00201723 -0.147485 0.065999, + -0.00747623 -0.145166 0.065999, -0.00655723 -0.146875 0.065999, -0.00511023 -0.147974 0.065999, 0.00340777 -0.149561 0.065999, + 0.00373477 -0.14895 0.065999, 0.00396877 -0.148462 0.065999, 0.000796772 -0.150537 0.065999, 0.00156577 -0.150659 0.065999, + 0.00233677 -0.150415 0.065999, 0.00225277 -0.145898 0.065999, 0.00195077 -0.146265 0.065999, 0.00153277 -0.146509 0.065999, + 0.00106177 -0.146631 0.065999, 0.000618771 -0.146387 0.065999, 0.000277771 -0.146021 0.065999, + 8.77711e-005 -0.145654 0.065999, -0.00501623 -0.143335 0.065999, -0.00477823 -0.143945 0.065999, + -0.00435223 -0.144312 0.065999, -0.00379923 -0.144556 0.065999, -0.00321223 -0.144434 0.065999, + -0.00269223 -0.144189 0.065999, -0.00231623 -0.143701 0.065999, -0.0500222 -0.170557 0.0227551, + -0.0504882 -0.173975 0.0217331, -0.0408362 -0.117212 0.0363581, -0.0428162 -0.135522 0.0341381, + -0.0461012 -0.165674 0.0298961, -0.0454482 -0.159692 0.0309071, -0.0352592 -0.197656 0.0417331, + -0.0376782 -0.197046 0.0396921, -0.0196742 -0.201807 0.051205, -0.0119912 -0.203455 0.053524, 0.00615478 -0.206995 0.054303, + 0.00923278 -0.207422 0.053952, 0.0181828 -0.208826 0.051533, 0.0211198 -0.209192 0.050496, 0.0101268 -0.105127 0.0649991, + 0.00334776 -0.0996341 0.0649991, 0.00201076 -0.118799 0.0649991, -0.00105524 -0.118433 0.0649991, + 0.00342476 -0.108667 0.0649991, 0.00619576 -0.111108 0.0649991, 0.00419377 -0.122461 0.0649991, + -0.000528231 -0.136865 0.0649991, -0.00259823 -0.151514 0.0649991, -0.00548623 -0.150049 0.0649991, + -0.00191423 -0.156274 0.0649991, -0.00400723 -0.161523 0.0649991, -0.00689523 -0.160059 0.0649991, + -0.0377692 -0.174463 0.0610171, -0.0408822 -0.16958 0.0592471, -0.0415232 -0.168359 0.0588351, 0.0503808 -0.136621 0.011015, + -0.0338253 -0.0589841 0.0335891, -0.0335623 -0.059106 0.0442781, 0.0465047 -0.088281 0.02195, 0.0462108 -0.088159 0.032925, + 0.0465047 -0.088281 -0.021949, 0.0462107 -0.088159 -0.032923, -0.0338253 -0.058984 -0.0335869, + -0.0335623 -0.059106 -0.0442769, -0.0343443 -0.05874 -0.0495959, -0.0343443 -0.05874 0.0495951, 0.0181828 -0.208826 -0.051532, + 0.0211198 -0.209192 -0.050497, 0.00615476 -0.206995 -0.054302, 0.00923276 -0.207422 -0.053955, -0.0119912 -0.203455 -0.053527, + -0.0196742 -0.201807 -0.051204, -0.0352592 -0.197656 -0.0417339, -0.0376782 -0.197046 -0.0396929, + -0.0461012 -0.165674 -0.0298969, -0.0454483 -0.159692 -0.0309049, -0.0408363 -0.117212 -0.0363569, + -0.0428163 -0.135522 -0.0341359, -0.0357023 -0.0697271 -0.0418109, -0.0500222 -0.170557 -0.0227539, + -0.0504882 -0.173975 -0.0217329, 0.00422974 -0.147119 -0.064998, -0.00320526 -0.146265 -0.064998, + -0.00379926 -0.150537 -0.064998, 0.000173738 -0.13186 -0.064998, -0.00284626 -0.13125 -0.0649979, + -0.00124026 -0.14187 -0.064998, -0.00455526 -0.143335 -0.0649979, 0.00207474 -0.140405 -0.064998, + 0.00330674 -0.128809 -0.064998, 0.00394574 -0.124536 -0.064998, 0.00271273 -0.113794 -0.064998, + 0.00673573 -0.094629 -0.064998, 0.00478273 -0.099023 -0.0649979, 0.00158373 -0.099756 -0.0649979, + 0.00798073 -0.098291 -0.064998, 0.00619173 -0.0890141 -0.0649979, 0.00299373 -0.089624 -0.0649979, + -0.0377693 -0.174463 -0.0610119, -0.0368503 -0.175562 -0.0614849, 0.0503808 -0.136621 -0.011015, + -2.12087e-007 -0.339502 -0.055, 0.0107298 -0.339502 -0.053943, 0.0210478 -0.339502 -0.050813, 0.0305558 -0.339502 -0.04573, + 0.0388908 -0.339502 -0.03889, 0.0457308 -0.339502 -0.030556, 0.0508118 -0.339502 -0.021048, 0.0539438 -0.339502 -0.01073, + 0.0549998 -0.339502 2.63558e-008, 0.0539438 -0.339502 0.010729, 0.0508118 -0.339502 0.021046, 0.0457308 -0.339502 0.030556, + 0.0388908 -0.339502 0.038891, 0.0305558 -0.339502 0.045727, 0.0210478 -0.339502 0.050816, 0.0107298 -0.339502 0.053944, + -1.86743e-007 -0.339502 0.054997, -0.0107302 -0.339502 0.053944, -0.0210482 -0.339502 0.050816, -0.0305562 -0.339502 0.045727, + -0.0388912 -0.339502 0.038891, -0.0457312 -0.339502 0.0305561, -0.0508122 -0.339502 0.0210461, -0.0539442 -0.339502 0.0107291, + -0.0550002 -0.339502 5.17003e-008, -0.0539442 -0.339502 -0.0107299, -0.0508122 -0.339502 -0.0210479, + -0.0457312 -0.339502 -0.030556, -0.0388912 -0.339502 -0.03889, -0.0305562 -0.339502 -0.04573, -0.0210482 -0.339502 -0.050813, + -0.0107302 -0.339502 -0.053943, -2.17853e-007 -0.314478 -0.055, -1.92509e-007 -0.314478 0.054997, + 0.0107298 -0.314478 -0.053943, 0.0210478 -0.314478 -0.050813, 0.0305558 -0.314478 -0.04573, 0.0388908 -0.314478 -0.03889, + 0.0457308 -0.314478 -0.030556, 0.0508118 -0.314478 -0.021048, 0.0539438 -0.314478 -0.01073, 0.0549998 -0.314478 2.74587e-008, + 0.0539438 -0.314478 0.010729, 0.0508118 -0.314478 0.021046, 0.0457308 -0.314478 0.030556, 0.0388908 -0.314478 0.038891, + 0.0305558 -0.314478 0.045727, 0.0210478 -0.314478 0.050816, 0.0107298 -0.314478 0.053944, -0.0107302 -0.314478 0.053944, + -0.0210482 -0.314478 0.050816, -0.0305562 -0.314478 0.0457271, -0.0388912 -0.314478 0.038891, -0.0457312 -0.314478 0.0305561, + -0.0508122 -0.314478 0.0210461, -0.0539442 -0.314478 0.0107291, -0.0550002 -0.314478 5.28032e-008, + -0.0539442 -0.314478 -0.0107299, -0.0508122 -0.314478 -0.0210479, -0.0457312 -0.314478 -0.0305559, + -0.0388912 -0.314478 -0.03889, -0.0305562 -0.314478 -0.04573, -0.0210482 -0.314478 -0.050813, -0.0107302 -0.314478 -0.053943] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 2417 + -0.245185 -0.969476 1.72899e-006, -0.0667341 -0.997771 4.62288e-007, -0.0653609 -0.997777 0.0130013, + -0.329837 -0.942362 0.0562248, -0.258938 -0.960692 0.100111, -0.0616597 -0.99777 0.0255388, -0.0565927 -0.997777 0.0351808, + -0.575077 -0.818099 1.48437e-006, -0.560369 -0.817877 0.130631, -0.507189 -0.833279 0.220013, -0.269183 -0.94571 0.182133, + -0.716788 -0.624248 0.310692, -0.781132 -0.603796 0.158943, -0.0471504 -0.997775 0.0471422, -0.0352309 -0.997771 0.0566781, + -0.162481 -0.953725 0.253, -0.0281747 -0.996793 0.0749049, -0.00930688 -0.998364 0.0564079, -0.0549215 -0.963373 0.262481, + 1.70353e-008 -0.997771 0.0667338, -0.00656716 -0.960738 0.277378, -0.110128 -0.953617 0.280154, -0.503387 -0.80252 0.320254, + -0.229456 -0.942663 0.242357, -0.419643 -0.818224 0.392951, -0.231889 -0.807332 0.542626, -0.104868 -0.843338 0.527052, + -0.33483 -0.818281 0.467232, 0.00930692 -0.998364 0.0564079, -0.833438 -0.454992 0.31363, -0.636746 -0.631912 0.441862, + -0.740688 -0.454378 0.494896, -0.567634 -0.582979 0.581316, -0.831816 -0.555052 2.19809e-007, + -0.891053 -0.453899 2.39335e-007, -0.879149 -0.453913 0.145121, -0.419236 -0.63167 0.652099, -0.329696 -0.574263 0.749348, + -0.165066 -0.623575 0.764138, -0.494864 -0.454273 0.740774, -0.629902 -0.454377 0.629894, -0.31413 -0.452879 0.8344, + -0.145085 -0.453806 0.87921, 1.66752e-007 -0.555026 0.831833, 0.00656674 -0.807073 0.590415, 0.0652456 -0.94576 0.318248, + 0.0281747 -0.996793 0.0749049, 0.0352308 -0.997771 0.056678, 0.104724 -0.963598 0.245991, 0.162481 -0.953725 0.253, + 0.222709 -0.829274 0.512547, 0.129729 -0.802335 0.582605, 0.159059 -0.603513 0.781327, 0.33483 -0.818281 0.467232, + 0.229457 -0.942663 0.242357, 0.419236 -0.63167 0.652099, 0.308511 -0.603351 0.735383, 0.0471503 -0.997775 0.0471422, + 0.0565926 -0.997777 0.0351807, 0.269183 -0.94571 0.182133, 0.0749203 -0.996791 0.028185, 0.0563594 -0.998367 0.00930241, + 0.296687 -0.953478 0.0534555, 0.0667341 -0.997771 4.28684e-007, 0.245185 -0.969476 1.60374e-006, 0.280596 -0.953469 0.110283, + 0.397289 -0.833334 0.384339, 0.488542 -0.802429 0.342688, 0.523718 -0.81815 0.237383, 0.560369 -0.817877 0.13063, + 0.575077 -0.818099 1.18034e-006, 0.543562 -0.623827 0.561587, 0.145086 -0.453804 0.879211, 0.494864 -0.454273 0.740773, + 0.314131 -0.452878 0.8344, 0 -0.453896 0.891055, 0.650431 -0.453973 0.608973, 0.680525 -0.583622 0.443026, + 0.720905 -0.632183 0.283973, 0.781132 -0.603796 0.158943, 0.822738 -0.454854 0.340897, 0.740969 -0.453802 0.495004, + 0.879149 -0.453913 0.145121, 0.831816 -0.555052 -2.29915e-007, 0.891053 -0.453899 -2.50554e-007, + -0.061633 -0.997772 -0.0255389, -0.0584625 -0.996788 -0.0547381, -0.0443947 -0.998573 -0.029668, + -0.0789699 -0.996792 -0.0130266, -0.0444777 -0.99901 9.48752e-009, 0.0653557 -0.997777 -0.0129999, + -0.0201319 -0.998364 -0.0535208, -0.0423413 -0.997092 -0.0633669, -0.0130258 -0.996796 -0.0789143, + -9.17644e-009 -0.99901 -0.0444775, -0.0789588 -0.996793 0.0130245, -0.0616081 -0.997774 0.0255273, + 0.0616327 -0.997772 -0.0255316, 0.0566513 -0.997773 -0.0352179, 0.0471341 -0.997776 -0.0471327, -0.05422 -0.997773 0.0388525, + -0.047085 -0.997781 0.0470818, -0.0423142 -0.997094 0.0633452, -0.0201436 -0.998364 0.0535179, 0.0281798 -0.996792 -0.0749046, + 0.035222 -0.997772 -0.0566593, 9.17645e-009 -0.99901 0.0444777, -1.70352e-008 -0.997781 -0.0665893, + 0.00931601 -0.998362 -0.0564479, -0.013014 -0.996796 0.0789147, -0.00931604 -0.998362 -0.0564479, + 0.0130258 -0.996796 -0.0789143, 0.0201318 -0.998364 -0.0535208, 0.0423412 -0.997092 -0.0633669, + 0.0542645 -0.997769 -0.0388895, 0.0471547 -0.997774 -0.0471568, 0.061633 -0.997772 -0.025539, 0.0789699 -0.996792 -0.0130266, + 0.0444777 -0.99901 -8.39879e-009, 0.0201436 -0.998364 0.0535179, -0.035222 -0.997772 -0.0566593, + -0.0281799 -0.996792 -0.0749047, 0.0583937 -0.996796 0.0546651, -0.0471341 -0.997776 -0.0471326, + 0.0423142 -0.997094 0.0633451, 0.013014 -0.996796 0.0789147, 0.0443689 -0.998575 0.0296485, -0.0566513 -0.997773 -0.0352179, + -0.0563595 -0.998367 -0.00930191, 0.0789588 -0.996793 0.0130244, 0.0616081 -0.997774 0.0255272, + -0.0748983 -0.996793 -0.0281802, 0.831822 -0.555042 -2.35981e-006, 0.891053 -0.453899 -4.64836e-006, + 0.873545 -0.45468 -0.173738, 0.762793 -0.63175 -0.137981, 0.753777 -0.583789 -0.301681, 0.821903 -0.456757 -0.340366, + 0.756 -0.455516 -0.470073, 0.590406 -0.80708 -0.00655227, 0.560204 -0.817973 -0.130738, 0.546397 -0.802144 -0.240864, + 0.642756 -0.623749 -0.444749, 0.329 -0.934448 -0.136255, 0.296699 -0.953472 -0.0534864, 0.629891 -0.454445 -0.629854, + 0.470693 -0.452908 -0.757181, 0.445912 -0.60379 -0.660757, 0.314249 -0.450951 -0.835398, 0.145015 -0.456643 -0.877752, + 0.177051 -0.57414 -0.799385, -3.32825e-007 -0.460485 -0.887668, 0.00972084 -0.584177 -0.811568, 0.308534 -0.60252 -0.736055, + 0.464313 -0.833584 -0.299251, 0.538711 -0.631333 -0.557861, 0.419714 -0.818166 -0.392994, 0.222553 -0.829546 -0.512176, + 0.119074 -0.791538 -0.599407, 0.335017 -0.818155 -0.467317, -0.145016 -0.456643 -0.877751, 0.27738 -0.960738 0.00660214, + 0.247197 -0.953624 -0.171742, 0.191432 -0.960775 -0.200663, 0.177737 -0.942655 -0.282508, 0.104759 -0.963591 -0.246005, + 0.0651226 -0.945938 -0.317743, -4.72058e-008 -0.969475 -0.24519, -0.00960134 -0.828797 -0.559467, + -0.164932 -0.62298 -0.764653, -0.314249 -0.450951 -0.835398, -0.470693 -0.452908 -0.757181, -0.329798 -0.573339 -0.75001, + -0.445912 -0.603791 -0.660756, -0.23176 -0.807411 -0.542563, -0.11662 -0.833742 -0.539698, -0.0533571 -0.95367 -0.296085, + -0.335017 -0.818155 -0.467317, -0.53871 -0.631335 -0.55786, -0.177737 -0.942656 -0.282507, -0.110018 -0.953699 -0.279917, + -0.629891 -0.454447 -0.629853, -0.756 -0.455518 -0.470072, -0.642756 -0.62375 -0.444748, -0.833153 -0.455644 -0.31344, + -0.879216 -0.453804 -0.145057, -0.780869 -0.604139 -0.158935, -0.891053 -0.453899 -4.30431e-006, + -0.831822 -0.555042 -2.0402e-006, -0.734659 -0.604441 -0.308103, -0.431478 -0.802358 -0.41237, -0.454158 -0.833585 -0.314447, + -0.523928 -0.818011 -0.237396, -0.54646 -0.829048 -0.118578, -0.590406 -0.80708 0.00654973, -0.228187 -0.945856 -0.230839, + -0.234099 -0.960802 -0.148514, -0.312603 -0.942333 -0.119529, -0.262506 -0.963366 -0.0549264, -0.27738 -0.960738 -0.00660499, + 0.934091 0.0120471 0.356833, 0.996238 0.034025 0.079695, 0.90901 0.00392567 0.416757, 0.91279 -0.000706072 0.408428, + 0.924915 -0.000213988 0.380173, 0.953341 -0.00111746 0.301894, 0.919255 -0.000747827 0.393662, 0.861663 -0.000537065 0.50748, + 0.939108 -0.0436166 0.340842, 0.777654 0.000969701 0.628692, 0.667559 0.000594709 0.744557, 0.720843 0.0012562 0.693097, + 0.713383 -0.000688768 0.700774, 0.824038 -0.000484052 0.566534, 0.557405 -0.00105135 0.83024, 0.55913 -5.18801e-005 0.82908, + -0.695734 0.00504622 0.718281, -0.633604 -0.00303601 0.773652, -0.669552 -0.00360604 0.742756, -0.657047 -0.0204317 0.753573, + -0.709566 -0.00932548 0.704578, -0.627375 -0.00398309 0.778707, -0.734264 -0.00771022 0.67882, + -0.820324 -0.000569244 0.571899, -0.803342 0.00210929 0.595514, -0.834624 -0.00160653 0.550817, -0.939901 0.02963 0.340159, + -0.885892 0.00106773 0.46389, -0.83462 -0.0016843 0.550823, -0.839382 -0.00110116 0.54354, -0.876345 -0.000803022 0.481684, + -0.847034 -0.000196081 0.531539, -0.887521 -0.124033 0.44376, -0.799546 -0.198528 0.566844, -0.699549 0.000328419 0.714585, + -0.638914 -0.370918 0.67395, -0.446872 0.00619135 0.894577, -0.793195 -0.00092642 0.608967, -0.927388 -2.56679e-005 0.3741, + -0.91615 -0.000935809 0.400834, -0.95543 -0.00122099 0.295214, 0.9836 -0.0025775 0.180346, 0.990573 -0.00195887 0.136976, + 0.995331 -0.00462979 0.0964087, 0.999887 -0.000159421 0.0150518, 0.999818 0.0190884 9.08918e-006, 1 1.8867e-007 4.19277e-006, + 0.997945 -0.00285192 0.0640178, 0.999997 -0.00225388 -3.29259e-006, 0.11249 0.00195454 0.993651, + 0.223537 -0.000314828 0.974695, 0.190126 0.000850814 0.981759, 0.358244 0.00148537 0.933627, 0.318811 0.000898388 0.947818, + 0.333493 0.00345699 0.942746, 0.980104 2.48127e-005 0.198487, 0.998963 -0.0014206 0.0455067, 0.999454 -0.000791826 0.0330367, + -0.289195 9.98248e-007 0.95727, -0.37066 -0.00057317 0.928768, -0.358452 0.00147489 0.933547, 0.413136 -0.0329958 0.910071, + -0.644863 0.00183847 0.764296, -0.641462 0.00104516 0.767154, -0.563257 -0.000267501 0.826281, + -0.570791 -1.4953e-005 0.821095, 0.00986659 -0.000322952 0.999951, 0.107764 0.00101981 0.994176, + -0.218367 0.00156286 0.975865, -0.130187 -0.00027492 0.991489, -0.206644 -0.000575239 0.978416, + -0.441331 -0.000298266 0.897344, -0.982022 -0.00158311 0.188759, -0.989163 -0.000732802 0.146821, + -0.975286 -0.000212933 0.220944, -1 -0.000577362 -3.07454e-006, -0.999321 -0.000864759 0.0368476, + -0.997172 -0.00163543 0.0751296, -0.99801 0.0630541 4.64061e-006, 0.0197268 -3.99975e-008 0.999805, + -0.999999 -0.00146539 2.35152e-006, -0.910612 9.6073e-005 0.413263, -0.91031 9.84688e-005 0.413927, + -0.119935 -0.615521 0.778941, -0.0967364 -0.625691 0.774049, -0.0792711 -0.633206 0.769913, -0.0225833 -0.6376 0.770036, + 0.00774092 -0.663272 0.748339, 0.434958 -0.236318 0.868887, 0.313318 -0.298012 0.901677, 0.154638 -0.571402 0.80597, + 0.378319 -0.448111 0.809983, 0.631966 -0.175212 0.75493, 0.28268 -0.651012 0.704468, 0.198115 -0.684927 0.701161, + 0.353145 -0.686182 0.635958, 0.155782 -0.701924 0.695007, 0.544285 -0.39954 0.737646, -0.276111 -0.553943 0.785436, + -0.365449 -0.54299 0.756048, -0.232904 -0.588482 0.774238, -0.570175 -0.581933 0.579875, -0.619728 -0.545034 0.564691, + -0.634439 -0.5395 0.553559, -0.173202 -0.593371 0.786074, -0.355749 -0.588561 0.725974, -0.486325 -0.547415 0.681047, + -0.151515 -0.59904 0.786253, -0.1267 -0.610667 0.781686, -0.422043 -0.614733 0.66632, -0.5424 -0.5766 0.611012, + -0.62414 -0.529253 0.574753, -0.540221 -0.594806 0.595288, -0.0515054 -0.644913 0.762519, 0.382354 -0.720835 0.578102, + -0.163407 -0.598466 0.784307, 0.316439 -0.714085 0.624459, 0.0720094 -0.689845 0.720367, -0.277376 -0.62028 0.733699, + -0.445747 -0.643294 0.622481, -0.359185 -0.671665 0.64796, -0.448027 -0.650275 0.613526, -0.558076 -0.59276 0.580677, + -0.524462 -0.607793 0.596261, -0.37906 -0.685158 0.62199, -0.465246 -0.642548 0.608833, 1.79237e-006 -1.38498e-006 1, + 1.26537e-007 -7.70668e-008 1, 0 0 1, 4.21847e-006 -3.42596e-006 1, -0.0304221 0.00320087 0.999532, + 2.62655e-007 -3.66326e-008 1, 3.50813e-007 -4.92795e-008 1, 2.10635e-007 -2.96792e-008 1, 3.50426e-007 -4.91414e-008 1, + 1.55424e-007 -2.00405e-008 1, 2.78261e-007 -3.54215e-009 1, -0.0605469 0.00675665 0.998142, 1.79037e-007 -1.79618e-007 1, + 4.28023e-007 -1.05354e-007 1, 2.92311e-007 -4.11948e-008 1, 1.29543e-007 -1.83134e-008 1, 3.91035e-007 -5.44711e-008 1, + 1.57231e-007 -2.66021e-007 1, 6.328e-007 -1.09063e-007 1, 4.49135e-007 2.99735e-009 1, 4.93036e-007 -1.53756e-007 1, + -2.17153e-007 -8.57492e-007 1, -5.27419e-008 -1.46273e-007 1, 7.36582e-007 2.61125e-007 1, 1.9204e-007 -3.83607e-008 1, + 1.33512e-007 -4.33231e-008 1, -3.25735e-008 -2.91701e-007 1, 5.78924e-007 -1.46122e-007 1, 0 1 0, + 8.57707e-007 -1.75367e-007 1, 8.71133e-007 1.17133e-007 1, 5.65396e-007 3.9765e-007 1, 4.34024e-007 6.0682e-007 1, + 3.11385e-007 9.01012e-007 1, 1.86988e-007 6.3739e-007 1, 0.992643 -0.118284 0.0258531, 0.981273 -0.190782 0.0265759, + 0.98117 -0.190178 0.0337264, 0.981155 -0.191479 0.0258869, 0.985345 -0.16974 0.0168552, 0.981277 -0.189936 0.0319315, + 0.98113 -0.191897 0.0236674, 0.981163 -0.190946 0.0292957, 0.981263 -0.190944 0.0257607, 0.981444 -0.190591 0.0210414, + 0.981195 -0.190437 0.0314666, 0.980852 -0.19007 0.0424634, 0.981166 -0.192584 0.0149734, 0.98104 -0.191434 0.0302307, + 0.980763 -0.191562 0.0375197, 0.98146 -0.190519 0.0209351, 0.981065 -0.190828 0.0331102, 0.981241 -0.190558 0.0292149, + 0.981391 -0.190503 0.0240945, 0.980274 -0.19154 0.0487287, 0.981481 -0.190592 0.019213, 0.981206 -0.188974 0.0390229, + 0.981254 -0.190258 0.0307115, 0.981079 -0.192945 -0.0159792, -0.994174 0.104493 0.0264408, -0.994176 0.104511 0.0262831, + -0.995681 0.0702417 0.0607073, -0.995092 0.0566214 0.0811538, -0.994168 0.104569 0.0263605, -0.994177 0.104522 0.0262127, + -0.994174 0.104573 0.0261078, -0.471892 0.0499241 0.880242, -0.441752 0.0465335 0.89593, -0.489517 0.0517872 0.870455, + -0.516383 0.0548985 0.854596, -0.376672 0.0394094 0.925508, -0.402421 0.0425201 0.914467, -0.266221 0.0282889 0.963497, + -0.251347 0.0265059 0.967534, -0.278141 0.029785 0.960078, -0.320707 0.034433 0.946552, -0.321839 0.0337183 0.946194, + -0.532543 0.0559375 0.844553, -0.514292 0.054219 0.8559, -0.484706 0.0508999 0.873195, -0.509276 0.0535386 0.858936, + -0.388032 0.0417646 0.920699, 0.660617 -0.0928544 0.744958, 0.688275 -0.0994989 0.718594, 0.714736 -0.106 0.691315, + 0.661572 -0.0929915 0.744093, 0.660659 -0.0928747 0.744919, 0.660005 -0.0927864 0.745509, -0.633621 -0.545847 0.548247, + -0.283111 -0.77372 0.56675, -0.869745 -0.310983 0.383188, -0.90258 -0.254344 0.347359, -0.939837 -0.186515 0.286214, + -0.709907 -0.483002 0.512583, -0.854068 -0.328162 0.403581, -0.809743 -0.383347 0.444253, -0.981883 -0.0551715 0.18128, + -0.76447 -0.436016 0.474843, -0.622182 -0.54751 0.559573, -0.869624 -0.310744 0.383656, -0.98292 -0.0473318 0.177843, + -0.976898 -0.0747256 0.200218, -0.991676 0.125815 0.0273645, -0.992027 0.125869 -0.0062818, -0.99169 0.125827 0.0268022, + -0.991725 0.125828 0.0254848, -0.9917 0.125852 0.0263164, -0.991703 0.125881 0.0260539, -0.991691 0.125915 0.0263603, + -0.991696 0.125895 0.0262631, -0.991707 0.125851 0.026059, -0.991711 0.125853 0.0259042, -0.991709 0.125852 0.0259733, + -0.991695 0.125925 0.026152, 0.998968 0.0381862 0.02461, 0.999271 0.0381888 1.04903e-005, 0.998946 0.0381935 0.0254579, + 0.998939 0.038213 0.0257083, 0.998898 0.0381639 0.027307, 0.99891 0.038381 0.0265555, 0.998933 0.0381989 0.0259437, + 0.998928 0.0387387 0.0253237, 0.991449 -0.128189 0.0244248, 0.985412 -0.170185 -4.16608e-005, + 0.999275 0.0380778 -1.74131e-005, 0.998978 0.0381336 0.0242552, 0.980792 -0.166034 0.102368, 0.998873 0.0381281 0.0282538, + 0.998899 0.038155 0.0273094, 0.998943 0.0379172 0.0259675, 0.998867 0.0381257 0.028494, 0.99898 0.0381193 0.0242212, + 0.998976 0.0378862 0.0247153, 0.998927 0.0381435 0.0262739, 0.982464 -0.120527 0.142257, 0.998891 0.0382371 0.0274619, + 0.954333 -0.151533 0.257463, 0.998938 0.0381651 0.0258165, 0.998934 0.0382642 0.0258149, 0.998942 0.0380817 0.0257831, + 0.998922 0.0379869 0.0266941, 0.998941 0.0380316 0.0258792, 0.998956 0.0380521 0.0252673, 0.99895 0.0381615 0.0253466, + 0.998953 0.0381544 0.0252472, 0.999245 0.0388468 8.05401e-007, 0.999242 0.0389294 1.81856e-006, 0.998914 0.0385735 0.0261251, + 0.998921 0.0380458 0.0266475, 0.998934 0.0383875 0.0256517, 0.9989 0.0390548 0.0259633, 0.998906 0.0388524 0.0260153, + 0.998946 0.0381291 0.025561, 0.998928 0.0381552 0.0262001, 0.998947 0.0372311 0.0267994, 0.998949 0.0374007 0.0264979, + 0.998932 0.0383409 0.025804, 0.998928 0.0381765 0.0261946, 0.999272 0.0275634 0.0263955, 0.92871 -0.370801 0.00229636, + 0.92242 -0.36835 0.116016, 0.927831 -0.370924 0.0393034, 0.884622 -0.363646 0.2919, 0.803191 -0.330176 0.495851, + 0.803279 -0.354507 0.47861, 0.88615 -0.351383 0.302108, 0.92871 -0.370807 0, 0.927584 -0.369789 0.0533273, + 0.63261 -0.315443 0.707319, 0.645871 -0.338569 0.684268, 0.461746 -0.300529 0.834549, 0.359796 -0.263447 0.895066, + 0.426545 -0.306517 0.850945, 0.657795 -0.289313 0.695416, 0.280001 -0.280791 0.918017, 0.235626 -0.251893 0.938632, + 0.131485 -0.241481 0.961457, 0.0146822 -0.201012 0.979479, 0.0343794 -0.202085 0.978764, 0.0372103 -0.20795 0.977431, + -0.00637189 -0.193446 0.98109, 0.079377 -0.221153 0.972003, 0.0673746 -0.216118 0.97404, 0.1125 -0.212448 0.970675, + 0.0477488 -0.211119 0.976294, 0.104607 -0.20791 0.972538, 0.0468742 -0.20292 0.978073, 0.0473197 -0.211389 0.976256, + 0.0242298 -0.20602 0.978248, 0.0176906 -0.20578 0.978438, -0.0477022 -0.190564 0.980515, -0.01084 -0.202671 0.979187, + 0.0533711 -0.221931 0.973601, 0.0315837 -0.204905 0.978272, 0.097568 -0.203369 0.974229, 0.00700464 -0.202315 0.979295, + 0.013566 -0.223992 0.974497, 0.0380292 -0.204714 0.978083, 0.197476 -0.211358 0.957252, 0.147145 -0.208998 0.966782, + 0.126531 -0.206745 0.970179, 0.439669 0.896341 0.0571341, 0.420875 0.904833 0.0643491, 0.479251 0.874614 0.0732744, + 0.437041 0.898242 0.0464304, 0.474093 0.879475 0.0419537, 0.471634 0.880829 0.0412528, 0.341988 0.939698 0.0034597, + 0.31037 0.950615 -0.000893919, 0.300883 0.953658 0.00259694, 0.383514 0.923532 0.00253406, 0.396429 0.918065 0.000998168, + 0.367395 0.929787 0.0227418, 0.332158 0.943204 0.00614808, 0.246577 0.96242 0.113787, 0.310339 0.950625 0.000937295, + 0.367284 0.929828 -0.0228696, 0.39643 0.918065 -0.000997621, 0.383519 0.92353 -0.00253424, 0.299282 0.954161 -0.00270736, + 0.293283 0.956017 -0.00412425, 0.349148 0.937067 0.000491876, 0.343825 0.938913 -0.0150272, 0.343758 0.938994 -0.0110282, + 0.35027 0.936635 -0.00511935, 0.350817 0.936442 -0.00179772, 0.37473 0.92709 0.00906416, 0.320819 0.946769 -0.0265077, + 0.363784 0.929335 -0.063232, 0.341047 0.940046 -0.000503491, 0.341989 0.939698 -0.00346056, 0.300877 0.953659 -0.00259826, + 0.310367 0.950616 0.000893201, 0.31034 0.950625 -0.000937614, 0.299287 0.954159 0.00270653, 0.293284 0.956017 0.00412349, + 0.30547 0.952196 0.00323855, 0.332656 0.943034 -0.00518949, 0.247245 0.962337 -0.113035, 0.322224 0.946215 0.0291262, + 0.364181 0.929103 0.0643379, 0.350273 0.936634 0.00511718, 0.341051 0.940045 0.000504869, 0.343826 0.938913 0.0150269, + 0.349147 0.937068 -0.000489762, 0.350818 0.936442 0.00179859, 0.343745 0.938998 0.0110418, 0.374736 0.927087 -0.00904277, + 0.384661 0.923058 -1.82774e-007, 0.342279 0.939598 -6.96894e-008, 0.254577 0.966828 0.0208341, 0.355751 0.934388 0.0189982, + 0.342603 0.939477 0.00251968, 0.342269 0.93958 0.00643151, 0.464264 0.88242 0.0761115, 0.342144 0.939247 0.027422, + 0.34511 0.937872 0.0359899, 0.216098 0.974879 -0.0539704, 0.322815 0.946454 -0.00401696, 0.258324 0.965877 -0.0187324, + 0.314475 0.949265 -0.00124037, 0.326772 0.945101 -0.00212735, 0.294873 0.953384 -0.0641077, 0.318006 0.948082 0.00346186, + 0.321157 0.946962 -0.0110155, 0.25338 0.967133 -0.0212778, 0.215849 0.976065 -0.0265719, 0.141133 0.9885 -0.054307, + 0.305477 0.952194 -0.00323859, 0.464304 0.882397 -0.076141, 0.342148 0.939246 -0.0274244, 0.342286 0.939574 -0.00643373, + 0.2161 0.974878 0.0539693, 0.345132 0.937872 -0.0357704, 0.355774 0.934378 -0.0190333, 0.342631 0.939467 -0.00255334, + 0.262992 0.964649 0.016964, 0.314476 0.949265 0.00124041, 0.322672 0.946501 0.00440989, 0.144182 0.988119 0.0532181, + 0.211744 0.976921 0.0281204, 0.31758 0.948229 -0.00231987, 0.294468 0.953464 0.0647622, 0.321198 0.946949 0.0109069, + 0.326773 0.945101 0.00212708, -0.4384 0.161585 0.884136, -0.52612 0.195859 0.827549, -0.579489 0.23746 0.779619, + -0.423618 0.154602 0.89255, -0.347277 0.167239 0.92273, -0.218253 0.0826865 0.972383, -0.305786 0.110964 0.945612, + -0.233806 0.14298 0.961713, -0.423029 0.169407 0.890139, -0.520212 0.19545 0.831371, -0.373271 0.0925151 0.923098, + -0.37015 0.129448 0.919909, -0.248838 0.0494908 0.96728, -0.0339878 0.0118636 0.999352, -0.0661337 0.0242031 0.997517, + -0.124159 0.0465583 0.991169, -0.124003 0.0469788 0.991169, -0.0329128 0.011527 0.999392, -0.123198 0.0431711 0.991443, + 0.0361649 -0.01271 0.999265, 0.103356 -0.0441549 0.993664, 0.400129 -0.137246 0.906124, 0.558607 -0.196968 0.805706, + 0.476451 -0.172363 0.86214, 0.318036 -0.119913 0.940465, 0.182101 -0.0680171 0.980925, 0.125378 -0.0483665 0.990929, + 0.173687 -0.0711131 0.98223, 0.498644 -0.186648 0.846473, 0.571569 -0.213213 0.792369, 0.48723 -0.171047 0.856358, + 0.299679 -0.117531 0.946773, 0.654314 -0.241715 0.716552, 0.634157 -0.222334 0.740549, 0.892882 -0.303945 0.332235, + 0.939552 -0.322202 0.115878, 0.924134 -0.320929 0.207317, 0.862486 -0.301339 0.406586, 0.748109 -0.260901 0.610134, + 0.641846 -0.224101 0.733357, 0.743368 -0.267236 0.61318, 0.938298 -0.329579 0.104761, 0.939755 -0.335285 0.0666716, + 0.923133 -0.324431 0.206324, 0.848874 -0.307653 0.429841, 0.939116 -0.343472 0.00934402, 0.939114 -0.343471 -0.00966315, + -0.937694 0.330297 0.107863, -0.932254 0.360772 0.0273265, -0.939404 0.341767 0.0267562, -0.942001 0.33457 0.0264049, + -0.941927 0.330222 0.0610493, -0.723031 0.292523 0.625824, -0.662966 0.258413 0.702637, -0.806034 0.296411 0.512299, + -0.903184 0.323536 0.282105, -0.936237 0.326465 0.129927, -0.916942 0.315042 0.244881, -0.666811 0.268295 0.695256, + -0.83686 0.297043 0.459816, 0.3298 -0.942375 -0.0562191, 0.25903 -0.960664 -0.100144, 0.560358 -0.817887 -0.130611, + 0.507063 -0.833365 -0.219977, 0.269047 -0.945765 -0.18205, 0.716784 -0.624241 -0.310717, 0.781136 -0.603795 -0.158926, + 0.162714 -0.953587 -0.253369, 0.0548573 -0.963454 -0.262196, 0.0065643 -0.960737 -0.277383, 0.110244 -0.95354 -0.28037, + 0.503371 -0.802523 -0.320271, 0.229555 -0.942592 -0.24254, 0.419615 -0.818246 -0.392934, 0.232023 -0.807034 -0.543012, + 0.104833 -0.843336 -0.527062, 0.33498 -0.818141 -0.46737, 0.83344 -0.45499 -0.313626, 0.636834 -0.631757 -0.441956, + 0.740614 -0.454474 -0.494919, 0.567602 -0.583013 -0.581312, 0.879151 -0.453913 -0.145109, 0.419365 -0.631667 -0.65202, + 0.329497 -0.574831 -0.749, 0.164884 -0.62385 -0.763953, 0.494896 -0.454479 -0.740626, 0.630111 -0.45379 -0.630107, + 0.313779 -0.4539 -0.833977, 0.145044 -0.453803 -0.879218, -2.22349e-007 -0.555233 -0.831695, -0.00653552 -0.807205 -0.590235, + -0.0652438 -0.945743 -0.318297, -0.104953 -0.963467 -0.246408, -0.162714 -0.953587 -0.253369, -0.222869 -0.829067 -0.512813, + -0.129555 -0.802564 -0.582329, -0.158893 -0.603847 -0.781103, -0.33498 -0.818141 -0.467369, -0.229555 -0.942592 -0.24254, + -0.419365 -0.631667 -0.652019, -0.308294 -0.603816 -0.735092, -0.269047 -0.945765 -0.18205, -0.29665 -0.953489 -0.0534487, + -0.280703 -0.953433 -0.110322, -0.39709 -0.833517 -0.384148, -0.488498 -0.802447 -0.342707, -0.523741 -0.818124 -0.23742, + -0.560358 -0.817887 -0.130611, -0.543683 -0.623635 -0.561684, -0.145045 -0.453804 -0.879218, -0.494896 -0.454479 -0.740626, + -0.313779 -0.453901 -0.833977, -2.43075e-007 -0.453896 -0.891055, -0.650463 -0.453759 -0.609098, + -0.680593 -0.583427 -0.443177, -0.720846 -0.632274 -0.283919, -0.781136 -0.603796 -0.158926, -0.822693 -0.454955 -0.340869, + -0.740759 -0.454262 -0.494896, -0.879151 -0.453913 -0.145109, -0.87356 -0.454643 0.173763, -0.762785 -0.63176 0.137978, + -0.753859 -0.583662 0.301722, -0.82219 -0.45613 0.340513, -0.756411 -0.454645 0.470256, -0.560217 -0.81796 0.130759, + -0.546348 -0.80219 0.240821, -0.642836 -0.623655 0.444766, -0.329097 -0.934409 0.136291, -0.296683 -0.953477 0.053484, + -0.630029 -0.454027 0.630018, -0.470451 -0.453915 0.756728, -0.445851 -0.603666 0.660911, -0.313814 -0.45403 0.833893, + -0.144981 -0.455005 0.878608, -0.177033 -0.575027 0.798751, 1.68281e-007 -0.455551 0.89021, -0.00970386 -0.583593 0.811988, + -0.308344 -0.603589 0.735258, -0.464394 -0.833533 0.299267, -0.538542 -0.631593 0.557731, -0.419731 -0.818132 0.393046, + -0.222724 -0.829265 0.512556, -0.119192 -0.791582 0.599325, -0.335024 -0.818098 0.467412, 0.144982 -0.455007 0.878606, + -0.247249 -0.953604 0.171779, -0.191579 -0.96071 0.200835, -0.177912 -0.942516 0.282862, -0.104846 -0.963542 0.246159, + -0.0652023 -0.945829 0.31805, 4.78351e-008 -0.969474 0.245194, 0.00962024 -0.829117 0.558993, 0.164919 -0.623841 0.763953, + 0.313814 -0.454031 0.833892, 0.470451 -0.453915 0.756728, 0.32954 -0.574673 0.749103, 0.445851 -0.603667 0.66091, + 0.231907 -0.807195 0.542822, 0.116763 -0.833476 0.540078, 0.053407 -0.953575 0.296382, 0.335024 -0.818098 0.467412, + 0.538542 -0.631593 0.55773, 0.177913 -0.942516 0.282862, 0.110158 -0.953604 0.280187, 0.630029 -0.454028 0.630018, + 0.756411 -0.454645 0.470256, 0.642836 -0.623655 0.444765, 0.833308 -0.4553 0.313527, 0.879159 -0.453912 0.145067, + 0.780913 -0.604075 0.15896, 0.734789 -0.604259 0.30815, 0.431492 -0.802317 0.412434, 0.454253 -0.833515 0.314493, + 0.523891 -0.818046 0.237357, 0.546472 -0.829038 0.118596, 0.228341 -0.945774 0.231022, 0.23412 -0.9608 0.148494, + 0.312714 -0.942289 0.119585, 0.262486 -0.963371 0.0549245, 0.995335 -0.00462731 -0.0963666, 0.9836 -0.00257475 -0.180344, + 0.93021 -0.000994063 -0.367026, 0.953396 -0.00109518 -0.30172, 0.999887 -0.000159642 -0.0150462, + 0.999452 -0.000795785 -0.0331073, 0.90806 -0.000561288 -0.418839, 0.839535 -0.000364328 -0.543305, + 0.190333 0.000844271 -0.981719, 0.318533 0.000892005 -0.947911, 0.224414 -0.000296687 -0.974494, + 0.777638 0.000966707 -0.628712, 0.713386 -0.00068875 -0.700771, 0.00981035 -0.000305965 -0.999952, + 0.107669 0.00100277 -0.994186, 0.0196154 4.90622e-008 -0.999808, 0.413117 -0.0330819 -0.910077, 0.358027 0.0014519 -0.93371, + 0.557341 -0.00103404 -0.830283, 0.112962 0.00191477 -0.993598, 0.559088 -7.80147e-006 -0.829108, + 0.99896 -0.00142354 -0.0455768, 0.333202 0.00341077 -0.942849, 0.990572 -0.00195866 -0.136978, + 0.997947 -0.00284672 -0.0639755, 0.980098 2.84196e-005 -0.198516, 0.667522 0.000603993 -0.74459, + -0.676858 0.00260869 -0.736109, -0.635719 -0.00260483 -0.771916, -0.634743 -0.00276676 -0.772718, + -0.289566 -2.99e-005 -0.957158, -0.370591 -0.000587889 -0.928796, -0.206603 -0.000586211 -0.978425, + -0.641473 0.00105006 -0.767145, -0.563162 -0.000251354 -0.826346, -0.570686 2.12685e-005 -0.821169, + -0.687153 0.000640557 -0.726512, -0.793176 -0.000932812 -0.608992, -0.839434 -0.00110503 -0.54346, + -0.441183 -0.000294255 -0.897417, -0.218021 0.00152299 -0.975943, -0.955436 -0.00121472 -0.295195, + -0.975298 -0.000207301 -0.220892, -0.982028 -0.00158021 -0.188731, -0.997172 -0.00163566 -0.0751337, + -0.820254 -0.000600882 -0.571999, -0.939952 0.0296268 -0.340017, -0.834226 -0.00171326 -0.55142, + -0.64505 0.00182586 -0.764138, -0.916141 -0.000928189 -0.400855, -0.130038 -0.000265679 -0.991509, + -0.358457 0.00145369 -0.933545, -0.87644 -0.000813198 -0.48151, -0.99932 -0.000866072 -0.0368568, + -0.98916 -0.000730527 -0.14684, 0.857093 -0.000608332 -0.515161, 0.908012 0.00365986 -0.418929, 0.720768 0.00125292 -0.693176, + 0.925205 -0.000135394 -0.379468, 0.933835 -0.0448708 -0.354878, 0.932267 0.0112228 -0.361597, 0.996637 0.0344106 -0.074373, + -0.629662 -0.00338804 -0.776862, -0.709257 -0.00941796 -0.704887, -0.733886 -0.0077837 -0.679228, + -0.656488 -0.0205921 -0.754055, -0.752764 -0.243024 -0.611789, -0.639701 -0.327447 -0.695385, + -0.847174 -0.000207084 -0.531316, -0.639017 -0.370859 -0.673885, -0.885939 0.00106323 -0.463801, + -0.927442 -1.60891e-005 -0.373968, -0.803652 0.00210715 -0.595096, -0.682385 -0.00356902 -0.730984, + -0.83456 -0.00167762 -0.550915, -0.91062 0.000103391 -0.413245, -0.910243 0.000106427 -0.414074, 0.378184 -0.447763 -0.810238, + 0.614543 -0.170787 -0.770175, 0.544147 -0.399672 -0.737676, 0.00781371 -0.663273 -0.748337, 0.154702 -0.701608 -0.695568, + 0.0720095 -0.689846 -0.720366, 0.315309 -0.713903 -0.625239, 0.198422 -0.684925 -0.701075, 0.353954 -0.686344 -0.635333, + 0.282886 -0.650972 -0.704422, 0.155331 -0.571276 -0.805925, 0.383466 -0.720965 -0.577203, -0.023487 -0.637243 -0.770305, + 0.434878 -0.235966 -0.869023, -0.0505413 -0.645172 -0.762364, -0.447487 -0.65054 -0.613639, -0.465681 -0.642189 -0.60888, + -0.526559 -0.602992 -0.59928, -0.464207 -0.626802 -0.625805, -0.379063 -0.685157 -0.62199, -0.232861 -0.588429 -0.774292, + -0.163287 -0.598367 -0.784407, -0.235217 -0.613603 -0.753767, -0.151635 -0.598978 -0.786278, -0.126861 -0.610341 -0.781914, + -0.0960022 -0.626001 -0.77389, -0.310574 -0.615823 -0.72409, -0.357605 -0.64883 -0.671668, -0.524332 -0.607684 -0.596486, + -0.579828 -0.573093 -0.579107, -0.557864 -0.592771 -0.580871, -0.0789329 -0.633456 -0.769742, 0.313238 -0.297735 -0.901796, + -0.173017 -0.59352 -0.786002, -0.120186 -0.615643 -0.778807, -0.27595 -0.554039 -0.785425, -0.364016 -0.574286 -0.733272, + -0.422372 -0.60453 -0.675386, -0.497406 -0.587665 -0.638151, -0.568524 -0.56955 -0.593627, -0.634805 -0.539187 -0.553443, + -0.639714 -0.532085 -0.554664, -0.600257 -0.552657 -0.578154, 0 0 -1, -5.42237e-007 3.69001e-007 -1, + -7.22983e-007 1.6224e-006 -1, -6.85131e-009 3.07626e-008 -1, -1.33277e-006 8.89782e-007 -1, -7.00238e-007 3.13075e-007 -1, + -1.89916e-006 1.6678e-006 -1, -2.20173e-007 1.99299e-007 -1, -6.62289e-008 -3.18716e-007 -1, -4.14356e-007 -1.14392e-006 -1, + -5.06943e-007 1.79092e-007 -1, -3.63571e-007 3.67917e-007 -1, -1.90694e-007 -2.25895e-008 -1, -4.00086e-007 5.64577e-008 -1, + -0.0503541 0.00562315 -0.998716, -8.3672e-007 9.25359e-007 -1, -5.43932e-007 6.8217e-007 -1, -9.94325e-007 3.84411e-007 -1, + -4.66968e-007 4.79512e-007 -1, -1.29919e-006 1.01205e-006 -1, -1.61363e-006 9.11541e-007 -1, -4.26338e-006 2.02209e-006 -1, + -1.05424e-005 -3.79001e-006 -1, -1.13488e-005 -1.74445e-006 -1, -9.59322e-006 1.68129e-007 -1, -7.08537e-006 -4.69819e-007 -1, + -2.66527e-006 -7.12246e-007 -1, -1.12595e-006 1.81619e-006 -1, -3.74131e-007 -2.51325e-007 -1, -3.92361e-007 -9.6296e-008 -1, + -5.57086e-007 -5.25583e-007 -1, 2.08763e-005 3.03566e-005 -1, 1.13928e-005 1.90866e-005 -1, 3.20723e-006 6.35134e-006 -1, + -2.31694e-008 2.30944e-006 -1, -2.75058e-007 1.82645e-007 -1, -1.26982e-006 -4.25032e-007 -1, -1.48205e-006 1.04282e-007 -1, + -5.06026e-007 4.61366e-007 -1, -5.10923e-007 7.45125e-008 -1, -6.34323e-007 -8.12668e-007 -1, -3.35109e-007 -1.8944e-007 -1, + -1.78841e-007 1.45415e-007 -1, -3.09404e-007 1.10566e-007 -1, -9.81771e-007 4.21027e-007 -1, -4.71644e-007 -5.27781e-007 -1, + -0.048753 0.00513078 -0.998798, -2.50434e-006 -6.83698e-007 -1, -4.70527e-007 3.91836e-008 -1, -1.16742e-006 2.89438e-006 -1, + -4.51227e-007 2.94756e-007 -1, -1.53469e-006 2.16768e-007 -1, -2.51785e-007 -1.87697e-007 -1, -1.05712e-007 -1.89934e-007 -1, + 0.981155 -0.191482 -0.0258784, 0.981461 -0.190516 -0.0209241, 0.981391 -0.190502 -0.0240836, 0.981038 -0.191435 -0.0302705, + 0.981065 -0.190827 -0.0331142, 0.980761 -0.19157 -0.0375258, 0.98117 -0.190184 -0.0336888, 0.981242 -0.190559 -0.0291977, + 0.981254 -0.190254 -0.0307192, 0.981208 -0.188982 -0.0389502, 0.981103 -0.1929 0.0150759, 0.981481 -0.190593 -0.0192261, + 0.980273 -0.191539 -0.0487524, 0.981163 -0.192551 -0.0156169, 0.981278 -0.189929 -0.0319375, 0.981273 -0.190781 -0.0265703, + 0.98113 -0.191894 -0.0236743, 0.992694 -0.117861 -0.0258493, 0.985364 -0.169603 -0.0171211, 0.980848 -0.19007 -0.0425415, + 0.981193 -0.190435 -0.03154, 0.981263 -0.190944 -0.0257387, 0.981164 -0.190948 -0.0292746, 0.981444 -0.190592 -0.0210224, + -0.994177 0.104522 -0.0262088, -0.994168 0.104569 -0.0263573, -0.995681 0.0702317 -0.0607157, -0.994175 0.104573 -0.0261037, + -0.994177 0.104511 -0.02628, -0.995204 0.0553034 -0.0806863, -0.994174 0.104493 -0.026438, -0.484387 0.0508665 -0.873374, + -0.508733 0.0534815 -0.859262, -0.513875 0.0541798 -0.856152, -0.47172 0.0498937 -0.880336, -0.515476 0.0547561 -0.855153, + -0.388164 0.0417889 -0.920643, -0.320496 0.0343779 -0.946626, -0.278021 0.0297372 -0.960115, -0.266413 0.0282897 -0.963444, + -0.40227 0.0424857 -0.914535, -0.37638 0.0393039 -0.925631, -0.441832 0.046537 -0.89589, -0.48928 0.0516784 -0.870594, + -0.321295 0.0336125 -0.946382, -0.252217 0.0266028 -0.967305, -0.532542 0.0559375 -0.844553, 0.660616 -0.0928352 -0.744962, + 0.66073 -0.0928405 -0.74486, 0.659696 -0.0927318 -0.74579, 0.646411 -0.0894094 -0.757732, 0.631746 -0.0859255 -0.770399, + 0.660017 -0.0927729 -0.745501, -0.869784 -0.288201 -0.400521, -0.914933 -0.218002 -0.339666, -0.921349 -0.22132 -0.319583, + -0.84884 -0.320607 -0.420336, -0.982719 -0.0499533 -0.178237, -0.975303 -0.0805206 -0.205671, -0.989002 -0.0188266 -0.146696, + -0.709878 -0.483021 -0.512605, -0.593735 -0.581097 -0.556601, -0.800952 -0.394185 -0.45066, -0.764494 -0.435972 -0.474844, + -0.764501 -0.435939 -0.474864, -0.622182 -0.54751 -0.559573, -0.991696 0.125895 -0.0262546, -0.991699 0.125881 -0.026221, + -0.991687 0.125915 -0.0264841, -0.991705 0.125853 -0.0261029, -0.991708 0.125857 -0.0260039, -0.991711 0.125854 -0.0259042, + -0.991695 0.125925 -0.0261515, -0.991694 0.125885 -0.0263989, -0.991676 0.125816 -0.0273643, -0.991712 0.125778 -0.0262101, + -0.991731 0.125761 -0.025588, 0.998915 0.0385554 -0.0261357, 0.998932 0.0381996 -0.025978, 0.99891 0.038379 -0.0265645, + 0.998928 0.0387376 -0.0253298, 0.99894 0.0380871 -0.0258337, 0.998954 0.0380574 -0.0253414, 0.998942 0.0380328 -0.0258716, + 0.998922 0.037991 -0.0266749, 0.998934 0.0383853 -0.0256496, 0.998938 0.0381656 -0.02581, 0.998953 0.0381551 -0.0252383, + 0.998949 0.0374088 -0.0264923, 0.998948 0.0372055 -0.0268126, 0.998928 0.0381783 -0.0261865, 0.998931 0.0383401 -0.0258092, + 0.998928 0.038158 -0.0261896, 0.998907 0.0388442 -0.0260082, 0.9989 0.0390461 -0.0259584, 0.998946 0.0381301 -0.0255603, + 0.998921 0.0380435 -0.0266386, 0.99895 0.0381625 -0.025338, 0.991448 -0.128189 -0.0244568, 0.998978 0.038135 -0.0242638, + 0.981859 -0.16763 -0.088617, 0.998899 0.0381558 -0.0272945, 0.998967 0.0381859 -0.0246148, 0.998946 0.0381931 -0.0254628, + 0.998899 0.0381646 -0.0272987, 0.998939 0.038211 -0.0257061, 0.998874 0.0381298 -0.0282426, 0.998892 0.0382372 -0.0274518, + 0.97314 -0.161931 -0.163635, 0.95432 -0.151526 -0.257512, 0.998979 0.0381192 -0.0242476, 0.998934 0.0382642 -0.025821, + 0.998927 0.0381432 -0.0262751, 0.998867 0.0381268 -0.0284756, 0.998944 0.0379189 -0.0259628, 0.998976 0.0378873 -0.0247349, + 0.999235 0.0288502 -0.026387, 0.778489 -0.333503 -0.531724, 0.609066 -0.286431 -0.739591, 0.455544 -0.285308 -0.843255, + 0.324419 -0.226459 -0.918405, 0.871307 -0.345214 -0.348786, 0.176962 -0.231345 -0.956642, 0.911497 -0.362478 -0.19438, + 0.927484 -0.370013 -0.0535152, 0.925342 -0.368445 -0.089394, 0.0612352 -0.212141 -0.975319, 0.0463437 -0.211431 -0.976294, + 0.0477943 -0.210582 -0.976407, 0.0208259 -0.205377 -0.978461, 0.0181476 -0.205499 -0.978489, -0.00616042 -0.204527 -0.978842, + -0.05615 -0.188739 -0.980421, 0.0585696 -0.222588 -0.973152, 0.00777438 -0.204187 -0.978901, 0.0289109 -0.203143 -0.978722, + 0.0158844 -0.225778 -0.974049, 0.0429868 -0.202938 -0.978248, 0.103576 -0.201756 -0.973944, 0.116317 -0.208357 -0.971112, + 0.227332 -0.210431 -0.95081, 0.18267 -0.207008 -0.961134, 0.147291 -0.203296 -0.967975, 0.922732 -0.366304 -0.119946, + 0.888068 -0.360768 -0.284923, 0.659724 -0.341478 -0.669445, 0.281304 -0.270831 -0.920608, 0.92788 -0.370217 -0.0444667, + 0.839226 -0.358635 -0.408755, 0.482147 -0.309758 -0.819502, 0.0688492 -0.214183 -0.974364, 0.129342 -0.229216 -0.964744, + 0.0324797 -0.205477 -0.978123, 0.0372369 -0.208763 -0.977257, 0.0343389 -0.210877 -0.976909, 0.0197985 -0.203796 -0.978813, + 0.0025213 -0.197617 -0.980276, 0.437007 0.898261 -0.0463873, 0.471694 0.880797 -0.0412421, 0.474084 0.879481 -0.041923, + 0.439612 0.896373 -0.0570699, 0.479245 0.874623 -0.073201, 0.420828 0.90486 -0.0642784, -0.434606 0.166598 -0.885078, + -0.532431 0.205375 -0.821181, -0.510393 0.179724 -0.840951, -0.422237 0.157278 -0.892737, -0.372721 0.0932753 -0.923244, + -0.220622 0.0816763 -0.971934, -0.3058 0.110962 -0.945608, -0.270362 0.0456747 -0.961675, -0.431237 0.151391 -0.889447, + -0.526959 0.1987 -0.826337, -0.34734 0.166287 -0.922878, -0.369722 0.129298 -0.920102, -0.222973 0.125154 -0.966757, + -0.0300575 0.0105212 -0.999493, -0.0600991 0.0210249 -0.997971, -0.122372 0.0450579 -0.991461, -0.123249 0.0451682 -0.991347, + -0.0303476 0.0113723 -0.999475, -0.120673 0.0482641 -0.991518, 0.0629012 -0.0289566 -0.9976, 0.0883744 -0.0258355 -0.995752, + 0.607526 -0.234667 -0.758843, 0.537387 -0.198136 -0.81973, 0.492225 -0.18262 -0.851096, 0.301001 -0.119755 -0.946075, + 0.460618 -0.171326 -0.870907, 0.163935 -0.0613506 -0.984562, 0.0878777 -0.0330158 -0.995584, 0.5884 -0.216999 -0.778908, + 0.482067 -0.193048 -0.854602, 0.303056 -0.10653 -0.947, 0.339519 -0.127167 -0.931963, 0.652618 -0.24128 -0.718244, + 0.672875 -0.22394 -0.705047, 0.941343 -0.330739 -0.0669714, 0.938178 -0.329597 -0.105774, 0.929493 -0.326666 -0.171265, + 0.849732 -0.308119 -0.427806, 0.920797 -0.3222 -0.219819, 0.743516 -0.260636 -0.615835, 0.634855 -0.22202 -0.740044, + 0.939782 -0.334394 -0.0706438, 0.923227 -0.321274 -0.210795, 0.856827 -0.289623 -0.426574, 0.870284 -0.304354 -0.387265, + -0.932209 0.338666 -0.127638, -0.942001 0.33457 -0.0264052, -0.93941 0.34175 -0.026756, -0.932274 0.36072 -0.0273253, + -0.937673 0.330437 -0.107612, -0.658741 0.25562 -0.707615, -0.835515 0.296673 -0.462494, -0.683149 0.259322 -0.682686, + -0.90927 0.328649 -0.255377, -0.935929 0.32715 -0.13042, -0.673626 0.236483 -0.700217, -0.815086 0.315989 -0.485577, + -0.801751 0.299946 -0.516941, -1.80413e-006 4.48525e-007 -1, -7.64889e-007 -1.34474e-006 -1, -3.0581e-006 1.37471e-006 -1, + -6.31776e-007 7.98739e-008 -1, -1.63033e-006 -1.58691e-007 -1, -1.70537e-006 1.02898e-006 -1, -1.76726e-006 1.41654e-006 -1, + -0.0935268 0.995617 -0.000554336, -0.0943521 0.995538 0.00132089, 0.96252 0.257138 0.0862257, 0.943947 0.329443 -0.0207665, + 0.971817 0.219502 0.0859713, -0.114445 0.992553 -0.041727, 0.999762 0.0117984 0.0183271, 0.97492 0.221173 -0.0247861, + 0.997765 -0.0619851 -0.0249454, 0.92755 -0.369253 -0.0574703, 0.894296 -0.445835 -0.0382816, 0.996581 -0.0784731 -0.0258341, + 0.853299 -0.521109 -0.0180857, 0.622033 -0.780849 -0.0578858, 0.658179 -0.752777 -0.0112432, 0.365414 -0.930128 -0.0365381, + 0.346308 -0.930842 -0.116634, 0.136596 -0.989808 -0.0402577, 0.579887 -0.81466 -0.00770874, 0.298622 -0.954369 -0.0022663, + 0.0483351 -0.998831 -0.000455425, -0.143146 -0.989702 -0.000430102, -0.200296 -0.979735 -0.00132917, + -0.435841 -0.900012 -0.00462779, -0.473536 -0.88075 -0.00657608, -0.641632 -0.766941 -0.0104108, + -0.760079 -0.649632 -0.0160802, -0.178248 -0.983985 -0.00117403, 0.0682022 -0.997672 -0.000204012, + -0.531599 -0.846958 -0.00799763, -0.731285 -0.681899 -0.0153237, -0.788424 -0.614894 -0.0171289, + -0.766232 -0.642383 -0.0152586, -0.636696 -0.768976 -0.0573958, -0.732307 -0.679634 -0.0426978, -0.658366 -0.75114 -0.0484078, + -0.417297 -0.908563 -0.0194225, -0.318061 -0.948067 -0.0026298, -0.118442 -0.992961 -0.000631888, + -0.117918 -0.993023 -0.000353729, 0.1123 -0.993674 -0.000449201, -0.61925 -0.785145 -0.00874308, + -0.0902397 -0.995427 -0.031322, -0.408669 -0.912674 -0.00407451, 0.210183 -0.976278 -0.0520065, + 0.413656 -0.910424 -0.00407027, 0.517704 -0.853507 -0.0592268, 0.663458 -0.74509 -0.0682956, 0.41427 -0.902986 -0.114001, + 0.853903 -0.518961 -0.0391115, 0.704565 -0.70805 -0.0474709, 0.963059 -0.265331 -0.0460027, 0.956742 -0.28979 -0.0258328, + 0.848153 -0.528255 -0.0397895, 0.683571 -0.727745 -0.0558447, 0.227133 -0.966594 -0.118772, 0.964358 -0.262112 -0.0362193, + 0.853046 -0.515451 -0.0813842, 0.988744 -0.13304 -0.0684554, 0.998229 0.053994 -0.0249552, 0.999011 0.00552395 -0.044113, + 0.997449 0.0664092 -0.0261897, 0.985868 0.165702 -0.0246461, 0.985883 0.165519 -0.0252538, 0.98596 0.165161 -0.0245767, + 0.132522 -0.99118 6.72643e-006, 0.263226 -0.964732 -0.00219765, 0.133585 -0.991035 0.00227099, 0.260679 -0.965416 -0.00432436, + 0.174798 -0.984603 -0.00136932, 0.258688 -0.965923 -0.00851155, 0 -1 0, -0.978498 -0.204799 -0.0244628, + -0.989656 -0.111337 0.0904676, -0.98546 -0.14347 0.0910273, -0.986657 0.158811 -0.0358657, -0.999235 0.0225696 0.0319384, + -0.993291 -0.112743 -0.025749, -0.991826 0.124909 -0.0260454, -0.915538 0.396037 -0.0703173, -0.924888 0.378483 -0.0365021, + -0.769138 0.637948 -0.0380603, -0.889795 0.455899 -0.0204967, -0.709267 0.704822 -0.012873, -0.500583 0.865659 -0.00713099, + -0.427911 0.903396 -0.0276971, -0.15047 0.984378 -0.091425, -0.191627 0.980243 -0.0490119, -0.463073 0.886301 -0.00588152, + -0.725528 0.688056 -0.0137431, -0.106228 0.994342 -0.000317807, 0.13051 0.984093 -0.120533, 0.129698 0.990146 -0.0528142, + 0.369867 0.928099 -0.0427833, 0.214505 0.976722 -0.00160277, 0.436695 0.899594 -0.00537331, 0.605735 0.795613 -0.00924197, + 0.6685 0.743616 -0.0119617, 0.787134 0.616575 -0.0159655, 0.753582 0.657182 -0.0150417, 0.644308 0.764686 -0.0110838, + 0.42108 0.907012 -0.00461818, 0.786283 0.617631 -0.0170557, 0.788641 0.614625 -0.0167531, 0.800429 0.599177 -0.0173025, + 0.677342 0.735568 -0.0121185, 0.760824 0.648798 -0.0144343, 0.605618 0.795699 -0.00943543, 0.42018 0.907426 -0.00519972, + 0.400553 0.916263 -0.00447051, 0.180755 0.983527 -0.00135365, 0.156826 0.987626 -0.000627343, 0.635938 0.771662 -0.0109997, + 0.374463 0.927236 -0.0033708, 0.10624 0.99434 -0.000423716, -0.174068 0.984733 -0.00125953, -0.10055 0.994932 -0.00040218, + -0.358325 0.933591 -0.00324207, -0.452099 0.891604 -0.0254714, -0.67902 0.732713 -0.0454154, -0.684349 0.727024 -0.0556973, + -0.910493 0.408351 -0.0652014, -0.916972 0.398344 -0.022007, -0.449366 0.893332 -0.00535151, -0.153777 0.988105 -0.00045992, + -0.739652 0.672819 -0.0151672, -0.961291 0.274461 -0.0243014, -0.989551 0.101683 -0.102227, -0.979192 -0.201332 -0.0254587, + -0.990527 -0.12419 -0.0586002, -0.974717 -0.222186 -0.0236852, -0.925999 -0.376899 -0.0217599, -0.926382 -0.376001 -0.020954, + -0.925306 -0.379149 -0.00739927, -0.923758 -0.382948 0.00460524, -0.175976 0.983388 -0.0444958, + -0.186641 0.982423 -0.00304224, -0.156128 0.979499 -0.127302, -7.66502e-007 1.06843e-007 -1, -3.83251e-007 5.34215e-008 -1, + -1.91639e-007 2.66465e-008 -1, -7.66449e-007 1.071e-007 -1, 0.219271 -0.975664 0.000707147, 0.223449 -0.974702 -0.00524323, + 0.215081 -0.976574 0.00665749, 0.989974 -0.138654 -0.0269359, 0.989774 -0.139317 -0.0306373, 0.990161 -0.137989 -0.0232341, + -0.178091 0.984014 0.000618244, -0.181541 0.983375 -0.00416913, -0.174634 0.984619 0.0054056, -0.989692 0.141358 -0.0229756, + -0.98971 0.141192 -0.0232231, -0.989674 0.141524 -0.0227281, -0.219244 0.975048 -0.034835, -0.213285 0.974868 -0.0643588, + -0.225003 0.974344 -0.00527961, -0.989907 0.138201 -0.0313927, -0.989932 0.13808 -0.0311363, -0.989882 0.138322 -0.0316491, + 0.197209 -0.980072 -0.023838, 0.202762 -0.977756 -0.0536763, 0.191473 -0.981479 0.00602239, -0.989897 0.139255 -0.0266784, + -0.989474 0.141436 -0.0306275, -0.9903 0.137071 -0.0227287, 0.985964 -0.165086 -0.0249385, 0.985824 -0.165825 -0.0255555, + 0.975558 0.218468 -0.0236451, 0.842393 -0.538543 -0.0186084, 0.976107 0.215916 -0.024409, 0.844945 -0.534524 -0.0187719, + 0.59715 -0.80208 -0.00893042, 0.559286 -0.828493 -0.0282613, 0.284059 -0.955196 -0.0831278, 0.976475 0.214133 -0.025388, + 0.986231 -0.163523 -0.0246842, 0.541967 -0.840353 -0.00885291, 0.846903 -0.531421 -0.0186332, 0.226908 -0.973282 -0.0351369, + -0.182094 -0.983279 -0.00193316, -0.0593463 -0.997373 -0.041523, -0.471506 -0.881846 -0.00540871, + -0.00264329 -0.999996 -0.000614129, -0.568848 -0.822392 -0.00908337, -0.7776 -0.628576 -0.0151889, + -0.975549 -0.218455 -0.0241079, -0.818374 -0.574424 -0.0173731, -0.537873 -0.842989 -0.0078766, 0.2662 -0.963916 -0.00159721, + -0.8657 -0.499391 -0.034227, -0.977971 -0.206243 -0.0322024, -0.981779 -0.18383 -0.0481414, -0.985978 0.165052 -0.0246208, + -0.985703 0.16669 -0.0245684, -0.842432 0.538504 -0.0179465, -0.844934 0.534554 -0.01837, -0.597542 0.801788 -0.00893627, + -0.600979 0.799213 -0.00908525, -0.334148 0.942514 -0.0034902, -0.98641 0.162358 -0.0252005, -0.574195 0.81784 -0.0379183, + -0.847068 0.531158 -0.0186352, -0.220605 0.974696 -0.0360713, 0.237396 0.971411 -0.00213136, 0.117062 0.993124 -0.000583594, + 0.472103 0.881524 -0.00588769, 0.0622777 0.997192 -0.0415799, 0.569228 0.822131 -0.00894566, 0.778065 0.628007 -0.0148873, + 0.8186 0.574109 -0.0171081, 0.538339 0.842693 -0.00770703, -0.264236 0.95716 -0.118426, 0.855302 0.517741 -0.0200528, + 0.996256 -0.082755 -0.0250249, 0.996203 -0.0831443 -0.0258236, 0.958788 0.283742 -0.0146902, 0.875221 -0.483305 -0.020114, + 0.97182 0.23447 -0.0242668, 0.88139 -0.470824 -0.0384313, 0.629181 -0.777186 -0.0106643, 0.632489 -0.774488 -0.0112146, + 0.402513 -0.915399 -0.00521013, 0.928712 0.367263 -0.0510976, 0.995006 -0.0939135 -0.0338092, 0.656595 -0.753674 -0.0292898, + 0.889874 -0.450087 -0.0744655, 0.324795 -0.94578 -0.00308112, -0.0886673 -0.995841 -0.0209527, + 0.0578847 -0.998323 -0.000578003, -0.351602 -0.936144 -0.00325579, 0.0027423 -0.999996 -0.000543249, + -0.491791 -0.869272 -0.0500857, -0.725726 -0.687871 -0.0124621, -0.935233 -0.353617 -0.0171583, + -0.739908 -0.672068 -0.0293283, -0.451106 -0.890532 -0.058797, 0.352924 -0.935648 -0.00282373, -0.774941 -0.631005 -0.0360425, + -0.92318 -0.382564 -0.037207, -0.967279 -0.247144 -0.0573625, -0.999038 -0.0330963 -0.0287876, -0.994125 0.107672 -0.0110621, + -0.959222 0.281676 -0.023497, -0.810185 0.585198 -0.033831, -0.902066 0.431095 -0.0208152, -0.364163 0.929489 -0.0586147, + -0.686933 0.72258 -0.0774671, -0.611959 0.788789 -0.0575987, -0.994242 0.0992664 -0.0403543, -0.668039 0.743918 -0.0175802, + -0.888871 0.457405 -0.0262565, -0.407357 0.911637 -0.0545697, 0.11578 0.993275 -0.000115581, 0.101608 0.994795 -0.00765454, + -0.104168 0.994088 -0.0306231, 0.163372 0.986564 -0.000717206, 0.0593883 0.998101 -0.0163829, 0.397927 0.917417 -0.00106672, + 0.360741 0.932396 -0.0224334, 0.647257 0.761232 -0.0398053, 0.825336 0.563223 -0.0400034, 0.621632 0.782525 -0.0350345, + 0.660269 0.748369 -0.0631548, -4.17618e-007 2.95072e-007 -1, -1.09046e-006 -1.02326e-006 -1, -1.32006e-006 -2.91262e-007 -1, + -2.42694e-006 -2.97031e-007 -1, -3.24426e-007 -1.13146e-006 -1, -1.64791e-006 -1.06274e-006 -1, -1.27202e-007 3.93129e-007 -1, + -1.75631e-006 -1.10383e-007 -1, 0.193975 0.980527 -0.0306775, 0.188479 0.982068 0.00414032, 0.19923 0.977764 -0.0654571, + -0.990194 0.138038 -0.0214961, -0.990181 0.138167 -0.0212403, -0.990206 0.137908 -0.0217519, -0.141748 -0.989305 -0.0344077, + -0.161671 -0.986833 -0.0047621, -0.121644 -0.990508 -0.0640091, -0.989992 0.138626 -0.0264418, -0.990224 0.137453 -0.0237297, + -0.989751 0.139798 -0.0291537, -0.411526 0.911346 -0.00975905, -0.411579 0.911323 -0.00965756, -0.411473 0.911369 -0.00986054, + -0.989946 0.139494 -0.023427, -0.989927 0.139593 -0.0236249, -0.989964 0.139395 -0.0232292, 0.416002 -0.908994 -0.0259197, + 0.414134 -0.91016 -0.0101311, 0.417764 -0.907598 -0.0417016, 0.989896 -0.140006 -0.0224397, 0.99002 -0.139403 -0.0206662, + 0.989769 -0.140608 -0.0242131, -0.151 -0.988523 -0.00464143, -0.146952 -0.989061 -0.0127656, -0.155036 -0.987903 0.00348314, + -0.437785 0.898275 -0.0380302, -0.437298 0.898458 -0.039284, -0.436811 0.89864 -0.0405378, 0.990012 -0.139102 -0.0229345, + 0.990099 -0.138598 -0.0222441, 0.989925 -0.139606 -0.0236248, -2.3817e-007 4.20729e-008 -1, -6.38679e-007 1.00822e-007 -1, + -9.58018e-007 1.51233e-007 -1, -9.63356e-007 1.34175e-007 -1, -2.9293e-007 -3.18728e-008 -1, -5.68903e-007 7.38581e-009 -1, + -8.27918e-007 1.17776e-007 -1, -8.53354e-007 1.10787e-008 -1, 0.0998931 -0.994862 -0.0164668, 0.20554 -0.978637 -0.00482296, + 0.1988 -0.979492 -0.0327712, 0.15692 -0.983427 -0.090821, 0.990193 -0.137802 -0.022998, 0.990213 -0.137694 -0.0227617, + 0.990172 -0.13791 -0.0232343, -0.235584 0.970234 -0.0560911, -0.234602 0.970715 -0.0517223, -0.24089 0.970134 -0.0284844, + -0.11918 0.988653 -0.0914466, -0.123754 0.992313 -0.000369563, 0.150788 0.988566 -0.00113467, 0.14813 0.988968 -0.00089141, + 0.146056 0.989276 -0.000438206, -0.0616382 0.997629 -0.0306029, -0.124575 0.99221 -0.000124175, -0.164578 0.985497 -0.0413481, + 0.915754 0.401162 -0.0215439, 0.917738 0.396579 -0.0219601, 0.994739 0.0986002 -0.0277913, 0.78232 0.622665 -0.0162635, + 0.91325 0.406841 -0.0213362, 0.994405 0.102553 -0.0253346, 0.994246 0.103955 -0.0258505, 0.71705 0.6969 -0.0130124, + 0.422785 0.906219 -0.00452809, 0.507552 0.861588 -0.00749846, 0.448812 0.893608 -0.00577142, 0.729936 0.683375 -0.0138689, + 0.563769 -0.824873 -0.0418312, 0.566383 -0.824099 -0.00847049, 0.323883 -0.945911 -0.0187723, 0.774418 -0.632488 -0.0153657, + 0.555566 -0.829383 -0.0589071, 0.400788 -0.9153 -0.0399358, 0.276646 -0.960971 -0.00143649, 0.825683 -0.562801 -0.0387548, + 0.973232 -0.226688 -0.0378512, 0.94884 -0.312545 -0.0449149, 0.964142 -0.264348 -0.0234463, 0.821422 -0.57006 -0.01725, + 0.200921 -0.9775 -0.0642289, 0.208545 -0.977465 -0.0327246, 0.989964 -0.138658 -0.0273094, 0.990371 -0.136547 -0.0228284, + 0.989532 -0.140766 -0.0317897, -0.204893 0.977129 -0.0569039, -0.204156 0.977494 -0.0531509, -0.292464 0.9562 -0.0120619, + -0.303398 0.947308 -0.102752, -0.877748 0.476571 -0.0493812, -0.742055 0.670206 -0.0133567, -0.72376 0.689532 -0.0267569, + -0.556123 0.830099 -0.0407853, -0.747053 0.663417 -0.0422971, -0.713924 0.700095 -0.0134063, -0.746609 0.665062 -0.0163761, + -0.601252 0.799003 -0.00954843, -0.401877 0.915112 -0.0326351, -0.524735 0.851095 0.0170734, -0.34562 0.936526 -0.0588674, + -0.966664 -0.254956 -0.0236467, -0.858018 -0.51162 -0.045286, -0.989335 -0.145658 -0.000184378, -0.999025 0.040942 0.0165476, + -0.978716 -0.201723 0.037708, -0.989914 0.139129 -0.0267276, -0.980758 0.192774 -0.0308483, -0.953047 0.300207 -0.039721, + 0 0.998156 -0.0606972, 0 0.992632 -0.121171, 0 0.999181 -0.0404565, -0.953445 0.300667 -0.0232891, + -0.67863 -0.733434 -0.0391905, -0.800002 -0.599785 -0.0159558, -0.663053 -0.748488 -0.011238, -0.80132 -0.597966 -0.0180018, + -0.621745 -0.779956 -0.0714345, -0.39402 -0.918834 -0.0222129, -0.41981 -0.907595 -0.00561161, + -0.164396 -0.986394 -0.00114474, -0.124221 -0.992254 -0.000702654, -0.367798 -0.9299 -0.00337394, + -0.0426476 -0.998246 -0.0410577, 0.0406693 -0.998356 -0.0403846, -2.6303e-007 3.17671e-007 -1, -1.54841e-006 -4.52915e-007 -1, + -3.14967e-006 7.11895e-007 -1, -1.96569e-006 4.28332e-007 -1, -2.96128e-006 2.29221e-007 -1, -1.67614e-006 1.32814e-008 -1, + -7.84409e-007 -5.60716e-007 -1, -2.11739e-006 -5.85539e-007 -1, -3.07859e-006 1.63412e-006 -1, -3.33017e-006 -8.19436e-007 -1, + -2.48999e-006 -1.52882e-006 -1, -0.79972 0.598742 -0.0442274, -0.774294 0.632335 -0.0249043, -0.785296 0.61796 -0.0378827, + -0.764138 0.643356 -0.0467681, -0.788856 0.610919 -0.0669571, -0.744331 0.663417 -0.0764786, -0.685731 0.726388 -0.0462018, + -0.662457 0.747861 -0.0430693, -0.552375 0.83228 -0.0468236, -0.376012 0.922035 -0.0920118, -0.618912 0.78513 -0.0227871, + -0.345078 0.938548 0.00703332, -0.335154 0.940209 -0.0606498, 0.201838 0.979418 -0.00133695, 0.588398 0.80853 -0.00816097, + 0.298084 0.954539 -0.000550252, 0.655036 0.755512 -0.0114166, 0.278856 0.960331 -0.00194624, 0.557765 0.829953 0.00876331, + 0.768918 0.638881 0.0244132, 0.854545 0.518241 -0.0343453, 0.864522 0.500076 -0.050259, 0.974363 0.221531 -0.0392601, + 0.984938 0.170138 -0.030823, 0.998128 0.044994 -0.0414194, 0.996695 0.0730333 -0.035569, 0.943645 0.330428 -0.0187616, + 0.99234 0.119516 -0.0312747, -0.961745 0.27289 -0.0240466, -0.844569 0.535094 -0.0194249, -0.860334 0.509361 -0.019418, + -0.596928 0.802226 -0.0105231, -0.970393 0.240399 -0.0233561, -0.940636 0.338537 -0.0244197, -0.79976 0.600116 -0.0156326, + -0.507561 0.861589 -0.0068728, -0.208436 0.978034 -0.00199473, -0.097227 0.995262 -0.000498723, + -0.138631 0.990343 -0.00153272, -0.532763 0.846232 -0.00743628, -0.990036 0.13876 -0.0239605, -0.990127 0.138402 -0.0222213, + 0.210669 -0.977134 -0.0287669, 0.207137 -0.9783 -0.00475711, 0.214075 -0.975391 -0.0527596, 0.989771 -0.139808 -0.0284252, + 0.997016 -0.0759161 -0.0140155, 0.997437 -0.0532493 -0.0477807, 0.989712 -0.14126 -0.0227297, 0.824429 0.565698 -0.0174101, + 0.914312 0.401313 -0.054599, 0.832753 0.552923 -0.0282579, 0.922008 0.385191 -0.0391159, 0.84174 0.539517 -0.0198869, + 0.939729 0.341095 -0.0237452, 0.978674 0.203869 -0.0252071, 0.982131 0.182035 -0.0477609, 0.999237 0.0285383 -0.0266541, + 0.990999 0.133611 -0.00834728, 0.998513 -0.0463143 -0.0287478, -0.0779732 0.996956 -0.000155947, + -0.0456195 0.998795 -0.0181116, 0.265408 0.964135 -0.00180076, 0.0517202 0.998662 -0.000415517, 0.338366 0.941007 -0.00373978, + 0.579083 0.815223 -0.00856574, 0.658693 0.752318 -0.0118701, 0.62576 0.779947 -0.0103935, 0.313059 0.94973 -0.00249671, + -0.194912 0.980821 0.000639285, -0.191579 0.981459 0.0059301, -0.198237 0.980143 -0.00465155, 0.988721 -0.146607 -0.0306047, + 0.988988 -0.145296 -0.0281435, 0.980036 -0.196962 -0.0271054, 0.969611 -0.243451 -0.0241913, -0.996499 0.0798177 -0.0248911, + -0.969594 -0.243581 -0.0235779, -0.99895 -0.0382116 -0.0252816, -0.979257 -0.201097 -0.0248234, + -0.834897 -0.549608 -0.0296188, -0.807053 -0.590283 -0.0151841, -0.537498 -0.840907 -0.0630204, + -0.588048 -0.808784 -0.00823244, -0.142512 -0.986247 -0.0837043, -0.999467 0.020491 -0.0254226, + -0.951454 -0.306897 -0.0234408, -0.526555 -0.84812 -0.0585888, -0.798495 -0.601746 -0.0175142, + -0.0932671 -0.994261 -0.0524024, 0.209099 -0.977026 -0.0412038, 0.288562 -0.957455 -0.00345544, + 0.556216 -0.831002 -0.00775678, 0.146556 -0.989202 -0.00102287, 0.886263 -0.462762 -0.0197127, 0.661082 -0.750218 -0.0119536, + 0.954946 -0.29582 -0.0238486, 0.888739 -0.457973 -0.0200821, 0.628247 -0.77794 -0.0107712, -0.209857 -0.977732 -0.000836876, + 0.890596 -0.454336 -0.0204227, -0.990003 0.138953 -0.0242187, -0.989924 0.139679 -0.0232282, -0.996404 0.0809861 -0.0248887, + -0.999487 0.0192642 -0.0255888, -0.989505 0.14246 -0.0242064, -0.989375 0.1436 -0.0227207, -0.218228 0.975492 -0.0281508, + -0.19975 0.979836 -0.00458367, -0.236505 0.970254 -0.0516921, 0.990226 -0.137348 -0.0242669, 0.962247 -0.269341 -0.0391962, + 0.98124 -0.191226 -0.0245232, 0.990374 -0.136524 -0.0228301, -0.974639 -0.221512 -0.0318069, -0.966968 -0.253755 -0.0241015, + -0.805635 -0.590003 -0.0533716, -0.998743 -0.0428925 -0.0259411, -0.787219 -0.615266 -0.0416374, + -0.525672 -0.850656 -0.00734331, -0.530242 -0.846808 -0.0419487, -0.255943 -0.963437 -0.0792627, + -0.977878 -0.207767 -0.0242474, -0.528906 -0.848651 -0.00710693, -0.783871 -0.620705 -0.0164616, + -0.141206 -0.988507 -0.0539888, 0.347254 -0.935833 -0.0602649, 0.261333 -0.964284 -0.0431503, 0.539427 -0.838824 -0.0734392, + 0.253439 -0.964218 -0.0778, 0.601416 -0.796106 -0.0671842, 0.831825 -0.548605 -0.0842561, 0.872346 -0.487198 -0.0406278, + 0.596621 -0.801661 -0.0371946, -0.244097 -0.969751 -0.000732237, 0.907495 -0.419464 -0.0224277, 0.955225 -0.294892 -0.0241742, + -3.45768e-007 2.46233e-007 -1, -3.64524e-007 1.4923e-007 -1, -7.29048e-007 2.98459e-007 -1, -7.6656e-007 1.04452e-007 -1, + 0.990587 -0.134978 -0.0227503, 0.990226 -0.136894 -0.0266952, 0.989845 -0.138808 -0.0306397, -0.208536 0.977738 -0.023252, + -0.202896 0.97918 0.00628045, -0.213988 0.97541 -0.0527634, 0.990077 -0.138005 -0.0264999, 0.989707 -0.139791 -0.0306351, + 0.990427 -0.136215 -0.0223641, -0.218945 0.975737 0.000706162, -0.214761 0.976644 0.00664765, -0.223118 0.974777 -0.00523536, + -0.99019 0.137782 -0.0232344, -0.989979 0.138621 -0.0269355, -0.989754 0.139458 -0.0306362, 0.206224 -0.978505 0.000800958, + 0.207058 -0.978317 -0.00475539, 0.205383 -0.978661 0.00635728, -6.05795e-007 8.73457e-008 -1, -6.05782e-007 8.75092e-008 -1, + -6.05808e-007 8.71822e-008 -1, 0.205865 -0.976821 -0.058649, 0.206627 -0.976315 -0.0641425, 0.205096 -0.977297 -0.0531536, + -0.989222 0.1429 -0.0319206, -0.989724 0.140405 -0.0270874, -0.990195 0.137907 -0.0222535, -0.205879 0.976812 -0.0587518, + -0.205096 0.977297 -0.0531535, -0.206656 0.976295 -0.0643482, 0.989775 -0.140143 -0.0265793, 0.990195 -0.137907 -0.0222542, + 0.98933 -0.142375 -0.0309038, -0.289321 -0.957212 0.00617666, -0.219706 -0.975562 0.00269619, 0.967836 -0.250789 -0.0199594, + 0.859838 -0.507213 -0.0584194, 0.875843 -0.477604 -0.0692344, -0.221466 -0.975167 -0.00155177, 0.818134 -0.574794 0.0163784, + 0.937585 -0.347001 0.0229279, 0.874136 -0.485397 0.0166094, 0.994088 0.10569 0.0248808, 0.981708 0.187371 0.0337797, + 0.963167 0.267817 0.0241627, 0.986705 -0.157026 0.041905, 0.821618 0.567692 0.0516635, 0.845357 0.532203 0.0461645, + 0.588745 0.80825 0.0105978, 0.615003 0.786892 0.0507268, 0.39426 0.918985 0.00499799, 0.785396 0.617369 0.0448124, + 0.55252 0.82644 0.10825, 0.340059 0.939041 0.0506119, 0.0857102 0.99632 0.000214373, 0.142546 0.989788 0.000854624, + -0.216759 0.976223 0.00227371, -0.187306 0.981128 0.0479994, -0.52606 0.850402 0.00878931, -0.416304 0.908671 0.031756, + 0.106605 0.992433 0.0609245, 0.381093 0.917291 0.115518, -0.300237 0.950422 0.0809677, -0.55102 0.834444 0.0089264, + -0.527792 0.849341 0.00749406, -0.577246 0.816517 0.00934361, -0.479979 0.877254 0.00672405, -0.361666 0.932299 0.00392624, + -0.384506 0.923112 0.00442781, -0.0796795 0.996821 0.00023906, -0.135774 0.990739 0.000882995, 0.177752 0.984075 0.00088873, + 0.177095 0.984193 0.00118149, 0.424327 0.9055 0.00396752, -0.318058 0.948068 0.00263223, 0.14812 0.988487 0.0308901, + -0.11803 0.99301 0.000354473, 0.471147 0.881287 0.0367832, 0.716833 0.697103 0.0140955, 0.644871 0.764222 0.010274, + 0.835019 0.54993 0.0178871, 0.663137 0.747299 0.0423613, 0.871046 0.490792 0.0200687, 0.964 0.264828 0.0238865, + 0.999596 -0.0115226 0.0259894, 0.998817 -0.0204728 0.0441022, 0.963674 0.266019 0.0238109, 0.856867 0.515196 0.0187754, + 0.442832 0.889343 0.113884, 0.997802 0.0611101 0.0256361, 0.963358 0.267134 0.0241077, 0.96967 -0.243179 0.0245741, + 0.952638 -0.298529 0.0579772, 0.986376 -0.145599 0.0765727, 0.932687 -0.357444 0.0482605, 0.906677 -0.421288 0.021307, + 0.899958 -0.435526 0.0198186, 0.903899 -0.426061 0.0379403, 0.51232 0.85667 0.0603775, 0.502281 0.858808 0.100814, + 0.515648 0.855919 0.0388667, 0.519964 0.85411 0.011595, 0.519198 0.854621 0.00747417, 0.516757 0.855919 0.01912, + -0.988806 0.148248 0.0168681, -0.970648 0.239962 0.0161245, -0.976327 0.216157 0.00781095, -0.953609 0.300314 0.0210007, + -0.949234 0.312072 -0.0395602, -0.976751 0.213003 0.0242233, -0.9728 0.226488 -0.0486069, -0.918426 0.38281 -0.0997477, + -0.992365 0.120602 0.0258277, -0.993467 -0.111248 0.0254272, -0.990379 -0.135964 0.0257507, -0.912974 -0.407426 0.0219639, + -0.981131 -0.191779 0.0245683, -0.877282 -0.479581 0.0194461, -0.6611 -0.750215 0.0111177, -0.725952 -0.687594 0.0144142, + -0.441903 -0.897046 0.00548635, -0.411326 -0.911474 0.00505038, -0.686937 -0.726614 0.0122635, -0.889166 -0.457126 0.0204716, + -0.36194 -0.932197 0.00301085, -0.148711 -0.98888 0.00104136, -0.129672 -0.991557 0.000518727, 0.0868163 -0.996224 0.00034725, + -0.0869959 -0.996209 0.000261265, 0.157995 -0.987276 0.0180159, 0.417429 -0.907354 0.0496211, 0.347622 -0.93763 0.00295474, + 0.516508 -0.852802 0.0771306, 0.557121 -0.830088 0.0238553, 0.405471 -0.909977 0.0868035, 0.161732 -0.986835 0.000647541, + 0.591898 -0.803725 0.0606863, 0.607142 -0.794528 0.0101733, 0.583701 -0.81157 0.0254327, 0.569633 -0.821275 0.0320234, + 0.470081 -0.879245 0.0771485, 0.374524 -0.926015 0.047192, 0.119943 -0.992329 0.0299399, 0.0972775 -0.995257 0.000552516, + -0.159118 -0.987259 0.00063648, -0.0916956 -0.99563 0.0177035, 0.38894 -0.92125 0.00486772, 0.0536526 -0.99856 0.000161057, + -0.1078 -0.994172 0.000807679, -0.396429 -0.91727 0.0382048, -0.320399 -0.94401 0.0786782, -0.612123 -0.789471 0.045178, + -0.689776 -0.723918 0.0123366, -0.865299 -0.50091 0.0186063, -0.843732 -0.536481 0.0174607, -0.996609 -0.078093 0.0259117, + -0.993825 -0.0958101 0.0559673, -0.670828 -0.741524 0.0114822, -0.380401 -0.924812 0.00418888, -0.894142 -0.447292 0.020972, + -0.989658 -0.141117 0.0257565, -0.942919 0.332207 0.0233044, -0.899592 0.43222 0.06261, -0.978447 0.176596 0.107031, + -0.853717 0.518918 0.0434868, -0.861716 0.506904 0.0222312, -0.938672 0.342994 0.0353481, -0.872799 0.486202 0.0427679, + -0.872322 0.487553 0.0367025, -0.89235 0.446069 0.068798, -0.429487 -0.903027 0.00917247, -0.425503 -0.904861 0.0131691, + -0.422381 -0.906182 0.0206971, 0.463169 0.885812 0.0284871, 0.453385 0.891218 0.0131548, 0.472787 0.880087 0.0438093, + 0.990012 -0.139441 0.0208006, 0.990024 -0.138706 0.024763, 0.99002 -0.137968 0.028725, -0.424782 -0.904813 0.0295543, + -0.449154 -0.890906 0.0674359, -0.399467 -0.916709 -0.00839297, -0.990046 0.138626 0.0243252, -0.989576 0.141224 0.0282174, + -0.990495 0.136025 0.0204325, -0.474642 -0.877638 0.066838, -0.479862 -0.876416 0.0403447, -0.484732 -0.874553 0.013822, + -0.989794 0.140489 0.0239048, -0.989557 0.142885 0.0190048, -0.990001 0.13809 0.028804, 0.460359 0.887555 0.01778, + 0.455658 0.890106 -0.00934601, 0.464708 0.884325 0.0448925, -0.990167 0.136817 0.0291596, -0.989944 0.139284 0.02473, + -0.989695 0.141747 0.0202996, 0.873477 -0.485238 0.039777, 0.995388 -0.0923742 0.02589, 0.871814 -0.489426 0.0200518, + 0.989906 -0.137903 0.0327065, 0.934393 0.355573 0.0218705, 0.965359 0.259798 0.0242142, 0.782279 0.622732 0.0156458, + 0.7849 0.619418 0.0159186, 0.567194 0.823536 0.00894721, 0.998608 -0.0460889 0.0256511, 0.882406 -0.467931 0.0490001, + 0.788127 0.615302 0.0160947, 0.958225 0.285007 0.0239799, 0.494 0.86944 0.00624671, 0.0294338 0.999342 0.0212025, + 0.232697 0.972547 0.0019714, -0.230669 0.969886 0.0781816, 0.179464 0.983763 0.00174798, -0.320496 0.94602 0.0482453, + -0.642753 0.765136 0.0378979, -0.886088 0.463069 0.0203801, -0.887757 0.459873 0.0200841, -0.616072 0.78762 0.0104782, + -0.274293 0.961643 0.00232556, 0.521907 0.852975 0.00679173, -0.889797 0.455938 0.0195213, -0.619397 0.785015 0.00992031, + -0.992623 0.118724 0.0245746, -0.986875 0.159589 0.0246963, -0.942669 -0.33151 0.0384323, -0.965508 -0.259284 0.0237836, + -0.801443 -0.591537 0.0881682, -0.790984 -0.609342 0.0551946, -0.517464 -0.848364 0.111848, -0.998586 0.0467449 0.025328, + -0.787961 -0.615513 0.0161455, -0.958113 -0.285302 0.0249364, -0.472584 -0.880531 0.0364635, -0.087985 -0.995902 0.0209107, + -0.176815 -0.98337 0.0414663, 0.17381 -0.984778 0.0013905, -0.179545 -0.983749 0.00156859, 0.31593 -0.947463 0.0500246, + 0.6309 -0.77579 0.0106939, 0.628186 -0.776921 0.042143, 0.270283 -0.960912 0.0599612, -0.521839 -0.853021 0.00626885, + 0.618864 -0.785427 0.0105308, 0.871227 -0.48881 0.045045, 0.984961 -0.171045 0.0244022, 0.807509 -0.589732 0.012094, + 0.975629 -0.216936 0.032972, 0.959901 0.279364 0.0233778, 0.982994 0.182001 0.0244802, 0.821508 0.569884 0.0188947, + 0.823576 0.56692 0.0180242, 0.639263 0.768902 0.0114735, 0.991355 -0.128714 0.0254611, 0.840011 -0.537432 0.0744834, + 0.826203 0.563097 0.0176248, 0.977655 0.208785 0.0244653, 0.576244 0.816944 0.0233511, 0.200871 0.978808 0.0398272, + 0.341734 0.93979 0.0035798, -0.121326 0.992613 0.000485422, 0.34859 0.933933 0.0790843, -0.220537 0.975377 0.00162079, + -0.548106 0.836371 0.00792913, -0.8546 0.519035 0.0161663, -0.801367 0.597958 0.0160039, -0.552697 0.833343 0.0080406, + -0.143617 0.989085 0.0329464, 0.549796 0.835258 0.00825511, -0.826917 0.561976 0.0197677, -0.555969 0.831161 0.00834779, + -0.94465 0.327297 0.0226352, -0.982462 0.185641 0.0175015, -0.999639 -0.00853175 0.0254819, -0.862652 -0.501444 0.0662275, + -0.984091 -0.176498 0.0203341, -0.946244 -0.321784 0.0328176, -0.488162 -0.871547 0.0458657, -0.823781 -0.565118 0.045021, + -0.982757 0.182088 0.0321267, -0.980454 -0.194107 0.0321454, -0.875149 -0.483292 0.0233056, -0.51841 -0.855119 -0.00483058, + -0.339893 -0.940462 0.00204055, -0.301753 -0.953354 0.00787725, -0.327554 -0.944827 0.00311328, + -0.0604015 -0.997684 0.0312867, -0.264214 -0.964262 0.0197542, 0.222272 -0.970684 0.0914749, 0.179696 -0.983462 0.0226136, + 0.504488 -0.862892 0.0301513, 0.666219 -0.743542 0.0574239, 0.359927 -0.931014 0.0605442, 0.507991 -0.856765 0.0888723, + -0.089267 -0.996004 0.00267937, -0.0896534 -0.995973 0.00030374, -0.0900392 -0.995936 -0.00207189, -0.9898 0.140075 0.0259941, + -0.990158 0.138164 0.02229, -0.989424 0.141983 0.0296978, 0.122206 0.992501 -0.00275105, -0.990122 0.137439 0.0277375, + -0.990028 0.138631 0.0250112, -0.989926 0.139822 0.0222847, -0.627728 -0.775722 0.0649091, -0.638777 -0.768268 0.0415653, + -0.649365 -0.76026 0.0181915, -0.990404 0.135522 0.027095, -0.990238 0.137447 0.0231643, -0.990054 0.13937 0.0192332, + 0.650613 0.758968 0.0258741, 0.64989 0.759818 0.0178807, 0.651294 0.758069 0.0338659, 0.989998 -0.139231 0.0227808, + 0.99005 -0.138478 0.025011, 0.990096 -0.137724 0.0272409, 0.135521 0.99043 0.0261156, 0.146566 0.988009 0.0485434, + 0.12439 0.992227 0.00367131, -0.67329 -0.739083 0.0209156, -0.676947 -0.735973 0.00928409, -0.669527 -0.742075 0.0325439, + 0.989972 -0.138211 0.0292186, 0.989902 -0.138902 0.0282753, 0.989832 -0.139593 0.027332, 0.473209 0.880847 0.0134932, + 0.474016 0.880463 0.00971568, 0.566168 0.824228 0.0101341, 0.563937 0.825786 0.0072174, 0.989684 -0.140228 0.0293482, + 0.989662 -0.140505 0.0287835, 0.989639 -0.140781 0.0282187, -0.508822 -0.860683 -0.0180228, -0.467811 -0.883483 0.0247172, + -0.471067 -0.881007 0.0438496, -0.534073 -0.842709 0.0678791, -0.982166 -0.185231 0.0322439, -0.898304 -0.437683 0.0385138, + -0.973935 -0.220951 0.0512942, -0.886666 -0.461326 0.0316624, -0.866273 -0.499194 0.0193876, -0.964051 -0.264676 0.0234984, + -0.802304 -0.595114 0.0463319, -0.772299 -0.635001 0.0180958, -0.631126 -0.775047 0.0313535, -0.748467 -0.658876 0.0753648, + -0.490863 -0.871217 0.00589341, -0.910489 0.413528 -0.00221686, -0.971144 0.237981 -0.0156395, -0.885863 0.462272 -0.0393774, + -0.426556 0.903961 0.0300882, -0.861569 0.507318 0.0181023, -0.993623 0.109755 0.0258447, -0.999424 -0.0218312 0.0259852, + -0.995915 0.0865976 0.0255821, 0.183168 0.98308 0.00164579, 0.425666 0.904846 0.00782677, 0.360579 0.932722 0.00360451, + 0.221049 0.975262 0.00154683, -0.124014 0.99228 0.000496092, -0.106777 0.994283 0.000676988, 0.123277 0.992372 0.00049357, + 0.395375 0.918512 0.00385164, -0.204649 0.978023 0.0398678, -0.427829 0.903844 0.00532156, -0.591242 0.806424 0.0106425, + -0.593417 0.804841 0.00929801, -0.43517 0.893125 0.113818, -0.431742 0.901022 0.0419244, 0.45744 0.889145 0.0130437, + 0.458248 0.888775 0.00939237, 0.990097 -0.137419 0.0286904, 0.990089 -0.137525 0.0284611, 0.990081 -0.137631 0.0282318, + -0.421052 -0.906865 0.0176302, -0.493516 -0.869391 0.024529, -0.497038 -0.866679 0.0426784, -0.413119 -0.909774 0.0405525, + -0.26164 -0.965162 0.00253929, -0.265789 -0.964027 0.00301504, -0.294329 -0.954863 0.0400832, -0.126715 -0.991939 0.000761331, + -0.150479 -0.985931 0.0727795, -0.32564 -0.938201 0.117205, -0.0827124 -0.98918 0.121166, 0.156316 -0.987707 0.000781554, + 0.132145 -0.989821 0.0528328, 0.417808 -0.908524 0.00459585, 0.283743 -0.955203 0.0841295, 0.519714 -0.853988 0.0245387, + 0.715258 -0.698743 0.0128253, 0.781298 -0.623945 0.0163384, 0.935269 -0.35325 0.0220598, 0.92185 -0.386932 0.0218073, + 0.751954 -0.659039 0.0152234, 0.568195 -0.822855 0.00796259, 0.950587 -0.309493 0.0244485, 0.999401 -0.0228719 0.0259845, + 0.998427 -0.0498317 0.0256859, 0.962381 0.270608 0.0243929, 0.998936 0.0332083 0.032016, 0.933199 0.357723 0.0342513, + 0.81149 0.584098 0.0177078, 0.751021 0.66013 0.0139708, 0.648948 0.76077 0.00974318, 0.762558 0.646144 0.031659, + 0.934405 0.350187 0.0652381, -0.923784 -0.3823 0.021663, -0.905003 -0.425048 0.0174153, -0.942567 -0.333325 0.0214713, + -0.85701 -0.514649 0.0258819, -0.921723 -0.387088 0.0242982, -0.95 -0.310722 0.0308445, -0.95211 -0.30404 0.0323497, + -0.811519 -0.583899 0.0223375, -0.752032 -0.657653 0.04404, -0.613897 -0.789375 0.00431252, -0.60907 -0.786026 0.105812, + -0.806516 -0.589463 0.0454508, -0.61009 -0.790168 0.0585158, 0.0131444 -0.99813 0.0596924, 0.319605 -0.947506 -0.00924153, + -0.0560357 -0.998429 0.000767638, 0.409001 -0.910365 0.0628866, 0.621145 -0.783296 0.0250053, 0.0827862 -0.989126 0.121557, + 0.448161 -0.890533 0.0781243, 0.688402 -0.723502 0.0514612, 0.87925 -0.474069 0.0466701, 0.808968 -0.587352 0.0242745, + 0.950948 -0.305829 0.0465468, 0.938423 -0.345102 0.0163422, 0.881409 -0.469149 0.054931, 0.673171 -0.739387 0.0121291, + 0.944008 -0.326891 0.0446292, -0.968649 -0.247297 0.0237294, -0.960271 -0.278036 0.0240069, -0.999011 0.0357061 0.0264812, + -0.803894 -0.594513 0.0175743, -0.997401 -0.0674127 0.0254463, -0.999682 0.0014377 0.025179, -0.938643 -0.344208 0.0216884, + -0.734221 -0.678345 0.0276966, -0.371677 -0.927132 0.0477719, -0.480058 -0.877208 0.00712864, -0.400908 -0.911648 0.0903944, + -0.743429 -0.668665 0.0141395, -0.98996 0.138698 0.027246, -0.989962 0.138275 0.0292354, 0.472222 0.881017 0.0285545, + 0.470321 0.882393 0.0134108, 0.474011 0.879434 0.0436915, 0.978632 -0.20541 0.00927615, 0.97307 -0.225704 0.0468181, + 0.989954 -0.138792 0.0269895, 0.989877 -0.139093 0.0282255, 0.651583 -0.757456 0.0412352, 0.805898 -0.591834 0.0161583, + 0.584599 -0.81127 0.00922073, 0.813635 -0.580591 0.0302036, 0.821769 -0.569531 0.0181707, 0.677945 -0.731606 0.0717165, + 0.890055 -0.455393 0.0204877, 0.904636 -0.426164 0.00429471, 0.94531 -0.325333 0.0233873, 0.912286 -0.407179 0.0440372, + 0.975381 -0.219063 0.0253724, -0.342847 -0.937941 0.0521755, -0.317203 -0.948354 0.00253772, -0.0044506 -0.99999 0.00047122, + -0.266778 -0.95643 0.118625, 0.0863202 -0.994816 0.0537544, 0.413081 -0.91068 0.00507132, 0.361965 -0.932188 0.00272033, + 0.392258 -0.917883 0.0602069, -0.000207383 -0.992631 0.121173, -0.99032 0.136102 0.0272474, -0.981265 0.190829 0.0265238, + -0.954838 0.296164 0.0238955, -0.990129 0.137182 0.0287284, -0.444442 -0.895805 0.00197981, -0.452434 -0.891701 0.0131273, + -0.436359 -0.899726 -0.00916804, 0.999471 -0.0199951 0.0256562, 0.996446 -0.0806666 0.0242684, 0.989733 -0.141019 0.0232705, + 0.989584 -0.142446 0.0207915, -0.86603 0.495022 0.0703261, -0.935612 0.350917 0.0385672, -0.873963 0.483862 0.0454628, + -0.667707 0.742773 0.0495497, -0.528617 0.845925 0.0705331, -0.340822 0.939909 0.0202989, -0.260105 0.965579 0.00182259, + -0.247969 0.968768 0.000357581, -0.834907 0.550109 0.0176303, -0.325394 0.944943 0.034658, -0.65601 0.75467 0.0111523, + 0.182032 0.982542 0.0384256, 0.510937 0.8596 0.00557549, 0.630161 0.776073 0.0246475, 0.474247 0.88039 0.00189878, + 0.765296 0.640998 0.0586761, 0.511106 0.858276 0.0461745, 0.971987 0.232318 0.0356294, 0.84277 0.5364 0.044867, + 0.998824 0.040932 0.0259865, 0.966627 0.255042 0.0242118, 0.819883 0.572272 0.0172188, 0.135992 0.983359 0.120466, + 0.967348 0.252295 0.0241836, -0.465564 -0.885012 0.00190708, -0.47199 -0.881501 0.0134586, -0.459051 -0.888358 -0.00964478, + 0.998593 -0.0462332 0.02597, 0.998631 -0.0460891 0.0247401, 0.990434 -0.136007 0.023287, 0.990305 -0.137342 0.0208065, + 0.973734 0.224607 0.0373364, 0.998717 0.04366 0.0256424, 0.984403 0.174112 0.0252187, 0.8284 0.558746 0.0394434, + 0.78099 0.621248 0.064071, 0.527764 0.848338 0.0422841, 0.760089 0.649732 0.010641, 0.219128 0.975691 0.00306773, + 0.210048 0.974397 0.0801947, 0.964676 0.262387 0.0235377, 0.530934 0.847379 0.00757941, 0.811788 0.583702 0.0170645, + 0.0888157 0.995388 0.0362601, -0.216124 0.975434 0.0426516, -0.354306 0.935122 0.00384003, -0.56625 0.824193 0.00814576, + -0.276237 0.961089 0.00119722, -0.87444 0.484737 0.0196145, -0.664637 0.747069 0.0120295, -0.935452 0.352678 0.0233953, + -0.969184 0.245047 0.0252055, -0.871641 0.489764 0.0193092, -0.62383 0.781493 0.0102338, 0.103626 0.994616 0.000414896, + -0.967969 0.249834 0.0248697, -0.869216 0.494061 0.019142, -0.989958 0.138762 0.0269899, -0.989797 0.139661 0.0282236, + -0.480797 -0.876829 0.00210511, -0.473366 -0.880812 -0.00970877, -0.488128 -0.872661 0.0139185, -0.98979 0.13965 0.0285195, + -0.989789 0.13972 0.028223, -0.989792 0.13958 0.0288159, 0.468016 0.881961 0.0557351, 0.469245 0.880511 0.0671491, + 0.466724 0.883292 0.0443137, 0.990072 -0.139085 0.0203065, 0.990058 -0.139229 0.0200129, 0.990044 -0.139372 0.0197193, + -0.470086 -0.882456 0.0170703, -0.465518 -0.884987 -0.00954781, -0.474308 -0.879275 0.0436758, 0.989937 -0.140043 0.0203037, + 0.990107 -0.138119 0.0247091, 0.990255 -0.136192 0.029114, -0.468741 -0.883334 0.00191398, -0.467161 -0.88412 -0.00958149, + -0.470257 -0.882428 0.0134092, -0.990032 0.137886 0.0287141, -0.99001 0.138139 0.0282298, -0.990053 0.137633 0.0291984, + 0.472165 0.881048 0.0285552, 0.470264 0.882424 0.0134091, 0.473955 0.879464 0.0436945, 0.989619 -0.142273 0.0202971, + 0.989825 -0.140209 0.0242634, 0.99001 -0.138143 0.0282292, 0.162816 3.66601e-008 -0.986656, -0.0328188 4.23692e-008 -0.999461, + -2.25847e-007 4.90206e-008 -1, 0.352188 9.78606e-008 -0.935929, 0.195102 7.46035e-008 -0.980783, + 0.683503 2.97075e-007 -0.729948, 0.528021 2.1264e-007 -0.849231, 0.555589 1.92825e-007 -0.831457, + 0.831486 2.92667e-007 -0.555546, 0.707086 2.10893e-007 -0.707128, 0.382719 1.18941e-007 -0.923865, + 0.0328183 1.07742e-007 -0.999461, 0.227177 5.55675e-008 -0.973853, 0.582559 1.1428e-007 -0.812788, + 0.820376 2.3795e-007 -0.571824, 0.729907 1.47183e-007 -0.683546, 0.412837 9.21878e-008 -0.910805, + 0.918394 2.28772e-007 -0.395667, 0.973833 1.97975e-007 -0.227263, 0.923862 2.75729e-007 -0.382726, + 0.999462 2.498e-007 -0.0327848, 0.980775 2.28915e-007 -0.195144, 0.980771 1.85765e-007 0.195161, + 0.935911 1.6481e-007 0.352238, 0.986654 2.88173e-007 0.162828, 0.923874 1.94258e-007 0.382697, 0.84932 1.97649e-007 0.527879, + 1 2.4847e-007 4.24988e-006, 0.729869 7.72154e-008 0.683587, 0.831527 1.57649e-007 0.555485, 0.935907 2.09615e-007 -0.352248, + 0.582536 1.03556e-007 0.812805, 0.707006 1.13219e-007 0.707208, 0.555674 1.23918e-007 0.8314, 0.413082 1.23973e-008 0.910694, + 0.194834 4.3658e-008 0.980836, 0.0326948 7.31839e-009 0.999465, 0.226942 2.99103e-009 0.973908, + 0.382864 3.96372e-008 0.923805, 0.849279 2.20652e-007 -0.527945, 0.999462 1.47568e-007 0.0327934, + 0.973829 1.87821e-007 0.227283, 0.986657 2.50452e-007 -0.162814, 0.910846 2.15496e-007 0.412746, + 0.812837 1.31981e-007 0.582491, 0.683378 1.87665e-007 0.730065, 0.35223 7.8654e-008 0.935914, 1.74682e-007 -7.45027e-008 1, + 0.162515 -1.3076e-008 0.986706, 0.528219 1.17953e-007 0.849108, -0.0326944 -1.06494e-007 0.999465, + -0.162515 -1.34117e-007 0.986706, -0.352229 -1.26652e-007 0.935914, -0.194833 -1.17285e-007 0.980836, + -0.683378 -1.33658e-007 0.730065, -0.528219 -1.45862e-007 0.849108, -0.555674 -1.71393e-007 0.8314, + -0.831527 -2.06852e-007 0.555485, -0.707005 -1.94894e-007 0.707208, -0.382863 -9.15022e-008 0.923805, + -0.226942 -5.06768e-008 0.973908, -0.582536 -2.28352e-007 0.812805, -0.820416 -2.11576e-007 0.571767, + -0.729869 -1.78784e-007 0.683587, -0.413082 -1.36182e-007 0.910694, -0.918409 -2.31885e-007 0.395632, + -0.973829 -2.52542e-007 0.227283, -0.923874 -1.37866e-007 0.382698, -0.999462 -3.00739e-007 0.0327939, + -0.980771 -2.55316e-007 0.195162, -0.980775 -2.07137e-007 -0.195143, -0.935907 -2.0524e-007 -0.352248, + -0.986657 -1.85805e-007 -0.162813, -0.923862 -2.1822e-007 -0.382725, -0.849279 -2.41697e-007 -0.527945, + -1 -1.98176e-007 4.82884e-006, -0.729907 -2.17843e-007 -0.683546, -0.831486 -2.12083e-007 -0.555545, + -0.93591 -2.53569e-007 0.352238, -0.582559 -1.46245e-007 -0.812788, -0.707086 -1.59847e-007 -0.707127, + -0.555589 -1.2219e-007 -0.831457, -0.412838 -1.11436e-007 -0.910805, -0.195102 2.65053e-008 -0.980783, + -0.227178 3.94177e-008 -0.973853, -0.382719 -2.53154e-008 -0.923865, -0.84932 -1.82136e-007 0.527879, + -0.999462 -1.97165e-007 -0.0327844, -0.973833 -2.37419e-007 -0.227263, -0.986654 -1.53167e-007 0.162829, + -0.910826 -1.67803e-007 -0.412791, -0.812797 -1.75924e-007 -0.582547, -0.683504 -1.1756e-007 -0.729947, + -0.352189 9.37874e-009 -0.935929, -0.162817 8.16743e-009 -0.986656, -0.528021 -7.39591e-008 -0.849231] + } + coordIndex [ + 5, 4, 3, -1,1561, 5, 3, -1,6, 5, 1564, -1,7, 6, 1564, -1,1562, 1561, 2, -1,3, 2, + 1561, -1,1565, 1564, 1562, -1,1561, 1562, 1564, -1,1564, 1565, 1567, -1,1566, 1565, + 1562, -1,1564, 5, 1561, -1,1563, 1562, 2, -1,1567, 7, 1564, -1,1573, 9, 8, -1,1579, + 11, 10, -1,1582, 12, 11, -1,1576, 10, 9, -1,1568, 1567, 1565, -1,8, 1567, 1570, -1, + 8, 1570, 1573, -1,1570, 1567, 1571, -1,1576, 1573, 1577, -1,10, 1576, 1579, -1,11, + 1579, 1582, -1,1579, 1576, 1580, -1,1576, 9, 1573, -1,1573, 1570, 1574, -1,1582, + 13, 12, -1,7, 1567, 8, -1,1582, 1579, 1580, -1,38, 1566, 1563, -1,1566, 1562, 1563, -1, + 1569, 1571, 1568, -1,1567, 1568, 1571, -1,1572, 1569, 37, -1,1566, 1569, 1568, -1, + 1563, 2, 1, -1,37, 1569, 1566, -1,39, 1, 0, -1,1563, 1, 39, -1,38, 1563, 39, -1,38, + 37, 1566, -1,1572, 1571, 1569, -1,1566, 1568, 1565, -1,1575, 1574, 1572, -1,1571, + 1572, 1574, -1,1577, 1575, 1578, -1,1574, 1575, 1577, -1,1576, 1577, 1580, -1,1580, + 1577, 1581, -1,1577, 1573, 1574, -1,35, 1575, 1572, -1,36, 35, 1572, -1,1578, 1575, + 35, -1,34, 1578, 35, -1,33, 1581, 34, -1,1578, 34, 1581, -1,1581, 33, 1584, -1,1581, + 1577, 1578, -1,1583, 1580, 1581, -1,37, 36, 1572, -1,1574, 1570, 1571, -1,1582, 1580, + 1583, -1,1582, 1583, 1585, -1,14, 13, 1585, -1,1588, 15, 14, -1,1591, 15, 1588, -1, + 1585, 1588, 14, -1,1589, 1588, 1585, -1,1587, 1586, 1583, -1,1586, 1585, 1583, -1, + 1592, 1591, 1589, -1,1585, 1586, 1589, -1,1594, 1591, 1592, -1,1593, 1592, 1589, -1, + 1588, 1589, 1591, -1,1590, 1589, 1586, -1,1591, 16, 15, -1,13, 1582, 1585, -1,1597, + 17, 16, -1,1603, 19, 18, -1,21, 20, 19, -1,1600, 18, 17, -1,1595, 1597, 1594, -1, + 16, 1594, 1597, -1,1597, 1595, 1598, -1,1592, 1595, 1594, -1,1600, 1597, 1601, -1, + 18, 1600, 1603, -1,19, 1603, 21, -1,1603, 1600, 1604, -1,1600, 17, 1597, -1,21, 1603, + 22, -1,1591, 1594, 16, -1,1596, 1595, 1592, -1,31, 1587, 1584, -1,1587, 1583, 1584, -1, + 1590, 1593, 1589, -1,1586, 1587, 1590, -1,1593, 1596, 1592, -1,29, 1593, 1590, -1, + 1596, 1598, 1595, -1,30, 1590, 1587, -1,31, 1584, 32, -1,30, 1587, 31, -1,28, 1596, + 29, -1,1590, 30, 29, -1,1596, 28, 1599, -1,1596, 1593, 29, -1,1599, 1598, 1596, -1, + 33, 32, 1584, -1,1602, 1601, 1599, -1,1598, 1599, 1601, -1,1604, 1602, 1605, -1,1601, + 1602, 1604, -1,1603, 1604, 22, -1,22, 1604, 1605, -1,1604, 1600, 1601, -1,26, 1602, + 1599, -1,27, 26, 1599, -1,1605, 1602, 26, -1,25, 1605, 26, -1,24, 23, 25, -1,1605, + 25, 23, -1,23, 22, 1605, -1,28, 27, 1599, -1,1601, 1597, 1598, -1,1581, 1584, 1583, -1, + 18, 58, 17, -1,16, 59, 60, -1,58, 59, 17, -1,58, 18, 19, -1,56, 57, 19, -1,19, 20, + 56, -1,57, 58, 19, -1,56, 20, 72, -1,15, 61, 62, -1,63, 13, 62, -1,13, 63, 64, -1, + 14, 62, 13, -1,17, 59, 16, -1,14, 15, 62, -1,16, 61, 15, -1,16, 60, 61, -1,54, 55, + 72, -1,72, 73, 54, -1,55, 56, 72, -1,54, 73, 74, -1,52, 53, 75, -1,74, 75, 53, -1, + 53, 54, 74, -1,52, 75, 51, -1,76, 77, 50, -1,78, 79, 48, -1,77, 78, 50, -1,51, 76, + 50, -1,49, 50, 78, -1,48, 49, 78, -1,79, 80, 48, -1,76, 51, 75, -1,11, 64, 65, -1, + 11, 65, 66, -1,9, 66, 67, -1,11, 12, 64, -1,9, 10, 66, -1,11, 66, 10, -1,67, 8, 9, -1, + 64, 12, 13, -1,7, 8, 69, -1,68, 69, 8, -1,8, 67, 68, -1,7, 69, 70, -1,5, 6, 70, -1, + 70, 71, 5, -1,6, 7, 70, -1,5, 71, 40, -1,81, 82, 46, -1,45, 83, 44, -1,82, 83, 45, -1, + 80, 47, 48, -1,47, 80, 46, -1,46, 80, 81, -1,82, 45, 46, -1,83, 84, 43, -1,86, 4, + 40, -1,40, 41, 86, -1,4, 5, 40, -1,86, 41, 42, -1,83, 43, 44, -1,84, 85, 42, -1,43, + 84, 42, -1,85, 86, 42, -1,95, 94, 93, -1,1606, 95, 93, -1,96, 95, 1609, -1,97, 96, + 1609, -1,1607, 1606, 92, -1,93, 92, 1606, -1,1610, 1609, 1607, -1,1606, 1607, 1609, -1, + 1609, 1610, 1612, -1,1611, 1610, 1607, -1,1609, 95, 1606, -1,1608, 1607, 92, -1,1612, + 97, 1609, -1,1618, 99, 98, -1,1624, 101, 100, -1,1627, 102, 101, -1,1621, 100, 99, -1, + 1613, 1612, 1610, -1,98, 1612, 1615, -1,98, 1615, 1618, -1,1615, 1612, 1616, -1,1621, + 1618, 1622, -1,100, 1621, 1624, -1,101, 1624, 1627, -1,1624, 1621, 1625, -1,1621, + 99, 1618, -1,1618, 1615, 1619, -1,1627, 103, 102, -1,97, 1612, 98, -1,1627, 1624, + 1625, -1,71, 1608, 91, -1,1608, 92, 91, -1,1613, 1611, 1614, -1,1607, 1608, 1611, -1, + 1612, 1613, 1616, -1,1616, 1613, 1614, -1,1610, 1611, 1613, -1,70, 1611, 1608, -1, + 71, 91, 40, -1,69, 1614, 70, -1,1608, 71, 70, -1,1614, 69, 1617, -1,1611, 70, 1614, -1, + 1617, 1616, 1614, -1,1620, 1619, 1617, -1,1616, 1617, 1619, -1,1622, 1620, 1623, -1, + 1619, 1620, 1622, -1,1621, 1622, 1625, -1,1625, 1622, 1626, -1,1622, 1618, 1619, -1, + 67, 1620, 1617, -1,68, 67, 1617, -1,1623, 1620, 67, -1,66, 1623, 67, -1,65, 1626, + 66, -1,1623, 66, 1626, -1,1626, 65, 1629, -1,1626, 1622, 1623, -1,1628, 1625, 1626, -1, + 69, 68, 1617, -1,1619, 1615, 1616, -1,1627, 1625, 1628, -1,1627, 1628, 1630, -1,104, + 103, 1630, -1,1633, 105, 104, -1,1636, 105, 1633, -1,1630, 1633, 104, -1,1634, 1633, + 1630, -1,1632, 1631, 1628, -1,1631, 1630, 1628, -1,1637, 1636, 1634, -1,1630, 1631, + 1634, -1,1639, 1636, 1637, -1,1638, 1637, 1634, -1,1633, 1634, 1636, -1,1635, 1634, + 1631, -1,1636, 106, 105, -1,103, 1627, 1630, -1,1642, 107, 106, -1,1648, 109, 108, -1, + 88, 87, 109, -1,1645, 108, 107, -1,1640, 1642, 1639, -1,106, 1639, 1642, -1,1642, + 1640, 1643, -1,1637, 1640, 1639, -1,1645, 1642, 1646, -1,108, 1645, 1648, -1,109, + 1648, 88, -1,1648, 1645, 1649, -1,1645, 107, 1642, -1,88, 1648, 89, -1,1636, 1639, + 106, -1,1641, 1640, 1637, -1,63, 1632, 1629, -1,1632, 1628, 1629, -1,1635, 1638, + 1634, -1,1631, 1632, 1635, -1,1638, 1641, 1637, -1,61, 1638, 1635, -1,1641, 1643, + 1640, -1,62, 1635, 1632, -1,63, 1629, 64, -1,62, 1632, 63, -1,60, 1641, 61, -1,1635, + 62, 61, -1,1641, 60, 1644, -1,1641, 1638, 61, -1,1644, 1643, 1641, -1,65, 64, 1629, -1, + 1647, 1646, 1644, -1,1643, 1644, 1646, -1,1649, 1647, 1650, -1,1646, 1647, 1649, -1, + 1648, 1649, 89, -1,89, 1649, 90, -1,1649, 1645, 1646, -1,58, 1647, 1644, -1,59, 58, + 1644, -1,1650, 1647, 58, -1,57, 1650, 58, -1,56, 90, 57, -1,1650, 57, 90, -1,90, + 1649, 1650, -1,60, 59, 1644, -1,1646, 1642, 1643, -1,1626, 1629, 1628, -1,147, 146, + 145, -1,149, 148, 1651, -1,1651, 1652, 161, -1,147, 1651, 148, -1,144, 1652, 147, -1, + 144, 143, 1652, -1,1653, 143, 142, -1,145, 144, 147, -1,147, 1652, 1651, -1,1653, + 163, 143, -1,1653, 142, 163, -1,143, 162, 1652, -1,142, 141, 164, -1,125, 123, 122, -1, + 121, 2033, 125, -1,124, 123, 125, -1,2034, 2033, 121, -1,122, 121, 125, -1,2036, + 126, 120, -1,2034, 121, 120, -1,119, 127, 120, -1,2036, 120, 2035, -1,129, 128, 172, -1, + 171, 133, 132, -1,171, 132, 131, -1,130, 129, 172, -1,117, 173, 118, -1,173, 128, + 119, -1,119, 128, 127, -1,171, 131, 130, -1,152, 151, 160, -1,158, 157, 156, -1,152, + 159, 153, -1,166, 139, 2042, -1,2044, 2043, 165, -1,149, 160, 150, -1,163, 142, 164, -1, + 151, 150, 160, -1,2043, 166, 165, -1,159, 154, 153, -1,155, 159, 156, -1,158, 156, + 159, -1,159, 152, 160, -1,2039, 169, 136, -1,160, 149, 161, -1,161, 1652, 162, -1, + 163, 162, 143, -1,164, 140, 165, -1,2037, 2038, 171, -1,134, 2037, 170, -1,166, 2043, + 139, -1,171, 2038, 133, -1,164, 141, 140, -1,155, 154, 159, -1,166, 2041, 167, -1, + 172, 128, 173, -1,168, 137, 2040, -1,135, 169, 2039, -1,2040, 136, 168, -1,135, 134, + 170, -1,116, 115, 174, -1,114, 113, 111, -1,111, 113, 112, -1,174, 115, 114, -1,167, + 138, 137, -1,168, 136, 169, -1,171, 170, 2037, -1,126, 2034, 120, -1,172, 171, 130, -1, + 2035, 120, 127, -1,169, 135, 170, -1,117, 116, 174, -1,117, 174, 173, -1,174, 114, + 110, -1,173, 2032, 118, -1,114, 111, 110, -1,2032, 173, 2031, -1,167, 137, 168, -1, + 138, 167, 2041, -1,149, 1651, 161, -1,2041, 166, 2042, -1,2031, 173, 119, -1,2044, + 165, 140, -1,185, 1658, 184, -1,1657, 185, 186, -1,188, 140, 189, -1,188, 1654, 187, -1, + 1654, 188, 189, -1,1654, 189, 190, -1,187, 1654, 1655, -1,1655, 1656, 187, -1,1656, + 1655, 192, -1,1657, 1656, 195, -1,1657, 186, 1656, -1,1654, 191, 1655, -1,1656, 186, + 187, -1,1658, 185, 1657, -1,1660, 181, 182, -1,176, 177, 1665, -1,1660, 182, 183, -1, + 180, 181, 1661, -1,183, 184, 1659, -1,1659, 1658, 198, -1,179, 180, 1662, -1,176, + 133, 177, -1,179, 1664, 178, -1,178, 1664, 177, -1,1660, 183, 1659, -1,184, 1658, + 1659, -1,1657, 197, 1658, -1,192, 193, 1656, -1,1659, 198, 199, -1,1656, 193, 194, -1, + 1656, 194, 195, -1,1659, 199, 1660, -1,1655, 191, 192, -1,191, 1654, 190, -1,195, + 196, 1657, -1,196, 197, 1657, -1,1658, 197, 198, -1,1660, 199, 200, -1,1661, 1662, + 180, -1,201, 1663, 1662, -1,203, 1664, 1663, -1,1662, 1663, 179, -1,1665, 205, 175, -1, + 1664, 205, 1665, -1,1665, 175, 176, -1,1664, 1665, 177, -1,1662, 1661, 200, -1,1663, + 1664, 179, -1,1663, 202, 203, -1,202, 1663, 201, -1,205, 1664, 204, -1,204, 1664, + 203, -1,201, 1662, 200, -1,1661, 1660, 200, -1,1660, 1661, 181, -1,201, 200, 358, -1, + 2049, 258, 259, -1,203, 202, 358, -1,2049, 2050, 257, -1,358, 202, 201, -1,203, 358, + 359, -1,2050, 301, 269, -1,359, 351, 352, -1,353, 203, 352, -1,339, 2054, 338, -1, + 352, 203, 359, -1,2055, 351, 2056, -1,203, 353, 341, -1,339, 353, 2054, -1,340, 341, + 353, -1,306, 342, 305, -1,341, 342, 203, -1,339, 340, 353, -1,306, 307, 342, -1,309, + 310, 342, -1,308, 309, 342, -1,307, 308, 342, -1,203, 342, 207, -1,357, 358, 200, -1, + 207, 342, 310, -1,350, 330, 2053, -1,2053, 336, 337, -1,337, 338, 2054, -1,2053, + 335, 336, -1,2055, 356, 351, -1,360, 357, 195, -1,348, 349, 354, -1,354, 349, 350, -1, + 360, 195, 355, -1,360, 355, 2055, -1,326, 327, 324, -1,327, 328, 322, -1,334, 332, + 333, -1,332, 334, 335, -1,322, 328, 329, -1,2052, 305, 342, -1,335, 331, 332, -1, + 320, 329, 302, -1,302, 319, 320, -1,200, 199, 357, -1,311, 312, 295, -1,313, 295, + 312, -1,314, 295, 313, -1,295, 296, 231, -1,311, 295, 310, -1,325, 326, 324, -1,296, + 298, 299, -1,2048, 314, 315, -1,299, 300, 231, -1,300, 2049, 259, -1,296, 299, 231, -1, + 231, 300, 230, -1,207, 232, 233, -1,310, 232, 207, -1,207, 233, 234, -1,295, 231, + 232, -1,260, 230, 259, -1,234, 235, 207, -1,240, 241, 239, -1,259, 230, 300, -1,207, + 235, 236, -1,232, 310, 295, -1,327, 323, 324, -1,298, 296, 297, -1,229, 230, 260, -1, + 327, 322, 323, -1,2048, 317, 2047, -1,321, 322, 329, -1,260, 2046, 228, -1,238, 239, + 243, -1,243, 239, 242, -1,239, 241, 242, -1,247, 237, 238, -1,244, 245, 238, -1,244, + 238, 243, -1,236, 237, 247, -1,246, 238, 245, -1,229, 260, 228, -1,295, 314, 2048, -1, + 329, 320, 321, -1,207, 236, 206, -1,354, 350, 2053, -1,273, 2045, 272, -1,347, 354, + 346, -1,354, 347, 348, -1,345, 346, 354, -1,344, 345, 354, -1,344, 354, 195, -1,278, + 304, 344, -1,2048, 316, 317, -1,343, 344, 304, -1,303, 279, 319, -1,304, 305, 2052, -1, + 278, 303, 304, -1,357, 198, 195, -1,357, 199, 198, -1,302, 303, 319, -1,284, 285, + 2051, -1,282, 318, 281, -1,2051, 294, 2047, -1,294, 2051, 285, -1,294, 285, 286, -1, + 318, 283, 284, -1,282, 283, 318, -1,287, 301, 294, -1,301, 287, 288, -1,287, 294, + 286, -1,280, 318, 319, -1,195, 354, 355, -1,209, 196, 208, -1,318, 280, 281, -1,195, + 208, 196, -1,278, 344, 195, -1,228, 2046, 227, -1,280, 319, 279, -1,293, 278, 195, -1, + 292, 293, 262, -1,303, 278, 279, -1,293, 277, 262, -1,288, 289, 266, -1,268, 301, + 267, -1,266, 267, 288, -1,289, 265, 266, -1,301, 288, 267, -1,265, 290, 264, -1,264, + 290, 291, -1,290, 265, 289, -1,263, 264, 291, -1,263, 291, 292, -1,292, 262, 263, -1, + 293, 195, 206, -1,208, 195, 198, -1,315, 316, 2048, -1,301, 268, 269, -1,256, 269, + 270, -1,257, 2050, 256, -1,2046, 226, 227, -1,256, 272, 2045, -1,2050, 269, 256, -1, + 272, 256, 271, -1,2045, 273, 274, -1,255, 215, 224, -1,271, 256, 270, -1,225, 226, + 254, -1,247, 248, 236, -1,247, 238, 246, -1,254, 255, 224, -1,216, 223, 224, -1,216, + 222, 223, -1,224, 225, 254, -1,2046, 254, 226, -1,248, 249, 236, -1,2045, 214, 255, -1, + 213, 274, 275, -1,2045, 274, 213, -1,213, 214, 2045, -1,215, 216, 224, -1,275, 276, + 213, -1,276, 212, 213, -1,211, 212, 277, -1,293, 211, 277, -1,276, 277, 212, -1,222, + 216, 221, -1,217, 218, 219, -1,217, 219, 220, -1,220, 221, 216, -1,253, 210, 206, -1, + 251, 252, 206, -1,206, 252, 253, -1,251, 206, 250, -1,210, 211, 206, -1,216, 217, + 220, -1,206, 236, 250, -1,293, 206, 211, -1,215, 255, 214, -1,250, 236, 249, -1,2046, + 261, 254, -1,257, 258, 2049, -1,284, 2051, 318, -1,317, 2051, 2047, -1,304, 2052, + 343, -1,330, 331, 2053, -1,331, 335, 2053, -1,337, 2054, 2053, -1,2055, 2056, 360, -1, + 2056, 351, 2057, -1,359, 2057, 351, -1,361, 362, 363, -1,369, 370, 367, -1,368, 369, + 367, -1,366, 367, 364, -1,367, 370, 371, -1,367, 372, 364, -1,364, 372, 373, -1,365, + 366, 364, -1,364, 373, 374, -1,367, 371, 372, -1,379, 380, 377, -1,378, 379, 377, -1, + 376, 377, 385, -1,377, 380, 381, -1,377, 382, 385, -1,385, 382, 383, -1,375, 376, + 385, -1,385, 383, 384, -1,377, 381, 382, -1,386, 144, 390, -1,387, 386, 391, -1,386, + 390, 389, -1,386, 393, 392, -1,386, 392, 391, -1,393, 386, 389, -1,395, 394, 389, -1, + 393, 389, 394, -1,396, 395, 389, -1,389, 398, 397, -1,389, 397, 396, -1,399, 398, + 389, -1,387, 406, 405, -1,387, 405, 404, -1,403, 402, 388, -1,404, 403, 387, -1,387, + 403, 388, -1,387, 391, 406, -1,388, 401, 400, -1,388, 400, 399, -1,189, 140, 388, -1, + 388, 190, 189, -1,399, 190, 388, -1,388, 402, 401, -1,389, 190, 399, -1,411, 127, + 410, -1,412, 409, 408, -1,409, 411, 410, -1,408, 407, 412, -1,412, 407, 124, -1,411, + 409, 412, -1,416, 415, 1666, -1,1666, 417, 416, -1,1667, 415, 414, -1,205, 204, 413, -1, + 414, 175, 1668, -1,205, 1668, 175, -1,203, 413, 204, -1,418, 408, 417, -1,419, 418, + 1666, -1,417, 1666, 418, -1,418, 419, 407, -1,420, 419, 1666, -1,413, 1668, 205, -1, + 1668, 1667, 414, -1,207, 420, 1668, -1,1667, 1668, 420, -1,413, 207, 1668, -1,420, + 1666, 1667, -1,1666, 415, 1667, -1,421, 206, 190, -1,190, 389, 421, -1,194, 206, + 195, -1,422, 191, 206, -1,190, 206, 191, -1,206, 194, 422, -1,132, 133, 426, -1,132, + 426, 131, -1,429, 424, 2060, -1,426, 428, 131, -1,424, 425, 415, -1,424, 429, 423, -1, + 428, 425, 131, -1,409, 127, 423, -1,428, 2058, 425, -1,426, 427, 428, -1,424, 415, + 2059, -1,425, 2058, 415, -1,424, 2059, 2060, -1,409, 1669, 430, -1,423, 1669, 409, -1, + 430, 408, 409, -1,429, 430, 1669, -1,429, 1669, 423, -1,437, 439, 438, -1,440, 437, + 436, -1,435, 440, 436, -1,441, 435, 434, -1,439, 112, 438, -1,434, 433, 441, -1,440, + 435, 441, -1,431, 433, 432, -1,432, 122, 431, -1,431, 441, 433, -1,439, 437, 440, -1, + 157, 460, 459, -1,458, 459, 461, -1,457, 458, 461, -1,442, 2061, 484, -1,461, 459, + 460, -1,468, 469, 470, -1,468, 470, 467, -1,471, 467, 470, -1,461, 462, 457, -1,466, + 467, 471, -1,456, 462, 463, -1,462, 456, 457, -1,454, 455, 464, -1,463, 455, 456, -1, + 464, 455, 463, -1,465, 466, 472, -1,472, 466, 471, -1,465, 472, 473, -1,454, 474, + 453, -1,473, 464, 465, -1,473, 474, 464, -1,464, 474, 454, -1,443, 480, 481, -1,481, + 482, 2061, -1,476, 453, 475, -1,449, 450, 451, -1,483, 484, 2061, -1,483, 2061, 482, -1, + 451, 146, 449, -1,2061, 443, 481, -1,477, 478, 452, -1,476, 477, 452, -1,452, 479, + 443, -1,479, 452, 478, -1,452, 443, 444, -1,480, 443, 479, -1,452, 453, 476, -1,447, + 448, 146, -1,446, 447, 146, -1,444, 445, 146, -1,146, 445, 446, -1,444, 146, 452, -1, + 448, 449, 146, -1,475, 453, 474, -1,390, 421, 389, -1,514, 513, 486, -1,511, 1671, + 512, -1,512, 1670, 513, -1,486, 485, 514, -1,512, 1671, 1670, -1,486, 513, 487, -1, + 473, 1670, 1671, -1,511, 1672, 1671, -1,1673, 1672, 510, -1,1672, 511, 510, -1,475, + 1672, 1673, -1,509, 1673, 510, -1,1672, 474, 1671, -1,513, 1670, 471, -1,507, 1674, + 508, -1,509, 508, 1674, -1,500, 503, 501, -1,501, 503, 502, -1,506, 1675, 507, -1, + 1674, 507, 1675, -1,476, 1674, 1675, -1,505, 1675, 506, -1,503, 499, 498, -1,503, + 500, 499, -1,505, 477, 1675, -1,1674, 1673, 509, -1,1674, 475, 1673, -1,470, 486, + 487, -1,471, 1670, 472, -1,471, 487, 513, -1,1670, 473, 472, -1,474, 473, 1671, -1, + 475, 474, 1672, -1,1674, 476, 475, -1,505, 478, 477, -1,504, 478, 505, -1,1675, 477, + 476, -1,488, 478, 504, -1,490, 489, 504, -1,488, 504, 489, -1,491, 490, 504, -1,495, + 504, 498, -1,491, 504, 492, -1,492, 504, 493, -1,504, 503, 498, -1,504, 494, 493, -1, + 504, 495, 494, -1,498, 497, 496, -1,498, 479, 497, -1,498, 496, 495, -1,469, 486, + 470, -1,515, 516, 518, -1,518, 516, 517, -1,517, 480, 479, -1,517, 479, 518, -1,559, + 2068, 560, -1,554, 2070, 2069, -1,553, 561, 554, -1,558, 2068, 559, -1,2063, 2071, + 520, -1,2068, 558, 557, -1,2068, 557, 556, -1,560, 2069, 2070, -1,548, 563, 549, -1, + 550, 549, 563, -1,548, 547, 564, -1,564, 563, 548, -1,561, 553, 552, -1,550, 562, + 551, -1,561, 552, 551, -1,563, 562, 550, -1,551, 562, 561, -1,561, 2070, 554, -1, + 2062, 123, 124, -1,2062, 431, 122, -1,2062, 572, 431, -1,2062, 519, 572, -1,124, + 2071, 2063, -1,123, 2062, 122, -1,521, 520, 407, -1,520, 2071, 407, -1,407, 522, + 521, -1,571, 524, 523, -1,407, 571, 523, -1,571, 420, 524, -1,525, 524, 420, -1,526, + 420, 207, -1,525, 420, 526, -1,2062, 124, 2063, -1,527, 526, 207, -1,2064, 451, 537, -1, + 522, 407, 523, -1,545, 564, 546, -1,544, 565, 545, -1,564, 545, 565, -1,560, 2068, + 2069, -1,565, 544, 543, -1,565, 542, 541, -1,542, 565, 543, -1,541, 566, 565, -1, + 567, 2067, 568, -1,566, 540, 539, -1,567, 566, 538, -1,539, 538, 566, -1,566, 541, + 540, -1,567, 538, 2067, -1,2066, 568, 2067, -1,2066, 451, 570, -1,569, 2066, 570, -1, + 555, 2068, 556, -1,537, 451, 2066, -1,206, 531, 530, -1,206, 533, 532, -1,206, 532, + 531, -1,529, 528, 207, -1,528, 527, 207, -1,207, 206, 529, -1,530, 529, 206, -1,2064, + 2065, 144, -1,206, 421, 533, -1,144, 145, 2064, -1,146, 2064, 145, -1,2064, 146, + 451, -1,421, 535, 534, -1,421, 390, 536, -1,535, 421, 536, -1,533, 421, 534, -1,390, + 2065, 536, -1,568, 2066, 569, -1,546, 564, 547, -1,2065, 390, 144, -1,576, 577, 575, -1, + 574, 575, 1676, -1,573, 1678, 578, -1,574, 1678, 573, -1,1676, 575, 577, -1,1676, + 523, 524, -1,523, 1676, 577, -1,1676, 524, 525, -1,1677, 1678, 574, -1,1678, 1677, + 525, -1,525, 526, 1678, -1,1677, 1676, 525, -1,1678, 526, 578, -1,1676, 1677, 574, -1, + 581, 580, 579, -1,581, 573, 578, -1,1679, 580, 581, -1,527, 528, 1679, -1,580, 1679, + 528, -1,578, 526, 1679, -1,527, 1679, 526, -1,581, 578, 1679, -1,528, 529, 582, -1, + 582, 579, 528, -1,1680, 583, 587, -1,587, 586, 1681, -1,582, 585, 586, -1,586, 585, + 1682, -1,584, 583, 1680, -1,531, 532, 1680, -1,584, 1680, 532, -1,530, 531, 1680, -1, + 586, 1682, 1681, -1,530, 1681, 1682, -1,1682, 529, 530, -1,530, 1680, 1681, -1,585, + 529, 1682, -1,587, 1681, 1680, -1,532, 533, 583, -1,588, 583, 533, -1,1683, 589, + 593, -1,593, 592, 1684, -1,588, 591, 592, -1,592, 591, 1685, -1,590, 589, 1683, -1, + 535, 536, 1683, -1,590, 1683, 536, -1,534, 535, 1683, -1,592, 1685, 1684, -1,534, + 1684, 1685, -1,1685, 533, 534, -1,534, 1683, 1684, -1,591, 533, 1685, -1,593, 1684, + 1683, -1,536, 537, 594, -1,594, 589, 536, -1,597, 519, 520, -1,596, 595, 597, -1, + 520, 596, 597, -1,1686, 576, 600, -1,600, 599, 1687, -1,596, 598, 599, -1,599, 598, + 1688, -1,577, 576, 1686, -1,522, 523, 1686, -1,577, 1686, 523, -1,521, 522, 1686, -1, + 599, 1688, 1687, -1,521, 1687, 1688, -1,1688, 520, 521, -1,521, 1686, 1687, -1,598, + 520, 1688, -1,600, 1687, 1686, -1,72, 20, 21, -1,1689, 72, 21, -1,73, 72, 1692, -1, + 74, 73, 1692, -1,1690, 1689, 22, -1,21, 22, 1689, -1,1693, 1692, 1690, -1,1689, 1690, + 1692, -1,1692, 1693, 1695, -1,1694, 1693, 1690, -1,1692, 72, 1689, -1,1691, 1690, + 22, -1,1695, 74, 1692, -1,1701, 76, 75, -1,1707, 78, 77, -1,1710, 79, 78, -1,1704, + 77, 76, -1,1696, 1695, 1693, -1,75, 1695, 1698, -1,75, 1698, 1701, -1,1698, 1695, + 1699, -1,1704, 1701, 1705, -1,77, 1704, 1707, -1,78, 1707, 1710, -1,1707, 1704, 1708, -1, + 1704, 76, 1701, -1,1701, 1698, 1702, -1,1710, 80, 79, -1,74, 1695, 75, -1,1710, 1707, + 1708, -1,614, 1694, 1691, -1,1694, 1690, 1691, -1,1697, 1699, 1696, -1,1695, 1696, + 1699, -1,1700, 1697, 613, -1,1694, 1697, 1696, -1,1691, 22, 23, -1,613, 1697, 1694, -1, + 615, 23, 24, -1,1691, 23, 615, -1,614, 1691, 615, -1,614, 613, 1694, -1,1700, 1699, + 1697, -1,1694, 1696, 1693, -1,1703, 1702, 1700, -1,1699, 1700, 1702, -1,1705, 1703, + 1706, -1,1702, 1703, 1705, -1,1704, 1705, 1708, -1,1708, 1705, 1709, -1,1705, 1701, + 1702, -1,611, 1703, 1700, -1,612, 611, 1700, -1,1706, 1703, 611, -1,610, 1706, 611, -1, + 609, 1709, 610, -1,1706, 610, 1709, -1,1709, 609, 1712, -1,1709, 1705, 1706, -1,1711, + 1708, 1709, -1,613, 612, 1700, -1,1702, 1698, 1699, -1,1710, 1708, 1711, -1,1710, + 1711, 1713, -1,81, 80, 1713, -1,1716, 82, 81, -1,1719, 82, 1716, -1,1713, 1716, 81, -1, + 1717, 1716, 1713, -1,1715, 1714, 1711, -1,1714, 1713, 1711, -1,1720, 1719, 1717, -1, + 1713, 1714, 1717, -1,1722, 1719, 1720, -1,1721, 1720, 1717, -1,1716, 1717, 1719, -1, + 1718, 1717, 1714, -1,1719, 83, 82, -1,80, 1710, 1713, -1,1725, 84, 83, -1,1731, 86, + 85, -1,3, 4, 86, -1,1728, 85, 84, -1,1723, 1725, 1722, -1,83, 1722, 1725, -1,1725, + 1723, 1726, -1,1720, 1723, 1722, -1,1728, 1725, 1729, -1,85, 1728, 1731, -1,86, 1731, + 3, -1,1731, 1728, 1732, -1,1728, 84, 1725, -1,3, 1731, 2, -1,1719, 1722, 83, -1,1724, + 1723, 1720, -1,607, 1715, 1712, -1,1715, 1711, 1712, -1,1718, 1721, 1717, -1,1714, + 1715, 1718, -1,1721, 1724, 1720, -1,605, 1721, 1718, -1,1724, 1726, 1723, -1,606, + 1718, 1715, -1,607, 1712, 608, -1,606, 1715, 607, -1,604, 1724, 605, -1,1718, 606, + 605, -1,1724, 604, 1727, -1,1724, 1721, 605, -1,1727, 1726, 1724, -1,609, 608, 1712, -1, + 1730, 1729, 1727, -1,1726, 1727, 1729, -1,1732, 1730, 1733, -1,1729, 1730, 1732, -1, + 1731, 1732, 2, -1,2, 1732, 1733, -1,1732, 1728, 1729, -1,602, 1730, 1727, -1,603, + 602, 1727, -1,1733, 1730, 602, -1,601, 1733, 602, -1,0, 1, 601, -1,1733, 601, 1, -1, + 1, 2, 1733, -1,604, 603, 1727, -1,1729, 1725, 1726, -1,1709, 1712, 1711, -1,616, + 87, 88, -1,1734, 616, 88, -1,617, 616, 1737, -1,618, 617, 1737, -1,1735, 1734, 89, -1, + 88, 89, 1734, -1,1738, 1737, 1735, -1,1734, 1735, 1737, -1,1737, 1738, 1740, -1,1739, + 1738, 1735, -1,1737, 616, 1734, -1,1736, 1735, 89, -1,1740, 618, 1737, -1,1746, 620, + 619, -1,1752, 622, 621, -1,1755, 623, 622, -1,1749, 621, 620, -1,1741, 1740, 1738, -1, + 619, 1740, 1743, -1,619, 1743, 1746, -1,1743, 1740, 1744, -1,1749, 1746, 1750, -1, + 621, 1749, 1752, -1,622, 1752, 1755, -1,1752, 1749, 1753, -1,1749, 620, 1746, -1, + 1746, 1743, 1747, -1,1755, 624, 623, -1,618, 1740, 619, -1,1755, 1752, 1753, -1,55, + 1736, 90, -1,1736, 89, 90, -1,1741, 1739, 1742, -1,1735, 1736, 1739, -1,1740, 1741, + 1744, -1,1744, 1741, 1742, -1,1738, 1739, 1741, -1,54, 1739, 1736, -1,55, 90, 56, -1, + 53, 1742, 54, -1,1736, 55, 54, -1,1742, 53, 1745, -1,1739, 54, 1742, -1,1745, 1744, + 1742, -1,1748, 1747, 1745, -1,1744, 1745, 1747, -1,1750, 1748, 1751, -1,1747, 1748, + 1750, -1,1749, 1750, 1753, -1,1753, 1750, 1754, -1,1750, 1746, 1747, -1,51, 1748, + 1745, -1,52, 51, 1745, -1,1751, 1748, 51, -1,50, 1751, 51, -1,49, 1754, 50, -1,1751, + 50, 1754, -1,1754, 49, 1757, -1,1754, 1750, 1751, -1,1756, 1753, 1754, -1,53, 52, + 1745, -1,1747, 1743, 1744, -1,1755, 1753, 1756, -1,1755, 1756, 1758, -1,625, 624, + 1758, -1,1761, 626, 625, -1,1764, 626, 1761, -1,1758, 1761, 625, -1,1762, 1761, 1758, -1, + 1760, 1759, 1756, -1,1759, 1758, 1756, -1,1765, 1764, 1762, -1,1758, 1759, 1762, -1, + 1767, 1764, 1765, -1,1766, 1765, 1762, -1,1761, 1762, 1764, -1,1763, 1762, 1759, -1, + 1764, 627, 626, -1,624, 1755, 1758, -1,1770, 628, 627, -1,1776, 630, 629, -1,93, + 94, 630, -1,1773, 629, 628, -1,1768, 1770, 1767, -1,627, 1767, 1770, -1,1770, 1768, + 1771, -1,1765, 1768, 1767, -1,1773, 1770, 1774, -1,629, 1773, 1776, -1,630, 1776, + 93, -1,1776, 1773, 1777, -1,1773, 628, 1770, -1,93, 1776, 92, -1,1764, 1767, 627, -1, + 1769, 1768, 1765, -1,47, 1760, 1757, -1,1760, 1756, 1757, -1,1763, 1766, 1762, -1, + 1759, 1760, 1763, -1,1766, 1769, 1765, -1,45, 1766, 1763, -1,1769, 1771, 1768, -1, + 46, 1763, 1760, -1,47, 1757, 48, -1,46, 1760, 47, -1,44, 1769, 45, -1,1763, 46, 45, -1, + 1769, 44, 1772, -1,1769, 1766, 45, -1,1772, 1771, 1769, -1,49, 48, 1757, -1,1775, + 1774, 1772, -1,1771, 1772, 1774, -1,1777, 1775, 1778, -1,1774, 1775, 1777, -1,1776, + 1777, 92, -1,92, 1777, 91, -1,1777, 1773, 1774, -1,42, 1775, 1772, -1,43, 42, 1772, -1, + 1778, 1775, 42, -1,41, 1778, 42, -1,40, 91, 41, -1,1778, 41, 91, -1,91, 1777, 1778, -1, + 44, 43, 1772, -1,1774, 1770, 1771, -1,1754, 1757, 1756, -1,159, 683, 635, -1,638, + 683, 682, -1,159, 632, 631, -1,158, 159, 631, -1,682, 681, 1779, -1,645, 2072, 677, -1, + 680, 641, 681, -1,646, 2074, 676, -1,679, 678, 644, -1,2072, 678, 677, -1,677, 2075, + 645, -1,643, 679, 644, -1,633, 632, 159, -1,2073, 644, 678, -1,635, 683, 636, -1, + 157, 158, 631, -1,635, 634, 159, -1,637, 683, 638, -1,679, 642, 680, -1,2072, 2073, + 678, -1,683, 637, 636, -1,633, 159, 634, -1,559, 2084, 558, -1,2075, 677, 2074, -1, + 675, 674, 648, -1,650, 673, 2078, -1,671, 654, 672, -1,649, 674, 673, -1,2076, 675, + 648, -1,669, 665, 664, -1,111, 667, 110, -1,110, 667, 669, -1,2080, 657, 661, -1, + 2079, 2078, 672, -1,669, 664, 670, -1,647, 676, 675, -1,2076, 647, 675, -1,2077, + 648, 674, -1,671, 670, 656, -1,649, 673, 650, -1,2077, 674, 649, -1,111, 112, 668, -1, + 666, 669, 667, -1,665, 669, 666, -1,668, 667, 111, -1,673, 672, 2078, -1,646, 676, + 647, -1,676, 2074, 677, -1,1779, 638, 682, -1,681, 1780, 1779, -1,641, 1780, 681, -1, + 640, 1779, 1780, -1,1781, 641, 680, -1,1781, 680, 642, -1,638, 1779, 639, -1,643, + 642, 679, -1,1780, 568, 640, -1,640, 568, 569, -1,570, 640, 569, -1,641, 568, 1780, -1, + 641, 1781, 642, -1,559, 560, 2084, -1,2082, 2083, 660, -1,1779, 640, 639, -1,660, + 2083, 661, -1,672, 652, 651, -1,654, 671, 655, -1,672, 651, 2079, -1,672, 653, 652, -1, + 656, 655, 671, -1,656, 670, 662, -1,656, 662, 657, -1,670, 664, 663, -1,653, 672, + 654, -1,658, 661, 2083, -1,659, 558, 2084, -1,661, 2081, 2080, -1,660, 558, 659, -1, + 670, 663, 2086, -1,661, 657, 662, -1,2082, 660, 659, -1,2081, 661, 658, -1,2085, + 662, 670, -1,2086, 2085, 670, -1,699, 700, 1782, -1,694, 695, 1785, -1,1784, 695, + 696, -1,699, 1783, 698, -1,1783, 699, 1782, -1,1783, 1782, 703, -1,698, 1783, 1784, -1, + 1784, 1785, 695, -1,1784, 697, 698, -1,1785, 1784, 704, -1,1784, 696, 697, -1,1783, + 703, 1784, -1,700, 701, 1782, -1,694, 1785, 693, -1,1792, 686, 687, -1,688, 1791, + 687, -1,690, 691, 1788, -1,692, 1787, 691, -1,1786, 692, 693, -1,689, 690, 1789, -1, + 1792, 685, 686, -1,684, 685, 1793, -1,689, 1791, 688, -1,1787, 692, 1786, -1,693, + 1785, 1786, -1,1785, 705, 1786, -1,703, 704, 1784, -1,1782, 702, 703, -1,1788, 1787, + 707, -1,706, 1786, 705, -1,705, 1785, 704, -1,1787, 1788, 691, -1,702, 1782, 701, -1, + 702, 701, 644, -1,708, 1788, 707, -1,1787, 706, 707, -1,1786, 706, 1787, -1,1788, + 708, 709, -1,1789, 1790, 689, -1,710, 1791, 1790, -1,711, 1792, 1791, -1,1790, 1791, + 689, -1,1793, 713, 714, -1,1792, 712, 1793, -1,1793, 714, 684, -1,1792, 1793, 685, -1, + 1790, 1789, 709, -1,1791, 1792, 687, -1,709, 710, 1790, -1,710, 711, 1791, -1,714, + 713, 651, -1,1793, 712, 713, -1,712, 1792, 711, -1,1789, 1788, 709, -1,1788, 1789, + 690, -1,694, 715, 716, -1,835, 836, 2091, -1,718, 695, 717, -1,716, 695, 694, -1, + 692, 695, 716, -1,695, 718, 565, -1,2093, 2092, 2088, -1,775, 719, 720, -1,2087, + 720, 721, -1,718, 719, 776, -1,760, 695, 692, -1,760, 717, 695, -1,773, 720, 2087, -1, + 774, 775, 720, -1,798, 777, 778, -1,718, 776, 800, -1,775, 776, 719, -1,795, 796, + 780, -1,780, 796, 779, -1,781, 795, 780, -1,778, 779, 797, -1,774, 720, 773, -1,796, + 797, 779, -1,799, 776, 777, -1,759, 760, 692, -1,759, 691, 758, -1,731, 723, 724, -1, + 759, 692, 691, -1,727, 724, 726, -1,722, 761, 762, -1,724, 725, 726, -1,761, 722, + 723, -1,691, 757, 758, -1,770, 771, 763, -1,782, 783, 808, -1,770, 763, 769, -1,2087, + 763, 771, -1,762, 721, 722, -1,763, 2094, 784, -1,784, 769, 763, -1,784, 808, 783, -1, + 2094, 763, 764, -1,772, 2087, 771, -1,2087, 772, 773, -1,782, 808, 781, -1,808, 784, + 2094, -1,801, 781, 808, -1,798, 799, 777, -1,824, 785, 823, -1,565, 800, 785, -1, + 800, 565, 718, -1,850, 824, 2097, -1,786, 787, 811, -1,565, 785, 824, -1,785, 786, + 823, -1,798, 778, 797, -1,851, 824, 850, -1,856, 857, 2101, -1,858, 859, 565, -1, + 565, 865, 866, -1,865, 565, 859, -1,565, 866, 564, -1,2102, 859, 2098, -1,858, 565, + 851, -1,851, 852, 858, -1,854, 855, 858, -1,853, 854, 858, -1,852, 853, 858, -1,565, + 824, 851, -1,855, 856, 2101, -1,788, 810, 787, -1,800, 776, 799, -1,787, 810, 811, -1, + 811, 823, 786, -1,810, 789, 790, -1,811, 2096, 823, -1,790, 791, 810, -1,794, 801, + 793, -1,801, 794, 795, -1,792, 793, 801, -1,801, 2095, 792, -1,791, 792, 2095, -1, + 795, 781, 801, -1,838, 2099, 837, -1,857, 837, 2101, -1,825, 2097, 824, -1,839, 840, + 841, -1,839, 841, 842, -1,2099, 843, 844, -1,843, 838, 842, -1,838, 839, 842, -1, + 2090, 2095, 801, -1,788, 789, 810, -1,845, 2100, 844, -1,727, 728, 724, -1,729, 730, + 731, -1,729, 731, 728, -1,731, 761, 723, -1,755, 756, 743, -1,754, 752, 753, -1,751, + 752, 754, -1,754, 755, 743, -1,757, 690, 756, -1,733, 2089, 761, -1,732, 761, 731, -1, + 765, 2088, 2092, -1,732, 733, 761, -1,2088, 766, 807, -1,767, 2089, 735, -1,807, + 766, 737, -1,2092, 764, 765, -1,690, 742, 743, -1,742, 690, 689, -1,744, 745, 754, -1, + 754, 745, 751, -1,744, 754, 743, -1,688, 741, 742, -1,741, 687, 740, -1,687, 741, + 688, -1,740, 687, 739, -1,2089, 768, 761, -1,688, 742, 689, -1,733, 734, 2089, -1, + 746, 749, 750, -1,736, 767, 735, -1,767, 736, 737, -1,746, 750, 751, -1,748, 746, + 747, -1,746, 748, 749, -1,807, 738, 806, -1,738, 807, 737, -1,751, 745, 746, -1,737, + 766, 767, -1,687, 564, 739, -1,743, 756, 690, -1,757, 691, 690, -1,802, 738, 739, -1, + 820, 812, 813, -1,822, 812, 821, -1,820, 821, 812, -1,2095, 810, 791, -1,813, 814, + 819, -1,815, 818, 814, -1,813, 819, 820, -1,2090, 836, 809, -1,2098, 860, 861, -1, + 865, 859, 2102, -1,2099, 844, 2100, -1,846, 847, 863, -1,564, 864, 862, -1,864, 861, + 862, -1,564, 862, 863, -1,847, 848, 863, -1,846, 863, 2100, -1,867, 864, 564, -1, + 816, 818, 815, -1,834, 2091, 802, -1,836, 2090, 2091, -1,834, 835, 2091, -1,802, + 833, 834, -1,804, 805, 803, -1,806, 738, 803, -1,832, 802, 831, -1,832, 833, 802, -1, + 831, 802, 830, -1,738, 802, 803, -1,803, 805, 806, -1,818, 819, 814, -1,849, 825, + 826, -1,818, 816, 817, -1,829, 830, 849, -1,828, 829, 849, -1,828, 849, 827, -1,849, + 830, 564, -1,849, 564, 848, -1,827, 849, 826, -1,802, 739, 830, -1,848, 564, 863, -1, + 830, 739, 564, -1,867, 564, 866, -1,724, 728, 731, -1,734, 735, 2089, -1,762, 2087, + 721, -1,807, 2093, 2088, -1,2092, 2094, 764, -1,809, 2095, 2090, -1,812, 822, 2096, -1, + 823, 2096, 822, -1,2097, 825, 849, -1,837, 2099, 2101, -1,2098, 861, 2102, -1,2099, + 838, 843, -1,2100, 845, 846, -1,855, 2101, 858, -1,861, 2103, 2102, -1,864, 2103, + 861, -1,869, 870, 868, -1,878, 881, 877, -1,881, 879, 880, -1,879, 881, 878, -1,881, + 871, 873, -1,881, 873, 876, -1,875, 873, 874, -1,876, 877, 881, -1,876, 873, 875, -1, + 873, 871, 872, -1,890, 882, 889, -1,882, 891, 892, -1,891, 882, 890, -1,882, 883, + 885, -1,882, 885, 888, -1,887, 885, 886, -1,888, 889, 882, -1,888, 885, 887, -1,885, + 883, 884, -1,901, 900, 895, -1,899, 895, 900, -1,901, 895, 894, -1,895, 899, 898, -1, + 898, 897, 895, -1,902, 901, 894, -1,894, 644, 701, -1,894, 701, 700, -1,904, 903, + 894, -1,902, 894, 903, -1,905, 894, 700, -1,904, 894, 905, -1,896, 897, 912, -1,896, + 912, 911, -1,567, 568, 896, -1,895, 897, 896, -1,893, 896, 911, -1,567, 896, 893, -1, + 893, 907, 906, -1,893, 906, 905, -1,893, 910, 909, -1,907, 893, 908, -1,909, 908, + 893, -1,893, 911, 910, -1,700, 893, 905, -1,917, 913, 561, -1,913, 560, 561, -1,916, + 914, 913, -1,914, 915, 657, -1,913, 917, 916, -1,914, 916, 915, -1,919, 561, 918, -1, + 918, 1794, 919, -1,920, 919, 1794, -1,563, 1794, 918, -1,1796, 563, 564, -1,925, + 685, 1796, -1,1796, 923, 1795, -1,564, 925, 1796, -1,563, 1796, 1795, -1,1795, 1794, + 563, -1,922, 1794, 1795, -1,1794, 921, 920, -1,921, 1794, 922, -1,1795, 923, 922, -1, + 924, 1796, 685, -1,686, 925, 687, -1,925, 686, 685, -1,1796, 924, 923, -1,917, 919, + 920, -1,699, 926, 565, -1,565, 700, 699, -1,565, 926, 696, -1,565, 566, 700, -1,893, + 700, 566, -1,696, 695, 565, -1,932, 928, 1797, -1,922, 932, 1797, -1,922, 1797, 928, -1, + 917, 927, 916, -1,1798, 916, 927, -1,932, 1798, 928, -1,933, 916, 1798, -1,1798, + 927, 928, -1,930, 653, 929, -1,651, 652, 930, -1,653, 930, 652, -1,932, 922, 931, -1, + 929, 653, 931, -1,933, 657, 916, -1,932, 933, 1798, -1,2104, 2105, 931, -1,929, 931, + 2105, -1,930, 929, 924, -1,931, 922, 2104, -1,942, 941, 938, -1,941, 557, 939, -1, + 558, 940, 557, -1,557, 940, 939, -1,937, 439, 942, -1,935, 934, 439, -1,439, 936, + 935, -1,939, 938, 941, -1,937, 942, 938, -1,936, 439, 937, -1,934, 112, 439, -1,451, + 450, 975, -1,944, 945, 2106, -1,451, 975, 570, -1,947, 948, 2106, -1,949, 943, 948, -1, + 948, 943, 2106, -1,953, 973, 974, -1,976, 977, 570, -1,570, 978, 979, -1,978, 570, + 977, -1,570, 979, 980, -1,976, 570, 975, -1,951, 952, 974, -1,949, 950, 943, -1,943, + 974, 980, -1,974, 943, 950, -1,974, 950, 951, -1,980, 974, 570, -1,952, 953, 974, -1, + 945, 946, 2106, -1,953, 954, 973, -1,469, 468, 959, -1,958, 959, 960, -1,960, 959, + 468, -1,961, 958, 960, -1,460, 157, 967, -1,460, 967, 966, -1,966, 968, 969, -1,968, + 966, 967, -1,969, 965, 966, -1,957, 961, 962, -1,961, 957, 958, -1,957, 962, 956, -1, + 955, 956, 963, -1,973, 955, 972, -1,955, 973, 954, -1,963, 956, 962, -1,964, 965, + 970, -1,970, 965, 969, -1,964, 970, 971, -1,963, 971, 972, -1,971, 963, 964, -1,963, + 972, 955, -1,2106, 946, 947, -1,566, 567, 893, -1,955, 1802, 956, -1,954, 1803, 955, -1, + 957, 956, 1801, -1,954, 953, 1803, -1,957, 1800, 958, -1,1799, 998, 958, -1,953, + 952, 1804, -1,951, 1008, 952, -1,951, 981, 1008, -1,959, 998, 486, -1,981, 997, 996, -1, + 981, 996, 995, -1,981, 994, 993, -1,994, 981, 995, -1,991, 981, 992, -1,993, 992, + 981, -1,990, 981, 991, -1,990, 989, 987, -1,989, 988, 987, -1,950, 987, 988, -1,981, + 951, 997, -1,987, 981, 990, -1,486, 469, 959, -1,1000, 1799, 1800, -1,1799, 958, + 1800, -1,1001, 1800, 1801, -1,1800, 957, 1801, -1,1802, 955, 1803, -1,1801, 1802, + 1001, -1,1802, 1803, 1003, -1,1005, 1803, 953, -1,999, 486, 1799, -1,1801, 956, 1802, -1, + 1000, 999, 1799, -1,1800, 1001, 1000, -1,1003, 1002, 1802, -1,1002, 1001, 1802, -1, + 485, 486, 999, -1,1004, 1003, 1803, -1,1008, 1007, 1804, -1,1006, 1804, 1007, -1, + 986, 982, 987, -1,982, 981, 987, -1,982, 986, 985, -1,1008, 1804, 952, -1,1804, 1006, + 953, -1,953, 1006, 1005, -1,985, 984, 982, -1,984, 983, 982, -1,1005, 1004, 1803, -1, + 486, 998, 1799, -1,950, 949, 1009, -1,950, 1009, 1011, -1,1011, 1010, 983, -1,1010, + 1011, 1009, -1,551, 1017, 550, -1,549, 550, 1805, -1,548, 1807, 1016, -1,549, 1807, + 548, -1,1805, 550, 1017, -1,1805, 1012, 1013, -1,1012, 1805, 1017, -1,1805, 1013, + 1014, -1,1806, 1807, 549, -1,1807, 1806, 1014, -1,1014, 1015, 1807, -1,1806, 1805, + 1014, -1,1807, 1015, 1016, -1,1805, 1806, 549, -1,547, 1018, 546, -1,547, 548, 1016, -1, + 1808, 1018, 547, -1,1020, 1019, 1808, -1,1018, 1808, 1019, -1,1016, 1015, 1808, -1, + 1020, 1808, 1015, -1,547, 1016, 1808, -1,1019, 1021, 545, -1,545, 546, 1019, -1,543, + 1023, 542, -1,1809, 543, 544, -1,1022, 1811, 545, -1,545, 1811, 544, -1,1023, 543, + 1809, -1,1025, 1024, 1809, -1,1023, 1809, 1024, -1,1026, 1025, 1809, -1,544, 1811, + 1810, -1,1026, 1810, 1811, -1,1811, 1021, 1026, -1,1026, 1809, 1810, -1,1022, 1021, + 1811, -1,544, 1810, 1809, -1,1024, 1027, 541, -1,541, 542, 1024, -1,539, 1029, 538, -1, + 1812, 539, 540, -1,1028, 1814, 541, -1,541, 1814, 540, -1,1029, 539, 1812, -1,1031, + 1030, 1812, -1,1029, 1812, 1030, -1,1032, 1031, 1812, -1,540, 1814, 1813, -1,1032, + 1813, 1814, -1,1814, 1027, 1032, -1,1032, 1812, 1813, -1,1028, 1027, 1814, -1,540, + 1813, 1812, -1,1030, 594, 537, -1,537, 538, 1030, -1,1035, 1034, 1033, -1,554, 555, + 1035, -1,1033, 554, 1035, -1,552, 1017, 551, -1,1815, 552, 553, -1,1036, 1817, 554, -1, + 554, 1817, 553, -1,1017, 552, 1815, -1,1037, 1012, 1815, -1,1017, 1815, 1012, -1, + 1038, 1037, 1815, -1,553, 1817, 1816, -1,1038, 1816, 1817, -1,1817, 1033, 1038, -1, + 1038, 1815, 1816, -1,1036, 1033, 1817, -1,553, 1816, 1815, -1,1062, 1060, 1063, -1, + 1059, 1064, 1060, -1,1063, 1060, 1064, -1,1065, 1064, 1059, -1,1062, 1061, 1060, -1, + 1058, 1065, 1059, -1,1072, 1071, 1051, -1,1066, 1065, 1058, -1,1067, 1066, 1058, -1, + 1058, 1057, 1067, -1,1068, 1067, 1057, -1,1056, 1069, 1057, -1,1068, 1057, 1069, -1, + 1070, 1069, 1056, -1,1052, 1071, 1070, -1,1071, 1052, 1051, -1,1053, 1052, 1070, -1, + 1055, 1054, 1070, -1,1053, 1070, 1054, -1,1056, 1055, 1070, -1,1051, 1073, 1072, -1, + 1047, 1076, 1075, -1,1048, 1047, 1074, -1,1075, 1074, 1047, -1,1049, 1048, 1074, -1, + 1047, 1077, 1076, -1,1078, 1077, 1046, -1,1079, 1078, 1046, -1,1046, 1045, 1079, -1, + 1080, 1079, 1045, -1,1044, 1080, 1045, -1,1047, 1046, 1077, -1,1050, 1073, 1051, -1, + 1074, 1050, 1049, -1,1042, 1081, 1043, -1,1080, 1044, 1043, -1,1041, 1081, 1042, -1, + 1040, 1039, 1082, -1,1081, 1041, 1082, -1,1041, 1040, 1082, -1,1043, 1081, 1080, -1, + 1074, 1073, 1050, -1,1039, 1083, 1818, -1,1082, 1039, 1818, -1,720, 719, 1083, -1, + 1818, 1083, 719, -1,1818, 719, 1819, -1,1819, 1082, 1818, -1,1819, 1080, 1081, -1, + 1084, 1080, 1819, -1,1082, 1819, 1081, -1,717, 1084, 718, -1,1819, 718, 1084, -1, + 719, 718, 1819, -1,1085, 1080, 1084, -1,1820, 1085, 1084, -1,1086, 1085, 1821, -1, + 1077, 1086, 1821, -1,1089, 1820, 717, -1,1084, 717, 1820, -1,759, 1821, 1089, -1, + 1820, 1089, 1821, -1,1821, 759, 1822, -1,1821, 1085, 1820, -1,1822, 1077, 1821, -1, + 1823, 1076, 1822, -1,1077, 1822, 1076, -1,1087, 1823, 1824, -1,1076, 1823, 1087, -1, + 1074, 1087, 1088, -1,757, 1823, 1822, -1,758, 757, 1822, -1,1824, 1823, 757, -1,756, + 1824, 757, -1,755, 1088, 756, -1,1824, 756, 1088, -1,1088, 1087, 1824, -1,759, 758, + 1822, -1,1074, 754, 1073, -1,754, 1074, 755, -1,1090, 1072, 1073, -1,1072, 1090, + 1825, -1,1071, 1072, 1826, -1,1091, 1071, 1827, -1,1069, 1091, 1827, -1,753, 1825, + 754, -1,1090, 754, 1825, -1,1826, 1825, 753, -1,751, 1827, 1826, -1,1071, 1826, 1827, -1, + 1826, 752, 751, -1,1828, 1827, 751, -1,753, 752, 1826, -1,1826, 1072, 1825, -1,1828, + 1069, 1827, -1,1829, 1092, 1828, -1,1069, 1828, 1092, -1,1067, 1092, 1829, -1,749, + 1829, 1828, -1,1830, 1093, 1067, -1,1065, 1093, 1094, -1,1830, 1831, 1093, -1,1829, + 1830, 1067, -1,748, 1830, 1829, -1,749, 1828, 750, -1,748, 1829, 749, -1,746, 1094, + 1831, -1,1093, 1831, 1094, -1,1831, 747, 746, -1,748, 747, 1831, -1,1830, 748, 1831, -1, + 751, 750, 1828, -1,1094, 1064, 1065, -1,1832, 1063, 1064, -1,746, 1832, 1094, -1, + 1064, 1094, 1832, -1,745, 1832, 746, -1,1832, 1062, 1063, -1,1833, 1095, 1062, -1, + 744, 1095, 1833, -1,1832, 745, 1833, -1,1833, 745, 744, -1,1095, 744, 743, -1,1062, + 1832, 1833, -1,1061, 1062, 1096, -1,742, 1096, 1095, -1,1096, 1062, 1095, -1,742, + 1095, 743, -1,1834, 1061, 1096, -1,1834, 1096, 741, -1,742, 741, 1096, -1,1834, 1060, + 1061, -1,1097, 1059, 1060, -1,740, 1097, 741, -1,1097, 1834, 741, -1,1060, 1834, + 1097, -1,1835, 1058, 1059, -1,1835, 1057, 1058, -1,1835, 1097, 740, -1,740, 739, + 1835, -1,1835, 739, 1836, -1,1835, 1059, 1097, -1,1836, 1057, 1835, -1,1837, 1056, + 1836, -1,1057, 1836, 1056, -1,1098, 1055, 1837, -1,1056, 1837, 1055, -1,737, 1837, + 1836, -1,737, 1836, 738, -1,737, 736, 1098, -1,737, 1098, 1837, -1,739, 738, 1836, -1, + 1838, 1054, 1055, -1,1838, 1053, 1054, -1,1838, 1098, 736, -1,736, 735, 1838, -1, + 1838, 735, 1839, -1,1838, 1055, 1098, -1,1839, 1053, 1838, -1,1840, 1052, 1839, -1, + 1053, 1839, 1052, -1,1099, 1051, 1840, -1,1052, 1840, 1051, -1,733, 1840, 1839, -1, + 733, 1839, 734, -1,733, 732, 1099, -1,733, 1099, 1840, -1,735, 734, 1839, -1,1051, + 731, 1050, -1,731, 1051, 732, -1,1100, 1049, 1050, -1,1841, 1049, 1100, -1,1101, + 1841, 1842, -1,1049, 1841, 1101, -1,1102, 1101, 1843, -1,730, 1841, 1100, -1,731, + 730, 1100, -1,1842, 1841, 730, -1,729, 1842, 730, -1,728, 1843, 729, -1,1842, 729, + 1843, -1,1844, 1843, 728, -1,1843, 1101, 1842, -1,1843, 1046, 1102, -1,1844, 1103, + 1046, -1,1845, 1103, 1844, -1,1843, 1844, 1046, -1,1104, 1845, 1846, -1,1103, 1845, + 1104, -1,1043, 1104, 1105, -1,726, 1845, 1844, -1,727, 726, 1844, -1,1846, 1845, + 726, -1,725, 1846, 726, -1,724, 1105, 725, -1,1846, 725, 1105, -1,1105, 1104, 1846, -1, + 728, 727, 1844, -1,1105, 1042, 1043, -1,1847, 1041, 1042, -1,724, 1847, 1105, -1, + 1042, 1105, 1847, -1,723, 1847, 724, -1,1847, 1040, 1041, -1,1848, 1106, 1040, -1, + 722, 1106, 1848, -1,1847, 723, 1848, -1,1848, 723, 722, -1,1106, 722, 721, -1,1040, + 1847, 1848, -1,1106, 720, 1083, -1,1040, 1083, 1039, -1,1040, 1106, 1083, -1,721, + 720, 1106, -1,1110, 1113, 1111, -1,1112, 1111, 1113, -1,1113, 1107, 1114, -1,1108, + 1107, 1110, -1,1113, 1110, 1107, -1,1110, 1109, 1108, -1,1107, 762, 1114, -1,761, + 1114, 762, -1,1108, 763, 762, -1,762, 1107, 1108, -1,1109, 764, 1108, -1,763, 1108, + 764, -1,1110, 765, 1109, -1,764, 1109, 765, -1,1111, 766, 765, -1,765, 1110, 1111, -1, + 1112, 767, 766, -1,766, 1111, 1112, -1,1113, 768, 1112, -1,767, 1112, 768, -1,1114, + 761, 768, -1,768, 1113, 1114, -1,1117, 1116, 1115, -1,1115, 1118, 1117, -1,1130, + 1118, 1115, -1,1119, 1130, 1129, -1,1120, 1129, 1128, -1,1127, 1121, 1128, -1,1130, + 1119, 1118, -1,1128, 1121, 1120, -1,1121, 1127, 1122, -1,1122, 1127, 1126, -1,1123, + 1126, 1125, -1,1125, 1124, 1123, -1,1123, 1122, 1126, -1,1119, 1129, 1120, -1,777, + 776, 1849, -1,1849, 776, 775, -1,777, 1849, 1132, -1,1849, 775, 1850, -1,1851, 775, + 774, -1,1851, 774, 773, -1,1132, 1122, 1123, -1,1132, 1849, 1122, -1,1850, 1851, + 1120, -1,1851, 1850, 775, -1,1120, 1121, 1850, -1,1120, 1851, 1852, -1,1850, 1121, + 1122, -1,1849, 1850, 1122, -1,1851, 773, 1852, -1,1852, 772, 1853, -1,772, 1852, + 773, -1,1853, 772, 771, -1,1852, 1853, 1118, -1,771, 770, 1854, -1,1855, 770, 769, -1, + 770, 1855, 1854, -1,771, 1854, 1853, -1,1853, 1854, 1117, -1,1119, 1852, 1118, -1, + 1118, 1853, 1117, -1,1855, 1131, 1116, -1,1131, 1855, 769, -1,1115, 1116, 1131, -1, + 1855, 1116, 1117, -1,1855, 1117, 1854, -1,1852, 1119, 1120, -1,769, 784, 1856, -1, + 1856, 784, 783, -1,769, 1856, 1131, -1,1856, 783, 1857, -1,1858, 783, 782, -1,1858, + 782, 781, -1,1131, 1130, 1115, -1,1131, 1856, 1130, -1,1857, 1858, 1128, -1,1858, + 1857, 783, -1,1128, 1129, 1857, -1,1128, 1858, 1859, -1,1857, 1129, 1130, -1,1856, + 1857, 1130, -1,1858, 781, 1859, -1,1859, 780, 1860, -1,780, 1859, 781, -1,1860, 780, + 779, -1,1859, 1860, 1134, -1,779, 778, 1861, -1,1862, 778, 777, -1,778, 1862, 1861, -1, + 779, 1861, 1860, -1,1860, 1861, 1133, -1,1127, 1859, 1134, -1,1134, 1860, 1133, -1, + 1862, 1132, 1124, -1,1132, 1862, 777, -1,1123, 1124, 1132, -1,1862, 1124, 1133, -1, + 1862, 1133, 1861, -1,1859, 1127, 1128, -1,1137, 1136, 1135, -1,1135, 1138, 1137, -1, + 1150, 1138, 1135, -1,1139, 1150, 1149, -1,1140, 1149, 1148, -1,1147, 1141, 1148, -1, + 1150, 1139, 1138, -1,1148, 1141, 1140, -1,1141, 1147, 1142, -1,1142, 1147, 1146, -1, + 1143, 1146, 1145, -1,1145, 1144, 1143, -1,1143, 1142, 1146, -1,1139, 1149, 1140, -1, + 785, 800, 1863, -1,1863, 800, 799, -1,785, 1863, 1155, -1,1863, 799, 1864, -1,1865, + 799, 798, -1,1865, 798, 797, -1,1155, 1154, 1143, -1,1155, 1863, 1154, -1,1864, 1865, + 1152, -1,1865, 1864, 799, -1,1152, 1153, 1864, -1,1152, 1865, 1866, -1,1864, 1153, + 1154, -1,1863, 1864, 1154, -1,1865, 797, 1866, -1,1866, 796, 1867, -1,796, 1866, + 797, -1,1867, 796, 795, -1,1866, 1867, 1138, -1,795, 794, 1868, -1,1869, 794, 793, -1, + 794, 1869, 1868, -1,795, 1868, 1867, -1,1867, 1868, 1137, -1,1139, 1866, 1138, -1, + 1138, 1867, 1137, -1,1869, 1151, 1136, -1,1151, 1869, 793, -1,1135, 1136, 1151, -1, + 1869, 1136, 1137, -1,1869, 1137, 1868, -1,1866, 1139, 1152, -1,793, 792, 1870, -1, + 1870, 792, 1871, -1,793, 1870, 1151, -1,1871, 791, 1872, -1,1873, 1156, 789, -1,791, + 1156, 1872, -1,791, 1871, 792, -1,1870, 1871, 1160, -1,1870, 1135, 1151, -1,1870, + 1160, 1135, -1,1872, 1873, 1158, -1,1873, 1872, 1156, -1,1158, 1159, 1872, -1,1158, + 1873, 1147, -1,1159, 1160, 1871, -1,1872, 1159, 1871, -1,1873, 789, 1147, -1,1874, + 788, 1875, -1,788, 1874, 789, -1,1875, 788, 1876, -1,1874, 1875, 1157, -1,1876, 787, + 1145, -1,1878, 786, 785, -1,787, 786, 1877, -1,787, 1876, 788, -1,1875, 1876, 1157, -1, + 1874, 1157, 1147, -1,787, 1877, 1145, -1,1157, 1876, 1145, -1,1877, 1144, 1145, -1, + 1878, 1155, 1143, -1,1155, 1878, 785, -1,1143, 1144, 1878, -1,1144, 1877, 786, -1, + 786, 1878, 1144, -1,1874, 1147, 789, -1,1164, 1166, 1165, -1,1163, 1162, 1161, -1, + 1164, 1167, 1166, -1,1169, 1167, 1170, -1,1164, 1170, 1167, -1,1168, 1167, 1169, -1, + 1161, 1168, 1171, -1,1170, 1163, 1171, -1,1169, 1171, 1168, -1,1163, 1161, 1171, -1, + 1164, 1163, 1170, -1,1161, 802, 801, -1,801, 1168, 1161, -1,1162, 803, 1161, -1,802, + 1161, 803, -1,1163, 804, 1162, -1,803, 1162, 804, -1,1164, 805, 804, -1,804, 1163, + 1164, -1,1165, 806, 805, -1,805, 1164, 1165, -1,1166, 807, 806, -1,806, 1165, 1166, -1, + 1167, 808, 1166, -1,807, 1166, 808, -1,1168, 801, 808, -1,808, 1167, 1168, -1,1169, + 869, 1171, -1,868, 1171, 869, -1,1170, 869, 1169, -1,869, 1170, 870, -1,1171, 868, + 870, -1,870, 1170, 1171, -1,1193, 1192, 1178, -1,1193, 1178, 1177, -1,1195, 1194, + 1177, -1,1196, 1195, 1176, -1,1177, 1194, 1193, -1,1179, 1178, 1192, -1,1183, 1190, + 1189, -1,1190, 1182, 1191, -1,1192, 1191, 1180, -1,1181, 1191, 1182, -1,1189, 1188, + 1183, -1,1180, 1191, 1181, -1,1180, 1179, 1192, -1,1177, 1176, 1195, -1,1197, 1196, + 1176, -1,1175, 1197, 1176, -1,1175, 1174, 1197, -1,1172, 1197, 1174, -1,1173, 1172, + 1174, -1,1183, 1188, 1184, -1,1187, 1184, 1188, -1,1182, 1190, 1183, -1,1185, 1187, + 1186, -1,1184, 1187, 1185, -1,1172, 810, 809, -1,809, 1197, 1172, -1,1173, 811, 810, -1, + 810, 1172, 1173, -1,812, 811, 1173, -1,1173, 1174, 812, -1,1199, 814, 1879, -1,1175, + 1176, 1199, -1,1879, 814, 813, -1,1879, 812, 1198, -1,812, 1879, 813, -1,1175, 1198, + 1174, -1,1198, 1175, 1879, -1,1879, 1175, 1199, -1,818, 817, 1880, -1,817, 816, 1880, -1, + 1180, 1203, 1202, -1,1880, 1202, 1203, -1,1881, 1202, 1880, -1,1203, 818, 1880, -1, + 1880, 816, 1881, -1,1881, 815, 1882, -1,815, 1881, 816, -1,1882, 814, 1199, -1,814, + 1882, 815, -1,1881, 1882, 1200, -1,1201, 1881, 1200, -1,1199, 1176, 1200, -1,1882, + 1199, 1200, -1,1881, 1201, 1202, -1,822, 821, 1883, -1,821, 820, 1883, -1,1184, 1204, + 1183, -1,1883, 1183, 1204, -1,1884, 1183, 1883, -1,1204, 822, 1883, -1,1883, 820, + 1884, -1,1884, 819, 1885, -1,819, 1884, 820, -1,1885, 818, 1203, -1,818, 1885, 819, -1, + 1884, 1885, 1181, -1,1182, 1884, 1181, -1,1203, 1180, 1181, -1,1885, 1203, 1181, -1, + 1884, 1182, 1183, -1,1185, 823, 822, -1,822, 1184, 1185, -1,1186, 824, 823, -1,823, + 1185, 1186, -1,825, 824, 1186, -1,1186, 1187, 825, -1,1886, 1189, 1190, -1,1188, + 1189, 1886, -1,1205, 1886, 1190, -1,828, 827, 1205, -1,1886, 1205, 827, -1,827, 1887, + 1886, -1,1888, 1188, 1887, -1,1187, 1188, 1888, -1,1886, 1887, 1188, -1,825, 1888, + 826, -1,1887, 826, 1888, -1,1888, 825, 1206, -1,1206, 1187, 1888, -1,827, 826, 1887, -1, + 1192, 1193, 1889, -1,1192, 831, 830, -1,831, 1207, 832, -1,1207, 831, 1889, -1,1192, + 1889, 831, -1,1889, 1193, 1207, -1,1890, 1191, 1192, -1,1891, 1190, 1890, -1,1191, + 1890, 1190, -1,1205, 1190, 1891, -1,829, 1891, 1890, -1,829, 1890, 830, -1,829, 828, + 1205, -1,829, 1205, 1891, -1,1192, 830, 1890, -1,833, 832, 1207, -1,1892, 833, 1207, -1, + 834, 833, 1893, -1,1207, 1193, 1892, -1,1893, 1892, 1193, -1,1193, 1194, 1893, -1, + 1894, 1893, 1194, -1,1893, 833, 1892, -1,1893, 835, 834, -1,1893, 1894, 835, -1,836, + 835, 1894, -1,1895, 836, 1894, -1,809, 836, 1895, -1,1196, 1895, 1209, -1,1894, 1209, + 1895, -1,1197, 1208, 1196, -1,1895, 1196, 1208, -1,1208, 809, 1895, -1,1194, 1209, + 1894, -1,1218, 1231, 1219, -1,1241, 1219, 1231, -1,1233, 1232, 1218, -1,1231, 1218, + 1232, -1,1233, 1218, 1217, -1,1240, 1239, 1244, -1,1210, 1239, 1238, -1,1210, 1244, + 1239, -1,1241, 1220, 1219, -1,1234, 1233, 1217, -1,1215, 1236, 1235, -1,1234, 1217, + 1216, -1,1215, 1235, 1216, -1,1215, 1214, 1236, -1,1235, 1234, 1216, -1,1210, 1237, + 1214, -1,1238, 1237, 1210, -1,1211, 1210, 1212, -1,1214, 1213, 1210, -1,1212, 1210, + 1213, -1,1236, 1214, 1237, -1,1243, 1241, 1240, -1,1244, 1210, 1245, -1,1230, 1247, + 1246, -1,1210, 1230, 1246, -1,1245, 1210, 1246, -1,1221, 1242, 1252, -1,1243, 1242, + 1220, -1,1221, 1252, 1251, -1,1221, 1251, 1250, -1,1222, 1250, 1249, -1,1220, 1242, + 1221, -1,1220, 1241, 1243, -1,1230, 1229, 1247, -1,1248, 1247, 1229, -1,1229, 1228, + 1248, -1,1228, 1249, 1248, -1,1249, 1228, 1227, -1,1249, 1224, 1223, -1,1224, 1249, + 1225, -1,1249, 1227, 1226, -1,1249, 1226, 1225, -1,1223, 1222, 1249, -1,1222, 1221, + 1250, -1,1243, 1240, 1244, -1,1253, 1230, 1210, -1,1896, 1230, 1253, -1,839, 1896, + 840, -1,1253, 840, 1896, -1,1896, 839, 1897, -1,1229, 1230, 1896, -1,1898, 1229, + 1897, -1,1228, 1229, 1898, -1,1896, 1897, 1229, -1,837, 1898, 838, -1,1897, 838, + 1898, -1,1898, 837, 1254, -1,1254, 1228, 1898, -1,839, 838, 1897, -1,1255, 1256, + 1214, -1,1899, 1256, 1255, -1,843, 1255, 844, -1,843, 1258, 1899, -1,1899, 1258, + 1900, -1,843, 1899, 1255, -1,1257, 1256, 1899, -1,1211, 1257, 1901, -1,1211, 1253, + 1210, -1,1253, 1211, 1901, -1,1258, 841, 1900, -1,1901, 1900, 841, -1,841, 840, 1901, -1, + 1253, 1901, 840, -1,1901, 1257, 1900, -1,1899, 1900, 1257, -1,1902, 1260, 1218, -1, + 1902, 1216, 1260, -1,1902, 1259, 848, -1,848, 847, 1902, -1,1902, 847, 1903, -1,1902, + 1218, 1259, -1,1903, 1216, 1902, -1,1904, 1261, 1903, -1,1216, 1903, 1261, -1,1255, + 1214, 1904, -1,1261, 1904, 1214, -1,845, 1904, 1903, -1,845, 1903, 846, -1,845, 844, + 1255, -1,845, 1255, 1904, -1,847, 846, 1903, -1,1219, 848, 1218, -1,848, 1219, 849, -1, + 1220, 850, 1219, -1,849, 1219, 850, -1,1221, 851, 1220, -1,850, 1220, 851, -1,1262, + 1223, 1224, -1,1905, 1223, 1262, -1,853, 1905, 854, -1,1262, 854, 1905, -1,1906, + 1905, 853, -1,1905, 1222, 1223, -1,1907, 1222, 1906, -1,1221, 1222, 1907, -1,1905, + 1906, 1222, -1,851, 1907, 852, -1,1906, 852, 1907, -1,1907, 851, 1263, -1,1263, 1221, + 1907, -1,853, 852, 1906, -1,1908, 1227, 1228, -1,1908, 1226, 1227, -1,1908, 1254, + 837, -1,837, 857, 1908, -1,1908, 857, 1909, -1,1908, 1228, 1254, -1,1909, 1226, 1908, -1, + 1910, 1264, 1909, -1,1226, 1909, 1264, -1,1262, 1224, 1910, -1,1264, 1910, 1224, -1, + 1265, 1910, 1909, -1,1265, 1909, 856, -1,1265, 854, 1262, -1,1265, 1262, 1910, -1, + 857, 856, 1909, -1,1231, 872, 1241, -1,871, 1241, 872, -1,1232, 872, 1231, -1,872, + 1232, 873, -1,1266, 1267, 1240, -1,1267, 1266, 1911, -1,1268, 1267, 1912, -1,1269, + 1268, 1913, -1,1236, 1269, 1913, -1,1275, 1911, 881, -1,1266, 881, 1911, -1,1912, + 1911, 1275, -1,1273, 1913, 1912, -1,1268, 1912, 1913, -1,1912, 1274, 1273, -1,1914, + 1913, 1273, -1,1275, 1274, 1912, -1,1912, 1267, 1911, -1,1914, 1236, 1913, -1,1915, + 1270, 1914, -1,1236, 1914, 1270, -1,1271, 1270, 1915, -1,876, 1915, 1914, -1,1916, + 1233, 1271, -1,1232, 1233, 1272, -1,1916, 1917, 1233, -1,1915, 1916, 1271, -1,875, + 1916, 1915, -1,876, 1914, 877, -1,875, 1915, 876, -1,873, 1272, 1917, -1,1233, 1917, + 1272, -1,1917, 874, 873, -1,875, 874, 1917, -1,1916, 875, 1917, -1,1273, 877, 1914, -1, + 1241, 871, 1240, -1,881, 1240, 871, -1,883, 882, 1252, -1,1252, 1242, 883, -1,884, + 883, 1242, -1,1242, 1243, 884, -1,1244, 885, 884, -1,884, 1243, 1244, -1,882, 892, + 1918, -1,1918, 892, 891, -1,882, 1918, 1283, -1,1918, 891, 1919, -1,1920, 891, 890, -1, + 1920, 890, 889, -1,1283, 1282, 1252, -1,1283, 1918, 1282, -1,1919, 1920, 1280, -1, + 1920, 1919, 891, -1,1280, 1281, 1919, -1,1280, 1920, 1921, -1,1919, 1281, 1282, -1, + 1918, 1919, 1282, -1,1920, 889, 1921, -1,1921, 888, 1922, -1,888, 1921, 889, -1,1922, + 888, 887, -1,1921, 1922, 1279, -1,887, 886, 1923, -1,1924, 886, 885, -1,886, 1924, + 1923, -1,887, 1923, 1922, -1,1922, 1923, 1278, -1,1248, 1921, 1279, -1,1279, 1922, + 1278, -1,1924, 1276, 1277, -1,1276, 1924, 885, -1,1244, 1277, 1276, -1,1924, 1277, + 1278, -1,1924, 1278, 1923, -1,1921, 1248, 1280, -1,1287, 1285, 1288, -1,1289, 1288, + 1285, -1,1286, 1285, 1287, -1,1289, 1285, 1284, -1,1284, 858, 1289, -1,858, 1284, + 859, -1,860, 859, 1284, -1,1284, 1285, 860, -1,1286, 861, 860, -1,860, 1285, 1286, -1, + 862, 861, 1286, -1,1286, 1287, 862, -1,1288, 862, 1287, -1,862, 1288, 863, -1,1289, + 858, 1288, -1,863, 1288, 858, -1,1290, 1293, 1292, -1,1292, 1291, 1290, -1,1290, + 865, 1293, -1,864, 1293, 865, -1,1293, 867, 1292, -1,867, 1293, 864, -1,867, 866, + 1291, -1,1291, 1292, 867, -1,1291, 866, 865, -1,865, 1290, 1291, -1,1308, 1322, 1307, -1, + 1309, 1320, 1321, -1,1308, 1321, 1322, -1,1309, 1321, 1308, -1,1322, 1323, 1307, -1, + 1306, 1324, 1325, -1,1306, 1307, 1323, -1,1306, 1325, 1305, -1,1326, 1304, 1305, -1, + 1305, 1325, 1326, -1,1306, 1323, 1324, -1,1319, 1312, 1318, -1,1312, 1319, 1311, -1, + 1318, 1314, 1317, -1,1316, 1317, 1315, -1,1313, 1318, 1312, -1,1311, 1319, 1320, -1, + 1311, 1320, 1310, -1,1314, 1315, 1317, -1,1313, 1314, 1318, -1,1320, 1309, 1310, -1, + 1336, 1337, 1294, -1,1298, 1332, 1333, -1,1295, 1296, 1336, -1,1336, 1296, 1335, -1, + 1296, 1334, 1335, -1,1334, 1296, 1297, -1,1334, 1297, 1333, -1,1295, 1336, 1294, -1, + 1298, 1333, 1297, -1,1327, 1328, 1303, -1,1303, 1329, 1302, -1,1329, 1303, 1328, -1, + 1302, 1329, 1330, -1,1303, 1304, 1327, -1,1300, 1330, 1331, -1,1299, 1332, 1298, -1, + 1331, 1332, 1299, -1,1330, 1300, 1301, -1,1300, 1331, 1299, -1,1330, 1301, 1302, -1, + 1327, 1304, 1326, -1,1340, 213, 212, -1,1339, 1925, 1926, -1,1340, 212, 1925, -1, + 1925, 1294, 1340, -1,1294, 1925, 1339, -1,1925, 212, 211, -1,211, 210, 1926, -1,1926, + 210, 1338, -1,211, 1926, 1925, -1,1296, 1338, 1297, -1,1338, 1296, 1926, -1,1926, + 1296, 1339, -1,1338, 210, 253, -1,1338, 253, 1927, -1,1928, 253, 252, -1,1928, 252, + 251, -1,1297, 1927, 1345, -1,1927, 1297, 1338, -1,1345, 1928, 1344, -1,1928, 1345, + 1927, -1,1929, 1344, 1928, -1,1927, 253, 1928, -1,1928, 251, 1929, -1,1929, 1341, + 1930, -1,1341, 1929, 251, -1,1931, 1930, 249, -1,249, 1930, 1341, -1,1342, 249, 248, -1, + 1929, 1930, 1301, -1,1929, 1301, 1300, -1,1301, 1930, 1931, -1,1301, 1931, 1343, -1, + 1343, 1342, 1303, -1,1342, 1343, 1931, -1,1931, 249, 1342, -1,1929, 1300, 1344, -1, + 247, 1304, 1303, -1,1303, 248, 247, -1,247, 246, 1349, -1,1932, 1349, 246, -1,1933, + 246, 245, -1,1934, 245, 244, -1,1934, 244, 243, -1,1304, 1932, 1348, -1,1932, 1304, + 1349, -1,1348, 1932, 1933, -1,1933, 1934, 1307, -1,1934, 1933, 245, -1,1307, 1306, + 1933, -1,1307, 1934, 1935, -1,1933, 1306, 1348, -1,1932, 246, 1933, -1,1934, 243, + 1935, -1,1935, 242, 1936, -1,242, 1935, 243, -1,1936, 242, 241, -1,1935, 1936, 1347, -1, + 241, 240, 1937, -1,1346, 240, 239, -1,240, 1938, 1937, -1,241, 1937, 1936, -1,1936, + 1937, 1310, -1,1308, 1935, 1347, -1,1347, 1936, 1310, -1,1938, 1346, 1312, -1,1346, + 1938, 240, -1,1312, 1311, 1938, -1,1938, 1311, 1310, -1,1938, 1310, 1937, -1,1935, + 1308, 1307, -1,239, 238, 1346, -1,1346, 238, 1939, -1,1346, 1313, 1312, -1,1313, + 1346, 1939, -1,1313, 1939, 1314, -1,238, 237, 1939, -1,237, 236, 1350, -1,237, 1350, + 1940, -1,1314, 1940, 1315, -1,1314, 1939, 1940, -1,1315, 1940, 1350, -1,1940, 1939, + 237, -1,1351, 1316, 1315, -1,235, 1351, 1350, -1,1350, 236, 235, -1,1315, 1350, 1351, -1, + 235, 234, 1351, -1,1351, 1941, 1316, -1,1941, 1351, 234, -1,234, 233, 1941, -1,1317, + 1941, 1352, -1,1316, 1941, 1317, -1,1318, 1317, 1352, -1,1352, 1941, 233, -1,233, + 232, 1942, -1,232, 231, 1942, -1,1318, 1352, 1942, -1,1942, 1319, 1318, -1,1943, + 1319, 1942, -1,1352, 233, 1942, -1,1942, 231, 1943, -1,1943, 230, 1944, -1,230, 1943, + 231, -1,1944, 229, 1353, -1,229, 1944, 230, -1,1943, 1944, 1354, -1,1320, 1943, 1354, -1, + 1353, 1322, 1354, -1,1944, 1353, 1354, -1,1943, 1320, 1319, -1,229, 228, 1945, -1, + 228, 227, 1945, -1,1322, 1353, 1945, -1,1945, 1323, 1322, -1,1946, 1323, 1945, -1, + 1353, 229, 1945, -1,1945, 227, 1946, -1,1946, 226, 1947, -1,226, 1946, 227, -1,1947, + 225, 1355, -1,225, 1947, 226, -1,1946, 1947, 1356, -1,1324, 1946, 1356, -1,1355, + 1326, 1356, -1,1947, 1355, 1356, -1,1946, 1324, 1323, -1,224, 1327, 1326, -1,1326, + 225, 224, -1,224, 223, 1365, -1,1365, 223, 1948, -1,1949, 1948, 1357, -1,1357, 1948, + 223, -1,1950, 1357, 1358, -1,1365, 1948, 1364, -1,1365, 1364, 1327, -1,1364, 1948, + 1949, -1,1364, 1949, 1363, -1,1363, 1950, 1362, -1,1950, 1363, 1949, -1,1362, 1950, + 1951, -1,1949, 1357, 1950, -1,1358, 220, 1950, -1,220, 219, 1951, -1,1951, 219, 1952, -1, + 220, 1951, 1950, -1,1953, 1952, 218, -1,218, 1952, 219, -1,1359, 218, 217, -1,1951, + 1952, 1361, -1,1951, 1361, 1331, -1,1361, 1952, 1953, -1,1361, 1953, 1360, -1,1360, + 1359, 1334, -1,1359, 1360, 1953, -1,1953, 218, 1359, -1,1951, 1331, 1362, -1,217, + 216, 1359, -1,1359, 216, 1954, -1,1359, 1335, 1334, -1,1335, 1359, 1954, -1,1335, + 1954, 1336, -1,216, 215, 1954, -1,215, 214, 1366, -1,215, 1366, 1955, -1,1336, 1955, + 1337, -1,1336, 1954, 1955, -1,1337, 1955, 1366, -1,1955, 1954, 215, -1,1340, 1294, + 1337, -1,213, 1340, 1366, -1,1366, 214, 213, -1,1366, 1340, 1337, -1,1372, 1373, + 1374, -1,1369, 1370, 1371, -1,1371, 1372, 1369, -1,1372, 1367, 1369, -1,1367, 1372, + 1374, -1,1367, 1368, 1369, -1,1368, 1367, 255, -1,255, 254, 1368, -1,255, 1374, 256, -1, + 1374, 255, 1367, -1,1374, 1373, 257, -1,257, 256, 1374, -1,1373, 1372, 258, -1,258, + 257, 1373, -1,258, 1371, 259, -1,1371, 258, 1372, -1,259, 1371, 1370, -1,1370, 260, + 259, -1,1370, 1369, 261, -1,261, 260, 1370, -1,261, 1368, 254, -1,1368, 261, 1369, -1, + 1385, 1380, 1384, -1,1379, 1385, 1386, -1,1386, 1387, 1378, -1,1383, 1384, 1381, -1, + 1381, 1382, 1383, -1,1381, 1384, 1380, -1,1387, 1388, 1377, -1,1389, 1390, 1375, -1, + 1375, 1376, 1389, -1,1376, 1377, 1388, -1,1385, 1379, 1380, -1,1386, 1378, 1379, -1, + 1377, 1378, 1387, -1,1376, 1388, 1389, -1,262, 277, 1394, -1,1956, 1394, 277, -1, + 1957, 277, 276, -1,1958, 276, 275, -1,1958, 275, 274, -1,1375, 1956, 1376, -1,1956, + 1375, 1394, -1,1376, 1956, 1957, -1,1957, 1958, 1378, -1,1958, 1957, 276, -1,1378, + 1377, 1957, -1,1378, 1958, 1959, -1,1957, 1377, 1376, -1,1956, 277, 1957, -1,1958, + 274, 1959, -1,1959, 1391, 1960, -1,1391, 1959, 274, -1,1960, 1391, 272, -1,1959, + 1960, 1380, -1,272, 271, 1961, -1,1392, 271, 270, -1,271, 1962, 1961, -1,272, 1961, + 1960, -1,1960, 1961, 1393, -1,1379, 1959, 1380, -1,1380, 1960, 1393, -1,1962, 1392, + 1383, -1,1392, 1962, 271, -1,1383, 1382, 1962, -1,1962, 1382, 1393, -1,1962, 1393, + 1961, -1,1959, 1379, 1378, -1,270, 1395, 1392, -1,1963, 1392, 1395, -1,1964, 1395, + 268, -1,1965, 268, 267, -1,1965, 267, 266, -1,1383, 1963, 1384, -1,1963, 1383, 1392, -1, + 1384, 1963, 1964, -1,1964, 1965, 1386, -1,1965, 1964, 268, -1,1386, 1385, 1964, -1, + 1386, 1965, 1966, -1,1964, 1385, 1384, -1,1963, 1395, 1964, -1,1965, 266, 1966, -1, + 1966, 265, 1967, -1,265, 1966, 266, -1,1967, 265, 264, -1,1966, 1967, 1396, -1,264, + 263, 1968, -1,1394, 263, 262, -1,263, 1969, 1968, -1,264, 1968, 1967, -1,1967, 1968, + 1389, -1,1387, 1966, 1396, -1,1396, 1967, 1389, -1,1969, 1394, 1375, -1,1394, 1969, + 263, -1,1375, 1390, 1969, -1,1969, 1390, 1389, -1,1969, 1389, 1968, -1,1966, 1387, + 1386, -1,1402, 1403, 1407, -1,1408, 1402, 1407, -1,1409, 1401, 1408, -1,1405, 1406, + 1404, -1,1403, 1404, 1406, -1,1406, 1407, 1403, -1,1409, 1410, 1400, -1,1411, 1412, + 1398, -1,1397, 1398, 1412, -1,1411, 1398, 1399, -1,1408, 1401, 1402, -1,1401, 1409, + 1400, -1,1400, 1410, 1399, -1,1411, 1399, 1410, -1,278, 293, 1420, -1,1970, 1420, + 293, -1,1971, 293, 292, -1,1972, 292, 1413, -1,1972, 1413, 290, -1,1397, 1970, 1419, -1, + 1970, 1397, 1420, -1,1419, 1970, 1971, -1,1971, 1972, 1417, -1,1972, 1971, 292, -1, + 1417, 1418, 1971, -1,1417, 1972, 1973, -1,1971, 1418, 1419, -1,1970, 293, 1971, -1, + 1972, 290, 1973, -1,1973, 289, 1974, -1,289, 1973, 290, -1,1974, 289, 288, -1,1973, + 1974, 1416, -1,288, 1414, 1975, -1,1415, 1414, 286, -1,1414, 1976, 1975, -1,288, + 1975, 1974, -1,1974, 1975, 1403, -1,1401, 1973, 1416, -1,1416, 1974, 1403, -1,1976, + 1415, 1405, -1,1415, 1976, 1414, -1,1405, 1404, 1976, -1,1976, 1404, 1403, -1,1976, + 1403, 1975, -1,1973, 1401, 1417, -1,286, 1977, 1415, -1,1977, 286, 285, -1,1415, + 1977, 1405, -1,1977, 285, 1978, -1,1979, 284, 283, -1,1978, 285, 284, -1,1980, 283, + 282, -1,1977, 1424, 1405, -1,1424, 1977, 1978, -1,1424, 1978, 1423, -1,1979, 1980, + 1422, -1,1980, 1979, 283, -1,1422, 1423, 1979, -1,1422, 1980, 1409, -1,1979, 1423, + 1978, -1,1978, 284, 1979, -1,1980, 282, 1409, -1,1981, 281, 1982, -1,281, 1981, 282, -1, + 1982, 281, 1983, -1,1981, 1982, 1421, -1,1983, 280, 1411, -1,1985, 279, 278, -1,280, + 279, 1984, -1,280, 1983, 281, -1,1982, 1983, 1421, -1,1981, 1421, 1409, -1,280, 1984, + 1411, -1,1421, 1983, 1411, -1,1984, 1412, 1411, -1,1985, 1420, 1397, -1,1420, 1985, + 278, -1,1397, 1412, 1985, -1,1412, 1984, 279, -1,279, 1985, 1412, -1,1981, 1409, + 282, -1,1425, 1431, 1432, -1,1431, 1425, 1434, -1,1430, 1428, 1429, -1,1434, 1426, + 1433, -1,1426, 1434, 1425, -1,1433, 1426, 1427, -1,1435, 1427, 1428, -1,1430, 1431, + 1435, -1,1427, 1435, 1433, -1,1435, 1428, 1430, -1,1435, 1431, 1434, -1,294, 1425, + 295, -1,1425, 294, 1426, -1,1425, 1432, 296, -1,296, 295, 1425, -1,1432, 1431, 297, -1, + 297, 296, 1432, -1,297, 1430, 298, -1,1430, 297, 1431, -1,298, 1429, 299, -1,1429, + 298, 1430, -1,299, 1428, 300, -1,1428, 299, 1429, -1,1428, 1427, 301, -1,301, 300, + 1428, -1,301, 1426, 294, -1,1426, 301, 1427, -1,1434, 1433, 362, -1,362, 361, 1434, -1, + 362, 1433, 1435, -1,1435, 363, 362, -1,363, 1434, 361, -1,1434, 363, 1435, -1,1439, + 1457, 1458, -1,1438, 1458, 1459, -1,1438, 1439, 1458, -1,1438, 1460, 1437, -1,1438, + 1459, 1460, -1,1457, 1439, 1456, -1,1455, 1442, 1454, -1,1441, 1455, 1456, -1,1442, + 1455, 1441, -1,1443, 1454, 1442, -1,1443, 1453, 1454, -1,1441, 1456, 1440, -1,1456, + 1439, 1440, -1,1436, 1437, 1460, -1,1460, 1461, 1436, -1,1447, 1448, 1449, -1,1452, + 1444, 1445, -1,1452, 1453, 1444, -1,1452, 1445, 1451, -1,1447, 1450, 1446, -1,1450, + 1447, 1449, -1,1451, 1445, 1450, -1,1450, 1445, 1446, -1,1444, 1453, 1443, -1,302, + 1436, 303, -1,1436, 302, 1437, -1,303, 1461, 304, -1,1461, 303, 1436, -1,304, 1461, + 305, -1,1460, 305, 1461, -1,308, 307, 1464, -1,1464, 307, 1986, -1,1457, 1986, 1458, -1, + 1986, 1457, 1464, -1,1458, 1986, 1987, -1,307, 306, 1986, -1,1987, 306, 1988, -1, + 1988, 306, 305, -1,306, 1987, 1986, -1,1463, 1988, 1460, -1,1988, 1463, 1987, -1, + 1462, 1460, 1988, -1,1988, 305, 1462, -1,1987, 1463, 1458, -1,312, 311, 1466, -1, + 311, 310, 1455, -1,1466, 1989, 1454, -1,1989, 1466, 311, -1,1455, 1454, 1989, -1, + 1989, 311, 1455, -1,310, 1990, 1455, -1,1464, 1990, 309, -1,309, 1990, 310, -1,1464, + 309, 308, -1,1465, 1464, 1457, -1,1464, 1465, 1990, -1,1464, 1457, 1464, -1,1464, + 309, 1464, -1,1990, 1465, 1455, -1,1469, 317, 316, -1,1469, 316, 1991, -1,1992, 316, + 315, -1,1450, 1991, 1468, -1,1991, 1450, 1469, -1,1468, 1992, 1467, -1,1992, 1468, + 1991, -1,1991, 316, 1992, -1,315, 314, 1992, -1,1994, 314, 313, -1,312, 1466, 313, -1, + 1994, 313, 1466, -1,1467, 1993, 1453, -1,1467, 1992, 1993, -1,1993, 1454, 1453, -1, + 1454, 1993, 1994, -1,1454, 1994, 1466, -1,1993, 314, 1994, -1,1993, 1992, 314, -1, + 317, 1449, 318, -1,1449, 317, 1450, -1,318, 1448, 319, -1,1448, 318, 1449, -1,319, + 1448, 320, -1,1447, 320, 1448, -1,1471, 321, 320, -1,1471, 1447, 1995, -1,1995, 321, + 1471, -1,1470, 322, 1995, -1,321, 1995, 322, -1,1445, 1470, 1446, -1,1995, 1446, + 1470, -1,1447, 1446, 1995, -1,1996, 323, 322, -1,1996, 324, 323, -1,1996, 1470, 1445, -1, + 1445, 1475, 1996, -1,1996, 1475, 1997, -1,1996, 322, 1470, -1,1997, 324, 1996, -1, + 1998, 325, 1997, -1,324, 1997, 325, -1,1472, 326, 1998, -1,325, 1998, 326, -1,1473, + 1998, 1997, -1,1473, 1997, 1474, -1,1473, 1441, 1472, -1,1473, 1472, 1998, -1,1475, + 1474, 1997, -1,1999, 327, 326, -1,1999, 328, 327, -1,1999, 1472, 1441, -1,1441, 1440, + 1999, -1,1999, 1440, 2000, -1,1999, 326, 1472, -1,2000, 328, 1999, -1,2001, 329, + 2000, -1,328, 2000, 329, -1,1476, 302, 2001, -1,329, 2001, 302, -1,1477, 2001, 2000, -1, + 1477, 2000, 1439, -1,1477, 1437, 1476, -1,1477, 1476, 2001, -1,1440, 1439, 2000, -1, + 1494, 1495, 1516, -1,1519, 1492, 1493, -1,1494, 1518, 1493, -1,1516, 1517, 1494, -1, + 1495, 1515, 1516, -1,1496, 1497, 1515, -1,1497, 1478, 1515, -1,1478, 1497, 1498, -1, + 1515, 1478, 1514, -1,1496, 1515, 1495, -1,1519, 1491, 1492, -1,1490, 1491, 1510, -1, + 1520, 1491, 1519, -1,1520, 1510, 1491, -1,1493, 1518, 1519, -1,1513, 1514, 1478, -1, + 1509, 1511, 1512, -1,1510, 1511, 1490, -1,1512, 1513, 1508, -1,1494, 1517, 1518, -1, + 1490, 1511, 1489, -1,1508, 1513, 1478, -1,1481, 1482, 1504, -1,1506, 1479, 1480, -1, + 1481, 1505, 1480, -1,1504, 1505, 1481, -1,1482, 1483, 1504, -1,1503, 1483, 1484, -1, + 1503, 1484, 1485, -1,1502, 1486, 1487, -1,1486, 1502, 1485, -1,1483, 1503, 1504, -1, + 1502, 1487, 1488, -1,1505, 1506, 1480, -1,1508, 1478, 1507, -1,1509, 1512, 1508, -1, + 1506, 1507, 1479, -1,1502, 1503, 1485, -1,1501, 1502, 1488, -1,1488, 1499, 1500, -1, + 1500, 1501, 1488, -1,1499, 1489, 1509, -1,1489, 1499, 1488, -1,1509, 1489, 1511, -1, + 1478, 1479, 1507, -1,333, 332, 2002, -1,1479, 2002, 2003, -1,333, 2002, 1523, -1, + 1478, 1523, 1479, -1,1479, 1523, 2002, -1,2002, 332, 2003, -1,2004, 2003, 331, -1, + 331, 2003, 332, -1,2004, 331, 330, -1,1522, 2004, 1481, -1,2004, 1522, 2003, -1,1521, + 1481, 2004, -1,2004, 330, 1521, -1,2003, 1522, 1479, -1,337, 336, 1526, -1,336, 335, + 2005, -1,1495, 1526, 2005, -1,2005, 1525, 1495, -1,2006, 1525, 2005, -1,1526, 336, + 2005, -1,2005, 335, 2006, -1,2006, 334, 2007, -1,334, 2006, 335, -1,2007, 333, 1523, -1, + 333, 2007, 334, -1,2006, 2007, 1498, -1,1524, 2006, 1498, -1,1523, 1478, 1498, -1, + 2007, 1523, 1498, -1,2006, 1524, 1525, -1,341, 340, 2008, -1,340, 339, 2008, -1,1491, + 1528, 2008, -1,2008, 1492, 1491, -1,2009, 1492, 2008, -1,1528, 341, 2008, -1,2008, + 339, 2009, -1,2009, 338, 2010, -1,338, 2009, 339, -1,2010, 337, 1526, -1,337, 2010, + 338, -1,2009, 2010, 1527, -1,1493, 2009, 1527, -1,1526, 1495, 1527, -1,2010, 1526, + 1527, -1,2009, 1493, 1492, -1,341, 1491, 1490, -1,1490, 342, 341, -1,1490, 1489, + 343, -1,343, 342, 1490, -1,1489, 1488, 344, -1,344, 343, 1489, -1,347, 346, 1531, -1, + 1531, 346, 2011, -1,1485, 2011, 1486, -1,2011, 1485, 1531, -1,1486, 2011, 2012, -1, + 346, 345, 2011, -1,2012, 345, 2013, -1,2013, 345, 344, -1,345, 2012, 2011, -1,1530, + 2013, 1488, -1,2013, 1530, 2012, -1,1529, 1488, 2013, -1,2013, 344, 1529, -1,2012, + 1530, 1486, -1,330, 350, 2014, -1,350, 349, 2014, -1,1481, 1521, 2014, -1,2014, 1482, + 1481, -1,2015, 1482, 2014, -1,1521, 330, 2014, -1,2014, 349, 2015, -1,2015, 348, + 2016, -1,348, 2015, 349, -1,2016, 347, 1531, -1,347, 2016, 348, -1,2015, 2016, 1532, -1, + 1483, 2015, 1532, -1,1531, 1485, 1532, -1,2016, 1531, 1532, -1,2015, 1483, 1482, -1, + 364, 1500, 365, -1,1499, 365, 1500, -1,365, 1499, 366, -1,1509, 366, 1499, -1,366, + 1508, 367, -1,1508, 366, 1509, -1,1533, 1501, 1500, -1,1501, 1533, 2017, -1,1534, + 1501, 2018, -1,1535, 1534, 2019, -1,1504, 1535, 2019, -1,374, 2017, 364, -1,1533, + 364, 2017, -1,2018, 2017, 374, -1,372, 2019, 2018, -1,1534, 2018, 2019, -1,2018, + 373, 372, -1,2020, 2019, 372, -1,374, 373, 2018, -1,2018, 1501, 2017, -1,2020, 1504, + 2019, -1,2021, 1536, 2020, -1,1504, 2020, 1536, -1,1537, 1536, 2021, -1,370, 2021, + 2020, -1,2022, 1538, 1537, -1,1508, 1538, 1539, -1,2022, 2023, 1538, -1,2021, 2022, + 1537, -1,369, 2022, 2021, -1,370, 2020, 371, -1,369, 2021, 370, -1,367, 1539, 2023, -1, + 1538, 2023, 1539, -1,2023, 1540, 367, -1,369, 1540, 2023, -1,2022, 369, 2023, -1, + 372, 371, 2020, -1,375, 1511, 376, -1,1510, 376, 1511, -1,376, 1520, 377, -1,1520, + 376, 1510, -1,1547, 1548, 377, -1,1548, 1547, 2024, -1,1549, 1548, 2025, -1,1550, + 1549, 2026, -1,381, 1550, 2026, -1,1546, 2024, 1520, -1,1547, 1520, 2024, -1,2025, + 2024, 1546, -1,1544, 2026, 2025, -1,1549, 2025, 2026, -1,2025, 1545, 1544, -1,2027, + 2026, 1544, -1,1546, 1545, 2025, -1,2025, 1548, 2024, -1,2027, 381, 2026, -1,2028, + 382, 2027, -1,381, 2027, 382, -1,383, 382, 2028, -1,1543, 2028, 2027, -1,2029, 384, + 383, -1,385, 384, 1541, -1,2029, 2030, 384, -1,2028, 2029, 383, -1,1542, 2029, 2028, -1, + 1543, 2027, 1516, -1,1542, 2028, 1543, -1,1512, 1541, 2030, -1,384, 2030, 1541, -1, + 2030, 1513, 1512, -1,1542, 1513, 2030, -1,2029, 1542, 2030, -1,1544, 1516, 2027, -1, + 385, 1512, 375, -1,1511, 375, 1512, -1,1556, 1551, 1553, -1,1553, 1551, 1552, -1, + 1553, 1554, 1555, -1,1553, 1555, 1556, -1,351, 1552, 352, -1,1551, 352, 1552, -1, + 352, 1551, 1556, -1,1556, 353, 352, -1,1556, 1555, 354, -1,354, 353, 1556, -1,354, + 1554, 355, -1,1554, 354, 1555, -1,355, 1554, 356, -1,1553, 356, 1554, -1,356, 1552, + 351, -1,1552, 356, 1553, -1,1560, 1557, 1559, -1,1558, 1559, 1557, -1,357, 1558, + 358, -1,1557, 358, 1558, -1,358, 1557, 1560, -1,1560, 359, 358, -1,1560, 1559, 360, -1, + 360, 359, 1560, -1,360, 1558, 357, -1,1558, 360, 1559, -1,678, 676, 674, -1,678, + 677, 676, -1,681, 679, 678, -1,670, 682, 678, -1,678, 682, 681, -1,679, 681, 680, -1, + 670, 161, 682, -1,674, 673, 670, -1,673, 672, 671, -1,674, 676, 675, -1,670, 673, + 671, -1,670, 669, 110, -1,674, 670, 678, -1,670, 110, 173, -1,159, 683, 682, -1,161, + 160, 159, -1,173, 161, 670, -1,162, 161, 164, -1,161, 165, 164, -1,169, 165, 161, -1, + 164, 163, 162, -1,166, 165, 167, -1,172, 171, 170, -1,173, 172, 169, -1,173, 110, + 174, -1,169, 168, 167, -1,169, 172, 170, -1,169, 161, 173, -1,165, 169, 167, -1,161, + 159, 682, -1,2121, 2123, 2125, -1,2123, 2124, 2125, -1,2125, 2126, 2128, -1,2125, + 2129, 2117, -1,2128, 2129, 2125, -1,2127, 2128, 2126, -1,2129, 2133, 2117, -1,2117, + 2120, 2121, -1,2118, 2119, 2120, -1,2122, 2123, 2121, -1,2118, 2120, 2117, -1,2115, + 2116, 2117, -1,2125, 2117, 2121, -1,2113, 2115, 2117, -1,2129, 2130, 2131, -1,2131, + 2132, 2133, -1,2117, 2133, 2113, -1,2136, 2133, 2134, -1,2136, 2137, 2133, -1,2133, + 2137, 2109, -1,2134, 2135, 2136, -1,2107, 2137, 2138, -1,2110, 2111, 2112, -1,2109, + 2112, 2113, -1,2114, 2115, 2113, -1,2107, 2108, 2109, -1,2110, 2112, 2109, -1,2113, + 2133, 2109, -1,2107, 2109, 2137, -1,2129, 2131, 2133, -1,2139, 676, 677, -1,2141, + 677, 678, -1,2143, 679, 680, -1,2144, 680, 681, -1,679, 2142, 678, -1,677, 2141, + 2139, -1,2107, 2139, 2141, -1,2108, 2141, 2142, -1,678, 2142, 2141, -1,680, 2144, + 2143, -1,2110, 2143, 2144, -1,2111, 2144, 2145, -1,681, 2145, 2144, -1,2143, 2109, + 2142, -1,679, 2143, 2142, -1,2146, 2145, 681, -1,2146, 682, 683, -1,2147, 683, 159, -1, + 160, 161, 2149, -1,161, 162, 2150, -1,2148, 159, 160, -1,2151, 162, 163, -1,2146, + 683, 2147, -1,2113, 2146, 2147, -1,2152, 163, 164, -1,164, 165, 2153, -1,166, 167, + 2155, -1,2154, 165, 166, -1,2147, 159, 2148, -1,2146, 681, 682, -1,2146, 2112, 2145, -1, + 2108, 2142, 2109, -1,2109, 2143, 2110, -1,160, 2149, 2148, -1,2148, 2149, 2115, -1, + 2149, 2150, 2116, -1,161, 2150, 2149, -1,2111, 2110, 2144, -1,2107, 2141, 2108, -1, + 2111, 2145, 2112, -1,2112, 2146, 2113, -1,2147, 2148, 2114, -1,2149, 2116, 2115, -1, + 2148, 2115, 2114, -1,2113, 2147, 2114, -1,2117, 2116, 2150, -1,163, 2152, 2151, -1, + 2118, 2151, 2152, -1,2119, 2152, 2153, -1,164, 2153, 2152, -1,166, 2155, 2154, -1, + 2121, 2154, 2155, -1,2122, 2155, 2140, -1,167, 2140, 2155, -1,2154, 2120, 2153, -1, + 165, 2154, 2153, -1,2151, 2118, 2117, -1,2152, 2119, 2118, -1,2154, 2121, 2120, -1, + 2140, 2123, 2122, -1,2155, 2122, 2121, -1,2153, 2120, 2119, -1,2117, 2150, 2151, -1, + 162, 2151, 2150, -1,2140, 167, 168, -1,2156, 168, 169, -1,2158, 170, 171, -1,2159, + 171, 172, -1,170, 2157, 169, -1,168, 2156, 2140, -1,2123, 2140, 2156, -1,2124, 2156, + 2157, -1,169, 2157, 2156, -1,171, 2159, 2158, -1,2126, 2158, 2159, -1,2127, 2159, + 2160, -1,172, 2160, 2159, -1,2158, 2125, 2157, -1,170, 2158, 2157, -1,2161, 2160, + 172, -1,2161, 173, 174, -1,2162, 174, 110, -1,669, 670, 2164, -1,670, 671, 2165, -1, + 2163, 110, 669, -1,2166, 671, 672, -1,2161, 174, 2162, -1,2129, 2161, 2162, -1,2167, + 672, 673, -1,673, 674, 2168, -1,675, 676, 2170, -1,2169, 674, 675, -1,2162, 110, + 2163, -1,2161, 172, 173, -1,2161, 2128, 2160, -1,2124, 2157, 2125, -1,2125, 2158, + 2126, -1,669, 2164, 2163, -1,2163, 2164, 2131, -1,2164, 2165, 2132, -1,670, 2165, + 2164, -1,2127, 2126, 2159, -1,2123, 2156, 2124, -1,2127, 2160, 2128, -1,2128, 2161, + 2129, -1,2162, 2163, 2130, -1,2164, 2132, 2131, -1,2163, 2131, 2130, -1,2129, 2162, + 2130, -1,2133, 2132, 2165, -1,672, 2167, 2166, -1,2134, 2166, 2167, -1,2135, 2167, + 2168, -1,673, 2168, 2167, -1,675, 2170, 2169, -1,2137, 2169, 2170, -1,2138, 2170, + 2139, -1,676, 2139, 2170, -1,2169, 2136, 2168, -1,674, 2169, 2168, -1,2166, 2134, + 2133, -1,2167, 2135, 2134, -1,2169, 2137, 2136, -1,2139, 2107, 2138, -1,2170, 2138, + 2137, -1,2168, 2136, 2135, -1,2133, 2165, 2166, -1,671, 2166, 2165, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,3, 2, 0, -1,5, 2, 4, -1,6, 5, 4, -1,8, 3, 7, -1,0, 7, 3, -1,9, 4, 8, -1, + 3, 8, 4, -1,4, 9, 10, -1,11, 9, 8, -1,4, 2, 3, -1,12, 8, 7, -1,10, 6, 4, -1,15, 14, + 13, -1,18, 17, 16, -1,20, 19, 17, -1,21, 16, 14, -1,22, 10, 9, -1,13, 10, 23, -1, + 13, 23, 15, -1,23, 10, 24, -1,21, 15, 25, -1,16, 21, 18, -1,17, 18, 20, -1,18, 21, + 26, -1,21, 14, 15, -1,15, 23, 27, -1,20, 28, 19, -1,6, 10, 13, -1,20, 18, 26, -1, + 29, 11, 12, -1,11, 8, 12, -1,30, 24, 22, -1,10, 22, 24, -1,32, 30, 31, -1,11, 30, + 22, -1,12, 7, 33, -1,31, 30, 11, -1,35, 33, 34, -1,12, 33, 35, -1,29, 12, 35, -1, + 29, 31, 11, -1,32, 24, 30, -1,11, 22, 9, -1,36, 27, 32, -1,24, 32, 27, -1,25, 36, + 37, -1,27, 36, 25, -1,21, 25, 26, -1,26, 25, 38, -1,25, 15, 27, -1,39, 36, 32, -1, + 40, 39, 32, -1,37, 36, 39, -1,41, 37, 39, -1,42, 38, 41, -1,37, 41, 38, -1,38, 42, + 43, -1,38, 25, 37, -1,44, 26, 38, -1,31, 40, 32, -1,27, 23, 24, -1,20, 26, 44, -1, + 20, 44, 45, -1,46, 28, 45, -1,48, 47, 46, -1,49, 47, 48, -1,45, 48, 46, -1,50, 48, + 45, -1,52, 51, 44, -1,51, 45, 44, -1,53, 49, 50, -1,45, 51, 50, -1,54, 49, 53, -1, + 55, 53, 50, -1,48, 50, 49, -1,56, 50, 51, -1,49, 57, 47, -1,28, 20, 45, -1,59, 58, + 57, -1,62, 61, 60, -1,64, 63, 61, -1,65, 60, 58, -1,66, 59, 54, -1,57, 54, 59, -1, + 59, 66, 67, -1,53, 66, 54, -1,65, 59, 68, -1,60, 65, 62, -1,61, 62, 64, -1,62, 65, + 69, -1,65, 58, 59, -1,64, 62, 70, -1,49, 54, 57, -1,71, 66, 53, -1,72, 52, 43, -1, + 52, 44, 43, -1,56, 55, 50, -1,51, 52, 56, -1,55, 71, 53, -1,73, 55, 56, -1,71, 67, + 66, -1,74, 56, 52, -1,72, 43, 75, -1,74, 52, 72, -1,76, 71, 73, -1,56, 74, 73, -1, + 71, 76, 77, -1,71, 55, 73, -1,77, 67, 71, -1,42, 75, 43, -1,78, 68, 77, -1,67, 77, + 68, -1,69, 78, 79, -1,68, 78, 69, -1,62, 69, 70, -1,70, 69, 79, -1,69, 65, 68, -1, + 80, 78, 77, -1,81, 80, 77, -1,79, 78, 80, -1,82, 79, 80, -1,84, 83, 82, -1,79, 82, + 83, -1,83, 70, 79, -1,76, 81, 77, -1,68, 59, 67, -1,38, 43, 44, -1,60, 85, 58, -1, + 57, 87, 86, -1,85, 87, 58, -1,85, 60, 61, -1,89, 88, 61, -1,61, 63, 89, -1,88, 85, + 61, -1,89, 63, 90, -1,47, 92, 91, -1,93, 28, 91, -1,28, 93, 94, -1,46, 91, 28, -1, + 58, 87, 57, -1,46, 47, 91, -1,57, 92, 47, -1,57, 86, 92, -1,96, 95, 90, -1,90, 97, + 96, -1,95, 89, 90, -1,96, 97, 98, -1,101, 100, 99, -1,98, 99, 100, -1,100, 96, 98, -1, + 101, 99, 102, -1,105, 104, 103, -1,108, 107, 106, -1,104, 108, 103, -1,102, 105, + 103, -1,109, 103, 108, -1,106, 109, 108, -1,107, 110, 106, -1,105, 102, 99, -1,17, + 94, 111, -1,17, 111, 112, -1,14, 112, 113, -1,17, 19, 94, -1,14, 16, 112, -1,17, + 112, 16, -1,113, 13, 14, -1,94, 19, 28, -1,6, 13, 114, -1,115, 114, 13, -1,13, 113, + 115, -1,6, 114, 116, -1,2, 5, 116, -1,116, 117, 2, -1,5, 6, 116, -1,2, 117, 118, -1, + 121, 120, 119, -1,124, 123, 122, -1,120, 123, 124, -1,110, 125, 106, -1,125, 110, + 119, -1,119, 110, 121, -1,120, 124, 119, -1,123, 127, 126, -1,128, 1, 118, -1,118, + 129, 128, -1,1, 2, 118, -1,128, 129, 130, -1,123, 126, 122, -1,127, 131, 130, -1, + 126, 127, 130, -1,131, 128, 130, -1,134, 133, 132, -1,135, 134, 132, -1,137, 134, + 136, -1,138, 137, 136, -1,140, 135, 139, -1,132, 139, 135, -1,141, 136, 140, -1,135, + 140, 136, -1,136, 141, 142, -1,143, 141, 140, -1,136, 134, 135, -1,144, 140, 139, -1, + 142, 138, 136, -1,147, 146, 145, -1,150, 149, 148, -1,152, 151, 149, -1,153, 148, + 146, -1,154, 142, 141, -1,145, 142, 155, -1,145, 155, 147, -1,155, 142, 156, -1,153, + 147, 157, -1,148, 153, 150, -1,149, 150, 152, -1,150, 153, 158, -1,153, 146, 147, -1, + 147, 155, 159, -1,152, 160, 151, -1,138, 142, 145, -1,152, 150, 158, -1,117, 144, + 161, -1,144, 139, 161, -1,154, 143, 162, -1,140, 144, 143, -1,142, 154, 156, -1,156, + 154, 162, -1,141, 143, 154, -1,116, 143, 144, -1,117, 161, 118, -1,114, 162, 116, -1, + 144, 117, 116, -1,162, 114, 163, -1,143, 116, 162, -1,163, 156, 162, -1,164, 159, + 163, -1,156, 163, 159, -1,157, 164, 165, -1,159, 164, 157, -1,153, 157, 158, -1,158, + 157, 166, -1,157, 147, 159, -1,113, 164, 163, -1,115, 113, 163, -1,165, 164, 113, -1, + 112, 165, 113, -1,111, 166, 112, -1,165, 112, 166, -1,166, 111, 167, -1,166, 157, + 165, -1,168, 158, 166, -1,114, 115, 163, -1,159, 155, 156, -1,152, 158, 168, -1,152, + 168, 169, -1,170, 160, 169, -1,172, 171, 170, -1,173, 171, 172, -1,169, 172, 170, -1, + 174, 172, 169, -1,176, 175, 168, -1,175, 169, 168, -1,177, 173, 174, -1,169, 175, + 174, -1,178, 173, 177, -1,179, 177, 174, -1,172, 174, 173, -1,180, 174, 175, -1,173, + 181, 171, -1,160, 152, 169, -1,183, 182, 181, -1,186, 185, 184, -1,188, 187, 185, -1, + 189, 184, 182, -1,190, 183, 178, -1,181, 178, 183, -1,183, 190, 191, -1,177, 190, + 178, -1,189, 183, 192, -1,184, 189, 186, -1,185, 186, 188, -1,186, 189, 193, -1,189, + 182, 183, -1,188, 186, 194, -1,173, 178, 181, -1,195, 190, 177, -1,93, 176, 167, -1, + 176, 168, 167, -1,180, 179, 174, -1,175, 176, 180, -1,179, 195, 177, -1,92, 179, + 180, -1,195, 191, 190, -1,91, 180, 176, -1,93, 167, 94, -1,91, 176, 93, -1,86, 195, + 92, -1,180, 91, 92, -1,195, 86, 196, -1,195, 179, 92, -1,196, 191, 195, -1,111, 94, + 167, -1,197, 192, 196, -1,191, 196, 192, -1,193, 197, 198, -1,192, 197, 193, -1,186, + 193, 194, -1,194, 193, 199, -1,193, 189, 192, -1,85, 197, 196, -1,87, 85, 196, -1, + 198, 197, 85, -1,88, 198, 85, -1,89, 199, 88, -1,198, 88, 199, -1,199, 193, 198, -1, + 86, 87, 196, -1,192, 183, 191, -1,166, 167, 168, -1,202, 201, 200, -1,205, 204, 203, -1, + 203, 207, 206, -1,202, 203, 204, -1,208, 207, 202, -1,208, 209, 207, -1,211, 209, + 210, -1,200, 208, 202, -1,202, 207, 203, -1,211, 212, 209, -1,211, 210, 212, -1,209, + 213, 207, -1,210, 215, 214, -1,218, 217, 216, -1,220, 219, 218, -1,221, 217, 218, -1, + 222, 219, 220, -1,216, 220, 218, -1,225, 224, 223, -1,222, 220, 223, -1,227, 226, + 223, -1,225, 223, 228, -1,231, 230, 229, -1,234, 233, 232, -1,234, 236, 235, -1,237, + 231, 229, -1,240, 239, 238, -1,239, 230, 227, -1,227, 230, 226, -1,234, 235, 237, -1, + 243, 242, 241, -1,246, 245, 244, -1,243, 248, 247, -1,251, 250, 249, -1,254, 253, + 252, -1,205, 241, 255, -1,212, 210, 214, -1,242, 255, 241, -1,253, 251, 252, -1,248, + 256, 247, -1,257, 248, 244, -1,246, 244, 248, -1,248, 243, 241, -1,260, 259, 258, -1, + 241, 205, 206, -1,206, 207, 213, -1,212, 213, 209, -1,214, 261, 252, -1,263, 262, + 234, -1,265, 263, 264, -1,251, 253, 250, -1,234, 262, 233, -1,214, 215, 261, -1,257, + 256, 248, -1,251, 267, 266, -1,229, 230, 239, -1,270, 269, 268, -1,271, 259, 260, -1, + 268, 258, 270, -1,271, 265, 264, -1,274, 273, 272, -1,277, 276, 275, -1,275, 276, + 278, -1,272, 273, 277, -1,266, 279, 269, -1,270, 258, 259, -1,234, 264, 263, -1,224, + 222, 223, -1,229, 234, 237, -1,228, 223, 226, -1,259, 271, 264, -1,240, 274, 272, -1, + 240, 272, 239, -1,272, 277, 280, -1,239, 281, 238, -1,277, 275, 280, -1,281, 239, + 282, -1,266, 269, 270, -1,279, 266, 267, -1,205, 203, 206, -1,267, 251, 249, -1,282, + 239, 227, -1,254, 252, 261, -1,285, 284, 283, -1,287, 285, 286, -1,289, 261, 288, -1, + 289, 291, 290, -1,291, 289, 288, -1,291, 288, 292, -1,290, 291, 293, -1,293, 294, + 290, -1,294, 293, 295, -1,287, 294, 296, -1,287, 286, 294, -1,291, 297, 293, -1,294, + 286, 290, -1,284, 285, 287, -1,300, 299, 298, -1,303, 302, 301, -1,300, 298, 304, -1, + 306, 299, 305, -1,304, 283, 307, -1,307, 284, 308, -1,310, 306, 309, -1,303, 233, + 302, -1,310, 312, 311, -1,311, 312, 302, -1,300, 304, 307, -1,283, 284, 307, -1,287, + 313, 284, -1,295, 314, 294, -1,307, 308, 315, -1,294, 314, 316, -1,294, 316, 296, -1, + 307, 315, 300, -1,293, 297, 295, -1,297, 291, 292, -1,296, 317, 287, -1,317, 313, + 287, -1,284, 313, 308, -1,300, 315, 318, -1,305, 309, 306, -1,320, 319, 309, -1,321, + 312, 319, -1,309, 319, 310, -1,301, 323, 322, -1,312, 323, 301, -1,301, 322, 303, -1, + 312, 301, 302, -1,309, 305, 318, -1,319, 312, 310, -1,319, 324, 321, -1,324, 319, + 320, -1,323, 312, 325, -1,325, 312, 321, -1,320, 309, 318, -1,305, 300, 318, -1,300, + 305, 299, -1,328, 327, 326, -1,328, 328, 328, -1,330, 329, 326, -1,328, 328, 328, -1, + 326, 329, 328, -1,330, 326, 331, -1,328, 328, 328, -1,331, 328, 332, -1,333, 330, + 332, -1,328, 328, 328, -1,332, 330, 331, -1,328, 328, 328, -1,330, 333, 334, -1,328, + 333, 328, -1,328, 334, 333, -1,328, 335, 328, -1,334, 335, 330, -1,328, 328, 333, -1, + 328, 328, 335, -1,328, 336, 335, -1,328, 328, 335, -1,328, 328, 335, -1,330, 335, + 337, -1,338, 326, 327, -1,337, 335, 336, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,340, 338, 339, -1,328, 328, 341, -1, + 341, 328, 328, -1,340, 339, 342, -1,340, 342, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 335, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,327, 343, 338, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 336, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,337, 345, 344, -1,336, 345, 337, -1,337, 344, 346, -1, + 328, 328, 345, -1,328, 328, 328, -1,346, 347, 337, -1,328, 328, 328, -1,328, 328, + 328, -1,337, 347, 348, -1,345, 336, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,348, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,337, 348, 349, -1,341, 328, 328, -1,328, 328, 328, -1, + 328, 341, 328, -1,341, 328, 328, -1,328, 328, 341, -1,350, 328, 341, -1,350, 341, + 339, -1,351, 328, 350, -1,328, 328, 328, -1,328, 350, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,351, 328, 328, -1,338, 352, 339, -1,338, 343, 352, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,339, 341, 342, -1,328, 328, 328, -1,328, 328, 328, -1, + 339, 328, 328, -1,351, 350, 339, -1,328, 328, 328, -1,328, 328, 328, -1,353, 351, + 339, -1,328, 353, 328, -1,328, 351, 328, -1,353, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,353, 339, 349, -1,354, 354, 354, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 348, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 348, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,355, 328, 328, -1,353, 355, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,357, 356, 349, -1, + 359, 358, 349, -1,349, 358, 357, -1,359, 349, 360, -1,356, 355, 349, -1,328, 328, + 328, -1,349, 348, 360, -1,353, 349, 355, -1,328, 328, 328, -1,360, 348, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 340, -1,328, 328, + 328, -1,331, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,362, 208, 361, -1,364, 362, 363, -1,362, 361, 365, -1, + 362, 367, 366, -1,362, 366, 363, -1,367, 362, 365, -1,369, 368, 365, -1,367, 365, + 368, -1,370, 369, 365, -1,365, 372, 371, -1,365, 371, 370, -1,373, 372, 365, -1,364, + 375, 374, -1,364, 374, 376, -1,379, 378, 377, -1,376, 379, 364, -1,364, 379, 377, -1, + 364, 363, 375, -1,377, 381, 380, -1,377, 380, 373, -1,383, 382, 377, -1,377, 384, + 383, -1,373, 384, 377, -1,377, 378, 381, -1,365, 384, 373, -1,386, 226, 385, -1,389, + 388, 387, -1,388, 386, 385, -1,387, 390, 389, -1,389, 390, 391, -1,386, 388, 389, -1, + 394, 393, 392, -1,392, 395, 394, -1,397, 393, 396, -1,400, 399, 398, -1,396, 402, + 401, -1,400, 401, 402, -1,330, 398, 399, -1,404, 403, 395, -1,405, 404, 392, -1,395, + 392, 404, -1,404, 405, 406, -1,407, 405, 392, -1,398, 401, 400, -1,401, 397, 396, -1, + 337, 407, 401, -1,397, 401, 407, -1,398, 337, 401, -1,407, 392, 397, -1,392, 393, + 397, -1,409, 408, 292, -1,292, 410, 409, -1,412, 408, 411, -1,413, 297, 408, -1,292, + 408, 297, -1,408, 412, 413, -1,232, 233, 414, -1,415, 414, 235, -1,418, 417, 416, -1, + 414, 419, 235, -1,417, 421, 420, -1,417, 418, 422, -1,419, 421, 235, -1,388, 226, + 422, -1,419, 423, 421, -1,414, 424, 419, -1,417, 420, 425, -1,421, 423, 420, -1,417, + 425, 416, -1,388, 427, 426, -1,422, 427, 388, -1,426, 387, 388, -1,418, 426, 427, -1, + 418, 427, 422, -1,430, 429, 428, -1,432, 430, 431, -1,433, 432, 431, -1,435, 433, + 434, -1,429, 278, 428, -1,434, 436, 435, -1,432, 433, 435, -1,438, 436, 437, -1,437, + 439, 438, -1,438, 435, 436, -1,429, 430, 432, -1,245, 441, 440, -1,443, 440, 442, -1, + 444, 443, 442, -1,447, 446, 445, -1,442, 440, 441, -1,450, 449, 448, -1,450, 448, + 451, -1,452, 451, 448, -1,442, 453, 444, -1,454, 451, 452, -1,456, 453, 455, -1,453, + 456, 444, -1,459, 458, 457, -1,455, 458, 456, -1,457, 458, 455, -1,461, 454, 460, -1, + 460, 454, 452, -1,461, 460, 462, -1,459, 464, 463, -1,462, 457, 461, -1,462, 464, + 457, -1,457, 464, 459, -1,467, 466, 465, -1,465, 468, 446, -1,470, 463, 469, -1,473, + 472, 471, -1,474, 445, 446, -1,474, 446, 468, -1,471, 201, 473, -1,446, 467, 465, -1, + 477, 476, 475, -1,470, 477, 475, -1,475, 478, 467, -1,478, 475, 476, -1,475, 467, + 479, -1,466, 467, 478, -1,475, 463, 470, -1,481, 480, 201, -1,482, 481, 201, -1,479, + 483, 201, -1,201, 483, 482, -1,479, 201, 475, -1,480, 473, 201, -1,469, 463, 464, -1, + 361, 484, 365, -1,487, 486, 485, -1,490, 489, 488, -1,488, 491, 486, -1,485, 492, + 487, -1,488, 489, 491, -1,485, 486, 493, -1,462, 491, 489, -1,490, 494, 489, -1,496, + 494, 495, -1,494, 490, 495, -1,497, 494, 496, -1,498, 496, 495, -1,494, 499, 489, -1, + 486, 491, 452, -1,502, 501, 500, -1,498, 500, 501, -1,505, 504, 503, -1,503, 504, + 506, -1,508, 507, 502, -1,501, 502, 507, -1,509, 501, 507, -1,510, 507, 508, -1,504, + 512, 511, -1,504, 505, 512, -1,510, 513, 507, -1,501, 496, 498, -1,501, 497, 496, -1, + 448, 485, 493, -1,452, 491, 460, -1,452, 493, 486, -1,491, 462, 460, -1,499, 462, + 489, -1,497, 499, 494, -1,501, 509, 497, -1,510, 514, 513, -1,515, 514, 510, -1,507, + 513, 509, -1,516, 514, 515, -1,518, 517, 515, -1,516, 515, 517, -1,519, 518, 515, -1, + 520, 515, 511, -1,519, 515, 521, -1,521, 515, 522, -1,515, 504, 511, -1,515, 523, + 522, -1,515, 520, 523, -1,511, 525, 524, -1,511, 526, 525, -1,511, 524, 520, -1,449, + 485, 448, -1,529, 528, 527, -1,527, 528, 530, -1,530, 532, 531, -1,530, 531, 527, -1, + 535, 534, 533, -1,538, 537, 536, -1,540, 539, 538, -1,541, 534, 535, -1,544, 543, + 542, -1,534, 541, 545, -1,534, 545, 546, -1,533, 536, 537, -1,549, 548, 547, -1,550, + 547, 548, -1,549, 552, 551, -1,551, 548, 549, -1,539, 540, 553, -1,550, 555, 554, -1, + 539, 553, 554, -1,548, 555, 550, -1,554, 555, 539, -1,539, 537, 538, -1,558, 557, + 556, -1,558, 560, 559, -1,558, 561, 560, -1,558, 562, 561, -1,556, 543, 544, -1,557, + 558, 559, -1,564, 542, 563, -1,542, 543, 563, -1,563, 565, 564, -1,568, 567, 566, -1, + 563, 568, 566, -1,568, 569, 567, -1,570, 567, 569, -1,572, 569, 571, -1,570, 569, + 572, -1,558, 556, 544, -1,573, 572, 571, -1,576, 575, 574, -1,565, 563, 566, -1,578, + 551, 577, -1,580, 579, 578, -1,551, 578, 579, -1,533, 534, 536, -1,579, 580, 581, -1, + 579, 583, 582, -1,583, 579, 581, -1,582, 584, 579, -1,587, 586, 585, -1,584, 589, + 588, -1,587, 584, 590, -1,588, 590, 584, -1,584, 582, 589, -1,587, 590, 586, -1,591, + 585, 586, -1,591, 575, 592, -1,593, 591, 592, -1,594, 534, 546, -1,574, 575, 591, -1, + 597, 596, 595, -1,597, 599, 598, -1,597, 598, 596, -1,601, 600, 571, -1,600, 573, + 571, -1,571, 597, 601, -1,595, 601, 597, -1,576, 603, 602, -1,597, 604, 599, -1,602, + 605, 576, -1,606, 576, 605, -1,576, 606, 575, -1,604, 608, 607, -1,604, 610, 609, -1, + 608, 604, 609, -1,599, 604, 607, -1,610, 603, 609, -1,585, 591, 593, -1,577, 551, + 552, -1,603, 610, 602, -1,613, 612, 611, -1,615, 611, 614, -1,618, 617, 616, -1,615, + 617, 618, -1,614, 611, 612, -1,614, 620, 619, -1,620, 614, 612, -1,614, 619, 621, -1, + 622, 617, 615, -1,617, 622, 621, -1,621, 623, 617, -1,622, 614, 621, -1,617, 623, + 616, -1,614, 622, 615, -1,626, 625, 624, -1,626, 618, 616, -1,627, 625, 626, -1,629, + 628, 627, -1,625, 627, 628, -1,616, 623, 627, -1,629, 627, 623, -1,626, 616, 627, -1, + 628, 631, 630, -1,630, 624, 628, -1,634, 633, 632, -1,632, 636, 635, -1,630, 637, + 636, -1,636, 637, 638, -1,639, 633, 634, -1,641, 640, 634, -1,639, 634, 640, -1,642, + 641, 634, -1,636, 638, 635, -1,642, 635, 638, -1,638, 631, 642, -1,642, 634, 635, -1, + 637, 631, 638, -1,632, 635, 634, -1,640, 643, 633, -1,644, 633, 643, -1,647, 646, + 645, -1,645, 649, 648, -1,644, 650, 649, -1,649, 650, 651, -1,652, 646, 647, -1,654, + 653, 647, -1,652, 647, 653, -1,655, 654, 647, -1,649, 651, 648, -1,655, 648, 651, -1, + 651, 643, 655, -1,655, 647, 648, -1,650, 643, 651, -1,645, 648, 647, -1,653, 657, + 656, -1,656, 646, 653, -1,660, 659, 658, -1,662, 661, 660, -1,658, 662, 660, -1,664, + 613, 663, -1,663, 666, 665, -1,662, 667, 666, -1,666, 667, 668, -1,612, 613, 664, -1, + 669, 620, 664, -1,612, 664, 620, -1,670, 669, 664, -1,666, 668, 665, -1,670, 665, + 668, -1,668, 658, 670, -1,670, 664, 665, -1,667, 658, 668, -1,663, 665, 664, -1,90, + 63, 64, -1,671, 90, 64, -1,97, 90, 672, -1,98, 97, 672, -1,673, 671, 70, -1,64, 70, + 671, -1,674, 672, 673, -1,671, 673, 672, -1,672, 674, 675, -1,676, 674, 673, -1,672, + 90, 671, -1,677, 673, 70, -1,675, 98, 672, -1,678, 105, 99, -1,679, 108, 104, -1, + 680, 107, 108, -1,681, 104, 105, -1,682, 675, 674, -1,99, 675, 683, -1,99, 683, 678, -1, + 683, 675, 684, -1,681, 678, 685, -1,104, 681, 679, -1,108, 679, 680, -1,679, 681, + 686, -1,681, 105, 678, -1,678, 683, 687, -1,680, 110, 107, -1,98, 675, 99, -1,680, + 679, 686, -1,688, 676, 677, -1,676, 673, 677, -1,689, 684, 682, -1,675, 682, 684, -1, + 691, 689, 690, -1,676, 689, 682, -1,677, 70, 83, -1,690, 689, 676, -1,692, 83, 84, -1, + 677, 83, 692, -1,688, 677, 692, -1,688, 690, 676, -1,691, 684, 689, -1,676, 682, + 674, -1,693, 687, 691, -1,684, 691, 687, -1,685, 693, 694, -1,687, 693, 685, -1,681, + 685, 686, -1,686, 685, 695, -1,685, 678, 687, -1,696, 693, 691, -1,697, 696, 691, -1, + 694, 693, 696, -1,698, 694, 696, -1,699, 695, 698, -1,694, 698, 695, -1,695, 699, + 700, -1,695, 685, 694, -1,701, 686, 695, -1,690, 697, 691, -1,687, 683, 684, -1,680, + 686, 701, -1,680, 701, 702, -1,121, 110, 702, -1,703, 120, 121, -1,704, 120, 703, -1, + 702, 703, 121, -1,705, 703, 702, -1,707, 706, 701, -1,706, 702, 701, -1,708, 704, + 705, -1,702, 706, 705, -1,709, 704, 708, -1,710, 708, 705, -1,703, 705, 704, -1,711, + 705, 706, -1,704, 123, 120, -1,110, 680, 702, -1,712, 127, 123, -1,713, 128, 131, -1, + 0, 1, 128, -1,714, 131, 127, -1,715, 712, 709, -1,123, 709, 712, -1,712, 715, 716, -1, + 708, 715, 709, -1,714, 712, 717, -1,131, 714, 713, -1,128, 713, 0, -1,713, 714, 718, -1, + 714, 127, 712, -1,0, 713, 7, -1,704, 709, 123, -1,719, 715, 708, -1,720, 707, 700, -1, + 707, 701, 700, -1,711, 710, 705, -1,706, 707, 711, -1,710, 719, 708, -1,721, 710, + 711, -1,719, 716, 715, -1,722, 711, 707, -1,720, 700, 723, -1,722, 707, 720, -1,724, + 719, 721, -1,711, 722, 721, -1,719, 724, 725, -1,719, 710, 721, -1,725, 716, 719, -1, + 699, 723, 700, -1,726, 717, 725, -1,716, 725, 717, -1,718, 726, 727, -1,717, 726, + 718, -1,713, 718, 7, -1,7, 718, 727, -1,718, 714, 717, -1,728, 726, 725, -1,729, + 728, 725, -1,727, 726, 728, -1,730, 727, 728, -1,34, 33, 730, -1,727, 730, 33, -1, + 33, 7, 727, -1,724, 729, 725, -1,717, 712, 716, -1,695, 700, 701, -1,731, 187, 188, -1, + 732, 731, 188, -1,734, 731, 733, -1,735, 734, 733, -1,736, 732, 194, -1,188, 194, + 732, -1,737, 733, 736, -1,732, 736, 733, -1,733, 737, 738, -1,739, 737, 736, -1,733, + 731, 732, -1,740, 736, 194, -1,738, 735, 733, -1,743, 742, 741, -1,746, 745, 744, -1, + 748, 747, 745, -1,749, 744, 742, -1,750, 738, 737, -1,741, 738, 751, -1,741, 751, + 743, -1,751, 738, 752, -1,749, 743, 753, -1,744, 749, 746, -1,745, 746, 748, -1,746, + 749, 754, -1,749, 742, 743, -1,743, 751, 755, -1,748, 756, 747, -1,735, 738, 741, -1, + 748, 746, 754, -1,95, 740, 199, -1,740, 194, 199, -1,750, 739, 757, -1,736, 740, + 739, -1,738, 750, 752, -1,752, 750, 757, -1,737, 739, 750, -1,96, 739, 740, -1,95, + 199, 89, -1,100, 757, 96, -1,740, 95, 96, -1,757, 100, 758, -1,739, 96, 757, -1,758, + 752, 757, -1,759, 755, 758, -1,752, 758, 755, -1,753, 759, 760, -1,755, 759, 753, -1, + 749, 753, 754, -1,754, 753, 761, -1,753, 743, 755, -1,102, 759, 758, -1,101, 102, + 758, -1,760, 759, 102, -1,103, 760, 102, -1,109, 761, 103, -1,760, 103, 761, -1,761, + 109, 762, -1,761, 753, 760, -1,763, 754, 761, -1,100, 101, 758, -1,755, 751, 752, -1, + 748, 754, 763, -1,748, 763, 764, -1,765, 756, 764, -1,767, 766, 765, -1,768, 766, + 767, -1,764, 767, 765, -1,769, 767, 764, -1,771, 770, 763, -1,770, 764, 763, -1,772, + 768, 769, -1,764, 770, 769, -1,773, 768, 772, -1,774, 772, 769, -1,767, 769, 768, -1, + 775, 769, 770, -1,768, 776, 766, -1,756, 748, 764, -1,778, 777, 776, -1,781, 780, + 779, -1,132, 133, 780, -1,782, 779, 777, -1,783, 778, 773, -1,776, 773, 778, -1,778, + 783, 784, -1,772, 783, 773, -1,782, 778, 785, -1,779, 782, 781, -1,780, 781, 132, -1, + 781, 782, 786, -1,782, 777, 778, -1,132, 781, 139, -1,768, 773, 776, -1,787, 783, + 772, -1,125, 771, 762, -1,771, 763, 762, -1,775, 774, 769, -1,770, 771, 775, -1,774, + 787, 772, -1,124, 774, 775, -1,787, 784, 783, -1,119, 775, 771, -1,125, 762, 106, -1, + 119, 771, 125, -1,122, 787, 124, -1,775, 119, 124, -1,787, 122, 788, -1,787, 774, + 124, -1,788, 784, 787, -1,109, 106, 762, -1,789, 785, 788, -1,784, 788, 785, -1,786, + 789, 790, -1,785, 789, 786, -1,781, 786, 139, -1,139, 786, 161, -1,786, 782, 785, -1, + 130, 789, 788, -1,126, 130, 788, -1,790, 789, 130, -1,129, 790, 130, -1,118, 161, + 129, -1,790, 129, 161, -1,161, 786, 790, -1,122, 126, 788, -1,785, 778, 784, -1,761, + 762, 763, -1,248, 792, 791, -1,794, 792, 793, -1,248, 796, 795, -1,246, 248, 795, -1, + 793, 798, 797, -1,801, 800, 799, -1,803, 802, 798, -1,806, 805, 804, -1,809, 808, + 807, -1,800, 808, 799, -1,799, 810, 801, -1,811, 809, 807, -1,812, 796, 248, -1,813, + 807, 808, -1,791, 792, 814, -1,245, 246, 795, -1,791, 815, 248, -1,816, 792, 794, -1, + 809, 817, 803, -1,800, 813, 808, -1,792, 816, 814, -1,812, 248, 815, -1,820, 819, + 818, -1,810, 799, 805, -1,823, 822, 821, -1,826, 825, 824, -1,829, 828, 827, -1,830, + 822, 825, -1,831, 823, 821, -1,834, 833, 832, -1,275, 835, 280, -1,280, 835, 834, -1, + 838, 837, 836, -1,839, 824, 827, -1,834, 832, 840, -1,841, 804, 823, -1,831, 841, + 823, -1,842, 821, 822, -1,829, 840, 843, -1,830, 825, 826, -1,842, 822, 830, -1,275, + 278, 844, -1,845, 834, 835, -1,833, 834, 845, -1,844, 835, 275, -1,825, 827, 824, -1, + 806, 804, 841, -1,804, 805, 799, -1,797, 794, 793, -1,798, 846, 797, -1,802, 846, + 798, -1,847, 797, 846, -1,848, 802, 803, -1,848, 803, 817, -1,794, 797, 849, -1,811, + 817, 809, -1,846, 850, 847, -1,847, 850, 851, -1,852, 847, 851, -1,802, 850, 846, -1, + 802, 848, 817, -1,820, 853, 819, -1,856, 855, 854, -1,797, 847, 849, -1,854, 855, + 836, -1,827, 858, 857, -1,828, 829, 859, -1,827, 857, 839, -1,827, 860, 858, -1,843, + 859, 829, -1,843, 840, 861, -1,843, 861, 837, -1,840, 832, 862, -1,860, 827, 828, -1, + 863, 836, 855, -1,864, 818, 819, -1,836, 865, 838, -1,854, 818, 864, -1,840, 862, + 866, -1,836, 837, 861, -1,856, 854, 864, -1,865, 836, 863, -1,867, 861, 840, -1,866, + 867, 840, -1,870, 869, 868, -1,873, 872, 871, -1,875, 872, 874, -1,870, 877, 876, -1, + 877, 870, 868, -1,877, 868, 878, -1,876, 877, 875, -1,875, 871, 872, -1,875, 879, + 876, -1,871, 875, 880, -1,875, 874, 879, -1,877, 878, 875, -1,869, 881, 868, -1,873, + 871, 882, -1,885, 884, 883, -1,887, 886, 883, -1,890, 889, 888, -1,892, 891, 889, -1, + 893, 892, 882, -1,895, 890, 894, -1,885, 896, 884, -1,898, 896, 897, -1,895, 886, + 887, -1,891, 892, 893, -1,882, 871, 893, -1,871, 899, 893, -1,878, 880, 875, -1,868, + 900, 878, -1,888, 891, 901, -1,902, 893, 899, -1,899, 871, 880, -1,891, 888, 889, -1, + 900, 868, 881, -1,900, 881, 807, -1,903, 888, 901, -1,891, 902, 901, -1,893, 902, + 891, -1,888, 903, 904, -1,894, 905, 895, -1,906, 886, 905, -1,907, 885, 886, -1,905, + 886, 895, -1,897, 909, 908, -1,885, 910, 897, -1,897, 908, 898, -1,885, 897, 896, -1, + 905, 894, 904, -1,886, 885, 883, -1,904, 906, 905, -1,906, 907, 886, -1,908, 909, + 857, -1,897, 910, 909, -1,910, 885, 907, -1,894, 888, 904, -1,888, 894, 890, -1,911, + 911, 911, -1,911, 913, 912, -1,911, 911, 911, -1,911, 911, 911, -1,354, 354, 354, -1, + 911, 911, 914, -1,917, 916, 915, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,919, 911, 918, -1,914, 911, 911, -1,911, 914, 911, -1,911, 919, + 920, -1,911, 911, 911, -1,914, 911, 919, -1,911, 911, 918, -1,911, 911, 911, -1,911, + 919, 911, -1,911, 911, 921, -1,911, 922, 914, -1,914, 924, 923, -1,924, 914, 922, -1, + 914, 923, 925, -1,927, 922, 926, -1,911, 914, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,914, 919, 911, -1,911, 911, 921, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 918, 911, -1,911, 911, 911, -1, + 911, 928, 918, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 929, 911, -1,911, 911, 929, -1,911, 911, 911, -1,932, 931, 930, -1,911, + 930, 921, -1,920, 920, 919, -1,935, 934, 933, -1,935, 933, 936, -1,931, 937, 911, -1, + 937, 932, 936, -1,932, 935, 936, -1,938, 929, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,941, + 940, 939, -1,944, 943, 942, -1,945, 943, 944, -1,944, 941, 939, -1,911, 946, 940, -1, + 948, 947, 911, -1,911, 911, 911, -1,911, 915, 916, -1,911, 948, 911, -1,915, 950, + 949, -1,952, 947, 951, -1,949, 950, 911, -1,916, 911, 911, -1,946, 953, 939, -1,953, + 946, 954, -1,956, 955, 944, -1,944, 955, 945, -1,956, 944, 939, -1,911, 911, 953, -1, + 911, 957, 911, -1,957, 911, 911, -1,911, 957, 911, -1,947, 911, 911, -1,911, 953, + 954, -1,948, 958, 947, -1,911, 911, 911, -1,911, 952, 951, -1,952, 911, 911, -1,911, + 911, 945, -1,911, 911, 911, -1,911, 911, 911, -1,949, 911, 911, -1,911, 949, 911, -1, + 945, 955, 911, -1,911, 950, 952, -1,957, 925, 911, -1,939, 940, 946, -1,911, 911, + 946, -1,911, 911, 911, -1,911, 959, 911, -1,928, 959, 911, -1,911, 911, 959, -1,929, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,938, 913, 960, -1, + 926, 962, 961, -1,924, 922, 927, -1,931, 911, 911, -1,911, 911, 911, -1,925, 911, + 911, -1,911, 961, 911, -1,925, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,963, + 911, 925, -1,911, 911, 911, -1,911, 912, 911, -1,913, 938, 912, -1,911, 911, 912, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,964, + 920, 911, -1,911, 911, 911, -1,911, 911, 964, -1,911, 911, 964, -1,911, 964, 911, -1, + 964, 911, 925, -1,964, 925, 911, -1,911, 964, 911, -1,911, 911, 911, -1,911, 925, + 911, -1,911, 911, 925, -1,963, 925, 923, -1,911, 911, 911, -1,958, 951, 947, -1,911, + 911, 911, -1,949, 917, 915, -1,916, 911, 911, -1,960, 929, 938, -1,959, 928, 928, -1, + 918, 928, 928, -1,920, 920, 964, -1,930, 931, 921, -1,926, 961, 927, -1,931, 932, + 937, -1,911, 911, 911, -1,911, 921, 911, -1,961, 911, 927, -1,911, 911, 961, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 967, 966, 965, -1,968, 965, 966, -1,967, 965, 969, -1,965, 968, 970, -1,970, 971, + 965, -1,972, 967, 969, -1,969, 974, 973, -1,969, 973, 975, -1,977, 976, 969, -1,972, + 969, 976, -1,978, 969, 975, -1,977, 969, 978, -1,980, 971, 979, -1,980, 979, 981, -1, + 982, 850, 980, -1,965, 971, 980, -1,983, 980, 981, -1,982, 980, 983, -1,983, 985, + 984, -1,983, 984, 978, -1,983, 987, 986, -1,985, 983, 988, -1,986, 988, 983, -1,983, + 981, 987, -1,975, 983, 978, -1,991, 990, 989, -1,990, 992, 989, -1,994, 993, 990, -1, + 993, 995, 837, -1,990, 991, 994, -1,993, 994, 995, -1,998, 997, 996, -1,996, 999, + 998, -1,1000, 998, 999, -1,1001, 999, 996, -1,1002, 1001, 925, -1,1004, 1003, 1002, -1, + 1002, 1006, 1005, -1,925, 1004, 1002, -1,1001, 1002, 1005, -1,1005, 999, 1001, -1, + 1007, 999, 1005, -1,999, 1008, 1000, -1,1008, 999, 1007, -1,1005, 1006, 1007, -1, + 1009, 1002, 1003, -1,1010, 1004, 957, -1,1004, 1010, 1003, -1,1002, 1009, 1006, -1, + 1011, 998, 1000, -1,870, 1013, 1012, -1,1012, 869, 870, -1,1012, 1013, 1014, -1,1012, + 1015, 869, -1,1016, 869, 1015, -1,1014, 1017, 1012, -1,1020, 1019, 1018, -1,1021, + 1020, 1018, -1,1021, 1018, 1019, -1,991, 1022, 994, -1,1023, 994, 1022, -1,1020, + 1023, 1019, -1,1024, 994, 1023, -1,1023, 1022, 1019, -1,1026, 860, 1025, -1,857, + 858, 1026, -1,860, 1026, 858, -1,1020, 1021, 1027, -1,1025, 860, 1027, -1,1024, 837, + 994, -1,1020, 1024, 1023, -1,1029, 1028, 1027, -1,1025, 1027, 1028, -1,1026, 1025, + 1030, -1,1027, 1021, 1029, -1,1033, 1032, 1031, -1,1032, 1035, 1034, -1,1037, 1036, + 1035, -1,1035, 1036, 1034, -1,1038, 429, 1033, -1,1040, 1039, 429, -1,429, 1041, + 1040, -1,1034, 1031, 1032, -1,1038, 1033, 1031, -1,1041, 429, 1038, -1,1039, 278, + 429, -1,471, 472, 1042, -1,1045, 1044, 1043, -1,471, 1042, 852, -1,1047, 1046, 1043, -1, + 1049, 1048, 1046, -1,1046, 1048, 1043, -1,1052, 1051, 1050, -1,1054, 1053, 852, -1, + 852, 1056, 1055, -1,1056, 852, 1053, -1,852, 1055, 1057, -1,1054, 852, 1042, -1,1059, + 1058, 1050, -1,1049, 1060, 1048, -1,1048, 1050, 1057, -1,1050, 1048, 1060, -1,1050, + 1060, 1059, -1,1057, 1050, 852, -1,1058, 1052, 1050, -1,1044, 1061, 1043, -1,1052, + 1062, 1051, -1,449, 450, 1063, -1,1065, 1063, 1064, -1,1064, 1063, 450, -1,1066, + 1065, 1064, -1,441, 245, 1067, -1,441, 1067, 1068, -1,1068, 1070, 1069, -1,1070, + 1068, 1067, -1,1069, 1071, 1068, -1,1073, 1066, 1072, -1,1066, 1073, 1065, -1,1073, + 1072, 1074, -1,1076, 1074, 1075, -1,1051, 1076, 1077, -1,1076, 1051, 1062, -1,1075, + 1074, 1072, -1,1079, 1071, 1078, -1,1078, 1071, 1069, -1,1079, 1078, 1080, -1,1075, + 1080, 1077, -1,1080, 1075, 1079, -1,1075, 1077, 1076, -1,1043, 1061, 1047, -1,1081, + 982, 983, -1,1083, 1082, 1074, -1,1085, 1084, 1083, -1,1073, 1074, 1086, -1,1085, + 1087, 1084, -1,1073, 1088, 1065, -1,1090, 1089, 1065, -1,1087, 1092, 1091, -1,1094, + 1093, 1092, -1,1094, 1095, 1093, -1,1063, 1089, 485, -1,1095, 1097, 1096, -1,1095, + 1096, 1098, -1,1095, 1100, 1099, -1,1100, 1095, 1098, -1,1102, 1095, 1101, -1,1099, + 1101, 1095, -1,1103, 1095, 1102, -1,1103, 1105, 1104, -1,1105, 1106, 1104, -1,1107, + 1104, 1106, -1,1095, 1094, 1097, -1,1104, 1095, 1103, -1,485, 449, 1063, -1,1108, + 1090, 1088, -1,1090, 1065, 1088, -1,1109, 1088, 1086, -1,1088, 1073, 1086, -1,1082, + 1083, 1084, -1,1086, 1082, 1109, -1,1082, 1084, 1110, -1,1111, 1084, 1087, -1,1112, + 485, 1090, -1,1086, 1074, 1082, -1,1108, 1112, 1090, -1,1088, 1109, 1108, -1,1110, + 1113, 1082, -1,1113, 1109, 1082, -1,492, 485, 1112, -1,1114, 1110, 1084, -1,1093, + 1115, 1091, -1,1116, 1091, 1115, -1,1118, 1117, 1104, -1,1117, 1095, 1104, -1,1117, + 1118, 1119, -1,1093, 1091, 1092, -1,1091, 1116, 1087, -1,1087, 1116, 1111, -1,1119, + 1120, 1117, -1,1120, 1121, 1117, -1,1111, 1114, 1084, -1,485, 1089, 1090, -1,1124, + 1123, 1122, -1,1124, 1122, 1125, -1,1125, 1127, 1126, -1,1127, 1125, 1122, -1,1130, + 1129, 1128, -1,1132, 1128, 1131, -1,1135, 1134, 1133, -1,1132, 1134, 1135, -1,1131, + 1128, 1129, -1,1131, 1137, 1136, -1,1137, 1131, 1129, -1,1131, 1136, 1138, -1,1139, + 1134, 1132, -1,1134, 1139, 1138, -1,1138, 1140, 1134, -1,1139, 1131, 1138, -1,1134, + 1140, 1133, -1,1131, 1139, 1132, -1,1143, 1142, 1141, -1,1143, 1135, 1133, -1,1144, + 1142, 1143, -1,1146, 1145, 1144, -1,1142, 1144, 1145, -1,1133, 1140, 1144, -1,1146, + 1144, 1140, -1,1143, 1133, 1144, -1,1145, 1148, 1147, -1,1147, 1141, 1145, -1,1151, + 1150, 1149, -1,1153, 1151, 1152, -1,1155, 1154, 1147, -1,1147, 1154, 1152, -1,1150, + 1151, 1153, -1,1157, 1156, 1153, -1,1150, 1153, 1156, -1,1158, 1157, 1153, -1,1152, + 1154, 1159, -1,1158, 1159, 1154, -1,1154, 1148, 1158, -1,1158, 1153, 1159, -1,1155, + 1148, 1154, -1,1152, 1159, 1153, -1,1156, 1161, 1160, -1,1160, 1149, 1156, -1,1164, + 1163, 1162, -1,1166, 1164, 1165, -1,1168, 1167, 1160, -1,1160, 1167, 1165, -1,1163, + 1164, 1166, -1,1170, 1169, 1166, -1,1163, 1166, 1169, -1,1171, 1170, 1166, -1,1165, + 1167, 1172, -1,1171, 1172, 1167, -1,1167, 1161, 1171, -1,1171, 1166, 1172, -1,1168, + 1161, 1167, -1,1165, 1172, 1166, -1,1169, 656, 657, -1,657, 1162, 1169, -1,1175, + 1174, 1173, -1,1177, 1176, 1175, -1,1173, 1177, 1175, -1,1178, 1129, 1130, -1,1180, + 1178, 1179, -1,1182, 1181, 1177, -1,1177, 1181, 1179, -1,1129, 1178, 1180, -1,1183, + 1137, 1180, -1,1129, 1180, 1137, -1,1184, 1183, 1180, -1,1179, 1181, 1185, -1,1184, + 1185, 1181, -1,1181, 1173, 1184, -1,1184, 1180, 1185, -1,1182, 1173, 1181, -1,1179, + 1185, 1180, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,1188, 1187, 1186, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,1189, + 911, 911, -1,1190, 1187, 1189, -1,1187, 1190, 1186, -1,1191, 1190, 1189, -1,911, + 911, 1189, -1,1191, 1189, 911, -1,911, 911, 1189, -1,1186, 1192, 1188, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 1192, 1186, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 1192, 911, -1,1194, 1193, 354, -1,1197, 1196, 1195, -1,1198, 354, + 1193, -1,354, 1193, 354, -1,1195, 1200, 1199, -1,1199, 1197, 1195, -1,1199, 1202, + 1201, -1,1203, 1202, 1199, -1,1197, 1199, 1201, -1,1205, 1203, 1204, -1,1199, 1204, + 1203, -1,1200, 1204, 1199, -1,1206, 1202, 1203, -1,1207, 1206, 1203, -1,1209, 1206, + 1208, -1,1210, 1209, 1208, -1,1211, 1207, 1205, -1,1203, 1205, 1207, -1,1212, 1208, + 1211, -1,1207, 1211, 1208, -1,1208, 1212, 1213, -1,1208, 1206, 1207, -1,1213, 1210, + 1208, -1,1215, 1214, 1213, -1,1210, 1213, 1214, -1,1217, 1215, 1216, -1,1214, 1215, + 1217, -1,1219, 1217, 1218, -1,1220, 1215, 1213, -1,1221, 1220, 1213, -1,1216, 1215, + 1220, -1,1222, 1216, 1220, -1,1223, 1218, 1222, -1,1216, 1222, 1218, -1,1218, 1217, + 1216, -1,1212, 1221, 1213, -1,1219, 1225, 1224, -1,1225, 1219, 1223, -1,1227, 1226, + 1224, -1,1226, 1227, 1228, -1,1230, 1226, 1229, -1,1232, 1230, 1231, -1,1233, 1232, + 1231, -1,1234, 1228, 1225, -1,1227, 1225, 1228, -1,1229, 1228, 1234, -1,1235, 1231, + 1229, -1,1230, 1229, 1231, -1,1229, 1236, 1235, -1,1237, 1231, 1235, -1,1234, 1236, + 1229, -1,1229, 1226, 1228, -1,1237, 1233, 1231, -1,1239, 1238, 1237, -1,1233, 1237, + 1238, -1,1240, 1238, 1239, -1,1241, 1239, 1237, -1,1243, 1242, 1240, -1,1245, 1242, + 1244, -1,1243, 1246, 1242, -1,1239, 1243, 1240, -1,1247, 1243, 1239, -1,1241, 1237, + 1248, -1,1247, 1239, 1241, -1,1249, 1244, 1246, -1,1242, 1246, 1244, -1,1246, 1250, + 1249, -1,1247, 1250, 1246, -1,1243, 1247, 1246, -1,1235, 1248, 1237, -1,1244, 1251, + 1245, -1,1253, 1252, 1251, -1,1249, 1253, 1244, -1,1251, 1244, 1253, -1,1254, 1253, + 1249, -1,1253, 1255, 1252, -1,354, 354, 354, -1,354, 354, 354, -1,1253, 1254, 1256, -1, + 1256, 1254, 1257, -1,354, 354, 354, -1,1255, 1253, 1256, -1,1260, 1259, 1258, -1, + 1262, 1258, 1261, -1,1258, 1259, 1261, -1,1262, 1261, 1263, -1,1264, 1260, 1258, -1, + 1264, 1258, 1264, -1,1262, 1264, 1258, -1,1267, 1266, 1265, -1,1269, 1268, 1266, -1, + 1271, 1269, 1270, -1,1269, 1267, 1270, -1,1266, 1267, 1269, -1,1273, 1272, 1268, -1, + 1273, 1274, 1272, -1,1273, 1269, 1271, -1,1271, 1275, 1273, -1,1273, 1275, 1276, -1, + 1273, 1268, 1269, -1,1276, 1274, 1273, -1,1278, 1277, 1276, -1,1274, 1276, 1277, -1, + 1280, 1279, 1278, -1,1277, 1278, 1279, -1,1281, 1278, 1276, -1,1281, 1276, 1282, -1, + 1281, 1283, 1280, -1,1281, 1280, 1278, -1,1275, 1282, 1276, -1,1285, 1284, 1279, -1, + 1285, 1286, 1284, -1,1285, 1280, 1283, -1,1283, 1287, 1285, -1,1285, 1287, 1288, -1, + 1285, 1279, 1280, -1,1288, 1286, 1285, -1,1290, 1289, 1288, -1,1286, 1288, 1289, -1, + 1292, 1291, 1290, -1,1289, 1290, 1291, -1,1293, 1290, 1288, -1,1293, 1288, 1294, -1, + 1293, 1295, 1292, -1,1293, 1292, 1290, -1,1287, 1294, 1288, -1,1291, 1297, 1296, -1, + 1297, 1291, 1295, -1,1299, 1298, 1296, -1,1300, 1298, 1299, -1,1302, 1300, 1301, -1, + 1298, 1300, 1302, -1,1304, 1302, 1303, -1,1305, 1300, 1299, -1,1297, 1305, 1299, -1, + 1301, 1300, 1305, -1,1306, 1301, 1305, -1,1307, 1303, 1306, -1,1301, 1306, 1303, -1, + 1308, 1303, 1307, -1,1303, 1302, 1301, -1,1303, 1309, 1304, -1,1308, 1310, 1309, -1, + 1311, 1310, 1308, -1,1303, 1308, 1309, -1,1313, 1311, 1312, -1,1310, 1311, 1313, -1, + 1315, 1313, 1314, -1,1316, 1311, 1308, -1,1317, 1316, 1308, -1,1312, 1311, 1316, -1, + 1318, 1312, 1316, -1,1319, 1314, 1318, -1,1312, 1318, 1314, -1,1314, 1313, 1312, -1, + 1307, 1317, 1308, -1,1314, 1320, 1315, -1,1322, 1321, 1320, -1,1319, 1322, 1314, -1, + 1320, 1314, 1322, -1,1323, 1322, 1319, -1,1322, 1324, 1321, -1,1264, 1264, 1264, -1, + 1264, 1264, 1264, -1,1322, 1323, 1325, -1,1325, 1323, 1326, -1,1327, 1326, 1327, -1, + 1324, 1322, 1325, -1,1328, 1198, 1193, -1,1329, 1193, 1194, -1,1329, 1328, 1193, -1, + 1330, 1198, 1328, -1,1333, 1332, 1331, -1,1334, 1331, 1332, -1,1332, 911, 911, -1, + 911, 911, 1333, -1,1332, 1333, 911, -1,1333, 911, 911, -1,1336, 1335, 1335, -1,1337, + 1335, 1335, -1,1338, 1339, 1338, -1,1338, 1340, 1338, -1,1342, 1341, 1341, -1,1343, + 1341, 1341, -1,1345, 1344, 1344, -1,1346, 1344, 1344, -1,1347, 1348, 1347, -1,1347, + 1349, 1347, -1,1350, 1351, 1350, -1,1350, 1352, 1350, -1,1354, 1353, 1353, -1,1355, + 1353, 1353, -1,1356, 1357, 1356, -1,1356, 1358, 1356, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,1361, 1360, 1359, -1,1359, + 1360, 1362, -1,1361, 1359, 1363, -1,1359, 1362, 1364, -1,1366, 1362, 1365, -1,1366, + 1365, 1367, -1,1363, 1369, 1368, -1,1363, 1359, 1369, -1,1364, 1366, 1370, -1,1366, + 1364, 1362, -1,1370, 1371, 1364, -1,1370, 1366, 1372, -1,1364, 1371, 1369, -1,1359, + 1364, 1369, -1,1366, 1367, 1372, -1,1372, 1374, 1373, -1,1374, 1372, 1367, -1,1373, + 1374, 1375, -1,1372, 1373, 1376, -1,1375, 1378, 1377, -1,1380, 1378, 1379, -1,1378, + 1380, 1377, -1,1375, 1377, 1373, -1,1373, 1377, 1381, -1,1382, 1372, 1376, -1,1376, + 1373, 1381, -1,1380, 1384, 1383, -1,1384, 1380, 1379, -1,1385, 1383, 1384, -1,1380, + 1383, 1381, -1,1380, 1381, 1377, -1,1372, 1382, 1370, -1,1379, 1387, 1386, -1,1386, + 1387, 1388, -1,1379, 1386, 1384, -1,1386, 1388, 1389, -1,1391, 1388, 1390, -1,1391, + 1390, 1392, -1,1384, 1393, 1385, -1,1384, 1386, 1393, -1,1389, 1391, 1394, -1,1391, + 1389, 1388, -1,1394, 1395, 1389, -1,1394, 1391, 1396, -1,1389, 1395, 1393, -1,1386, + 1389, 1393, -1,1391, 1392, 1396, -1,1396, 1398, 1397, -1,1398, 1396, 1392, -1,1397, + 1398, 1399, -1,1396, 1397, 1400, -1,1399, 1402, 1401, -1,1403, 1402, 1361, -1,1402, + 1403, 1401, -1,1399, 1401, 1397, -1,1397, 1401, 1404, -1,1405, 1396, 1400, -1,1400, + 1397, 1404, -1,1403, 1363, 1406, -1,1363, 1403, 1361, -1,1368, 1406, 1363, -1,1403, + 1406, 1404, -1,1403, 1404, 1401, -1,1396, 1405, 1394, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,1409, 1408, 1407, -1,1407, + 1408, 1410, -1,1409, 1407, 1411, -1,1407, 1410, 1412, -1,1414, 1410, 1413, -1,1414, + 1413, 1415, -1,1411, 1417, 1416, -1,1411, 1407, 1417, -1,1412, 1414, 1418, -1,1414, + 1412, 1410, -1,1418, 1419, 1412, -1,1418, 1414, 1420, -1,1412, 1419, 1417, -1,1407, + 1412, 1417, -1,1414, 1415, 1420, -1,1420, 1422, 1421, -1,1422, 1420, 1415, -1,1421, + 1422, 1423, -1,1420, 1421, 1424, -1,1423, 1426, 1425, -1,1428, 1426, 1427, -1,1426, + 1428, 1425, -1,1423, 1425, 1421, -1,1421, 1425, 1429, -1,1430, 1420, 1424, -1,1424, + 1421, 1429, -1,1428, 1432, 1431, -1,1432, 1428, 1427, -1,1433, 1431, 1432, -1,1428, + 1431, 1429, -1,1428, 1429, 1425, -1,1420, 1430, 1418, -1,1427, 1435, 1434, -1,1434, + 1435, 1436, -1,1427, 1434, 1432, -1,1436, 1438, 1437, -1,1441, 1440, 1439, -1,1438, + 1440, 1437, -1,1438, 1436, 1435, -1,1434, 1436, 1442, -1,1434, 1433, 1432, -1,1434, + 1442, 1433, -1,1437, 1441, 1443, -1,1441, 1437, 1440, -1,1443, 1444, 1437, -1,1443, + 1441, 1445, -1,1444, 1442, 1436, -1,1437, 1444, 1436, -1,1441, 1439, 1445, -1,1448, + 1447, 1446, -1,1447, 1448, 1439, -1,1446, 1447, 1449, -1,1448, 1446, 1450, -1,1449, + 1452, 1451, -1,1454, 1453, 1409, -1,1452, 1453, 1455, -1,1452, 1449, 1447, -1,1446, + 1449, 1450, -1,1448, 1450, 1445, -1,1452, 1455, 1451, -1,1450, 1449, 1451, -1,1455, + 1456, 1451, -1,1454, 1411, 1416, -1,1411, 1454, 1409, -1,1416, 1456, 1454, -1,1456, + 1455, 1453, -1,1453, 1454, 1456, -1,1448, 1445, 1439, -1,1458, 1457, 911, -1,1460, + 911, 1459, -1,1458, 1461, 1457, -1,911, 1461, 1462, -1,1458, 1462, 1461, -1,1463, + 1461, 911, -1,1459, 1463, 1464, -1,1462, 1460, 1464, -1,911, 1464, 1463, -1,1460, + 1459, 1464, -1,1458, 1460, 1462, -1,1465, 1466, 1465, -1,1465, 1467, 1465, -1,1469, + 1468, 1468, -1,1470, 1468, 1468, -1,1472, 1471, 1471, -1,1473, 1471, 1471, -1,1474, + 1475, 1474, -1,1474, 1476, 1474, -1,1477, 1478, 1477, -1,1477, 1479, 1477, -1,1480, + 1481, 1480, -1,1480, 1482, 1480, -1,1484, 1483, 1483, -1,1485, 1483, 1483, -1,1486, + 1487, 1486, -1,1486, 1488, 1486, -1,1490, 1489, 1489, -1,1491, 1489, 1489, -1,1493, + 1493, 1492, -1,1493, 1493, 1494, -1,1495, 1496, 1495, -1,1495, 1497, 1495, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,1498, + 911, 911, -1,911, 1498, 911, -1,911, 1499, 1498, -1,1500, 1498, 1499, -1,1501, 1500, + 1499, -1,911, 911, 1502, -1,1503, 1502, 911, -1,911, 911, 911, -1,1505, 1503, 1504, -1, + 1502, 1503, 1505, -1,1508, 1507, 1506, -1,1506, 1509, 1508, -1,1510, 1511, 1510, -1, + 1510, 1512, 1510, -1,1515, 1514, 1513, -1,1513, 1516, 1515, -1,1519, 1518, 1517, -1, + 1521, 1520, 1519, -1,1517, 1518, 1522, -1,1517, 1515, 1523, -1,1515, 1517, 1522, -1, + 1521, 1523, 1516, -1,1523, 1521, 1517, -1,1517, 1521, 1519, -1,1526, 1525, 1524, -1, + 1525, 1527, 1524, -1,1530, 1529, 1528, -1,1524, 1528, 1529, -1,1531, 1528, 1524, -1, + 1529, 1526, 1524, -1,1524, 1527, 1531, -1,1531, 1533, 1532, -1,1533, 1531, 1527, -1, + 1532, 1518, 1519, -1,1518, 1532, 1533, -1,1531, 1532, 1534, -1,1535, 1531, 1534, -1, + 1519, 1520, 1534, -1,1532, 1519, 1534, -1,1531, 1535, 1528, -1,1538, 1537, 1536, -1, + 1537, 1539, 1536, -1,1542, 1541, 1540, -1,1536, 1540, 1541, -1,1543, 1540, 1536, -1, + 1541, 1538, 1536, -1,1536, 1539, 1543, -1,1543, 1545, 1544, -1,1545, 1543, 1539, -1, + 1544, 1526, 1529, -1,1526, 1544, 1545, -1,1543, 1544, 1546, -1,1547, 1543, 1546, -1, + 1529, 1530, 1546, -1,1544, 1529, 1546, -1,1543, 1547, 1540, -1,1549, 1548, 1538, -1, + 1538, 1542, 1549, -1,1550, 1551, 1550, -1,1550, 1552, 1550, -1,1555, 1554, 1553, -1, + 1553, 1556, 1555, -1,1559, 1558, 1557, -1,1560, 1558, 1559, -1,1561, 1559, 1557, -1, + 1563, 1562, 1561, -1,1559, 1561, 1562, -1,1562, 1564, 1559, -1,1565, 1560, 1564, -1, + 1556, 1560, 1565, -1,1559, 1564, 1560, -1,1555, 1565, 1566, -1,1564, 1566, 1565, -1, + 1565, 1555, 1567, -1,1567, 1556, 1565, -1,1562, 1566, 1564, -1,1570, 1569, 1568, -1, + 1570, 1572, 1571, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1570, 1568, 1572, -1, + 1264, 1264, 1264, -1,1574, 1573, 1570, -1,1575, 1557, 1574, -1,1573, 1574, 1557, -1, + 1578, 1577, 1576, -1,1579, 1575, 1574, -1,1579, 1574, 1571, -1,354, 354, 1578, -1, + 354, 1578, 1576, -1,1570, 1571, 1574, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1, + 1582, 1581, 1580, -1,1264, 1264, 1264, -1,1580, 1583, 1569, -1,1569, 1584, 1580, -1, + 1585, 1580, 1584, -1,1580, 1581, 1583, -1,1580, 1586, 1582, -1,1580, 1585, 1586, -1, + 1587, 1586, 1585, -1,1588, 1587, 1585, -1,1506, 1587, 1588, -1,1590, 1588, 1589, -1, + 1585, 1589, 1588, -1,1509, 1591, 1590, -1,1588, 1590, 1591, -1,1591, 1506, 1588, -1, + 1584, 1589, 1585, -1,911, 911, 1592, -1,1593, 1592, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,1596, 1595, 1594, -1,1597, 1595, 911, -1,1597, 1594, + 1595, -1,1593, 1598, 1592, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,1597, 911, 911, -1,911, 911, + 1597, -1,911, 1597, 911, -1,911, 911, 1597, -1,911, 1597, 911, -1,911, 911, 911, -1, + 1599, 1593, 1596, -1,1594, 1597, 1600, -1,1602, 911, 1601, -1,1597, 1602, 1601, -1, + 1600, 1597, 1601, -1,911, 911, 911, -1,1599, 911, 1598, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,1598, 911, 911, -1,1598, 1593, 1599, -1,1602, 911, + 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, + 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1,911, 911, 911, -1, + 911, 911, 911, -1,1599, 1596, 1594, -1,1605, 1604, 1603, -1,1606, 1604, 1605, -1, + 1608, 1606, 1607, -1,1605, 1607, 1606, -1,1606, 1608, 1609, -1,1610, 1604, 1606, -1, + 1611, 1610, 1609, -1,1612, 1610, 1611, -1,1606, 1609, 1610, -1,1614, 1611, 1613, -1, + 1609, 1613, 1611, -1,1611, 1614, 1615, -1,1615, 1612, 1611, -1,1608, 1613, 1609, -1, + 1618, 1617, 1616, -1,1619, 1617, 1618, -1,1621, 1618, 1620, -1,1621, 1622, 1619, -1, + 1619, 1622, 1623, -1,1621, 1619, 1618, -1,1624, 1617, 1619, -1,1626, 1624, 1625, -1, + 1626, 1628, 1627, -1,1628, 1626, 1625, -1,1622, 1629, 1623, -1,1625, 1623, 1629, -1, + 1629, 1630, 1625, -1,1628, 1625, 1630, -1,1625, 1624, 1623, -1,1619, 1623, 1624, -1, + 1633, 1632, 1631, -1,1633, 1634, 1632, -1,1633, 1636, 1635, -1,1635, 1637, 1633, -1, + 1633, 1637, 1638, -1,1633, 1631, 1636, -1,1638, 1634, 1633, -1,1640, 1639, 1638, -1, + 1634, 1638, 1639, -1,1618, 1616, 1640, -1,1639, 1640, 1616, -1,1641, 1640, 1638, -1, + 1641, 1638, 1642, -1,1641, 1620, 1618, -1,1641, 1618, 1640, -1,1637, 1642, 1638, -1, + 1643, 1635, 1631, -1,1635, 1643, 1644, -1,1646, 1645, 1645, -1,1647, 1645, 1645, -1, + 1650, 1649, 1648, -1,1651, 1648, 1649, -1,1654, 1653, 1652, -1,1655, 1653, 1654, -1, + 1657, 1655, 1656, -1,1654, 1656, 1655, -1,1658, 1655, 1657, -1,1655, 1659, 1653, -1, + 1660, 1659, 1658, -1,1650, 1659, 1660, -1,1655, 1658, 1659, -1,1649, 1660, 1661, -1, + 1658, 1661, 1660, -1,1660, 1649, 1662, -1,1662, 1650, 1660, -1,1657, 1661, 1658, -1, + 1664, 1663, 1612, -1,1664, 1665, 1663, -1,1664, 1615, 1614, -1,1614, 1666, 1664, -1, + 1664, 1666, 1667, -1,1664, 1612, 1615, -1,1667, 1665, 1664, -1,1669, 1668, 1667, -1, + 1665, 1667, 1668, -1,1654, 1652, 1669, -1,1668, 1669, 1652, -1,1670, 1669, 1667, -1, + 1670, 1667, 1671, -1,1670, 1656, 1654, -1,1670, 1654, 1669, -1,1666, 1671, 1667, -1, + 1673, 1672, 1672, -1,1674, 1672, 1672, -1,1677, 1676, 1675, -1,1676, 1677, 1678, -1, + 1681, 1680, 1679, -1,1680, 1681, 1682, -1,1684, 1680, 1683, -1,1686, 1684, 1685, -1, + 1687, 1686, 1685, -1,1689, 1682, 1688, -1,1681, 1688, 1682, -1,1683, 1682, 1689, -1, + 1690, 1685, 1683, -1,1684, 1683, 1685, -1,1683, 1691, 1690, -1,1692, 1685, 1690, -1, + 1689, 1691, 1683, -1,1683, 1680, 1682, -1,1692, 1687, 1685, -1,1694, 1693, 1692, -1, + 1687, 1692, 1693, -1,1695, 1693, 1694, -1,1696, 1694, 1692, -1,1698, 1697, 1695, -1, + 1677, 1697, 1699, -1,1698, 1700, 1697, -1,1694, 1698, 1695, -1,1701, 1698, 1694, -1, + 1696, 1692, 1702, -1,1701, 1694, 1696, -1,1678, 1699, 1700, -1,1697, 1700, 1699, -1, + 1700, 1703, 1678, -1,1701, 1703, 1700, -1,1698, 1701, 1700, -1,1690, 1702, 1692, -1, + 1705, 1704, 1679, -1,1688, 1679, 1704, -1,1708, 1707, 1706, -1,1706, 1709, 1708, -1, + 1710, 1711, 1710, -1,1710, 1712, 1710, -1,1715, 1714, 1713, -1,1713, 1716, 1715, -1, + 1707, 1718, 1717, -1,1717, 1718, 1719, -1,1707, 1717, 1720, -1,1717, 1719, 1721, -1, + 1723, 1719, 1722, -1,1723, 1722, 1724, -1,1720, 1725, 1706, -1,1720, 1717, 1725, -1, + 1721, 1723, 1726, -1,1723, 1721, 1719, -1,1726, 1727, 1721, -1,1726, 1723, 1728, -1, + 1721, 1727, 1725, -1,1717, 1721, 1725, -1,1723, 1724, 1728, -1,1728, 1730, 1729, -1, + 1730, 1728, 1724, -1,1729, 1730, 1731, -1,1728, 1729, 1732, -1,1731, 1734, 1733, -1, + 1735, 1734, 1714, -1,1734, 1735, 1733, -1,1731, 1733, 1729, -1,1729, 1733, 1736, -1, + 1737, 1728, 1732, -1,1732, 1729, 1736, -1,1735, 1739, 1738, -1,1739, 1735, 1714, -1, + 1715, 1738, 1739, -1,1735, 1738, 1736, -1,1735, 1736, 1733, -1,1728, 1737, 1726, -1, + 911, 1741, 1740, -1,1742, 1740, 1741, -1,911, 1741, 911, -1,1742, 1741, 1743, -1, + 1745, 1745, 1744, -1,1745, 1745, 1746, -1,1747, 1748, 1747, -1,1747, 1749, 1747, -1, + 1750, 1751, 1750, -1,1750, 1752, 1750, -1,1753, 1754, 1753, -1,1753, 1755, 1753, -1, + 1757, 1757, 1756, -1,1757, 1757, 1758, -1,1760, 1759, 1759, -1,1761, 1759, 1759, -1, + 1762, 1763, 1762, -1,1762, 1764, 1762, -1,1766, 1765, 1765, -1,1767, 1765, 1765, -1, + 1769, 1769, 1768, -1,1769, 1769, 1770, -1,1771, 1772, 1771, -1,1771, 1773, 1771, -1, + 1774, 1775, 1774, -1,1774, 1776, 1774, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,1778, 1777, 1264, -1,1781, 1780, 1779, -1, + 1778, 1264, 1264, -1,1264, 1782, 1778, -1,1783, 1780, 1781, -1,1780, 1785, 1784, -1, + 1784, 1786, 1779, -1,1779, 1786, 1787, -1,1784, 1779, 1780, -1,1789, 1787, 1788, -1, + 1787, 1789, 1779, -1,1779, 1789, 1781, -1,1787, 1786, 1790, -1,1787, 1790, 1791, -1, + 1793, 1790, 1792, -1,1793, 1792, 1794, -1,1788, 1791, 1795, -1,1791, 1788, 1787, -1, + 1795, 1793, 1796, -1,1793, 1795, 1791, -1,1797, 1796, 1793, -1,1791, 1790, 1793, -1, + 1793, 1794, 1797, -1,1797, 1799, 1798, -1,1799, 1797, 1794, -1,1801, 1798, 1800, -1, + 1800, 1798, 1799, -1,1803, 1800, 1802, -1,1797, 1798, 1804, -1,1797, 1804, 1805, -1, + 1804, 1798, 1801, -1,1804, 1801, 1806, -1,1806, 1803, 1807, -1,1803, 1806, 1801, -1, + 1801, 1800, 1803, -1,1797, 1805, 1796, -1,1809, 1808, 1807, -1,1807, 1802, 1809, -1, + 1809, 1811, 1810, -1,1812, 1810, 1811, -1,1814, 1811, 1813, -1,1816, 1813, 1815, -1, + 1816, 1815, 1817, -1,1808, 1812, 1818, -1,1812, 1808, 1810, -1,1818, 1812, 1814, -1, + 1814, 1816, 1819, -1,1816, 1814, 1813, -1,1819, 1820, 1814, -1,1819, 1816, 1821, -1, + 1814, 1820, 1818, -1,1812, 1811, 1814, -1,1816, 1817, 1821, -1,1821, 1823, 1822, -1, + 1823, 1821, 1817, -1,1822, 1823, 1824, -1,1821, 1822, 1825, -1,1824, 1827, 1826, -1, + 1829, 1827, 1828, -1,1827, 1830, 1826, -1,1824, 1826, 1822, -1,1822, 1826, 1831, -1, + 1832, 1821, 1825, -1,1825, 1822, 1831, -1,1830, 1829, 1833, -1,1829, 1830, 1827, -1, + 1833, 1834, 1830, -1,1830, 1834, 1831, -1,1830, 1831, 1826, -1,1821, 1832, 1819, -1, + 1828, 1835, 1829, -1,1829, 1835, 1836, -1,1829, 1837, 1833, -1,1837, 1829, 1836, -1, + 1837, 1836, 1838, -1,1835, 1839, 1836, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1, + 1838, 1841, 1840, -1,1838, 1836, 1841, -1,1264, 1264, 1264, -1,1841, 1836, 1839, -1, + 1844, 1843, 1842, -1,1846, 1844, 1845, -1,1845, 1847, 1846, -1,1842, 1845, 1844, -1, + 1850, 1849, 1848, -1,1848, 1852, 1851, -1,1852, 1848, 1849, -1,1849, 1853, 1852, -1, + 1855, 1852, 1854, -1,1851, 1852, 1855, -1,1856, 1855, 1854, -1,1854, 1852, 1853, -1, + 1853, 1858, 1857, -1,1858, 1859, 1857, -1,1856, 1854, 1857, -1,1857, 1860, 1856, -1, + 1861, 1860, 1857, -1,1854, 1853, 1857, -1,1857, 1859, 1861, -1,1861, 1863, 1862, -1, + 1863, 1861, 1859, -1,1862, 1865, 1864, -1,1865, 1862, 1863, -1,1861, 1862, 1866, -1, + 1867, 1861, 1866, -1,1864, 1868, 1866, -1,1862, 1864, 1866, -1,1861, 1867, 1860, -1, + 1865, 1870, 1869, -1,1870, 1871, 1869, -1,1868, 1864, 1869, -1,1869, 1872, 1868, -1, + 1873, 1872, 1869, -1,1864, 1865, 1869, -1,1869, 1871, 1873, -1,1873, 1875, 1874, -1, + 1875, 1873, 1871, -1,1874, 1877, 1876, -1,1877, 1874, 1875, -1,1873, 1874, 1878, -1, + 1879, 1873, 1878, -1,1876, 1880, 1878, -1,1874, 1876, 1878, -1,1873, 1879, 1872, -1, + 1882, 1881, 1880, -1,1880, 1877, 1882, -1,1882, 1884, 1883, -1,1883, 1884, 1885, -1, + 1887, 1885, 1886, -1,1886, 1885, 1884, -1,1889, 1886, 1888, -1,1883, 1885, 1890, -1, + 1883, 1890, 1881, -1,1890, 1885, 1887, -1,1890, 1887, 1891, -1,1891, 1889, 1892, -1, + 1889, 1891, 1887, -1,1892, 1889, 1893, -1,1887, 1886, 1889, -1,1888, 1894, 1889, -1, + 1894, 1895, 1893, -1,1893, 1895, 1896, -1,1894, 1893, 1889, -1,1898, 1896, 1897, -1, + 1897, 1896, 1895, -1,1900, 1897, 1899, -1,1893, 1896, 1901, -1,1893, 1901, 1902, -1, + 1901, 1896, 1898, -1,1901, 1898, 1903, -1,1903, 1900, 1904, -1,1900, 1903, 1898, -1, + 1898, 1897, 1900, -1,1893, 1902, 1892, -1,1899, 1905, 1900, -1,1900, 1905, 1906, -1, + 1900, 1907, 1904, -1,1907, 1900, 1906, -1,1907, 1906, 1908, -1,1905, 1909, 1906, -1, + 1909, 1911, 1910, -1,1909, 1910, 1912, -1,1908, 1912, 1913, -1,1908, 1906, 1912, -1, + 1913, 1912, 1910, -1,1912, 1906, 1909, -1,1778, 1782, 1914, -1,1777, 1778, 1915, -1, + 1915, 1916, 1777, -1,1915, 1778, 1914, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,1917, 1918, 1917, -1, + 1917, 1919, 1917, -1,1921, 1921, 1920, -1,1921, 1921, 1922, -1,1923, 1924, 1923, -1, + 1923, 1925, 1923, -1,1926, 1927, 1926, -1,1926, 1928, 1926, -1,1930, 1930, 1929, -1, + 1930, 1930, 1931, -1,1932, 1933, 1932, -1,1932, 1934, 1932, -1,1935, 1936, 1935, -1, + 1935, 1937, 1935, -1,1939, 1939, 1938, -1,1939, 1939, 1940, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,1943, 1942, 1941, -1, + 1944, 1941, 1942, -1,1946, 1942, 1945, -1,1948, 1945, 1947, -1,1948, 1947, 1949, -1, + 1951, 1944, 1950, -1,1944, 1951, 1941, -1,1950, 1944, 1946, -1,1946, 1948, 1952, -1, + 1948, 1946, 1945, -1,1952, 1953, 1946, -1,1952, 1948, 1954, -1,1946, 1953, 1950, -1, + 1944, 1942, 1946, -1,1948, 1949, 1954, -1,1954, 1956, 1955, -1,1956, 1954, 1949, -1, + 1955, 1956, 1957, -1,1954, 1955, 1958, -1,1957, 1960, 1959, -1,1962, 1960, 1961, -1, + 1960, 1963, 1959, -1,1957, 1959, 1955, -1,1955, 1959, 1964, -1,1965, 1954, 1958, -1, + 1958, 1955, 1964, -1,1963, 1962, 1966, -1,1962, 1963, 1960, -1,1966, 1967, 1963, -1, + 1963, 1967, 1964, -1,1963, 1964, 1959, -1,1954, 1965, 1952, -1,1961, 1968, 1962, -1, + 1969, 1962, 1968, -1,1971, 1968, 1970, -1,1973, 1970, 1972, -1,1973, 1972, 1974, -1, + 1966, 1969, 1975, -1,1969, 1966, 1962, -1,1975, 1969, 1971, -1,1971, 1973, 1976, -1, + 1973, 1971, 1970, -1,1976, 1977, 1971, -1,1976, 1973, 1978, -1,1971, 1977, 1975, -1, + 1969, 1968, 1971, -1,1973, 1974, 1978, -1,1978, 1980, 1979, -1,1980, 1978, 1974, -1, + 1979, 1980, 1981, -1,1978, 1979, 1982, -1,1981, 1984, 1983, -1,1941, 1984, 1943, -1, + 1984, 1985, 1983, -1,1981, 1983, 1979, -1,1979, 1983, 1986, -1,1987, 1978, 1982, -1, + 1982, 1979, 1986, -1,1985, 1941, 1951, -1,1941, 1985, 1984, -1,1951, 1988, 1985, -1, + 1985, 1988, 1986, -1,1985, 1986, 1983, -1,1978, 1987, 1976, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,1991, 1990, 1989, -1, + 1992, 1989, 1990, -1,1994, 1990, 1993, -1,1996, 1993, 1995, -1,1996, 1995, 1997, -1, + 1999, 1992, 1998, -1,1992, 1999, 1989, -1,1998, 1992, 1994, -1,1994, 1996, 2000, -1, + 1996, 1994, 1993, -1,2000, 2001, 1994, -1,2000, 1996, 2002, -1,1994, 2001, 1998, -1, + 1992, 1990, 1994, -1,1996, 1997, 2002, -1,2002, 2004, 2003, -1,2004, 2002, 1997, -1, + 2003, 2004, 2005, -1,2002, 2003, 2006, -1,2005, 2008, 2007, -1,2010, 2008, 2009, -1, + 2008, 2011, 2007, -1,2005, 2007, 2003, -1,2003, 2007, 2012, -1,2013, 2002, 2006, -1, + 2006, 2003, 2012, -1,2011, 2010, 2014, -1,2010, 2011, 2008, -1,2014, 2015, 2011, -1, + 2011, 2015, 2012, -1,2011, 2012, 2007, -1,2002, 2013, 2000, -1,2009, 2016, 2010, -1, + 2016, 2009, 2017, -1,2010, 2016, 2014, -1,2016, 2017, 2018, -1,2021, 2020, 2019, -1, + 2018, 2017, 2020, -1,2023, 2019, 2022, -1,2016, 2024, 2014, -1,2024, 2016, 2018, -1, + 2024, 2018, 2025, -1,2021, 2023, 2026, -1,2023, 2021, 2019, -1,2026, 2025, 2021, -1, + 2026, 2023, 2027, -1,2021, 2025, 2018, -1,2018, 2020, 2021, -1,2023, 2022, 2027, -1, + 2030, 2029, 2028, -1,2029, 2030, 2022, -1,2028, 2029, 2031, -1,2030, 2028, 2032, -1, + 2031, 2034, 2033, -1,2036, 2035, 1991, -1,2034, 2035, 2037, -1,2034, 2031, 2029, -1, + 2028, 2031, 2032, -1,2030, 2032, 2027, -1,2034, 2037, 2033, -1,2032, 2031, 2033, -1, + 2037, 2038, 2033, -1,2036, 1989, 1999, -1,1989, 2036, 1991, -1,1999, 2038, 2036, -1, + 2038, 2037, 2035, -1,2035, 2036, 2038, -1,2030, 2027, 2022, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,2040, 2040, 2039, -1,2040, 2040, 2041, -1,2042, 2043, 2042, -1,2042, + 2044, 2042, -1,2045, 2045, 2045, -1,2045, 2045, 2045, -1,2047, 2047, 2046, -1,2047, + 2047, 2048, -1,2050, 2050, 2049, -1,2050, 2050, 2051, -1,2053, 2053, 2052, -1,2053, + 2053, 2054, -1,2055, 2056, 2055, -1,2055, 2057, 2055, -1,2059, 2059, 2058, -1,2059, + 2059, 2060, -1,2061, 2062, 2061, -1,2061, 2063, 2061, -1,2064, 2065, 2064, -1,2064, + 2066, 2064, -1,2068, 2068, 2067, -1,2068, 2068, 2069, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,2072, 2071, 2070, -1, + 2071, 2072, 2073, -1,2075, 2075, 2074, -1,2075, 2075, 2076, -1,2079, 2078, 2077, -1, + 2080, 2077, 2078, -1,2083, 2082, 2081, -1,2081, 2082, 2084, -1,2086, 2084, 2085, -1, + 2084, 2086, 2081, -1,2085, 2084, 2087, -1,2082, 2088, 2084, -1,2087, 2088, 2089, -1, + 2089, 2088, 2077, -1,2088, 2087, 2084, -1,2090, 2089, 2080, -1,2089, 2090, 2087, -1, + 2091, 2080, 2089, -1,2089, 2077, 2091, -1,2087, 2090, 2085, -1,354, 354, 354, -1, + 2094, 2093, 2092, -1,354, 354, 2095, -1,354, 354, 354, -1,2092, 2095, 2096, -1,2096, + 2094, 2092, -1,2093, 2097, 2092, -1,2081, 2097, 2098, -1,2098, 2097, 2093, -1,2081, + 2098, 2083, -1,2099, 2081, 2086, -1,2081, 2099, 2097, -1,354, 354, 354, -1,354, 354, + 354, -1,2097, 2099, 2092, -1,2102, 2101, 2100, -1,2102, 2100, 2103, -1,2105, 2100, + 2104, -1,2107, 2103, 2106, -1,2103, 2107, 2102, -1,2106, 2105, 2108, -1,2105, 2106, + 2103, -1,2103, 2100, 2105, -1,2104, 2109, 2105, -1,2111, 2109, 2110, -1,354, 354, + 354, -1,354, 354, 354, -1,2108, 2113, 2112, -1,2108, 2105, 2113, -1,2113, 2095, 2112, -1, + 2095, 2113, 2111, -1,2095, 354, 354, -1,2113, 2109, 2111, -1,2113, 2105, 2109, -1, + 2101, 2115, 2114, -1,2115, 2101, 2107, -1,2117, 2117, 2116, -1,2117, 2117, 2118, -1, + 2121, 2120, 2119, -1,2122, 2119, 2120, -1,2124, 2123, 2119, -1,2124, 2122, 2125, -1, + 2125, 2123, 2124, -1,2127, 2126, 2125, -1,2123, 2125, 2126, -1,2129, 2127, 2128, -1, + 2125, 2128, 2127, -1,2122, 2128, 2125, -1,2131, 2130, 2126, -1,2131, 2132, 2130, -1, + 2131, 2127, 2129, -1,2129, 2133, 2131, -1,2131, 2133, 2134, -1,2131, 2126, 2127, -1, + 2134, 2132, 2131, -1,2136, 2135, 2134, -1,2132, 2134, 2135, -1,2138, 2137, 2136, -1, + 2135, 2136, 2137, -1,2139, 2136, 2134, -1,2139, 2134, 2140, -1,2139, 2141, 2138, -1, + 2139, 2138, 2136, -1,2133, 2140, 2134, -1,2143, 2142, 2137, -1,2143, 2144, 2142, -1, + 2143, 2138, 2141, -1,2141, 2145, 2143, -1,2143, 2145, 2146, -1,2143, 2137, 2138, -1, + 2146, 2144, 2143, -1,2148, 2147, 2146, -1,2144, 2146, 2147, -1,2149, 2072, 2148, -1, + 2147, 2148, 2072, -1,2150, 2148, 2146, -1,2150, 2146, 2151, -1,2150, 2073, 2149, -1, + 2150, 2149, 2148, -1,2145, 2151, 2146, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1, + 328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, 328, 328, -1,328, + 328, 328, -1,2154, 2153, 2152, -1,2156, 2152, 2155, -1,2154, 2152, 2157, -1,2158, + 2157, 2156, -1,2156, 2157, 2152, -1,2152, 2153, 2155, -1,2160, 2155, 2159, -1,2159, + 2155, 2153, -1,2160, 2159, 2161, -1,2163, 2160, 2162, -1,2160, 2163, 2155, -1,2164, + 2162, 2160, -1,2160, 2161, 2164, -1,2155, 2163, 2156, -1,2167, 2166, 2165, -1,2166, + 2169, 2168, -1,2170, 2165, 2168, -1,2168, 2171, 2170, -1,2172, 2171, 2168, -1,2165, + 2166, 2168, -1,2168, 2169, 2172, -1,2172, 2174, 2173, -1,2174, 2172, 2169, -1,2173, + 2176, 2175, -1,2176, 2173, 2174, -1,2172, 2173, 2177, -1,2178, 2172, 2177, -1,2175, + 2179, 2177, -1,2173, 2175, 2177, -1,2172, 2178, 2171, -1,2182, 2181, 2180, -1,2181, + 2183, 2180, -1,2185, 2184, 2180, -1,2180, 2186, 2185, -1,2187, 2186, 2180, -1,2184, + 2182, 2180, -1,2180, 2183, 2187, -1,2187, 2189, 2188, -1,2189, 2187, 2183, -1,2188, + 2167, 2165, -1,2167, 2188, 2189, -1,2187, 2188, 2190, -1,2191, 2187, 2190, -1,2165, + 2170, 2190, -1,2188, 2165, 2190, -1,2187, 2191, 2186, -1,2182, 2185, 2192, -1,2192, + 2193, 2182, -1,2194, 2195, 2194, -1,2194, 2196, 2194, -1,2199, 2198, 2197, -1,2197, + 2200, 2199, -1,2203, 2202, 2201, -1,2201, 2202, 2204, -1,2206, 2204, 2205, -1,2204, + 2206, 2201, -1,2205, 2204, 2207, -1,2202, 2208, 2204, -1,2207, 2208, 2209, -1,2209, + 2208, 2197, -1,2208, 2207, 2204, -1,2210, 2209, 2198, -1,2209, 2210, 2207, -1,2211, + 2198, 2209, -1,2209, 2197, 2211, -1,2207, 2210, 2205, -1,2161, 2213, 2212, -1,2213, + 2214, 2212, -1,2162, 2164, 2212, -1,2212, 2215, 2162, -1,2216, 2215, 2212, -1,2164, + 2161, 2212, -1,2212, 2214, 2216, -1,2216, 2218, 2217, -1,2218, 2216, 2214, -1,2217, + 2203, 2201, -1,2203, 2217, 2218, -1,2216, 2217, 2219, -1,2220, 2216, 2219, -1,2201, + 2206, 2219, -1,2217, 2201, 2219, -1,2216, 2220, 2215, -1,2223, 2222, 2221, -1,2224, + 2221, 2222, -1,2226, 2225, 2225, -1,2227, 2225, 2225, -1,2230, 2229, 2228, -1,2229, + 2230, 2231, -1,2233, 2232, 2222, -1,2232, 2233, 2234, -1,2236, 2232, 2235, -1,2238, + 2236, 2237, -1,2239, 2238, 2237, -1,2240, 2234, 2223, -1,2233, 2223, 2234, -1,2235, + 2234, 2240, -1,2241, 2237, 2235, -1,2236, 2235, 2237, -1,2235, 2242, 2241, -1,2243, + 2237, 2241, -1,2240, 2242, 2235, -1,2235, 2232, 2234, -1,2243, 2239, 2237, -1,2245, + 2244, 2243, -1,2246, 2243, 2244, -1,2247, 2244, 2245, -1,2248, 2245, 2243, -1,2250, + 2249, 2247, -1,2229, 2249, 2251, -1,2250, 2252, 2249, -1,2245, 2250, 2247, -1,2253, + 2250, 2245, -1,2248, 2243, 2254, -1,2253, 2245, 2248, -1,2228, 2251, 2252, -1,2249, + 2252, 2251, -1,2252, 2255, 2228, -1,2253, 2255, 2252, -1,2250, 2253, 2252, -1,2241, + 2254, 2243, -1,2257, 2256, 2256, -1,2258, 2256, 2256, -1,2261, 2260, 2259, -1,2260, + 2261, 2262, -1,2264, 2263, 2259, -1,2263, 2264, 2265, -1,2267, 2263, 2266, -1,2269, + 2267, 2268, -1,2271, 2270, 2268, -1,2272, 2265, 2260, -1,2264, 2260, 2265, -1,2266, + 2265, 2272, -1,2273, 2268, 2266, -1,2267, 2266, 2268, -1,2266, 2274, 2273, -1,2275, + 2268, 2273, -1,2272, 2274, 2266, -1,2266, 2263, 2265, -1,2275, 2271, 2268, -1,2277, + 2276, 2275, -1,2271, 2275, 2276, -1,2278, 2276, 2277, -1,2279, 2277, 2275, -1,2281, + 2280, 2278, -1,2283, 2280, 2282, -1,2281, 2284, 2280, -1,2277, 2281, 2278, -1,2285, + 2281, 2277, -1,2279, 2275, 2286, -1,2285, 2277, 2279, -1,2287, 2282, 2284, -1,2280, + 2284, 2282, -1,2284, 2288, 2287, -1,2285, 2288, 2284, -1,2281, 2285, 2284, -1,2273, + 2286, 2275, -1,2283, 2287, 2289, -1,2290, 2289, 2287, -1,328, 328, 328, -1,328, 328, + 328, -1,328, 328, 328, -1,328, 328, 328, -1,2292, 2291, 2291, -1,2293, 2291, 2291, -1, + 2294, 2295, 2294, -1,2294, 2296, 2294, -1,2297, 2298, 2297, -1,2297, 2299, 2297, -1, + 2301, 2301, 2300, -1,2301, 2301, 2302, -1,2304, 2303, 2303, -1,2305, 2303, 2303, -1, + 2307, 2307, 2306, -1,2307, 2307, 2308, -1,328, 328, 328, -1,328, 328, 328, -1,2310, + 2309, 2309, -1,2311, 2309, 2309, -1,2312, 2313, 2312, -1,2312, 2314, 2312, -1,2315, + 2316, 2315, -1,2315, 2317, 2315, -1,2319, 2319, 2318, -1,2319, 2319, 2320, -1,354, + 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1, + 354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, + 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, + 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1, + 354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, + 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, 354, 354, -1,354, + 354, 354, -1,354, 354, 354, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, + 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,1264, 1264, 1264, -1,2323, 2322, + 2321, -1,2325, 2321, 2324, -1,2328, 2327, 2326, -1,2330, 2326, 2329, -1,2327, 2331, + 2324, -1,2321, 2325, 2323, -1,2332, 2323, 2325, -1,2333, 2325, 2331, -1,2324, 2331, + 2325, -1,2326, 2330, 2328, -1,2334, 2328, 2330, -1,2336, 2330, 2335, -1,2329, 2335, + 2330, -1,2328, 2337, 2331, -1,2327, 2328, 2331, -1,2338, 2335, 2329, -1,2338, 2340, + 2339, -1,2342, 2339, 2341, -1,2345, 2344, 2343, -1,2344, 2347, 2346, -1,2348, 2341, + 2345, -1,2350, 2347, 2349, -1,2338, 2339, 2342, -1,2351, 2338, 2342, -1,2353, 2349, + 2352, -1,2352, 2355, 2354, -1,2358, 2357, 2356, -1,2359, 2355, 2358, -1,2342, 2341, + 2348, -1,2338, 2329, 2340, -1,2338, 2360, 2335, -1,2333, 2331, 2337, -1,2337, 2328, + 2334, -1,2345, 2343, 2348, -1,2348, 2343, 2361, -1,2343, 2346, 2362, -1,2344, 2346, + 2343, -1,2336, 2334, 2330, -1,2332, 2325, 2333, -1,2336, 2335, 2360, -1,2360, 2338, + 2351, -1,2342, 2348, 2363, -1,2343, 2362, 2361, -1,2348, 2361, 2363, -1,2351, 2342, + 2363, -1,2364, 2362, 2346, -1,2349, 2353, 2350, -1,2365, 2350, 2353, -1,2366, 2353, + 2354, -1,2352, 2354, 2353, -1,2358, 2356, 2359, -1,2367, 2359, 2356, -1,2369, 2356, + 2368, -1,2357, 2368, 2356, -1,2359, 2370, 2354, -1,2355, 2359, 2354, -1,2350, 2365, + 2364, -1,2353, 2366, 2365, -1,2359, 2367, 2370, -1,2368, 2371, 2369, -1,2356, 2369, + 2367, -1,2354, 2370, 2366, -1,2364, 2346, 2350, -1,2347, 2350, 2346, -1,2368, 2357, + 2372, -1,2374, 2372, 2373, -1,2377, 2376, 2375, -1,2379, 2375, 2378, -1,2376, 2380, + 2373, -1,2372, 2374, 2368, -1,2371, 2368, 2374, -1,2381, 2374, 2380, -1,2373, 2380, + 2374, -1,2375, 2379, 2377, -1,2382, 2377, 2379, -1,2384, 2379, 2383, -1,2378, 2383, + 2379, -1,2377, 2385, 2380, -1,2376, 2377, 2380, -1,2386, 2383, 2378, -1,2386, 2388, + 2387, -1,2390, 2387, 2389, -1,2393, 2392, 2391, -1,2392, 2395, 2394, -1,2396, 2389, + 2393, -1,2398, 2395, 2397, -1,2386, 2387, 2390, -1,2399, 2386, 2390, -1,2401, 2397, + 2400, -1,2400, 2403, 2402, -1,2405, 2322, 2404, -1,2406, 2403, 2405, -1,2390, 2389, + 2396, -1,2386, 2378, 2388, -1,2386, 2407, 2383, -1,2381, 2380, 2385, -1,2385, 2377, + 2382, -1,2393, 2391, 2396, -1,2396, 2391, 2408, -1,2391, 2394, 2409, -1,2392, 2394, + 2391, -1,2384, 2382, 2379, -1,2371, 2374, 2381, -1,2384, 2383, 2407, -1,2407, 2386, + 2399, -1,2390, 2396, 2410, -1,2391, 2409, 2408, -1,2396, 2408, 2410, -1,2399, 2390, + 2410, -1,2411, 2409, 2394, -1,2397, 2401, 2398, -1,2412, 2398, 2401, -1,2413, 2401, + 2402, -1,2400, 2402, 2401, -1,2405, 2404, 2406, -1,2414, 2406, 2404, -1,2415, 2404, + 2323, -1,2322, 2323, 2404, -1,2406, 2416, 2402, -1,2403, 2406, 2402, -1,2398, 2412, + 2411, -1,2401, 2413, 2412, -1,2406, 2414, 2416, -1,2323, 2332, 2415, -1,2404, 2415, + 2414, -1,2402, 2416, 2413, -1,2411, 2394, 2398, -1,2395, 2398, 2394, -1 + ] + } + } + ] +} +DEF link4b Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.533333 0.533333 0.533333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 2646 + 0.0395998 -0.129907 0.047001, 0.0393138 -0.131494 0.046696, 0.0390888 -0.132715 0.045826, 0.0389558 -0.133569 0.044529, + 0.0389368 -0.133936 0.043, 0.0390358 -0.133569 0.04147, 0.0392338 -0.132715 0.040173, 0.0395048 -0.131494 0.039303, + 0.0398028 -0.130029 0.038998, 0.0388828 -0.129785 0.038998, 0.0379638 -0.129663 0.038998, 0.0376698 -0.131128 0.039303, + 0.0374258 -0.132349 0.040173, 0.0372578 -0.133203 0.04147, 0.0372008 -0.133569 0.043, 0.0372578 -0.133203 0.044529, + 0.0374258 -0.132349 0.045826, 0.0376698 -0.131128 0.046696, 0.0379638 -0.129663 0.047001, 0.0387798 -0.129785 0.047001, + 0.0400888 -0.128442 0.039303, 0.0403138 -0.127222 0.040173, 0.0404468 -0.126367 0.04147, 0.0404658 -0.126001 0.043, + 0.0403668 -0.126367 0.044529, 0.0401688 -0.127222 0.045826, 0.0398978 -0.128442 0.046696, 0.0382578 -0.128076 0.046696, + 0.0385018 -0.126855 0.045826, 0.0386698 -0.126001 0.044529, 0.0387268 -0.125757 0.043, 0.0386698 -0.126001 0.04147, + 0.0385018 -0.126855 0.040173, 0.0382578 -0.128076 0.039303, 0.0379638 -0.129663 0.041001, 0.0381088 -0.128931 0.041153, + 0.0382348 -0.128198 0.041584, 0.0383148 -0.127832 0.042233, 0.0383448 -0.12771 0.043, 0.0383148 -0.127832 0.043766, + 0.0382348 -0.128198 0.044415, 0.0381088 -0.128931 0.04485, 0.0379638 -0.129663 0.045002, 0.0378188 -0.130396 0.04485, + 0.0376928 -0.131006 0.044415, 0.0376128 -0.131494 0.043766, 0.0375818 -0.131616 0.043, 0.0376128 -0.131494 0.042233, + 0.0376928 -0.131006 0.041584, 0.0378188 -0.130396 0.041153, 0.0338898 -0.128809 0.041001, 0.0298158 -0.128076 0.041001, + 0.0296708 -0.128809 0.041153, 0.0295468 -0.129419 0.041584, 0.0294628 -0.129907 0.042233, 0.0294338 -0.130029 0.043, + 0.0294628 -0.129907 0.043766, 0.0295468 -0.129419 0.044415, 0.0296708 -0.128809 0.04485, 0.0298158 -0.128076 0.045002, + 0.0338898 -0.128809 0.045002, 0.0299628 -0.127344 0.04485, 0.0300868 -0.126611 0.044415, 0.0301688 -0.126245 0.043766, + 0.0301968 -0.126123 0.043, 0.0301688 -0.126245 0.042233, 0.0300868 -0.126611 0.041584, 0.0299628 -0.127344 0.041153, + 0.0292488 -0.127954 0.042, 0.0286828 -0.127832 0.043, 0.0292488 -0.127954 0.043999, 0.0502358 -0.136499 0.016392, + 0.0375368 -0.127588 0.020543, 0.0347478 -0.125635 0.020657, 0.0322068 -0.123926 0.019249, 0.0304368 -0.122583 0.016617, + 0.0298018 -0.122217 0.013298, 0.0298018 -0.122217 4.17383e-008, 0.0298017 -0.122217 -0.0133, 0.0304367 -0.122583 -0.016617, + 0.0322067 -0.123926 -0.01925, 0.0347477 -0.125635 -0.020656, 0.0375367 -0.127588 -0.020544, 0.0502358 -0.136499 -0.016391, + 0.0505218 -0.136743 -0.00564096, 0.0497278 -0.136133 -0.00289296, 0.0494608 -0.136011 3.66008e-008, + 0.0497278 -0.136133 0.00289204, 0.0505218 -0.136743 0.00564004, 0.0359458 -0.126489 -0.00459996, + 0.0345038 -0.125513 -0.00424996, 0.0332827 -0.124658 -0.00325296, 0.0324668 -0.124048 -0.00175996, + 0.0321768 -0.123804 4.11211e-008, 0.0324668 -0.124048 0.00176104, 0.0332827 -0.124658 0.00325204, + 0.0345038 -0.125513 0.00425004, 0.0359458 -0.126489 0.00459904, 0.0373878 -0.127466 0.00425004, 0.0386118 -0.12832 0.00325204, + 0.0394288 -0.128931 0.00176104, 0.0397147 -0.129175 3.91476e-008, 0.0394288 -0.128931 -0.00175996, + 0.0386118 -0.12832 -0.00325296, 0.0373878 -0.127466 -0.00424996, 0.0453828 -0.133081 0.00205104, + 0.0439408 -0.132104 0.00240004, 0.0427168 -0.13125 0.00339704, 0.0419008 -0.13064 0.00488904, 0.0416148 -0.130518 0.00664904, + 0.0419008 -0.13064 0.00841004, 0.0427168 -0.13125 0.00990304, 0.0439408 -0.132104 0.010899, 0.0453828 -0.133081 0.01125, + 0.0468248 -0.134058 0.010899, 0.0480458 -0.134912 0.00990304, 0.0488618 -0.135522 0.00841004, 0.0491488 -0.135767 0.00664904, + 0.0488618 -0.135522 0.00488904, 0.0480458 -0.134912 0.00339704, 0.0468248 -0.134058 0.00240004, + 0.0359458 -0.126489 0.00870004, 0.0345038 -0.125513 0.00905104, 0.0332828 -0.124658 0.010046, 0.0324668 -0.124048 0.01154, + 0.0321768 -0.123804 0.013298, 0.0324668 -0.124048 0.015061, 0.0332828 -0.124658 0.016552, 0.0345038 -0.125513 0.017548, + 0.0359458 -0.126489 0.017899, 0.0373878 -0.127466 0.017548, 0.0386118 -0.12832 0.016552, 0.0394288 -0.128931 0.015061, + 0.0397148 -0.129175 0.013298, 0.0394288 -0.128931 0.01154, 0.0386118 -0.12832 0.010046, 0.0373878 -0.127466 0.00905104, + 0.0453828 -0.133081 -0.00204996, 0.0468248 -0.134058 -0.00240096, 0.0480458 -0.134912 -0.00339696, + 0.0488618 -0.135522 -0.00488996, 0.0491487 -0.135767 -0.00664996, 0.0488617 -0.135522 -0.00840996, + 0.0480458 -0.134912 -0.00990196, 0.0468247 -0.134058 -0.0109, 0.0453827 -0.133081 -0.01125, 0.0439407 -0.132104 -0.0109, + 0.0427167 -0.13125 -0.00990196, 0.0419008 -0.13064 -0.00840996, 0.0416148 -0.130518 -0.00664996, + 0.0419008 -0.13064 -0.00488996, 0.0427167 -0.13125 -0.00339696, 0.0439407 -0.132104 -0.00240096, + 0.0359458 -0.126489 -0.00869996, 0.0373878 -0.127466 -0.00904996, 0.0386118 -0.12832 -0.010047, 0.0394288 -0.128931 -0.01154, + 0.0397147 -0.129175 -0.0133, 0.0394288 -0.128931 -0.01506, 0.0386117 -0.12832 -0.016553, 0.0373877 -0.127466 -0.01755, + 0.0359457 -0.126489 -0.0179, 0.0345037 -0.125513 -0.01755, 0.0332827 -0.124658 -0.016553, 0.0324667 -0.124048 -0.01506, + 0.0321767 -0.123804 -0.0133, 0.0324667 -0.124048 -0.01154, 0.0332827 -0.124658 -0.010047, 0.0345038 -0.125513 -0.00904996, + 0.0490647 -0.094629 3.85159e-008, 0.0487367 -0.095117 -0.0133, 0.0384057 -0.109888 -0.0133, 0.0384057 -0.109888 -0.013, + 0.0375937 -0.111108 -0.011586, 0.0371887 -0.111597 -0.012293, 0.0375937 -0.111108 -0.013, 0.0349657 -0.114771 -0.013, + 0.0349657 -0.114771 -0.0133, 0.0349657 -0.114771 0.013298, 0.0349657 -0.114771 0.011784, 0.0350187 -0.114771 0.01117, + 0.0351828 -0.114526 0.010615, 0.0354308 -0.11416 0.010172, 0.0357508 -0.113672 0.00988804, 0.0361018 -0.113184 0.00978504, + 0.0364528 -0.112695 0.00987504, 0.0367737 -0.112207 0.010151, 0.0370288 -0.111841 0.010584, 0.0372388 -0.111597 0.010384, + 0.0374678 -0.11123 0.010291, 0.0377037 -0.110864 0.010312, 0.0379298 -0.11062 0.010443, 0.0381278 -0.110254 0.010678, + 0.0382768 -0.110132 0.010996, 0.0383717 -0.11001 0.011374, 0.0384057 -0.109888 0.011784, 0.0384057 -0.109888 0.013298, + 0.0487367 -0.095117 0.013298, 0.0435677 -0.102563 0.00832804, 0.0401268 -0.107446 0.00993604, 0.0401268 -0.107446 0.00890004, + 0.0409888 -0.106226 0.00849804, 0.0409887 -0.106226 0.00715704, 0.0401268 -0.107446 0.00675404, + 0.0401267 -0.107446 0.00572104, 0.0435677 -0.102563 0.00732804, 0.0409357 -0.106348 0.00423304, + 0.0417397 -0.105127 0.00220704, 0.0419577 -0.104883 0.00180704, 0.0422357 -0.104395 0.00154504, + 0.0425487 -0.104028 0.00145004, 0.0428617 -0.10354 0.00152804, 0.0431477 -0.103174 0.00177404, 0.0433727 -0.102808 0.00216304, + 0.0435177 -0.102563 0.00265404, 0.0435677 -0.102563 0.00319904, 0.0435677 -0.102563 0.00370104, + 0.0434907 -0.102686 0.00437004, 0.0432737 -0.10293 0.00493704, 0.0429497 -0.103418 0.00531604, 0.0425637 -0.104028 0.00545004, + 0.0425637 -0.104028 0.00445004, 0.0427277 -0.103784 0.00439304, 0.0428697 -0.10354 0.00423104, 0.0429607 -0.103418 0.00398704, + 0.0429947 -0.103296 0.00370104, 0.0429947 -0.103296 0.00319904, 0.0429727 -0.103418 0.00296604, + 0.0429117 -0.103418 0.00275504, 0.0428157 -0.103662 0.00258904, 0.0426937 -0.103784 0.00248404, + 0.0425567 -0.104028 0.00244904, 0.0424227 -0.10415 0.00249104, 0.0423047 -0.104395 0.00260204, 0.0422097 -0.104517 0.00277404, + 0.0414087 -0.105615 0.00480104, 0.0410997 -0.106104 0.00527804, 0.0409087 -0.106348 0.00540604, + 0.0407027 -0.106592 0.00545004, 0.0401267 -0.107446 0.00545004, 0.0401267 -0.107446 0.00145004, + 0.0407027 -0.106592 0.00145004, 0.0407027 -0.106592 0.00445004, 0.0407707 -0.10647 0.00443504, 0.0408327 -0.10647 0.00439304, + 0.0401267 -0.107446 -0.00641596, 0.0435677 -0.102563 -0.00480796, 0.0435677 -0.102563 -0.00380896, + 0.0401267 -0.107446 -0.00220096, 0.0401267 -0.107446 -0.00323396, 0.0409887 -0.106226 -0.00363696, + 0.0409887 -0.106226 -0.00497896, 0.0401267 -0.107446 -0.00537996, 0.0427587 -0.103662 -0.00819996, + 0.0401267 -0.107446 -0.00819996, 0.0401267 -0.107446 -0.00919996, 0.0435677 -0.102563 -0.00919996, + 0.0435677 -0.102563 -0.00819996, 0.0427587 -0.103662 -0.00678596, 0.0423507 -0.104272 -0.00749296, + 0.0361138 -0.113184 0.00249904, 0.0361138 -0.113184 0.00128404, 0.0362007 -0.113062 0.000519041, + 0.0364487 -0.112695 -0.000128959, 0.0368187 -0.112207 -0.000561959, 0.0372577 -0.111597 -0.000714958, + 0.0376967 -0.110864 -0.000561959, 0.0380707 -0.110376 -0.000128959, 0.0383187 -0.11001 0.00051904, + 0.0384057 -0.109888 0.00128404, 0.0384057 -0.109888 0.00350004, 0.0349657 -0.114771 0.00350004, + 0.0349657 -0.114771 0.00249904, 0.0365747 -0.112573 -0.00424296, 0.0367967 -0.112207 -0.00464296, + 0.0370747 -0.111841 -0.00490396, 0.0373877 -0.111353 -0.00499996, 0.0377007 -0.110864 -0.00492096, + 0.0379867 -0.110498 -0.00467496, 0.0382117 -0.110132 -0.00428696, 0.0383567 -0.11001 -0.00379496, + 0.0384057 -0.109888 -0.00324996, 0.0384057 -0.109888 -0.00274996, 0.0383297 -0.11001 -0.00207996, + 0.0381127 -0.110376 -0.00151196, 0.0377877 -0.110742 -0.00113296, 0.0374027 -0.111353 -0.00100096, + 0.0374027 -0.111353 -0.00199996, 0.0375667 -0.111108 -0.00205796, 0.0377077 -0.110864 -0.00221996, + 0.0377997 -0.110742 -0.00246396, 0.0378337 -0.110742 -0.00274996, 0.0378337 -0.110742 -0.00324996, + 0.0378107 -0.110742 -0.00348396, 0.0377497 -0.110864 -0.00369396, 0.0376507 -0.110986 -0.00385996, + 0.0375287 -0.111108 -0.00396696, 0.0373947 -0.111353 -0.00399996, 0.0372617 -0.111597 -0.00395896, + 0.0371437 -0.111719 -0.00384696, 0.0370477 -0.111841 -0.00367496, 0.0362467 -0.112939 -0.00164896, + 0.0359377 -0.113428 -0.00117296, 0.0357437 -0.113672 -0.00104296, 0.0355377 -0.114038 -0.00100096, + 0.0349657 -0.114771 -0.00100096, 0.0349657 -0.114771 -0.00499996, 0.0355377 -0.114038 -0.00499996, + 0.0355377 -0.114038 -0.00199996, 0.0356057 -0.113916 -0.00201396, 0.0356707 -0.113794 -0.00205796, + 0.0357737 -0.113672 -0.00221596, 0.0357738 -0.113672 0.00829904, 0.0365748 -0.112573 0.00627204, + 0.0367967 -0.112207 0.00587104, 0.0370748 -0.111841 0.00561004, 0.0373878 -0.111353 0.00551504, + 0.0377007 -0.110864 0.00559304, 0.0379868 -0.110498 0.00583904, 0.0382118 -0.110132 0.00622804, 0.0383568 -0.11001 0.00671804, + 0.0384057 -0.109888 0.00726604, 0.0384057 -0.109888 0.00776504, 0.0383298 -0.11001 0.00843504, 0.0381128 -0.110376 0.00900104, + 0.0377878 -0.110742 0.00938104, 0.0374027 -0.111353 0.00951404, 0.0374027 -0.111353 0.00851504, + 0.0375668 -0.111108 0.00845804, 0.0377077 -0.110864 0.00829604, 0.0377997 -0.110742 0.00805104, + 0.0378338 -0.110742 0.00776504, 0.0378338 -0.110742 0.00726604, 0.0378108 -0.110742 0.00703104, + 0.0377497 -0.110864 0.00681904, 0.0376507 -0.110986 0.00665304, 0.0375287 -0.111108 0.00654804, + 0.0373948 -0.111353 0.00651404, 0.0372618 -0.111597 0.00655604, 0.0371438 -0.111719 0.00666704, + 0.0370478 -0.111841 0.00683804, 0.0362468 -0.112939 0.00886604, 0.0359377 -0.113428 0.00934304, + 0.0357438 -0.113672 0.00947004, 0.0355377 -0.114038 0.00951404, 0.0349657 -0.114771 0.00951404, + 0.0349657 -0.114771 0.00551504, 0.0355377 -0.114038 0.00551504, 0.0355377 -0.114038 0.00851504, + 0.0356058 -0.113916 0.00850004, 0.0356707 -0.113794 0.00845804, 0.0349657 -0.114771 -0.00699996, + 0.0349657 -0.114771 -0.00921596, 0.0350187 -0.114771 -0.00982996, 0.0351827 -0.114526 -0.010385, 0.0354307 -0.11416 -0.010827, + 0.0357507 -0.113672 -0.011113, 0.0361017 -0.113184 -0.011216, 0.0364527 -0.112695 -0.011124, 0.0367737 -0.112207 -0.010849, + 0.0370287 -0.111841 -0.010416, 0.0372387 -0.111597 -0.010616, 0.0374677 -0.11123 -0.010709, 0.0377037 -0.110864 -0.010689, + 0.0379297 -0.11062 -0.010557, 0.0381277 -0.110254 -0.010323, 0.0382767 -0.110132 -0.010004, 0.0383717 -0.11001 -0.00962496, + 0.0384057 -0.109888 -0.00921596, 0.0384057 -0.109888 -0.00699996, 0.0355377 -0.114038 0.013001, 0.0366857 -0.112329 0.013001, + 0.0366857 -0.112329 0.011784, 0.0366438 -0.112451 0.011403, 0.0365178 -0.112573 0.011078, 0.0363308 -0.112817 0.010861, + 0.0361138 -0.113184 0.010785, 0.0358917 -0.11355 0.010861, 0.0357057 -0.113794 0.011078, 0.0355828 -0.113916 0.011403, + 0.0355377 -0.114038 0.011784, 0.0378338 -0.110742 0.013001, 0.0378338 -0.110742 0.011784, 0.0378108 -0.110742 0.011593, + 0.0377497 -0.110864 0.011431, 0.0376548 -0.110986 0.011322, 0.0375478 -0.111108 0.011284, 0.0374367 -0.11123 0.011322, + 0.0373418 -0.111475 0.011431, 0.0372807 -0.111475 0.011593, 0.0372577 -0.111597 0.011784, 0.0372577 -0.111597 0.013001, + 0.0415607 -0.105371 0.00742604, 0.0415607 -0.105371 0.00823104, 0.0424227 -0.10415 0.00782804, + 0.0415607 -0.105371 -0.00470996, 0.0415607 -0.105371 -0.00390596, 0.0424227 -0.10415 -0.00430696, + 0.0366857 -0.112329 0.00249904, 0.0378337 -0.110742 0.00249904, 0.0378337 -0.110742 0.00128404, + 0.0377877 -0.110742 0.000903041, 0.0376657 -0.110986 0.000578042, 0.0374787 -0.11123 0.000361042, + 0.0372577 -0.111597 0.00028504, 0.0370407 -0.111841 0.000361042, 0.0368537 -0.112085 0.000578042, + 0.0367277 -0.112329 0.000903042, 0.0366857 -0.112329 0.00128404, 0.0372577 -0.111597 -0.00799996, + 0.0378337 -0.110742 -0.00799996, 0.0378337 -0.110742 -0.00921596, 0.0378107 -0.110742 -0.00940696, + 0.0377497 -0.110864 -0.00956896, 0.0376547 -0.110986 -0.00967696, 0.0375477 -0.111108 -0.00971596, + 0.0374367 -0.11123 -0.00967696, 0.0373417 -0.111475 -0.00956896, 0.0372807 -0.111475 -0.00940696, + 0.0372577 -0.111597 -0.00921596, 0.0355377 -0.114038 -0.00799996, 0.0366857 -0.112329 -0.00799996, + 0.0366857 -0.112329 -0.00921596, 0.0366437 -0.112451 -0.00959796, 0.0365177 -0.112573 -0.00992296, + 0.0363307 -0.112817 -0.010139, 0.0361137 -0.113184 -0.010215, 0.0358917 -0.11355 -0.010139, 0.0357057 -0.113794 -0.00992296, + 0.0355827 -0.113916 -0.00959796, 0.0355377 -0.114038 -0.00921596, 0.0491518 -0.110986 0.020543, 0.0487057 -0.095605 0.015061, + 0.0487017 -0.096582 0.016701, 0.0487747 -0.100244 0.019288, 0.0489388 -0.105493 0.020665, 0.0433428 -0.119287 0.020543, + 0.0323828 -0.118555 0.013298, 0.0349727 -0.114771 0.013649, 0.0349917 -0.114893 0.014, 0.0367128 -0.112329 0.014, + 0.0384328 -0.109888 0.014, 0.0384138 -0.109888 0.013649, 0.0435707 -0.102563 0.013298, 0.0358048 -0.126733 -0.00434996, + 0.0356597 -0.126855 -0.00409996, 0.0369448 -0.127832 -0.00378796, 0.0380358 -0.128564 -0.00289896, + 0.0387608 -0.129053 -0.00156896, 0.0390167 -0.129297 3.93031e-008, 0.0387608 -0.129053 0.00156804, + 0.0380358 -0.128564 0.00290004, 0.0369448 -0.127832 0.00378804, 0.0356598 -0.126855 0.00409904, + 0.0358048 -0.126733 0.00434904, 0.0343737 -0.126001 0.00378804, 0.0332827 -0.125269 0.00290004, 0.0325578 -0.12478 0.00156804, + 0.0323028 -0.124536 4.10598e-008, 0.0325578 -0.12478 -0.00156896, 0.0332827 -0.125269 -0.00289896, + 0.0343737 -0.126001 -0.00378796, 0.0349158 -0.127954 0.00409904, 0.0352858 -0.127466 0.00409904, + 0.0352858 -0.127466 -0.00409996, 0.0349157 -0.127954 -0.00409996, 0.0361978 -0.128931 -0.00378796, + 0.0372888 -0.129663 -0.00289896, 0.0380168 -0.130151 -0.00156896, 0.0382728 -0.130273 3.94315e-008, + 0.0380168 -0.130151 0.00156804, 0.0372888 -0.129663 0.00290004, 0.0361978 -0.128931 0.00378804, 0.0336298 -0.1271 0.00378804, + 0.0325387 -0.126367 0.00290004, 0.0318107 -0.125757 0.00156804, 0.0315548 -0.125635 4.11838e-008, + 0.0318107 -0.125757 -0.00156896, 0.0325387 -0.126367 -0.00289896, 0.0336297 -0.1271 -0.00378796, + 0.0346758 -0.12832 0.00337504, 0.0347938 -0.128198 0.00373704, 0.0347937 -0.128198 -0.00373796, + 0.0346758 -0.12832 -0.00337596, 0.0357318 -0.129053 -0.00311796, 0.0366287 -0.129663 -0.00238596, + 0.0372277 -0.130151 -0.00129096, 0.0374368 -0.130273 3.96241e-008, 0.0372278 -0.130151 0.00129204, + 0.0366288 -0.129663 0.00238704, 0.0357318 -0.129053 0.00311904, 0.0336148 -0.127588 0.00311904, + 0.0327188 -0.126978 0.00238704, 0.0321198 -0.126489 0.00129204, 0.0319097 -0.126367 4.10697e-008, + 0.0321198 -0.126489 -0.00129096, 0.0327188 -0.126978 -0.00238596, 0.0336148 -0.127588 -0.00311796, + 0.0273438 -0.138818 0.00337504, 0.0310078 -0.133569 0.00337504, 0.0310078 -0.133569 -0.00337596, + 0.0273438 -0.138818 -0.00337596, 0.0283998 -0.139551 -0.00311796, 0.0292988 -0.140161 -0.00238596, + 0.0298978 -0.140527 -0.00129096, 0.0301068 -0.140771 4.08503e-008, 0.0298978 -0.140527 0.00129204, + 0.0292988 -0.140161 0.00238704, 0.0283998 -0.139551 0.00311904, 0.0262848 -0.138086 0.00311904, + 0.0253888 -0.137354 0.00238704, 0.0247878 -0.136987 0.00129204, 0.0245778 -0.136865 4.22963e-008, + 0.0247878 -0.136987 -0.00129096, 0.0253888 -0.137354 -0.00238596, 0.0262848 -0.138086 -0.00311796, + 0.0358048 -0.126733 0.017651, 0.0356598 -0.126855 0.017399, 0.0343738 -0.126001 0.017086, 0.0332828 -0.125269 0.016198, + 0.0325578 -0.12478 0.01487, 0.0323028 -0.124536 0.013298, 0.0325578 -0.12478 0.011731, 0.0332828 -0.125269 0.010401, + 0.0343738 -0.126001 0.00951204, 0.0356598 -0.126855 0.00920004, 0.0358048 -0.126733 0.00895004, + 0.0369448 -0.127832 0.00951204, 0.0380358 -0.128564 0.010401, 0.0387608 -0.129053 0.011731, 0.0390168 -0.129297 0.013298, + 0.0387608 -0.129053 0.01487, 0.0380358 -0.128564 0.016198, 0.0369448 -0.127832 0.017086, 0.0349158 -0.127954 0.017399, + 0.0336298 -0.1271 0.017086, 0.0325388 -0.126367 0.016198, 0.0318108 -0.125757 0.01487, 0.0315548 -0.125635 0.013298, + 0.0318108 -0.125757 0.011731, 0.0325388 -0.126367 0.010401, 0.0336298 -0.1271 0.00951204, 0.0349158 -0.127954 0.00920004, + 0.0352858 -0.127466 0.00920004, 0.0352858 -0.127466 0.017399, 0.0361978 -0.128931 0.00951204, 0.0372888 -0.129663 0.010401, + 0.0380168 -0.130151 0.011731, 0.0382728 -0.130273 0.013298, 0.0380168 -0.130151 0.01487, 0.0372888 -0.129663 0.016198, + 0.0361978 -0.128931 0.017086, 0.0346758 -0.12832 0.016674, 0.0336148 -0.127588 0.016419, 0.0327188 -0.126978 0.015686, + 0.0321198 -0.126489 0.014592, 0.0319098 -0.126367 0.013298, 0.0321198 -0.126489 0.012009, 0.0327188 -0.126978 0.010914, + 0.0336148 -0.127588 0.010182, 0.0346758 -0.12832 0.00992404, 0.0347938 -0.128198 0.00956204, 0.0347938 -0.128198 0.017037, + 0.0357318 -0.129053 0.010182, 0.0366288 -0.129663 0.010914, 0.0372278 -0.130151 0.012009, 0.0374368 -0.130273 0.013298, + 0.0372278 -0.130151 0.014592, 0.0366288 -0.129663 0.015686, 0.0357318 -0.129053 0.016419, 0.0273438 -0.138818 0.016674, + 0.0262848 -0.138086 0.016419, 0.0253888 -0.137354 0.015686, 0.0247878 -0.136987 0.014592, 0.0245778 -0.136865 0.013298, + 0.0247878 -0.136987 0.012009, 0.0253888 -0.137354 0.010914, 0.0262848 -0.138086 0.010182, 0.0273438 -0.138818 0.00992404, + 0.0310078 -0.133569 0.00992404, 0.0310078 -0.133569 0.016674, 0.0283998 -0.139551 0.010182, 0.0292988 -0.140161 0.010914, + 0.0298978 -0.140527 0.012009, 0.0301068 -0.140771 0.013298, 0.0298978 -0.140527 0.014592, 0.0292988 -0.140161 0.015686, + 0.0283998 -0.139551 0.016419, 0.0452378 -0.133325 -0.00229996, 0.0450938 -0.133569 -0.00254996, + 0.0438077 -0.132593 -0.00286196, 0.0427207 -0.13186 -0.00375096, 0.0419918 -0.131372 -0.00508096, + 0.0417368 -0.131128 -0.00664996, 0.0419918 -0.131372 -0.00821896, 0.0427207 -0.13186 -0.00954896, + 0.0438077 -0.132593 -0.010438, 0.0450937 -0.133569 -0.01075, 0.0452377 -0.133325 -0.011, 0.0463788 -0.134424 -0.010438, + 0.0474698 -0.135156 -0.00954896, 0.0481988 -0.135645 -0.00821896, 0.0484538 -0.135889 -0.00664996, + 0.0481988 -0.135645 -0.00508096, 0.0474698 -0.135156 -0.00375096, 0.0463788 -0.134424 -0.00286196, + 0.0443498 -0.134546 -0.00254996, 0.0430638 -0.133691 -0.00286196, 0.0419727 -0.132959 -0.00375096, + 0.0412478 -0.132349 -0.00508096, 0.0409888 -0.132227 -0.00664996, 0.0412478 -0.132349 -0.00821896, + 0.0419727 -0.132959 -0.00954896, 0.0430637 -0.133691 -0.010438, 0.0443497 -0.134546 -0.01075, 0.0447237 -0.134058 -0.01075, + 0.0447238 -0.134058 -0.00254996, 0.0456348 -0.135522 -0.010438, 0.0467217 -0.136255 -0.00954896, + 0.0474508 -0.136743 -0.00821896, 0.0477068 -0.136987 -0.00664996, 0.0474508 -0.136743 -0.00508096, + 0.0467218 -0.136255 -0.00375096, 0.0456348 -0.135522 -0.00286196, 0.0441088 -0.134912 -0.00327396, + 0.0430528 -0.13418 -0.00353196, 0.0421558 -0.133569 -0.00426296, 0.0415528 -0.133081 -0.00535796, + 0.0413437 -0.132959 -0.00664996, 0.0415528 -0.133081 -0.00794196, 0.0421558 -0.133569 -0.00903696, + 0.0430528 -0.13418 -0.00976796, 0.0441088 -0.134912 -0.010025, 0.0442277 -0.13479 -0.010388, 0.0442278 -0.13479 -0.00291196, + 0.0451658 -0.135645 -0.00976796, 0.0460618 -0.136255 -0.00903696, 0.0466648 -0.136743 -0.00794196, + 0.0468748 -0.136865 -0.00664996, 0.0466648 -0.136743 -0.00535796, 0.0460618 -0.136255 -0.00426296, + 0.0451658 -0.135645 -0.00353196, 0.0273758 -0.158838 -0.00327396, 0.0263178 -0.158105 -0.00353196, + 0.0254208 -0.157495 -0.00426296, 0.0248218 -0.157007 -0.00535796, 0.0246108 -0.156885 -0.00664996, + 0.0248218 -0.157007 -0.00794196, 0.0254208 -0.157495 -0.00903696, 0.0263178 -0.158105 -0.00976796, + 0.0273758 -0.158838 -0.010025, 0.0357438 -0.146875 -0.010025, 0.0357438 -0.146875 -0.00327396, 0.0284348 -0.15957 -0.00976796, + 0.0293308 -0.160181 -0.00903696, 0.0299298 -0.160547 -0.00794196, 0.0301398 -0.160791 -0.00664996, + 0.0299298 -0.160547 -0.00535796, 0.0293308 -0.160181 -0.00426296, 0.0284348 -0.15957 -0.00353196, + 0.0506288 -0.14187 0.00919204, 0.0508688 -0.150049 0.011944, 0.0497248 -0.152246 0.011944, 0.0485798 -0.154321 0.011944, + 0.0457418 -0.152856 0.00996804, 0.0435258 -0.151636 0.00715104, 0.0421138 -0.150903 0.00373304, + 0.0416338 -0.150659 3.77586e-008, 0.0455468 -0.143335 3.71798e-008, 0.0497318 -0.136133 0.00289404, + 0.0516198 -0.15603 0.015965, 0.0505098 -0.15542 0.013554, 0.0496248 -0.154932 0.012623, 0.0421138 -0.150903 -0.00373196, + 0.0435258 -0.151636 -0.00715096, 0.0457418 -0.152856 -0.00996696, 0.0485798 -0.154321 -0.011944, + 0.0496248 -0.154932 -0.012624, 0.0505098 -0.15542 -0.013554, 0.0516198 -0.15603 -0.015964, 0.0525468 -0.156519 -0.01582, + 0.0532568 -0.156885 -0.015708, 0.0565378 -0.158594 -0.014764, 0.0594938 -0.160181 -0.013033, 0.0624578 -0.161768 -0.00994097, + 0.0645218 -0.162866 -0.00601497, 0.0652538 -0.163232 -0.00343097, 0.0655208 -0.163354 -0.00148897, + 0.0655818 -0.163477 -0.000187967, 0.0655818 -0.163477 3.16759e-008, 0.0655818 -0.163477 0.000189032, + 0.0655208 -0.163354 0.00148803, 0.0652538 -0.163232 0.00343003, 0.0645218 -0.162866 0.00601603, + 0.0624578 -0.161768 0.00994003, 0.0594938 -0.160181 0.013035, 0.0565378 -0.158594 0.014763, 0.0532568 -0.156885 0.015709, + 0.0525468 -0.156519 0.01582, 0.0450738 -0.15249 3.68853e-008, 0.0456008 -0.152734 0.00323204, 0.0471038 -0.153589 0.00604304, + 0.0493888 -0.15481 0.00806504, 0.0521618 -0.156274 0.00903604, 0.0550578 -0.157861 0.00883003, 0.0576968 -0.159204 0.00747003, + 0.0597418 -0.160303 0.00513703, 0.0609208 -0.160913 0.00213503, 0.0609438 -0.160913 0.00156103, + 0.0608828 -0.160913 0.00128003, 0.0607718 -0.160913 0.00101903, 0.0606648 -0.160791 0.000781033, + 0.0605888 -0.160791 0.000529033, 0.0605278 -0.160791 3.29587e-008, 0.0605428 -0.160791 -0.000266966, + 0.0605888 -0.160791 -0.000527967, 0.0607718 -0.160913 -0.00101797, 0.0609438 -0.160913 -0.00155997, + 0.0609548 -0.160913 -0.00184797, 0.0609208 -0.160913 -0.00213397, 0.0596888 -0.160303 -0.00522597, + 0.0575408 -0.159082 -0.00759097, 0.0547788 -0.157617 -0.00890096, 0.0517848 -0.15603 -0.00897596, + 0.0491408 -0.154687 -0.00791096, 0.0469778 -0.153589 -0.00588096, 0.0455668 -0.152734 -0.00313096, + 0.0417558 -0.154687 3.75529e-008, 0.0424958 -0.155054 -0.00420896, 0.0445978 -0.156274 -0.00777796, + 0.0477488 -0.157861 -0.010163, 0.0514678 -0.159937 -0.011, 0.0551828 -0.16189 -0.010163, 0.0583338 -0.163477 -0.00777997, + 0.0604398 -0.164697 -0.00420997, 0.0611798 -0.165063 3.26202e-008, 0.0604398 -0.164697 0.00421003, + 0.0583338 -0.163477 0.00777903, 0.0551828 -0.16189 0.010163, 0.0514678 -0.159937 0.011, 0.0477488 -0.157861 0.010163, + 0.0445978 -0.156274 0.00777904, 0.0424958 -0.155054 0.00421004, 0.0591318 -0.163965 -0.00101797, + 0.0592988 -0.164087 -0.00155997, 0.0593148 -0.164087 -0.00184797, 0.0592768 -0.164087 -0.00213397, + 0.0580978 -0.163354 -0.00513697, 0.0560568 -0.162378 -0.00746997, 0.0534128 -0.160913 -0.00882897, + 0.0505178 -0.159326 -0.00903696, 0.0477448 -0.157861 -0.00806596, 0.0454598 -0.156641 -0.00604296, + 0.0439568 -0.155908 -0.00323196, 0.0434298 -0.155542 3.71296e-008, 0.0439568 -0.155908 0.00323204, + 0.0454598 -0.156641 0.00604304, 0.0477448 -0.157861 0.00806504, 0.0505178 -0.159326 0.00903604, + 0.0534128 -0.160913 0.00883003, 0.0560568 -0.162378 0.00747003, 0.0580978 -0.163354 0.00513703, + 0.0592768 -0.164087 0.00213503, 0.0592988 -0.164087 0.00156103, 0.0592378 -0.163965 0.00128003, + 0.0591318 -0.163965 0.00101903, 0.0590248 -0.163843 0.000781033, 0.0589448 -0.163843 0.000529034, + 0.0588838 -0.163843 3.3203e-008, 0.0588988 -0.163843 -0.000266966, 0.0589448 -0.163843 -0.000527967, + 0.0553088 -0.17605 3.34887e-008, 0.0494418 -0.187158 3.43509e-008, 0.0487018 -0.18667 0.00421004, + 0.0465968 -0.185571 0.00777904, 0.0434458 -0.183984 0.010163, 0.0397298 -0.181909 0.011, 0.0360148 -0.179956 0.010163, + 0.0328638 -0.178247 0.00777904, 0.0307578 -0.177148 0.00421004, 0.0300178 -0.176782 3.92836e-008, + 0.0358848 -0.165796 3.8416e-008, 0.0307578 -0.177148 -0.00420896, 0.0328638 -0.178247 -0.00777796, + 0.0360148 -0.179956 -0.010163, 0.0397298 -0.181909 -0.011, 0.0434458 -0.183984 -0.010163, 0.0465968 -0.185571 -0.00777996, + 0.0487018 -0.18667 -0.00420996, 0.0599518 -0.162378 -0.00101797, 0.0599518 -0.162378 0.00101903, 0.0601008 -0.1625 0.00213503, + 0.0436548 -0.155664 -0.00213396, 0.0447038 -0.156274 -0.00491296, 0.0464968 -0.157251 -0.00714896, + 0.0488358 -0.158472 -0.00859896, 0.0514678 -0.159937 -0.00909996, 0.0540958 -0.161279 -0.00859896, + 0.0564378 -0.1625 -0.00714897, 0.0582308 -0.163477 -0.00491297, 0.0601008 -0.1625 -0.00213397, + 0.0495608 -0.154932 -0.00816296, 0.0476338 -0.153833 -0.00665896, 0.0461728 -0.153101 -0.00459096, + 0.0452998 -0.152612 -0.00213396, 0.0509188 -0.151636 0.012356, 0.0509608 -0.153101 0.012887, 0.0515818 -0.153467 0.013604, + 0.0520858 -0.153711 0.014428, 0.0526888 -0.154199 0.016308, 0.0521548 -0.155054 0.016137, 0.0491517 -0.110986 -0.020544, + 0.0489387 -0.105493 -0.020666, 0.0487747 -0.100244 -0.019288, 0.0487017 -0.096582 -0.016702, 0.0487057 -0.095605 -0.01506, + 0.0435707 -0.102563 -0.0133, 0.0384137 -0.109888 -0.01365, 0.0384327 -0.109888 -0.014, 0.0367127 -0.112329 -0.014, + 0.0349917 -0.114893 -0.014, 0.0349727 -0.114771 -0.01365, 0.0323827 -0.118555 -0.0133, 0.0433427 -0.119287 -0.020544, + 0.0358048 -0.126733 -0.00894996, 0.0356597 -0.126855 -0.00919996, 0.0343737 -0.126001 -0.00951196, + 0.0332827 -0.125269 -0.010401, 0.0325577 -0.12478 -0.011731, 0.0323027 -0.124536 -0.0133, 0.0325577 -0.12478 -0.014869, + 0.0332827 -0.125269 -0.016199, 0.0343737 -0.126001 -0.017088, 0.0356597 -0.126855 -0.0174, 0.0358047 -0.126733 -0.01765, + 0.0369447 -0.127832 -0.017088, 0.0380357 -0.128564 -0.016199, 0.0387608 -0.129053 -0.014869, 0.0390167 -0.129297 -0.0133, + 0.0387608 -0.129053 -0.011731, 0.0380358 -0.128564 -0.010401, 0.0369448 -0.127832 -0.00951196, 0.0349157 -0.127954 -0.0174, + 0.0352857 -0.127466 -0.0174, 0.0352858 -0.127466 -0.00919996, 0.0349157 -0.127954 -0.00919996, 0.0336297 -0.1271 -0.00951196, + 0.0325387 -0.126367 -0.010401, 0.0318107 -0.125757 -0.011731, 0.0315547 -0.125635 -0.0133, 0.0318107 -0.125757 -0.014869, + 0.0325387 -0.126367 -0.016199, 0.0336297 -0.1271 -0.017088, 0.0361977 -0.128931 -0.017088, 0.0372887 -0.129663 -0.016199, + 0.0380168 -0.130151 -0.014869, 0.0382727 -0.130273 -0.0133, 0.0380168 -0.130151 -0.011731, 0.0372888 -0.129663 -0.010401, + 0.0361978 -0.128931 -0.00951196, 0.0346757 -0.12832 -0.016675, 0.0347937 -0.128198 -0.017037, 0.0347937 -0.128198 -0.00956196, + 0.0346758 -0.12832 -0.00992496, 0.0336148 -0.127588 -0.010182, 0.0327188 -0.126978 -0.010913, 0.0321198 -0.126489 -0.012008, + 0.0319097 -0.126367 -0.0133, 0.0321197 -0.126489 -0.014592, 0.0327187 -0.126978 -0.015687, 0.0336147 -0.127588 -0.016418, + 0.0357317 -0.129053 -0.016418, 0.0366287 -0.129663 -0.015687, 0.0372277 -0.130151 -0.014592, 0.0374367 -0.130273 -0.0133, + 0.0372277 -0.130151 -0.012008, 0.0366287 -0.129663 -0.010913, 0.0357318 -0.129053 -0.010182, 0.0273438 -0.138818 -0.016675, + 0.0310077 -0.133569 -0.016675, 0.0310077 -0.133569 -0.00992496, 0.0273438 -0.138818 -0.00992496, + 0.0262848 -0.138086 -0.010182, 0.0253888 -0.137354 -0.010913, 0.0247878 -0.136987 -0.012008, 0.0245777 -0.136865 -0.0133, + 0.0247878 -0.136987 -0.014592, 0.0253888 -0.137354 -0.015687, 0.0262848 -0.138086 -0.016418, 0.0283998 -0.139551 -0.016418, + 0.0292988 -0.140161 -0.015687, 0.0298978 -0.140527 -0.014592, 0.0301068 -0.140771 -0.0133, 0.0298978 -0.140527 -0.012008, + 0.0292988 -0.140161 -0.010913, 0.0283998 -0.139551 -0.010182, 0.0452378 -0.133325 0.011, 0.0450938 -0.133569 0.01075, + 0.0438078 -0.132593 0.010437, 0.0427208 -0.13186 0.00954904, 0.0419918 -0.131372 0.00821904, 0.0417368 -0.131128 0.00664904, + 0.0419918 -0.131372 0.00508204, 0.0427208 -0.13186 0.00375004, 0.0438078 -0.132593 0.00286104, 0.0450938 -0.133569 0.00255104, + 0.0452378 -0.133325 0.00230104, 0.0463788 -0.134424 0.00286104, 0.0474698 -0.135156 0.00375004, + 0.0481988 -0.135645 0.00508204, 0.0484538 -0.135889 0.00664904, 0.0481988 -0.135645 0.00821904, + 0.0474698 -0.135156 0.00954904, 0.0463788 -0.134424 0.010437, 0.0443498 -0.134546 0.00255104, 0.0447238 -0.134058 0.00255104, + 0.0447238 -0.134058 0.01075, 0.0443498 -0.134546 0.01075, 0.0430638 -0.133691 0.010437, 0.0419728 -0.132959 0.00954904, + 0.0412478 -0.132349 0.00821904, 0.0409888 -0.132227 0.00664904, 0.0412478 -0.132349 0.00508204, + 0.0419728 -0.132959 0.00375004, 0.0430638 -0.133691 0.00286104, 0.0456348 -0.135522 0.00286104, + 0.0467218 -0.136255 0.00375004, 0.0474508 -0.136743 0.00508204, 0.0477068 -0.136987 0.00664904, + 0.0474508 -0.136743 0.00821904, 0.0467218 -0.136255 0.00954904, 0.0456348 -0.135522 0.010437, 0.0441088 -0.134912 0.00327504, + 0.0442278 -0.13479 0.00291304, 0.0442278 -0.13479 0.010388, 0.0441088 -0.134912 0.010025, 0.0430528 -0.13418 0.00976804, + 0.0421558 -0.133569 0.00903604, 0.0415528 -0.133081 0.00794104, 0.0413438 -0.132959 0.00664904, + 0.0415528 -0.133081 0.00535804, 0.0421558 -0.133569 0.00426304, 0.0430528 -0.13418 0.00353104, 0.0451658 -0.135645 0.00353104, + 0.0460618 -0.136255 0.00426304, 0.0466648 -0.136743 0.00535804, 0.0468748 -0.136865 0.00664904, + 0.0466648 -0.136743 0.00794104, 0.0460618 -0.136255 0.00903604, 0.0451658 -0.135645 0.00976804, + 0.0273758 -0.158838 0.00327504, 0.0357438 -0.146875 0.00327504, 0.0357438 -0.146875 0.010025, 0.0273758 -0.158838 0.010025, + 0.0263178 -0.158105 0.00976804, 0.0254208 -0.157495 0.00903604, 0.0248218 -0.157007 0.00794104, + 0.0246108 -0.156885 0.00664904, 0.0248218 -0.157007 0.00535804, 0.0254208 -0.157495 0.00426304, + 0.0263178 -0.158105 0.00353104, 0.0284348 -0.15957 0.00353104, 0.0293308 -0.160181 0.00426304, 0.0299298 -0.160547 0.00535804, + 0.0301398 -0.160791 0.00664904, 0.0299298 -0.160547 0.00794104, 0.0293308 -0.160181 0.00903604, 0.0284348 -0.15957 0.00976804, + 0.0508688 -0.150049 -0.011944, 0.0506288 -0.14187 -0.00919096, 0.0505218 -0.136743 -0.00563996, + 0.0497318 -0.136133 -0.00289296, 0.0497248 -0.152246 -0.011944, 0.0509608 -0.153101 -0.012886, 0.0509188 -0.151636 -0.012355, + 0.0521548 -0.155054 -0.016136, 0.0526888 -0.154199 -0.01631, 0.0520858 -0.153711 -0.014428, 0.0515818 -0.153467 -0.013602, + 0.0431587 -0.102197 0.00832804, 0.0397188 -0.107202 0.00993604, 0.0397188 -0.107202 0.00890004, + 0.0405767 -0.105981 0.00849804, 0.0405767 -0.105981 0.00715704, 0.0397188 -0.107202 0.00675404, + 0.0397187 -0.107202 0.00572104, 0.0431587 -0.102197 0.00732804, 0.0411527 -0.105127 0.00823104, + 0.0420147 -0.103906 0.00782804, 0.0411527 -0.105127 0.00742604, 0.0405267 -0.105981 0.00423304, + 0.0413277 -0.104883 0.00220704, 0.0415497 -0.104517 0.00180704, 0.0418277 -0.10415 0.00154504, 0.0421407 -0.103662 0.00145004, + 0.0424537 -0.103296 0.00152804, 0.0427397 -0.102808 0.00177404, 0.0429647 -0.102563 0.00216304, + 0.0431097 -0.102319 0.00265404, 0.0431587 -0.102197 0.00319904, 0.0431587 -0.102197 0.00370104, + 0.0430827 -0.102319 0.00437004, 0.0428657 -0.102686 0.00493704, 0.0425417 -0.103174 0.00531604, + 0.0421557 -0.103662 0.00545004, 0.0421557 -0.103662 0.00445004, 0.0423197 -0.103418 0.00439304, + 0.0424607 -0.103296 0.00423104, 0.0425527 -0.103052 0.00398704, 0.0425867 -0.103052 0.00370104, + 0.0425867 -0.103052 0.00319904, 0.0425637 -0.103052 0.00296604, 0.0425027 -0.103174 0.00275504, + 0.0424037 -0.103296 0.00258904, 0.0422817 -0.10354 0.00248404, 0.0421487 -0.103662 0.00244904, 0.0420147 -0.103906 0.00249104, + 0.0418967 -0.104028 0.00260204, 0.0418007 -0.10415 0.00277404, 0.0409997 -0.105371 0.00480104, 0.0406907 -0.105737 0.00527804, + 0.0404967 -0.106104 0.00540604, 0.0402907 -0.106348 0.00545004, 0.0397187 -0.107202 0.00545004, + 0.0397187 -0.107202 0.00145004, 0.0402907 -0.106348 0.00145004, 0.0402907 -0.106348 0.00445004, + 0.0403587 -0.106226 0.00443504, 0.0404237 -0.106104 0.00439304, 0.0404967 -0.10647 0.00445004, 0.0407327 -0.106104 0.00423304, + 0.0404967 -0.10647 0.00545004, 0.0412057 -0.105493 0.00480104, 0.0427887 -0.103174 0.00319904, 0.0420067 -0.104272 0.00277404, + 0.0423577 -0.103784 0.00445004, 0.0427887 -0.103174 0.00370104, 0.0423577 -0.103784 0.00545004, + 0.0433647 -0.102441 0.00370104, 0.0433647 -0.102441 0.00319904, 0.0415337 -0.105005 0.00220704, + 0.0397187 -0.107202 -0.00641596, 0.0431587 -0.102197 -0.00480796, 0.0431587 -0.102197 -0.00380896, + 0.0397187 -0.107202 -0.00220096, 0.0397187 -0.107202 -0.00323396, 0.0405767 -0.105981 -0.00363696, + 0.0405767 -0.105981 -0.00497896, 0.0397187 -0.107202 -0.00537996, 0.0411527 -0.105127 -0.00390596, + 0.0420147 -0.103906 -0.00430696, 0.0411527 -0.105127 -0.00470996, 0.0419427 -0.104028 -0.00749296, + 0.0423467 -0.103418 -0.00819996, 0.0397187 -0.107202 -0.00819996, 0.0397187 -0.107202 -0.00919996, + 0.0431587 -0.102197 -0.00919996, 0.0431587 -0.102197 -0.00819996, 0.0423467 -0.103418 -0.00678596, + 0.0357018 -0.112939 0.00249904, 0.0357018 -0.112939 0.00128404, 0.0357887 -0.112817 0.000519041, + 0.0360367 -0.112451 -0.000128959, 0.0364107 -0.111841 -0.000561958, 0.0368497 -0.11123 -0.000714958, + 0.0372887 -0.11062 -0.000561959, 0.0376627 -0.110132 -0.000128959, 0.0379097 -0.109766 0.00051904, + 0.0379977 -0.109644 0.00128404, 0.0379977 -0.109644 0.00350004, 0.0345568 -0.114526 0.00350004, + 0.0345568 -0.114526 0.00249904, 0.0356937 -0.112939 0.00249904, 0.0374217 -0.110498 0.00249904, + 0.0374217 -0.110498 0.00128404, 0.0373797 -0.110498 0.000903042, 0.0372537 -0.11062 0.000578042, + 0.0370707 -0.110986 0.000361042, 0.0368497 -0.11123 0.00028504, 0.0366287 -0.111597 0.000361042, + 0.0364457 -0.111841 0.000578042, 0.0363197 -0.111963 0.000903042, 0.0362777 -0.112085 0.00128404, + 0.0362777 -0.112085 0.00249904, 0.0381997 -0.109766 0.00128404, 0.0359077 -0.113062 0.00128404, 0.0376277 -0.11062 0.00128404, + 0.0364797 -0.112207 0.00128404, 0.0361667 -0.112207 -0.00424296, 0.0363847 -0.111963 -0.00464296, + 0.0366667 -0.111475 -0.00490396, 0.0369797 -0.111108 -0.00499996, 0.0372917 -0.11062 -0.00492096, + 0.0375747 -0.110254 -0.00467496, 0.0377997 -0.109888 -0.00428696, 0.0379487 -0.109644 -0.00379496, + 0.0379977 -0.109644 -0.00324996, 0.0379977 -0.109644 -0.00274996, 0.0379217 -0.109766 -0.00207996, + 0.0377037 -0.11001 -0.00151196, 0.0373757 -0.110498 -0.00113296, 0.0369947 -0.111108 -0.00100096, + 0.0369947 -0.111108 -0.00199996, 0.0371587 -0.110864 -0.00205796, 0.0372957 -0.11062 -0.00221996, + 0.0373917 -0.110498 -0.00246396, 0.0374217 -0.110498 -0.00274996, 0.0374217 -0.110498 -0.00324996, + 0.0374027 -0.110498 -0.00348396, 0.0373377 -0.11062 -0.00369396, 0.0372427 -0.110742 -0.00385996, + 0.0371207 -0.110864 -0.00396696, 0.0369867 -0.111108 -0.00399996, 0.0368537 -0.11123 -0.00395896, + 0.0367317 -0.111475 -0.00384696, 0.0366397 -0.111597 -0.00367496, 0.0358387 -0.112695 -0.00164896, + 0.0357017 -0.112939 -0.00137696, 0.0355297 -0.113184 -0.00117296, 0.0351297 -0.113672 -0.00100096, + 0.0345567 -0.114526 -0.00100096, 0.0345567 -0.114526 -0.00499996, 0.0351297 -0.113672 -0.00499996, + 0.0351297 -0.113672 -0.00199996, 0.0352627 -0.11355 -0.00205796, 0.0353197 -0.113428 -0.00212596, + 0.0353657 -0.113428 -0.00221596, 0.0353357 -0.113916 -0.00199996, 0.0355677 -0.11355 -0.00221596, + 0.0353357 -0.113916 -0.00100096, 0.0360407 -0.112817 -0.00164896, 0.0376277 -0.11062 -0.00324996, + 0.0368417 -0.111719 -0.00367496, 0.0371967 -0.11123 -0.00199996, 0.0376277 -0.11062 -0.00274996, + 0.0371967 -0.11123 -0.00100096, 0.0381997 -0.109766 -0.00274996, 0.0381997 -0.109766 -0.00324996, + 0.0363727 -0.112329 -0.00424296, 0.0353657 -0.113428 0.00829904, 0.0361667 -0.112207 0.00627204, + 0.0363848 -0.111963 0.00587104, 0.0366668 -0.111475 0.00561004, 0.0369797 -0.111108 0.00551504, 0.0372918 -0.11062 0.00559304, + 0.0375747 -0.110254 0.00583904, 0.0377997 -0.109888 0.00622804, 0.0379487 -0.109644 0.00671804, + 0.0379977 -0.109644 0.00726604, 0.0379977 -0.109644 0.00776504, 0.0379217 -0.109766 0.00843504, 0.0377037 -0.11001 0.00900104, + 0.0373758 -0.110498 0.00938104, 0.0369948 -0.111108 0.00951404, 0.0369948 -0.111108 0.00851504, + 0.0371587 -0.110864 0.00845804, 0.0372958 -0.11062 0.00829604, 0.0373918 -0.110498 0.00805104, 0.0374218 -0.110498 0.00776504, + 0.0374218 -0.110498 0.00726604, 0.0374027 -0.110498 0.00703104, 0.0373378 -0.11062 0.00681904, 0.0372428 -0.110742 0.00665304, + 0.0371208 -0.110864 0.00654804, 0.0369867 -0.111108 0.00651404, 0.0368537 -0.11123 0.00655604, 0.0367317 -0.111475 0.00666704, + 0.0366398 -0.111597 0.00683804, 0.0358387 -0.112695 0.00886604, 0.0355298 -0.113184 0.00934304, + 0.0353357 -0.113428 0.00947004, 0.0351298 -0.113672 0.00951404, 0.0345568 -0.114526 0.00951404, + 0.0345568 -0.114526 0.00551504, 0.0351298 -0.113672 0.00551504, 0.0351298 -0.113672 0.00851504, + 0.0351977 -0.113672 0.00850004, 0.0352627 -0.11355 0.00845804, 0.0353357 -0.113916 0.00851504, 0.0355677 -0.11355 0.00829904, + 0.0353357 -0.113916 0.00951404, 0.0360407 -0.112817 0.00886604, 0.0376277 -0.11062 0.00726604, 0.0368418 -0.111719 0.00683804, + 0.0371968 -0.11123 0.00851504, 0.0376277 -0.11062 0.00776504, 0.0371968 -0.11123 0.00951404, 0.0381997 -0.109766 0.00776504, + 0.0381997 -0.109766 0.00726604, 0.0363728 -0.112329 0.00627204, 0.0345567 -0.114526 -0.00699996, + 0.0345567 -0.114526 -0.00921596, 0.0346107 -0.114404 -0.00982996, 0.0347707 -0.11416 -0.010385, 0.0350227 -0.113916 -0.010827, + 0.0353387 -0.113428 -0.011113, 0.0356897 -0.112939 -0.011216, 0.0360447 -0.112451 -0.011124, 0.0363657 -0.111963 -0.010849, + 0.0366207 -0.111597 -0.010416, 0.0368267 -0.11123 -0.010616, 0.0370597 -0.110986 -0.010709, 0.0372957 -0.11062 -0.010689, + 0.0375207 -0.110254 -0.010557, 0.0377157 -0.11001 -0.010323, 0.0378677 -0.109766 -0.010004, 0.0379637 -0.109644 -0.00962496, + 0.0379977 -0.109644 -0.00921596, 0.0379977 -0.109644 -0.00699996, 0.0374217 -0.110498 -0.00799996, + 0.0374217 -0.110498 -0.00921596, 0.0374027 -0.110498 -0.00940696, 0.0373377 -0.11062 -0.00956896, + 0.0372467 -0.110742 -0.00967696, 0.0371357 -0.110864 -0.00971596, 0.0370247 -0.110986 -0.00967696, + 0.0369337 -0.111108 -0.00956896, 0.0368727 -0.11123 -0.00940696, 0.0368497 -0.11123 -0.00921596, + 0.0368497 -0.11123 -0.00799996, 0.0362777 -0.112085 -0.00799996, 0.0362777 -0.112085 -0.00921596, + 0.0362317 -0.112085 -0.00959796, 0.0361097 -0.112329 -0.00992296, 0.0359227 -0.112573 -0.010139, + 0.0357017 -0.112939 -0.010215, 0.0354837 -0.113184 -0.010139, 0.0352967 -0.113428 -0.00992296, + 0.0351717 -0.113672 -0.00959796, 0.0351297 -0.113672 -0.00921596, 0.0351297 -0.113672 -0.00799996, + 0.0381997 -0.109766 -0.00921596, 0.0368267 -0.111719 -0.010416, 0.0347597 -0.114648 -0.00921596, + 0.0376277 -0.11062 -0.00921596, 0.0370557 -0.111353 -0.00921596, 0.0364797 -0.112207 -0.00921596, + 0.0353357 -0.113916 -0.00921596, 0.0345568 -0.114526 0.014, 0.0345568 -0.114526 0.011784, 0.0346108 -0.114404 0.01117, + 0.0347707 -0.11416 0.010615, 0.0350228 -0.113916 0.010172, 0.0353388 -0.113428 0.00988804, 0.0356897 -0.112939 0.00978504, + 0.0360448 -0.112451 0.00987504, 0.0363658 -0.111963 0.010151, 0.0366208 -0.111597 0.010584, 0.0368268 -0.11123 0.010384, + 0.0370598 -0.110986 0.010291, 0.0372958 -0.11062 0.010312, 0.0375208 -0.110254 0.010443, 0.0377158 -0.11001 0.010678, + 0.0378678 -0.109766 0.010996, 0.0379638 -0.109644 0.011374, 0.0379977 -0.109644 0.011784, 0.0379977 -0.109644 0.014, + 0.0362777 -0.112085 0.013001, 0.0362777 -0.112085 0.011784, 0.0362317 -0.112085 0.011403, 0.0361097 -0.112329 0.011078, + 0.0359228 -0.112573 0.010861, 0.0357018 -0.112939 0.010785, 0.0354838 -0.113184 0.010861, 0.0352967 -0.113428 0.011078, + 0.0351718 -0.113672 0.011403, 0.0351298 -0.113672 0.011784, 0.0351298 -0.113672 0.013001, 0.0374218 -0.110498 0.011784, + 0.0374027 -0.110498 0.011593, 0.0373378 -0.11062 0.011431, 0.0372467 -0.110742 0.011322, 0.0371358 -0.110864 0.011284, + 0.0370248 -0.110986 0.011322, 0.0369337 -0.111108 0.011431, 0.0368728 -0.11123 0.011593, 0.0368498 -0.11123 0.011784, + 0.0368498 -0.11123 0.013001, 0.0374218 -0.110498 0.013001, 0.0381997 -0.109766 0.011784, 0.0368268 -0.111719 0.010584, + 0.0347597 -0.114648 0.011784, 0.0364797 -0.112207 0.011784, 0.0353357 -0.113916 0.011784, 0.0376277 -0.11062 0.011784, + 0.0370557 -0.111353 0.011784, 0.0371857 -0.110742 -0.013, 0.0345567 -0.114526 -0.013, 0.0345567 -0.114526 -0.014, + 0.0379977 -0.109644 -0.014, 0.0379977 -0.109644 -0.013, 0.0371857 -0.110742 -0.011586, 0.0367807 -0.111353 -0.012293, + -0.0372663 -0.06521 5.97036e-008, -0.0369453 -0.0639891 0.00614006, -0.0363883 -0.060815 0.0118091, + -0.0359883 -0.058252 0.0146911, -0.0351373 -0.058496 0.0134741, -0.0343593 -0.05874 0.0122111, -0.0340043 -0.057886 0.0130541, + -0.0336343 -0.056909 0.0138671, -0.0304013 -0.05813 0.00724606, -0.0295663 -0.0583741 0.00366306, + -0.0292843 -0.058496 5.81605e-008, -0.0332763 -0.061914 5.89296e-008, -0.0343593 -0.05874 -0.0122099, + -0.0351373 -0.058496 -0.0134729, -0.0359883 -0.058252 -0.0146899, -0.0363883 -0.060815 -0.0118099, + -0.0369453 -0.0639891 -0.00613894, -0.0304013 -0.05813 -0.00724594, -0.0317693 -0.057642 -0.0106699, + -0.0336343 -0.056909 -0.0138679, -0.0340043 -0.057886 -0.0130529, 0.0464587 -0.086084 0.013001, 0.0438957 -0.093164 0.013001, + 0.0413277 -0.100122 0.013001, 0.0412097 -0.100122 0.013649, 0.0408628 -0.1 0.014203, 0.0403438 -0.0998781 0.014569, + 0.0397337 -0.099634 0.014698, 0.0391198 -0.09939 0.014569, 0.0386047 -0.099146 0.014203, 0.0382577 -0.099023 0.013649, + 0.0381357 -0.099023 0.013001, 0.0406987 -0.091943 0.013001, 0.0432657 -0.0848631 0.013001, 0.0433877 -0.084985 0.013649, + 0.0437317 -0.085107 0.014203, 0.0442497 -0.085229 0.014569, 0.0448607 -0.085474 0.014698, 0.0454747 -0.085718 0.014569, + 0.0459937 -0.085962 0.014203, 0.0463367 -0.086084 0.013649, 0.0382577 -0.099023 0.012349, 0.0386047 -0.099146 0.011797, + 0.0391197 -0.09939 0.011429, 0.0397337 -0.099634 0.0113, 0.0403437 -0.0998781 0.011429, 0.0408627 -0.1 0.011797, + 0.0412097 -0.100122 0.012349, 0.0463367 -0.086084 0.012349, 0.0459937 -0.085962 0.011797, 0.0454747 -0.085718 0.011429, + 0.0448607 -0.085474 0.0113, 0.0442497 -0.085229 0.011429, 0.0437317 -0.085107 0.011797, 0.0433877 -0.084985 0.012349, + 0.0403627 -0.100366 0.013001, 0.0393977 -0.100488 0.013001, 0.0387647 -0.099756 0.013001, 0.00191875 -0.069849 0.0594981, + -0.000646246 -0.076929 0.0594981, -0.00321124 -0.0840091 0.0594981, -0.00333324 -0.083887 0.0601471, + -0.00368024 -0.083765 0.0607041, -0.00419824 -0.0836431 0.0610701, -0.00480924 -0.083398 0.0612001, + -0.00542024 -0.0831541 0.0610701, -0.00593924 -0.0829101 0.0607041, -0.00628524 -0.0829101 0.0601471, + -0.00640624 -0.082788 0.0594981, -0.00384125 -0.075708 0.0594981, -0.00127625 -0.06875 0.0594981, + -0.00115525 -0.06875 0.0601471, -0.000808248 -0.068872 0.0607041, -0.000290248 -0.069116 0.0610701, + 0.000320752 -0.0692381 0.0612001, 0.000932752 -0.069482 0.0610701, 0.00145075 -0.0697271 0.0607041, + 0.00179675 -0.069849 0.0601471, -0.00628525 -0.0829101 0.0588501, -0.00593924 -0.0829101 0.0583001, + -0.00542024 -0.0831541 0.0579271, -0.00480925 -0.083398 0.0577971, -0.00419824 -0.0836431 0.0579271, + -0.00368025 -0.083765 0.0583001, -0.00333324 -0.083887 0.0588501, 0.00179675 -0.069849 0.0588501, + 0.00145075 -0.0697271 0.0583001, 0.000932752 -0.069482 0.0579271, 0.000320752 -0.0692381 0.0577971, + -0.000290248 -0.069116 0.0579271, -0.000808248 -0.068872 0.0583001, -0.00115525 -0.06875 0.0588501, + -0.00417824 -0.084131 0.0594981, -0.00514524 -0.0842531 0.0594981, -0.00577524 -0.083521 0.0594981, + -0.0206343 -0.0616701 0.00980006, -0.0231993 -0.06875 0.00980006, -0.0257643 -0.075708 0.00980006, + -0.0258873 -0.075708 0.0104511, -0.0262323 -0.0755861 0.0110021, -0.0267513 -0.0753421 0.0113701, + -0.0273613 -0.07522 0.0115001, -0.0279733 -0.074976 0.0113701, -0.0284923 -0.074731 0.0110021, -0.0288373 -0.074609 0.0104511, + -0.0289593 -0.074609 0.00980006, -0.0263943 -0.0675291 0.00980006, -0.0238293 -0.060449 0.00980006, + -0.0237063 -0.0605711 0.0104511, -0.0233613 -0.060693 0.0110021, -0.0228423 -0.060815 0.0113701, + -0.0222323 -0.0610601 0.0115001, -0.0216203 -0.061304 0.0113701, -0.0211013 -0.061548 0.0110021, + -0.0207563 -0.0616701 0.0104511, -0.0288373 -0.074609 0.00915006, -0.0284923 -0.074731 0.00859906, + -0.0279733 -0.074976 0.00822906, -0.0273613 -0.07522 0.00809906, -0.0267513 -0.0753421 0.00822906, + -0.0262323 -0.0755861 0.00859906, -0.0258873 -0.075708 0.00915006, -0.0207563 -0.0616701 0.00915006, + -0.0211013 -0.061548 0.00859906, -0.0216203 -0.061304 0.00822906, -0.0222323 -0.0610601 0.00809906, + -0.0228423 -0.060815 0.00822906, -0.0233613 -0.060693 0.00859906, -0.0237063 -0.0605711 0.00915006, + -0.0267313 -0.0759521 0.00980006, -0.0276973 -0.076074 0.00980006, -0.0283283 -0.0753421 0.00980006, + -0.0321583 -0.05752 0.0557901, -0.0282883 -0.058862 0.0580941, -0.0242752 -0.0603271 0.0600931, + -0.0158992 -0.0633791 0.0631601, -0.0146962 -0.063867 0.0634121, -0.0134732 -0.0642331 0.0635041, + 0.0256898 -0.078516 0.063504, 0.0258578 -0.0786381 0.063481, 0.0260198 -0.0786381 0.063435, 0.0263078 -0.07876 0.063252, + 0.0462798 -0.085962 0.044621, 0.0464098 -0.086084 0.044468, 0.0465088 -0.086084 0.044293, 0.0465998 -0.086084 0.043896, + 0.0477747 -0.086572 3.91683e-008, 0.0465997 -0.086084 -0.043897, 0.0465737 -0.086084 -0.044101, 0.0465087 -0.086084 -0.044296, + 0.0462797 -0.085962 -0.044622, 0.0263077 -0.07876 -0.063251, 0.0261727 -0.07876 -0.063358, 0.0260197 -0.0786381 -0.063434, + 0.0256897 -0.078516 -0.063499, -0.0134733 -0.0642331 -0.0634989, -0.0146963 -0.063867 -0.0634149, + -0.0158993 -0.063379 -0.0631589, -0.0242753 -0.0603271 -0.0600919, -0.0282883 -0.058862 -0.0580939, + -0.0321583 -0.05752 -0.0557929, -0.0323413 -0.057397 -0.0556369, -0.0324863 -0.057397 -0.0554419, + -0.0326123 -0.0572751 -0.0549659, -0.0317593 -0.057642 -0.0106479, -0.0303943 -0.05813 -0.00721794, + -0.0295623 -0.0583741 0.00364506, -0.0303943 -0.05813 0.00721806, -0.0326123 -0.0572751 0.0549661, + -0.0325783 -0.0572751 0.0552111, -0.0324863 -0.057397 0.0554391, -0.0241113 -0.060449 0.0565001, + -0.0239683 -0.060449 0.0557371, -0.0235603 -0.0605711 0.0550891, -0.0229513 -0.060815 0.0546541, + -0.0222323 -0.0610601 0.0545011, -0.0215133 -0.061304 0.0546541, -0.0209033 -0.061548 0.0550891, + -0.0204943 -0.0616701 0.0557371, -0.0203512 -0.061792 0.0565001, -0.0204942 -0.0616701 0.0572631, + -0.0209033 -0.061548 0.0579111, -0.0215132 -0.061304 0.0583461, -0.0222322 -0.0610601 0.0584991, + -0.0229512 -0.060815 0.0583461, -0.0235603 -0.0605711 0.0579111, -0.0239682 -0.060449 0.0572631, + -0.0241113 -0.060449 -0.0569989, -0.0239683 -0.060449 -0.0577659, -0.0235603 -0.0605711 -0.0584139, + -0.0229513 -0.060815 -0.0588489, -0.0222323 -0.0610601 -0.0590009, -0.0215133 -0.061304 -0.0588489, + -0.0209033 -0.061548 -0.0584139, -0.0204943 -0.0616701 -0.0577659, -0.0203513 -0.061792 -0.0569989, + -0.0203513 -0.061792 -0.0559989, -0.0204943 -0.0616701 -0.0552359, -0.0209033 -0.061548 -0.0545839, + -0.0215133 -0.061304 -0.0541529, -0.0222323 -0.0610601 -0.0539999, -0.0229513 -0.060815 -0.0541529, + -0.0235603 -0.0605711 -0.0545839, -0.0239683 -0.060449 -0.0552359, -0.0241113 -0.060449 -0.0559989, + 0.0432657 -0.0848631 -0.013, 0.0433877 -0.084985 -0.01365, 0.0437317 -0.085107 -0.014202, 0.0442497 -0.085229 -0.014571, + 0.0448607 -0.085474 -0.0147, 0.0454747 -0.085718 -0.014571, 0.0459937 -0.085962 -0.014202, 0.0463367 -0.086084 -0.01365, + 0.0464587 -0.086084 -0.013, 0.0463367 -0.086084 -0.01235, 0.0459937 -0.085962 -0.011797, 0.0454747 -0.085718 -0.011429, + 0.0448607 -0.085474 -0.0113, 0.0442497 -0.085229 -0.011429, 0.0437317 -0.085107 -0.011797, 0.0433877 -0.084985 -0.01235, + 0.00191872 -0.069849 -0.0595009, 0.00179672 -0.069849 -0.0588489, 0.00145073 -0.0697271 -0.0582999, + 0.000932725 -0.069482 -0.0579299, 0.000320725 -0.0692381 -0.0577999, -0.000290275 -0.069116 -0.0579299, + -0.000808275 -0.068872 -0.0582999, -0.00115528 -0.06875 -0.0588489, -0.00127628 -0.06875 -0.0595009, + -0.00115528 -0.06875 -0.0601499, -0.000808276 -0.068872 -0.0607029, -0.000290276 -0.069116 -0.0610689, + 0.000320724 -0.0692381 -0.0611989, 0.000932724 -0.069482 -0.0610689, 0.00145072 -0.0697271 -0.0607029, + 0.00179672 -0.069849 -0.0601499, -0.0238293 -0.060449 -0.00979994, -0.0237063 -0.0605711 -0.0104509, + -0.0233613 -0.060693 -0.0110019, -0.0228423 -0.060815 -0.0113699, -0.0222323 -0.0610601 -0.0114999, + -0.0216203 -0.061304 -0.0113699, -0.0211013 -0.061548 -0.0110019, -0.0207563 -0.0616701 -0.0104509, + -0.0206343 -0.0616701 -0.00979994, -0.0207563 -0.0616701 -0.00914894, -0.0211013 -0.061548 -0.00859694, + -0.0216203 -0.061304 -0.00822994, -0.0222323 -0.0610601 -0.00809994, -0.0228423 -0.060815 -0.00822994, + -0.0233613 -0.060693 -0.00859694, -0.0237063 -0.0605711 -0.00914894, 0.0406987 -0.091943 -0.013, 0.0381357 -0.099023 -0.013, + 0.0382577 -0.099023 -0.01365, 0.0386047 -0.099146 -0.014202, 0.0391197 -0.09939 -0.014571, 0.0397337 -0.099634 -0.0147, + 0.0403437 -0.0998781 -0.014571, 0.0408627 -0.1 -0.014202, 0.0412097 -0.100122 -0.01365, 0.0413277 -0.100122 -0.013, + 0.0438957 -0.093164 -0.013, 0.0412097 -0.100122 -0.01235, 0.0408627 -0.1 -0.011797, 0.0403437 -0.0998781 -0.011429, + 0.0397337 -0.099634 -0.0113, 0.0391197 -0.09939 -0.011429, 0.0386047 -0.099146 -0.011797, 0.0382577 -0.099023 -0.01235, + 0.0387647 -0.099756 -0.013, 0.0393977 -0.100488 -0.013, 0.0403627 -0.100366 -0.013, -0.00384127 -0.075708 -0.0595009, + -0.00640627 -0.082788 -0.0595009, -0.00628527 -0.0829101 -0.0601499, -0.00593927 -0.0829101 -0.0607029, + -0.00542027 -0.0831541 -0.0610689, -0.00480927 -0.083398 -0.0611989, -0.00419827 -0.0836431 -0.0610689, + -0.00368027 -0.083765 -0.0607029, -0.00333327 -0.083887 -0.0601499, -0.00321127 -0.0840091 -0.0595009, + -0.000646274 -0.076929 -0.0595009, -0.00333327 -0.083887 -0.0588489, -0.00368027 -0.083765 -0.0582999, + -0.00419827 -0.0836431 -0.0579299, -0.00480927 -0.083398 -0.0577999, -0.00542027 -0.0831541 -0.0579299, + -0.00593927 -0.0829101 -0.0582999, -0.00628527 -0.0829101 -0.0588489, -0.00577527 -0.083521 -0.0595009, + -0.00514527 -0.0842531 -0.0595009, -0.00417827 -0.084131 -0.0595009, -0.0263943 -0.0675291 -0.00979994, + -0.0289593 -0.074609 -0.00979994, -0.0288373 -0.074609 -0.0104509, -0.0284923 -0.074731 -0.0110019, + -0.0279733 -0.074976 -0.0113699, -0.0273613 -0.07522 -0.0114999, -0.0267513 -0.0753421 -0.0113699, + -0.0262323 -0.0755861 -0.0110019, -0.0258873 -0.075708 -0.0104509, -0.0257643 -0.075708 -0.00979994, + -0.0231993 -0.06875 -0.00979994, -0.0258873 -0.075708 -0.00914894, -0.0262323 -0.0755861 -0.00859694, + -0.0267513 -0.0753421 -0.00822994, -0.0273613 -0.07522 -0.00809994, -0.0279733 -0.074976 -0.00822994, + -0.0284923 -0.074731 -0.00859694, -0.0288373 -0.074609 -0.00914894, -0.0283283 -0.0753421 -0.00979994, + -0.0276973 -0.076074 -0.00979994, -0.0267313 -0.0759521 -0.00979994, -0.0217212 -0.0655761 0.0565001, + -0.0230883 -0.0692381 0.0565001, -0.0232322 -0.0692381 0.0572631, -0.0236382 -0.069116 0.0579111, + -0.0242482 -0.068872 0.0583461, -0.0249672 -0.0686281 0.0584991, -0.0256862 -0.0683841 0.0583461, + -0.0262972 -0.06814 0.0579111, -0.0267032 -0.0680181 0.0572631, -0.0268482 -0.067896 0.0565001, + -0.0254782 -0.064111 0.0565001, -0.0267032 -0.0680181 0.0557371, -0.0262972 -0.06814 0.0550891, + -0.0256862 -0.0683841 0.0546541, -0.0249672 -0.0686281 0.0545011, -0.0242482 -0.068872 0.0546541, + -0.0236383 -0.069116 0.0550891, -0.0232322 -0.0692381 0.0557371, -0.0242252 -0.069482 0.0565001, + -0.0253622 -0.0697271 0.0565001, -0.0261042 -0.06875 0.0565001, -0.0220623 -0.066431 -0.0569989, + -0.0220623 -0.066431 -0.0559989, -0.0222053 -0.066431 -0.0552359, -0.0226123 -0.066309 -0.0545839, + -0.0232223 -0.066064 -0.0541529, -0.0239413 -0.06582 -0.0539999, -0.0246603 -0.0655761 -0.0541529, + -0.0252703 -0.0653321 -0.0545839, -0.0256793 -0.06521 -0.0552359, -0.0258223 -0.065088 -0.0559989, + -0.0258223 -0.065088 -0.0569989, -0.0256793 -0.06521 -0.0577659, -0.0252703 -0.0653321 -0.0584139, + -0.0246603 -0.0655761 -0.0588489, -0.0239413 -0.06582 -0.0590009, -0.0232223 -0.066064 -0.0588489, + -0.0226123 -0.066309 -0.0584139, -0.0222053 -0.066431 -0.0577659, -0.0249653 -0.0627691 -0.0569989, + -0.0212083 -0.064111 -0.0569989, -0.0212083 -0.064111 -0.0559989, -0.0249653 -0.0627691 -0.0559989, + 0.0398027 -0.130029 -0.038999, 0.0395047 -0.131494 -0.039304, 0.0392337 -0.132715 -0.040172, 0.0390357 -0.133569 -0.041471, + 0.0389367 -0.133936 -0.043001, 0.0389557 -0.133569 -0.04453, 0.0390887 -0.132715 -0.045827, 0.0393137 -0.131494 -0.046695, + 0.0395997 -0.129907 -0.047, 0.0387797 -0.129785 -0.047, 0.0379637 -0.129663 -0.047, 0.0376697 -0.131128 -0.046695, + 0.0374257 -0.132349 -0.045829, 0.0372577 -0.133203 -0.04453, 0.0372007 -0.133569 -0.043001, 0.0372577 -0.133203 -0.041469, + 0.0374257 -0.132349 -0.040172, 0.0376697 -0.131128 -0.039304, 0.0379637 -0.129663 -0.038999, 0.0388827 -0.129785 -0.038999, + 0.0398977 -0.128442 -0.046695, 0.0401687 -0.127222 -0.045827, 0.0403667 -0.126367 -0.04453, 0.0404657 -0.126001 -0.043001, + 0.0404467 -0.126367 -0.041471, 0.0403137 -0.127222 -0.040172, 0.0400887 -0.128442 -0.039304, 0.0382577 -0.128076 -0.039304, + 0.0385017 -0.126855 -0.040172, 0.0386697 -0.126001 -0.041469, 0.0387267 -0.125757 -0.043001, 0.0386697 -0.126001 -0.04453, + 0.0385017 -0.126855 -0.045829, 0.0382577 -0.128076 -0.046695, 0.0379637 -0.129663 -0.041, 0.0378187 -0.130396 -0.041152, + 0.0376927 -0.131006 -0.041585, 0.0376127 -0.131494 -0.042234, 0.0375817 -0.131616 -0.043001, 0.0376127 -0.131494 -0.043766, + 0.0376927 -0.131006 -0.044414, 0.0378187 -0.130396 -0.044847, 0.0379637 -0.129663 -0.045, 0.0381087 -0.128931 -0.044847, + 0.0382347 -0.128198 -0.044414, 0.0383147 -0.127832 -0.043766, 0.0383447 -0.12771 -0.043001, 0.0383147 -0.127832 -0.042234, + 0.0382347 -0.128198 -0.041585, 0.0381087 -0.128931 -0.041152, 0.0338897 -0.128809 -0.045, 0.0298157 -0.128076 -0.045, + 0.0296707 -0.128809 -0.044847, 0.0295467 -0.129419 -0.044414, 0.0294627 -0.129907 -0.043766, 0.0294337 -0.130029 -0.043001, + 0.0294627 -0.129907 -0.042234, 0.0295467 -0.129419 -0.041585, 0.0296707 -0.128809 -0.041152, 0.0298157 -0.128076 -0.041, + 0.0338897 -0.128809 -0.041, 0.0299627 -0.127344 -0.041152, 0.0300867 -0.126611 -0.041585, 0.0301687 -0.126245 -0.042234, + 0.0301967 -0.126123 -0.043001, 0.0301687 -0.126245 -0.043766, 0.0300867 -0.126611 -0.044414, 0.0299627 -0.127344 -0.044847, + 0.0292487 -0.127954 -0.044, 0.0286827 -0.127832 -0.043001, 0.0292487 -0.127954 -0.041999, 0.0537868 -0.218347 3.19751e-008, + 0.0537568 -0.218835 0.00190203, 0.0537678 -0.220056 0.00329803, 0.0538288 -0.22207 0.00398903, 0.0539168 -0.224084 0.00362403, + 0.0539668 -0.225 0.00304503, 0.0540158 -0.225793 0.00221503, 0.0540618 -0.226282 0.00117503, 0.0540998 -0.226465 3.15452e-008, + 0.0529628 -0.226282 3.18153e-008, 0.0518228 -0.226038 3.20887e-008, 0.0518798 -0.225732 0.00153003, + 0.0520438 -0.224878 0.00282903, 0.0522918 -0.223596 0.00369503, 0.0525858 -0.22207 0.00400003, 0.0528758 -0.220605 0.00369503, + 0.0531228 -0.219324 0.00282903, 0.0532908 -0.218469 0.00153003, 0.0533488 -0.218225 3.20814e-008, + 0.0535698 -0.218164 3.20332e-008, 0.0540618 -0.226282 -0.00117397, 0.0540158 -0.225793 -0.00221397, + 0.0539668 -0.225 -0.00304397, 0.0539168 -0.224084 -0.00362397, 0.0538288 -0.22207 -0.00398897, + 0.0537678 -0.220056 -0.00329697, 0.0537568 -0.218835 -0.00190297, 0.0532908 -0.218469 -0.00153097, + 0.0531228 -0.219324 -0.00282797, 0.0528758 -0.220605 -0.00369597, 0.0525858 -0.22207 -0.00399997, + 0.0522918 -0.223596 -0.00369597, 0.0520438 -0.224878 -0.00282797, 0.0518798 -0.225732 -0.00153097, + 0.0529668 -0.220239 3.20807e-008, 0.0529368 -0.2203 0.000765032, 0.0528528 -0.220667 0.00141403, + 0.0527308 -0.221399 0.00184903, 0.0525858 -0.22207 0.00199903, 0.0524368 -0.222925 0.00184903, 0.0523148 -0.223474 0.00141403, + 0.0522308 -0.223901 0.000765032, 0.0522038 -0.224084 3.2087e-008, 0.0522308 -0.223901 -0.000765968, + 0.0523148 -0.223474 -0.00141497, 0.0524368 -0.222925 -0.00184797, 0.0525858 -0.22207 -0.00199997, + 0.0527308 -0.221399 -0.00184797, 0.0528528 -0.220667 -0.00141497, 0.0529368 -0.2203 -0.000765968, + 0.0481298 -0.223291 3.30606e-008, 0.0440558 -0.222498 3.40343e-008, 0.0440858 -0.222314 0.000765034, + 0.0441668 -0.222009 0.00141403, 0.0442918 -0.221216 0.00184904, 0.0444368 -0.220544 0.00199903, + 0.0445818 -0.219751 0.00184904, 0.0447078 -0.219141 0.00141403, 0.0447878 -0.218652 0.000765034, + 0.0448188 -0.218591 3.40307e-008, 0.0488928 -0.219385 3.3057e-008, 0.0447878 -0.218652 -0.000765966, + 0.0447078 -0.219141 -0.00141497, 0.0445818 -0.219751 -0.00184797, 0.0444368 -0.220544 -0.00199997, + 0.0442918 -0.221216 -0.00184797, 0.0441668 -0.222009 -0.00141497, 0.0440858 -0.222314 -0.000765966, + 0.0436778 -0.221399 3.41698e-008, 0.0433038 -0.2203 3.43044e-008, 0.0440598 -0.219385 3.41705e-008, + 0.0385928 -0.13125 0.039303, 0.0383448 -0.132593 0.040173, 0.0381768 -0.133447 0.04147, 0.0381198 -0.133691 0.043, + 0.0381768 -0.133447 0.044529, 0.0383448 -0.132593 0.045826, 0.0385928 -0.13125 0.046696, 0.0391768 -0.12832 0.046696, + 0.0394248 -0.126978 0.045826, 0.0395888 -0.126123 0.044529, 0.0396458 -0.125879 0.043, 0.0395888 -0.126123 0.04147, + 0.0394248 -0.126978 0.040173, 0.0391768 -0.12832 0.039303, 0.0337448 -0.129541 0.041153, 0.0336188 -0.130273 0.041584, + 0.0335388 -0.13064 0.042233, 0.0335078 -0.130762 0.043, 0.0335388 -0.13064 0.043766, 0.0336188 -0.130273 0.044415, + 0.0337448 -0.129541 0.04485, 0.0340348 -0.128076 0.04485, 0.0341608 -0.127466 0.044415, 0.0342408 -0.126978 0.043766, + 0.0342708 -0.126855 0.043, 0.0342408 -0.126978 0.042233, 0.0341608 -0.127466 0.041584, 0.0340348 -0.128076 0.041153, + 0.0291768 -0.12832 0.042077, 0.0291138 -0.128687 0.042294, 0.0290738 -0.128809 0.042618, 0.0290578 -0.128931 0.043, + 0.0290738 -0.128809 0.043381, 0.0291138 -0.128687 0.043705, 0.0291768 -0.12832 0.043923, 0.0293218 -0.127588 0.043923, + 0.0293848 -0.127222 0.043705, 0.0294268 -0.126978 0.043381, 0.0294398 -0.126978 0.043, 0.0294268 -0.126978 0.042618, + 0.0293848 -0.127222 0.042294, 0.0293218 -0.127588 0.042077, 0.0442158 -0.112085 0.020657, 0.0416717 -0.110376 0.019249, + 0.0399018 -0.109155 0.016617, 0.0371668 -0.12771 0.00401904, 0.0383218 -0.128442 0.00307504, 0.0390968 -0.129053 0.00166604, + 0.0393678 -0.129175 3.92276e-008, 0.0390968 -0.129053 -0.00166496, 0.0383218 -0.128442 -0.00307596, + 0.0371668 -0.12771 -0.00401896, 0.0344388 -0.125757 -0.00401896, 0.0332827 -0.124902 -0.00307596, + 0.0325128 -0.124414 -0.00166496, 0.0322418 -0.12417 4.109e-008, 0.0325128 -0.124414 0.00166604, + 0.0332827 -0.124902 0.00307504, 0.0344388 -0.125757 0.00401904, 0.0365718 -0.12832 0.00378804, 0.0376628 -0.129053 0.00290004, + 0.0383908 -0.129663 0.00156804, 0.0386468 -0.129785 3.93668e-008, 0.0383908 -0.129663 -0.00156896, + 0.0376628 -0.129053 -0.00289896, 0.0365717 -0.12832 -0.00378796, 0.0339998 -0.126489 -0.00378796, + 0.0329127 -0.125757 -0.00289896, 0.0321847 -0.125269 -0.00156896, 0.0319288 -0.125024 4.11245e-008, + 0.0321847 -0.125269 0.00156804, 0.0329127 -0.125757 0.00290004, 0.0339998 -0.126489 0.00378804, + 0.0359648 -0.128931 0.00345304, 0.0369608 -0.129663 0.00264204, 0.0376238 -0.130151 0.00143104, + 0.0378568 -0.130273 3.95273e-008, 0.0376238 -0.130151 -0.00142996, 0.0369608 -0.129663 -0.00264296, + 0.0359647 -0.128931 -0.00345396, 0.0336227 -0.127344 -0.00345396, 0.0326307 -0.126611 -0.00264296, + 0.0319647 -0.126123 -0.00142996, 0.0317327 -0.126001 4.11266e-008, 0.0319647 -0.126123 0.00143104, + 0.0326307 -0.126611 0.00264204, 0.0336228 -0.127344 0.00345304, 0.0320658 -0.134302 0.00311904, + 0.0329628 -0.134912 0.00238704, 0.0335618 -0.1354 0.00129204, 0.0337718 -0.135522 4.02372e-008, 0.0335618 -0.1354 -0.00129096, + 0.0329628 -0.134912 -0.00238596, 0.0320658 -0.134302 -0.00311796, 0.0299508 -0.132837 -0.00311796, + 0.0290548 -0.132227 -0.00238596, 0.0284538 -0.131738 -0.00129096, 0.0282438 -0.131616 4.1683e-008, + 0.0284538 -0.131738 0.00129204, 0.0290548 -0.132227 0.00238704, 0.0299508 -0.132837 0.00311904, + 0.0344388 -0.125757 0.00928204, 0.0332828 -0.124902 0.010224, 0.0325128 -0.124414 0.011635, 0.0322378 -0.12417 0.013298, + 0.0325128 -0.124414 0.014966, 0.0332828 -0.124902 0.016377, 0.0344388 -0.125757 0.017319, 0.0371668 -0.12771 0.017319, + 0.0383218 -0.128442 0.016377, 0.0390968 -0.129053 0.014966, 0.0393678 -0.129175 0.013298, 0.0390968 -0.129053 0.011635, + 0.0383218 -0.128442 0.010224, 0.0371668 -0.12771 0.00928204, 0.0339998 -0.126489 0.00951204, 0.0329128 -0.125757 0.010401, + 0.0321848 -0.125269 0.011731, 0.0319288 -0.125024 0.013298, 0.0321848 -0.125269 0.01487, 0.0329128 -0.125757 0.016198, + 0.0339998 -0.126489 0.017086, 0.0365718 -0.12832 0.017086, 0.0376628 -0.129053 0.016198, 0.0383908 -0.129663 0.01487, + 0.0386468 -0.129785 0.013298, 0.0383908 -0.129663 0.011731, 0.0376628 -0.129053 0.010401, 0.0365718 -0.12832 0.00951204, + 0.0336228 -0.127344 0.00984604, 0.0326308 -0.126611 0.010657, 0.0319648 -0.126123 0.01187, 0.0317328 -0.126001 0.013298, + 0.0319648 -0.126123 0.014729, 0.0326308 -0.126611 0.015942, 0.0336228 -0.127344 0.016755, 0.0359648 -0.128931 0.016755, + 0.0369608 -0.129663 0.015942, 0.0376238 -0.130151 0.014729, 0.0378568 -0.130273 0.013298, 0.0376238 -0.130151 0.01187, + 0.0369608 -0.129663 0.010657, 0.0359648 -0.128931 0.00984604, 0.0299508 -0.132837 0.010182, 0.0290548 -0.132227 0.010914, + 0.0284538 -0.131738 0.012009, 0.0282438 -0.131616 0.013298, 0.0284538 -0.131738 0.014592, 0.0290548 -0.132227 0.015686, + 0.0299508 -0.132837 0.016419, 0.0320658 -0.134302 0.016419, 0.0329628 -0.134912 0.015686, 0.0335618 -0.1354 0.014592, + 0.0337718 -0.135522 0.013298, 0.0335618 -0.1354 0.012009, 0.0329628 -0.134912 0.010914, 0.0320658 -0.134302 0.010182, + 0.0438768 -0.132349 -0.010669, 0.0427167 -0.131494 -0.00972596, 0.0419458 -0.131006 -0.00831596, + 0.0416758 -0.130762 -0.00664996, 0.0419458 -0.131006 -0.00498496, 0.0427167 -0.131494 -0.00357396, + 0.0438768 -0.132349 -0.00263196, 0.0465998 -0.134302 -0.00263196, 0.0477558 -0.135034 -0.00357396, + 0.0485308 -0.135645 -0.00498496, 0.0488008 -0.135767 -0.00664996, 0.0485307 -0.135645 -0.00831596, + 0.0477558 -0.135034 -0.00972596, 0.0465997 -0.134302 -0.010669, 0.0434377 -0.133081 -0.010438, + 0.0423467 -0.132349 -0.00954896, 0.0416178 -0.13186 -0.00821896, 0.0413628 -0.131738 -0.00664996, + 0.0416178 -0.13186 -0.00508096, 0.0423467 -0.132349 -0.00375096, 0.0434378 -0.133081 -0.00286196, + 0.0460088 -0.134912 -0.00286196, 0.0470958 -0.135767 -0.00375096, 0.0478248 -0.136255 -0.00508096, + 0.0480798 -0.136377 -0.00664996, 0.0478248 -0.136255 -0.00821896, 0.0470957 -0.135767 -0.00954896, + 0.0460088 -0.134912 -0.010438, 0.0430558 -0.133936 -0.010103, 0.0420647 -0.133203 -0.00929296, + 0.0414007 -0.132715 -0.00807996, 0.0411678 -0.132593 -0.00664996, 0.0414007 -0.132715 -0.00521996, + 0.0420647 -0.133203 -0.00400696, 0.0430558 -0.133936 -0.00319596, 0.0454028 -0.135522 -0.00319596, + 0.0463938 -0.136255 -0.00400696, 0.0470578 -0.136743 -0.00521996, 0.0472908 -0.136865 -0.00664996, + 0.0470578 -0.136743 -0.00807996, 0.0463938 -0.136255 -0.00929296, 0.0454028 -0.135522 -0.010103, + 0.0346828 -0.146143 -0.00976796, 0.0337868 -0.145532 -0.00903696, 0.0331878 -0.145044 -0.00794196, + 0.0329778 -0.144922 -0.00664996, 0.0331878 -0.145044 -0.00535796, 0.0337868 -0.145532 -0.00426296, + 0.0346828 -0.146143 -0.00353196, 0.0367998 -0.147607 -0.00353196, 0.0376968 -0.148218 -0.00426296, + 0.0382958 -0.148706 -0.00535796, 0.0385058 -0.148828 -0.00664996, 0.0382958 -0.148706 -0.00794196, + 0.0376968 -0.148218 -0.00903696, 0.0367998 -0.147607 -0.00976796, 0.0496558 -0.145532 0.00996804, + 0.0474398 -0.144312 0.00715104, 0.0460278 -0.143579 0.00373304, 0.0545728 -0.175684 0.00421003, + 0.0524668 -0.174585 0.00777903, 0.0493158 -0.172876 0.010163, 0.0455968 -0.170923 0.011, 0.0418818 -0.16897 0.010163, + 0.0387308 -0.167261 0.00777904, 0.0366248 -0.166162 0.00421004, 0.0597688 -0.162256 -0.000527967, + 0.0597038 -0.162256 3.3084e-008, 0.0597688 -0.162256 0.000529034, 0.0601348 -0.1625 0.00184903, 0.0601228 -0.1625 0.00156103, + 0.0600588 -0.1625 0.00128003, 0.0590518 -0.16189 -0.00491297, 0.0572588 -0.160913 -0.00714897, + 0.0549198 -0.159692 -0.00859896, 0.0522878 -0.15835 -0.00909996, 0.0496598 -0.156885 -0.00859896, + 0.0473178 -0.155664 -0.00714896, 0.0455248 -0.154687 -0.00491296, 0.0444788 -0.154199 -0.00213396, + 0.0443498 -0.154077 0.00141404, 0.0454328 -0.154687 0.00474604, 0.0475578 -0.155786 0.00735504, + 0.0504038 -0.157373 0.00884704, 0.0535348 -0.15896 0.00899004, 0.0564798 -0.160547 0.00776503, 0.0587838 -0.161768 0.00535603, + 0.0600588 -0.1625 -0.00127897, 0.0601228 -0.1625 -0.00155997, 0.0601348 -0.1625 -0.00184797, 0.0508348 -0.152856 0.012677, + 0.0442157 -0.112085 -0.020656, 0.0416717 -0.110376 -0.01925, 0.0399017 -0.109155 -0.016617, 0.0344388 -0.125757 -0.00928096, + 0.0332827 -0.124902 -0.010224, 0.0325127 -0.124414 -0.011635, 0.0322377 -0.12417 -0.0133, 0.0325127 -0.124414 -0.014965, + 0.0332827 -0.124902 -0.016376, 0.0344387 -0.125757 -0.017319, 0.0371667 -0.12771 -0.017319, 0.0383217 -0.128442 -0.016376, + 0.0390968 -0.129053 -0.014965, 0.0393678 -0.129175 -0.0133, 0.0390968 -0.129053 -0.011635, 0.0383218 -0.128442 -0.010224, + 0.0371668 -0.12771 -0.00928096, 0.0339998 -0.126489 -0.00951196, 0.0329127 -0.125757 -0.010401, 0.0321847 -0.125269 -0.011731, + 0.0319287 -0.125024 -0.0133, 0.0321847 -0.125269 -0.014869, 0.0329127 -0.125757 -0.016199, 0.0339997 -0.126489 -0.017088, + 0.0365717 -0.12832 -0.017088, 0.0376627 -0.129053 -0.016199, 0.0383908 -0.129663 -0.014869, 0.0386468 -0.129785 -0.0133, + 0.0383908 -0.129663 -0.011731, 0.0376628 -0.129053 -0.010401, 0.0365717 -0.12832 -0.00951196, 0.0336227 -0.127344 -0.00984696, + 0.0326307 -0.126611 -0.010657, 0.0319647 -0.126123 -0.01187, 0.0317327 -0.126001 -0.0133, 0.0319647 -0.126123 -0.01473, + 0.0326307 -0.126611 -0.015943, 0.0336227 -0.127344 -0.016753, 0.0359647 -0.128931 -0.016753, 0.0369608 -0.129663 -0.015943, + 0.0376238 -0.130151 -0.01473, 0.0378568 -0.130273 -0.0133, 0.0376238 -0.130151 -0.01187, 0.0369608 -0.129663 -0.010657, + 0.0359647 -0.128931 -0.00984696, 0.0299508 -0.132837 -0.010182, 0.0290547 -0.132227 -0.010913, 0.0284538 -0.131738 -0.012008, + 0.0282438 -0.131616 -0.0133, 0.0284537 -0.131738 -0.014592, 0.0290547 -0.132227 -0.015687, 0.0299507 -0.132837 -0.016418, + 0.0320657 -0.134302 -0.016418, 0.0329628 -0.134912 -0.015687, 0.0335618 -0.1354 -0.014592, 0.0337717 -0.135522 -0.0133, + 0.0335618 -0.1354 -0.012008, 0.0329628 -0.134912 -0.010913, 0.0320657 -0.134302 -0.010182, 0.0438768 -0.132349 0.010668, + 0.0427168 -0.131494 0.00972604, 0.0419458 -0.131006 0.00831504, 0.0416758 -0.130762 0.00664904, + 0.0419458 -0.131006 0.00498404, 0.0427168 -0.131494 0.00357504, 0.0438768 -0.132349 0.00263104, + 0.0465998 -0.134302 0.00263104, 0.0477558 -0.135034 0.00357504, 0.0485308 -0.135645 0.00498404, + 0.0488008 -0.135767 0.00664904, 0.0485308 -0.135645 0.00831504, 0.0477558 -0.135034 0.00972604, 0.0465998 -0.134302 0.010668, + 0.0434378 -0.133081 0.010437, 0.0423468 -0.132349 0.00954904, 0.0416178 -0.13186 0.00821904, 0.0413628 -0.131738 0.00664904, + 0.0416178 -0.13186 0.00508204, 0.0423468 -0.132349 0.00375004, 0.0434378 -0.133081 0.00286104, 0.0460088 -0.134912 0.00286104, + 0.0470958 -0.135767 0.00375004, 0.0478248 -0.136255 0.00508204, 0.0480798 -0.136377 0.00664904, + 0.0478248 -0.136255 0.00821904, 0.0470958 -0.135767 0.00954904, 0.0460088 -0.134912 0.010437, 0.0430558 -0.133936 0.010104, + 0.0420648 -0.133203 0.00929304, 0.0414008 -0.132715 0.00808004, 0.0411678 -0.132593 0.00664904, + 0.0414008 -0.132715 0.00521904, 0.0420648 -0.133203 0.00400804, 0.0430558 -0.133936 0.00319704, + 0.0454028 -0.135522 0.00319704, 0.0463938 -0.136255 0.00400804, 0.0470578 -0.136743 0.00521904, + 0.0472908 -0.136865 0.00664904, 0.0470578 -0.136743 0.00808004, 0.0463938 -0.136255 0.00929304, 0.0454028 -0.135522 0.010104, + 0.0346828 -0.146143 0.00976804, 0.0337868 -0.145532 0.00903604, 0.0331878 -0.145044 0.00794104, + 0.0329778 -0.144922 0.00664904, 0.0331878 -0.145044 0.00535804, 0.0337868 -0.145532 0.00426304, + 0.0346828 -0.146143 0.00353104, 0.0367998 -0.147607 0.00353104, 0.0376968 -0.148218 0.00426304, + 0.0382958 -0.148706 0.00535804, 0.0385058 -0.148828 0.00664904, 0.0382958 -0.148706 0.00794104, + 0.0376968 -0.148218 0.00903604, 0.0367998 -0.147607 0.00976804, 0.0496558 -0.145532 -0.00996696, + 0.0474398 -0.144312 -0.00715096, 0.0460278 -0.143579 -0.00373196, 0.0545728 -0.175684 -0.00420997, + 0.0524668 -0.174585 -0.00777997, 0.0493158 -0.172876 -0.010163, 0.0455968 -0.170923 -0.011, 0.0418818 -0.16897 -0.010163, + 0.0387308 -0.167261 -0.00777796, 0.0366248 -0.166162 -0.00420896, 0.0508348 -0.152856 -0.012677, + 0.0405647 -0.106348 0.00443504, 0.0406297 -0.106348 0.00439304, 0.0406877 -0.106226 0.00432404, + 0.0407027 -0.106226 0.00540604, 0.0408967 -0.105859 0.00527804, 0.0410647 -0.105615 0.00507204, + 0.0427697 -0.103296 0.00296604, 0.0427057 -0.103296 0.00275504, 0.0426097 -0.103418 0.00258904, + 0.0424877 -0.103662 0.00248404, 0.0423547 -0.103784 0.00244904, 0.0422207 -0.104028 0.00249104, 0.0420987 -0.10415 0.00260204, + 0.0425257 -0.10354 0.00439304, 0.0426637 -0.103418 0.00423104, 0.0427587 -0.103296 0.00398704, 0.0427437 -0.103296 0.00531604, + 0.0430717 -0.102808 0.00493704, 0.0432887 -0.102441 0.00437004, 0.0433157 -0.102441 0.00265404, + 0.0431667 -0.102686 0.00216304, 0.0429417 -0.10293 0.00177404, 0.0426597 -0.103418 0.00152804, 0.0423427 -0.103906 0.00145004, + 0.0420337 -0.104272 0.00154504, 0.0417517 -0.104639 0.00180704, 0.0381157 -0.109888 0.00051904, + 0.0378647 -0.110254 -0.000128959, 0.0374947 -0.110742 -0.000561959, 0.0370557 -0.111353 -0.000714958, + 0.0366167 -0.112085 -0.000561959, 0.0362427 -0.112573 -0.000128959, 0.0359947 -0.112939 0.000519041, + 0.0375857 -0.11062 0.000903042, 0.0374597 -0.110864 0.000578042, 0.0372727 -0.111108 0.000361042, + 0.0370557 -0.111353 0.00028504, 0.0368347 -0.111719 0.000361042, 0.0366477 -0.111963 0.000578042, + 0.0365257 -0.112207 0.000903042, 0.0355217 -0.11355 -0.00212596, 0.0354687 -0.113672 -0.00205796, + 0.0354037 -0.113794 -0.00201396, 0.0359037 -0.113062 -0.00137696, 0.0357317 -0.113306 -0.00117296, + 0.0355417 -0.11355 -0.00104296, 0.0369377 -0.111597 -0.00384696, 0.0370557 -0.111353 -0.00395896, + 0.0371927 -0.11123 -0.00399996, 0.0373267 -0.110986 -0.00396696, 0.0374487 -0.110864 -0.00385996, + 0.0375437 -0.110742 -0.00369396, 0.0376047 -0.11062 -0.00348396, 0.0375937 -0.11062 -0.00246396, + 0.0375017 -0.110742 -0.00221996, 0.0373607 -0.110986 -0.00205796, 0.0381237 -0.109888 -0.00207996, + 0.0379067 -0.110132 -0.00151196, 0.0375817 -0.11062 -0.00113296, 0.0365907 -0.112085 -0.00464296, + 0.0368687 -0.111719 -0.00490396, 0.0371817 -0.11123 -0.00499996, 0.0374947 -0.110742 -0.00492096, + 0.0377807 -0.110376 -0.00467496, 0.0380057 -0.11001 -0.00428696, 0.0381507 -0.109888 -0.00379496, + 0.0354038 -0.113794 0.00850004, 0.0354687 -0.113672 0.00845804, 0.0355217 -0.11355 0.00838904, 0.0355418 -0.11355 0.00947004, + 0.0357318 -0.113306 0.00934304, 0.0359038 -0.113062 0.00913704, 0.0376047 -0.11062 0.00703104, 0.0375438 -0.110742 0.00681904, + 0.0374487 -0.110864 0.00665304, 0.0373267 -0.110986 0.00654804, 0.0371928 -0.11123 0.00651404, 0.0370557 -0.111353 0.00655604, + 0.0369378 -0.111597 0.00666704, 0.0373608 -0.110986 0.00845804, 0.0375017 -0.110742 0.00829604, 0.0375938 -0.11062 0.00805104, + 0.0375817 -0.11062 0.00938104, 0.0379068 -0.110132 0.00900104, 0.0381237 -0.109888 0.00843504, 0.0381508 -0.109888 0.00671804, + 0.0380058 -0.11001 0.00622804, 0.0377808 -0.110376 0.00583904, 0.0374947 -0.110742 0.00559304, 0.0371817 -0.11123 0.00551504, + 0.0368688 -0.111719 0.00561004, 0.0365908 -0.112085 0.00587104, 0.0370327 -0.111475 -0.010616, 0.0372657 -0.111108 -0.010709, + 0.0375017 -0.110742 -0.010689, 0.0377267 -0.110498 -0.010557, 0.0379217 -0.110132 -0.010323, 0.0380737 -0.11001 -0.010004, + 0.0381697 -0.109766 -0.00962496, 0.0348167 -0.114648 -0.00982996, 0.0349767 -0.114404 -0.010385, + 0.0352287 -0.114038 -0.010827, 0.0355447 -0.11355 -0.011113, 0.0358957 -0.113062 -0.011216, 0.0362507 -0.112573 -0.011124, + 0.0365677 -0.112085 -0.010849, 0.0370747 -0.111353 -0.00940696, 0.0371397 -0.11123 -0.00956896, + 0.0372307 -0.111108 -0.00967696, 0.0373417 -0.110986 -0.00971596, 0.0374527 -0.110864 -0.00967696, + 0.0375437 -0.110742 -0.00956896, 0.0376047 -0.11062 -0.00940696, 0.0353777 -0.113794 -0.00959796, + 0.0355027 -0.113672 -0.00992296, 0.0356857 -0.113306 -0.010139, 0.0359077 -0.113062 -0.010215, 0.0361287 -0.112695 -0.010139, + 0.0363117 -0.112451 -0.00992296, 0.0364377 -0.112329 -0.00959796, 0.0370327 -0.111475 0.010384, 0.0372658 -0.111108 0.010291, + 0.0375017 -0.110742 0.010312, 0.0377267 -0.110498 0.010443, 0.0379217 -0.110132 0.010678, 0.0380738 -0.11001 0.010996, + 0.0381697 -0.109766 0.011374, 0.0348167 -0.114648 0.01117, 0.0349768 -0.114404 0.010615, 0.0352288 -0.114038 0.010172, + 0.0355447 -0.11355 0.00988804, 0.0358957 -0.113062 0.00978504, 0.0362508 -0.112573 0.00987504, 0.0365678 -0.112085 0.010151, + 0.0353778 -0.113794 0.011403, 0.0355028 -0.113672 0.011078, 0.0356858 -0.113306 0.010861, 0.0359077 -0.113062 0.010785, + 0.0361288 -0.112695 0.010861, 0.0363117 -0.112451 0.011078, 0.0364377 -0.112329 0.011403, 0.0376047 -0.11062 0.011593, + 0.0375438 -0.110742 0.011431, 0.0374527 -0.110864 0.011322, 0.0373418 -0.110986 0.011284, 0.0372307 -0.111108 0.011322, + 0.0371398 -0.11123 0.011431, 0.0370748 -0.111353 0.011593, -0.0334633 -0.0616701 0.00388806, -0.0340233 -0.0609371 0.00768906, + -0.0349393 -0.059839 0.0113171, -0.0349393 -0.059839 -0.0113169, -0.0340233 -0.0609371 -0.00768894, + -0.0334633 -0.0616701 -0.00388894, 0.0437737 -0.093042 0.013649, 0.0434267 -0.0929201 0.014203, 0.0429077 -0.092798 0.014569, + 0.0422967 -0.092554 0.014698, 0.0416867 -0.0923101 0.014569, 0.0411677 -0.092187 0.014203, 0.0408207 -0.092065 0.013649, + 0.0408207 -0.092065 0.012349, 0.0411677 -0.092187 0.011797, 0.0416867 -0.0923101 0.011429, 0.0422967 -0.092554 0.0113, + 0.0429077 -0.092798 0.011429, 0.0434267 -0.0929201 0.011797, 0.0437737 -0.093042 0.012349, 0.0403018 -0.100366 0.013325, + 0.0401307 -0.100244 0.0136, 0.0398708 -0.100122 0.013787, 0.0395657 -0.1 0.013852, 0.0392568 -0.1 0.013787, + 0.0390007 -0.0998781 0.0136, 0.0388257 -0.099756 0.013325, 0.0388257 -0.099756 0.012673, 0.0390007 -0.0998781 0.012398, + 0.0392567 -0.1 0.012215, 0.0395657 -0.1 0.01215, 0.0398707 -0.100122 0.012215, 0.0401307 -0.100244 0.012398, + 0.0403017 -0.100366 0.012673, -0.000768246 -0.076929 0.0601471, -0.00111425 -0.076807 0.0607041, + -0.00163225 -0.0765621 0.0610701, -0.00224425 -0.076318 0.0612001, -0.00285525 -0.076074 0.0610701, + -0.00337325 -0.0759521 0.0607041, -0.00372025 -0.07583 0.0601471, -0.00372025 -0.07583 0.0588501, + -0.00337325 -0.0759521 0.0583001, -0.00285525 -0.076074 0.0579271, -0.00224425 -0.076318 0.0577971, + -0.00163225 -0.0765621 0.0579271, -0.00111425 -0.076807 0.0583001, -0.000768246 -0.076929 0.0588501, + -0.00423924 -0.084131 0.059826, -0.00441224 -0.0840091 0.0601011, -0.00467124 -0.0840091 0.0602841, + -0.00497724 -0.083887 0.0603531, -0.00528224 -0.083765 0.0602841, -0.00554224 -0.0836431 0.0601011, + -0.00571524 -0.083521 0.059826, -0.00571524 -0.083521 0.0591781, -0.00554224 -0.0836431 0.0588961, + -0.00528225 -0.083765 0.0587121, -0.00497724 -0.083887 0.0586511, -0.00467124 -0.0840091 0.0587121, + -0.00441225 -0.0840091 0.0588961, -0.00423924 -0.084131 0.0591781, -0.0233213 -0.0686281 0.0104511, + -0.0236663 -0.068506 0.0110021, -0.0241853 -0.0683841 0.0113701, -0.0247973 -0.06814 0.0115001, + -0.0254083 -0.067896 0.0113701, -0.0259273 -0.067773 0.0110021, -0.0262723 -0.0675291 0.0104511, + -0.0262723 -0.0675291 0.00915006, -0.0259273 -0.067773 0.00859906, -0.0254083 -0.067896 0.00822906, + -0.0247973 -0.06814 0.00809906, -0.0241853 -0.0683841 0.00822906, -0.0236663 -0.068506 0.00859906, + -0.0233213 -0.0686281 0.00915006, -0.0267913 -0.0759521 0.0101251, -0.0269643 -0.07583 0.0104011, + -0.0272243 -0.075708 0.0105861, -0.0275293 -0.0755861 0.0106491, -0.0278363 -0.0755861 0.0105861, + -0.0280953 -0.075464 0.0104011, -0.0282673 -0.0753421 0.0101251, -0.0282673 -0.0753421 0.00947406, + -0.0280953 -0.075464 0.00920006, -0.0278363 -0.0755861 0.00901506, -0.0275293 -0.0755861 0.00895006, + -0.0272243 -0.075708 0.00901506, -0.0269643 -0.07583 0.00920006, -0.0267913 -0.0759521 0.00947406, + 0.0437737 -0.093042 -0.01365, 0.0434267 -0.0929201 -0.014202, 0.0429077 -0.092798 -0.014571, 0.0422967 -0.092554 -0.0147, + 0.0416867 -0.0923101 -0.014571, 0.0411677 -0.092187 -0.014202, 0.0408207 -0.092065 -0.01365, 0.0408207 -0.092065 -0.01235, + 0.0411677 -0.092187 -0.011797, 0.0416867 -0.0923101 -0.011429, 0.0422967 -0.092554 -0.0113, 0.0429077 -0.092798 -0.011429, + 0.0434267 -0.0929201 -0.011797, 0.0437737 -0.093042 -0.01235, 0.0403017 -0.100366 -0.013325, 0.0401307 -0.100244 -0.013601, + 0.0398707 -0.100122 -0.013785, 0.0395657 -0.1 -0.01385, 0.0392567 -0.1 -0.013785, 0.0390007 -0.0998781 -0.013601, + 0.0388257 -0.099756 -0.013325, 0.0388257 -0.099756 -0.012675, 0.0390007 -0.0998781 -0.012399, 0.0392567 -0.1 -0.012215, + 0.0395657 -0.1 -0.01215, 0.0398707 -0.100122 -0.012215, 0.0401307 -0.100244 -0.012399, 0.0403017 -0.100366 -0.012675, + -0.000768274 -0.076929 -0.0601499, -0.00111427 -0.076807 -0.0607029, -0.00163227 -0.076562 -0.0610689, + -0.00224427 -0.076318 -0.0611989, -0.00285527 -0.076074 -0.0610689, -0.00337327 -0.0759521 -0.0607029, + -0.00372027 -0.07583 -0.0601499, -0.00372027 -0.07583 -0.0588489, -0.00337327 -0.0759521 -0.0582999, + -0.00285527 -0.076074 -0.0579299, -0.00224427 -0.076318 -0.0577999, -0.00163227 -0.076562 -0.0579299, + -0.00111427 -0.076807 -0.0582999, -0.000768273 -0.076929 -0.0588489, -0.00423927 -0.084131 -0.0598249, + -0.00441227 -0.0840091 -0.0600999, -0.00467127 -0.0840091 -0.0602869, -0.00497727 -0.083887 -0.0603519, + -0.00528227 -0.083765 -0.0602869, -0.00554227 -0.0836431 -0.0600999, -0.00571527 -0.083521 -0.0598249, + -0.00571527 -0.083521 -0.0591729, -0.00554227 -0.0836431 -0.0588979, -0.00528227 -0.083765 -0.0587149, + -0.00497727 -0.083887 -0.0586509, -0.00467127 -0.0840091 -0.0587149, -0.00441227 -0.0840091 -0.0588979, + -0.00423927 -0.084131 -0.0591729, -0.0233213 -0.0686281 -0.0104509, -0.0236663 -0.068506 -0.0110019, + -0.0241853 -0.0683841 -0.0113699, -0.0247973 -0.06814 -0.0114999, -0.0254083 -0.067896 -0.0113699, + -0.0259273 -0.067773 -0.0110019, -0.0262723 -0.0675291 -0.0104509, -0.0262723 -0.0675291 -0.00914894, + -0.0259273 -0.067773 -0.00859694, -0.0254083 -0.067896 -0.00822994, -0.0247973 -0.06814 -0.00809994, + -0.0241853 -0.0683841 -0.00822994, -0.0236663 -0.068506 -0.00859694, -0.0233213 -0.0686281 -0.00914894, + -0.0267913 -0.0759521 -0.0101259, -0.0269643 -0.07583 -0.0104009, -0.0272243 -0.075708 -0.0105849, + -0.0275293 -0.0755861 -0.0106499, -0.0278363 -0.0755861 -0.0105849, -0.0280953 -0.075464 -0.0104009, + -0.0282673 -0.0753421 -0.0101259, -0.0282673 -0.0753421 -0.00947394, -0.0280953 -0.075464 -0.00919894, + -0.0278363 -0.0755861 -0.00901494, -0.0275293 -0.0755861 -0.00894994, -0.0272243 -0.075708 -0.00901494, + -0.0269643 -0.07583 -0.00919894, -0.0267913 -0.0759521 -0.00947394, -0.0218643 -0.065454 0.0572631, + -0.0222702 -0.0653321 0.0579111, -0.0228812 -0.065088 0.0583461, -0.0236003 -0.064844 0.0584991, -0.0243193 -0.0646 0.0583461, + -0.0249292 -0.064355 0.0579111, -0.0253353 -0.0642331 0.0572631, -0.0253353 -0.0642331 0.0557371, + -0.0249292 -0.064355 0.0550891, -0.0243193 -0.0646 0.0546541, -0.0236003 -0.064844 0.0545011, -0.0228812 -0.065088 0.0546541, + -0.0222702 -0.0653321 0.0550891, -0.0218643 -0.065454 0.0557371, -0.0242982 -0.069482 0.0568811, + -0.0245002 -0.06936 0.0572091, -0.0248052 -0.0692381 0.0574231, -0.0251662 -0.069116 0.0574991, + -0.0255242 -0.0689941 0.0574231, -0.0258292 -0.068872 0.0572091, -0.0260332 -0.068872 0.0568811, + -0.0260332 -0.068872 0.0561181, -0.0258292 -0.068872 0.0557901, -0.0255242 -0.0689941 0.0555771, + -0.0251662 -0.069116 0.0555001, -0.0248052 -0.0692381 0.0555771, -0.0245002 -0.06936 0.0557901, + -0.0242982 -0.069482 0.0561181, -0.0248223 -0.0627691 -0.0577659, -0.0244163 -0.062891 -0.0584139, + -0.0238063 -0.063135 -0.0588489, -0.0230873 -0.063379 -0.0590009, -0.0223673 -0.063745 -0.0588489, + -0.0217573 -0.063867 -0.0584139, -0.0213513 -0.064111 -0.0577659, -0.0213513 -0.064111 -0.0552359, + -0.0217573 -0.063867 -0.0545839, -0.0223673 -0.063745 -0.0541529, -0.0230873 -0.0633791 -0.0539999, + -0.0238063 -0.063135 -0.0541529, -0.0244163 -0.062891 -0.0545839, -0.0248223 -0.0627691 -0.0552359, + 0.0385927 -0.13125 -0.039304, 0.0383447 -0.132593 -0.040172, 0.0381767 -0.133447 -0.041469, 0.0381197 -0.133691 -0.043001, + 0.0381767 -0.133447 -0.04453, 0.0383447 -0.132593 -0.045829, 0.0385927 -0.13125 -0.046695, 0.0391767 -0.12832 -0.046695, + 0.0394247 -0.126978 -0.045829, 0.0395887 -0.126123 -0.04453, 0.0396457 -0.125879 -0.043001, 0.0395887 -0.126123 -0.041469, + 0.0394247 -0.126978 -0.040172, 0.0391767 -0.12832 -0.039304, 0.0337447 -0.129541 -0.041152, 0.0336187 -0.130273 -0.041585, + 0.0335387 -0.13064 -0.042234, 0.0335077 -0.130762 -0.043001, 0.0335387 -0.13064 -0.043766, 0.0336187 -0.130273 -0.044414, + 0.0337447 -0.129541 -0.044847, 0.0340347 -0.128076 -0.044847, 0.0341607 -0.127466 -0.044414, 0.0342407 -0.126978 -0.043766, + 0.0342707 -0.126855 -0.043001, 0.0342407 -0.126978 -0.042234, 0.0341607 -0.127466 -0.041585, 0.0340347 -0.128076 -0.041152, + 0.0291767 -0.12832 -0.042076, 0.0291137 -0.128687 -0.042293, 0.0290737 -0.128809 -0.042617, 0.0290577 -0.128931 -0.043001, + 0.0290737 -0.128809 -0.043382, 0.0291137 -0.128687 -0.043706, 0.0291767 -0.12832 -0.043924, 0.0293217 -0.127588 -0.043924, + 0.0293847 -0.127222 -0.043706, 0.0294267 -0.126978 -0.043382, 0.0294397 -0.126978 -0.043001, 0.0294267 -0.126978 -0.042617, + 0.0293847 -0.127222 -0.042293, 0.0293217 -0.127588 -0.042076, 0.0530198 -0.225977 0.00153003, 0.0531848 -0.225122 0.00282903, + 0.0534318 -0.22384 0.00369503, 0.0537258 -0.222314 0.00400003, 0.0537258 -0.222314 -0.00399997, + 0.0534318 -0.22384 -0.00369597, 0.0531848 -0.225122 -0.00282797, 0.0530198 -0.225977 -0.00153097, + 0.0481568 -0.22323 0.000765033, 0.0482408 -0.222742 0.00141403, 0.0483668 -0.222131 0.00184903, + 0.0485118 -0.221277 0.00199903, 0.0486558 -0.220483 0.00184903, 0.0487818 -0.219873 0.00141403, + 0.0488618 -0.219507 0.000765033, 0.0488618 -0.219507 -0.000765967, 0.0487818 -0.219873 -0.00141497, + 0.0486558 -0.220483 -0.00184797, 0.0485118 -0.221277 -0.00199997, 0.0483668 -0.222131 -0.00184797, + 0.0482408 -0.222742 -0.00141497, 0.0481568 -0.22323 -0.000765967, 0.0436938 -0.221338 0.000382035, + 0.0437358 -0.221094 0.000706034, 0.0437968 -0.220789 0.000924035, 0.0438688 -0.220361 0.00100003, + 0.0439448 -0.220056 0.000924035, 0.0440058 -0.219751 0.000706034, 0.0440478 -0.219507 0.000382035, + 0.0440478 -0.219507 -0.000382965, 0.0440058 -0.219751 -0.000706964, 0.0439448 -0.220056 -0.000924965, + 0.0438688 -0.220361 -0.00100097, 0.0437968 -0.220789 -0.000924965, 0.0437358 -0.221094 -0.000706964, + 0.0436938 -0.221338 -0.000382965, 0.0362817 -0.112939 -0.013, 0.0418467 -0.105005 0.00652404, 0.0409887 -0.106226 0.00612104, + 0.0401267 -0.107446 0.00345104, 0.0407027 -0.106592 0.00294904, 0.0407027 -0.106592 0.00370104, + 0.0418467 -0.105005 -0.00561196, 0.0418467 -0.105005 -0.00300396, 0.0414427 -0.105615 -0.00819996, + 0.0366857 -0.112329 0.00350004, 0.0355377 -0.114038 -0.00349996, 0.0361747 -0.113062 -0.00323096, + 0.0355377 -0.114038 0.00701404, 0.0518338 -0.153589 0.014016, 0.0523868 -0.153955 0.01537, 0.0522348 -0.153833 0.014897, + 0.0523868 -0.153955 -0.015369, 0.0522348 -0.153833 -0.014898, 0.0518338 -0.153589 -0.014015, 0.0414007 -0.104761 0.00378804, + 0.0402907 -0.106348 0.00294904, 0.0362397 -0.112085 -0.00266196, 0.0351297 -0.113672 -0.00349996, + 0.0357667 -0.112817 -0.00323096, 0.0362398 -0.112085 0.00785304, 0.0351298 -0.113672 0.00701404, + 0.0537718 -0.21853 0.000950033, 0.0537638 -0.218591 0.00142703, 0.0537638 -0.219446 0.00260003, + 0.0537988 -0.221094 0.00364303, 0.0537828 -0.220605 0.00347003, 0.0537988 -0.221094 -0.00364297, + 0.0537828 -0.220605 -0.00347097, 0.0537638 -0.219446 -0.00259897, 0.0537718 -0.21853 -0.000950968, + 0.0537638 -0.218591 -0.00142597] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 4017 + 0.113176 0.646968 0.754071, 0.0671792 0.375022 0.924579, 0.0851803 0.318907 0.943951, 0.0018068 0.00679665 0.999975, + 0.00489851 0.00144594 0.999987, 0.124818 0.692213 0.710818, -0.0054837 0.00478996 0.999974, 0.0827123 0.4362 0.89604, + 0.12367 0.880463 0.457701, 0.207296 0.901318 0.380334, 0.238823 0.969258 0.0591835, 0.190679 0.927831 -0.320579, + 0.208732 0.977972 0.00143524, 0.164251 0.684873 -0.709909, 0.120454 0.747368 -0.6534, 0.11093 0.426979 -0.897432, + 0.171783 0.909331 -0.378957, 0.00699059 -0.00391031 -0.999968, 0.0855133 0.370442 -0.924911, 0.194163 0.731233 0.653911, + 0.173174 0.983377 -0.0545914, 0.201986 0.92429 0.323866, 0.228491 0.860511 -0.455316, -0.00362479 0.0048149 -0.999982, + 0.0445719 0.328455 -0.943467, 0.144758 0.642133 -0.752802, 0.00108721 0.00726761 -0.999973, -0.0693395 -0.332338 -0.940608, + -0.102363 -0.431444 -0.896314, -0.144614 -0.641671 -0.753223, -0.232196 -0.719772 -0.654227, -0.0744896 -0.373322 -0.924706, + -0.0998205 -0.749872 -0.65401, -0.196549 -0.878718 -0.434998, -0.23333 -0.91597 -0.32643, -0.0511965 -0.322391 0.945221, + -0.0783476 -0.401218 0.912626, -0.160214 -0.986469 -0.0347902, -0.18917 -0.980621 0.0509664, -0.14922 -0.642717 0.751431, + -0.241495 -0.858887 0.451657, -0.179568 -0.923179 0.339846, -0.149833 -0.732052 0.664568, -0.125654 -0.94598 -0.298886, + -0.131673 -0.991293 -5.20351e-005, -0.122573 -0.922056 0.367137, -0.111303 -0.648607 0.752942, -0.0996641 -0.375525 0.921438, + 0.981501 -0.191434 0.00298388, 0.982735 -0.185004 0.00239814, 0.983448 -0.181135 0.00451286, 0.981888 -0.189462 0, + 0.980381 -0.197113 0.000140746, 0.980828 -0.194874 -0.000115305, 0.982048 -0.188617 0.00249564, 0.981068 -0.193574 0.00595741, + 0.980942 -0.194075 0.00933816, 0.981263 -0.192673 3.29614e-006, 0.980827 -0.194881 0.000110343, 0.980565 -0.196109 0.00587418, + 0.980189 -0.198064 0.00057048, 0.980532 -0.196238 0.00686756, 0.980024 -0.198881 -5.40782e-007, 0.97983 -0.199645 0.00871595, + 0.981498 -0.191475 3.026e-006, 0.980533 -0.196237 -0.00686807, 0.980943 -0.194073 -0.00933348, 0.981068 -0.193573 -0.0059541, + 0.981403 -0.191958 1.94883e-006, 0.982048 -0.188615 -0.00249557, 0.982735 -0.185004 -0.00239321, + 0.980828 -0.194874 0.000115304, 0.983448 -0.181135 -0.00450299, 0.981501 -0.191435 -0.00297798, 0.980564 -0.19611 -0.00587407, + 0.980827 -0.194881 -0.000110343, 0.97983 -0.199644 -0.00871998, 0.980189 -0.198066 -0.000568271, + 0.98038 -0.197115 -0.000139642, 0.000973032 -0.000145554 1, -0.0139166 -0.0663136 0.997702, 0.0674746 0.321596 0.94447, + 0.0687703 0.361181 0.929956, 0.133663 0.686269 0.714961, 0.0119741 0.0666369 0.997706, 0.0815422 0.422263 0.902798, + 0.128898 0.668591 0.732373, 0.177637 0.901446 0.394765, 0.188442 0.898943 0.395464, 0.204862 0.977273 0.0544862, + 0.194499 0.927841 -0.318246, 0.19112 0.981567 -0.000197392, 0.133285 0.690668 -0.710783, 0.141696 0.743944 -0.653046, + 0.0833736 0.424507 -0.901578, 0.17397 0.918039 -0.356286, 0.0138939 0.0662056 -0.997709, 0.072193 0.362611 -0.92914, + 0.147597 0.741573 0.654435, 0.176772 0.982736 -0.0546034, 0.167818 0.933056 0.318188, 0.167292 0.886176 -0.432094, + 0.124531 0.621075 -0.773794, 0.0583922 0.324881 -0.943951, -0.000961601 0.000221407 -1, -0.0119813 -0.0666445 -0.997705, + -0.0626317 -0.298519 -0.952347, -0.0709691 -0.375206 -0.924221, -0.133889 -0.687803 -0.713443, -0.0814168 -0.424823 -0.901608, + -0.123839 -0.645761 -0.75343, -0.177701 -0.901437 -0.394759, -0.193214 -0.921709 -0.336334, -0.205001 -0.977212 -0.0550529, + -0.197105 -0.939906 0.278795, -0.191147 -0.981561 3.25621e-005, -0.132913 -0.683459 0.717787, -0.13909 -0.725865 0.673627, + -0.0834482 -0.421674 0.9029, -0.17295 -0.910321 0.376038, -0.0746366 -0.372459 0.925043, -0.143693 -0.726051 -0.67246, + -0.176677 -0.982744 0.0547681, -0.170038 -0.945225 -0.278635, -0.168156 -0.886221 0.431666, -0.131263 -0.64963 0.748833, + -0.0537464 -0.298913 0.952766, 0.852597 -0.148222 0.501107, 0.840747 -0.202965 0.501946, 0.880333 -0.0063043 0.474315, + 0.907844 0.156249 0.389109, 0.888123 0.0375931 0.458066, 0.983737 -0.179617 -3.955e-005, 0.924484 0.200911 0.323981, + 0.940786 0.272161 0.202115, 0.946918 0.318078 0.046618, 0.940637 0.298756 0.161078, 0.944324 0.281064 -0.171044, + 0.948247 0.317142 -0.0157941, 0.921445 0.223021 -0.318122, 0.891034 0.0505148 -0.451118, 0.917948 0.18633 -0.350217, + 0.855438 -0.135315 -0.499916, 0.881988 -0.000519734 -0.471271, 0.935278 0.288691 -0.204727, 0.844604 -0.188699 -0.501036, + 0.817746 -0.313309 -0.482834, 0.795269 -0.471511 -0.381083, 0.811343 -0.34946 -0.468614, 0.783262 -0.508309 -0.357944, + 0.748596 -0.624776 -0.221942, 0.740675 -0.671829 0.00680676, 0.759695 -0.635591 -0.13743, 0.734365 -0.67077 0.103805, + 0.738355 -0.674223 0.0159669, 0.781333 -0.523879 0.33922, 0.809121 -0.357709 0.466227, 0.796064 -0.460036 0.393255, + 0.815538 -0.323428 0.479889, 0.761667 -0.626198 0.166554, 0.581703 0.81338 -0.00586024, 0.567917 0.823046 0.00808009, + 0.559099 0.829002 0.0127843, 0.583178 0.812287 -0.00963077, 0.574323 0.818623 -0.00303598, 0.590731 0.806793 -0.0110866, + 0.5653 0.824862 0.00616457, 0.566145 0.824253 0.00934079, 0.571813 0.820362 0.00593472, 0.562711 0.826654 -2.37084e-006, + 0.579982 0.814608 -0.00593547, 0.590433 0.807086 -7.60297e-008, 0.569276 0.822147 1.70464e-006, + 0.582067 0.813141 8.47704e-007, 0.564897 0.825161 1.70464e-006, 0.565946 0.824435 0.00352041, 0.583203 0.812303 -0.00618155, + 0.568322 0.82279 -0.00523045, 0.603059 0.797533 -0.0161709, 0.580776 0.814059 0.00268652, 0.560714 0.828009 6.4273e-007, + 0.560713 0.82801 0, 0.564682 0.825309 0, 0.568425 0.822735 0, 0.576266 0.817253 -0.00394183, 0.57729 0.816525 0.00492749, + 0.571814 0.820362 -0.00594177, 0.579982 0.814608 0.0059318, 0.555568 0.831471 -6.73908e-006, 0.559099 0.829002 -0.0127905, + 0.582069 0.813139 -3.62689e-007, 0.590436 0.807084 -2.90341e-007, 0.567912 0.82305 -0.00809286, 0.581701 0.813382 0.00586024, + 0.590724 0.806797 0.0110811, 0.583182 0.812284 0.00963595, 0.574328 0.818619 0.00304148, 0.565305 0.824859 -0.00615641, + 0.569278 0.822145 -3.982e-007, 0.560714 0.82801 5.33645e-007, 0.564899 0.82516 -2.93351e-007, 0.560712 0.828011 0, + 0.568423 0.822737 1.70504e-006, 0.56468 0.82531 1.70504e-006, 0.576266 0.817253 0.00393921, 0.565947 0.824434 -0.00351755, + 0.566147 0.824251 -0.00933365, 0.583182 0.812318 0.00617285, 0.57729 0.816524 -0.00492471, 0.568321 0.82279 0.00522805, + 0.603009 0.797571 0.0161498, 0.573526 0.819187 5.64793e-006, 0.573522 0.81919 2.48479e-009, 0.254634 0.966811 0.0209316, + 0.565009 0.824981 0.013062, 0.581585 0.81333 -0.0159131, 0.578077 0.815896 -0.0118702, 0.575853 0.817552 0.00164317, + 0.567005 0.823714 -0.00077448, 0.258565 0.965777 0.0204555, 0.581583 0.813332 0.0159115, 0.575324 0.817899 0.00656997, + 0.575851 0.817553 -0.0016451, 0.576096 0.817341 -0.0082135, 0.564699 0.825297 -2.93088e-007, 0.56846 0.822711 -3.97675e-007, + 0.569907 0.821633 -0.0112351, 0.578531 0.815656 -0.00281847, 0.585222 0.810873 -0.00080837, 0.18507 0.98239 0.0256833, + 0.584247 0.811521 0.00940733, 0.58403 0.811732 -0.000299445, 0.586034 0.810286 -1.14013e-007, 0.580067 0.814543 0.0064986, + 0.585468 0.81063 0.0103, 0.575304 0.817925 -0.0048727, 0.560895 0.827887 0, 0.588842 0.80817 -0.0112561, + 0.587559 0.809181 0.000878831, 0.560911 0.827876 -1.45082e-007, 0.575853 0.817552 0.00163665, 0.581582 0.813332 -0.0159174, + 0.575854 0.817551 -0.00164139, 0.581583 0.813331 0.0159158, 0.328455 0.939246 -0.0996739, 0.57853 0.815656 0.00281684, + 0.254654 0.966826 0.0199933, 0.578077 0.815896 0.0118761, 0.565018 0.824975 -0.0130395, 0.567009 0.823711 0.000776024, + 0.585469 0.810629 -0.0102994, 0.587557 0.809182 -0.000879924, 0.588843 0.808169 0.0112564, 0.584032 0.81173 0.000302741, + 0.569907 0.821632 0.0112301, 0.585218 0.810875 0.000809817, 0.578215 0.815881 -0.00245718, 0.584249 0.81152 -0.00940223, + 0.820585 -0.570522 0.033823, 0.818946 -0.573867 -0.00194862, 0.817675 -0.57568 0.000160969, 0.823786 -0.566603 -0.0183875, + 0.830885 -0.556424 0.00463831, 0.821317 -0.570471 0.000465648, 0.818245 -0.574852 -0.00444704, 0.817404 -0.576049 -0.00437566, + 0.813304 -0.581837 -0.00129349, 0.816067 -0.577957 0, 0.815735 -0.578422 0.00220564, 0.82134 -0.570435 0.00208388, + 0.828649 -0.559767 0.00122456, 0.829292 -0.558804 -0.0035574, 0.81681 -0.575873 0.0345137, 0.823247 -0.567683 -0.000361433, + 0.816429 -0.577426 -0.00474598, 0.816732 -0.577017 0, 0.811644 -0.584138 0.00410577, 0.820743 -0.57129 -0.00284331, + 0.806543 -0.590034 -0.0367081, 0.818044 -0.575144 0.00364165, 0.813419 -0.581505 0.0141664, 0.817579 -0.57578 -0.00649205, + 0.825434 -0.562769 0.0441562, 0.810298 -0.578439 -0.0939463, 0.77998 -0.58179 -0.230548, 0.770968 -0.55987 -0.303569, + 0.816579 -0.576951 -0.0180694, 0.804984 -0.593288 0.003271, 0.817559 -0.575453 -0.0212305, 0.81027 -0.583415 -0.0555829, + 0.605492 -0.435479 0.666136, 0.804579 -0.593843 0.00204792, 0.816225 -0.577734 0, 0.828309 -0.560032 0.016416, + 0.845138 -0.531758 -0.0545532, 0.807222 -0.588767 0.0417868, 0.804998 -0.592727 0.0255585, 0.8216 -0.568762 0.038511, + 0.821111 -0.570755 0.003921, 0.812329 -0.583082 0.0117524, 0.833609 -0.541384 -0.109543, 0.811247 -0.584511 -0.015005, + 0.812666 -0.582645 -0.00993948, 0.81734 -0.576117 0.00671156, 0.818301 -0.574683 0.0110823, 0.817004 -0.575966 0.0277094, + 0.817809 -0.575477 -0.00389116, 0.819738 -0.572739 -0.000228015, 0.818635 -0.57431 0.00228003, + 0.817422 -0.576039 -0.000570017, 0.817612 -0.574698 -0.0351174, 0.834273 -0.550352 0.0331981, 0.820101 -0.570776 -0.0405966, + 0.815018 -0.579359 0.0094743, 0.802243 -0.596988 -0.00346663, 0.801329 -0.598077 0.0133049, 0.802349 -0.59669 0.0140351, + 0.820306 -0.571813 0.0113168, 0.817404 -0.576065 0, 0.817568 -0.575832 0.000625797, 0.820767 -0.571236 -0.00551695, + 0.814382 -0.579149 -0.0369802, 0.831411 -0.555583 0.00914698, 0.820214 -0.56798 -0.0681717, 0.816532 -0.565465 0.116294, + 0.821658 -0.569975 -0.00274659, 0.800488 -0.599349 -0.000426529, 0.834456 -0.547384 0.0636744, 0.818247 -0.572605 -0.0509508, + 0.816563 -0.574467 -0.0566855, 0.835592 -0.546969 -0.05109, 0.793047 -0.609148 -0.00400286, 0.834632 -0.550348 -0.0225009, + 0.815918 -0.578162 -0.00275807, 0.820322 -0.571301 -0.026194, 0.82011 -0.57219 0.0043073, 0.820514 -0.571616 -0.00344692, + 0.818588 -0.574377 -0.00240216, 0.799841 -0.576536 -0.166916, 0.815684 -0.578486 -0.00371585, 0.799327 -0.60087 0.00556594, + 0.814702 -0.579841 0.00672157, 0.778864 -0.626878 0.0198791, 0.818681 -0.574216 0.00605451, 0.818947 -0.573801 0.00881987, + 0.816733 -0.577016 -1.13444e-006, 0.816734 -0.577015 -2.26888e-006, 0.548805 -0.206174 0.810127, 0.635468 -0.754135 -0.165714, + 0.718594 -0.691279 -0.0758674, 0.682712 -0.725928 -0.0832659, 0.806975 -0.590558 -0.00563343, 0.818857 -0.573392 -0.0263525, + 0.811539 -0.584146 0.0133152, 0.814216 -0.580469 -0.0103893, 0.817348 -0.576106 0.0066735, 0.819722 -0.57215 0.0264663, + 0.818216 -0.574899 -0.00374003, 0.817212 -0.576197 -0.0126626, 0.776425 -0.629885 -0.0202349, 0.820212 -0.571923 -0.0125181, + 0.81723 -0.576308 -0.0020187, 0.833311 -0.551811 0.0331332, 0.80571 -0.586792 -0.0806616, 0.831899 -0.553204 0.0437091, + 0.818033 -0.575148 -0.0051493, 0.821154 -0.569848 -0.031295, 0.815024 -0.57935 0.0094134, 0.834274 -0.55035 0.0331993, + 0.820128 -0.57075 -0.0404269, 0.830389 -0.556576 -0.0260176, 0.787302 -0.616549 -0.00491211, 0.777062 -0.629311 -0.011978, + 0.820579 -0.57144 0.0103385, 0.812355 -0.582167 0.0340707, 0.845817 -0.531342 0.0476347, 0.774134 -0.628439 0.0760316, + 0.781727 -0.620335 0.0639314, 0.801959 -0.59734 0.00685491, 0.817137 -0.576376 0.00887675, 0.842123 -0.538185 0.0344295, + 0.825243 -0.564569 0.0153371, 0.811256 -0.581325 0.0626512, 0.815684 -0.57835 0.013068, 0.856624 -0.471168 -0.210227, + 0.877636 -0.479294 -0.00566401, 0.858327 -0.509842 -0.0577571, 0.830729 -0.556678 5.35514e-005, 0.815594 -0.578152 0.023388, + 0.83714 -0.54469 -0.0501056, 0.864445 -0.495018 0.0877071, 0.834797 -0.550532 0.00535706, 0.82624 -0.562726 -0.0258319, + 0.837634 -0.540269 -0.0804885, 0.817494 -0.571458 0.0716896, 0.799404 -0.575785 -0.171538, 0.828337 -0.557456 -0.0556736, + 0.810021 -0.584733 -0.0442018, 0.813512 -0.581118 -0.0223745, 0.815304 -0.57899 -0.00702606, 0.825173 -0.564878 0.00178385, + 0.812118 -0.583491 0.00181578, 0.818326 -0.574725 -0.00581209, 0.814452 -0.580226 -0.00239934, 0.823399 -0.567427 0.0063396, + 0.820418 -0.571674 -0.0101623, 0.825025 -0.564818 -0.017747, 0.823803 -0.566816 0.00825826, 0.818375 -0.573039 0.0434519, + 0.813967 -0.580744 0.0139458, 0.817972 -0.575088 -0.0140036, 0.81224 -0.582295 0.0346208, 0.810893 -0.585194 -2.55251e-007, + 0.821725 -0.569884 -1.7512e-007, 0.825 -0.565129 0.00211486, 0.830952 -0.556138 0.0151147, 0.833197 -0.55215 0.0302284, + 0.807309 -0.590117 0.00366111, 0.823682 -0.566784 -0.0174439, 0.865599 -0.492839 -0.0885935, 0.883121 -0.462155 0.0806868, + 0.870171 -0.489825 0.0536085, 0.858084 -0.506604 0.0839258, 0.829702 -0.556372 -0.0452327, 0.827963 -0.560151 -0.0265964, + 0.810741 -0.585319 0.0100062, 0.809265 -0.587215 0.0163772, 0.832373 -0.554213 -0.00158608, 0.85829 -0.509752 -0.0590781, + 0.837533 -0.540221 -0.0818569, 0.855974 -0.470867 -0.213523, 0.81558 -0.578179 0.0231768, 0.817482 -0.571353 0.0726528, + 0.877638 -0.479293 -0.00551469, 0.823395 -0.567433 0.00640434, 0.82578 -0.563963 0.00571506, 0.814942 -0.579522 -0.0047545, + 0.821347 -0.570279 -0.0130489, 0.830781 -0.556599 0.000219105, 0.814775 -0.579588 -0.0148199, 0.823447 -0.567074 -0.0190102, + 0.820597 -0.571419 0.0100357, 0.837313 -0.54447 -0.0496014, 0.800121 -0.575224 -0.170069, 0.864386 -0.495163 0.0874658, + 0.811376 -0.584525 0.000239773, 0.825964 -0.563693 0.00578668, 0.818967 -0.573832 0.0031051, 0.801343 -0.597366 0.0316735, + 0.844866 -0.534795 0.0139949, 0.811459 -0.584087 0.0193797, 0.781727 -0.620335 0.0639316, 0.81048 -0.585767 -0.000350091, + 0.852134 -0.516105 0.0866181, 0.86984 -0.490853 0.0494037, 0.882816 -0.463791 0.0743834, 0.825438 -0.564477 0.00428333, + 0.81024 -0.586098 0, 0.816023 -0.578019 0, 0.812557 -0.582854 -0.00565087, 0.813629 -0.581385 -5.75664e-008, + 0.863978 -0.49385 -0.0982573, 0.82141 -0.569601 -0.0290096, 0.81139 -0.584419 0.0100393, 0.826322 -0.563179 0.00455389, + 0.804672 -0.593476 0.0169967, 0.843428 -0.537231 0.0035714, 0.836715 -0.547489 0.0128069, 0.815915 -0.57812 0.00779083, + 0.807975 -0.589063 -0.0134627, 0.806669 -0.590357 -0.0276346, 0.815779 -0.578326 0.0065235, 0.824585 -0.564611 0.0356886, + 0.823804 -0.566815 -0.00823473, 0.780179 -0.624822 0.0303119, 0.826014 -0.5633 -0.0198467, 0.828111 -0.560485 -0.00941989, + 0.186073 -0.941459 0.281126, 0.8301 -0.557615 0, 0.827468 -0.561472 0.00675727, 0.852957 -0.521976 -0.00238864, + 0.823415 -0.567216 0.0159592, 0.782247 -0.622296 -0.0289469, 0.200394 -0.939708 -0.277114, 0.87319 -0.485751 -0.0398119, + 0.756742 -0.651719 0.0510312, 0.832094 -0.554419 -0.015478, 0.940701 -0.319765 -0.113276, 0.829381 -0.558684 0, + 0.835213 -0.547668 -0.0497893, 0.753862 -0.649528 -0.0990199, 0.659393 -0.691854 -0.294176, 0.942361 -0.313967 0.115676, + -0.753766 -0.625371 -0.201862, -0.817654 -0.486459 -0.307894, -0.673259 -0.640334 -0.369723, 0.816918 -0.576754 0, + 0.875996 -0.480452 -0.0423886, 0.823525 -0.567027 -0.0169222, 0.848263 -0.529085 -0.0227795, 0.940887 -0.319105 -0.113598, + 0.810241 -0.586097 -1.24213e-006, 0.820029 -0.572298 0.00535138, 0.805359 -0.591751 -0.0350422, 0.757333 -0.650892 -0.0527965, + 0.869609 -0.492371 0.0367493, 0.810241 -0.586096 -2.48426e-006, 0.933029 -0.344787 0.102851, 0.873267 -0.485607 -0.0398799, + 0.756667 -0.651792 0.05121, 0.832072 -0.554453 -0.0154066, 0.940702 -0.319761 -0.113278, 0.834888 -0.548113 -0.0503362, + 0.753177 -0.650218 -0.0997003, 0.657124 -0.692979 -0.296593, 0.942217 -0.314477 0.115466, -0.721959 -0.647558 -0.243811, + -0.817658 -0.486454 -0.307892, -0.637299 -0.614029 -0.465637, 0.780296 -0.624682 0.0301931, 0.826064 -0.563224 -0.0199062, + 0.828136 -0.560447 -0.00944967, 0.18869 -0.941262 0.28004, 0.827487 -0.561443 0.00678006, 0.823463 -0.567143 0.0160163, + 0.782358 -0.622161 -0.0288331, 0.203128 -0.939453 -0.275984, -0.211794 0.148173 -0.966017, -0.0894864 0.0631711 -0.993983, + -0.120389 0.0842229 -0.989148, 0.716714 -0.498378 -0.487792, 0.730699 -0.508349 -0.455698, 0.546545 -0.379418 -0.746545, + 0.220009 -0.15389 -0.963283, 0.448325 -0.313432 -0.837117, 0.123119 -0.0866842 -0.988599, -0.0273855 0.0191512 -0.999442, + 0.546102 -0.382816 -0.745134, 0.815446 -0.574274 -0.0725077, 0.801413 -0.55991 -0.210329, 0.804865 -0.566427 -0.177068, + 0.816572 -0.576389 -0.031398, 0.785464 -0.54031 -0.301847, 0.161831 -0.113054 -0.980321, 0.757971 -0.528271 -0.382634, + 0.806393 -0.551908 -0.212435, 0.822573 -0.56092 -0.0934994, 0.82417 -0.552601 -0.123997, 0.431218 0.597701 -0.675873, + 0.491532 0.60413 -0.627235, 0.281161 0.746215 -0.603417, 0.138992 0.716678 -0.683414, 0.0290357 0.878195 -0.47742, + 0.319994 0.557454 -0.766061, 0.0502613 0.705855 -0.706571, -0.047892 0.826572 -0.560789, -0.132499 0.94543 -0.297669, + 0.0655075 0.972247 -0.224598, -0.551224 0.83416 0.018121, -0.0733979 0.978336 0.193575, -0.160125 0.987074 -0.00668146, + -0.0410871 0.854434 0.517933, 0.00626073 0.889485 0.456921, 0.158816 0.773988 0.61296, -0.0809381 0.961502 0.262608, + 0.42132 0.6623 0.619555, 0.167388 0.733583 0.658663, -0.0828506 0.85574 -0.510729, -0.170275 0.954721 -0.243954, + -0.199106 0.909699 0.364423, -0.0525445 0.813884 0.578646, 0.13063 0.642752 0.754855, 0.406918 0.587249 0.699683, + 0.424654 0.537241 0.728726, 0.601674 0.491562 0.629567, 0.628178 0.420011 0.654969, 0.814638 0.272304 0.51207, + 0.666121 0.426413 0.611926, 0.799507 0.309191 0.514965, 0.935818 0.200197 0.290112, 0.943589 0.187548 0.272883, + 0.985758 0.161801 0.0458444, 0.957064 0.180683 -0.226675, 0.986115 0.166062 0.000798984, 0.816502 0.292539 -0.497741, + 0.838611 0.241207 -0.488417, 0.659891 0.394115 -0.639701, 0.942412 0.189067 -0.275886, 0.638749 0.455374 -0.620189, + 0.841449 0.300776 0.448885, 0.984412 0.169866 -0.0455827, 0.956625 0.183955 0.225898, 0.92533 0.217984 -0.310237, + 0.790991 0.344848 -0.505384, 0.588354 0.448105 -0.673083, -0.00318863 -0.00197505 -0.999993, 0.0571992 -0.0346269 -0.997762, + -0.270626 0.173127 -0.946989, -0.321117 0.212062 -0.922992, -0.589796 0.387375 -0.708577, -0.0509751 0.0389673 -0.997939, + -0.35355 0.270018 -0.895596, -0.551413 0.385041 -0.740059, -0.749726 0.522253 -0.406401, -0.737682 0.565305 -0.369128, + -0.792312 0.607265 -0.0589127, -0.755942 0.579347 0.304809, -0.805593 0.592414 -0.00806221, -0.587464 0.387531 0.710427, + -0.622809 0.416294 0.662426, -0.379856 0.232663 0.895309, -0.760513 0.521727 0.38655, -0.0552613 0.0338232 0.997899, + -0.314388 0.22343 0.922626, -0.612909 0.429661 -0.663124, -0.791717 0.520203 -0.32027, -0.745504 0.487411 0.454593, + -0.527914 0.402939 0.747628, -0.26002 0.190362 0.946653, 0.000899992 0.0037126 0.999993, 0.0533897 -0.0409179 0.997735, + 0.271767 -0.172782 0.946726, 0.321165 -0.211797 0.923036, 0.589815 -0.385945 0.709341, 0.356467 -0.271954 0.893852, + 0.560603 -0.39059 0.730181, 0.739816 -0.530864 0.413347, 0.731836 -0.560963 0.386959, 0.831932 -0.550178 0.0720654, + 0.76933 -0.545601 -0.332341, 0.814694 -0.579856 0.00637652, 0.586484 -0.403393 -0.702361, 0.622345 -0.415178 -0.663561, + 0.382241 -0.232709 -0.894281, 0.737978 -0.546186 -0.396319, 0.313485 -0.221664 -0.923359, 0.602824 -0.458136 0.653234, + 0.791975 -0.605968 -0.0746814, 0.749147 -0.57236 0.333442, 0.712561 -0.542521 -0.44489, 0.528761 -0.402175 -0.747441, + 0.259209 -0.189809 -0.946986, 0.479918 0.712273 -0.512197, 0.542282 0.712395 -0.445447, 0.340253 0.813892 -0.470964, + 0.354758 0.823094 -0.443467, 0.21237 0.903949 -0.37118, 0.462088 0.71674 -0.522262, 0.405276 0.8494 -0.338039, + 0.285397 0.903817 -0.318846, 0.100492 0.973442 -0.2057, 0.0773863 0.97232 -0.220466, 0.0104433 0.999589 -0.0266967, + 0.0505525 0.983151 0.175667, 0.00940429 0.999952 0.00277418, 0.226231 0.909787 0.348004, 0.207223 0.920499 0.331271, + 0.307244 0.829917 0.465659, 0.0832496 0.976872 0.196954, 0.463123 0.757348 0.46037, 0.365184 0.839433 0.402484, + 0.201399 0.928961 -0.310596, 0.0086618 0.999599 0.0269739, 0.0436109 0.987554 -0.151113, 0.110525 0.970694 0.213394, + 0.295301 0.905708 0.304121, 0.410756 0.819872 0.398861, 0.503582 0.72167 0.474971, 0.507339 0.651907 0.563582, + 0.632833 0.634279 0.444086, 0.655893 0.584305 0.477905, 0.796451 0.484602 0.361701, 0.669349 0.613253 0.419394, + 0.773611 0.528063 0.350251, 0.870083 0.451948 0.196721, 0.87808 0.441754 0.183927, 0.90141 0.43139 0.036923, + 0.884166 0.439424 -0.158607, 0.901705 0.43235 0.00137591, 0.789731 0.513734 -0.335265, 0.816257 0.461778 -0.34711, + 0.681235 0.568643 -0.461046, 0.877579 0.437305 -0.19652, 0.658428 0.61877 -0.42848, 0.791717 0.544268 0.277411, + 0.900818 0.43263 -0.0368616, 0.884434 0.438294 0.160233, 0.858584 0.47169 -0.200852, 0.757068 0.570023 -0.319252, + 0.619266 0.605217 -0.500222, -7.81186e-006 1.56946e-005 -1, 0.0542197 -0.0378681 -0.997811, -0.263999 0.18436 -0.94674, + -0.315427 0.22028 -0.923029, -0.579073 0.407159 -0.706326, -0.0543758 0.0379768 -0.997798, -0.365493 0.255266 -0.895128, + -0.55215 0.385542 -0.739248, -0.743181 0.522483 -0.417964, -0.74845 0.534883 -0.392075, -0.816206 0.574325 -0.0629214, + -0.771886 0.547203 0.323669, -0.818824 0.57398 0.008637, -0.57399 0.40081 0.714064, -0.615045 0.433185 0.65884, + -0.365705 0.255355 0.895016, -0.755845 0.531931 0.381769, -0.0547326 0.0382262 0.997769, -0.316077 0.220742 0.922696, + -0.608785 0.425183 -0.669776, -0.818293 0.571403 0.0624024, -0.776517 0.542278 -0.320869, -0.730446 0.510153 0.454085, + -0.537111 0.375125 0.755509, -0.264938 0.185057 0.946341, 2.1044e-005 -1.46204e-005 1, 0.0545841 -0.0381014 0.997782, + 0.257736 -0.179986 0.949304, 0.31199 -0.219155 0.924464, 0.573669 -0.405412 0.711719, 0.365963 -0.255455 0.894882, + 0.550155 -0.387897 0.739503, 0.746285 -0.522796 0.411998, 0.761964 -0.53218 0.369046, 0.818241 -0.571476 0.062424, + 0.780015 -0.544783 -0.307878, 0.819841 -0.572592 7.88402e-005, 0.569539 -0.400804 -0.717622, 0.608215 -0.431006 -0.666565, + 0.357264 -0.251973 -0.899373, 0.75658 -0.530293 -0.38259, 0.315695 -0.220407 -0.922907, 0.608609 -0.424916 0.670106, + 0.81825 -0.571478 -0.0622845, 0.776375 -0.542232 0.32129, 0.730214 -0.509906 -0.454734, 0.537286 -0.375044 -0.755424, + 0.264203 -0.184464 -0.946662, 0.549659 0.834161 -0.0452838, 0.528685 0.829074 -0.182014, 0.563186 0.821956 -0.0849108, + 0.549348 0.835557 0.00786329, 0.555459 0.830692 0.0376391, 0.57378 0.818702 -0.0224392, 0.350272 0.92907 0.118905, + 0.440494 0.897756 4.69343e-005, 0.542443 0.84004 -0.00941271, 0.524794 0.851229 2.14584e-006, 0.528989 0.848608 0.00588628, + 0.528981 0.848613 -0.00587984, 0.529093 0.82895 0.18139, 0.563294 0.821903 0.0847088, 0.350488 0.929006 -0.118766, + 0.573741 0.818732 0.0223656, 0.40678 0.587088 0.699899, 0.420908 0.662096 0.620052, 0.60159 0.490609 0.63039, + 0.628118 0.419479 0.655366, 0.814546 0.271976 0.51239, 0.424774 0.537183 0.728698, 0.666012 0.426973 0.611655, + 0.799348 0.309859 0.514811, 0.935348 0.20192 0.290436, 0.943563 0.187563 0.272963, 0.984539 0.168781 0.0468647, + 0.95639 0.18352 -0.227243, 0.986102 0.16614 0.000970097, 0.816493 0.293695 -0.497073, 0.838657 0.243556 -0.487171, + 0.660586 0.397604 -0.636818, 0.942461 0.18754 -0.276759, 0.493027 0.606091 -0.624162, 0.638927 0.45522 -0.620118, + 0.841352 0.301755 0.44841, 0.985563 0.162877 -0.0462364, 0.956946 0.180616 0.227229, 0.92547 0.217165 -0.310395, + 0.79069 0.342447 -0.507484, 0.587734 0.445194 -0.675553, 0.431391 0.597584 -0.675866, 0.317867 0.555211 -0.768571, + 0.2828 0.747856 -0.600613, 0.139243 0.716794 -0.68324, 0.0316254 0.879029 -0.475719, 0.0479641 0.703873 -0.708704, + -0.0472988 0.826636 -0.560746, -0.132602 0.945455 -0.297541, 0.0643222 0.972169 -0.225276, -0.551347 0.834073 0.0184138, + -0.0733865 0.978316 0.193681, -0.160127 0.987075 -0.0065383, -0.0408524 0.854466 0.517898, 0.00624089 0.889481 0.45693, + 0.158155 0.773442 0.61382, -0.0809291 0.961487 0.262667, 0.167283 0.733356 0.658943, -0.0844103 0.855005 -0.511705, + -0.198772 0.909832 0.364275, -0.0515434 0.814157 0.578352, 0.130584 0.642753 0.754862, 0.000900195 0.00371207 0.999993, + -0.0552611 0.0338223 0.997899, 0.271767 -0.172783 0.946725, 0.321165 -0.211798 0.923036, 0.0533895 -0.0409178 0.997735, + 0.356468 -0.271954 0.893852, 0.739779 -0.530838 0.413446, 0.731802 -0.560937 0.38706, 0.831914 -0.550165 0.0723738, + 0.7693 -0.545567 -0.332466, 0.814691 -0.579855 0.00676727, 0.586088 -0.403113 -0.702852, 0.62183 -0.414824 -0.664265, + 0.382554 -0.232898 -0.894098, 0.737838 -0.546092 -0.39671, 0.0575654 -0.0348479 -0.997733, 0.313942 -0.221987 -0.923126, + 0.602823 -0.458136 0.653235, 0.792002 -0.605989 -0.0742283, 0.749098 -0.572323 0.333614, 0.712296 -0.542319 -0.44556, + 0.528491 -0.401971 -0.747741, 0.25985 -0.190248 -0.946723, -0.00320873 -0.00198808 -0.999993, -0.0513022 0.0392185 -0.997913, + -0.271269 0.173565 -0.946725, -0.321589 0.212374 -0.922756, -0.589385 0.387096 -0.709071, -0.353825 0.270233 -0.895423, + -0.551067 0.384805 -0.740439, -0.749517 0.522113 -0.406966, -0.737543 0.565199 -0.369567, -0.792327 0.607281 -0.0585499, + -0.755906 0.579321 0.304949, -0.805598 0.592413 -0.00771593, -0.587465 0.38753 0.710426, -0.622808 0.416294 0.662427, + -0.379857 0.232663 0.895308, -0.760479 0.521696 0.386659, -0.612395 0.429307 -0.663829, -0.791682 0.520187 -0.320383, + -0.745474 0.487384 0.45467, -0.527914 0.40294 0.747627, -0.26002 0.190363 0.946653, 0.503585 0.721668 0.474971, + 0.463127 0.757345 0.460371, 0.655893 0.584304 0.477905, 0.796451 0.484601 0.361701, 0.507341 0.651906 0.563581, + 0.66935 0.613253 0.419394, 0.870064 0.451956 0.196785, 0.878054 0.441773 0.184003, 0.901397 0.431404 0.0370786, + 0.884359 0.438945 -0.158862, 0.901739 0.432279 0.00146295, 0.789736 0.514067 -0.334743, 0.81638 0.461769 -0.346833, + 0.681392 0.569689 -0.459521, 0.877485 0.43763 -0.196212, 0.542374 0.713136 -0.444148, 0.658422 0.61832 -0.429139, + 0.791716 0.544269 0.277411, 0.900679 0.432934 -0.0366721, 0.884412 0.438303 0.160328, 0.858239 0.47248 -0.200469, + 0.757524 0.568455 -0.320962, 0.619151 0.603369 -0.502591, 0.480249 0.712003 -0.512263, 0.461909 0.71618 -0.523189, + 0.34144 0.814253 -0.469479, 0.354759 0.823087 -0.44348, 0.21251 0.904159 -0.37059, 0.403656 0.849299 -0.340225, + 0.284615 0.903923 -0.319244, 0.100585 0.973434 -0.205689, 0.0764415 0.972284 -0.220954, 0.0102861 0.999593 -0.0266285, + 0.0505651 0.983135 0.17575, 0.00953973 0.99995 0.00288977, 0.226231 0.909787 0.348005, 0.307246 0.829916 0.465661, + 0.083261 0.976861 0.197005, 0.365188 0.839431 0.402485, 0.20145 0.928842 -0.310919, 0.00867231 0.999595 0.0271082, + 0.0447906 0.987551 -0.150789, 0.110535 0.970687 0.213422, 0.295301 0.905708 0.304122, 0.41076 0.819869 0.398862, + 2.10035e-005 -1.44849e-005 1, -0.0547327 0.0382263 0.997769, 0.257735 -0.179986 0.949304, 0.57367 -0.405412 0.711719, + 0.0545844 -0.0381017 0.997782, 0.365964 -0.255455 0.894882, 0.550156 -0.387898 0.739503, 0.746245 -0.522768 0.412106, + 0.761922 -0.53215 0.369176, 0.818226 -0.571466 0.0627036, 0.780028 -0.544792 -0.307828, 0.819841 -0.572591 0.00035917, + 0.569597 -0.400845 -0.717553, 0.60817 -0.430975 -0.666626, 0.357391 -0.252064 -0.899297, 0.756558 -0.530277 -0.382657, + 0.0540091 -0.0377208 -0.997828, 0.315652 -0.220376 -0.922929, 0.608609 -0.424916 0.670105, 0.818264 -0.571488 -0.0620049, + 0.776325 -0.542197 0.321469, 0.73014 -0.509854 -0.454911, 0.537462 -0.375167 -0.755238, 0.263974 -0.184304 -0.946757, + -7.61828e-006 1.56594e-005 -1, -0.0541641 0.0378291 -0.997815, -0.263768 0.184199 -0.946835, -0.315383 0.220249 -0.923051, + -0.579134 0.407201 -0.706251, -0.365625 0.255358 -0.895048, -0.552278 0.385632 -0.739106, -0.743142 0.522455 -0.418068, + -0.74844 0.534876 -0.392104, -0.816222 0.574337 -0.062594, -0.77183 0.547163 0.32387, -0.818821 0.573979 0.00892904, + -0.755801 0.5319 0.381899, -0.608739 0.425152 -0.669837, -0.818279 0.571394 0.062681, -0.776529 0.542287 -0.320824, + -0.730412 0.51013 0.454165, -0.53711 0.375126 0.755509, -0.264937 0.185057 0.946342, 0.549662 0.834159 -0.0452816, + 0.563186 0.821956 -0.0849116, 0.549287 0.835596 0.0079098, 0.555495 0.830672 0.037531, 0.573781 0.818702 -0.0224413, + 0.34984 0.929197 0.119184, 0.440571 0.897718 0.00025353, 0.542553 0.83997 -0.00936121, 0.52479 0.851232 1.10327e-005, + 0.529005 0.848598 0.00589812, 0.528954 0.84863 -0.00586482, 0.529391 0.828903 0.180732, 0.563372 0.821875 0.0844605, + 0.351163 0.928794 -0.118433, 0.573714 0.818752 0.022286, 0.380645 0.540023 0.750656, 0.363153 0.591148 0.720183, + 0.59338 0.437615 0.675568, 0.627893 0.418501 0.656206, 0.814003 0.275128 0.51157, 0.424161 0.535315 0.730428, + 0.665474 0.426593 0.612506, 0.798727 0.312408 0.514233, 0.93557 0.201447 0.290049, 0.942867 0.190886 0.273065, + 0.98562 0.162741 0.0454729, 0.956764 0.181547 -0.227252, 0.982052 0.188579 0.00337462, 0.816134 0.294344 -0.497279, + 0.838604 0.247797 -0.485118, 0.668298 0.38548 -0.636225, 0.939913 0.20225 -0.27506, 0.431556 0.530117 -0.729887, + 0.634188 0.430027 -0.642559, 0.841194 0.299172 0.450431, 0.975618 0.215136 -0.0434262, 0.952097 0.204501 0.227355, + 0.924586 0.216887 -0.313209, 0.790188 0.345865 -0.505944, 0.588235 0.44694 -0.673962, 0.394498 0.562038 -0.726969, + 0.318424 0.555512 -0.768123, 0.224764 0.717183 -0.659643, 0.138623 0.716466 -0.683711, 0.0297323 0.878422 -0.47696, + 0.050246 0.705445 -0.706981, -0.046646 0.826968 -0.560311, -0.133906 0.945239 -0.297644, 0.0650157 0.972223 -0.224845, + -0.550275 0.83479 0.0179765, -0.0739517 0.978352 0.193286, -0.161934 0.986777 -0.00690605, -0.0420372 0.854094 0.518417, + 0.00673528 0.889549 0.456791, 0.146365 0.782829 0.604777, -0.0818809 0.961316 0.262998, 0.139633 0.717329 0.682599, + -0.0836834 0.855617 -0.510801, -0.172549 0.95422 -0.244319, -0.201932 0.908683 0.365403, -0.0532546 0.813757 0.57876, + 0.129748 0.641977 0.755666, -0.000493855 0.00437785 0.99999, -0.0552071 0.0338557 0.997901, 0.270822 -0.174237 0.94673, + 0.317875 -0.213352 0.923816, 0.59005 -0.385517 0.709378, 0.0488881 -0.0370657 0.998116, 0.354649 -0.269885 0.895202, + 0.559912 -0.390831 0.730582, 0.735493 -0.545363 0.402031, 0.735266 -0.556339 0.387131, 0.793984 -0.605094 0.0587477, + 0.755388 -0.573745 -0.316554, 0.815009 -0.579416 0.00613636, 0.584929 -0.404516 -0.703011, 0.62331 -0.413767 -0.663537, + 0.381612 -0.233975 -0.894219, 0.753398 -0.534516 -0.382995, 0.0572156 -0.035074 -0.997746, 0.313383 -0.222343 -0.923231, + 0.601087 -0.460067 0.653478, 0.83242 -0.550755 -0.0611994, 0.772843 -0.54896 0.318365, 0.710641 -0.544248 -0.445852, + 0.527954 -0.402777 -0.747687, 0.254692 -0.193012 -0.947564, -0.00425923 -0.000936896 -0.999991, + -0.0560153 0.0424633 -0.997527, -0.271019 0.174003 -0.946716, -0.309722 0.21942 -0.925163, -0.570401 0.418385 -0.706821, + -0.361782 0.250617 -0.897945, -0.554133 0.386451 -0.737287, -0.75835 0.511563 -0.403991, -0.73068 0.55994 -0.390608, + -0.832859 0.550089 -0.061217, -0.773028 0.548609 0.318523, -0.824439 0.565949 -0.00146861, -0.589059 0.389904 0.707803, + -0.600877 0.460468 0.653388, -0.363623 0.246127 0.898443, -0.75437 0.53786 0.37634, -0.314559 0.211796 0.925308, + -0.645025 0.395092 -0.654098, -0.789001 0.524065 -0.320676, -0.763502 0.467889 0.445134, -0.550986 0.359455 0.753131, + -0.259024 0.196295 0.945714, 0.503432 0.722588 0.473733, 0.462186 0.756633 0.462483, 0.63304 0.636514 0.44058, + 0.655881 0.585912 0.475949, 0.795962 0.486695 0.359962, 0.507033 0.651751 0.564037, 0.669443 0.612464 0.420397, + 0.773442 0.529235 0.348852, 0.870958 0.450042 0.197215, 0.880211 0.436065 0.187284, 0.903051 0.427896 0.0374704, + 0.885832 0.43511 -0.161188, 0.902317 0.43107 0.00163199, 0.789537 0.516023 -0.332193, 0.815702 0.463576 -0.346018, + 0.681847 0.573821 -0.453667, 0.877897 0.436355 -0.197209, 0.542891 0.713368 -0.443143, 0.658786 0.619374 -0.427056, + 0.792316 0.543551 0.277106, 0.900307 0.433668 -0.0371296, 0.884614 0.437708 0.160843, 0.859186 0.470553 -0.200947, + 0.757884 0.568203 -0.320558, 0.619236 0.603464 -0.502373, 0.478953 0.711981 -0.513504, 0.461584 0.717314 -0.521921, + 0.338692 0.813713 -0.472397, 0.354336 0.822966 -0.444042, 0.212592 0.903775 -0.371477, 0.40528 0.849172 -0.338608, + 0.285721 0.903496 -0.319466, 0.100566 0.973471 -0.205527, 0.0773483 0.972366 -0.220275, 0.0104443 0.999588 -0.0267324, + 0.0505302 0.983178 0.175523, 0.104134 0.994516 -0.00973227, 0.225847 0.909414 0.349228, 0.206875 0.920467 0.331577, + 0.305354 0.828461 0.46948, 0.134898 0.970254 0.20102, 0.364455 0.839058 0.403923, 0.201178 0.928787 -0.31126, + 0.206408 0.978108 0.0264498, 0.138632 0.97732 -0.160086, 0.118625 0.964319 0.236679, 0.296384 0.90525 0.304433, + 0.410838 0.820366 0.397758, -0.000182487 0.000130059 1, -0.0545089 0.0381148 0.997786, 0.264146 -0.184728 0.946627, + 0.315368 -0.220574 0.922979, 0.573603 -0.401131 0.714194, 0.0543988 -0.0380604 0.997794, 0.365134 -0.255455 0.895221, + 0.551585 -0.385824 0.739522, 0.74468 -0.520789 0.417409, 0.754966 -0.527965 0.388946, 0.817879 -0.572006 0.0623145, + 0.776042 -0.542726 -0.32126, 0.819487 -0.573097 -0.000195222, 0.573397 -0.401026 -0.714419, 0.608402 -0.425469 -0.669942, + 0.365349 -0.255492 -0.895122, 0.755103 -0.52804 -0.388579, 0.054567 -0.0381589 -0.997781, 0.315562 -0.220736 -0.922874, + 0.607957 -0.425236 0.670494, 0.817911 -0.571961 -0.0623059, 0.776006 -0.542639 0.321491, 0.729886 -0.510444 -0.454657, + 0.53611 -0.375061 -0.756251, 0.264529 -0.185057 -0.946456, -0.000122449 7.40804e-005 -1, -0.0546687 0.0382344 -0.997772, + -0.264717 0.185113 -0.946392, -0.315716 0.220783 -0.92281, -0.579387 0.406431 -0.706487, -0.365377 0.255516 -0.895104, + -0.551622 0.385748 -0.739534, -0.743604 0.521621 -0.418288, -0.751253 0.530783 -0.392287, -0.816955 0.573265 -0.0628631, + -0.773618 0.544642 0.323852, -0.818952 0.573797 0.0085841, -0.573348 0.40096 0.714495, -0.615695 0.43225 0.658847, + -0.365104 0.255307 0.895275, -0.756492 0.530959 0.381841, -0.315447 0.220595 0.922947, -0.608084 0.425272 -0.670356, + -0.817804 0.572114 0.06231, -0.775843 0.542759 -0.321683, -0.729771 0.510452 0.454833, -0.536238 0.374981 0.7562, + -0.264425 0.184927 0.94651, 0.597151 0.802042 0.0118115, 0.572413 0.81976 0.0183397, 0.569825 0.821764 0.00173223, + 0.65136 0.758769 -5.12412e-007, 0.674717 0.736958 0.0406281, 0.540044 0.841452 0.0176318, 0.592059 0.805834 -0.00984701, + 0.570683 0.821066 -0.0131429, 0.351124 0.928819 0.118356, 0.44078 0.897615 2.51789e-008, 0.534692 0.844782 -0.0211744, + 0.569834 0.821758 -0.00173595, 0.572429 0.819748 -0.0183698, 0.351124 0.928819 -0.118356, 0.570694 0.821057 0.0131625, + 0.674718 0.736956 -0.0406294, 0.720332 -0.380614 -0.579875, 0.548845 -0.305403 -0.778137, 0.590266 -0.342485 -0.730951, + 0.428549 -0.247768 -0.868882, 0.544905 -0.291544 -0.786181, 0.781524 -0.424678 -0.457021, 0.866207 -0.459925 -0.195331, + 0.881959 -0.471326 1.75631e-005, 0.883685 -0.468083 1.83844e-005, 0.838178 -0.443333 -0.317668, 0.759185 -0.405715 -0.508954, + 0.439727 -0.239968 -0.86548, 0.444715 -0.245389 -0.861402, 0.856602 -0.457735 -0.238143, 0.882009 -0.471233 1.89321e-005, + 0.469693 0.882762 0.0109735, 0.46936 0.882925 0.0120336, 0.47131 0.881952 0.00532979, 0.472629 0.881257 0.0028286, + 0.469288 0.88141 -0.053713, 0.470101 0.882227 -0.0261014, 0.467006 0.883627 -0.0332939, 0.361334 0.931909 -0.0313461, + 0.473223 0.880942 0.00138999, 0.46816 0.883636 0.00364655, 0.46665 0.884442 0.000776636, 0.466984 0.884265 -0.000824066, + 0.454893 0.890412 0.0154616, 0.751677 0.659531 0, 0.443882 0.896026 -0.0102873, 0 1 0, 0.171658 0.985106 -0.00996635, + 0.474517 0.880213 -0.00763341, 0.462556 0.883516 0.073764, 0.462767 0.883884 0.0677929, 0.470626 0.882026 0.023279, + 0.467134 0.884053 -0.0153478, 0.465236 0.88484 -0.0247589, 0.468522 0.883429 -0.00635498, 0.466922 0.883972 -0.0240414, + 0.473197 0.880957 0.000441127, 0.476548 0.879146 0.00223392, 0.477621 0.878566 -0.000906928, 0.474606 0.880175 -0.00638602, + 0.469772 0.882754 -0.00777882, 0.469396 0.882965 -0.0063151, 0.46807 0.883642 0.00932839, 0.46744 0.884015 0.00426738, + 0.463887 0.885805 0.0126001, 0.467576 0.883913 0.00836698, 0.465072 0.885248 -0.00664151, 0.47304 0.881035 0.00325223, + 0.483314 0.875446 0.00145041, 0.478001 0.878347 -0.00469083, 0.486479 0.873649 -0.0086745, 0.472727 0.881199 -0.00416427, + 0.477659 0.878538 0.00365475, 0.469991 0.882671 -0.000524667, 0.475257 0.879841 0.00326468, 0.466153 0.884693 -0.00451224, + 0.467875 0.883794 -0.000994368, 0.464074 0.885721 -0.011536, 0.464217 0.885679 -0.00864328, 0.477804 0.878464 -0.00208888, + 0.473667 0.880645 0.0101715, 0.487809 0.872877 0.0113526, 0.465793 0.884805 -0.0125436, 0.463893 0.885802 -0.0125943, + 0.46757 0.883916 -0.00837413, 0.477526 0.878615 -0.00215731, 0.468555 0.883426 0.00376353, 0.469866 0.882738 3.63683e-007, + 0.484957 0.874537 -0.00105187, 0.474376 0.880215 0.0137217, 0.484271 0.874911 0.00361857, -0.480325 -0.877086 -0.00274458, + -0.463338 -0.886095 0.0124233, -0.450612 -0.892418 0.0232227, -0.455173 -0.890341 0.0105439, -0.480572 -0.876933 -0.00623656, + -0.476877 -0.87897 -9.61629e-007, -0.454845 -0.890571 0, -0.477327 -0.878055 0.0343211, -0.466062 -0.884658 0.0128854, + -0.476743 -0.878654 0.0261259, -0.463654 -0.886016 0.000357087, -0.478726 -0.877728 0.0203705, -0.480324 -0.877087 0.0027446, + -0.480566 -0.876936 0.00623253, -0.450623 -0.892412 -0.0232159, -0.463344 -0.886091 -0.0124192, + -0.455179 -0.890338 -0.0105413, -0.477322 -0.878058 -0.034316, -0.478719 -0.877732 -0.0203729, -0.476738 -0.878657 -0.0261164, + -0.466063 -0.884658 -0.0128779, -0.463652 -0.886017 -0.000360571, -0.45195 -0.89202 0.0064994, + -0.451952 -0.892019 -0.00649869, -0.474308 -0.880333 -0.00677019, -0.456101 -0.889898 -0.00731516, + -0.479057 -0.877744 -0.00837473, -0.474505 -0.87991 -0.0245471, -0.466021 -0.883126 -0.0539653, + -0.462049 -0.886814 0.00845157, -0.434448 -0.900632 0.0108534, -0.441649 -0.897042 0.0161628, -0.467268 -0.884055 0.0103351, + -0.487122 -0.872466 0.0389271, -0.469181 -0.882993 0.0138485, -0.45879 -0.883097 0.0982432, -0.456099 -0.889899 0.00731627, + -0.474308 -0.880333 0.00677289, -0.482545 -0.875846 0.00663343, -0.498222 -0.866802 -0.0207167, -0.4764 -0.879171 -0.0101132, + -0.474543 -0.880232 -0.000703527, -0.532011 -0.838653 -0.116729, -0.504858 -0.862817 -0.0258046, -0.88275 0.469839 0.00216396, + -0.880161 0.470214 0.0649276, -0.835226 0.446115 -0.321525, -0.815084 0.433778 -0.384024, -0.623843 0.33132 -0.707847, + -0.881609 0.467473 -0.0650795, -0.789898 0.422101 -0.444851, -0.648758 0.345121 -0.678236, -0.361826 0.192297 -0.912197, + -0.339934 0.18154 -0.922761, -0.0592605 0.0316479 -0.997741, 0.284398 -0.150562 -0.94681, 3.07455e-005 -6.93122e-006 -1, + 0.622842 -0.331926 -0.708444, 0.58037 -0.308932 -0.75348, 0.791536 -0.419706 -0.444205, 0.338179 -0.179927 -0.923721, + 0.882239 -0.466267 -0.065188, 0.816677 -0.433821 -0.380576, -0.582575 0.310292 -0.751216, 0.0592688 -0.0316519 -0.99774, + -0.28437 0.150597 -0.946813, 0.389725 -0.208129 -0.897105, 0.66393 -0.354568 -0.65839, 0.836193 -0.446564 -0.318373, + 0.883108 -0.46917 4.25353e-005, 0.880214 -0.470073 0.0652229, 0.470626 0.882314 0.00567132, 0.466985 0.884211 -0.00982027, + 0.472453 0.881354 0.00170336, 0.460188 0.887383 -0.0279098, 0.465052 0.885272 0.00446587, 0.468889 0.883225 0.00753574, + 0.470633 0.882308 -0.00602576, 0.461866 0.886948 -0.00194452, 0.477612 0.877707 0.0389435, 0.460179 0.887386 0.0279412, + 0.46658 0.884426 0.00967901, 0.427667 0.903506 0.0279014, 0.438061 0.898933 0.00474898, 0.420532 0.906742 0.0311704, + 0.500788 0.86101 0.0887295, 0.420551 0.906734 -0.0311662, -0.850342 0.441502 -0.286347, -0.802936 0.423356 -0.4196, + -0.846894 0.456421 -0.272855, -0.783617 0.421585 -0.456302, -0.80486 0.437912 -0.400541, -0.88192 0.459716 -0.104303, + -0.880056 0.474579 -0.0166059, -0.886836 0.458961 0.0536364, -0.858407 0.462558 0.221758, -0.807143 0.426679 0.408002, + -0.871815 0.452654 0.187198, -0.780656 0.417958 0.464636, -0.784264 0.417285 0.459133, -0.836993 0.468499 -0.282755, + -0.868812 0.484351 -0.102809, -0.870714 0.488958 0.0527014, -0.802131 0.4395 0.40426, -0.858691 0.480642 0.177858, + -0.780649 0.436926 0.446859, -0.887394 0.459733 -0.0343255, -0.839847 0.440544 -0.317141, -0.869794 0.455934 -0.188636, + -0.874948 0.447788 -0.18426, -0.878775 0.460602 0.124905, -0.83723 0.457819 0.299078, -0.872161 0.458191 0.171453, + -0.825878 0.442398 0.349585, -0.888184 0.455038 0.0637895, -0.839911 0.444032 0.312065, -0.858663 0.444468 0.255237, + -0.868183 0.450017 0.209146, -0.770526 0.399125 0.49698, -0.741354 0.391064 0.545402, -0.586794 0.30356 0.750682, + -0.273787 0.150578 0.94993, -0.338668 0.175567 0.924381, -0.0510491 0.0265028 0.998344, 0.0244204 -0.00320885 0.999697, + 0.242764 -0.125921 0.961878, -0.536636 0.289182 0.792714, -0.847465 0.43311 0.30695, -0.706005 0.360889 0.609357, + 0.317406 -0.152529 0.935942, 0.509699 -0.263949 0.818864, 0.124219 -0.0940922 0.987784, -0.188377 0.0598245 0.980273, + 0.563798 -0.282156 0.776222, -0.478831 0.22069 0.849716, 0.752113 -0.393015 0.529022, 0.717252 -0.371047 0.589809, + 0.835782 -0.457739 0.303221, 0.874898 -0.484248 -0.00753754, 0.861368 -0.460709 0.21399, 0.838321 -0.414022 -0.354688, + 0.667751 -0.332387 -0.666054, 0.755013 -0.398186 -0.520964, 0.403057 -0.19378 -0.894424, 0.525804 -0.283879 -0.801837, + 0.871724 -0.461777 -0.163889, 0.223761 -0.120673 -0.967145, 0.0896843 -0.029882 -0.995522, 0.614402 -0.337102 0.713353, + -0.108953 0.0581467 -0.992345, -0.238508 0.137622 -0.96134, -0.538336 0.288793 -0.791702, -0.430055 0.225744 -0.874124, + -0.754422 0.40203 -0.518863, -0.686466 0.365321 -0.628733, 0.394192 -0.226667 0.890637, 0.887153 -0.461466 -0.00306368, + 0.781208 -0.417704 0.463938, 0.859883 -0.444831 0.250453, 0.817078 -0.455168 -0.353843, 0.644097 -0.369059 -0.670026, + 0.385021 -0.229813 -0.893837, -0.250315 0.121078 -0.960564, -0.755986 0.399571 -0.518487, -0.541594 0.278995 -0.792993, + 0.0728334 -0.0584013 -0.995633, -0.831252 0.43856 -0.341592, -0.865053 0.459137 -0.20218, -0.888067 0.459598 0.0103622, + -0.884231 0.457795 -0.0925219, -0.887091 0.458793 0.050774, -0.877237 0.449239 -0.169231, -0.887821 0.458866 0.0348793, + 0.51752 -0.283038 -0.807504, 0.711952 -0.402156 -0.575669, 0.628091 -0.302151 -0.717082, 0.731184 -0.38695 -0.561819, + 0.681768 -0.357886 -0.638052, 0.75489 -0.454172 -0.473148, 0.833458 -0.419577 -0.359586, 0.835038 -0.42236 -0.352596, + 0.8177 -0.435412 -0.376541, 0.790661 -0.457827 -0.406509, 0.818374 -0.422241 -0.389841, 0.54551 -0.264222 -0.795365, + 0.520024 -0.236629 -0.82072, -0.0892253 0.0630882 0.994011, -0.211888 0.14824 0.965986, -0.120199 0.0840909 0.989182, + -0.0269055 0.0188158 0.999461, 0.0984094 -0.0687565 0.992768, 0.446452 -0.311882 0.838696, 0.161407 -0.113217 0.980372, + 0.785465 -0.540309 0.301846, 0.74127 -0.515487 0.429874, 0.806358 -0.551894 0.212604, 0.732583 -0.510858 0.449829, + 0.497743 -0.348606 0.794183, 0.822552 -0.560907 0.0937591, 0.824134 -0.552578 0.124338, 0.804853 -0.566421 0.177139, + 0.220072 -0.153768 0.963288, 0.546571 -0.379471 0.746499, 0.716777 -0.498384 0.487692, 0.815438 -0.574267 0.0726546, + 0.81657 -0.576387 0.0314876, 0.801413 -0.559907 0.210334, 0.431236 0.59772 -0.675845, 0.319868 0.557548 -0.766045, + 0.588475 0.448 -0.673047, 0.638765 0.455328 -0.620206, 0.817082 0.315214 -0.482719, 0.491665 0.604057 -0.627201, + 0.660097 0.394917 -0.638993, 0.798977 0.309251 -0.515752, 0.935393 0.200371 -0.291361, 0.943618 0.189131 -0.271689, + 0.98555 0.162895 -0.046445, 0.956952 0.180621 0.227197, 0.986101 0.166144 0.000769222, 0.816089 0.293904 0.497614, + 0.841448 0.300777 0.448886, 0.666121 0.426415 0.611925, 0.941572 0.201808 0.269657, 0.424657 0.53724 0.728725, + 0.628179 0.420012 0.654966, 0.838771 0.241973 -0.487763, 0.98455 0.168769 0.0466739, 0.956394 0.183497 -0.227242, + 0.927176 0.192021 0.321672, 0.786937 0.289747 0.544773, 0.601677 0.491559 0.629567, 0.40692 0.587247 0.699683, + 0.421322 0.662299 0.619554, -0.0842643 0.828708 0.553301, 0.158818 0.773989 0.612958, -0.0106121 0.849131 0.528076, + -0.0854939 0.954005 0.287343, -0.243877 0.914784 0.322015, -0.170326 0.95474 -0.243846, -0.160122 0.987074 -0.00671872, + -0.027396 0.852589 -0.521863, -0.0829529 0.855838 -0.510549, 0.050322 0.705786 -0.706635, -0.134795 0.95045 -0.280133, + 0.139272 0.716962 -0.683059, 0.00626224 0.889486 0.45692, -0.551333 0.834088 0.0181206, 0.00242017 0.952661 -0.304024, + 0.000726291 0.854083 -0.520136, 0.28089 0.746416 -0.603294, -0.00319792 -0.00198132 -0.999993, -0.0511378 0.0390928 -0.997926, + 0.259661 -0.190125 -0.946799, 0.313912 -0.221964 -0.923142, 0.56682 -0.431491 -0.701805, 0.0573827 -0.0347374 -0.997748, + 0.382667 -0.232967 -0.894032, 0.567578 -0.380219 -0.730266, 0.728827 -0.541178 -0.419449, 0.732209 -0.558514 -0.389784, + 0.791981 -0.605973 -0.07459, 0.749147 -0.57236 0.33344, 0.814694 -0.579856 0.00644015, 0.577039 -0.410121 0.706277, + 0.602829 -0.458131 0.653233, 0.35647 -0.271952 0.893852, 0.74438 -0.546907 0.383134, 0.321166 -0.211799 0.923035, + 0.622186 -0.415059 -0.663785, 0.83193 -0.550176 0.0721012, 0.769294 -0.545566 -0.332482, 0.728839 -0.522305 0.44271, + 0.559624 -0.341902 0.754933, 0.271768 -0.172783 0.946725, 0.000899967 0.00371224 0.999993, -0.0552616 0.0338226 0.997899, + -0.573871 0.409503 0.70921, -0.558036 0.375292 0.740102, -0.748141 0.520308 0.411782, -0.787877 0.477897 0.388412, + -0.791676 0.520182 -0.320406, -0.805593 0.592416 -0.00800407, -0.57257 0.407051 -0.711669, -0.612743 0.429554 -0.663348, + -0.353937 0.270318 -0.895353, -0.753762 0.534793 -0.381889, -0.321552 0.212351 -0.922774, -0.792313 0.60727 -0.0588407, + -0.755941 0.579348 0.304809, -0.728637 0.521228 -0.444308, -0.565756 0.346702 -0.748143, -0.271084 0.173431 -0.946803, + 0.480098 0.712521 -0.511684, 0.462024 0.716805 -0.52223, 0.619515 0.605036 -0.500132, 0.658587 0.618782 -0.428219, + 0.77902 0.545382 -0.309332, 0.542604 0.712787 -0.444427, 0.681168 0.569346 -0.460277, 0.774745 0.526689 -0.349812, + 0.869673 0.452278 -0.197772, 0.878399 0.440185 -0.18615, 0.900742 0.432789 -0.0368397, 0.901722 0.432315 0.00134373, + 0.787533 0.516354 0.336409, 0.791715 0.544269 0.277413, 0.669276 0.613721 0.418828, 0.870327 0.457741 0.18167, + 0.507708 0.65253 0.562528, 0.655824 0.584368 0.477921, 0.816225 0.462032 -0.346848, 0.901451 0.431305 0.0369093, + 0.88426 0.439181 -0.158756, 0.872902 0.432654 0.225506, 0.779356 0.489277 0.391423, 0.632666 0.633997 0.444727, + 0.503694 0.721809 0.474641, 0.462966 0.7572 0.460773, 0.41119 0.820046 0.398054, 0.365222 0.839318 0.402689, + 0.252175 0.917578 0.307341, 0.306835 0.829503 0.466665, 0.25161 0.899185 0.357993, 0.0997104 0.973984 0.2035, + 0.0651031 0.980755 0.184069, 0.00866179 0.999598 0.0269903, 0.0442077 0.987547 -0.150984, 0.00943996 0.999952 0.00276751, + 0.259667 0.909863 -0.323609, 0.200954 0.928928 -0.310984, 0.40485 0.849438 -0.338454, 0.0808259 0.97846 -0.189958, + 0.35503 0.8232 -0.443052, 0.20664 0.920437 0.331807, 0.010372 0.999588 -0.0267522, 0.0502384 0.983146 0.175785, + 0.123302 0.964154 -0.234955, 0.249079 0.88841 -0.385601, 0.340724 0.814238 -0.470025, -7.68386e-006 1.56539e-005 -1, + -0.054587 0.0381242 -0.997781, 0.264433 -0.184625 -0.946567, 0.315739 -0.220437 -0.922885, 0.573769 -0.400576 -0.714372, + 0.0544307 -0.0380154 -0.997794, 0.357135 -0.25188 -0.89945, 0.546389 -0.385238 -0.743674, 0.746303 -0.522809 -0.41195, + 0.755325 -0.527531 -0.388838, 0.818248 -0.571477 -0.0623311, 0.7764 -0.542249 0.3212, 0.819841 -0.572591 8.40897e-006, + 0.576377 -0.405665 0.709384, 0.608495 -0.424837 0.670259, 0.365473 -0.255112 0.89518, 0.755241 -0.527433 0.389134, + 0.0543737 -0.0379542 0.997799, 0.31147 -0.21879 0.924726, 0.608105 -0.430927 -0.666716, 0.818246 -0.57148 0.0623296, + 0.733705 -0.516306 0.441707, 0.5367 -0.381283 0.752712, 0.257187 -0.179603 0.949525, 2.13803e-005 -1.48689e-005 1, + -0.0545212 0.0380785 0.997786, -0.264386 0.184671 0.946571, -0.315554 0.220377 0.922962, -0.573839 0.400777 0.714203, + -0.365213 0.255011 0.895315, -0.551833 0.385321 0.7396, -0.745712 0.524276 0.411155, -0.755485 0.527642 0.388377, + -0.818298 0.571408 0.0623078, -0.776517 0.542278 -0.320867, -0.818824 0.57398 0.00856312, -0.577238 0.404911 -0.709114, + -0.608669 0.425103 -0.669932, -0.365359 0.255172 -0.89521, -0.7507 0.528299 -0.396673, -0.31547 0.22031 -0.923007, + -0.614934 0.433107 0.658995, -0.816203 0.574322 -0.0629765, -0.771915 0.547221 0.323568, -0.725814 0.514824 -0.456235, + -0.545645 0.380938 -0.74643, -0.264228 0.18452 -0.946645, 0.549679 0.834146 -0.0453127, 0.528794 0.828996 -0.182051, + 0.563216 0.82193 -0.0849587, 0.52479 0.851232 5.85202e-008, 0.528981 0.848613 0.00587984, 0.549376 0.835539 0.00782203, + 0.555418 0.830714 0.0377503, 0.573767 0.818711 -0.022446, 0.350486 0.929007 0.118766, 0.440559 0.897724 8.67456e-008, + 0.542448 0.840037 -0.00939644, 0.563216 0.82193 0.0849588, 0.528794 0.828996 0.182051, 0.573767 0.818711 0.022446, + 0.528979 0.848614 -0.00587946, 0.39461 0.562248 -0.726747, 0.634367 0.430429 -0.642113, 0.816531 0.315477 -0.483478, + 0.431773 0.530591 -0.729414, 0.668567 0.386329 -0.635427, 0.79831 0.311322 -0.515538, 0.933058 0.21325 -0.289703, + 0.942565 0.187635 -0.276341, 0.975622 0.215129 -0.0433751, 0.952035 0.204949 0.227212, 0.982041 0.188638 0.00342987, + 0.815214 0.297542 0.496886, 0.841015 0.301369 0.4493, 0.665452 0.427622 0.611812, 0.941927 0.200799 0.26917, + 0.424043 0.535374 0.730453, 0.627657 0.417701 0.656941, 0.838532 0.247844 -0.485219, 0.985595 0.16287 0.045561, + 0.956777 0.181543 -0.227199, 0.926373 0.197135 0.320891, 0.786382 0.29041 0.54522, 0.592811 0.43696 0.676492, + 0.380472 0.539808 0.750898, 0.362875 0.590679 0.720708, 0.130117 0.641782 0.755768, 0.139894 0.717168 0.682715, + -0.0841946 0.828874 0.553064, 0.144964 0.781862 0.606364, -0.0112193 0.848823 0.528558, -0.0860325 0.953889 0.287565, + -0.246914 0.913663 0.322882, -0.10099 0.994129 0.0388295, -0.172557 0.95423 -0.244272, -0.161901 0.986784 -0.00681949, + -0.0269549 0.852577 -0.521906, -0.0836836 0.855616 -0.510801, 0.0502461 0.705445 -0.706981, -0.136247 0.95021 -0.280245, + 0.139041 0.716717 -0.683362, 0.0054232 0.889102 0.457677, -0.550273 0.834787 0.0181612, -0.073643 0.978409 0.193114, + 0.00291305 0.95268 -0.30396, 0.000949536 0.853967 -0.520327, 0.225436 0.717684 -0.658869, -0.00427269 -0.000940655 -0.99999, + -0.0561943 0.0425977 -0.997511, 0.254866 -0.193146 -0.94749, 0.313415 -0.222365 -0.923214, 0.565636 -0.432105 -0.702383, + 0.0573983 -0.0351857 -0.997731, 0.3815 -0.233906 -0.894285, 0.565936 -0.381282 -0.730986, 0.742018 -0.5318 -0.408164, + 0.730776 -0.560013 -0.390324, 0.832428 -0.550762 -0.0610294, 0.772856 -0.548976 0.318305, 0.815008 -0.579415 0.00630874, + 0.577309 -0.40982 0.706231, 0.601327 -0.460251 0.653126, 0.35437 -0.269674 0.895376, 0.738857 -0.563449 0.369615, + 0.0485739 -0.0368287 0.99814, 0.317424 -0.213033 0.924045, 0.623212 -0.413708 -0.663665, 0.793975 -0.605087 0.0589309, + 0.755406 -0.573759 -0.316483, 0.731107 -0.519135 0.442698, 0.559257 -0.342892 0.754756, 0.270182 -0.173795 0.946994, + -0.000492025 0.00435029 0.99999, -0.0548541 0.0336395 0.997928, -0.258392 0.195815 0.945986, -0.314095 0.211465 0.925541, + -0.596091 0.381739 0.706365, -0.36332 0.245944 0.898616, -0.561156 0.378527 0.736085, -0.750294 0.524484 0.402461, + -0.78539 0.48154 0.388949, -0.789023 0.52408 -0.320599, -0.824438 0.56595 -0.00129283, -0.57495 0.408751 -0.70877, + -0.64493 0.395034 -0.654228, -0.36167 0.250552 -0.898008, -0.772299 0.510626 -0.37791, -0.309763 0.219448 -0.925143, + -0.601117 0.460653 0.653037, -0.832866 0.550098 -0.0610478, -0.77304 0.548626 0.318462, -0.710478 0.544459 -0.445855, + -0.533393 0.383857 -0.753754, -0.271202 0.174138 -0.946639, 0.479121 0.711965 -0.513371, 0.46151 0.717207 -0.522133, + 0.619227 0.602979 -0.502966, 0.658729 0.619307 -0.42724, 0.779761 0.543974 -0.309945, 0.543048 0.713612 -0.442557, + 0.681803 0.574095 -0.453386, 0.774337 0.529782 -0.346025, 0.870026 0.451384 -0.198261, 0.879109 0.438478 -0.186829, + 0.900314 0.433662 -0.0370335, 0.884837 0.437185 0.161037, 0.902338 0.431026 0.00170007, 0.787356 0.517116 0.335652, + 0.792178 0.544001 0.276618, 0.669259 0.613365 0.419377, 0.871722 0.454872 0.182188, 0.507019 0.652001 0.563761, + 0.655839 0.58586 0.476071, 0.815616 0.464138 -0.345465, 0.90301 0.427982 0.0374834, 0.885736 0.435359 -0.161039, + 0.873502 0.431162 0.22604, 0.7781 0.494168 0.38776, 0.632911 0.636008 0.441494, 0.503388 0.722358 0.474129, + 0.461926 0.756159 0.463517, 0.411364 0.820282 0.397388, 0.364575 0.838987 0.403963, 0.253233 0.917365 0.307107, + 0.304665 0.828262 0.470278, 0.25149 0.89884 0.358942, 0.144072 0.967716 0.206807, 0.0766002 0.972548 0.219734, + 0.206202 0.978149 0.0265701, 0.138627 0.977327 -0.160047, 0.104164 0.994513 -0.00969556, 0.260488 0.909575 -0.323758, + 0.201223 0.928757 -0.311319, 0.405009 0.849111 -0.339085, 0.0811077 0.978475 -0.189758, 0.354233 0.82298 -0.444098, + 0.206739 0.920422 0.331786, 0.0105159 0.999589 -0.0266769, 0.0508458 0.983183 0.175404, 0.123977 0.964213 -0.234357, + 0.248884 0.888225 -0.386151, 0.338838 0.81384 -0.472074, -0.000122291 7.40592e-005 -1, -0.0544578 0.0380868 -0.99779, + 0.2643 -0.184896 -0.946551, 0.315519 -0.220706 -0.922896, 0.573416 -0.4011 -0.714362, 0.054356 -0.0380113 -0.997798, + 0.365482 -0.255585 -0.895041, 0.551863 -0.385985 -0.739231, 0.744742 -0.520822 -0.417258, 0.754869 -0.527838 -0.389307, + 0.817913 -0.571963 -0.0622602, 0.775982 -0.542622 0.32158, 0.819487 -0.573098 -0.000125264, 0.573731 -0.401296 0.713999, + 0.608072 -0.425316 0.67034, 0.365267 -0.255548 0.89514, 0.754895 -0.527935 0.389124, 0.0541882 -0.037913 0.997811, + 0.315325 -0.220544 0.923001, 0.608517 -0.425549 -0.669788, 0.817874 -0.572003 0.062409, 0.776041 -0.542726 -0.32126, + 0.729981 -0.510492 0.45445, 0.536899 -0.375462 0.755492, 0.263918 -0.184568 0.946722, -0.000181822 0.000129515 1, + -0.0542979 0.0379674 0.997803, -0.264196 0.184767 0.946605, -0.315405 0.220565 0.922968, -0.573482 0.401075 0.714323, + -0.365238 0.255402 0.895193, -0.551829 0.385879 0.739312, -0.746088 0.5234 0.411589, -0.754633 0.527921 0.389651, + -0.817799 0.57211 0.0624032, -0.818952 0.573797 0.00866035, -0.577629 0.404754 -0.708886, -0.6082 0.425352 -0.6702, + -0.36551 0.255609 -0.895023, -0.751278 0.527232 -0.396999, -0.315673 0.220752 -0.922832, -0.615808 0.432329 0.65869, + -0.816958 0.573267 -0.0628054, -0.77359 0.544623 0.323953, -0.727547 0.512352 -0.456257, -0.545725 0.381624 -0.746021, + -0.264487 0.184953 -0.946488, 0.597157 0.802038 0.0118074, 0.572391 0.819777 0.0182742, 0.569812 0.821773 0.0017269, + 0.540011 0.841473 0.0176633, 0.592055 0.805837 -0.00983603, 0.570667 0.821077 -0.013094, 0.35091 0.928882 0.118494, + 0.440713 0.897648 4.65009e-005, 0.534688 0.844784 -0.021184, 0.651375 0.758756 1.42629e-005, 0.674762 0.736914 0.040672, + 0.674717 0.736958 -0.0406291, 0.572407 0.819765 -0.0183042, 0.569821 0.821767 -0.00172973, 0.351123 0.928819 -0.118356, + 0.570678 0.821069 0.0131154, 0.514386 -0.275319 0.812161, 0.439644 -0.240142 0.865474, 0.445038 -0.245566 0.861185, + 0.428516 -0.247725 0.868911, 0.735949 -0.393297 0.551087, 0.571758 -0.315212 0.757453, 0.856604 -0.457736 0.238132, + 0.838198 -0.443338 0.317608, 0.732118 -0.386059 0.561215, 0.59026 -0.342478 0.730959, 0.781531 -0.424683 0.457005, + 0.866211 -0.459924 0.195317, -0.835692 0.444771 0.322175, -0.815776 0.435825 0.380219, -0.625024 0.333235 0.705904, + -0.790877 0.420885 0.444263, -0.647447 0.344367 0.679871, -0.36144 0.192084 0.912395, -0.339558 0.179438 0.923311, + -0.0578202 0.0305547 0.997859, 0.282651 -0.150947 0.947272, 4.81385e-005 -2.5457e-005 1, 0.624677 -0.333103 0.706273, + 0.580622 -0.310077 0.752815, 0.791656 -0.422779 0.441065, 0.336867 -0.179249 0.924332, 0.815765 -0.434152 0.382152, + -0.580782 0.307739 0.753651, 0.0578362 -0.030545 0.997859, -0.284535 0.151976 0.946543, 0.391662 -0.207832 0.89633, + 0.663963 -0.353202 0.659091, 0.837138 -0.442444 0.321626, 0.518481 -0.237021 0.821583, 0.544041 -0.264505 0.796276, + 0.626527 -0.302379 0.718353, 0.516957 -0.283057 0.807858, 0.711903 -0.40256 0.575448, 0.681617 -0.35846 0.63789, + 0.731498 -0.38772 0.560878, 0.755059 -0.454752 0.472321, 0.833492 -0.419425 0.359686, 0.818163 -0.422176 0.390355, + 0.790472 -0.457898 0.406796, 0.835426 -0.422055 0.352042, 0.818515 -0.434822 0.37545, 0.826602 -0.562787 -2.10088e-005, + 0.827707 -0.560788 0.0204402, 0.826684 -0.562372 0.0182015, 0.825402 -0.564437 0.0111106, 0.828012 -0.560471 -0.0163896, + 0.82668 -0.562377 -0.0182223, 0.825417 -0.564414 -0.0111523, 0.827343 -0.561656 0.00678853, 0.818206 -0.574925 0, + 0.818208 -0.574923 -2.95069e-006, 0.826777 -0.562457 -0.00909508, -0.666821 -0.745218 0, -0.153069 -0.207563 -0.966172, + -0.131622 -0.220071 -0.966563, -0.174421 -0.194927 -0.965184, 0.51329 0.858215 0, 0.133844 0.223785 0.965405, + 0.133516 0.223891 0.965425, 0.133188 0.223998 0.965446, 0.511077 0.859535 -1.41977e-006, 0.133825 0.22441 -0.965262, + 0.1336 0.224689 -0.965228, 0.13405 0.224131 -0.965296, 0.51329 0.858215 -1.85107e-006, -0.131545 -0.219943 0.966603, + -0.152979 -0.207442 0.966212, -0.174319 -0.194814 0.965226, -0.51329 -0.858215 0, 0.13368 0.223512 -0.965491, + 0.133679 0.223512 -0.965491, 0.133681 0.223511 -0.965491, 0.133991 0.22403 0.965327, 0.133991 0.224029 0.965328, + 0.13399 0.22403 0.965328, 0.836106 -0.543273 -0.0760315, 0.826665 -0.562294 0.0212257, 0.833324 -0.551635 -0.0356525, + 0.830833 -0.555852 -0.0272767, 0.830135 -0.555385 0.0492246, 0.818175 -0.574516 -0.0228185, 0.804423 -0.59346 0.0266236, + 0.80471 -0.593166 -0.0243967, 0.808605 -0.587538 -0.0309338, 0.797157 -0.603507 0.0178961, 0.821566 -0.569662 0.0226909, + 0.825304 -0.564628 -0.00829605, 0.815584 -0.575011 0.0646938, 0.795336 -0.606091 -0.00969213, 0.808685 -0.58691 0.0395703, + 0.818711 -0.574203 0.00178997, 0.841313 -0.540319 0.0157218, 0.830856 -0.556488 0, 0.800595 -0.599201 -0.00261947, + 0.820153 -0.572078 -0.00874084, 0.828528 -0.559892 0.00792426, 0.77261 -0.634695 -0.0153555, 0.815796 -0.578189 0.0131979, + 0.795209 -0.605552 -0.0308054, 0.784333 -0.62034 0, 0.851104 -0.523481 -0.0398615, 0.789008 -0.614374 0.00314698, + 0.81367 -0.581304 -0.00514617, 0.835983 -0.54821 -0.0244565, 0.822782 -0.567429 -0.0324574, 0.798719 -0.601704 0, + 0.870507 -0.488554 -0.0594372, 0.797453 -0.60321 0.0143675, 0.810479 -0.585692 0.00939601, 0.838161 -0.545114 -0.0183775, + 0.8027 -0.596348 -0.00642658, 0.805424 -0.591801 0.0326039, 0.829858 -0.557264 0.0281561, 0.0544314 0.0918546 0.994284, + 0.0544311 0.0919151 0.994278, 0.0544312 0.0919 0.99428, 0.514033 0.505845 0.692742, 0.394743 0.572901 0.718305, + 0.393158 0.447769 0.803075, 0.403393 0.677886 0.614609, 0.407147 0.687758 0.601016, 0.340676 0.465382 0.81692, + 0.244919 0.3424 0.90707, 0.357506 0.363236 0.860377, 0.392568 0.452596 0.800655, 0.43165 0.600481 0.673128, + -0.509608 -0.860407 0, 2.60762e-007 -3.89487e-008 1, 2.60113e-007 -3.79026e-008 1, 2.6141e-007 -3.99948e-008 1, + -0.0235631 -0.0397635 -0.998931, -0.0470953 -0.0795532 -0.995718, 0 0 -1, -0.113186 -0.191007 -0.975041, + -0.0705224 -0.119049 -0.990381, -0.134402 -0.191785 -0.972191, -0.394639 -0.586383 -0.7074, -0.374348 -0.320272 -0.870224, + -0.489272 -0.607276 -0.625962, -0.261053 -0.319539 -0.910904, -0.124068 -0.209491 -0.969908, -0.190989 -0.515594 -0.835276, + -0.429008 -0.719025 -0.546769, -0.383306 -0.709005 -0.591936, -0.535983 -0.57609 -0.617124, -0.46383 -0.626552 -0.626334, + 0.481128 0.804418 -0.348465, 0.506239 0.848841 -0.152286, 0.460833 0.769325 -0.442462, 0.491713 0.72607 -0.480667, + 0.587526 0.768716 -0.252762, 0.598538 0.781189 -0.177474, 0.506359 0.719972 -0.474595, 0.667619 0.685685 -0.290036, + 0.340918 0.470215 -0.814047, 0.218616 0.255189 -0.941852, 0.422575 0.356728 -0.833172, 0.144369 0.222666 -0.964146, + 0.012218 0.0285826 -0.999517, -0.40379 -0.393914 -0.825703, -0.150026 -0.200002 -0.968241, -0.190863 -0.260922 -0.946304, + 0.00371916 0.0107097 -0.999936, -0.428061 -0.492248 -0.757928, 0.395666 0.66125 -0.637335, 0.128991 0.217893 -0.967411, + 0.251818 0.425374 -0.869278, -0.017194 -0.0290415 -0.99943, -0.220016 -0.36827 -0.903311, -0.453199 -0.592741 -0.665784, + -0.354313 -0.590699 -0.724939, 0.514365 0.857327 0.020451, 0.494996 0.82759 0.264715, 0.151017 0.127488 0.980276, + 0.133371 0.138289 0.981371, 0.237856 0.197808 0.950945, 0.248314 0.336578 0.908326, 0.42175 0.628157 0.65387, + 0.449889 0.749709 0.48532, 0.403097 0.562392 0.721961, 0.558522 0.702387 0.441255, 0.0975141 0.163037 0.981789, + 0.272678 0.457408 0.846419, 0.351225 0.584646 0.731321, 0.588296 0.683125 0.432722, 0.581302 0.76857 0.267186, + 0.667725 0.744408 0, -0.179992 -0.262244 -0.948067, -0.121348 -0.162638 -0.979195, -0.145992 -0.123246 -0.981579, + -0.197425 -0.328973 -0.923472, -0.344655 -0.573593 -0.743104, -0.627848 -0.645496 -0.434905, -0.3998 -0.590457 -0.701085, + -0.654146 -0.751253 -0.0878137, -0.590632 -0.743447 -0.313753, -0.109683 -0.18159 -0.977238, -0.225626 -0.376587 -0.898485, + -0.347416 -0.586858 -0.731369, -0.54156 -0.749075 -0.381574, -0.599089 -0.793499 -0.107016, -0.69874 -0.712213 -0.067198, + -0.650807 -0.752421 0.101552, -0.618615 -0.785536 0.0157975, -0.604866 -0.794446 0.0547032, -0.505378 -0.83855 0.203538, + -0.532871 -0.783764 0.319002, -0.457317 -0.656003 0.600434, -0.466583 -0.780467 0.416139, -0.425574 -0.710681 0.560196, + -0.365045 -0.499548 0.785617, -0.449292 -0.379475 0.808786, -0.216056 -0.258018 0.941672, -0.0124436 -0.0202193 0.999718, + -0.138248 -0.230733 0.963146, 0.201454 0.260886 0.944116, 0.141623 0.234121 0.961837, 0.408062 0.404313 0.818546, + 0.0158946 0.022064 0.99963, 0.48221 0.60894 0.629814, 0.370473 0.482531 0.793671, -0.416605 -0.685748 0.596816, + -0.133047 -0.188567 0.973006, -0.275332 -0.458003 0.845237, 0.0370394 0.0546449 0.997819, 0.200028 0.3349 0.920777, + 0.321511 0.536043 0.78057, 0.350183 0.587466 0.729559, 0.388301 0.655913 0.647302, 0.826775 -0.56246 -0.00908462, + 0.825415 -0.564416 -0.0111418, 0.827354 -0.56164 0.00681982, 0.825417 -0.564414 0.0111521, 0.828012 -0.560472 -0.0163622, + 0.826602 -0.562787 8.61853e-005, 0.826682 -0.562376 -0.0181873, 0.826682 -0.562373 0.018274, 0.827716 -0.560772 0.020526, + -0.152922 -0.207995 0.966102, -0.171982 -0.192204 0.966168, -0.133768 -0.223659 0.965444, -0.666819 -0.74522 1.24329e-006, + -0.666817 -0.745221 2.48657e-006, -0.153068 -0.207563 -0.966172, -0.174421 -0.194926 -0.965185, 0.133825 0.22441 0.965262, + 0.1336 0.224689 0.965228, 0.13405 0.224131 0.965296, 0.511077 0.859535 0, 0.133206 0.223372 -0.965589, + 0.133533 0.223266 -0.965568, 0.13288 0.223478 -0.965609, 0.13399 0.22403 -0.965328, 0.133989 0.22403 -0.965328, + 0.133991 0.22403 -0.965327, 0.13337 0.222993 0.965653, 0.133371 0.222993 0.965653, 0.822684 -0.568389 -0.0111918, + 0.821352 -0.570421 0, 0.827718 -0.561111 -0.0060917, 0.832843 -0.553509 -0.000330088, 0.828363 -0.560079 -0.0111921, + 0.832931 -0.553376 -0.000495133, 0.833196 -0.552977 0.0009923, 0.355355 0.597053 0.719201, 0.354351 0.598279 0.718678, + 0.356357 0.595826 0.719723, -8.52808e-007 4.69264e-007 -1, -1.60166e-006 1.11234e-006 -1, -1.03955e-007 -1.73812e-007 -1, + 9.16732e-008 1.24697e-007 1, 1.03097e-007 1.15218e-007 1, 8.0249e-008 1.34176e-007 1, -0.417507 -0.571766 -0.706237, + -0.465331 -0.52004 -0.716258, -0.367569 -0.620598 -0.692641, 0.355354 0.597053 -0.719201, 0.35435 0.59828 -0.718677, + 0.356357 0.595825 -0.719723, 0.833724 -0.550676 0.0407511, 0.834844 -0.549906 -0.025263, 0.83423 -0.551307 0.0109783, + 0.826226 -0.563306 -0.00617566, 0.822218 -0.567194 0.0474102, 0.833283 -0.55216 -0.0275487, 0.83263 -0.552521 -0.0380505, + 0.828707 -0.558925 -0.0291074, 0.819656 -0.572483 0.0206954, 0.812908 -0.582392 0, 0 -0.533483 -0.845811, + -2.0908e-008 -0.277659 -0.96068, 0.821513 -0.569703 0.0235537, 0.828882 -0.559045 0.0205682, 0.819228 -0.573366 0.0108345, + 0.808017 -0.588051 -0.0361343, 0.8119 -0.583796 0, 0.792225 -0.608852 -0.0409761, 0.821059 -0.568908 0.0469655, + 0.809612 -0.586934 0.00602028, 0.814965 -0.578451 0.0350189, 0.798343 -0.602084 -0.0119831, 0.808893 -0.585304 -0.0557802, + 0.824179 -0.565874 -0.0227036, 0.828196 -0.558583 -0.0455567, 0.823145 -0.56773 0.0107098, 4.05558e-008 6.86109e-008 1, 0 0 1, + 3.009e-008 5.15881e-008 1, 6.08337e-008 1.02916e-007 1, 6.14874e-008 1.02657e-007 1, 0.51108 0.859533 0, + 0.510572 0.857441 0.0641172, 0.506833 0.852398 0.128599, -0.504468 -0.842179 0.190388, -0.511085 -0.857137 0.0641003, + -0.486057 -0.812988 0.320624, -0.473183 -0.792311 0.385151, -0.365891 -0.612785 0.700441, -0.509095 -0.851162 0.12785, + -0.457911 -0.767994 0.447775, -0.378509 -0.634153 0.674226, -0.225105 -0.356827 0.906644, -0.199886 -0.330769 0.9223, + -0.0308885 -0.0511543 0.998213, 0.187144 0.265016 0.945909, -0.00385075 -0.00702867 0.999968, 0.386731 0.587943 0.710466, + 0.34318 0.576215 0.741758, 0.45759 0.768329 0.44753, 0.235894 0.30879 0.921414, 0.471081 0.793425 0.385433, + -0.345515 -0.575181 0.741476, 0.0490451 0.0379975 0.998074, -0.169656 -0.286066 0.943071, 0.294672 0.32457 0.89879, + 0.376282 0.635608 0.674102, 0.483483 0.814174 0.321504, 0.501002 0.843816 0.19228, -2.50929e-007 5.75689e-008 -1, + -4.61685e-007 1.82207e-007 -1, 0.513841 0.857886 0, 4.58271e-007 -1.84218e-007 1, 4.56964e-007 -1.82704e-007 1, + 4.59577e-007 -1.85732e-007 1, -0.51329 -0.858215 1.57379e-006, -0.578695 -0.810911 -0.0868035, -0.511157 -0.85903 -0.0280438, + 0.512234 0.856808 -0.0591353, 0.509182 0.860111 -0.0307089, 0.511033 0.857594 -0.058113, 0.3629 0.60865 -0.705584, + 0.396368 0.656546 -0.641748, 0.391707 0.657342 -0.643791, 0.423892 0.554836 -0.715872, 0.511085 0.857682 -0.0563405, + 0.509223 0.860177 -0.028046, 0.548737 0.728318 -0.410416, 0.231443 0.390953 -0.890837, 0.0301921 0.0510931 -0.998237, + 0.232843 0.301105 -0.924727, -0.190971 -0.270621 -0.943554, -0.00466181 -0.00847081 -0.999953, -0.513556 -0.85594 -0.0602239, + -0.512232 -0.856806 -0.0591738, -0.563967 -0.734616 -0.377201, -0.348311 -0.582341 -0.734546, -0.392876 -0.657142 -0.643283, + -0.328976 -0.555538 -0.763644, -0.21792 -0.367981 -0.903936, 0.160941 0.267099 -0.950135, 0.471155 0.465799 -0.749029, + 0.0142665 0.0238889 -0.999613, -0.198488 -0.332421 -0.922008, -0.468056 -0.588555 -0.659186, -0.707225 -0.597024 -0.378676, + 0.509424 0.860516 0, 0.806813 -0.590489 0.0193778, 0.825056 -0.564755 0.0182703, 0.815511 -0.577906 0.0310878, + 0.828849 -0.559023 -0.0224026, 0.828278 -0.558638 0.043359, 0.8224 -0.568865 0.00712002, 0.832963 -0.553284 0.00708213, + 0.840398 -0.541838 0.0119101, 0.839257 -0.543538 0.0146211, 0.842497 -0.538697 -0.00218617, 0.835897 -0.547904 -0.0328254, + 0.828437 -0.558088 -0.0472221, 0.842582 -0.538503 -0.00833366, 0.838283 -0.545145 -0.00987941, 0.840849 -0.541265 -0.00219773, + 0.805776 -0.590647 -0.0431349, 0.796202 -0.604355 -0.0285973, 0.830405 -0.55716 0, 0.839069 -0.544004 0.00476955, + 0.808875 -0.587471 -0.024465, 0.796311 -0.604594 0.0188697, 0.848152 -0.529753 0, 0.789729 -0.613024 0.0229961, + 0.815856 -0.577588 0.0277839, 0.812246 -0.582905 -0.0218652, 0.83301 -0.552924 0.0192235, 0.791199 -0.600468 0.11594, + 0.786125 -0.612145 0.0853558, 0.792273 -0.609627 0.0256476, 0.788566 -0.614667 -0.0186726, 0.80283 -0.596208 0, + 0.8406 -0.540962 -0.0274333, 0.814542 -0.579595 -0.0242982, 0.772365 -0.635167 0.00397834, 0.80348 -0.595305 -0.00562421, + 0.819645 -0.572596 -0.0177927, 0.793615 -0.608421 -0.00038825, 0.807513 -0.589847 0.00177821, 0.822611 -0.568579 0.00541472, + 0.498334 0.727619 0.471416, 0.484312 0.606911 0.63016, 0.485639 0.702304 0.520503, 0.472223 0.640947 0.605139, + 0.497686 0.82922 0.254369, 0.500029 0.82744 0.255566, 0.393679 0.598634 0.697606, 0.125375 0.169473 0.977527, + 0.198118 0.328797 0.923386, 0.123201 0.189753 0.974072, 0.23411 0.387402 0.891691, 0.188449 0.31465 0.930313, + 0.302842 0.392541 0.868446, 0.104871 0.173623 0.979213, 0.061529 0.0798528 0.994906, 0.0515912 0.0854559 0.995005, + -0.667729 -0.744405 0, 0.513839 0.857887 -2.39336e-007, 0.513841 0.857886 -4.78671e-007, 0.513837 0.857888 0, + -2.56464e-007 3.82712e-008 -1, -0.025759 -0.0426665 -0.998757, -0.0197423 -0.101818 -0.994607, -2.61279e-007 3.89897e-008 -1, + -0.339794 -0.559474 -0.755995, -0.359089 -0.596735 -0.717609, -0.406736 -0.677981 -0.612297, -0.3398 -0.5211 -0.782937, + -0.107824 -0.233911 -0.966261, -0.198369 -0.413158 -0.888791, -0.23736 -0.396202 -0.886952, -0.411143 -0.59946 -0.686738, + -0.311451 -0.43357 -0.845586, -0.126931 -0.211887 -0.969016, -0.0613434 -0.0796492 -0.994934, -0.404299 -0.679105 -0.612665, + -0.40795 -0.679062 -0.610289, -0.32772 -0.548931 -0.768944, -0.382384 -0.641274 -0.665244, -0.157616 -0.262407 -0.951998, + -0.295343 -0.497017 -0.815933, -0.222552 -0.272369 -0.936101, -0.339389 -0.451806 -0.825037, -0.0429045 -0.0512413 -0.997764, + 0.134559 0.227294 -0.964485, -0.0292878 -0.0494733 -0.998346, 0.172711 0.289173 -0.941568, 0.31024 0.523692 -0.793409, + 0.473651 0.789365 -0.390586, 0.39259 0.662956 -0.637466, 0.403663 0.677184 -0.615205, 0.329265 0.550779 -0.76696, + 0.487387 0.81779 -0.30606, 0.511145 0.859187 -0.0229921, -0.225819 -0.211237 -0.950991, 0.210522 0.348522 -0.913353, + 0.015468 0.0256596 -0.999551, 0.345689 0.576489 -0.740378, 0.410618 0.693171 -0.592374, 0.508785 0.85944 -0.0500086, + 0.496781 0.839168 -0.221374, 0.509262 0.860248 -0.025012, 0.509191 0.860122 0.0302379, 0.509244 0.860208 0.0266894, + 0.511025 0.857581 0.0583759, 0.501354 0.836164 0.222429, 0.487534 0.818165 0.304823, 0.341312 0.57507 0.743505, + 0.206808 0.34538 0.915392, 0.385 0.645431 0.659692, 0.164253 0.274296 0.947514, 0.100141 0.165874 0.981049, + 0.470725 0.794899 0.382822, 0.354083 0.597537 0.719426, 0.178898 0.301572 0.936509, 0.0993541 0.166193 0.981075, + 0.0991036 0.165944 0.981143, 0.514769 0.857329 0, -0.492071 -0.814547 -0.307213, -0.503164 -0.838346 -0.209767, + -0.513184 -0.855399 -0.0702413, -0.479559 -0.802531 -0.354919, -0.40294 -0.669227 -0.624319, -0.219752 -0.368876 -0.903128, + -0.414664 -0.561788 -0.715854, -0.0925194 -0.154757 -0.983611, -0.169207 -0.285202 -0.943413, -0.505784 -0.85114 -0.14051, + -0.534804 -0.723337 -0.436771, -0.553162 -0.466975 -0.689889, -0.23921 -0.301562 -0.922951, -0.0923317 -0.154496 -0.98367, + -0.0922085 -0.154398 -0.983697, -0.510595 -0.856299 0.0777532, -0.605339 -0.7894 0.102043, 0.468229 0.617583 0.631944, + 0.344286 0.581572 0.737049, 0.374841 0.488114 0.788187, 0.211785 0.243471 0.946504, 0.286411 0.483329 0.827262, + 0.225625 0.289828 0.930104, 0.0278021 0.0305967 0.999145, 0.016398 0.0271616 0.999497, -0.129313 -0.21506 0.968002, + -0.276663 -0.465334 0.840786, -0.157614 -0.264681 0.951368, -0.457377 -0.666142 0.589119, -0.378491 -0.63935 0.66931, + -0.661833 -0.678122 0.319575, -0.293001 -0.494712 0.818175, -0.584055 -0.766467 0.267222, 0.141988 0.239243 0.960522, + -0.185614 -0.313234 0.93136, -0.0182592 -0.0308776 0.999356, -0.309808 -0.52301 0.794027, -0.44467 -0.751141 0.48791, + -0.490781 -0.828759 0.268873, -0.498064 -0.835565 0.231869, 0.806823 -0.590474 0.0194212, 0.815517 -0.577899 0.0310663, + 0.828851 -0.559025 -0.0223077, 0.828278 -0.558638 0.0433591, 0.822395 -0.568873 0.00711892, 0.832961 -0.553286 0.00710978, + 0.84038 -0.541865 0.0119508, 0.839254 -0.543543 0.0146554, 0.84248 -0.538724 -0.00219642, 0.83589 -0.547921 -0.032723, + 0.828442 -0.5581 -0.0469917, 0.842573 -0.538518 -0.0083187, 0.83829 -0.545134 -0.00989763, 0.840858 -0.541251 -0.00234272, + 0.805638 -0.590819 -0.0433684, 0.796047 -0.60455 -0.0288021, 0.829646 -0.55757 0.0283222, 0.821577 -0.570062 0.00636744, + 0.799926 -0.599964 0.0127395, 0.839046 -0.544039 0.00474854, 0.808711 -0.587688 -0.0246912, 0.796334 -0.604564 0.0188139, + 0.831038 -0.555317 -0.0316108, 0.828461 -0.559717 0.0192226, 0.840928 -0.541139 -0.00285631, 0.802356 -0.596841 -0.00216599, + 0.772406 -0.635114 -0.00432706, 0.798478 -0.602024 0, 0.871765 -0.485988 -0.0619747, 0.103154 -0.877891 0.467618, + 0.840659 -0.540867 -0.0275019, 0.814642 -0.579451 -0.0243968, 0.772426 -0.635092 0.00394039, 0.80348 -0.595305 -0.00562985, + 0.819705 -0.572506 -0.0178846, 0.789316 -0.613983 0.00208398, 0.0552366 0.0914941 0.994272, 0.0658746 0.0854944 0.994159, + 0.0873346 0.14455 0.985636, 0.133151 0.21056 0.968471, 0.485648 0.702968 0.519598, 0.264843 0.357238 0.895678, + 0.381825 0.655692 0.651366, 0.185342 0.31051 0.932326, 0.146452 0.210152 0.966637, 0.166564 0.281361 0.945036, + 0.192922 0.469936 0.86136, 0.496511 0.830106 0.253774, 0.423039 0.735937 0.528616, -0.0179811 -0.029784 -0.999395, + -0.0519151 -0.0636925 -0.996618, -0.102303 -0.169455 -0.980214, -0.0642329 -0.0834021 -0.994444, -0.133881 -0.21262 -0.96792, + -0.32787 -0.543485 -0.772739, -0.28221 -0.408159 -0.868196, -0.415202 -0.630729 -0.655583, -0.235394 -0.394165 -0.888383, + -0.155107 -0.25959 -0.953182, -0.240609 -0.476697 -0.845498, -0.356625 -0.59623 -0.719256, -0.339906 -0.643441 -0.685891, + -0.414255 -0.69062 -0.592821, -0.395755 -0.665848 -0.632475, 0.496954 0.83946 -0.219874, 0.509264 0.86025 -0.0249059, + 0.50879 0.859449 -0.0497966, 0.403924 0.678868 -0.613175, 0.48774 0.818382 -0.303909, 0.511146 0.859189 -0.0228946, + 0.409381 0.688395 -0.598765, 0.474248 0.790365 -0.387831, 0.334316 0.56004 -0.758016, 0.208347 0.344921 -0.915217, + 0.328509 0.544144 -0.772003, 0.171513 0.287149 -0.942406, 0.0160916 0.0266915 -0.999514, -0.337646 -0.44962 -0.826945, + -0.226691 -0.212451 -0.950513, -0.20569 -0.261037 -0.94316, -0.0303416 -0.026865 -0.999179, -0.294077 -0.494892 -0.81768, + 0.393059 0.663749 -0.63635, 0.134367 0.226971 -0.964588, 0.307924 0.519782 -0.796875, -0.0605826 -0.10038 -0.993103, + -0.171249 -0.28411 -0.943374, -0.381395 -0.639616 -0.667405, -0.326547 -0.546962 -0.770844, 0.509244 0.860208 0.0266895, + 0.097463 0.163189 0.981769, 0.0977085 0.163438 0.981703, 0.151398 0.25506 0.954999, 0.179079 0.299812 0.93704, + 0.368546 0.619013 0.693539, 0.470966 0.795306 0.381679, 0.322482 0.544208 0.774496, 0.495459 0.830475 0.254621, + 0.098483 0.163124 0.981678, 0.2063 0.344533 0.915826, 0.353707 0.597469 0.719668, 0.489045 0.818005 0.302824, + 0.511025 0.857581 0.058376, -0.171588 -0.289377 -0.941711, -0.0930098 -0.155629 -0.983427, -0.0928875 -0.155528 -0.983455, + -0.222132 -0.312966 -0.923423, -0.463504 -0.481863 -0.743621, -0.534485 -0.72299 -0.437734, -0.434624 -0.598408 -0.67306, + -0.508618 -0.854511 -0.105449, -0.484459 -0.811535 -0.326666, -0.0931981 -0.155892 -0.983368, -0.220329 -0.369845 -0.902591, + -0.374506 -0.623409 -0.686372, -0.482778 -0.800214 -0.355785, -0.503164 -0.838346 -0.209768, -0.512173 -0.852387 -0.105428, + -0.583343 -0.808666 0.0759628, -0.508105 -0.853434 0.116106, -0.498211 -0.83581 0.230668, -0.490834 -0.828849 0.268499, + -0.584015 -0.766433 0.267406, -0.422673 -0.713839 0.558374, -0.661663 -0.677868 0.320462, -0.478541 -0.680748 0.554599, + -0.300539 -0.507478 0.807553, -0.293353 -0.495051 0.817844, -0.185349 -0.312789 0.931563, -0.0179636 -0.0303787 0.999377, + -0.157201 -0.263988 0.951629, 0.205262 0.267382 0.941475, 0.141434 0.238312 0.960835, 0.286585 0.483623 0.827029, + 0.00719883 0.0123062 0.999898, 0.48456 0.607209 0.629681, 0.375131 0.4885 0.78781, -0.378584 -0.639508 0.669106, + -0.128744 -0.214116 0.968287, -0.276845 -0.465641 0.840557, 0.0557952 0.0502342 0.997178, 0.254007 0.272452 0.928036, + 0.344595 0.582094 0.736492, 0.468697 0.618198 0.630994, 0.472411 0.641267 0.604652, 0.828839 -0.559017 -0.0229287, + 0.815583 -0.578143 0.02397, 0.816737 -0.57701 3.40761e-005, 0.817245 -0.57629 -7.93896e-005, 0.827011 -0.559936 -0.0502517, + 0.827503 -0.558141 -0.0609733, 0.839034 -0.54353 -0.0244458, 0.830682 -0.555755 0.0332324, 0.817862 -0.57383 -0.0426675, + 0.824372 -0.566048 0.000821569, 0.813477 -0.581256 -0.0199147, 0.808749 -0.588154 0.000495368, 0.830911 -0.556007 0.021064, + 0.820342 -0.571251 -0.0266783, 0.824111 -0.566017 -0.0215987, 0.843718 -0.536778 -0.00304098, 0.846953 -0.531662 0.00254046, + 0.82769 -0.559762 -0.0399476, 0.816613 -0.576804 -0.0209765, 0.810067 -0.58453 -0.046016, 0.833816 -0.55017 -0.0454243, + 0.787656 -0.615924 0.0153585, 0.780933 -0.624614 -0.00100842, 0.766555 -0.642178 0.00106452, 0.8222 -0.568743 0.0227728, + 0.83034 -0.557117 -0.0125354, 0.81937 -0.573141 -0.011959, 0.82374 -0.566838 -0.012084, 0.803757 -0.59494 0.00460792, + 0.814322 -0.580192 0.0159969, 0.806252 -0.591447 -0.0121372, 0.806478 -0.591219 -0.00730037, 0.829771 -0.557698 0.0212917, + 0.808281 -0.588512 0.0183252, 0.82694 -0.561959 0.0193128, 0.815942 -0.578103 0.00591103, 0.810414 -0.585777 -0.00971758, + 0.81302 -0.581716 0.0245961, 0.806245 -0.590158 0.0410304, 0.813547 -0.57869 0.0570807, 0.804148 -0.594176 0.0173353, + -4.01698e-008 -6.70657e-008 -1, -4.01502e-008 -6.70819e-008 -1, -4.01307e-008 -6.70981e-008 -1, -0.506193 -0.850193 0.144711, + -0.51311 -0.858089 0.0200513, 0.303516 0.392867 0.868063, 0.218682 0.3694 0.903173, 0.280573 0.298363 0.912282, + 0.233302 0.303975 0.923672, 0.0668193 0.0689937 0.995377, 0.274507 0.458705 0.845125, 0.164713 0.276815 0.946701, + 0.0554283 0.0930008 0.994122, -0.104548 -0.140645 0.984525, -0.0872042 -0.147311 0.985238, -0.303252 -0.298712 0.904881, + -0.36921 -0.491252 0.788895, -0.275388 -0.356059 0.892963, -0.522478 -0.684792 0.508012, -0.590926 -0.607476 0.530828, + -0.567204 -0.750703 0.338711, -0.383562 -0.551732 0.740589, -0.584505 -0.759831 0.284623, 0.0205432 0.0340407 0.999209, + -0.232693 -0.38926 0.891252, -0.139041 -0.230725 0.963033, -0.392703 -0.659169 0.641312, -0.537149 -0.691657 0.482785, + -0.672158 -0.699462 0.24281, -0.60291 -0.78725 0.129375, 0.601291 0.791242 0.111287, 0.512928 0.855524 0.0705895, + 0.665588 0.703212 0.249969, 0.624298 0.735365 0.263609, 0.588439 0.583609 0.559589, 0.515333 0.856436 0.0308072, + 0.487189 0.807189 0.333306, 0.510188 0.645201 0.568703, 0.343602 0.509817 0.788685, 0.323263 0.546059 0.772865, + 0.180486 0.304703 0.93519, 0.0322399 0.0543649 0.998001, 0.157876 0.265058 0.95122, -0.150125 -0.250718 0.956349, + -0.125079 -0.210901 0.969472, -0.269422 -0.448675 0.852117, 0.00473061 0.00796786 0.999957, -0.357443 -0.597885 0.717473, + -0.292081 -0.488778 0.822061, 0.395776 0.664309 0.634078, 0.133572 0.225631 0.965013, 0.27622 0.459691 0.84403, + -0.0232578 -0.0384207 0.998991, -0.173811 -0.290177 0.941056, -0.314719 -0.527114 0.789369, -0.356629 -0.598085 0.717711, + -0.360641 -0.596783 0.71679, 1.00624e-006 -1.50162e-007 1, 2.01249e-006 -3.00323e-007 1, 0.511077 0.859074 -0.0281569, + 0.509183 0.860113 -0.0306286, -0.515621 -0.854942 -0.0566545, -0.619312 -0.784874 -0.0206368, -0.607385 -0.791822 -0.0640444, + -0.346952 -0.581206 -0.736087, -0.398523 -0.654358 -0.642647, -0.506792 -0.732614 -0.454354, -0.470465 -0.57993 -0.665089, + -0.23296 -0.336173 -0.912533, -0.0409054 -0.069024 -0.996776, -0.211718 -0.357281 -0.909684, 2.32047e-005 1.04418e-005 -1, + 0.181394 0.306188 -0.934529, 0.391832 0.655394 -0.645698, 0.328769 0.555202 -0.763977, 0.346669 0.58157 -0.735933, + 0.212839 0.35703 -0.909521, 0.511039 0.857603 -0.0579378, 0.516152 0.854956 -0.0513522, -0.328988 -0.356864 -0.874308, + 0.0418904 0.0693873 -0.99671, -0.145444 -0.245614 -0.958394, 0.2425 0.404772 -0.881677, 0.392129 0.65784 -0.643025, + 0.360676 0.608872 -0.706532, 0.508467 0.858902 -0.0612287, 0.508464 0.858904 -0.0612284, 0.390019 0.658824 -0.643301, + -0.668811 -0.743432 0, 0.580371 0.80779 -0.103176, 0.504889 0.848387 -0.159141, -0.569349 -0.737649 -0.362927, + -0.701006 -0.712606 -0.027987, -0.58903 -0.771183 -0.241496, -0.449181 -0.526467 -0.721851, -0.504005 -0.750718 -0.427084, + -0.556406 -0.802986 -0.213602, -0.46343 -0.5912 -0.660087, -0.46683 -0.781715 -0.413511, -0.258029 -0.309823 -0.915112, + -0.0496583 -0.0823579 -0.995365, -0.212505 -0.351651 -0.911693, -0.0189615 -0.00713407 -0.999795, 0.161107 0.271692 -0.948803, + 0.635598 0.64822 -0.419317, 0.332728 0.553995 -0.763139, 0.413556 0.595374 -0.68884, 0.19865 0.3315 -0.922305, + 0.563863 0.743143 -0.360274, -0.397041 -0.533791 -0.74661, 0.030659 0.0507334 -0.998242, -0.241382 -0.229385 -0.94293, + 0.233346 0.389589 -0.890938, 0.409638 0.69171 -0.594755, 0.486259 0.815492 -0.313887, 0.474634 0.801241 -0.36433, + 0.806258 -0.590143 0.040993, 0.804145 -0.59418 0.0173545, 0.813563 -0.578681 0.0569528, 0.806498 -0.591191 -0.00734934, + 0.81305 -0.581678 0.0244812, 0.806244 -0.59146 -0.0120414, 0.808279 -0.588514 0.0183228, 0.82976 -0.557716 0.0212619, + 0.810404 -0.58579 -0.00972719, 0.82694 -0.56196 0.0192964, 0.815941 -0.578105 0.00590796, 0.822218 -0.568717 0.0227651, + 0.814293 -0.580231 0.0160681, 0.803734 -0.59497 0.00468479, 0.81937 -0.57314 -0.011971, 0.82374 -0.566838 -0.012096, + 0.82411 -0.566016 -0.0216202, 0.820331 -0.571261 -0.026782, 0.824363 -0.566061 0.000737702, 0.817829 -0.573869 -0.0427814, + 0.830682 -0.555755 0.033232, 0.830936 -0.555971 0.02102, 0.816737 -0.57701 3.41118e-005, 0.7665 -0.642243 0.00104827, + 0.787655 -0.615926 0.0153588, 0.780908 -0.624645 -0.00100656, 0.808755 -0.588146 0.000464026, 0.81349 -0.581236 -0.0199845, + 0.816559 -0.576879 -0.0210308, 0.810087 -0.584502 -0.0460105, 0.833859 -0.550105 -0.0454262, 0.827769 -0.55965 -0.0398864, + 0.843757 -0.536717 -0.00299376, 0.846945 -0.531675 0.0025176, 0.817245 -0.57629 -7.94671e-005, 0.826998 -0.559959 -0.0501941, + 0.827481 -0.558177 -0.0609378, 0.839011 -0.543564 -0.024466, 0.82884 -0.559017 -0.0228729, 0.815583 -0.578143 0.0239939, + -8.81337e-008 -1.26956e-007 -1, -7.53307e-008 -1.34288e-007 -1, -1.00937e-007 -1.19624e-007 -1, -0.489073 -0.871841 0.0264726, + -0.493945 -0.869287 0.0189225, -0.500441 -0.865679 0.012616, -0.508475 -0.861069 0.00379044, -0.51311 -0.85809 0.0200024, + -0.506217 -0.850234 0.14438, 0.303515 0.392865 0.868064, 0.218681 0.369398 0.903174, 0.280572 0.298362 0.912283, + 0.233302 0.303974 0.923672, 0.0662406 0.0680096 0.995483, 0.274506 0.458704 0.845126, 0.0549627 0.0922223 0.99422, + -0.104587 -0.140946 0.984477, -0.0872449 -0.14738 0.985225, -0.302784 -0.298033 0.905261, -0.36966 -0.491679 0.788418, + -0.275191 -0.355799 0.893128, -0.522102 -0.684277 0.509092, -0.59048 -0.606949 0.531926, -0.567063 -0.750514 0.339363, + -0.383591 -0.551894 0.740453, -0.584429 -0.759707 0.285111, 0.0197514 0.0327297 0.999269, -0.232846 -0.389522 0.891098, + -0.138535 -0.229884 0.963308, -0.392594 -0.658989 0.641564, -0.536825 -0.691191 0.483811, -0.672132 -0.699476 0.242842, + -0.602928 -0.787285 0.129074, 0.601291 0.791242 0.111286, 0.512928 0.855524 0.0705892, 0.665588 0.703213 0.249969, + 0.588641 0.583847 0.559128, 0.515333 0.856436 0.0308071, 0.510355 0.645396 0.568332, 0.343422 0.509418 0.789021, + 0.322931 0.545499 0.773399, 0.1796 0.303207 0.935847, 0.0327886 0.0552836 0.997932, 0.1572 0.263924 0.951647, + -0.149674 -0.249958 0.956618, -0.124229 -0.209472 0.969891, -0.269833 -0.449363 0.851624, 0.00556066 0.00936589 0.999941, + -0.357443 -0.597884 0.717474, -0.292378 -0.489273 0.821661, 0.396023 0.664721 0.633492, 0.133122 0.224871 0.965252, + 0.275577 0.458612 0.844827, -0.0221389 -0.0365494 0.999087, -0.173741 -0.29007 0.941102, -0.314905 -0.527427 0.789086, + -0.356629 -0.598085 0.717712, -0.36064 -0.596782 0.716791, 0.5528 0.83017 0.072317, 0.570912 0.813789 0.108664, + 0.628355 0.744686 0.224974, 0.509623 0.860391 -0.00333141, 0.580358 0.807766 -0.10343, 0.504857 0.848334 -0.159528, + -0.56928 -0.737544 -0.363248, -0.716929 -0.695874 -0.0421056, -0.588955 -0.771057 -0.242081, -0.44967 -0.527044 -0.721125, + -0.503916 -0.750575 -0.427441, -0.587955 -0.792728 -0.160905, -0.463766 -0.59158 -0.659511, -0.466775 -0.781622 -0.413749, + -0.258726 -0.310641 -0.914638, -0.213019 -0.352501 -0.911244, 0.16145 0.272272 -0.948579, 0.635575 0.648197 -0.419387, + 0.3333 0.554952 -0.762194, 0.413938 0.596031 -0.688042, 0.199168 0.332363 -0.921882, 0.563803 0.743051 -0.360557, + -0.397725 -0.534572 -0.745686, -0.241896 -0.229824 -0.942692, 0.234019 0.390713 -0.890269, 0.409853 0.692073 -0.594184, + 0.486133 0.815281 -0.314629, 0.474537 0.801077 -0.364816, 0.511538 0.85844 -0.0375405, 0.509316 0.860337 -0.0204177, + -0.569162 -0.821348 -0.0379855, 0.508464 0.858904 -0.0612276, 0.508467 0.858902 -0.0612278, 0.361193 0.609745 -0.705514, + 0.390017 0.658821 -0.643305, 0.392127 0.657837 -0.64303, 0.34749 0.582947 -0.734455, 0.511039 0.857603 -0.0579369, + 0.39183 0.655391 -0.645702, 0.242941 0.405524 -0.881209, 0.0408216 0.067617 -0.996876, 0.212485 0.356438 -0.909836, + -0.144063 -0.243283 -0.959197, -0.0171058 -0.0288904 -0.999436, -0.58798 -0.786534 -0.188794, -0.513342 -0.85644 -0.0546934, + -0.443261 -0.569733 -0.692043, -0.241697 -0.327487 -0.913419, -0.331192 -0.359367 -0.872449, 0.180197 0.304166 -0.935421, + 0.516152 0.854956 -0.0513515, 0.329906 0.557121 -0.762088, -3.90121e-005 -5.82617e-005 -1, -0.21132 -0.356785 -0.909972, + -0.390611 -0.653541 -0.648311, -0.363327 -0.607417 -0.706426, -0.519137 -0.852402 -0.0625128, -0.398521 -0.654355 -0.642651, + 0.819216 -0.573273 0.0155825, 0.82125 -0.570569 0, 0.811719 -0.584022 -0.00553669, 0.809224 -0.587428 -0.00919178, + 0.81064 -0.585337 0.0155834, 0.811787 -0.583791 -0.0137911, 0.8193 -0.572788 0.0257374, -7.56307e-007 3.9953e-007 -1, + -1.4061e-006 9.76895e-007 -1, -1.06516e-007 -1.77835e-007 -1, 0.552787 0.830161 -0.0725153, 0.509623 0.860391 0.00334093, + 0.570888 0.813766 -0.108962, 0.628264 0.744578 -0.225585, 1.00937e-007 1.19624e-007 1, 8.81337e-008 1.26956e-007 1, + 7.53308e-008 1.34288e-007 1, -0.508475 -0.861068 -0.00380128, -0.500441 -0.865678 -0.0126521, -0.493945 -0.869286 -0.0189766, + -0.489072 -0.871839 -0.0265482, -0.420067 -0.56781 -0.707909, -0.481432 -0.536543 -0.693069, -0.356616 -0.596259 -0.719236, + 0.428081 0.576769 -0.695762, 0.356515 0.596086 -0.719429, 0.497055 0.553959 -0.667881, 0.426332 0.58247 0.692076, + 0.46617 0.519534 0.71608, 0.383883 0.641839 0.663834, -0.605386 0.665433 -0.436699, -0.605778 0.690059 -0.396045, + -0.629087 0.696063 -0.346043, -0.631312 0.759006 -0.159233, -0.645917 0.754231 -0.118014, -0.640974 0.639495 -0.424497, + -0.660156 0.61217 -0.435248, -0.582214 0.688902 -0.431788, -0.561257 0.660683 -0.498486, -0.644537 0.764424 -0.0150839, + -0.66143 0.748444 0.0483948, -0.607697 0.730126 -0.312443, -0.623257 0.782017 2.02489e-006, -0.610862 0.754698 -0.239329, + -0.544738 0.662771 -0.513805, -0.582375 0.691924 0.426709, -0.579458 0.661765 0.475705, -0.594399 0.635812 0.492375, + -0.633632 0.735153 0.240959, -0.638234 0.755191 0.149479, -0.603661 0.731256 0.31758, -0.577075 0.673856 0.461414, + -0.58773 0.697607 0.409778, -0.58237 0.688745 0.431828, -0.561471 0.660433 0.498577, -0.610818 0.754734 0.239326, + -0.544954 0.662515 0.513905, -0.939247 0.343238 -0.00185032, -0.936746 0.341096 0.078489, -0.888188 0.325176 -0.324626, + -0.864952 0.316995 -0.389066, -0.664983 0.244393 -0.70574, -0.935839 0.343218 -0.0800462, -0.847396 0.306884 -0.433292, + -0.695313 0.253621 -0.67247, -0.386585 0.14057 -0.911478, -0.349945 0.12688 -0.928138, -0.0611173 0.0221594 -0.997885, + 0.304865 -0.110359 -0.94598, 3.40359e-005 -6.48297e-006 -1, 0.667374 -0.243132 -0.703917, 0.628481 -0.227565 -0.743791, + 0.838659 -0.303961 -0.45195, 0.365483 -0.132382 -0.921356, 0.937057 -0.339751 -0.0805765, 0.86085 -0.314535 -0.400007, + -0.627539 0.227261 -0.744679, 0.0610947 -0.0221513 -0.997886, -0.304648 0.110317 -0.946055, 0.41491 -0.151424 -0.897174, + 0.703812 -0.259229 -0.661399, 0.887669 -0.324985 -0.326233, 0.93984 -0.341484 0.00948559, 0.936746 -0.341096 0.078489, + 0.882789 -0.320075 0.343854, 0.865156 -0.315209 0.390062, 0.671973 -0.24341 0.699431, 0.844624 -0.311106 0.435688, + 0.694909 -0.254292 0.672634, 0.388403 -0.141162 0.910613, 0.366931 -0.132811 0.920719, 0.0616644 -0.0223196 0.997847, + -0.294839 0.106874 0.949551, 8.91112e-005 -3.2318e-005 1, -0.671139 0.245391 0.699539, -0.620286 0.227742 0.750586, + -0.845289 0.311517 0.4341, -0.36141 0.131546 0.923081, -0.864986 0.315027 0.390586, 0.619817 -0.227286 0.751112, + -0.061685 0.0223388 0.997846, 0.29581 -0.107218 0.949211, -0.426186 0.154341 0.891372, -0.711626 0.257715 0.653584, + -0.888902 0.324086 0.323761, -0.197422 0.980277 -0.00907479, -0.244997 0.969407 0.015081, -0.213591 0.968094 -0.131049, + -0.0510374 0.93582 -0.348763, -0.097616 0.966692 -0.236597, 0.344507 0.938784 5.1566e-005, 0.0502798 0.916419 -0.397049, + 0.130129 0.912692 -0.387375, 0.308627 0.849182 -0.428532, 0.195132 0.874716 -0.443617, 0.393082 0.776011 -0.493249, + 0.225723 0.835963 -0.500214, 0.64906 0.660637 -0.377199, 0.734905 0.645127 -0.209107, 0.684069 0.671542 -0.284748, + 0.758031 0.650461 -0.0478563, 0.74503 0.648422 -0.156458, 0.427792 0.770739 -0.472181, 0.757699 0.652015 0.0277221, + 0.733678 0.652483 0.189692, 0.695471 0.64833 0.30982, 0.740922 0.643014 0.193824, 0.670884 0.670248 0.317305, + 0.549437 0.703835 0.450262, 0.253426 0.853931 0.454507, 0.374069 0.809198 0.453068, 0.176405 0.905005 0.387101, + 0.186352 0.868702 0.458945, 0.000403379 0.937352 0.348383, -0.142803 0.95546 0.25827, 0.00356337 0.911811 0.410594, + -0.138525 0.970886 0.195426, 0.133442 0.889212 0.437602, -0.939831 0.341484 0.0102761, -0.938562 0.340032 0.0589887, + -0.895409 0.324398 -0.304973, -0.869358 0.316787 -0.379293, -0.660824 0.239409 -0.711334, -0.937907 0.341764 -0.059398, + -0.837321 0.308708 -0.451212, -0.687525 0.25181 -0.681103, -0.378757 0.137707 -0.915194, -0.351061 0.127184 -0.927675, + -0.0577273 0.0209136 -0.998113, 0.298761 -0.109718 -0.948, 0.00203777 -0.000931943 -0.999997, 0.667706 -0.243324 -0.703535, + 0.619828 -0.225647 -0.751596, 0.847507 -0.307042 -0.432962, 0.361148 -0.131582 -0.923178, 0.935983 -0.343049 -0.0790728, + 0.869021 -0.316678 -0.380155, -0.619202 0.227188 -0.751648, 0.061862 -0.0224116 -0.997833, -0.305555 0.110721 -0.945715, + 0.415005 -0.151465 -0.897123, 0.716146 -0.262304 -0.646786, 0.888708 -0.321966 -0.326399, 0.93951 -0.342368 -0.0102796, + 0.937205 -0.339538 0.0797484, 0.888212 -0.32378 0.325955, 0.861395 -0.312072 0.400761, 0.667014 -0.242481 0.704482, + 0.844779 -0.307822 0.437716, 0.703516 -0.256658 0.662716, 0.388886 -0.142055 0.910268, 0.359865 -0.13266 0.923525, + 0.0658566 -0.0242768 0.997534, -0.297758 0.107873 0.948527, 0.000127738 -4.62877e-005 1, -0.665282 0.242491 0.706114, + -0.614805 0.222737 0.756573, -0.846012 0.306502 0.436257, -0.354849 0.128568 0.926041, -0.871616 0.318483 0.372632, + 0.634817 -0.232972 0.736703, -0.0616976 0.0223577 0.997844, 0.297786 -0.107883 0.948517, -0.420204 0.153449 0.894361, + -0.711192 0.262238 0.652255, -0.887381 0.325155 0.326847, -0.149254 0.987749 -0.0455651, -0.14498 0.989371 0.0111827, + -0.172966 0.967481 -0.184564, -0.0515896 0.935879 -0.348525, -0.0977834 0.966788 -0.236136, 0.353978 0.935254 0.000185769, + -0.0704563 0.940364 -0.332794, -0.00631179 0.917157 -0.398475, 0.282723 0.805834 -0.520287, 0.0666381 0.911033 -0.406914, + 0.481855 0.730392 -0.484091, 0.343818 0.805934 -0.481933, 0.617917 0.671398 -0.40915, 0.695135 0.69692 -0.176325, + 0.658526 0.692781 -0.293935, 0.747801 0.662587 -0.0421009, 0.733919 0.669313 -0.115685, 0.532021 0.731126 -0.427092, + 0.745905 0.666046 0.00280876, 0.683928 0.708857 0.172527, 0.660535 0.672062 0.334702, 0.711071 0.672336 0.205772, + 0.671469 0.669788 0.317037, 0.548497 0.703603 0.451767, 0.347179 0.782403 0.517023, 0.488225 0.749047 0.447845, + 0.129065 0.867003 0.481298, 0.305709 0.820195 0.483551, -0.104011 0.950632 0.292371, -0.120701 0.9429 0.310436, + -0.0935853 0.947283 0.306427, -0.10187 0.969684 0.222116, 0.0251055 0.932352 0.36068, -0.939235 0.343276 0.000142602, + -0.93661 0.341313 0.079165, -0.887803 0.325287 -0.325568, -0.864362 0.316839 -0.390501, -0.665002 0.244321 -0.705747, + -0.935951 0.343081 -0.0793132, -0.846444 0.306776 -0.435225, -0.695881 0.253871 -0.671788, -0.383836 0.140217 -0.912693, + -0.351942 0.127503 -0.927297, -0.0616056 0.0223187 -0.997851, 0.306216 -0.11096 -0.945473, -0.00187104 0.000875416 -0.999998, + 0.65572 -0.239778 -0.715918, 0.628591 -0.227811 -0.743623, 0.829386 -0.304179 -0.468608, 0.367091 -0.133013 -0.920626, + 0.937902 -0.341807 -0.0592287, 0.862192 -0.315024 -0.396718, -0.620013 0.225804 -0.751396, 0.057714 -0.0209098 -0.998114, + -0.299265 0.109927 -0.947817, 0.415961 -0.151792 -0.896625, 0.693338 -0.253906 -0.674399, 0.895153 -0.324305 -0.305822, + 0.939822 -0.341504 0.0104703, 0.938572 -0.340035 0.0588065, 0.887662 -0.325342 0.325898, 0.866394 -0.315797 0.386826, + 0.663797 -0.241834 0.707736, 0.839036 -0.305664 0.450099, 0.683479 -0.249354 0.686061, 0.389624 -0.141674 0.910012, + 0.368391 -0.133496 0.920036, 0.0619542 -0.0224507 0.997827, -0.296545 0.107434 0.948957, 8.35599e-005 -3.04312e-005 1, + -0.667941 0.244877 0.702773, -0.620791 0.227746 0.750167, -0.844948 0.311481 0.434791, -0.36475 0.133529 0.921481, + -0.865061 0.315298 0.390201, 0.620663 -0.227701 0.750287, -0.0658707 0.024292 0.997532, 0.29655 -0.107429 0.948956, + -0.421263 0.154253 0.893725, -0.705616 0.255735 0.660837, -0.888203 0.323856 0.325904, -0.197362 0.980286 -0.00932552, + -0.244785 0.96946 0.0150594, -0.213696 0.967991 -0.131636, -0.0140042 0.921168 -0.388912, -0.0979642 0.966741 -0.236252, + 0.344695 0.938715 0.000151058, 0.0585078 0.897966 -0.436158, 0.0832342 0.882903 -0.46212, 0.252459 0.860838 -0.44184, + 0.14669 0.871769 -0.46744, 0.392231 0.776851 -0.492603, 0.226164 0.836083 -0.499815, 0.647018 0.661343 -0.379465, + 0.735197 0.645647 -0.206462, 0.683397 0.672381 -0.28438, 0.757012 0.651688 -0.0472892, 0.745701 0.648368 -0.153459, + 0.424048 0.771585 -0.474172, 0.757422 0.652313 0.028272, 0.732707 0.65361 0.189562, 0.696166 0.648304 0.308311, + 0.741891 0.642415 0.192096, 0.671344 0.670115 0.316613, 0.548867 0.703963 0.450755, 0.199907 0.870097 0.450521, + 0.373742 0.809051 0.4536, 0.133834 0.875355 0.464588, 0.146459 0.867943 0.474578, 0.0251537 0.915242 0.402119, + -0.142656 0.955116 0.259619, 0.00269803 0.911798 0.41063, -0.138378 0.970711 0.196398, 0.139582 0.862784 0.485923, + -0.213455 0.623964 -0.751735, 0.4923 0.55049 0.674241, 0.346364 0.936194 -0.0597739, 0.347511 0.937385 -0.0233499, + 0.350379 0.92979 -0.112807, 0.321703 0.933312 -0.159485, 0.362517 0.931776 0.0193663, 0.375664 0.926106 0.0347067, + 0.336574 0.941042 0.0340334, 0.34282 0.939399 -0.00184666, 0.347061 0.937129 -0.0365802, 0.33958 0.940338 0.0211922, + 0.376916 0.926203 0.00904968, 0.333841 0.942377 -0.0218194, 0.320498 0.936434 -0.14273, 0.294569 0.954475 0.046978, + 0.298425 0.953864 0.0329635, 0.352978 0.93437 0.0485762, 0.335776 0.94131 -0.0344854, 0.349456 0.936252 -0.0362187, + 0.357332 0.933115 0.040132, 0.348303 0.937375 0.0035361, 0.355784 0.93372 -0.0397987, 0.312823 0.949734 -0.0121337, + 0.354529 0.935033 0.00473326, 0.270118 0.962827 -0.000793344, 0.807957 0.524577 0.268375, 0.341499 0.93988 -0.00218897, + 0.303557 0.952811 0.00196578, 0.39593 0.918273 -0.00372903, 0.370761 0.928725 -0.0026796, 0.377223 0.926114 -0.00389518, + 0.167813 0.985818 -0.00145918, 0.156042 0.987713 -0.0086444, 0.310319 0.950633 1.82878e-006, 0.232259 0.972587 -0.0113918, + 0.374931 0.927012 0.00867003, 0.392488 0.9197 0.010262, 0.298386 0.954437 0.00391469, 0.292372 0.956015 0.0235553, + 0.292271 0.956066 0.0227115, 0.370863 0.928672 0.0053963, 0.283526 0.958633 -0.0252014, 0.339661 0.940288 0.0220987, + 0.300714 0.95361 -0.0140981, 0.340564 0.939503 -0.0367353, 0.271991 0.96224 -0.0107753, 0.338165 0.940989 -0.0135785, + 0.340765 0.940143 0.00309895, 0.365071 0.930825 -0.0169685, 0.371848 0.928061 -0.0207905, 0.331121 0.943568 -0.00614033, + 0.320353 0.946971 -0.024885, 0.344392 0.938825 -0.00120167, 0.342086 0.939658 0.00455209, 0.370042 0.929015 -0.000467916, + 0.373296 0.927712 -0.00117381, 0.325875 0.945088 -0.0247729, 0.331177 0.943564 0.00299793, 0.336625 0.940913 0.0369673, + 0.356555 0.934265 0.00415534, 0.375464 0.924507 0.0656707, 0.283387 0.956804 0.0649522, 0.188526 0.964871 0.182982, + 0.352906 0.935641 0.00582414, 0.889378 0.440197 -0.123424, 0.134217 0.96763 0.213725, 0.337506 0.941255 -0.0113574, + 0.346931 0.937891 4.52812e-006, 0.372552 0.928011 -0.000615662, 0.337507 0.940798 -0.0314242, 0.371521 0.928425 -8.04646e-008, + 0.11263 0.993637 1.63327e-007, 0.215326 0.976482 0.0108764, 0.398034 0.917371 1.17545e-007, 0.371519 0.928425 -3.21997e-008, + 0.398033 0.917371 5.19308e-008, 0.336109 0.941596 0.0206701, 0.338717 0.940766 -0.0151575, 0.225261 0.974298 1.31509e-007, + 0.379997 0.924988 8.8159e-008, 0.337351 0.940971 -0.0276993, 0.32825 0.942182 -0.0674201, 0.325853 0.944678 0.0374493, + 0.335764 0.941916 0.00757893, 0.329543 0.944087 0.0100176, 0.329044 0.943947 0.0263545, 0.316056 0.947529 0.0479276, + 0.350923 0.936011 -0.0271459, 0.323638 0.946016 -0.0176536, 0.289444 0.95701 0.0188065, 0.232136 0.972616 0.0114062, + 0.155959 0.987726 0.00865389, 0.392489 0.9197 -0.0102624, 0.374931 0.927012 -0.00867017, 0.16782 0.985817 0.0014594, + 0.307192 0.951551 -0.0135291, 0.395918 0.918278 0.00372868, 0.377219 0.926116 0.00389486, 0.613114 0.777521 -0.139829, + 0.414099 0.909608 -0.0336987, 0.303533 0.952819 -0.00196804, 0.283526 0.958633 0.0252013, 0.37691 0.926207 -0.00895681, + 0.370761 0.928725 0.00267974, 0.298355 0.954447 -0.00391744, 0.36246 0.931799 -0.0193169, 0.339621 0.940323 -0.0212367, + 0.375655 0.92611 -0.0346927, 0.292271 0.956066 -0.0227104, 0.292371 0.956015 -0.0235546, 0.345145 0.937892 0.0351251, + 0.370863 0.928672 -0.00539643, 0.345349 0.937913 0.0324685, 0.347023 0.937151 0.0363765, 0.342787 0.939412 0.00163465, + 0.336581 0.941039 -0.0340539, 0.596423 0.279281 -0.752517, 0.324711 0.938842 0.114622, 0.350365 0.92979 0.112847, + 0.346355 0.936198 0.0597667, 0.321715 0.933291 0.159588, 0.350245 0.935978 0.0356991, 0.313366 0.949563 0.0115157, + 0.356578 0.933439 0.0392986, 0.322897 0.94639 0.00913231, 0.335789 0.941305 0.0345132, 0.348236 0.937401 -0.00330838, + 0.357251 0.933155 -0.0399118, 0.320514 0.936412 0.142842, 0.352965 0.934375 -0.0485759, 0.306172 0.951389 -0.033418, + 0.33309 0.942844 -0.00980757, 0.305544 0.951897 -0.0231158, 0.35496 0.934845 0.008299, 0.371518 0.928426 -8.54381e-008, + 0.379998 0.924987 7.69042e-008, 0.370049 0.929012 0.000480238, 0.373294 0.927712 0.00118732, 0.346931 0.937891 -4.71218e-006, + 0.37255 0.928012 0.000622704, 0.371518 0.928426 -8.14126e-008, 0.3368 0.941553 -0.00661312, 0.317528 0.947952 -0.0237389, + 0.329518 0.944095 -0.0100905, 0.354947 0.933593 0.049168, 0.324137 0.945156 -0.0401962, 0.337504 0.9408 0.0314161, + 0.332235 0.941904 0.0493545, 0.334993 0.941557 0.0353556, 0.336879 0.941465 0.0124611, 0.341852 0.939734 0.00612033, + 0.37615 0.926544 -0.00525255, 0.341911 0.939713 0.00609042, 0.376291 0.925899 0.033412, 0.36988 0.928847 0.0208077, + 0.341102 0.940021 -0.00302444, 0.331413 0.943477 -0.0041524, 0.343256 0.939228 -0.00508827, 0.3349 0.94225 0.00255636, + 0.343858 0.939019 0.00233437, 0.442617 0.896427 -0.022556, 0.336605 0.941287 -0.0260119, 0.358159 0.932923 -0.0370931, + -0.445141 0.832038 -0.331001, 0.615846 0.780586 0.106857, 0.331223 0.943544 -0.00392085, 0.328833 0.944036 0.0257843, + 0.347722 0.937062 0.0317026, 0.370745 0.92803 -0.0361755, -0.939247 0.343239 -0.00121267, -0.935881 0.343234 -0.0794763, + -0.888779 0.324041 0.324144, -0.864868 0.314984 0.390881, -0.671752 0.243273 0.699691, -0.936703 0.34108 0.0790695, + -0.845219 0.311492 0.434255, -0.69592 0.254832 0.671383, -0.388585 0.141294 0.910515, -0.367276 0.133006 0.920553, + -0.0616854 0.0223389 0.997846, 0.296173 -0.107349 0.949083, 8.9344e-005 -3.23509e-005 1, 0.671049 -0.245197 0.699694, + 0.620412 -0.227503 0.750554, 0.844553 -0.31108 0.435843, 0.36236 -0.131816 0.92267, 0.936703 -0.34108 0.0790694, + 0.865039 -0.315166 0.390357, -0.620881 0.22796 0.750027, 0.0616648 -0.0223197 0.997847, -0.295202 0.107006 0.949424, + 0.426961 -0.154574 0.890961, 0.712728 -0.258224 0.65218, 0.882637 -0.32002 0.344294, 0.939834 -0.341482 0.0101556, + 0.93711 -0.33977 -0.0798782, 0.887713 -0.325 -0.3261, 0.860825 -0.314526 -0.400068, 0.665187 -0.244253 -0.705596, + 0.83852 -0.30391 -0.452242, 0.696029 -0.253781 -0.671669, 0.388318 -0.141127 -0.910655, 0.35234 -0.127749 -0.927112, + 0.0610952 -0.0221515 -0.997886, -0.305391 0.110587 -0.945784, 3.43548e-005 -6.58294e-006 -1, -0.667263 0.243171 -0.704008, + -0.628549 0.227627 -0.743715, -0.847235 0.306825 -0.433648, -0.366468 0.132767 -0.920909, -0.864917 0.316982 -0.389155, + 0.629491 -0.227931 -0.742825, -0.0611175 0.0221595 -0.997885, 0.305608 -0.110628 -0.945709, -0.415528 0.151754 -0.896832, + -0.70436 0.259704 -0.660629, -0.888231 0.325192 -0.324493, 0.344483 0.938793 -6.28199e-008, -0.138813 0.970889 0.195204, + -0.197422 0.980278 -0.00887867, -0.244967 0.969411 0.0153061, -0.142801 0.955572 0.257855, 0.00275141 0.912077 0.41001, + 0.13284 0.889379 0.437445, 0.186336 0.868607 0.45913, 0.176273 0.905058 0.387038, 0.374521 0.808989 0.453068, + 0.671485 0.669823 0.31693, -3.62988e-005 0.937498 0.347991, 0.549929 0.703653 0.449945, 0.740897 0.642944 0.19415, + 0.695676 0.648282 0.30946, 0.73342 0.65263 0.19018, 0.757607 0.65209 0.0284754, 0.758046 0.650474 -0.0474278, + 0.745097 0.648465 -0.155959, 0.734935 0.64515 -0.208929, 0.68326 0.672019 -0.285562, 0.426747 0.771231 -0.472323, + 0.225749 0.836462 -0.499369, 0.393195 0.777069 -0.491488, 0.309016 0.849868 -0.426888, 0.196764 0.874434 -0.443452, + 0.0513049 0.916346 -0.397086, 0.648406 0.660971 -0.377739, 0.131329 0.912783 -0.386756, -0.0977629 0.966768 -0.236224, + -0.0515864 0.935904 -0.348458, -0.213454 0.968123 -0.131051, -0.939829 0.341484 0.0105241, -0.937935 0.341775 -0.0588939, + -0.887696 0.325271 0.325874, -0.872099 0.318661 0.371346, -0.664276 0.244071 0.706518, -0.938558 0.34003 0.0590702, + -0.846738 0.306765 0.434662, -0.686716 0.250498 0.682402, -0.378777 0.137714 0.915185, -0.366429 0.132785 0.920922, + 0.29526 -0.106968 0.94941, 0.000127713 -4.62687e-005 1, 0.672714 -0.245778 0.697889, 0.631254 -0.231672 0.740166, + 0.845497 -0.308084 0.43614, 0.362839 -0.132828 0.922337, 0.937198 -0.339536 0.0798505, 0.861932 -0.312267 0.399452, + -0.611243 0.221446 0.759831, 0.0658566 -0.0242769 0.997534, -0.295231 0.106958 0.94942, 0.418807 -0.153295 0.895043, + 0.704505 -0.255233 0.662215, 0.888526 -0.323893 0.324984, 0.939513 -0.342369 -0.00991803, 0.936023 -0.343063 -0.0785466, + 0.888281 -0.321812 -0.327711, 0.868018 -0.316312 -0.382743, 0.674122 -0.246412 -0.696305, 0.845775 -0.306414 -0.436779, + 0.695192 -0.253599 -0.672603, 0.38547 -0.140801 -0.911914, 0.353137 -0.127936 -0.926783, 0.0618603 -0.022411 -0.997833, + -0.307035 0.111257 -0.945173, 0.00203776 -0.000931947 -0.999997, -0.65937 0.241151 -0.712094, -0.620048 0.227492 -0.750858, + -0.835564 0.30806 -0.454898, -0.358125 0.130318 -0.924534, -0.868321 0.31641 -0.381973, 0.62067 -0.225959 -0.750807, + -0.0577256 0.020913 -0.998113, 0.300204 -0.11025 -0.947482, -0.408311 0.147925 -0.900778, -0.704555 0.255253 -0.662154, + -0.894935 0.324226 -0.306543, 0.35427 0.935143 -6.05112e-005, -0.100748 0.969138 0.224993, -0.149226 0.987756 -0.0454941, + -0.145234 0.989333 0.0113193, -0.119919 0.942297 0.312564, -0.0925555 0.946779 0.30829, 0.0231896 0.932734 0.359819, + 0.305595 0.819915 0.484098, 0.127596 0.866359 0.482847, 0.348598 0.78015 0.519466, 0.491407 0.746932 0.447898, + 0.670767 0.670123 0.317816, -0.10289 0.950917 0.291839, 0.548298 0.703447 0.452251, 0.710621 0.672734 0.206026, + 0.658735 0.673445 0.33547, 0.684694 0.70832 0.171691, 0.746043 0.665894 0.00217145, 0.747798 0.66259 -0.0420977, + 0.733876 0.66937 -0.115628, 0.694554 0.697137 -0.17775, 0.65821 0.692582 -0.295109, 0.530175 0.731639 -0.428509, + 0.343788 0.805586 -0.482536, 0.480351 0.731141 -0.484454, 0.285416 0.805562 -0.519237, 0.0694133 0.910594 -0.407431, + -0.0713597 0.940229 -0.332982, 0.617953 0.670353 -0.410805, -0.00729749 0.917074 -0.398651, -0.0976807 0.966608 -0.236912, + -0.0523084 0.935409 -0.349678, -0.172225 0.967485 -0.185234, -0.939235 0.343276 -1.82032e-005, -0.935945 0.343079 -0.0794005, + -0.888266 0.323879 0.325708, -0.86512 0.31532 0.390053, -0.665713 0.242096 0.705844, -0.936625 0.341318 0.0789602, + -0.844983 0.311494 0.434713, -0.69556 0.254742 0.671791, -0.385487 0.140823 0.911904, -0.356987 0.131651 0.924786, + 0.295828 -0.107167 0.949211, 8.34738e-005 -3.04148e-005 1, 0.660123 -0.240609 0.711579, 0.619475 -0.227266 0.7514, + 0.839072 -0.305678 0.450022, 0.361919 -0.131708 0.922858, 0.938582 -0.340039 0.0586311, 0.866441 -0.315814 0.386706, + -0.619602 0.227312 0.75128, 0.0619541 -0.0224507 0.997827, -0.295823 0.107172 0.949212, 0.42645 -0.154545 0.89121, + 0.701125 -0.255788 0.665579, 0.887724 -0.325365 0.325704, 0.939824 -0.341504 0.0103253, 0.937895 -0.341805 -0.059343, + 0.895232 -0.324333 -0.305561, 0.862351 -0.315083 -0.396325, 0.656623 -0.23997 -0.715025, 0.829637 -0.304271 -0.468104, + 0.682332 -0.249895 -0.687005, 0.38771 -0.140974 -0.910938, 0.351283 -0.127266 -0.927579, 0.0577135 -0.0209096 -0.998114, + -0.298903 0.109794 -0.947946, -0.00187103 0.00087541 -0.999998, -0.667344 0.243211 -0.703918, -0.61961 0.225656 -0.751773, + -0.846674 0.306859 -0.434719, -0.36122 0.131639 -0.923142, -0.864515 0.316895 -0.390117, 0.628184 -0.227664 -0.744012, + -0.0616051 0.0223185 -0.997851, 0.305845 -0.110826 -0.945609, -0.41542 0.151593 -0.896909, -0.703757 0.259433 -0.661378, + -0.887886 0.325318 -0.32531, 0.344763 0.93869 -1.44894e-007, -0.138466 0.9708 0.195893, -0.19738 0.980283 -0.00928681, + -0.244778 0.969463 0.015034, -0.142679 0.955243 0.259139, 0.00301264 0.911865 0.41048, 0.140142 0.862396 0.486449, + 0.146414 0.867817 0.474823, 0.134033 0.875026 0.465151, 0.19989 0.869882 0.450942, 0.373364 0.809005 0.453993, + 0.671007 0.670321 0.31689, 0.0257614 0.914951 0.402742, 0.548249 0.703993 0.451461, 0.741945 0.64242 0.19187, + 0.695994 0.648437 0.308418, 0.732636 0.653726 0.189439, 0.757401 0.652332 0.0283972, 0.757046 0.651653 -0.0472215, + 0.745672 0.648395 -0.153486, 0.735223 0.645606 -0.206497, 0.683033 0.672597 -0.284743, 0.424763 0.771374 -0.473876, + 0.226422 0.836214 -0.499478, 0.393106 0.776714 -0.49212, 0.25163 0.861039 -0.441922, 0.146089 0.871866 -0.467448, + 0.0595236 0.897649 -0.436673, 0.646582 0.661749 -0.3795, 0.084036 0.882845 -0.462085, -0.097694 0.966715 -0.236468, + -0.0135164 0.921102 -0.389086, -0.213868 0.967971 -0.131502, -0.93913 0.343451 -0.00878396, -0.937504 0.339422 0.0766702, + -0.885033 0.320428 -0.337701, -0.86745 0.315541 -0.384662, -0.666509 0.240974 -0.705477, -0.935304 0.345449 -0.0766243, + -0.848788 0.306854 -0.43058, -0.693755 0.250736 -0.675156, -0.383253 0.138508 -0.913199, -0.359275 0.129884 -0.924149, + -0.0630687 0.0228003 -0.997749, 0.302159 -0.109215 -0.94698, -1.76126e-005 1.23886e-006 -1, 0.666788 -0.241037 -0.705191, + 0.619664 -0.224125 -0.752186, 0.848694 -0.306737 -0.43085, 0.359313 -0.129871 -0.924136, 0.935332 -0.345376 -0.0766178, + 0.867784 -0.315426 -0.384003, -0.619914 0.22407 -0.751997, 0.0630388 -0.0227729 -0.997751, -0.302008 0.109104 -0.947042, + 0.414815 -0.149883 -0.897476, 0.710942 -0.256952 -0.654627, 0.88523 -0.320108 -0.337489, 0.939179 -0.343301 -0.0093774, + 0.937585 -0.339197 0.0766816, 0.889644 -0.325151 0.320641, 0.864948 -0.312695 0.392539, 0.666858 -0.241107 0.705101, + 0.841603 -0.304176 0.446297, 0.693836 -0.250868 0.675023, 0.383343 -0.138562 0.913153, 0.35954 -0.129947 0.924037, + 0.0630062 -0.022772 0.997753, -0.301982 0.109172 0.947042, 1.04379e-006 7.95761e-006 1, -0.666651 0.240999 0.705334, + -0.619233 0.223745 0.752654, -0.841391 0.304417 0.446533, -0.359102 0.129759 0.924234, -0.86514 0.313001 0.391871, + 0.619885 -0.224012 0.752038, -0.0630449 0.0227758 0.997751, 0.301813 -0.109031 0.947112, -0.414875 0.149926 0.897441, + -0.711045 0.25706 0.654473, -0.889674 0.325313 0.320392, -0.210051 0.977658 -0.00794354, -0.209671 0.977681 0.0133495, + -0.182761 0.976559 -0.113713, -0.0133909 0.94106 -0.337974, -0.123176 0.96839 -0.216905, 0.339588 0.940574 -1.16192e-005, + 0.0216605 0.914052 -0.405018, 0.11591 0.897135 -0.426278, 0.255217 0.847973 -0.46455, 0.130937 0.87254 -0.470669, + 0.438706 0.78316 -0.440678, 0.297226 0.815754 -0.496188, 0.597839 0.720237 -0.351919, 0.697975 0.673318 -0.243873, + 0.614941 0.691138 -0.379705, 0.761438 0.647917 0.0203784, 0.734965 0.66201 -0.146869, 0.494503 0.746291 -0.445552, + 0.779797 0.625906 0.0125926, 0.752567 0.651005 0.0991767, 0.612008 0.708837 0.350708, 0.715056 0.67036 0.198274, + 0.585604 0.708501 0.39382, 0.50235 0.759102 0.414016, 0.314726 0.826775 0.466252, 0.455556 0.760962 0.461958, + 0.155155 0.882572 0.44384, 0.261824 0.82833 0.495296, 0.0227812 0.935425 0.35279, -0.123209 0.96701 0.222959, + -0.0268452 0.924129 0.381137, -0.157666 0.97063 0.181713, 0.106223 0.881488 0.460104, 0.363218 0.930658 0.044139, + 0.392884 0.916635 0.0736341, 0.40824 0.909342 0.0802322, 0.374694 0.925723 0.0513919, 0.323273 0.946198 0.0143038, + 0.35236 0.935202 -0.0352182, 0.407781 0.909565 -0.0800341, 0.391298 0.917368 -0.0729543, 0.375008 0.92559 -0.0515001, + 0.333996 0.942467 -0.0142525, 0.33442 0.94164 0.0384423, 0.212818 0.973401 0.0848447, 0.293566 0.954879 0.045011, + 0.0614849 0.98733 0.146283, 0.334389 0.941653 -0.0383819, 0.276657 0.959341 -0.0559066, 0.214556 0.973083 -0.0841118, + 0.0652281 0.987306 -0.144818, 0.924258 -0.340665 0.172319, 0.934814 -0.344444 0.0864976, 0.894241 -0.329165 0.303288, + 0.871278 -0.316122 0.375422, 0.665406 -0.245282 0.705033, 0.934853 -0.34087 0.0992852, 0.844553 -0.296187 0.446098, + 0.69437 -0.248213 0.675455, 0.38322 -0.137927 0.913301, 0.358141 -0.131984 0.924292, 0.0624624 -0.023019 0.997782, + -0.299029 0.105793 0.948362, 0.00312572 -0.00109351 0.999995, -0.664712 0.238638 0.707961, -0.62643 0.227437 0.745559, + -0.836984 0.298422 0.458696, -0.364854 0.131677 0.921706, -0.934853 0.340871 0.0992858, -0.867021 0.312139 0.388387, + 0.621669 -0.21749 0.75248, -0.0593421 0.021938 0.997997, 0.302373 -0.105786 0.947301, -0.423487 0.152852 0.892914, + -0.702968 0.250909 0.665493, -0.894335 0.329201 0.302972, -0.924258 0.340666 0.17232, -0.934813 0.344445 0.0864976, + 0.934777 -0.344431 -0.086941, 0.932062 -0.344106 -0.113361, -0.92273 0.334833 -0.190936, -0.932062 0.344107 -0.11336, + -0.891894 0.318857 -0.320711, -0.869456 0.315079 -0.380489, -0.664364 0.238784 -0.708239, -0.934777 0.344432 -0.0869409, + -0.8433 0.305579 -0.442117, -0.690158 0.249227 -0.679388, -0.386384 0.139024 -0.9118, -0.358816 0.125532 -0.924929, + -0.0600061 0.0209323 -0.997979, 0.30022 -0.11065 -0.94743, 0.00325149 -0.00119348 -0.999994, 0.666811 -0.239966 -0.705535, + 0.61692 -0.22755 -0.753413, 0.847656 -0.312253 -0.428926, 0.3576 -0.129 -0.924922, 0.875376 -0.314794 -0.366909, + -0.626589 0.222626 -0.746876, 0.0632634 -0.0221327 -0.997751, -0.297211 0.10839 -0.94864, 0.414252 -0.144926 -0.89855, + 0.713189 -0.249843 -0.654935, 0.891894 -0.318857 -0.320711, 0.92273 -0.334832 -0.190936, 0.00801704 0.0301857 -0.999512, + -0.0162046 -0.0610572 -0.998003, 0.0433547 0.327775 -0.943761, 0.0867204 0.434518 -0.896478, 0.144656 0.641604 -0.753272, + 0.0850868 0.318587 -0.944067, 0.113088 0.646617 -0.754386, 0.147208 0.731633 -0.665614, 0.228508 0.860576 -0.455184, + 0.191641 0.926345 -0.324281, 0.17318 0.983393 -0.0542877, 0.208085 0.974941 0.0786774, 0.202003 0.924336 0.323725, + 0.0731545 0.329727 0.941238, 0.0695727 0.377736 0.923296, -0.00362483 0.00481495 0.999982, 0.00108722 0.00726769 0.999973, + 0.194125 0.731087 0.654085, 0.140335 0.642416 0.753398, 0.186322 0.881706 0.43345, 0.238642 0.969307 -0.0591091, + 0.123069 0.880667 -0.457471, 0.190679 0.927831 0.320579, 0.0017991 0.00679814 -0.999975, 0.119224 0.747505 0.653469, + 0.10995 0.426197 0.897924, 0.00699068 -0.00391035 0.999968, -0.0763622 -0.314976 0.946023, -0.0713148 -0.372872 0.925138, + -0.111431 -0.697009 0.708351, -0.145365 -0.657546 0.739258, -0.102849 -0.43035 0.896784, -0.188116 -0.898341 0.396984, + -0.122496 -0.9222 0.366799, -0.131478 -0.989826 0.0543936, -0.125662 -0.946042 -0.298686, -0.165077 -0.986189 0.0134279, + -0.1558 -0.686717 -0.710032, -0.09979 -0.749642 -0.654278, -0.0887578 -0.430379 -0.898274, -0.168752 -0.910209 -0.37821, + -0.0776793 -0.37113 -0.925326, -0.233319 -0.719388 0.65425, -0.23333 -0.91597 0.32643, -0.189341 -0.980592 -0.0508877, + -0.242101 -0.858842 -0.451418, -0.149165 -0.642357 -0.751749, -0.0511588 -0.322058 -0.945337, 0.982047 -0.188618 0.00249436, + 0.982735 -0.185004 0.00239568, 0.980828 -0.194874 -0.000115049, 0.983448 -0.181135 0.00450792, 0.981501 -0.191434 0.00298093, + 0.981067 -0.193577 0.0059506, 0.981262 -0.192677 -7.72399e-006, 0.980941 -0.194081 0.00933012, + 0.981403 -0.191958 -5.82413e-006, 0.981067 -0.193578 -0.00596343, 0.980381 -0.197114 0.000140181, + 0.980566 -0.196104 0.00587006, 0.980827 -0.194881 0.000110086, 0.980189 -0.198065 0.000569374, 0.980533 -0.196233 0.00686132, + 0.979831 -0.199637 0.00871272, 0.980023 -0.198885 -2.55664e-007, 0.980941 -0.194083 -0.00934802, + 0.982047 -0.188618 -0.00249944, 0.982736 -0.185001 -0.00239424, 0.983449 -0.181129 -0.00450508, + 0.980829 -0.194873 0.000113149, 0.981501 -0.191432 -0.00297925, 0.98038 -0.197115 -0.000139912, + 0.980533 -0.196234 -0.00687023, 0.979831 -0.199638 -0.0087221, 0.981498 -0.191475 -9.04306e-006, + 0.980565 -0.196104 -0.00587871, 0.980827 -0.194882 -0.000109468, 0.980189 -0.198066 -0.000568859, -0.000961755 0.000222243 -1, + -0.0119819 -0.0666444 -0.997705, 0.0582738 0.324224 -0.944184, 0.0720056 0.361673 -0.92952, 0.133756 0.686885 -0.714352, + 0.0831322 0.423268 -0.902183, 0.13165 0.669046 -0.731468, 0.173585 0.902267 -0.394693, 0.162551 0.903874 -0.395713, + 0.176774 0.982751 -0.0543276, 0.167789 0.932892 0.318684, 0.19112 0.981567 0.000114959, 0.135457 0.689181 0.711815, + 0.147635 0.741724 0.654255, 0.081851 0.423881 0.902012, 0.183129 0.915958 0.357049, 0.0120533 0.067074 0.997675, + 0.069061 0.362711 0.929339, 0.141615 0.743487 -0.653584, 0.204858 0.977255 0.0548341, 0.194509 0.927885 -0.318113, + 0.177375 0.883908 0.432718, 0.117403 0.621083 0.774902, 0.0677802 0.323053 0.943951, 0.000979883 -0.00014581 1, + -0.0140079 -0.0667487 0.997671, -0.0540031 -0.300343 0.952301, -0.074945 -0.374002 0.924395, -0.133826 -0.686813 0.714408, + -0.0837696 -0.423291 0.902113, -0.12728 -0.64376 0.754568, -0.173551 -0.902093 0.395105, -0.16684 -0.926815 0.33642, + -0.176674 -0.982725 0.0551156, -0.170045 -0.945263 -0.2785, -0.191147 -0.981561 0.000346257, -0.133474 -0.684416 -0.71677, + -0.143601 -0.72562 -0.672945, -0.0811761 -0.423584 -0.902212, -0.181321 -0.908682 -0.376059, -0.0707879 -0.374249 -0.924622, + -0.139106 -0.725985 0.673495, -0.205004 -0.977227 -0.054776, -0.197076 -0.939769 0.279276, -0.176735 -0.884606 -0.431552, + -0.122355 -0.652688 -0.747682, -0.0625024 -0.297903 -0.952548, 0.983738 -0.17961 0.0002991, 0.881746 -0.000218846 -0.471725, + 0.844426 -0.1887 -0.501336, 0.854746 -0.134646 -0.501278, 0.890432 0.0503923 -0.452318, 0.917842 0.185915 -0.350716, + 0.935298 0.288867 -0.204384, 0.948222 0.317244 -0.0152298, 0.944274 0.281375 -0.170806, 0.946908 0.318074 0.0468516, + 0.940583 0.298814 0.161288, 0.924366 0.201421 0.324003, 0.921209 0.223172 -0.318699, 0.940695 0.272268 0.202395, + 0.888029 0.037804 0.458231, 0.907665 0.157101 0.389183, 0.880283 -0.0060743 0.47441, 0.852541 -0.148043 0.501255, + 0.840952 -0.202566 0.501764, 0.815536 -0.323467 0.479865, 0.808718 -0.358648 0.466204, 0.795695 -0.460728 0.39319, + 0.761551 -0.6263 0.166699, 0.738356 -0.674224 0.0159017, 0.73433 -0.670779 0.103992, 0.740632 -0.671876 0.00683471, + 0.759685 -0.635595 -0.137472, 0.783327 -0.50802 -0.358209, 0.780971 -0.524309 0.339388, 0.748336 -0.625038 -0.222083, + 0.811134 -0.349482 -0.468961, 0.794947 -0.471278 -0.382043, 0.816964 -0.313605 -0.483965, 0.145652 0.816111 -0.559239, + 0.192763 0.899655 -0.391744, 0.164921 0.95233 -0.256649, 0.198673 0.980066 -3.1918e-005, -0.317164 -0.948371 -5.09419e-005, + -0.27793 -0.903231 -0.326999, -0.260442 -0.939481 -0.222589, 0.112555 0.63363 -0.765405, 0.155342 0.691387 -0.705587, + 0.193478 0.902404 -0.38501, -0.0472345 0.37114 -0.927375, 0.158944 0.987288 6.1827e-005, -0.0820578 0.139187 -0.98686, + -0.156335 -0.0810714 -0.984371, 0.0769914 0.409239 -0.909173, -0.128384 -0.281843 -0.950832, -0.228587 -0.314101 -0.92146, + -0.160133 -0.344448 -0.925048, -0.0316031 -0.0921979 -0.995239, 0.0665759 0.311025 -0.948067, 0.137392 0.642372 -0.753977, + 0.209264 0.977859 -6.39184e-005, -0.210504 -0.536773 -0.817045, -0.287599 -0.791087 -0.539878, -0.297156 -0.910987 -0.28601, + -0.235791 -0.707219 -0.666517, -0.353765 -0.7054 -0.614215, -0.644892 -0.764274 -8.06262e-005, 0.244733 -0.886142 -0.393521, + -0.113731 0.125987 0.985491, -0.0172693 -0.0354408 0.999223, -0.156329 -0.081069 0.984372, -0.160576 -0.344791 0.924843, + -0.128647 -0.28102 0.95104, 0.0609916 0.337603 0.93931, -0.0481266 0.371563 0.927159, 0.164546 0.952388 0.256674, + 0.145161 0.816045 0.559463, 0.189708 0.887065 0.420864, 0.146317 0.651261 0.744614, 0.112445 0.633928 0.765174, + 0.157319 0.734389 0.660245, 0.0921967 0.430922 0.897667, -0.35385 -0.704941 0.614694, -0.210758 -0.537884 0.816248, + -0.235933 -0.707007 0.666691, -0.278271 -0.903187 0.32683, -0.260556 -0.939456 0.222558, -0.298188 -0.910849 0.285374, + -0.287993 -0.790911 0.539926, 0.244773 -0.886286 0.393172, 0.198512 0.925128 0.323622, -0.228532 -0.314791 0.921238, + 0.980109 -0.197526 -0.0192465, 0.980901 -0.194194 -0.0110697, 0.982192 -0.187875 -0.00104341, 0.981273 -0.192621 8.33715e-006, + 0.981024 -0.193859 0.00320076, 0.982484 -0.186346 2.45271e-006, 0.982159 -0.188015 -0.00372368, + 0.981658 -0.19065 -0.000694749, 0.981471 -0.191493 -0.00672445, 0.9809 -0.194197 0.0110787, 0.980107 -0.197532 0.0192607, + 0.982192 -0.187877 0.00104409, 0.981025 -0.193856 -0.00319957, 0.982155 -0.188037 0.00373771, 0.981656 -0.19066 0.00070171, + 0.981471 -0.191493 0.00673731, 0.981457 -0.191684 0, 0.981456 -0.191686 0, 0.981351 -0.192198 -0.00303306, + 0.980799 -0.194925 -0.00618931, 0.980607 -0.195983 0.00102512, 0.98189 -0.189453 -6.48982e-005, + 0.982056 -0.188575 -0.00224221, 0.982376 -0.186883 -0.0034413, 0.982184 -0.187924 2.37695e-006, + 0.981516 -0.191379 -6.36502e-007, 0.980802 -0.194908 0.00620059, 0.980607 -0.195981 -0.00102647, + 0.981353 -0.192188 0.00303831, 0.98189 -0.189452 6.33206e-005, 0.982057 -0.188572 0.00224393, 0.982377 -0.186879 0.00344618, + 0.191072 0.981576 0.000430909, 0.181566 0.982959 0.0287454, 0.16458 0.940082 -0.298596, 0.174939 0.910571 -0.374508, + 0.125093 0.700475 -0.702628, 0.200401 0.97929 -0.0288204, 0.185068 0.882509 -0.432351, 0.13813 0.728435 -0.671046, + 0.0770118 0.393763 -0.91598, 0.0771815 0.395602 -0.915173, 0.00827849 0.0424002 -0.999066, -0.0647746 -0.297645 -0.952477, + -0.0009302 -0.00404374 -0.999991, -0.135972 -0.724077 -0.676183, -0.132111 -0.651631 -0.746943, -0.177579 -0.911824 -0.370193, + -0.0725948 -0.367102 -0.927344, -0.200152 -0.97826 -0.0542773, -0.184018 -0.920642 -0.34432, 0.126333 0.662218 -0.738585, + -0.00914572 -0.0509062 -0.998662, 0.0605384 0.28369 -0.957003, -0.0799113 -0.444712 -0.892102, -0.141649 -0.743991 -0.653003, + -0.191491 -0.936444 -0.293944, -0.198234 -0.980155 -0.000114377, -0.19573 -0.979152 0.0543182, -0.189541 -0.948358 0.254344, + -0.185333 -0.927483 0.324695, -0.141835 -0.708382 0.691432, -0.179602 -0.894433 0.409553, -0.14172 -0.735091 0.662991, + -0.0782624 -0.400675 0.912872, -0.0799985 -0.355888 0.931098, -0.0168739 -0.0756293 0.996993, 0.0625827 0.320908 0.945041, + -0.000719621 -0.00629405 0.99998, 0.123343 0.673717 0.728624, 0.123206 0.668372 0.733552, 0.147142 0.868182 0.473929, + 0.0774447 0.387048 0.918801, 0.17754 0.918786 0.352579, -0.115413 -0.642286 0.757726, 0.0152778 0.0672187 0.997621, + -0.0566172 -0.315016 0.947396, 0.0865866 0.417006 0.90477, 0.145681 0.733828 0.663531, 0.202914 0.945203 0.255766, + 0.944716 0.327043 -0.0235597, 0.944297 0.327631 0.0310004, 0.937278 0.313839 -0.151706, 0.926104 0.19719 -0.321631, + 0.938072 0.280046 -0.203947, 0.980625 -0.195893 -0.000160773, 0.914546 0.158706 -0.372046, 0.891044 0.0470384 -0.451473, + 0.853302 -0.126838 -0.505755, 0.883108 0.0103991 -0.469054, 0.819153 -0.341315 -0.46097, 0.845472 -0.202773 -0.494024, + 0.793929 -0.480531 -0.372514, 0.783728 -0.582813 -0.214707, 0.783534 -0.510693 -0.35393, 0.734363 -0.675789 -0.0634013, + 0.760738 -0.615631 -0.20561, 0.805955 -0.401286 -0.435208, 0.756637 -0.653835 -0.00035563, 0.76937 -0.616033 0.169035, + 0.788822 -0.511694 0.340484, 0.776016 -0.575819 0.257355, 0.78643 -0.492846 0.372331, 0.814276 -0.383814 0.435479, + 0.835081 -0.216259 0.505838, 0.808578 -0.361788 0.464017, 0.877931 -0.0113792 0.478652, 0.849059 -0.169003 0.500537, + 0.91869 0.155892 0.362915, 0.934245 0.279936 0.220959, 0.921634 0.195358 0.335301, 0.938398 0.294001 0.181581, + 0.891345 0.0419279 0.451382] + } + coordIndex [ + 7, 1794, 6, -1,9, 7, 8, -1,1794, 1795, 6, -1,1794, 9, 10, -1,1795, 1794, 11, -1,1794, + 7, 9, -1,6, 1795, 5, -1,4, 5, 1796, -1,1797, 3, 4, -1,1, 2, 1799, -1,3, 1798, 2, -1, + 1800, 0, 1, -1,4, 1796, 1797, -1,5, 1795, 1796, -1,1795, 12, 1796, -1,1798, 1797, + 14, -1,11, 1794, 10, -1,1795, 11, 12, -1,1797, 1798, 3, -1,13, 1796, 12, -1,13, 14, + 1797, -1,13, 1797, 1796, -1,1798, 14, 15, -1,1800, 17, 19, -1,16, 1800, 1799, -1, + 1800, 19, 0, -1,1799, 1800, 1, -1,15, 16, 1799, -1,17, 18, 19, -1,16, 17, 1800, -1, + 1799, 1798, 15, -1,1798, 1799, 2, -1,26, 0, 1801, -1,25, 26, 1802, -1,1801, 1802, + 26, -1,1802, 1801, 27, -1,1803, 1802, 28, -1,1802, 1803, 25, -1,0, 19, 1801, -1,25, + 1803, 24, -1,9, 8, 20, -1,1807, 9, 20, -1,23, 24, 1804, -1,20, 21, 1807, -1,1805, + 22, 23, -1,22, 1806, 21, -1,1803, 1804, 24, -1,1803, 28, 29, -1,1801, 19, 27, -1, + 27, 19, 18, -1,28, 1802, 27, -1,29, 30, 1804, -1,29, 1804, 1803, -1,1804, 30, 31, -1, + 1805, 1806, 22, -1,1806, 1805, 31, -1,1807, 1806, 32, -1,1806, 1807, 21, -1,31, 32, + 1806, -1,33, 10, 1807, -1,32, 33, 1807, -1,1805, 1804, 31, -1,1807, 10, 9, -1,1804, + 1805, 23, -1,41, 27, 42, -1,17, 42, 18, -1,27, 18, 42, -1,40, 28, 27, -1,40, 39, + 29, -1,38, 29, 39, -1,40, 27, 41, -1,29, 28, 40, -1,44, 17, 16, -1,42, 17, 43, -1, + 16, 15, 44, -1,43, 17, 44, -1,45, 15, 46, -1,46, 15, 14, -1,13, 46, 14, -1,44, 15, + 45, -1,31, 38, 37, -1,29, 38, 30, -1,37, 36, 31, -1,30, 38, 31, -1,32, 36, 33, -1, + 34, 33, 35, -1,33, 36, 35, -1,31, 36, 32, -1,12, 48, 13, -1,46, 13, 47, -1,48, 47, + 13, -1,11, 49, 48, -1,11, 10, 34, -1,33, 34, 10, -1,11, 48, 12, -1,34, 49, 11, -1, + 49, 34, 50, -1,48, 49, 1808, -1,50, 1808, 49, -1,1808, 50, 51, -1,1809, 1808, 52, -1, + 1808, 1809, 48, -1,48, 1809, 1810, -1,46, 47, 1810, -1,1811, 45, 46, -1,43, 44, 1813, -1, + 45, 1812, 44, -1,1814, 42, 43, -1,46, 1810, 1811, -1,47, 48, 1810, -1,1809, 53, 1810, -1, + 1812, 1811, 55, -1,52, 1808, 51, -1,1809, 52, 53, -1,1811, 1812, 45, -1,54, 1810, + 53, -1,54, 55, 1811, -1,54, 1811, 1810, -1,1812, 55, 56, -1,1813, 1814, 43, -1,1814, + 1813, 57, -1,60, 1814, 58, -1,1814, 60, 42, -1,56, 57, 1813, -1,58, 59, 60, -1,57, + 58, 1814, -1,1813, 1812, 56, -1,1812, 1813, 44, -1,41, 42, 60, -1,40, 41, 1815, -1, + 60, 1815, 41, -1,1815, 60, 59, -1,1816, 1815, 61, -1,1815, 1816, 40, -1,40, 1816, + 1817, -1,38, 39, 1817, -1,1818, 37, 38, -1,35, 36, 1820, -1,37, 1819, 36, -1,1821, + 34, 35, -1,38, 1817, 1818, -1,39, 40, 1817, -1,1816, 62, 1817, -1,1819, 1818, 64, -1, + 61, 1815, 59, -1,1816, 61, 62, -1,1818, 1819, 37, -1,63, 1817, 62, -1,63, 64, 1818, -1, + 63, 1818, 1817, -1,1819, 64, 65, -1,1820, 1821, 35, -1,1821, 1820, 66, -1,50, 1821, + 67, -1,1821, 50, 34, -1,65, 66, 1820, -1,67, 51, 50, -1,66, 67, 1821, -1,1820, 1819, + 65, -1,1819, 1820, 36, -1,52, 51, 68, -1,52, 1822, 53, -1,1822, 52, 68, -1,1822, + 68, 69, -1,54, 53, 1823, -1,1824, 55, 54, -1,1825, 56, 55, -1,1827, 58, 57, -1,1828, + 59, 58, -1,57, 56, 1826, -1,1822, 1823, 53, -1,1823, 1824, 54, -1,1824, 1823, 69, -1, + 1825, 1824, 69, -1,1824, 1825, 55, -1,69, 1823, 1822, -1,1825, 69, 1826, -1,1826, + 1827, 57, -1,1827, 1826, 69, -1,1828, 1827, 69, -1,1827, 1828, 58, -1,1828, 69, 70, -1, + 1828, 70, 59, -1,1825, 1826, 56, -1,61, 59, 70, -1,61, 1829, 62, -1,1829, 61, 70, -1, + 1829, 70, 69, -1,63, 62, 1830, -1,1831, 64, 63, -1,1832, 65, 64, -1,1834, 67, 66, -1, + 1835, 51, 67, -1,66, 65, 1833, -1,1829, 1830, 62, -1,1830, 1831, 63, -1,1831, 1830, + 69, -1,1832, 1831, 69, -1,1831, 1832, 64, -1,69, 1830, 1829, -1,1832, 69, 1833, -1, + 1833, 1834, 66, -1,1834, 1833, 69, -1,1835, 1834, 69, -1,1834, 1835, 67, -1,1835, + 69, 68, -1,1835, 68, 51, -1,1832, 1833, 65, -1,78, 165, 79, -1,80, 79, 163, -1,79, + 164, 163, -1,80, 163, 162, -1,162, 81, 80, -1,164, 79, 165, -1,77, 166, 78, -1,167, + 166, 92, -1,165, 78, 166, -1,91, 168, 167, -1,90, 168, 91, -1,92, 91, 167, -1,92, + 166, 77, -1,160, 82, 161, -1,81, 161, 82, -1,158, 82, 159, -1,82, 160, 159, -1,89, + 153, 90, -1,153, 168, 90, -1,104, 153, 89, -1,103, 154, 104, -1,153, 104, 154, -1, + 155, 154, 103, -1,161, 81, 162, -1,94, 77, 124, -1,92, 77, 93, -1,93, 77, 94, -1, + 76, 124, 77, -1,123, 95, 94, -1,124, 123, 94, -1,75, 125, 76, -1,124, 76, 125, -1, + 126, 125, 75, -1,74, 127, 75, -1,126, 75, 127, -1,128, 127, 74, -1,122, 95, 123, -1, + 96, 122, 121, -1,95, 122, 96, -1,97, 96, 121, -1,98, 121, 136, -1,97, 121, 98, -1, + 99, 98, 136, -1,73, 129, 128, -1,72, 129, 73, -1,74, 73, 128, -1,99, 136, 135, -1, + 129, 72, 130, -1,130, 72, 131, -1,109, 99, 135, -1,149, 155, 103, -1,146, 158, 157, -1, + 147, 157, 156, -1,148, 156, 155, -1,156, 148, 147, -1,157, 147, 146, -1,146, 145, + 158, -1,155, 149, 148, -1,151, 102, 101, -1,150, 149, 103, -1,150, 103, 102, -1,107, + 151, 101, -1,102, 151, 150, -1,151, 106, 152, -1,83, 145, 144, -1,83, 144, 143, -1, + 84, 142, 141, -1,143, 142, 83, -1,83, 142, 84, -1,83, 158, 145, -1,139, 138, 86, -1, + 138, 137, 120, -1,85, 84, 140, -1,141, 140, 84, -1,139, 85, 140, -1,137, 152, 105, -1, + 83, 82, 158, -1,86, 85, 139, -1,99, 109, 108, -1,107, 100, 108, -1,135, 110, 109, -1, + 101, 100, 107, -1,151, 107, 106, -1,134, 110, 135, -1,71, 132, 72, -1,112, 111, 133, -1, + 134, 133, 111, -1,132, 112, 133, -1,111, 110, 134, -1,112, 132, 113, -1,100, 99, + 108, -1,120, 137, 105, -1,86, 120, 119, -1,118, 87, 119, -1,86, 119, 87, -1,88, 87, + 118, -1,106, 105, 152, -1,71, 115, 114, -1,71, 114, 113, -1,116, 88, 117, -1,118, + 117, 88, -1,115, 71, 116, -1,88, 116, 71, -1,132, 71, 113, -1,138, 120, 86, -1,131, + 72, 132, -1,257, 256, 170, -1,172, 256, 255, -1,257, 170, 169, -1,246, 258, 257, -1, + 246, 257, 169, -1,247, 246, 169, -1,2618, 245, 254, -1,253, 259, 2618, -1,368, 255, + 254, -1,259, 2616, 2618, -1,251, 250, 252, -1,258, 246, 2616, -1,209, 248, 2617, -1, + 171, 170, 256, -1,169, 212, 247, -1,212, 211, 247, -1,213, 212, 169, -1,232, 230, + 229, -1,214, 213, 169, -1,210, 209, 2617, -1,211, 2617, 247, -1,208, 241, 209, -1, + 230, 232, 231, -1,241, 208, 207, -1,207, 2614, 241, -1,209, 241, 248, -1,233, 232, + 229, -1,245, 2618, 2616, -1,255, 365, 172, -1,173, 172, 364, -1,368, 367, 255, -1, + 254, 369, 368, -1,252, 369, 245, -1,369, 254, 245, -1,278, 369, 252, -1,171, 256, + 172, -1,365, 255, 366, -1,172, 365, 364, -1,280, 279, 252, -1,278, 252, 279, -1,278, + 277, 369, -1,366, 255, 367, -1,249, 280, 252, -1,282, 281, 249, -1,281, 280, 249, -1, + 248, 282, 249, -1,269, 268, 240, -1,240, 268, 248, -1,241, 240, 248, -1,283, 282, + 248, -1,300, 292, 291, -1,283, 248, 284, -1,248, 267, 284, -1,248, 268, 267, -1,284, + 267, 285, -1,250, 249, 252, -1,270, 2613, 239, -1,240, 270, 269, -1,215, 169, 216, -1, + 226, 225, 234, -1,234, 227, 226, -1,216, 169, 217, -1,234, 233, 228, -1,224, 221, + 225, -1,224, 223, 221, -1,225, 221, 234, -1,228, 227, 234, -1,228, 233, 229, -1,205, + 219, 218, -1,205, 218, 217, -1,198, 205, 197, -1,205, 169, 197, -1,198, 197, 199, -1, + 220, 219, 205, -1,205, 217, 169, -1,222, 221, 223, -1,235, 234, 221, -1,220, 235, + 221, -1,237, 236, 2612, -1,236, 235, 2611, -1,202, 201, 203, -1,2611, 2612, 236, -1, + 2611, 235, 220, -1,214, 169, 215, -1,243, 242, 244, -1,242, 206, 244, -1,204, 239, + 238, -1,239, 319, 318, -1,270, 239, 318, -1,270, 318, 317, -1,204, 319, 239, -1,322, + 321, 203, -1,320, 203, 321, -1,204, 203, 320, -1,320, 319, 204, -1,2614, 207, 2615, -1, + 201, 200, 203, -1,324, 200, 199, -1,322, 203, 200, -1,193, 199, 194, -1,199, 195, + 194, -1,199, 196, 195, -1,322, 200, 323, -1,197, 196, 199, -1,332, 331, 340, -1,192, + 199, 193, -1,192, 191, 324, -1,324, 191, 325, -1,199, 192, 324, -1,323, 200, 324, -1, + 204, 238, 2612, -1,206, 242, 2615, -1,292, 300, 293, -1,362, 361, 173, -1,363, 362, + 173, -1,364, 363, 173, -1,359, 361, 360, -1,361, 359, 173, -1,173, 359, 174, -1,369, + 277, 276, -1,369, 276, 275, -1,174, 2610, 175, -1,298, 297, 296, -1,287, 300, 291, -1, + 300, 294, 293, -1,287, 290, 289, -1,286, 285, 266, -1,294, 299, 295, -1,266, 285, + 267, -1,294, 300, 299, -1,287, 291, 290, -1,287, 289, 288, -1,266, 265, 286, -1,286, + 265, 264, -1,287, 286, 301, -1,301, 300, 287, -1,299, 298, 295, -1,298, 296, 295, -1, + 275, 351, 369, -1,358, 2610, 174, -1,356, 2610, 357, -1,307, 351, 275, -1,274, 307, + 275, -1,355, 176, 356, -1,358, 174, 359, -1,176, 78, 177, -1,353, 78, 176, -1,355, + 354, 176, -1,176, 354, 353, -1,78, 352, 351, -1,352, 78, 353, -1,307, 306, 351, -1, + 358, 357, 2610, -1,2610, 356, 176, -1,351, 306, 77, -1,2621, 2620, 273, -1,273, 307, + 274, -1,273, 2620, 307, -1,302, 301, 264, -1,301, 286, 264, -1,302, 264, 263, -1, + 308, 310, 309, -1,308, 2620, 311, -1,308, 311, 310, -1,304, 303, 263, -1,303, 302, + 263, -1,77, 306, 305, -1,305, 304, 262, -1,78, 351, 77, -1,316, 270, 317, -1,336, + 335, 338, -1,339, 335, 334, -1,337, 336, 338, -1,347, 315, 314, -1,347, 314, 313, -1, + 334, 340, 339, -1,338, 335, 339, -1,341, 340, 327, -1,316, 315, 2619, -1,333, 340, + 334, -1,328, 327, 329, -1,329, 327, 330, -1,326, 325, 190, -1,191, 190, 325, -1,340, + 331, 327, -1,340, 333, 332, -1,185, 341, 326, -1,330, 327, 331, -1,186, 185, 326, -1, + 190, 189, 326, -1,188, 326, 189, -1,188, 187, 186, -1,188, 186, 326, -1,341, 327, + 326, -1,262, 304, 263, -1,261, 305, 262, -1,350, 348, 312, -1,347, 313, 2622, -1, + 347, 2619, 315, -1,272, 261, 260, -1,271, 77, 272, -1,272, 305, 261, -1,346, 77, + 271, -1,271, 2619, 347, -1,349, 348, 350, -1,312, 2622, 313, -1,348, 2622, 312, -1, + 346, 271, 347, -1,76, 77, 346, -1,305, 272, 77, -1,184, 343, 342, -1,185, 184, 342, -1, + 184, 183, 343, -1,344, 343, 183, -1,182, 344, 183, -1,341, 185, 342, -1,181, 345, + 182, -1,344, 182, 345, -1,180, 345, 181, -1,76, 180, 179, -1,2611, 220, 205, -1,179, + 178, 76, -1,76, 345, 180, -1,76, 346, 345, -1,237, 2612, 238, -1,2613, 270, 240, -1, + 206, 2615, 207, -1,258, 2616, 259, -1,210, 2617, 211, -1,2619, 270, 316, -1,2621, + 311, 2620, -1,372, 375, 374, -1,372, 374, 373, -1,380, 372, 371, -1,376, 375, 372, -1, + 377, 376, 380, -1,378, 377, 380, -1,380, 371, 370, -1,379, 378, 380, -1,376, 372, + 380, -1,382, 385, 384, -1,382, 384, 383, -1,390, 382, 381, -1,386, 385, 382, -1,387, + 386, 390, -1,388, 387, 390, -1,390, 381, 391, -1,389, 388, 390, -1,386, 382, 390, -1, + 393, 392, 394, -1,396, 395, 397, -1,400, 403, 402, -1,400, 402, 401, -1,408, 400, + 399, -1,404, 403, 400, -1,405, 404, 408, -1,406, 405, 408, -1,408, 399, 398, -1,407, + 406, 408, -1,404, 400, 408, -1,411, 414, 413, -1,411, 413, 412, -1,419, 411, 410, -1, + 415, 414, 411, -1,416, 415, 419, -1,417, 416, 419, -1,419, 410, 409, -1,418, 417, + 419, -1,415, 411, 419, -1,422, 425, 424, -1,422, 424, 423, -1,430, 422, 421, -1,426, + 425, 422, -1,427, 426, 430, -1,428, 427, 430, -1,430, 421, 420, -1,429, 428, 430, -1, + 426, 422, 430, -1,72, 431, 71, -1,434, 1838, 433, -1,1837, 434, 435, -1,1836, 1837, + 435, -1,1836, 431, 436, -1,74, 1838, 1837, -1,1836, 435, 431, -1,1838, 434, 1837, -1, + 197, 432, 443, -1,443, 432, 441, -1,441, 442, 443, -1,440, 441, 1838, -1,441, 432, + 1838, -1,432, 433, 1838, -1,443, 442, 196, -1,1837, 1836, 73, -1,1838, 74, 75, -1, + 73, 436, 72, -1,74, 1837, 73, -1,439, 1838, 75, -1,1838, 439, 440, -1,438, 439, 437, -1, + 437, 178, 438, -1,76, 437, 439, -1,439, 75, 76, -1,1836, 436, 73, -1,452, 453, 454, -1, + 451, 452, 1839, -1,454, 1839, 452, -1,1839, 454, 97, -1,1840, 1839, 98, -1,1839, + 1840, 451, -1,451, 1840, 1841, -1,449, 450, 1841, -1,1842, 448, 449, -1,446, 447, + 1844, -1,448, 1843, 447, -1,1845, 445, 446, -1,449, 1841, 1842, -1,450, 451, 1841, -1, + 1840, 99, 1841, -1,1843, 1842, 101, -1,98, 1839, 97, -1,1840, 98, 99, -1,1842, 1843, + 448, -1,100, 1841, 99, -1,100, 101, 1842, -1,100, 1842, 1841, -1,1843, 101, 102, -1, + 1844, 1845, 446, -1,1845, 1844, 103, -1,444, 1845, 104, -1,1845, 444, 445, -1,102, + 103, 1844, -1,104, 89, 444, -1,103, 104, 1845, -1,1844, 1843, 102, -1,1843, 1844, + 447, -1,461, 445, 444, -1,460, 461, 1846, -1,444, 1846, 461, -1,1846, 444, 89, -1, + 1847, 1846, 90, -1,1846, 1847, 460, -1,460, 1847, 1848, -1,458, 459, 1848, -1,1849, + 457, 458, -1,455, 456, 1851, -1,457, 1850, 456, -1,1852, 453, 455, -1,458, 1848, + 1849, -1,459, 460, 1848, -1,1847, 91, 1848, -1,1850, 1849, 93, -1,90, 1846, 89, -1, + 1847, 90, 91, -1,1849, 1850, 457, -1,92, 1848, 91, -1,92, 93, 1849, -1,92, 1849, + 1848, -1,1850, 93, 94, -1,1851, 1852, 455, -1,1852, 1851, 95, -1,454, 1852, 96, -1, + 1852, 454, 453, -1,94, 95, 1851, -1,96, 97, 454, -1,95, 96, 1852, -1,1851, 1850, + 94, -1,1850, 1851, 456, -1,472, 462, 463, -1,471, 472, 1853, -1,463, 1853, 472, -1, + 1853, 463, 453, -1,1854, 1853, 452, -1,1853, 1854, 471, -1,471, 1854, 1855, -1,469, + 470, 1855, -1,1856, 468, 469, -1,466, 467, 1858, -1,468, 1857, 467, -1,1859, 465, + 466, -1,469, 1855, 1856, -1,470, 471, 1855, -1,1854, 451, 1855, -1,1857, 1856, 449, -1, + 452, 1853, 453, -1,1854, 452, 451, -1,1856, 1857, 468, -1,450, 1855, 451, -1,450, + 449, 1856, -1,450, 1856, 1855, -1,1857, 449, 448, -1,1858, 1859, 466, -1,1859, 1858, + 447, -1,464, 1859, 446, -1,1859, 464, 465, -1,448, 447, 1858, -1,446, 445, 464, -1, + 447, 446, 1859, -1,1858, 1857, 448, -1,1857, 1858, 467, -1,479, 465, 464, -1,478, + 479, 1860, -1,464, 1860, 479, -1,1860, 464, 445, -1,1861, 1860, 461, -1,1860, 1861, + 478, -1,478, 1861, 1862, -1,476, 477, 1862, -1,1863, 475, 476, -1,473, 474, 1865, -1, + 475, 1864, 474, -1,1866, 462, 473, -1,476, 1862, 1863, -1,477, 478, 1862, -1,1861, + 460, 1862, -1,1864, 1863, 458, -1,461, 1860, 445, -1,1861, 461, 460, -1,1863, 1864, + 475, -1,459, 1862, 460, -1,459, 458, 1863, -1,459, 1863, 1862, -1,1864, 458, 457, -1, + 1865, 1866, 473, -1,1866, 1865, 456, -1,463, 1866, 455, -1,1866, 463, 462, -1,457, + 456, 1865, -1,455, 453, 463, -1,456, 455, 1866, -1,1865, 1864, 457, -1,1864, 1865, + 474, -1,490, 480, 481, -1,489, 490, 1867, -1,481, 1867, 490, -1,1867, 481, 462, -1, + 1868, 1867, 472, -1,1867, 1868, 489, -1,489, 1868, 1869, -1,487, 488, 1869, -1,1870, + 486, 487, -1,484, 485, 1872, -1,486, 1871, 485, -1,1873, 483, 484, -1,487, 1869, + 1870, -1,488, 489, 1869, -1,1868, 471, 1869, -1,1871, 1870, 469, -1,472, 1867, 462, -1, + 1868, 472, 471, -1,1870, 1871, 486, -1,470, 1869, 471, -1,470, 469, 1870, -1,470, + 1870, 1869, -1,1871, 469, 468, -1,1872, 1873, 484, -1,1873, 1872, 467, -1,482, 1873, + 466, -1,1873, 482, 483, -1,468, 467, 1872, -1,466, 465, 482, -1,467, 466, 1873, -1, + 1872, 1871, 468, -1,1871, 1872, 485, -1,497, 483, 482, -1,496, 497, 1874, -1,482, + 1874, 497, -1,1874, 482, 465, -1,1875, 1874, 479, -1,1874, 1875, 496, -1,496, 1875, + 1876, -1,494, 495, 1876, -1,1877, 493, 494, -1,491, 492, 1879, -1,493, 1878, 492, -1, + 1880, 480, 491, -1,494, 1876, 1877, -1,495, 496, 1876, -1,1875, 478, 1876, -1,1878, + 1877, 476, -1,479, 1874, 465, -1,1875, 479, 478, -1,1877, 1878, 493, -1,477, 1876, + 478, -1,477, 476, 1877, -1,477, 1877, 1876, -1,1878, 476, 475, -1,1879, 1880, 491, -1, + 1880, 1879, 474, -1,481, 1880, 473, -1,1880, 481, 480, -1,475, 474, 1879, -1,473, + 462, 481, -1,474, 473, 1880, -1,1879, 1878, 475, -1,1878, 1879, 492, -1,508, 498, + 499, -1,507, 508, 1881, -1,499, 1881, 508, -1,1881, 499, 480, -1,1882, 1881, 490, -1, + 1881, 1882, 507, -1,507, 1882, 1883, -1,505, 506, 1883, -1,1884, 504, 505, -1,502, + 503, 1886, -1,504, 1885, 503, -1,1887, 501, 502, -1,505, 1883, 1884, -1,506, 507, + 1883, -1,1882, 489, 1883, -1,1885, 1884, 487, -1,490, 1881, 480, -1,1882, 490, 489, -1, + 1884, 1885, 504, -1,488, 1883, 489, -1,488, 487, 1884, -1,488, 1884, 1883, -1,1885, + 487, 486, -1,1886, 1887, 502, -1,1887, 1886, 485, -1,500, 1887, 484, -1,1887, 500, + 501, -1,486, 485, 1886, -1,484, 483, 500, -1,485, 484, 1887, -1,1886, 1885, 486, -1, + 1885, 1886, 503, -1,515, 501, 500, -1,514, 515, 1888, -1,500, 1888, 515, -1,1888, + 500, 483, -1,1889, 1888, 497, -1,1888, 1889, 514, -1,514, 1889, 1890, -1,512, 513, + 1890, -1,1891, 511, 512, -1,509, 510, 1893, -1,511, 1892, 510, -1,1894, 498, 509, -1, + 512, 1890, 1891, -1,513, 514, 1890, -1,1889, 496, 1890, -1,1892, 1891, 494, -1,497, + 1888, 483, -1,1889, 497, 496, -1,1891, 1892, 511, -1,495, 1890, 496, -1,495, 494, + 1891, -1,495, 1891, 1890, -1,1892, 494, 493, -1,1893, 1894, 509, -1,1894, 1893, 492, -1, + 499, 1894, 491, -1,1894, 499, 498, -1,493, 492, 1893, -1,491, 480, 499, -1,492, 491, + 1894, -1,1893, 1892, 493, -1,1892, 1893, 510, -1,501, 515, 514, -1,501, 514, 503, -1, + 514, 510, 503, -1,502, 501, 503, -1,505, 504, 503, -1,503, 507, 505, -1,514, 513, + 512, -1,512, 511, 510, -1,510, 507, 503, -1,498, 510, 509, -1,505, 507, 506, -1,498, + 508, 507, -1,510, 498, 507, -1,514, 512, 510, -1,524, 525, 526, -1,523, 524, 1895, -1, + 526, 1895, 524, -1,1895, 526, 121, -1,1896, 1895, 122, -1,1895, 1896, 523, -1,523, + 1896, 1897, -1,521, 522, 1897, -1,1898, 520, 521, -1,518, 519, 1900, -1,520, 1899, + 519, -1,1901, 517, 518, -1,521, 1897, 1898, -1,522, 523, 1897, -1,1896, 123, 1897, -1, + 1899, 1898, 125, -1,122, 1895, 121, -1,1896, 122, 123, -1,1898, 1899, 520, -1,124, + 1897, 123, -1,124, 125, 1898, -1,124, 1898, 1897, -1,1899, 125, 126, -1,1900, 1901, + 518, -1,1901, 1900, 127, -1,516, 1901, 128, -1,1901, 516, 517, -1,126, 127, 1900, -1, + 128, 129, 516, -1,127, 128, 1901, -1,1900, 1899, 126, -1,1899, 1900, 519, -1,533, + 517, 516, -1,532, 533, 1902, -1,516, 1902, 533, -1,1902, 516, 129, -1,1903, 1902, + 130, -1,1902, 1903, 532, -1,532, 1903, 1904, -1,530, 531, 1904, -1,1905, 529, 530, -1, + 527, 528, 1907, -1,529, 1906, 528, -1,1908, 525, 527, -1,530, 1904, 1905, -1,531, + 532, 1904, -1,1903, 131, 1904, -1,1906, 1905, 133, -1,130, 1902, 129, -1,1903, 130, + 131, -1,1905, 1906, 529, -1,132, 1904, 131, -1,132, 133, 1905, -1,132, 1905, 1904, -1, + 1906, 133, 134, -1,1907, 1908, 527, -1,1908, 1907, 135, -1,526, 1908, 136, -1,1908, + 526, 525, -1,134, 135, 1907, -1,136, 121, 526, -1,135, 136, 1908, -1,1907, 1906, + 134, -1,1906, 1907, 528, -1,541, 542, 543, -1,540, 541, 1909, -1,543, 1909, 541, -1, + 1909, 543, 525, -1,1910, 1909, 524, -1,1909, 1910, 540, -1,540, 1910, 1911, -1,538, + 539, 1911, -1,1912, 537, 538, -1,535, 536, 1914, -1,537, 1913, 536, -1,1915, 534, + 535, -1,538, 1911, 1912, -1,539, 540, 1911, -1,1910, 523, 1911, -1,1913, 1912, 521, -1, + 524, 1909, 525, -1,1910, 524, 523, -1,1912, 1913, 537, -1,522, 1911, 523, -1,522, + 521, 1912, -1,522, 1912, 1911, -1,1913, 521, 520, -1,1914, 1915, 535, -1,1915, 1914, + 519, -1,544, 1915, 518, -1,1915, 544, 534, -1,520, 519, 1914, -1,518, 517, 544, -1, + 519, 518, 1915, -1,1914, 1913, 520, -1,1913, 1914, 536, -1,551, 534, 544, -1,550, + 551, 1916, -1,544, 1916, 551, -1,1916, 544, 517, -1,1917, 1916, 533, -1,1916, 1917, + 550, -1,550, 1917, 1918, -1,548, 549, 1918, -1,1919, 547, 548, -1,545, 546, 1921, -1, + 547, 1920, 546, -1,1922, 542, 545, -1,548, 1918, 1919, -1,549, 550, 1918, -1,1917, + 532, 1918, -1,1920, 1919, 530, -1,533, 1916, 517, -1,1917, 533, 532, -1,1919, 1920, + 547, -1,531, 1918, 532, -1,531, 530, 1919, -1,531, 1919, 1918, -1,1920, 530, 529, -1, + 1921, 1922, 545, -1,1922, 1921, 528, -1,543, 1922, 527, -1,1922, 543, 542, -1,529, + 528, 1921, -1,527, 525, 543, -1,528, 527, 1922, -1,1921, 1920, 529, -1,1920, 1921, + 546, -1,559, 560, 561, -1,558, 559, 1923, -1,561, 1923, 559, -1,1923, 561, 542, -1, + 1924, 1923, 541, -1,1923, 1924, 558, -1,558, 1924, 1925, -1,556, 557, 1925, -1,1926, + 555, 556, -1,553, 554, 1928, -1,555, 1927, 554, -1,1929, 552, 553, -1,556, 1925, + 1926, -1,557, 558, 1925, -1,1924, 540, 1925, -1,1927, 1926, 538, -1,541, 1923, 542, -1, + 1924, 541, 540, -1,1926, 1927, 555, -1,539, 1925, 540, -1,539, 538, 1926, -1,539, + 1926, 1925, -1,1927, 538, 537, -1,1928, 1929, 553, -1,1929, 1928, 536, -1,562, 1929, + 535, -1,1929, 562, 552, -1,537, 536, 1928, -1,535, 534, 562, -1,536, 535, 1929, -1, + 1928, 1927, 537, -1,1927, 1928, 554, -1,569, 552, 562, -1,568, 569, 1930, -1,562, + 1930, 569, -1,1930, 562, 534, -1,1931, 1930, 551, -1,1930, 1931, 568, -1,568, 1931, + 1932, -1,566, 567, 1932, -1,1933, 565, 566, -1,563, 564, 1935, -1,565, 1934, 564, -1, + 1936, 560, 563, -1,566, 1932, 1933, -1,567, 568, 1932, -1,1931, 550, 1932, -1,1934, + 1933, 548, -1,551, 1930, 534, -1,1931, 551, 550, -1,1933, 1934, 565, -1,549, 1932, + 550, -1,549, 548, 1933, -1,549, 1933, 1932, -1,1934, 548, 547, -1,1935, 1936, 563, -1, + 1936, 1935, 546, -1,561, 1936, 545, -1,1936, 561, 560, -1,547, 546, 1935, -1,545, + 542, 561, -1,546, 545, 1936, -1,1935, 1934, 547, -1,1934, 1935, 564, -1,577, 578, + 579, -1,576, 577, 1937, -1,579, 1937, 577, -1,1937, 579, 560, -1,1938, 1937, 559, -1, + 1937, 1938, 576, -1,576, 1938, 1939, -1,574, 575, 1939, -1,1940, 573, 574, -1,571, + 572, 1942, -1,573, 1941, 572, -1,1943, 570, 571, -1,574, 1939, 1940, -1,575, 576, + 1939, -1,1938, 558, 1939, -1,1941, 1940, 556, -1,559, 1937, 560, -1,1938, 559, 558, -1, + 1940, 1941, 573, -1,557, 1939, 558, -1,557, 556, 1940, -1,557, 1940, 1939, -1,1941, + 556, 555, -1,1942, 1943, 571, -1,1943, 1942, 554, -1,580, 1943, 553, -1,1943, 580, + 570, -1,555, 554, 1942, -1,553, 552, 580, -1,554, 553, 1943, -1,1942, 1941, 555, -1, + 1941, 1942, 572, -1,587, 570, 580, -1,586, 587, 1944, -1,580, 1944, 587, -1,1944, + 580, 552, -1,1945, 1944, 569, -1,1944, 1945, 586, -1,586, 1945, 1946, -1,584, 585, + 1946, -1,1947, 583, 584, -1,581, 582, 1949, -1,583, 1948, 582, -1,1950, 578, 581, -1, + 584, 1946, 1947, -1,585, 586, 1946, -1,1945, 568, 1946, -1,1948, 1947, 566, -1,569, + 1944, 552, -1,1945, 569, 568, -1,1947, 1948, 583, -1,567, 1946, 568, -1,567, 566, + 1947, -1,567, 1947, 1946, -1,1948, 566, 565, -1,1949, 1950, 581, -1,1950, 1949, 564, -1, + 579, 1950, 563, -1,1950, 579, 578, -1,565, 564, 1949, -1,563, 560, 579, -1,564, 563, + 1950, -1,1949, 1948, 565, -1,1948, 1949, 582, -1,578, 577, 576, -1,578, 576, 582, -1, + 576, 572, 582, -1,581, 578, 582, -1,584, 583, 582, -1,582, 586, 584, -1,576, 575, + 574, -1,574, 573, 572, -1,572, 586, 582, -1,570, 572, 571, -1,584, 586, 585, -1,570, + 587, 586, -1,572, 570, 586, -1,576, 574, 572, -1,596, 597, 598, -1,595, 596, 1951, -1, + 598, 1951, 596, -1,1951, 598, 145, -1,1952, 1951, 146, -1,1951, 1952, 595, -1,595, + 1952, 1953, -1,593, 594, 1953, -1,1954, 592, 593, -1,590, 591, 1956, -1,592, 1955, + 591, -1,1957, 589, 590, -1,593, 1953, 1954, -1,594, 595, 1953, -1,1952, 147, 1953, -1, + 1955, 1954, 149, -1,146, 1951, 145, -1,1952, 146, 147, -1,1954, 1955, 592, -1,148, + 1953, 147, -1,148, 149, 1954, -1,148, 1954, 1953, -1,1955, 149, 150, -1,1956, 1957, + 590, -1,1957, 1956, 151, -1,588, 1957, 152, -1,1957, 588, 589, -1,150, 151, 1956, -1, + 152, 137, 588, -1,151, 152, 1957, -1,1956, 1955, 150, -1,1955, 1956, 591, -1,605, + 589, 588, -1,604, 605, 1958, -1,588, 1958, 605, -1,1958, 588, 137, -1,1959, 1958, + 138, -1,1958, 1959, 604, -1,604, 1959, 1960, -1,602, 603, 1960, -1,1961, 601, 602, -1, + 599, 600, 1963, -1,601, 1962, 600, -1,1964, 597, 599, -1,602, 1960, 1961, -1,603, + 604, 1960, -1,1959, 139, 1960, -1,1962, 1961, 141, -1,138, 1958, 137, -1,1959, 138, + 139, -1,1961, 1962, 601, -1,140, 1960, 139, -1,140, 141, 1961, -1,140, 1961, 1960, -1, + 1962, 141, 142, -1,1963, 1964, 599, -1,1964, 1963, 143, -1,598, 1964, 144, -1,1964, + 598, 597, -1,142, 143, 1963, -1,144, 145, 598, -1,143, 144, 1964, -1,1963, 1962, + 142, -1,1962, 1963, 600, -1,613, 614, 615, -1,612, 613, 1965, -1,615, 1965, 613, -1, + 1965, 615, 597, -1,1966, 1965, 596, -1,1965, 1966, 612, -1,612, 1966, 1967, -1,610, + 611, 1967, -1,1968, 609, 610, -1,607, 608, 1970, -1,609, 1969, 608, -1,1971, 606, + 607, -1,610, 1967, 1968, -1,611, 612, 1967, -1,1966, 595, 1967, -1,1969, 1968, 593, -1, + 596, 1965, 597, -1,1966, 596, 595, -1,1968, 1969, 609, -1,594, 1967, 595, -1,594, + 593, 1968, -1,594, 1968, 1967, -1,1969, 593, 592, -1,1970, 1971, 607, -1,1971, 1970, + 591, -1,616, 1971, 590, -1,1971, 616, 606, -1,592, 591, 1970, -1,590, 589, 616, -1, + 591, 590, 1971, -1,1970, 1969, 592, -1,1969, 1970, 608, -1,623, 606, 616, -1,622, + 623, 1972, -1,616, 1972, 623, -1,1972, 616, 589, -1,1973, 1972, 605, -1,1972, 1973, + 622, -1,622, 1973, 1974, -1,620, 621, 1974, -1,1975, 619, 620, -1,617, 618, 1977, -1, + 619, 1976, 618, -1,1978, 614, 617, -1,620, 1974, 1975, -1,621, 622, 1974, -1,1973, + 604, 1974, -1,1976, 1975, 602, -1,605, 1972, 589, -1,1973, 605, 604, -1,1975, 1976, + 619, -1,603, 1974, 604, -1,603, 602, 1975, -1,603, 1975, 1974, -1,1976, 602, 601, -1, + 1977, 1978, 617, -1,1978, 1977, 600, -1,615, 1978, 599, -1,1978, 615, 614, -1,601, + 600, 1977, -1,599, 597, 615, -1,600, 599, 1978, -1,1977, 1976, 601, -1,1976, 1977, + 618, -1,631, 632, 633, -1,630, 631, 1979, -1,633, 1979, 631, -1,1979, 633, 614, -1, + 1980, 1979, 613, -1,1979, 1980, 630, -1,630, 1980, 1981, -1,628, 629, 1981, -1,1982, + 627, 628, -1,625, 626, 1984, -1,627, 1983, 626, -1,1985, 624, 625, -1,628, 1981, + 1982, -1,629, 630, 1981, -1,1980, 612, 1981, -1,1983, 1982, 610, -1,613, 1979, 614, -1, + 1980, 613, 612, -1,1982, 1983, 627, -1,611, 1981, 612, -1,611, 610, 1982, -1,611, + 1982, 1981, -1,1983, 610, 609, -1,1984, 1985, 625, -1,1985, 1984, 608, -1,634, 1985, + 607, -1,1985, 634, 624, -1,609, 608, 1984, -1,607, 606, 634, -1,608, 607, 1985, -1, + 1984, 1983, 609, -1,1983, 1984, 626, -1,641, 624, 634, -1,640, 641, 1986, -1,634, + 1986, 641, -1,1986, 634, 606, -1,1987, 1986, 623, -1,1986, 1987, 640, -1,640, 1987, + 1988, -1,638, 639, 1988, -1,1989, 637, 638, -1,635, 636, 1991, -1,637, 1990, 636, -1, + 1992, 632, 635, -1,638, 1988, 1989, -1,639, 640, 1988, -1,1987, 622, 1988, -1,1990, + 1989, 620, -1,623, 1986, 606, -1,1987, 623, 622, -1,1989, 1990, 637, -1,621, 1988, + 622, -1,621, 620, 1989, -1,621, 1989, 1988, -1,1990, 620, 619, -1,1991, 1992, 635, -1, + 1992, 1991, 618, -1,633, 1992, 617, -1,1992, 633, 632, -1,619, 618, 1991, -1,617, + 614, 633, -1,618, 617, 1992, -1,1991, 1990, 619, -1,1990, 1991, 636, -1,649, 650, + 651, -1,648, 649, 1993, -1,651, 1993, 649, -1,1993, 651, 632, -1,1994, 1993, 631, -1, + 1993, 1994, 648, -1,648, 1994, 1995, -1,646, 647, 1995, -1,1996, 645, 646, -1,643, + 644, 1998, -1,645, 1997, 644, -1,1999, 642, 643, -1,646, 1995, 1996, -1,647, 648, + 1995, -1,1994, 630, 1995, -1,1997, 1996, 628, -1,631, 1993, 632, -1,1994, 631, 630, -1, + 1996, 1997, 645, -1,629, 1995, 630, -1,629, 628, 1996, -1,629, 1996, 1995, -1,1997, + 628, 627, -1,1998, 1999, 643, -1,1999, 1998, 626, -1,652, 1999, 625, -1,1999, 652, + 642, -1,627, 626, 1998, -1,625, 624, 652, -1,626, 625, 1999, -1,1998, 1997, 627, -1, + 1997, 1998, 644, -1,659, 642, 652, -1,658, 659, 2000, -1,652, 2000, 659, -1,2000, + 652, 624, -1,2001, 2000, 641, -1,2000, 2001, 658, -1,658, 2001, 2002, -1,656, 657, + 2002, -1,2003, 655, 656, -1,653, 654, 2005, -1,655, 2004, 654, -1,2006, 650, 653, -1, + 656, 2002, 2003, -1,657, 658, 2002, -1,2001, 640, 2002, -1,2004, 2003, 638, -1,641, + 2000, 624, -1,2001, 641, 640, -1,2003, 2004, 655, -1,639, 2002, 640, -1,639, 638, + 2003, -1,639, 2003, 2002, -1,2004, 638, 637, -1,2005, 2006, 653, -1,2006, 2005, 636, -1, + 651, 2006, 635, -1,2006, 651, 650, -1,637, 636, 2005, -1,635, 632, 651, -1,636, 635, + 2006, -1,2005, 2004, 637, -1,2004, 2005, 654, -1,650, 649, 648, -1,647, 646, 648, -1, + 644, 654, 648, -1,653, 650, 654, -1,654, 650, 648, -1,654, 656, 655, -1,644, 648, + 646, -1,644, 658, 654, -1,643, 642, 644, -1,658, 644, 642, -1,657, 656, 658, -1,656, + 654, 658, -1,642, 659, 658, -1,644, 646, 645, -1,660, 2007, 2008, -1,2007, 660, 661, -1, + 2008, 2007, 664, -1,660, 2008, 88, -1,668, 86, 669, -1,88, 2009, 669, -1,2009, 88, + 2008, -1,668, 669, 2009, -1,2008, 665, 2009, -1,661, 662, 664, -1,663, 664, 662, -1, + 664, 665, 2008, -1,2009, 666, 668, -1,2009, 665, 666, -1,666, 667, 668, -1,2007, + 661, 664, -1,693, 692, 707, -1,693, 707, 706, -1,708, 691, 690, -1,692, 691, 708, -1, + 708, 707, 692, -1,709, 708, 690, -1,706, 694, 693, -1,694, 706, 705, -1,704, 695, + 705, -1,694, 705, 695, -1,711, 710, 716, -1,715, 712, 711, -1,716, 710, 709, -1,690, + 689, 709, -1,714, 713, 712, -1,716, 688, 717, -1,718, 717, 687, -1,688, 687, 717, -1, + 716, 689, 688, -1,686, 685, 719, -1,686, 719, 718, -1,684, 720, 685, -1,718, 687, + 686, -1,711, 716, 715, -1,716, 709, 689, -1,721, 720, 684, -1,683, 721, 684, -1,682, + 722, 683, -1,683, 722, 721, -1,719, 685, 720, -1,712, 715, 714, -1,698, 697, 671, -1, + 670, 698, 671, -1,704, 697, 696, -1,672, 671, 703, -1,703, 697, 704, -1,703, 671, + 697, -1,703, 702, 672, -1,663, 672, 702, -1,702, 664, 663, -1,701, 664, 702, -1,665, + 701, 700, -1,700, 666, 665, -1,665, 664, 701, -1,699, 666, 700, -1,723, 722, 681, -1, + 676, 724, 677, -1,723, 677, 724, -1,677, 723, 678, -1,678, 681, 680, -1,680, 679, + 678, -1,678, 723, 681, -1,682, 681, 722, -1,673, 699, 726, -1,699, 673, 667, -1,667, + 666, 699, -1,674, 673, 726, -1,676, 675, 724, -1,725, 724, 675, -1,725, 675, 674, -1, + 674, 726, 725, -1,696, 695, 704, -1,729, 752, 728, -1,752, 729, 751, -1,727, 728, + 753, -1,753, 728, 752, -1,727, 753, 754, -1,750, 730, 731, -1,749, 731, 732, -1,750, + 751, 730, -1,749, 750, 731, -1,730, 751, 729, -1,727, 755, 742, -1,727, 754, 755, -1, + 742, 756, 741, -1,756, 742, 755, -1,741, 756, 757, -1,758, 759, 739, -1,757, 758, + 740, -1,758, 739, 740, -1,739, 759, 738, -1,757, 740, 741, -1,759, 760, 738, -1,748, + 749, 732, -1,748, 733, 747, -1,733, 748, 732, -1,769, 770, 735, -1,747, 733, 734, -1, + 746, 734, 745, -1,734, 746, 747, -1,745, 734, 735, -1,743, 744, 735, -1,735, 744, + 745, -1,743, 735, 770, -1,769, 735, 768, -1,768, 735, 767, -1,760, 761, 737, -1,736, + 737, 761, -1,760, 737, 738, -1,767, 735, 766, -1,766, 735, 765, -1,763, 735, 762, -1, + 763, 764, 735, -1,762, 736, 761, -1,735, 764, 765, -1,762, 735, 736, -1,736, 735, + 771, -1,737, 736, 2010, -1,771, 2010, 736, -1,2010, 771, 772, -1,2011, 2010, 773, -1, + 2010, 2011, 737, -1,737, 2011, 2012, -1,739, 738, 2012, -1,2013, 740, 739, -1,742, + 741, 2015, -1,740, 2014, 741, -1,2016, 727, 742, -1,739, 2012, 2013, -1,738, 737, + 2012, -1,2011, 774, 2012, -1,2014, 2013, 776, -1,773, 2010, 772, -1,2011, 773, 774, -1, + 2013, 2014, 740, -1,775, 2012, 774, -1,775, 776, 2013, -1,775, 2013, 2012, -1,2014, + 776, 777, -1,2015, 2016, 742, -1,2016, 2015, 778, -1,781, 2016, 779, -1,2016, 781, + 727, -1,777, 778, 2015, -1,779, 780, 781, -1,778, 779, 2016, -1,2015, 2014, 777, -1, + 2014, 2015, 741, -1,785, 783, 782, -1,783, 785, 784, -1,774, 782, 778, -1,778, 780, + 779, -1,782, 780, 778, -1,777, 776, 778, -1,785, 782, 786, -1,772, 787, 786, -1,787, + 772, 788, -1,774, 772, 786, -1,774, 776, 775, -1,774, 778, 776, -1,774, 773, 772, -1, + 786, 782, 774, -1,2017, 743, 770, -1,743, 2017, 789, -1,716, 789, 2017, -1,769, 2017, + 770, -1,769, 768, 2018, -1,767, 766, 2019, -1,766, 765, 790, -1,2019, 768, 767, -1, + 2018, 2017, 769, -1,2017, 714, 715, -1,716, 2017, 715, -1,2017, 2018, 714, -1,2018, + 713, 714, -1,2019, 713, 2018, -1,766, 790, 2019, -1,711, 2019, 790, -1,2019, 711, + 712, -1,790, 710, 711, -1,712, 713, 2019, -1,768, 2019, 2018, -1,762, 791, 2020, -1, + 2020, 791, 707, -1,762, 2020, 763, -1,2021, 764, 763, -1,2022, 765, 764, -1,2021, + 763, 2020, -1,2020, 708, 2021, -1,708, 2020, 707, -1,2021, 708, 709, -1,2022, 790, + 765, -1,790, 2022, 709, -1,709, 710, 790, -1,2022, 2021, 709, -1,2021, 2022, 764, -1, + 799, 746, 800, -1,798, 799, 2023, -1,796, 797, 2025, -1,795, 796, 2026, -1,798, 2024, + 797, -1,2024, 798, 2023, -1,2023, 800, 719, -1,2024, 2023, 720, -1,2025, 797, 2024, -1, + 2026, 2027, 795, -1,796, 2025, 2026, -1,2027, 794, 795, -1,2027, 2026, 723, -1,2025, + 722, 2026, -1,794, 2027, 2028, -1,2024, 721, 2025, -1,2023, 799, 800, -1,792, 793, + 2029, -1,2030, 754, 792, -1,2032, 756, 755, -1,2033, 757, 756, -1,755, 754, 2031, -1, + 758, 757, 2034, -1,2029, 793, 2028, -1,2029, 2028, 802, -1,759, 758, 2035, -1,2036, + 760, 759, -1,791, 762, 761, -1,761, 760, 2037, -1,2029, 2030, 792, -1,793, 794, 2028, -1, + 2027, 801, 2028, -1,721, 2024, 720, -1,722, 2025, 721, -1,2031, 2030, 699, -1,2026, + 722, 723, -1,2027, 723, 801, -1,2030, 2031, 754, -1,720, 2023, 719, -1,802, 2028, + 801, -1,803, 2029, 802, -1,803, 804, 2030, -1,699, 700, 2031, -1,804, 699, 2030, -1, + 803, 2030, 2029, -1,2031, 700, 2032, -1,2032, 2033, 756, -1,2033, 2032, 701, -1,2034, + 2033, 702, -1,2033, 2034, 757, -1,2035, 2036, 759, -1,2036, 2035, 704, -1,2037, 791, + 761, -1,791, 2037, 706, -1,2036, 705, 2037, -1,2036, 2037, 760, -1,2034, 703, 2035, -1, + 2034, 2035, 758, -1,701, 702, 2033, -1,702, 703, 2034, -1,704, 705, 2036, -1,706, + 707, 791, -1,705, 706, 2037, -1,703, 704, 2035, -1,2032, 700, 701, -1,2031, 2032, + 755, -1,743, 789, 2038, -1,2038, 789, 716, -1,743, 2038, 744, -1,2039, 745, 744, -1, + 2040, 746, 745, -1,2039, 744, 2038, -1,2038, 717, 2039, -1,717, 2038, 716, -1,2039, + 717, 718, -1,2040, 800, 746, -1,800, 2040, 718, -1,718, 719, 800, -1,2040, 2039, + 718, -1,2039, 2040, 745, -1,806, 671, 672, -1,671, 807, 2623, -1,808, 671, 2623, -1, + 809, 810, 2624, -1,670, 2625, 2624, -1,670, 2624, 810, -1,671, 808, 2625, -1,671, + 2625, 670, -1,672, 663, 662, -1,2041, 806, 672, -1,2041, 662, 805, -1,661, 805, 662, -1, + 2041, 805, 806, -1,806, 807, 671, -1,2041, 672, 662, -1,82, 83, 811, -1,81, 82, 823, -1, + 2042, 80, 81, -1,820, 2044, 819, -1,2044, 820, 79, -1,80, 2043, 79, -1,79, 820, 78, -1, + 820, 822, 78, -1,820, 821, 822, -1,822, 821, 177, -1,2044, 818, 819, -1,2042, 81, + 823, -1,2043, 2042, 812, -1,811, 2042, 823, -1,812, 2042, 811, -1,2044, 79, 2043, -1, + 2043, 813, 2044, -1,813, 2043, 812, -1,2044, 813, 814, -1,171, 817, 816, -1,818, + 2044, 815, -1,818, 815, 816, -1,816, 815, 170, -1,816, 817, 818, -1,2044, 814, 815, -1, + 2043, 80, 2042, -1,168, 153, 824, -1,167, 168, 2045, -1,824, 2045, 168, -1,2045, + 824, 825, -1,2046, 2045, 826, -1,2045, 2046, 167, -1,167, 2046, 2047, -1,165, 166, + 2047, -1,2048, 164, 165, -1,162, 163, 2050, -1,164, 2049, 163, -1,2051, 161, 162, -1, + 165, 2047, 2048, -1,166, 167, 2047, -1,2046, 827, 2047, -1,2049, 2048, 829, -1,826, + 2045, 825, -1,2046, 826, 827, -1,2048, 2049, 164, -1,828, 2047, 827, -1,828, 829, + 2048, -1,828, 2048, 2047, -1,2049, 829, 830, -1,2050, 2051, 162, -1,2051, 2050, 831, -1, + 834, 2051, 832, -1,2051, 834, 161, -1,830, 831, 2050, -1,832, 833, 834, -1,831, 832, + 2051, -1,2050, 2049, 830, -1,2049, 2050, 163, -1,160, 161, 834, -1,159, 160, 2052, -1, + 834, 2052, 160, -1,2052, 834, 833, -1,2053, 2052, 835, -1,2052, 2053, 159, -1,159, + 2053, 2054, -1,157, 158, 2054, -1,2055, 156, 157, -1,154, 155, 2057, -1,156, 2056, + 155, -1,2058, 153, 154, -1,157, 2054, 2055, -1,158, 159, 2054, -1,2053, 836, 2054, -1, + 2056, 2055, 838, -1,835, 2052, 833, -1,2053, 835, 836, -1,2055, 2056, 156, -1,837, + 2054, 836, -1,837, 838, 2055, -1,837, 2055, 2054, -1,2056, 838, 839, -1,2057, 2058, + 154, -1,2058, 2057, 840, -1,824, 2058, 841, -1,2058, 824, 153, -1,839, 840, 2057, -1, + 841, 825, 824, -1,840, 841, 2058, -1,2057, 2056, 839, -1,2056, 2057, 155, -1,826, + 825, 844, -1,827, 826, 2059, -1,844, 2059, 826, -1,2059, 844, 845, -1,2060, 2059, + 846, -1,2059, 2060, 827, -1,827, 2060, 2061, -1,829, 828, 2061, -1,2062, 830, 829, -1, + 832, 831, 2064, -1,830, 2063, 831, -1,2065, 833, 832, -1,829, 2061, 2062, -1,828, + 827, 2061, -1,2060, 847, 2061, -1,2063, 2062, 849, -1,846, 2059, 845, -1,2060, 846, + 847, -1,2062, 2063, 830, -1,848, 2061, 847, -1,848, 849, 2062, -1,848, 2062, 2061, -1, + 2063, 849, 850, -1,2064, 2065, 832, -1,2065, 2064, 851, -1,843, 2065, 852, -1,2065, + 843, 833, -1,850, 851, 2064, -1,852, 842, 843, -1,851, 852, 2065, -1,2064, 2063, + 850, -1,2063, 2064, 831, -1,835, 833, 843, -1,836, 835, 2066, -1,843, 2066, 835, -1, + 2066, 843, 842, -1,2067, 2066, 853, -1,2066, 2067, 836, -1,836, 2067, 2068, -1,838, + 837, 2068, -1,2069, 839, 838, -1,841, 840, 2071, -1,839, 2070, 840, -1,2072, 825, + 841, -1,838, 2068, 2069, -1,837, 836, 2068, -1,2067, 854, 2068, -1,2070, 2069, 856, -1, + 853, 2066, 842, -1,2067, 853, 854, -1,2069, 2070, 839, -1,855, 2068, 854, -1,855, + 856, 2069, -1,855, 2069, 2068, -1,2070, 856, 857, -1,2071, 2072, 841, -1,2072, 2071, + 858, -1,844, 2072, 859, -1,2072, 844, 825, -1,857, 858, 2071, -1,859, 845, 844, -1, + 858, 859, 2072, -1,2071, 2070, 857, -1,2070, 2071, 840, -1,846, 845, 862, -1,847, + 846, 2073, -1,862, 2073, 846, -1,2073, 862, 863, -1,2074, 2073, 864, -1,2073, 2074, + 847, -1,847, 2074, 2075, -1,849, 848, 2075, -1,2076, 850, 849, -1,852, 851, 2078, -1, + 850, 2077, 851, -1,2079, 842, 852, -1,849, 2075, 2076, -1,848, 847, 2075, -1,2074, + 865, 2075, -1,2077, 2076, 867, -1,864, 2073, 863, -1,2074, 864, 865, -1,2076, 2077, + 850, -1,866, 2075, 865, -1,866, 867, 2076, -1,866, 2076, 2075, -1,2077, 867, 868, -1, + 2078, 2079, 852, -1,2079, 2078, 869, -1,861, 2079, 870, -1,2079, 861, 842, -1,868, + 869, 2078, -1,870, 860, 861, -1,869, 870, 2079, -1,2078, 2077, 868, -1,2077, 2078, + 851, -1,853, 842, 861, -1,854, 853, 2080, -1,861, 2080, 853, -1,2080, 861, 860, -1, + 2081, 2080, 871, -1,2080, 2081, 854, -1,854, 2081, 2082, -1,856, 855, 2082, -1,2083, + 857, 856, -1,859, 858, 2085, -1,857, 2084, 858, -1,2086, 845, 859, -1,856, 2082, + 2083, -1,855, 854, 2082, -1,2081, 872, 2082, -1,2084, 2083, 874, -1,871, 2080, 860, -1, + 2081, 871, 872, -1,2083, 2084, 857, -1,873, 2082, 872, -1,873, 874, 2083, -1,873, + 2083, 2082, -1,2084, 874, 875, -1,2085, 2086, 859, -1,2086, 2085, 876, -1,862, 2086, + 877, -1,2086, 862, 845, -1,875, 876, 2085, -1,877, 863, 862, -1,876, 877, 2086, -1, + 2085, 2084, 875, -1,2084, 2085, 858, -1,864, 863, 880, -1,865, 864, 2087, -1,880, + 2087, 864, -1,2087, 880, 881, -1,2088, 2087, 882, -1,2087, 2088, 865, -1,865, 2088, + 2089, -1,867, 866, 2089, -1,2090, 868, 867, -1,870, 869, 2092, -1,868, 2091, 869, -1, + 2093, 860, 870, -1,867, 2089, 2090, -1,866, 865, 2089, -1,2088, 883, 2089, -1,2091, + 2090, 885, -1,882, 2087, 881, -1,2088, 882, 883, -1,2090, 2091, 868, -1,884, 2089, + 883, -1,884, 885, 2090, -1,884, 2090, 2089, -1,2091, 885, 886, -1,2092, 2093, 870, -1, + 2093, 2092, 887, -1,879, 2093, 888, -1,2093, 879, 860, -1,886, 887, 2092, -1,888, + 878, 879, -1,887, 888, 2093, -1,2092, 2091, 886, -1,2091, 2092, 869, -1,871, 860, + 879, -1,872, 871, 2094, -1,879, 2094, 871, -1,2094, 879, 878, -1,2095, 2094, 889, -1, + 2094, 2095, 872, -1,872, 2095, 2096, -1,874, 873, 2096, -1,2097, 875, 874, -1,877, + 876, 2099, -1,875, 2098, 876, -1,2100, 863, 877, -1,874, 2096, 2097, -1,873, 872, + 2096, -1,2095, 890, 2096, -1,2098, 2097, 892, -1,889, 2094, 878, -1,2095, 889, 890, -1, + 2097, 2098, 875, -1,891, 2096, 890, -1,891, 892, 2097, -1,891, 2097, 2096, -1,2098, + 892, 893, -1,2099, 2100, 877, -1,2100, 2099, 894, -1,880, 2100, 895, -1,2100, 880, + 863, -1,893, 894, 2099, -1,895, 881, 880, -1,894, 895, 2100, -1,2099, 2098, 893, -1, + 2098, 2099, 876, -1,878, 888, 887, -1,886, 885, 887, -1,883, 890, 887, -1,889, 878, + 890, -1,890, 878, 887, -1,890, 892, 891, -1,883, 887, 885, -1,883, 894, 890, -1,882, + 881, 883, -1,894, 883, 881, -1,893, 892, 894, -1,892, 890, 894, -1,881, 895, 894, -1, + 883, 885, 884, -1,112, 113, 896, -1,111, 112, 2101, -1,896, 2101, 112, -1,2101, 896, + 897, -1,2102, 2101, 898, -1,2101, 2102, 111, -1,111, 2102, 2103, -1,109, 110, 2103, -1, + 2104, 108, 109, -1,106, 107, 2106, -1,108, 2105, 107, -1,2107, 105, 106, -1,109, + 2103, 2104, -1,110, 111, 2103, -1,2102, 899, 2103, -1,2105, 2104, 901, -1,898, 2101, + 897, -1,2102, 898, 899, -1,2104, 2105, 108, -1,900, 2103, 899, -1,900, 901, 2104, -1, + 900, 2104, 2103, -1,2105, 901, 902, -1,2106, 2107, 106, -1,2107, 2106, 903, -1,906, + 2107, 904, -1,2107, 906, 105, -1,902, 903, 2106, -1,904, 905, 906, -1,903, 904, 2107, -1, + 2106, 2105, 902, -1,2105, 2106, 107, -1,120, 105, 906, -1,119, 120, 2108, -1,906, + 2108, 120, -1,2108, 906, 905, -1,2109, 2108, 907, -1,2108, 2109, 119, -1,119, 2109, + 2110, -1,117, 118, 2110, -1,2111, 116, 117, -1,114, 115, 2113, -1,116, 2112, 115, -1, + 2114, 113, 114, -1,117, 2110, 2111, -1,118, 119, 2110, -1,2109, 908, 2110, -1,2112, + 2111, 910, -1,907, 2108, 905, -1,2109, 907, 908, -1,2111, 2112, 116, -1,909, 2110, + 908, -1,909, 910, 2111, -1,909, 2111, 2110, -1,2112, 910, 911, -1,2113, 2114, 114, -1, + 2114, 2113, 912, -1,896, 2114, 913, -1,2114, 896, 113, -1,911, 912, 2113, -1,913, + 897, 896, -1,912, 913, 2114, -1,2113, 2112, 911, -1,2112, 2113, 115, -1,898, 897, + 916, -1,899, 898, 2115, -1,916, 2115, 898, -1,2115, 916, 917, -1,2116, 2115, 918, -1, + 2115, 2116, 899, -1,899, 2116, 2117, -1,901, 900, 2117, -1,2118, 902, 901, -1,904, + 903, 2120, -1,902, 2119, 903, -1,2121, 905, 904, -1,901, 2117, 2118, -1,900, 899, + 2117, -1,2116, 919, 2117, -1,2119, 2118, 921, -1,918, 2115, 917, -1,2116, 918, 919, -1, + 2118, 2119, 902, -1,920, 2117, 919, -1,920, 921, 2118, -1,920, 2118, 2117, -1,2119, + 921, 922, -1,2120, 2121, 904, -1,2121, 2120, 923, -1,915, 2121, 924, -1,2121, 915, + 905, -1,922, 923, 2120, -1,924, 914, 915, -1,923, 924, 2121, -1,2120, 2119, 922, -1, + 2119, 2120, 903, -1,907, 905, 915, -1,908, 907, 2122, -1,915, 2122, 907, -1,2122, + 915, 914, -1,2123, 2122, 925, -1,2122, 2123, 908, -1,908, 2123, 2124, -1,910, 909, + 2124, -1,2125, 911, 910, -1,913, 912, 2127, -1,911, 2126, 912, -1,2128, 897, 913, -1, + 910, 2124, 2125, -1,909, 908, 2124, -1,2123, 926, 2124, -1,2126, 2125, 928, -1,925, + 2122, 914, -1,2123, 925, 926, -1,2125, 2126, 911, -1,927, 2124, 926, -1,927, 928, + 2125, -1,927, 2125, 2124, -1,2126, 928, 929, -1,2127, 2128, 913, -1,2128, 2127, 930, -1, + 916, 2128, 931, -1,2128, 916, 897, -1,929, 930, 2127, -1,931, 917, 916, -1,930, 931, + 2128, -1,2127, 2126, 929, -1,2126, 2127, 912, -1,918, 917, 934, -1,919, 918, 2129, -1, + 934, 2129, 918, -1,2129, 934, 935, -1,2130, 2129, 936, -1,2129, 2130, 919, -1,919, + 2130, 2131, -1,921, 920, 2131, -1,2132, 922, 921, -1,924, 923, 2134, -1,922, 2133, + 923, -1,2135, 914, 924, -1,921, 2131, 2132, -1,920, 919, 2131, -1,2130, 937, 2131, -1, + 2133, 2132, 939, -1,936, 2129, 935, -1,2130, 936, 937, -1,2132, 2133, 922, -1,938, + 2131, 937, -1,938, 939, 2132, -1,938, 2132, 2131, -1,2133, 939, 940, -1,2134, 2135, + 924, -1,2135, 2134, 941, -1,933, 2135, 942, -1,2135, 933, 914, -1,940, 941, 2134, -1, + 942, 932, 933, -1,941, 942, 2135, -1,2134, 2133, 940, -1,2133, 2134, 923, -1,925, + 914, 933, -1,926, 925, 2136, -1,933, 2136, 925, -1,2136, 933, 932, -1,2137, 2136, + 943, -1,2136, 2137, 926, -1,926, 2137, 2138, -1,928, 927, 2138, -1,2139, 929, 928, -1, + 931, 930, 2141, -1,929, 2140, 930, -1,2142, 917, 931, -1,928, 2138, 2139, -1,927, + 926, 2138, -1,2137, 944, 2138, -1,2140, 2139, 946, -1,943, 2136, 932, -1,2137, 943, + 944, -1,2139, 2140, 929, -1,945, 2138, 944, -1,945, 946, 2139, -1,945, 2139, 2138, -1, + 2140, 946, 947, -1,2141, 2142, 931, -1,2142, 2141, 948, -1,934, 2142, 949, -1,2142, + 934, 917, -1,947, 948, 2141, -1,949, 935, 934, -1,948, 949, 2142, -1,2141, 2140, + 947, -1,2140, 2141, 930, -1,936, 935, 952, -1,937, 936, 2143, -1,952, 2143, 936, -1, + 2143, 952, 953, -1,2144, 2143, 954, -1,2143, 2144, 937, -1,937, 2144, 2145, -1,939, + 938, 2145, -1,2146, 940, 939, -1,942, 941, 2148, -1,940, 2147, 941, -1,2149, 932, + 942, -1,939, 2145, 2146, -1,938, 937, 2145, -1,2144, 955, 2145, -1,2147, 2146, 957, -1, + 954, 2143, 953, -1,2144, 954, 955, -1,2146, 2147, 940, -1,956, 2145, 955, -1,956, + 957, 2146, -1,956, 2146, 2145, -1,2147, 957, 958, -1,2148, 2149, 942, -1,2149, 2148, + 959, -1,951, 2149, 960, -1,2149, 951, 932, -1,958, 959, 2148, -1,960, 950, 951, -1, + 959, 960, 2149, -1,2148, 2147, 958, -1,2147, 2148, 941, -1,943, 932, 951, -1,944, + 943, 2150, -1,951, 2150, 943, -1,2150, 951, 950, -1,2151, 2150, 961, -1,2150, 2151, + 944, -1,944, 2151, 2152, -1,946, 945, 2152, -1,2153, 947, 946, -1,949, 948, 2155, -1, + 947, 2154, 948, -1,2156, 935, 949, -1,946, 2152, 2153, -1,945, 944, 2152, -1,2151, + 962, 2152, -1,2154, 2153, 964, -1,961, 2150, 950, -1,2151, 961, 962, -1,2153, 2154, + 947, -1,963, 2152, 962, -1,963, 964, 2153, -1,963, 2153, 2152, -1,2154, 964, 965, -1, + 2155, 2156, 949, -1,2156, 2155, 966, -1,952, 2156, 967, -1,2156, 952, 935, -1,965, + 966, 2155, -1,967, 953, 952, -1,966, 967, 2156, -1,2155, 2154, 965, -1,2154, 2155, + 948, -1,950, 960, 959, -1,950, 959, 962, -1,959, 955, 962, -1,961, 950, 962, -1,964, + 963, 962, -1,962, 966, 964, -1,959, 958, 957, -1,957, 956, 955, -1,955, 966, 962, -1, + 953, 955, 954, -1,964, 966, 965, -1,953, 967, 966, -1,955, 953, 966, -1,959, 957, + 955, -1,676, 972, 675, -1,972, 968, 675, -1,2157, 674, 675, -1,668, 667, 673, -1, + 673, 674, 2159, -1,968, 2157, 675, -1,2157, 2158, 674, -1,2158, 2157, 969, -1,969, + 970, 2158, -1,2157, 968, 969, -1,2158, 970, 2159, -1,2159, 668, 673, -1,668, 2159, + 971, -1,971, 86, 668, -1,2159, 970, 971, -1,2158, 2159, 674, -1,788, 772, 771, -1, + 787, 788, 2160, -1,771, 2160, 788, -1,2160, 771, 735, -1,2161, 2160, 734, -1,2160, + 2161, 787, -1,787, 2161, 2162, -1,785, 786, 2162, -1,2163, 784, 785, -1,782, 783, + 2165, -1,784, 2164, 783, -1,2166, 780, 782, -1,785, 2162, 2163, -1,786, 787, 2162, -1, + 2161, 733, 2162, -1,2164, 2163, 731, -1,734, 2160, 735, -1,2161, 734, 733, -1,2163, + 2164, 784, -1,732, 2162, 733, -1,732, 731, 2163, -1,732, 2163, 2162, -1,2164, 731, + 730, -1,2165, 2166, 782, -1,2166, 2165, 729, -1,781, 2166, 728, -1,2166, 781, 780, -1, + 730, 729, 2165, -1,728, 727, 781, -1,729, 728, 2166, -1,2165, 2164, 730, -1,2164, + 2165, 783, -1,968, 972, 974, -1,974, 972, 2167, -1,973, 974, 2167, -1,973, 2167, + 677, -1,2167, 972, 677, -1,677, 678, 973, -1,677, 972, 676, -1,678, 978, 973, -1, + 678, 977, 2628, -1,2627, 679, 2626, -1,2626, 679, 975, -1,678, 679, 2627, -1,678, + 2627, 977, -1,2628, 978, 678, -1,975, 976, 2626, -1,979, 987, 988, -1,987, 979, 980, -1, + 986, 988, 989, -1,988, 986, 979, -1,986, 989, 985, -1,987, 982, 989, -1,982, 980, + 981, -1,980, 982, 987, -1,983, 984, 985, -1,983, 985, 989, -1,982, 983, 989, -1,979, + 986, 198, -1,205, 198, 986, -1,980, 979, 199, -1,198, 199, 979, -1,200, 981, 980, -1, + 980, 199, 200, -1,200, 982, 981, -1,982, 200, 201, -1,201, 983, 982, -1,983, 201, + 202, -1,984, 983, 202, -1,202, 203, 984, -1,203, 985, 984, -1,985, 203, 204, -1,204, + 986, 985, -1,986, 204, 205, -1,987, 989, 393, -1,392, 393, 989, -1,989, 988, 392, -1, + 394, 392, 988, -1,394, 988, 987, -1,987, 393, 394, -1,1008, 1000, 1001, -1,1000, + 1009, 1010, -1,1008, 1009, 1000, -1,1001, 1002, 1007, -1,1006, 1003, 1005, -1,1008, + 1001, 1007, -1,1007, 1002, 1006, -1,1002, 1003, 1006, -1,998, 999, 1011, -1,1010, + 999, 1000, -1,998, 1012, 997, -1,996, 997, 1013, -1,1024, 1025, 2630, -1,1010, 1011, + 999, -1,991, 2629, 990, -1,1013, 997, 1012, -1,996, 1014, 995, -1,996, 1013, 1014, -1, + 995, 1014, 1015, -1,1012, 998, 1011, -1,1005, 1003, 1004, -1,1028, 1019, 1020, -1, + 1019, 990, 2629, -1,1028, 990, 1019, -1,1020, 1021, 1026, -1,1022, 1023, 1026, -1, + 1028, 1020, 1027, -1,1027, 1020, 1026, -1,1024, 2630, 1023, -1,1021, 1022, 1026, -1, + 1023, 2630, 1026, -1,993, 1016, 992, -1,1015, 993, 994, -1,993, 1015, 1016, -1,1015, + 994, 995, -1,1016, 1017, 992, -1,991, 992, 1017, -1,2629, 991, 1018, -1,991, 1017, + 1018, -1,243, 1029, 242, -1,2168, 1029, 243, -1,2170, 244, 206, -1,243, 244, 2168, -1, + 2168, 244, 2169, -1,2168, 1026, 1029, -1,2169, 1027, 2168, -1,1026, 2168, 1027, -1, + 1028, 1027, 2169, -1,206, 1030, 2170, -1,990, 2170, 1030, -1,2170, 990, 1028, -1, + 1028, 2169, 2170, -1,244, 2170, 2169, -1,242, 1026, 1025, -1,1025, 241, 242, -1,1025, + 1024, 241, -1,240, 241, 1024, -1,240, 1024, 1023, -1,1023, 239, 240, -1,1023, 1022, + 238, -1,238, 239, 1023, -1,238, 1031, 237, -1,237, 1031, 2171, -1,235, 236, 2173, -1, + 2171, 236, 237, -1,2172, 236, 2171, -1,1031, 1022, 2171, -1,2171, 1021, 2172, -1, + 1021, 2171, 1022, -1,2172, 1021, 1020, -1,2173, 1032, 235, -1,1032, 2173, 1019, -1, + 1020, 1019, 2173, -1,2173, 2172, 1020, -1,2172, 2173, 236, -1,1019, 1018, 234, -1, + 234, 235, 1019, -1,1033, 226, 227, -1,2174, 227, 228, -1,227, 2174, 1033, -1,1010, + 1033, 2174, -1,1011, 2174, 2175, -1,228, 2175, 2174, -1,2176, 2175, 228, -1,2176, + 229, 230, -1,230, 231, 2177, -1,2179, 232, 233, -1,232, 2178, 231, -1,233, 234, 2180, -1, + 2177, 2176, 230, -1,2176, 228, 229, -1,2176, 1012, 2175, -1,1014, 2177, 2178, -1, + 1010, 2174, 1011, -1,1012, 1011, 2175, -1,231, 2178, 2177, -1,1012, 2176, 1013, -1, + 2177, 1014, 1013, -1,2176, 2177, 1013, -1,1015, 1014, 2178, -1,233, 2180, 2179, -1, + 1016, 2179, 2180, -1,1017, 2180, 1034, -1,234, 1034, 2180, -1,2179, 1016, 1015, -1, + 1034, 1018, 1017, -1,2180, 1017, 1016, -1,1015, 2178, 2179, -1,232, 2179, 2178, -1, + 1010, 1009, 226, -1,225, 226, 1009, -1,222, 1035, 221, -1,2181, 1035, 222, -1,223, + 224, 2182, -1,223, 2182, 2181, -1,225, 2183, 224, -1,2181, 222, 223, -1,2181, 1005, + 1035, -1,2182, 1006, 2181, -1,1005, 2181, 1006, -1,2182, 1007, 1006, -1,1008, 1007, + 2182, -1,225, 1036, 2183, -1,1008, 2183, 1036, -1,1036, 1009, 1008, -1,1008, 2182, + 2183, -1,224, 2183, 2182, -1,1005, 1004, 221, -1,220, 221, 1004, -1,220, 1037, 219, -1, + 219, 1037, 2184, -1,2185, 217, 218, -1,2184, 2185, 218, -1,217, 2186, 216, -1,218, + 219, 2184, -1,1037, 1004, 2184, -1,2184, 1003, 2185, -1,1003, 2184, 1004, -1,1003, + 1002, 2185, -1,2185, 1002, 1001, -1,2186, 1038, 216, -1,1038, 2186, 1001, -1,1001, + 1000, 1038, -1,2186, 2185, 1001, -1,2185, 2186, 217, -1,215, 1000, 999, -1,1000, + 215, 216, -1,214, 215, 1039, -1,213, 214, 2187, -1,1039, 2187, 214, -1,2187, 1039, + 999, -1,2188, 2187, 998, -1,2187, 2188, 213, -1,213, 2188, 2189, -1,211, 212, 2189, -1, + 2190, 210, 211, -1,208, 209, 2192, -1,210, 2191, 209, -1,2193, 207, 208, -1,211, + 2189, 2190, -1,212, 213, 2189, -1,2188, 997, 2189, -1,2191, 2190, 995, -1,998, 2187, + 999, -1,2188, 998, 997, -1,2190, 2191, 210, -1,996, 2189, 997, -1,996, 995, 2190, -1, + 996, 2190, 2189, -1,2191, 995, 994, -1,2192, 2193, 208, -1,2193, 2192, 993, -1,1040, + 2193, 992, -1,2193, 1040, 207, -1,994, 993, 2192, -1,992, 991, 1040, -1,993, 992, + 2193, -1,2192, 2191, 994, -1,2191, 2192, 209, -1,207, 991, 990, -1,990, 206, 207, -1, + 1048, 1041, 1047, -1,1044, 1045, 1046, -1,1041, 1051, 1047, -1,1051, 1042, 1050, -1, + 1042, 1051, 1041, -1,1050, 1042, 1043, -1,1049, 1043, 1044, -1,1049, 1046, 1051, -1, + 1043, 1049, 1050, -1,1049, 1044, 1046, -1,1051, 1046, 1047, -1,245, 1041, 1048, -1, + 1048, 252, 245, -1,246, 1042, 1041, -1,1041, 245, 246, -1,1043, 1042, 246, -1,246, + 247, 1043, -1,1044, 1043, 248, -1,247, 248, 1043, -1,249, 1045, 1044, -1,1044, 248, + 249, -1,250, 1046, 1045, -1,1045, 249, 250, -1,251, 1047, 1046, -1,1046, 250, 251, -1, + 1048, 1047, 252, -1,251, 252, 1047, -1,1049, 1051, 395, -1,395, 396, 1049, -1,1051, + 1050, 395, -1,397, 395, 1050, -1,397, 1050, 1049, -1,1049, 396, 397, -1,1053, 1054, + 1055, -1,1053, 1056, 1057, -1,1056, 1053, 1055, -1,1058, 1052, 1057, -1,1057, 1052, + 1053, -1,253, 1053, 1052, -1,1052, 259, 253, -1,1054, 1053, 253, -1,253, 254, 1054, -1, + 255, 1055, 1054, -1,1054, 254, 255, -1,256, 1056, 1055, -1,1055, 255, 256, -1,1057, + 1056, 256, -1,256, 257, 1057, -1,1058, 1057, 257, -1,257, 258, 1058, -1,1052, 1058, + 258, -1,258, 259, 1052, -1,1081, 1060, 1061, -1,1080, 1061, 1062, -1,1061, 1080, + 1081, -1,1079, 1080, 1062, -1,1079, 1062, 1063, -1,1060, 1081, 1082, -1,1071, 1072, + 1070, -1,1070, 1072, 1059, -1,1059, 1082, 1083, -1,1059, 1083, 1070, -1,1082, 1059, + 1060, -1,1070, 1083, 1069, -1,1063, 1078, 1079, -1,1078, 1063, 1064, -1,1078, 1064, + 1065, -1,1077, 1065, 1066, -1,1065, 1077, 1078, -1,1077, 1066, 1076, -1,1075, 1076, + 1067, -1,1074, 1075, 1068, -1,1068, 1073, 1074, -1,1073, 1069, 1083, -1,1069, 1073, + 1068, -1,1068, 1075, 1067, -1,1076, 1066, 1067, -1,260, 1059, 1072, -1,1071, 272, + 1072, -1,260, 1072, 272, -1,260, 1060, 1059, -1,1060, 260, 261, -1,268, 269, 1084, -1, + 267, 268, 2194, -1,1084, 2194, 268, -1,2194, 1084, 1068, -1,2195, 2194, 1067, -1, + 2194, 2195, 267, -1,267, 2195, 2196, -1,265, 266, 2196, -1,2197, 264, 265, -1,262, + 263, 2199, -1,264, 2198, 263, -1,2200, 261, 262, -1,265, 2196, 2197, -1,266, 267, + 2196, -1,2195, 1066, 2196, -1,2198, 2197, 1064, -1,1067, 2194, 1068, -1,2195, 1067, + 1066, -1,2197, 2198, 264, -1,1065, 2196, 1066, -1,1065, 1064, 2197, -1,1065, 2197, + 2196, -1,2198, 1064, 1063, -1,2199, 2200, 262, -1,2200, 2199, 1062, -1,1085, 2200, + 1061, -1,2200, 1085, 261, -1,1063, 1062, 2199, -1,1061, 1060, 1085, -1,1062, 1061, + 2200, -1,2199, 2198, 1063, -1,2198, 2199, 263, -1,1069, 1068, 269, -1,269, 270, 1069, -1, + 1070, 1069, 271, -1,270, 271, 1069, -1,272, 1071, 1070, -1,1070, 271, 272, -1,399, + 1073, 1083, -1,1083, 398, 399, -1,1083, 1082, 398, -1,408, 398, 1082, -1,1086, 400, + 401, -1,2201, 401, 402, -1,402, 2202, 2201, -1,1074, 1086, 2201, -1,1075, 2201, 2202, -1, + 1086, 401, 2201, -1,403, 2202, 402, -1,2203, 403, 404, -1,2204, 404, 405, -1,2207, + 407, 1087, -1,407, 408, 1087, -1,406, 407, 2206, -1,406, 2205, 405, -1,403, 2203, + 2202, -1,1077, 2203, 2204, -1,1074, 2201, 1075, -1,1076, 1075, 2202, -1,404, 2204, + 2203, -1,2202, 2203, 1076, -1,2204, 1078, 1077, -1,2203, 1077, 1076, -1,1079, 1078, + 2204, -1,406, 2206, 2205, -1,1079, 2205, 2206, -1,1080, 2206, 2207, -1,407, 2207, + 2206, -1,2206, 1080, 1079, -1,2207, 1082, 1081, -1,2207, 1081, 1080, -1,1079, 2204, + 2205, -1,1087, 1082, 2207, -1,405, 2205, 2204, -1,399, 1074, 1073, -1,1074, 399, + 400, -1,1105, 1097, 1098, -1,1097, 1106, 1107, -1,1105, 1106, 1097, -1,1098, 1099, + 1104, -1,1103, 1100, 1102, -1,1105, 1098, 1104, -1,1104, 1099, 1103, -1,1099, 1100, + 1103, -1,1095, 1096, 1108, -1,1107, 1096, 1097, -1,1095, 1109, 1094, -1,1093, 1094, + 1110, -1,1121, 1122, 2632, -1,1107, 1108, 1096, -1,1110, 1094, 1109, -1,1093, 1111, + 1092, -1,1093, 1110, 1111, -1,1092, 1111, 1112, -1,1109, 1095, 1108, -1,1102, 1100, + 1101, -1,1124, 1116, 1117, -1,1116, 1126, 2631, -1,1125, 1126, 1116, -1,1117, 1118, + 1123, -1,1119, 1120, 1123, -1,1125, 1116, 1124, -1,1124, 1117, 1123, -1,1121, 2632, + 1120, -1,1118, 1119, 1123, -1,1120, 2632, 1123, -1,1090, 1113, 1089, -1,1112, 1090, + 1091, -1,1090, 1112, 1113, -1,1112, 1091, 1092, -1,1113, 1114, 1089, -1,1088, 1089, + 1114, -1,2633, 1115, 2631, -1,2633, 2631, 1126, -1,1088, 1114, 1115, -1,1115, 2633, + 1088, -1,311, 273, 1126, -1,1088, 1126, 273, -1,1125, 1128, 1126, -1,2208, 1128, + 1125, -1,2210, 1124, 1123, -1,1125, 1124, 2208, -1,2208, 1124, 2209, -1,2208, 311, + 1128, -1,2209, 310, 2208, -1,311, 2208, 310, -1,309, 310, 2209, -1,1123, 1127, 2210, -1, + 309, 2210, 1127, -1,1127, 308, 309, -1,309, 2209, 2210, -1,1124, 2210, 2209, -1,307, + 308, 1123, -1,1123, 1122, 307, -1,1121, 306, 307, -1,307, 1122, 1121, -1,305, 306, + 1121, -1,1121, 1120, 305, -1,1119, 304, 305, -1,305, 1120, 1119, -1,1116, 1130, 1117, -1, + 1117, 1130, 2211, -1,1119, 1118, 2213, -1,2211, 1118, 1117, -1,2212, 1118, 2211, -1, + 1130, 301, 2211, -1,2211, 302, 2212, -1,302, 2211, 301, -1,2212, 302, 303, -1,2213, + 1129, 1119, -1,1129, 2213, 303, -1,303, 304, 1129, -1,2213, 2212, 303, -1,2212, 2213, + 1118, -1,1116, 300, 301, -1,300, 1116, 1115, -1,1132, 1115, 1114, -1,2214, 1114, + 1113, -1,1114, 2214, 1132, -1,300, 1132, 2214, -1,299, 2214, 2215, -1,1113, 2215, + 2214, -1,2216, 2215, 1113, -1,2216, 1112, 1111, -1,1111, 1110, 2217, -1,2219, 1109, + 1108, -1,1109, 2218, 1110, -1,1108, 1107, 2220, -1,2217, 2216, 1111, -1,2216, 1113, + 1112, -1,2216, 298, 2215, -1,296, 2217, 2218, -1,300, 2214, 299, -1,298, 299, 2215, -1, + 1110, 2218, 2217, -1,298, 2216, 297, -1,2217, 296, 297, -1,2216, 2217, 297, -1,295, + 296, 2218, -1,1108, 2220, 2219, -1,294, 2219, 2220, -1,293, 2220, 1131, -1,1107, + 1131, 2220, -1,2219, 294, 295, -1,1131, 292, 293, -1,2220, 293, 294, -1,295, 2218, + 2219, -1,1109, 2219, 2218, -1,1107, 291, 292, -1,291, 1107, 1106, -1,1105, 1134, + 1106, -1,2221, 1134, 1105, -1,1104, 1103, 2222, -1,1104, 2222, 2221, -1,1102, 2223, + 1103, -1,2221, 1105, 1104, -1,2221, 291, 1134, -1,2222, 290, 2221, -1,291, 2221, + 290, -1,2222, 289, 290, -1,288, 289, 2222, -1,1102, 1133, 2223, -1,288, 2223, 1133, -1, + 1133, 287, 288, -1,288, 2222, 2223, -1,1103, 2223, 2222, -1,1102, 286, 287, -1,286, + 1102, 1101, -1,1097, 1136, 1098, -1,1098, 1136, 2224, -1,2225, 1100, 1099, -1,2224, + 2225, 1099, -1,1100, 2226, 1101, -1,1099, 1098, 2224, -1,1136, 282, 2224, -1,2224, + 283, 2225, -1,283, 2224, 282, -1,283, 284, 2225, -1,2225, 284, 285, -1,2226, 1135, + 1101, -1,1135, 2226, 285, -1,285, 286, 1135, -1,2226, 2225, 285, -1,2225, 2226, 1100, -1, + 281, 282, 1097, -1,1097, 1096, 281, -1,1089, 1088, 1138, -1,1090, 1089, 2227, -1, + 1138, 2227, 1089, -1,2227, 1138, 273, -1,2228, 2227, 274, -1,2227, 2228, 1090, -1, + 1090, 2228, 2229, -1,1092, 1091, 2229, -1,2230, 1093, 1092, -1,1095, 1094, 2232, -1, + 1093, 2231, 1094, -1,2233, 1096, 1095, -1,1092, 2229, 2230, -1,1091, 1090, 2229, -1, + 2228, 275, 2229, -1,2231, 2230, 277, -1,274, 2227, 273, -1,2228, 274, 275, -1,2230, + 2231, 1093, -1,276, 2229, 275, -1,276, 277, 2230, -1,276, 2230, 2229, -1,2231, 277, + 278, -1,2232, 2233, 1095, -1,2233, 2232, 279, -1,1137, 2233, 280, -1,2233, 1137, + 1096, -1,278, 279, 2232, -1,280, 281, 1137, -1,279, 280, 2233, -1,2232, 2231, 278, -1, + 2231, 2232, 1094, -1,1157, 1149, 1150, -1,1149, 1158, 1159, -1,1157, 1158, 1149, -1, + 1150, 1151, 1156, -1,1155, 1152, 1154, -1,1157, 1150, 1156, -1,1156, 1151, 1155, -1, + 1151, 1152, 1155, -1,1147, 1148, 1160, -1,1159, 1148, 1149, -1,1147, 1161, 1146, -1, + 1145, 1146, 1162, -1,1173, 1174, 2635, -1,1159, 1160, 1148, -1,1140, 2634, 1139, -1, + 1162, 1146, 1161, -1,1145, 1163, 1144, -1,1145, 1162, 1163, -1,1144, 1163, 1164, -1, + 1161, 1147, 1160, -1,1154, 1152, 1153, -1,1177, 1168, 1169, -1,1168, 1139, 2634, -1, + 1177, 1139, 1168, -1,1169, 1170, 1175, -1,1171, 1172, 1175, -1,1177, 1169, 1176, -1, + 1176, 1169, 1175, -1,1173, 2635, 1172, -1,1170, 1171, 1175, -1,1172, 2635, 1175, -1, + 1142, 1165, 1141, -1,1164, 1142, 1143, -1,1142, 1164, 1165, -1,1164, 1143, 1144, -1, + 1165, 1166, 1141, -1,1140, 1141, 1166, -1,2634, 1140, 1167, -1,1140, 1166, 1167, -1, + 349, 1178, 348, -1,2234, 1178, 349, -1,2236, 350, 312, -1,349, 350, 2234, -1,2234, + 350, 2235, -1,2234, 1175, 1178, -1,2235, 1176, 2234, -1,1175, 2234, 1176, -1,1177, + 1176, 2235, -1,312, 1179, 2236, -1,1139, 2236, 1179, -1,2236, 1139, 1177, -1,1177, + 2235, 2236, -1,350, 2236, 2235, -1,348, 1175, 1174, -1,1174, 347, 348, -1,1174, 1173, + 346, -1,346, 347, 1174, -1,345, 1173, 1172, -1,1173, 345, 346, -1,1172, 1171, 344, -1, + 344, 345, 1172, -1,344, 1180, 343, -1,343, 1180, 2237, -1,341, 342, 2239, -1,2237, + 342, 343, -1,2238, 342, 2237, -1,1180, 1171, 2237, -1,2237, 1170, 2238, -1,1170, + 2237, 1171, -1,2238, 1170, 1169, -1,2239, 1181, 341, -1,1181, 2239, 1168, -1,1169, + 1168, 2239, -1,2239, 2238, 1169, -1,2238, 2239, 342, -1,1168, 1167, 341, -1,340, + 341, 1167, -1,1182, 332, 333, -1,2240, 333, 334, -1,333, 2240, 1182, -1,1159, 1182, + 2240, -1,1160, 2240, 2241, -1,334, 2241, 2240, -1,2242, 2241, 334, -1,2242, 335, + 336, -1,336, 337, 2243, -1,2245, 338, 339, -1,338, 2244, 337, -1,339, 340, 2246, -1, + 2243, 2242, 336, -1,2242, 334, 335, -1,2242, 1161, 2241, -1,1163, 2243, 2244, -1, + 1159, 2240, 1160, -1,1161, 1160, 2241, -1,337, 2244, 2243, -1,1161, 2242, 1162, -1, + 2243, 1163, 1162, -1,2242, 2243, 1162, -1,1164, 1163, 2244, -1,339, 2246, 2245, -1, + 1165, 2245, 2246, -1,1166, 2246, 1183, -1,340, 1183, 2246, -1,2245, 1165, 1164, -1, + 1183, 1167, 1166, -1,2246, 1166, 1165, -1,1164, 2244, 2245, -1,338, 2245, 2244, -1, + 1159, 1158, 331, -1,331, 332, 1159, -1,328, 1184, 327, -1,2247, 1184, 328, -1,329, + 330, 2248, -1,329, 2248, 2247, -1,331, 2249, 330, -1,2247, 328, 329, -1,2247, 1154, + 1184, -1,2248, 1155, 2247, -1,1154, 2247, 1155, -1,2248, 1156, 1155, -1,1157, 1156, + 2248, -1,331, 1185, 2249, -1,1157, 2249, 1185, -1,1185, 1158, 1157, -1,1157, 2248, + 2249, -1,330, 2249, 2248, -1,1154, 1153, 327, -1,326, 327, 1153, -1,326, 1186, 325, -1, + 325, 1186, 2250, -1,2251, 323, 324, -1,2250, 2251, 324, -1,323, 2252, 322, -1,324, + 325, 2250, -1,1186, 1153, 2250, -1,2250, 1152, 2251, -1,1152, 2250, 1153, -1,1152, + 1151, 2251, -1,2251, 1151, 1150, -1,2252, 1187, 322, -1,1187, 2252, 1150, -1,1150, + 1149, 1187, -1,2252, 2251, 1150, -1,2251, 2252, 323, -1,322, 1149, 1148, -1,1148, + 321, 322, -1,320, 321, 1188, -1,319, 320, 2253, -1,1188, 2253, 320, -1,2253, 1188, + 1148, -1,2254, 2253, 1147, -1,2253, 2254, 319, -1,319, 2254, 2255, -1,317, 318, 2255, -1, + 2256, 316, 317, -1,314, 315, 2258, -1,316, 2257, 315, -1,2259, 313, 314, -1,317, + 2255, 2256, -1,318, 319, 2255, -1,2254, 1146, 2255, -1,2257, 2256, 1144, -1,1147, + 2253, 1148, -1,2254, 1147, 1146, -1,2256, 2257, 316, -1,1145, 2255, 1146, -1,1145, + 1144, 2256, -1,1145, 2256, 2255, -1,2257, 1144, 1143, -1,2258, 2259, 314, -1,2259, + 2258, 1142, -1,1189, 2259, 1141, -1,2259, 1189, 313, -1,1143, 1142, 2258, -1,1141, + 1140, 1189, -1,1142, 1141, 2259, -1,2258, 2257, 1143, -1,2257, 2258, 315, -1,313, + 1140, 1139, -1,1139, 312, 313, -1,1208, 1209, 1207, -1,1209, 1208, 1219, -1,1206, + 1207, 1210, -1,1210, 1207, 1209, -1,1211, 1206, 1210, -1,1221, 1217, 1218, -1,1199, + 1215, 1216, -1,1216, 1217, 1222, -1,1208, 1220, 1219, -1,1205, 1211, 1212, -1,1204, + 1205, 1212, -1,1203, 1213, 1202, -1,1204, 1213, 1203, -1,1206, 1211, 1205, -1,1212, + 1213, 1204, -1,1214, 1200, 1201, -1,1200, 1214, 1215, -1,1201, 1202, 1214, -1,1200, + 1215, 1199, -1,1214, 1202, 1213, -1,1218, 1219, 1220, -1,1222, 1217, 1221, -1,1222, + 1223, 1199, -1,1222, 1199, 1216, -1,1230, 1190, 1191, -1,1190, 1230, 1220, -1,1229, + 1191, 1192, -1,1191, 1229, 1230, -1,1229, 1192, 1228, -1,1220, 1208, 1190, -1,1193, + 1228, 1192, -1,1224, 1225, 1197, -1,1198, 1199, 1223, -1,1198, 1224, 1197, -1,1225, + 1196, 1197, -1,1198, 1223, 1224, -1,1194, 1226, 1227, -1,1193, 1227, 1228, -1,1194, + 1227, 1193, -1,1195, 1196, 1225, -1,1195, 1226, 1194, -1,1195, 1225, 1226, -1,1221, + 1218, 1220, -1,1190, 369, 351, -1,369, 1190, 1208, -1,1207, 368, 369, -1,369, 1208, + 1207, -1,1200, 1199, 1232, -1,1201, 1200, 2260, -1,1232, 2260, 1200, -1,2260, 1232, + 360, -1,2261, 2260, 361, -1,2260, 2261, 1201, -1,1201, 2261, 2262, -1,1203, 1202, + 2262, -1,2263, 1204, 1203, -1,1206, 1205, 2265, -1,1204, 2264, 1205, -1,2266, 1207, + 1206, -1,1203, 2262, 2263, -1,1202, 1201, 2262, -1,2261, 362, 2262, -1,2264, 2263, + 364, -1,361, 2260, 360, -1,2261, 361, 362, -1,2263, 2264, 1204, -1,363, 2262, 362, -1, + 363, 364, 2263, -1,363, 2263, 2262, -1,2264, 364, 365, -1,2265, 2266, 1206, -1,2266, + 2265, 366, -1,1231, 2266, 367, -1,2266, 1231, 1207, -1,365, 366, 2265, -1,367, 368, + 1231, -1,366, 367, 2266, -1,2265, 2264, 365, -1,2264, 2265, 1205, -1,1192, 1191, + 1233, -1,1193, 1192, 2267, -1,1233, 2267, 1192, -1,2267, 1233, 352, -1,2268, 2267, + 353, -1,2267, 2268, 1193, -1,1193, 2268, 2269, -1,1195, 1194, 2269, -1,2270, 1196, + 1195, -1,1198, 1197, 2272, -1,1196, 2271, 1197, -1,2273, 1199, 1198, -1,1195, 2269, + 2270, -1,1194, 1193, 2269, -1,2268, 354, 2269, -1,2271, 2270, 356, -1,353, 2267, + 352, -1,2268, 353, 354, -1,2270, 2271, 1196, -1,355, 2269, 354, -1,355, 356, 2270, -1, + 355, 2270, 2269, -1,2271, 356, 357, -1,2272, 2273, 1198, -1,2273, 2272, 358, -1,1232, + 2273, 359, -1,2273, 1232, 1199, -1,357, 358, 2272, -1,359, 360, 1232, -1,358, 359, + 2273, -1,2272, 2271, 357, -1,2271, 2272, 1197, -1,351, 352, 1191, -1,1191, 1190, + 351, -1,409, 410, 1209, -1,1209, 1219, 409, -1,410, 411, 1210, -1,1210, 1209, 410, -1, + 1235, 1218, 1217, -1,2274, 1217, 1216, -1,1217, 2274, 1235, -1,419, 1235, 2274, -1, + 418, 2274, 2275, -1,1216, 2275, 2274, -1,2276, 2275, 1216, -1,2276, 1215, 1214, -1, + 1214, 1213, 2277, -1,2279, 1212, 1211, -1,1212, 2278, 1213, -1,1211, 1210, 2280, -1, + 2277, 2276, 1214, -1,2276, 1216, 1215, -1,2276, 417, 2275, -1,415, 2277, 2278, -1, + 419, 2274, 418, -1,417, 418, 2275, -1,1213, 2278, 2277, -1,417, 2276, 416, -1,2277, + 415, 416, -1,2276, 2277, 416, -1,414, 415, 2278, -1,1211, 2280, 2279, -1,413, 2279, + 2280, -1,412, 2280, 1234, -1,1210, 1234, 2280, -1,2279, 413, 414, -1,1234, 411, 412, -1, + 2280, 412, 413, -1,414, 2278, 2279, -1,1212, 2279, 2278, -1,1218, 419, 409, -1,409, + 1219, 1218, -1,420, 421, 1220, -1,1220, 1230, 420, -1,421, 422, 1221, -1,1221, 1220, + 421, -1,1237, 1229, 1228, -1,2281, 1228, 1227, -1,1228, 2281, 1237, -1,430, 1237, + 2281, -1,429, 2281, 2282, -1,1227, 2282, 2281, -1,2283, 2282, 1227, -1,2283, 1226, + 1225, -1,1225, 1224, 2284, -1,2286, 1223, 1222, -1,1223, 2285, 1224, -1,1222, 1221, + 2287, -1,2284, 2283, 1225, -1,2283, 1227, 1226, -1,2283, 428, 2282, -1,426, 2284, + 2285, -1,430, 2281, 429, -1,428, 429, 2282, -1,1224, 2285, 2284, -1,428, 2283, 427, -1, + 2284, 426, 427, -1,2283, 2284, 427, -1,425, 426, 2285, -1,1222, 2287, 2286, -1,424, + 2286, 2287, -1,423, 2287, 1236, -1,1221, 1236, 2287, -1,2286, 424, 425, -1,1236, + 422, 423, -1,2287, 423, 424, -1,425, 2285, 2286, -1,1223, 2286, 2285, -1,1229, 430, + 420, -1,420, 1230, 1229, -1,1242, 1243, 1263, -1,1242, 1264, 1241, -1,1264, 1242, + 1263, -1,1241, 1264, 1265, -1,1243, 1262, 1263, -1,1244, 1245, 1262, -1,1245, 1261, + 1262, -1,1261, 1245, 1246, -1,1261, 1246, 1260, -1,1244, 1262, 1243, -1,1239, 1240, + 1266, -1,1239, 1267, 1238, -1,1267, 1239, 1266, -1,1238, 1267, 1257, -1,1240, 1265, + 1266, -1,1265, 1240, 1241, -1,1275, 1258, 1259, -1,1276, 1257, 1258, -1,1259, 1260, + 1247, -1,1238, 1257, 1256, -1,1246, 1247, 1260, -1,1248, 1249, 1272, -1,1248, 1273, + 1247, -1,1273, 1248, 1272, -1,1247, 1273, 1274, -1,1249, 1250, 1272, -1,1250, 1251, + 1271, -1,1270, 1271, 1252, -1,1252, 1271, 1251, -1,1270, 1252, 1253, -1,1250, 1271, + 1272, -1,1276, 1258, 1275, -1,1277, 1257, 1276, -1,1275, 1259, 1274, -1,1269, 1254, + 1268, -1,1269, 1270, 1253, -1,1268, 1254, 1255, -1,1278, 1255, 1256, -1,1255, 1278, + 1268, -1,1278, 1256, 1277, -1,1254, 1269, 1253, -1,1277, 1256, 1257, -1,1247, 1274, + 1259, -1,1256, 441, 439, -1,439, 1238, 1256, -1,1256, 442, 441, -1,1256, 1255, 196, -1, + 195, 196, 1255, -1,442, 1256, 196, -1,1248, 1247, 1280, -1,1249, 1248, 2288, -1,1280, + 2288, 1248, -1,2288, 1280, 187, -1,2289, 2288, 188, -1,2288, 2289, 1249, -1,1249, + 2289, 2290, -1,1251, 1250, 2290, -1,2291, 1252, 1251, -1,1254, 1253, 2293, -1,1252, + 2292, 1253, -1,2294, 1255, 1254, -1,1251, 2290, 2291, -1,1250, 1249, 2290, -1,2289, + 189, 2290, -1,2292, 2291, 191, -1,188, 2288, 187, -1,2289, 188, 189, -1,2291, 2292, + 1252, -1,190, 2290, 189, -1,190, 191, 2291, -1,190, 2291, 2290, -1,2292, 191, 192, -1, + 2293, 2294, 1254, -1,2294, 2293, 193, -1,1279, 2294, 194, -1,2294, 1279, 1255, -1, + 192, 193, 2293, -1,194, 195, 1279, -1,193, 194, 2294, -1,2293, 2292, 192, -1,2292, + 2293, 1253, -1,1240, 1239, 1281, -1,1241, 1240, 2295, -1,1281, 2295, 1240, -1,2295, + 1281, 179, -1,2296, 2295, 180, -1,2295, 2296, 1241, -1,1241, 2296, 2297, -1,1243, + 1242, 2297, -1,2298, 1244, 1243, -1,1246, 1245, 2300, -1,1244, 2299, 1245, -1,2301, + 1247, 1246, -1,1243, 2297, 2298, -1,1242, 1241, 2297, -1,2296, 181, 2297, -1,2299, + 2298, 183, -1,180, 2295, 179, -1,2296, 180, 181, -1,2298, 2299, 1244, -1,182, 2297, + 181, -1,182, 183, 2298, -1,182, 2298, 2297, -1,2299, 183, 184, -1,2300, 2301, 1246, -1, + 2301, 2300, 185, -1,1280, 2301, 186, -1,2301, 1280, 1247, -1,184, 185, 2300, -1,186, + 187, 1280, -1,185, 186, 2301, -1,2300, 2299, 184, -1,2299, 2300, 1245, -1,439, 438, + 1238, -1,178, 1239, 1238, -1,1239, 178, 179, -1,178, 1238, 438, -1,370, 371, 1257, -1, + 1257, 1267, 370, -1,371, 372, 1258, -1,1258, 1257, 371, -1,1283, 1266, 1265, -1,2302, + 1265, 1264, -1,1265, 2302, 1283, -1,380, 1283, 2302, -1,379, 2302, 2303, -1,1264, + 2303, 2302, -1,2304, 2303, 1264, -1,2304, 1263, 1262, -1,1262, 1261, 2305, -1,2307, + 1260, 1259, -1,1260, 2306, 1261, -1,1259, 1258, 2308, -1,2305, 2304, 1262, -1,2304, + 1264, 1263, -1,2304, 378, 2303, -1,376, 2305, 2306, -1,380, 2302, 379, -1,378, 379, + 2303, -1,1261, 2306, 2305, -1,378, 2304, 377, -1,2305, 376, 377, -1,2304, 2305, 377, -1, + 375, 376, 2306, -1,1259, 2308, 2307, -1,374, 2307, 2308, -1,373, 2308, 1282, -1,1258, + 1282, 2308, -1,2307, 374, 375, -1,1282, 372, 373, -1,2308, 373, 374, -1,375, 2306, + 2307, -1,1260, 2307, 2306, -1,1267, 380, 370, -1,380, 1267, 1266, -1,382, 1268, 1278, -1, + 1278, 381, 382, -1,391, 381, 1278, -1,1278, 1277, 391, -1,1277, 1276, 390, -1,390, + 391, 1277, -1,1284, 382, 383, -1,2309, 383, 384, -1,384, 2310, 2309, -1,1268, 1284, + 2309, -1,1269, 2309, 2310, -1,1284, 383, 2309, -1,385, 2310, 384, -1,2311, 385, 386, -1, + 2312, 386, 387, -1,2315, 389, 1285, -1,389, 390, 1285, -1,388, 389, 2314, -1,388, + 2313, 387, -1,385, 2311, 2310, -1,1271, 2311, 2312, -1,1268, 2309, 1269, -1,1270, + 1269, 2310, -1,386, 2312, 2311, -1,2310, 2311, 1270, -1,2312, 1272, 1271, -1,2311, + 1271, 1270, -1,1273, 1272, 2312, -1,388, 2314, 2313, -1,1273, 2313, 2314, -1,1274, + 2314, 2315, -1,389, 2315, 2314, -1,2314, 1274, 1273, -1,2315, 1276, 1275, -1,2315, + 1275, 1274, -1,1273, 2312, 2313, -1,1285, 1276, 2315, -1,387, 2313, 2312, -1,1286, + 1287, 1288, -1,1286, 1289, 1290, -1,1289, 1286, 1288, -1,1291, 1292, 1290, -1,1290, + 1292, 1286, -1,1287, 1286, 175, -1,175, 176, 1287, -1,1287, 177, 1288, -1,821, 1288, + 177, -1,176, 177, 1287, -1,1288, 821, 820, -1,820, 1289, 1288, -1,1289, 820, 818, -1, + 1289, 171, 1290, -1,171, 1289, 817, -1,1290, 171, 172, -1,818, 817, 1289, -1,1291, + 1290, 173, -1,172, 173, 1290, -1,1292, 1291, 174, -1,173, 174, 1291, -1,175, 1286, + 1292, -1,1292, 174, 175, -1,1301, 2318, 1298, -1,1302, 2316, 1301, -1,1300, 1301, + 1299, -1,1297, 1298, 1295, -1,1301, 1298, 1299, -1,1302, 1303, 1304, -1,2317, 1301, + 2316, -1,2316, 1304, 1293, -1,1293, 1294, 2316, -1,2316, 1294, 2317, -1,2318, 1295, + 1298, -1,1301, 2317, 2318, -1,1295, 1296, 1297, -1,1295, 2318, 2317, -1,2317, 1294, + 1295, -1,2316, 1302, 1304, -1,1312, 1313, 1311, -1,2321, 1303, 1310, -1,1310, 1311, + 2320, -1,1305, 1311, 1313, -1,1305, 2319, 1311, -1,1306, 1308, 1305, -1,2319, 2320, + 1311, -1,1305, 1308, 2319, -1,2320, 1308, 1309, -1,1308, 2320, 2319, -1,2320, 2321, + 1310, -1,1304, 2321, 1293, -1,1304, 1303, 2321, -1,1309, 1293, 2321, -1,2321, 2320, + 1309, -1,1308, 1306, 1307, -1,1333, 1314, 1315, -1,1332, 1333, 2322, -1,1315, 2322, + 1333, -1,2322, 1315, 1316, -1,2323, 2322, 1317, -1,2322, 2323, 1332, -1,1332, 2323, + 2324, -1,1330, 1331, 2324, -1,2325, 1329, 1330, -1,1327, 1328, 2327, -1,1329, 2326, + 1328, -1,2328, 1326, 1327, -1,1330, 2324, 2325, -1,1331, 1332, 2324, -1,2323, 1318, + 2324, -1,2326, 2325, 1320, -1,1317, 2322, 1316, -1,2323, 1317, 1318, -1,2325, 2326, + 1329, -1,1319, 2324, 1318, -1,1319, 1320, 2325, -1,1319, 2325, 2324, -1,2326, 1320, + 1321, -1,2327, 2328, 1327, -1,2328, 2327, 1322, -1,1325, 2328, 1323, -1,2328, 1325, + 1326, -1,1321, 1322, 2327, -1,1323, 1324, 1325, -1,1322, 1323, 2328, -1,2327, 2326, + 1321, -1,2326, 2327, 1328, -1,1347, 1326, 1325, -1,1346, 1347, 2329, -1,1325, 2329, + 1347, -1,2329, 1325, 1324, -1,2330, 2329, 1334, -1,2329, 2330, 1346, -1,1346, 2330, + 2331, -1,1344, 1345, 2331, -1,2332, 1343, 1344, -1,1341, 1342, 2334, -1,1343, 2333, + 1342, -1,2335, 1314, 1341, -1,1344, 2331, 2332, -1,1345, 1346, 2331, -1,2330, 1335, + 2331, -1,2333, 2332, 1337, -1,1334, 2329, 1324, -1,2330, 1334, 1335, -1,2332, 2333, + 1343, -1,1336, 2331, 1335, -1,1336, 1337, 2332, -1,1336, 2332, 2331, -1,2333, 1337, + 1338, -1,2334, 2335, 1341, -1,2335, 2334, 1339, -1,1315, 2335, 1340, -1,2335, 1315, + 1314, -1,1338, 1339, 2334, -1,1340, 1316, 1315, -1,1339, 1340, 2335, -1,2334, 2333, + 1338, -1,2333, 2334, 1342, -1,1317, 1316, 1348, -1,1317, 2336, 1318, -1,2336, 1317, + 1348, -1,2336, 1348, 1349, -1,1319, 1318, 2337, -1,2338, 1320, 1319, -1,2339, 1321, + 1320, -1,2341, 1323, 1322, -1,2342, 1324, 1323, -1,1322, 1321, 2340, -1,2336, 2337, + 1318, -1,2337, 2338, 1319, -1,2338, 2337, 1349, -1,2339, 2338, 1349, -1,2338, 2339, + 1320, -1,1349, 2337, 2336, -1,2339, 1349, 2340, -1,2340, 2341, 1322, -1,2341, 2340, + 1349, -1,2342, 2341, 1349, -1,2341, 2342, 1323, -1,2342, 1349, 1350, -1,2342, 1350, + 1324, -1,2339, 2340, 1321, -1,1334, 1324, 1350, -1,1334, 2343, 1335, -1,2343, 1334, + 1350, -1,2343, 1350, 1349, -1,1336, 1335, 2344, -1,2345, 1337, 1336, -1,2346, 1338, + 1337, -1,2348, 1340, 1339, -1,2349, 1316, 1340, -1,1339, 1338, 2347, -1,2343, 2344, + 1335, -1,2344, 2345, 1336, -1,2345, 2344, 1349, -1,2346, 2345, 1349, -1,2345, 2346, + 1337, -1,1349, 2344, 2343, -1,2346, 1349, 2347, -1,2347, 2348, 1339, -1,2348, 2347, + 1349, -1,2349, 2348, 1349, -1,2348, 2349, 1340, -1,2349, 1349, 1348, -1,2349, 1348, + 1316, -1,2346, 2347, 1338, -1,1370, 1351, 1352, -1,1369, 1370, 2350, -1,1352, 2350, + 1370, -1,2350, 1352, 1353, -1,2351, 2350, 1354, -1,2350, 2351, 1369, -1,1369, 2351, + 2352, -1,1367, 1368, 2352, -1,2353, 1366, 1367, -1,1364, 1365, 2355, -1,1366, 2354, + 1365, -1,2356, 1363, 1364, -1,1367, 2352, 2353, -1,1368, 1369, 2352, -1,2351, 1355, + 2352, -1,2354, 2353, 1357, -1,1354, 2350, 1353, -1,2351, 1354, 1355, -1,2353, 2354, + 1366, -1,1356, 2352, 1355, -1,1356, 1357, 2353, -1,1356, 2353, 2352, -1,2354, 1357, + 1358, -1,2355, 2356, 1364, -1,2356, 2355, 1359, -1,1362, 2356, 1360, -1,2356, 1362, + 1363, -1,1358, 1359, 2355, -1,1360, 1361, 1362, -1,1359, 1360, 2356, -1,2355, 2354, + 1358, -1,2354, 2355, 1365, -1,1384, 1363, 1362, -1,1383, 1384, 2357, -1,1362, 2357, + 1384, -1,2357, 1362, 1361, -1,2358, 2357, 1371, -1,2357, 2358, 1383, -1,1383, 2358, + 2359, -1,1381, 1382, 2359, -1,2360, 1380, 1381, -1,1378, 1379, 2362, -1,1380, 2361, + 1379, -1,2363, 1351, 1378, -1,1381, 2359, 2360, -1,1382, 1383, 2359, -1,2358, 1372, + 2359, -1,2361, 2360, 1374, -1,1371, 2357, 1361, -1,2358, 1371, 1372, -1,2360, 2361, + 1380, -1,1373, 2359, 1372, -1,1373, 1374, 2360, -1,1373, 2360, 2359, -1,2361, 1374, + 1375, -1,2362, 2363, 1378, -1,2363, 2362, 1376, -1,1352, 2363, 1377, -1,2363, 1352, + 1351, -1,1375, 1376, 2362, -1,1377, 1353, 1352, -1,1376, 1377, 2363, -1,2362, 2361, + 1375, -1,2361, 2362, 1379, -1,1354, 1353, 1385, -1,1354, 2364, 1355, -1,2364, 1354, + 1385, -1,2364, 1385, 1386, -1,1356, 1355, 2365, -1,2366, 1357, 1356, -1,2367, 1358, + 1357, -1,2369, 1360, 1359, -1,2370, 1361, 1360, -1,1359, 1358, 2368, -1,2364, 2365, + 1355, -1,2365, 2366, 1356, -1,2366, 2365, 1386, -1,2367, 2366, 1386, -1,2366, 2367, + 1357, -1,1386, 2365, 2364, -1,2367, 1386, 2368, -1,2368, 2369, 1359, -1,2369, 2368, + 1386, -1,2370, 2369, 1386, -1,2369, 2370, 1360, -1,2370, 1386, 1387, -1,2370, 1387, + 1361, -1,2367, 2368, 1358, -1,1371, 1361, 1387, -1,1371, 2371, 1372, -1,2371, 1371, + 1387, -1,2371, 1387, 1386, -1,1373, 1372, 2372, -1,2373, 1374, 1373, -1,2374, 1375, + 1374, -1,2376, 1377, 1376, -1,2377, 1353, 1377, -1,1376, 1375, 2375, -1,2371, 2372, + 1372, -1,2372, 2373, 1373, -1,2373, 2372, 1386, -1,2374, 2373, 1386, -1,2373, 2374, + 1374, -1,1386, 2372, 2371, -1,2374, 1386, 2375, -1,2375, 2376, 1376, -1,2376, 2375, + 1386, -1,2377, 2376, 1386, -1,2376, 2377, 1377, -1,2377, 1386, 1385, -1,2377, 1385, + 1353, -1,2374, 2375, 1375, -1,1407, 1388, 1389, -1,1406, 1407, 2378, -1,1389, 2378, + 1407, -1,2378, 1389, 1390, -1,2379, 2378, 1391, -1,2378, 2379, 1406, -1,1406, 2379, + 2380, -1,1404, 1405, 2380, -1,2381, 1403, 1404, -1,1401, 1402, 2383, -1,1403, 2382, + 1402, -1,2384, 1400, 1401, -1,1404, 2380, 2381, -1,1405, 1406, 2380, -1,2379, 1392, + 2380, -1,2382, 2381, 1394, -1,1391, 2378, 1390, -1,2379, 1391, 1392, -1,2381, 2382, + 1403, -1,1393, 2380, 1392, -1,1393, 1394, 2381, -1,1393, 2381, 2380, -1,2382, 1394, + 1395, -1,2383, 2384, 1401, -1,2384, 2383, 1396, -1,1399, 2384, 1397, -1,2384, 1399, + 1400, -1,1395, 1396, 2383, -1,1397, 1398, 1399, -1,1396, 1397, 2384, -1,2383, 2382, + 1395, -1,2382, 2383, 1402, -1,1421, 1400, 1399, -1,1420, 1421, 2385, -1,1399, 2385, + 1421, -1,2385, 1399, 1398, -1,2386, 2385, 1408, -1,2385, 2386, 1420, -1,1420, 2386, + 2387, -1,1418, 1419, 2387, -1,2388, 1417, 1418, -1,1415, 1416, 2390, -1,1417, 2389, + 1416, -1,2391, 1388, 1415, -1,1418, 2387, 2388, -1,1419, 1420, 2387, -1,2386, 1409, + 2387, -1,2389, 2388, 1411, -1,1408, 2385, 1398, -1,2386, 1408, 1409, -1,2388, 2389, + 1417, -1,1410, 2387, 1409, -1,1410, 1411, 2388, -1,1410, 2388, 2387, -1,2389, 1411, + 1412, -1,2390, 2391, 1415, -1,2391, 2390, 1413, -1,1389, 2391, 1414, -1,2391, 1389, + 1388, -1,1412, 1413, 2390, -1,1414, 1390, 1389, -1,1413, 1414, 2391, -1,2390, 2389, + 1412, -1,2389, 2390, 1416, -1,1391, 1390, 1422, -1,1391, 2392, 1392, -1,2392, 1391, + 1422, -1,2392, 1422, 1423, -1,1393, 1392, 2393, -1,2394, 1394, 1393, -1,2395, 1395, + 1394, -1,2397, 1397, 1396, -1,2398, 1398, 1397, -1,1396, 1395, 2396, -1,2392, 2393, + 1392, -1,2393, 2394, 1393, -1,2394, 2393, 1423, -1,2395, 2394, 1423, -1,2394, 2395, + 1394, -1,1423, 2393, 2392, -1,2395, 1423, 2396, -1,2396, 2397, 1396, -1,2397, 2396, + 1423, -1,2398, 2397, 1423, -1,2397, 2398, 1397, -1,2398, 1423, 1424, -1,2398, 1424, + 1398, -1,2395, 2396, 1395, -1,1408, 1398, 1424, -1,1408, 2399, 1409, -1,2399, 1408, + 1424, -1,2399, 1424, 1423, -1,1410, 1409, 2400, -1,2401, 1411, 1410, -1,2402, 1412, + 1411, -1,2404, 1414, 1413, -1,2405, 1390, 1414, -1,1413, 1412, 2403, -1,2399, 2400, + 1409, -1,2400, 2401, 1410, -1,2401, 2400, 1423, -1,2402, 2401, 1423, -1,2401, 2402, + 1411, -1,1423, 2400, 2399, -1,2402, 1423, 2403, -1,2403, 2404, 1413, -1,2404, 2403, + 1423, -1,2405, 2404, 1423, -1,2404, 2405, 1414, -1,2405, 1423, 1422, -1,2405, 1422, + 1390, -1,2402, 2403, 1412, -1,1433, 1434, 1432, -1,1432, 1434, 1431, -1,1368, 1431, + 1369, -1,1431, 1368, 1367, -1,1379, 1431, 1327, -1,1351, 1370, 1431, -1,1379, 1378, + 1431, -1,1351, 1431, 1378, -1,1370, 1369, 1431, -1,1379, 1326, 1380, -1,1367, 1366, + 1430, -1,1471, 1429, 1430, -1,1365, 1430, 1366, -1,1364, 1430, 1365, -1,1367, 1430, + 1431, -1,1471, 1430, 1383, -1,1363, 1384, 1430, -1,1364, 1363, 1430, -1,1383, 1430, + 1384, -1,1382, 1470, 1383, -1,1327, 1431, 1434, -1,1437, 1438, 1436, -1,1436, 1438, + 1435, -1,1328, 1435, 1438, -1,1330, 1438, 1331, -1,1438, 1332, 1331, -1,1314, 1333, + 1438, -1,1439, 1314, 1438, -1,1341, 1314, 1439, -1,1342, 1341, 1439, -1,1333, 1332, + 1438, -1,1343, 1342, 1439, -1,1328, 1438, 1329, -1,1326, 1379, 1327, -1,1435, 1328, + 1327, -1,1381, 1380, 1407, -1,1329, 1438, 1330, -1,1344, 1343, 1439, -1,1345, 1344, + 1439, -1,1347, 1346, 1513, -1,1388, 1380, 1326, -1,1345, 1439, 1346, -1,1388, 1326, + 1347, -1,1407, 1382, 1381, -1,1327, 1434, 1435, -1,1388, 1347, 1513, -1,1428, 1474, + 1475, -1,1474, 1428, 1473, -1,1428, 1475, 1427, -1,1427, 1475, 1476, -1,1427, 1476, + 1477, -1,1472, 1473, 1428, -1,1471, 1383, 1470, -1,1469, 1470, 1406, -1,1428, 1429, + 1472, -1,1471, 1472, 1429, -1,1478, 1479, 1427, -1,1479, 1426, 1427, -1,1426, 1479, + 1464, -1,1426, 1464, 1465, -1,1478, 1427, 1477, -1,1425, 1426, 1461, -1,1426, 1465, + 1466, -1,1426, 1466, 1461, -1,1463, 1461, 1462, -1,1461, 1463, 1425, -1,1461, 1466, + 1467, -1,1405, 1468, 1469, -1,1468, 1404, 1403, -1,1404, 1468, 1405, -1,1468, 1403, + 1467, -1,1469, 1406, 1405, -1,1470, 1382, 1406, -1,1538, 1415, 1388, -1,1541, 1418, + 1417, -1,1543, 1419, 1418, -1,1416, 1415, 1539, -1,1382, 1407, 1406, -1,1403, 1300, + 1467, -1,1403, 1402, 1300, -1,1460, 1300, 1401, -1,1401, 1300, 1402, -1,1460, 1401, + 1400, -1,1467, 1300, 1461, -1,1420, 1419, 1459, -1,1421, 1420, 1459, -1,1459, 1460, + 1421, -1,1303, 1459, 1419, -1,1303, 1419, 1543, -1,1421, 1460, 1400, -1,1541, 1417, + 1416, -1,1380, 1388, 1407, -1,1346, 1439, 1512, -1,1506, 1507, 1439, -1,1508, 1509, + 1439, -1,1506, 1440, 1505, -1,1507, 1508, 1439, -1,1440, 1441, 1442, -1,1504, 1440, + 1503, -1,1443, 1440, 1442, -1,1440, 1504, 1505, -1,1506, 1439, 1440, -1,1443, 1500, + 1440, -1,1439, 1511, 1512, -1,1538, 1513, 1498, -1,1388, 1513, 1538, -1,1346, 1512, + 1513, -1,1503, 1440, 1502, -1,1502, 1440, 1501, -1,1500, 1443, 1499, -1,1500, 1501, + 1440, -1,1538, 1498, 1517, -1,1498, 1499, 1516, -1,1537, 1517, 1518, -1,1499, 1443, + 1444, -1,1509, 1510, 1439, -1,1514, 1515, 1447, -1,1517, 1498, 1516, -1,1514, 1447, + 1529, -1,1515, 1516, 1447, -1,1444, 1445, 1446, -1,1444, 1446, 1447, -1,1528, 1447, + 1527, -1,1528, 1529, 1447, -1,1527, 1447, 1526, -1,1516, 1499, 1447, -1,1444, 1447, + 1499, -1,1491, 1519, 1520, -1,1522, 1523, 1448, -1,1521, 1522, 1448, -1,1520, 1521, + 1448, -1,1525, 1526, 1448, -1,1524, 1525, 1448, -1,1449, 1489, 1448, -1,1448, 1490, + 1520, -1,1526, 1447, 1448, -1,1448, 1523, 1524, -1,1537, 1518, 1519, -1,1450, 1489, + 1449, -1,1539, 1415, 1538, -1,1542, 1418, 1541, -1,1541, 1416, 1540, -1,1540, 1416, + 1539, -1,1492, 1536, 1491, -1,1534, 1535, 1493, -1,1492, 1535, 1536, -1,1493, 1535, + 1492, -1,1536, 1537, 1519, -1,1538, 1517, 1537, -1,1544, 1458, 1303, -1,1458, 1545, + 1530, -1,1545, 1458, 1544, -1,1458, 1530, 1531, -1,1303, 1543, 1544, -1,1312, 1532, + 1533, -1,1494, 1312, 1533, -1,1532, 1457, 1531, -1,1457, 1532, 1312, -1,1531, 1457, + 1458, -1,1533, 1493, 1494, -1,1534, 1493, 1533, -1,1418, 1542, 1543, -1,1520, 1490, + 1491, -1,1494, 1495, 1456, -1,1536, 1519, 1491, -1,1487, 1488, 1450, -1,1486, 1487, + 1450, -1,1485, 1450, 1484, -1,1483, 1484, 1451, -1,1486, 1450, 1485, -1,1489, 1450, + 1488, -1,1456, 1452, 1453, -1,1452, 1456, 1496, -1,1456, 1454, 1455, -1,1454, 1456, + 1453, -1,1496, 1456, 1495, -1,1481, 1482, 1451, -1,1481, 1452, 1480, -1,1452, 1481, + 1451, -1,1480, 1452, 1497, -1,1482, 1483, 1451, -1,1497, 1452, 1496, -1,1450, 1451, + 1484, -1,1494, 1456, 1312, -1,1448, 1489, 1490, -1,1510, 1511, 1439, -1,1554, 1555, + 1556, -1,1553, 1554, 2406, -1,1556, 2406, 1554, -1,2406, 1556, 1506, -1,2407, 2406, + 1505, -1,2406, 2407, 1553, -1,1553, 2407, 2408, -1,1551, 1552, 2408, -1,2409, 1550, + 1551, -1,1548, 1549, 2411, -1,1550, 2410, 1549, -1,2412, 1547, 1548, -1,1551, 2408, + 2409, -1,1552, 1553, 2408, -1,2407, 1504, 2408, -1,2410, 2409, 1502, -1,1505, 2406, + 1506, -1,2407, 1505, 1504, -1,2409, 2410, 1550, -1,1503, 2408, 1504, -1,1503, 1502, + 2409, -1,1503, 2409, 2408, -1,2410, 1502, 1501, -1,2411, 2412, 1548, -1,2412, 2411, + 1500, -1,1546, 2412, 1499, -1,2412, 1546, 1547, -1,1501, 1500, 2411, -1,1499, 1498, + 1546, -1,1500, 1499, 2412, -1,2411, 2410, 1501, -1,2410, 2411, 1549, -1,1563, 1547, + 1546, -1,1562, 1563, 2413, -1,1546, 2413, 1563, -1,2413, 1546, 1498, -1,2414, 2413, + 1513, -1,2413, 2414, 1562, -1,1562, 2414, 2415, -1,1560, 1561, 2415, -1,2416, 1559, + 1560, -1,1557, 1558, 2418, -1,1559, 2417, 1558, -1,2419, 1555, 1557, -1,1560, 2415, + 2416, -1,1561, 1562, 2415, -1,2414, 1512, 2415, -1,2417, 2416, 1510, -1,1513, 2413, + 1498, -1,2414, 1513, 1512, -1,2416, 2417, 1559, -1,1511, 2415, 1512, -1,1511, 1510, + 2416, -1,1511, 2416, 2415, -1,2417, 1510, 1509, -1,2418, 2419, 1557, -1,2419, 2418, + 1508, -1,1556, 2419, 1507, -1,2419, 1556, 1555, -1,1509, 1508, 2418, -1,1507, 1506, + 1556, -1,1508, 1507, 2419, -1,2418, 2417, 1509, -1,2417, 2418, 1558, -1,1566, 2420, + 1565, -1,2420, 1566, 1555, -1,2421, 2420, 1554, -1,2420, 2421, 1565, -1,1565, 2421, + 2422, -1,2422, 2423, 1565, -1,2423, 2422, 1552, -1,2424, 2423, 1551, -1,2423, 2424, + 1565, -1,2425, 1565, 2424, -1,2421, 1553, 2422, -1,1553, 2421, 1554, -1,1552, 2422, + 1553, -1,1550, 2424, 1551, -1,1550, 2425, 2424, -1,1551, 2423, 1552, -1,2425, 2426, + 1565, -1,2426, 2425, 1549, -1,1564, 2426, 1548, -1,2426, 1564, 1565, -1,1549, 1548, + 2426, -1,1548, 1547, 1564, -1,2425, 1550, 1549, -1,1554, 2420, 1555, -1,1564, 2427, + 1565, -1,2427, 1564, 1547, -1,2428, 2427, 1563, -1,2427, 2428, 1565, -1,1565, 2428, + 2429, -1,2429, 2430, 1565, -1,2430, 2429, 1561, -1,2431, 2430, 1560, -1,2430, 2431, + 1565, -1,2432, 1565, 2431, -1,2428, 1562, 2429, -1,1562, 2428, 1563, -1,1561, 2429, + 1562, -1,1559, 2431, 1560, -1,1559, 2432, 2431, -1,1560, 2430, 1561, -1,2432, 2433, + 1565, -1,2433, 2432, 1558, -1,1566, 2433, 1557, -1,2433, 1566, 1565, -1,1558, 1557, + 2433, -1,1557, 1555, 1566, -1,2432, 1559, 1558, -1,1563, 2427, 1547, -1,1575, 1576, + 1577, -1,1574, 1575, 2434, -1,1577, 2434, 1575, -1,2434, 1577, 1514, -1,2435, 2434, + 1529, -1,2434, 2435, 1574, -1,1574, 2435, 2436, -1,1572, 1573, 2436, -1,2437, 1571, + 1572, -1,1569, 1570, 2439, -1,1571, 2438, 1570, -1,2440, 1568, 1569, -1,1572, 2436, + 2437, -1,1573, 1574, 2436, -1,2435, 1528, 2436, -1,2438, 2437, 1526, -1,1529, 2434, + 1514, -1,2435, 1529, 1528, -1,2437, 2438, 1571, -1,1527, 2436, 1528, -1,1527, 1526, + 2437, -1,1527, 2437, 2436, -1,2438, 1526, 1525, -1,2439, 2440, 1569, -1,2440, 2439, + 1524, -1,1567, 2440, 1523, -1,2440, 1567, 1568, -1,1525, 1524, 2439, -1,1523, 1522, + 1567, -1,1524, 1523, 2440, -1,2439, 2438, 1525, -1,2438, 2439, 1570, -1,1584, 1568, + 1567, -1,1583, 1584, 2441, -1,1567, 2441, 1584, -1,2441, 1567, 1522, -1,2442, 2441, + 1521, -1,2441, 2442, 1583, -1,1583, 2442, 2443, -1,1581, 1582, 2443, -1,2444, 1580, + 1581, -1,1578, 1579, 2446, -1,1580, 2445, 1579, -1,2447, 1576, 1578, -1,1581, 2443, + 2444, -1,1582, 1583, 2443, -1,2442, 1520, 2443, -1,2445, 2444, 1518, -1,1521, 2441, + 1522, -1,2442, 1521, 1520, -1,2444, 2445, 1580, -1,1519, 2443, 1520, -1,1519, 1518, + 2444, -1,1519, 2444, 2443, -1,2445, 1518, 1517, -1,2446, 2447, 1578, -1,2447, 2446, + 1516, -1,1577, 2447, 1515, -1,2447, 1577, 1576, -1,1517, 1516, 2446, -1,1515, 1514, + 1577, -1,1516, 1515, 2447, -1,2446, 2445, 1517, -1,2445, 2446, 1579, -1,1587, 2448, + 1586, -1,2448, 1587, 1576, -1,2449, 2448, 1575, -1,2448, 2449, 1586, -1,1586, 2449, + 2450, -1,2450, 2451, 1586, -1,2451, 2450, 1573, -1,2452, 2451, 1572, -1,2451, 2452, + 1586, -1,2453, 1586, 2452, -1,2449, 1574, 2450, -1,1574, 2449, 1575, -1,1573, 2450, + 1574, -1,1571, 2452, 1572, -1,1571, 2453, 2452, -1,1572, 2451, 1573, -1,2453, 2454, + 1586, -1,2454, 2453, 1570, -1,1585, 2454, 1569, -1,2454, 1585, 1586, -1,1570, 1569, + 2454, -1,1569, 1568, 1585, -1,2453, 1571, 1570, -1,1575, 2448, 1576, -1,1585, 2455, + 1586, -1,2455, 1585, 1568, -1,2456, 2455, 1584, -1,2455, 2456, 1586, -1,1586, 2456, + 2457, -1,2457, 2458, 1586, -1,2458, 2457, 1582, -1,2459, 2458, 1581, -1,2458, 2459, + 1586, -1,2460, 1586, 2459, -1,2456, 1583, 2457, -1,1583, 2456, 1584, -1,1582, 2457, + 1583, -1,1580, 2459, 1581, -1,1580, 2460, 2459, -1,1581, 2458, 1582, -1,2460, 2461, + 1586, -1,2461, 2460, 1579, -1,1587, 2461, 1578, -1,2461, 1587, 1586, -1,1579, 1578, + 2461, -1,1578, 1576, 1587, -1,2460, 1580, 1579, -1,1584, 2455, 1568, -1,1596, 1597, + 1598, -1,1595, 1596, 2462, -1,1598, 2462, 1596, -1,2462, 1598, 1538, -1,2463, 2462, + 1537, -1,2462, 2463, 1595, -1,1595, 2463, 2464, -1,1593, 1594, 2464, -1,2465, 1592, + 1593, -1,1590, 1591, 2467, -1,1592, 2466, 1591, -1,2468, 1589, 1590, -1,1593, 2464, + 2465, -1,1594, 1595, 2464, -1,2463, 1536, 2464, -1,2466, 2465, 1534, -1,1537, 2462, + 1538, -1,2463, 1537, 1536, -1,2465, 2466, 1592, -1,1535, 2464, 1536, -1,1535, 1534, + 2465, -1,1535, 2465, 2464, -1,2466, 1534, 1533, -1,2467, 2468, 1590, -1,2468, 2467, + 1532, -1,1588, 2468, 1531, -1,2468, 1588, 1589, -1,1533, 1532, 2467, -1,1531, 1530, + 1588, -1,1532, 1531, 2468, -1,2467, 2466, 1533, -1,2466, 2467, 1591, -1,1605, 1589, + 1588, -1,1604, 1605, 2469, -1,1588, 2469, 1605, -1,2469, 1588, 1530, -1,2470, 2469, + 1545, -1,2469, 2470, 1604, -1,1604, 2470, 2471, -1,1602, 1603, 2471, -1,2472, 1601, + 1602, -1,1599, 1600, 2474, -1,1601, 2473, 1600, -1,2475, 1597, 1599, -1,1602, 2471, + 2472, -1,1603, 1604, 2471, -1,2470, 1544, 2471, -1,2473, 2472, 1542, -1,1545, 2469, + 1530, -1,2470, 1545, 1544, -1,2472, 2473, 1601, -1,1543, 2471, 1544, -1,1543, 1542, + 2472, -1,1543, 2472, 2471, -1,2473, 1542, 1541, -1,2474, 2475, 1599, -1,2475, 2474, + 1540, -1,1598, 2475, 1539, -1,2475, 1598, 1597, -1,1541, 1540, 2474, -1,1539, 1538, + 1598, -1,1540, 1539, 2475, -1,2474, 2473, 1541, -1,2473, 2474, 1600, -1,1608, 2476, + 1607, -1,2476, 1608, 1597, -1,2477, 2476, 1596, -1,2476, 2477, 1607, -1,1607, 2477, + 2478, -1,2478, 2479, 1607, -1,2479, 2478, 1594, -1,2480, 2479, 1593, -1,2479, 2480, + 1607, -1,2481, 1607, 2480, -1,2477, 1595, 2478, -1,1595, 2477, 1596, -1,1594, 2478, + 1595, -1,1592, 2480, 1593, -1,1592, 2481, 2480, -1,1593, 2479, 1594, -1,2481, 2482, + 1607, -1,2482, 2481, 1591, -1,1606, 2482, 1590, -1,2482, 1606, 1607, -1,1591, 1590, + 2482, -1,1590, 1589, 1606, -1,2481, 1592, 1591, -1,1596, 2476, 1597, -1,1606, 2483, + 1607, -1,2483, 1606, 1589, -1,2484, 2483, 1605, -1,2483, 2484, 1607, -1,1607, 2484, + 2485, -1,2485, 2486, 1607, -1,2486, 2485, 1603, -1,2487, 2486, 1602, -1,2486, 2487, + 1607, -1,2488, 1607, 2487, -1,2484, 1604, 2485, -1,1604, 2484, 1605, -1,1603, 2485, + 1604, -1,1601, 2487, 1602, -1,1601, 2488, 2487, -1,1602, 2486, 1603, -1,2488, 2489, + 1607, -1,2489, 2488, 1600, -1,1608, 2489, 1599, -1,2489, 1608, 1607, -1,1600, 1599, + 2489, -1,1599, 1597, 1608, -1,2488, 1601, 1600, -1,1605, 2483, 1589, -1,1473, 1472, + 1609, -1,1474, 1473, 2490, -1,1609, 2490, 1473, -1,2490, 1609, 1610, -1,2491, 2490, + 1611, -1,2490, 2491, 1474, -1,1474, 2491, 2492, -1,1476, 1475, 2492, -1,2493, 1477, + 1476, -1,1479, 1478, 2495, -1,1477, 2494, 1478, -1,2496, 1464, 1479, -1,1476, 2492, + 2493, -1,1475, 1474, 2492, -1,2491, 1612, 2492, -1,2494, 2493, 1614, -1,1611, 2490, + 1610, -1,2491, 1611, 1612, -1,2493, 2494, 1477, -1,1613, 2492, 1612, -1,1613, 1614, + 2493, -1,1613, 2493, 2492, -1,2494, 1614, 1615, -1,2495, 2496, 1479, -1,2496, 2495, + 1616, -1,1619, 2496, 1617, -1,2496, 1619, 1464, -1,1615, 1616, 2495, -1,1617, 1618, + 1619, -1,1616, 1617, 2496, -1,2495, 2494, 1615, -1,2494, 2495, 1478, -1,1465, 1464, + 1619, -1,1466, 1465, 2497, -1,1619, 2497, 1465, -1,2497, 1619, 1618, -1,2498, 2497, + 1620, -1,2497, 2498, 1466, -1,1466, 2498, 2499, -1,1468, 1467, 2499, -1,2500, 1469, + 1468, -1,1471, 1470, 2502, -1,1469, 2501, 1470, -1,2503, 1472, 1471, -1,1468, 2499, + 2500, -1,1467, 1466, 2499, -1,2498, 1621, 2499, -1,2501, 2500, 1623, -1,1620, 2497, + 1618, -1,2498, 1620, 1621, -1,2500, 2501, 1469, -1,1622, 2499, 1621, -1,1622, 1623, + 2500, -1,1622, 2500, 2499, -1,2501, 1623, 1624, -1,2502, 2503, 1471, -1,2503, 2502, + 1625, -1,1609, 2503, 1626, -1,2503, 1609, 1472, -1,1624, 1625, 2502, -1,1626, 1610, + 1609, -1,1625, 1626, 2503, -1,2502, 2501, 1624, -1,2501, 2502, 1470, -1,1611, 1610, + 1627, -1,1611, 2504, 1612, -1,2504, 1611, 1627, -1,2504, 1627, 1628, -1,1613, 1612, + 2505, -1,2506, 1614, 1613, -1,2507, 1615, 1614, -1,2509, 1617, 1616, -1,2510, 1618, + 1617, -1,1616, 1615, 2508, -1,2504, 2505, 1612, -1,2505, 2506, 1613, -1,2506, 2505, + 1628, -1,2507, 2506, 1628, -1,2506, 2507, 1614, -1,1628, 2505, 2504, -1,2507, 1628, + 2508, -1,2508, 2509, 1616, -1,2509, 2508, 1628, -1,2510, 2509, 1628, -1,2509, 2510, + 1617, -1,2510, 1628, 1629, -1,2510, 1629, 1618, -1,2507, 2508, 1615, -1,1620, 1618, + 1629, -1,1620, 2511, 1621, -1,2511, 1620, 1629, -1,2511, 1629, 1628, -1,1622, 1621, + 2512, -1,2513, 1623, 1622, -1,2514, 1624, 1623, -1,2516, 1626, 1625, -1,2517, 1610, + 1626, -1,1625, 1624, 2515, -1,2511, 2512, 1621, -1,2512, 2513, 1622, -1,2513, 2512, + 1628, -1,2514, 2513, 1628, -1,2513, 2514, 1623, -1,1628, 2512, 2511, -1,2514, 1628, + 2515, -1,2515, 2516, 1625, -1,2516, 2515, 1628, -1,2517, 2516, 1628, -1,2516, 2517, + 1626, -1,2517, 1628, 1627, -1,2517, 1627, 1610, -1,2514, 2515, 1624, -1,1633, 1632, + 1631, -1,1634, 1633, 1631, -1,1635, 1634, 1631, -1,1630, 1635, 1631, -1,1647, 1646, + 1630, -1,1645, 1630, 1646, -1,1645, 1644, 1630, -1,1644, 1635, 1630, -1,1639, 1637, + 1636, -1,1637, 1639, 1638, -1,1635, 1644, 1639, -1,1640, 1644, 1643, -1,1641, 1640, + 1642, -1,1643, 1642, 1640, -1,1640, 1639, 1644, -1,1636, 1635, 1639, -1,1481, 1480, + 1648, -1,1482, 1481, 2518, -1,1648, 2518, 1481, -1,2518, 1648, 1640, -1,2519, 2518, + 1641, -1,2518, 2519, 1482, -1,1482, 2519, 2520, -1,1484, 1483, 2520, -1,2521, 1485, + 1484, -1,1487, 1486, 2523, -1,1485, 2522, 1486, -1,2524, 1488, 1487, -1,1484, 2520, + 2521, -1,1483, 1482, 2520, -1,2519, 1642, 2520, -1,2522, 2521, 1644, -1,1641, 2518, + 1640, -1,2519, 1641, 1642, -1,2521, 2522, 1485, -1,1643, 2520, 1642, -1,1643, 1644, + 2521, -1,1643, 2521, 2520, -1,2522, 1644, 1645, -1,2523, 2524, 1487, -1,2524, 2523, + 1646, -1,1649, 2524, 1647, -1,2524, 1649, 1488, -1,1645, 1646, 2523, -1,1647, 1630, + 1649, -1,1646, 1647, 2524, -1,2523, 2522, 1645, -1,2522, 2523, 1486, -1,1639, 1640, + 1497, -1,1480, 1497, 1640, -1,1490, 1489, 1650, -1,1491, 1490, 2525, -1,1650, 2525, + 1490, -1,2525, 1650, 1631, -1,2526, 2525, 1632, -1,2525, 2526, 1491, -1,1491, 2526, + 2527, -1,1493, 1492, 2527, -1,2528, 1494, 1493, -1,1496, 1495, 2530, -1,1494, 2529, + 1495, -1,2531, 1497, 1496, -1,1493, 2527, 2528, -1,1492, 1491, 2527, -1,2526, 1633, + 2527, -1,2529, 2528, 1635, -1,1632, 2525, 1631, -1,2526, 1632, 1633, -1,2528, 2529, + 1494, -1,1634, 2527, 1633, -1,1634, 1635, 2528, -1,1634, 2528, 2527, -1,2529, 1635, + 1636, -1,2530, 2531, 1496, -1,2531, 2530, 1637, -1,1651, 2531, 1638, -1,2531, 1651, + 1497, -1,1636, 1637, 2530, -1,1638, 1639, 1651, -1,1637, 1638, 2531, -1,2530, 2529, + 1636, -1,2529, 2530, 1495, -1,1488, 1630, 1631, -1,1631, 1489, 1488, -1,1669, 1670, + 1671, -1,1668, 1669, 2532, -1,1671, 2532, 1669, -1,2532, 1671, 1653, -1,2533, 2532, + 1654, -1,2532, 2533, 1668, -1,1668, 2533, 1667, -1,1666, 1667, 2534, -1,1665, 1666, + 2535, -1,1661, 1663, 2538, -1,1661, 1662, 1663, -1,2537, 1663, 1664, -1,1665, 2536, + 1664, -1,2533, 2534, 1667, -1,2534, 1656, 2535, -1,1656, 2534, 1655, -1,2535, 1656, + 1657, -1,2534, 2535, 1666, -1,1655, 2533, 1654, -1,2534, 2533, 1655, -1,1653, 1654, + 2532, -1,1671, 1652, 1653, -1,2536, 2537, 1664, -1,2537, 2536, 1658, -1,2538, 2537, + 1659, -1,2537, 2538, 1663, -1,1657, 1658, 2536, -1,1659, 1660, 2538, -1,1658, 1659, + 2537, -1,2536, 2535, 1657, -1,2538, 1660, 1661, -1,2535, 2536, 1665, -1,1685, 1662, + 1661, -1,1684, 1685, 2539, -1,2539, 2540, 1684, -1,2539, 1661, 1660, -1,2540, 2539, + 1672, -1,2539, 1685, 1661, -1,1684, 2540, 2541, -1,1682, 1683, 2541, -1,2542, 1681, + 1682, -1,1679, 1680, 2544, -1,1681, 2543, 1680, -1,2545, 1670, 1679, -1,1682, 2541, + 2542, -1,1683, 1684, 2541, -1,2540, 1673, 2541, -1,1672, 1673, 2540, -1,1672, 2539, + 1660, -1,1673, 1674, 2541, -1,1674, 2542, 2541, -1,2542, 1675, 2543, -1,1674, 1675, + 2542, -1,2543, 1675, 1676, -1,2543, 2544, 1680, -1,2543, 1676, 2544, -1,2545, 2544, + 1677, -1,2544, 2545, 1679, -1,1678, 1671, 2545, -1,1652, 1671, 1678, -1,1678, 2545, + 1677, -1,1676, 1677, 2544, -1,2545, 1671, 1670, -1,2542, 2543, 1681, -1,1680, 1679, + 1700, -1,1686, 1701, 1679, -1,1679, 1701, 1700, -1,1700, 1681, 1680, -1,1681, 1699, + 1698, -1,1683, 1682, 1698, -1,1699, 1681, 1700, -1,1698, 1682, 1681, -1,1669, 1686, + 1670, -1,1679, 1670, 1686, -1,1669, 1668, 1688, -1,1687, 1686, 1669, -1,1668, 1667, + 1688, -1,1690, 1689, 1667, -1,1688, 1667, 1689, -1,1687, 1669, 1688, -1,1696, 1683, + 1697, -1,1698, 1697, 1683, -1,1696, 1695, 1685, -1,1684, 1683, 1696, -1,1695, 1694, + 1685, -1,1663, 1662, 1694, -1,1685, 1694, 1662, -1,1684, 1696, 1685, -1,1691, 1690, + 1665, -1,1690, 1666, 1665, -1,1667, 1666, 1690, -1,1665, 1692, 1691, -1,1692, 1664, + 1663, -1,1694, 1693, 1663, -1,1664, 1692, 1665, -1,1663, 1693, 1692, -1,1710, 1711, + 1712, -1,1709, 1710, 2546, -1,1712, 2546, 1710, -1,2546, 1712, 1686, -1,2547, 2546, + 1687, -1,2546, 2547, 1709, -1,1709, 2547, 2548, -1,1707, 1708, 2548, -1,2549, 1706, + 1707, -1,1704, 1705, 2551, -1,1706, 2550, 1705, -1,2552, 1703, 1704, -1,1707, 2548, + 2549, -1,1708, 1709, 2548, -1,2547, 1688, 2548, -1,2550, 2549, 1690, -1,1687, 2546, + 1686, -1,2547, 1687, 1688, -1,2549, 2550, 1706, -1,1689, 2548, 1688, -1,1689, 1690, + 2549, -1,1689, 2549, 2548, -1,2550, 1690, 1691, -1,2551, 2552, 1704, -1,2552, 2551, + 1692, -1,1702, 2552, 1693, -1,2552, 1702, 1703, -1,1691, 1692, 2551, -1,1693, 1694, + 1702, -1,1692, 1693, 2552, -1,2551, 2550, 1691, -1,2550, 2551, 1705, -1,1719, 1703, + 1702, -1,1718, 1719, 2553, -1,1702, 2553, 1719, -1,2553, 1702, 1694, -1,2554, 2553, + 1695, -1,2553, 2554, 1718, -1,1718, 2554, 2555, -1,1716, 1717, 2555, -1,2556, 1715, + 1716, -1,1713, 1714, 2558, -1,1715, 2557, 1714, -1,2559, 1711, 1713, -1,1716, 2555, + 2556, -1,1717, 1718, 2555, -1,2554, 1696, 2555, -1,2557, 2556, 1698, -1,1695, 2553, + 1694, -1,2554, 1695, 1696, -1,2556, 2557, 1715, -1,1697, 2555, 1696, -1,1697, 1698, + 2556, -1,1697, 2556, 2555, -1,2557, 1698, 1699, -1,2558, 2559, 1713, -1,2559, 2558, + 1700, -1,1712, 2559, 1701, -1,2559, 1712, 1711, -1,1699, 1700, 2558, -1,1701, 1686, + 1712, -1,1700, 1701, 2559, -1,2558, 2557, 1699, -1,2557, 2558, 1714, -1,1722, 2560, + 1721, -1,2560, 1722, 1711, -1,2561, 2560, 1710, -1,2560, 2561, 1721, -1,1721, 2561, + 2562, -1,2562, 2563, 1721, -1,2563, 2562, 1708, -1,2564, 2563, 1707, -1,2563, 2564, + 1721, -1,2565, 1721, 2564, -1,2561, 1709, 2562, -1,1709, 2561, 1710, -1,1708, 2562, + 1709, -1,1706, 2564, 1707, -1,1706, 2565, 2564, -1,1707, 2563, 1708, -1,2565, 2566, + 1721, -1,2566, 2565, 1705, -1,1720, 2566, 1704, -1,2566, 1720, 1721, -1,1705, 1704, + 2566, -1,1704, 1703, 1720, -1,2565, 1706, 1705, -1,1710, 2560, 1711, -1,1720, 2567, + 1721, -1,2567, 1720, 1703, -1,2568, 2567, 1719, -1,2567, 2568, 1721, -1,1721, 2568, + 2569, -1,2569, 2570, 1721, -1,2570, 2569, 1717, -1,2571, 2570, 1716, -1,2570, 2571, + 1721, -1,2572, 1721, 2571, -1,2568, 1718, 2569, -1,1718, 2568, 1719, -1,1717, 2569, + 1718, -1,1715, 2571, 1716, -1,1715, 2572, 2571, -1,1716, 2570, 1717, -1,2572, 2573, + 1721, -1,2573, 2572, 1714, -1,1722, 2573, 1713, -1,2573, 1722, 1721, -1,1714, 1713, + 2573, -1,1713, 1711, 1722, -1,2572, 1715, 1714, -1,1719, 2567, 1703, -1,1730, 2574, + 1729, -1,1732, 2574, 1730, -1,2636, 1740, 1741, -1,1729, 2575, 1728, -1,2575, 1729, + 2574, -1,2575, 2574, 1734, -1,1728, 2575, 1727, -1,1730, 1731, 1732, -1,1726, 1727, + 2577, -1,2576, 1727, 2575, -1,2577, 1727, 2576, -1,1738, 2640, 2639, -1,1737, 1726, + 2577, -1,2576, 1736, 2577, -1,2575, 1735, 2576, -1,1732, 1733, 1734, -1,1734, 1735, + 2575, -1,1736, 2576, 1735, -1,1738, 2639, 1737, -1,1738, 1725, 2640, -1,1737, 2577, + 1736, -1,2637, 1724, 1740, -1,2638, 1739, 1724, -1,2637, 1740, 2636, -1,1725, 1739, + 2638, -1,1742, 1723, 2636, -1,1742, 2636, 1741, -1,1740, 1724, 1739, -1,1725, 1738, + 1739, -1,1737, 2639, 1726, -1,1732, 1734, 2574, -1,1747, 1753, 2578, -1,1753, 2641, + 1752, -1,2579, 2578, 1753, -1,1747, 2578, 1746, -1,1746, 2578, 2579, -1,1743, 1732, + 1731, -1,2581, 1743, 1744, -1,1745, 1746, 2580, -1,2581, 1744, 2580, -1,2581, 2580, + 1755, -1,1746, 2579, 2580, -1,2580, 1744, 1745, -1,1732, 1743, 2581, -1,2579, 1754, + 2580, -1,1751, 1748, 2643, -1,2645, 2644, 1750, -1,1741, 1750, 2644, -1,1751, 1749, + 1750, -1,1749, 2645, 1750, -1,1742, 1741, 2644, -1,1748, 1751, 1752, -1,1754, 2579, + 1753, -1,2641, 1753, 1747, -1,1755, 2580, 1754, -1,1756, 2581, 1755, -1,1756, 1733, + 1732, -1,1748, 1752, 2642, -1,1756, 1732, 2581, -1,1749, 1751, 2643, -1,1742, 2644, + 1723, -1,1752, 2641, 2642, -1,1771, 1750, 1772, -1,1750, 1757, 1772, -1,1771, 1751, + 1750, -1,1741, 1757, 1750, -1,1769, 1752, 1770, -1,1752, 1771, 1770, -1,1751, 1771, + 1752, -1,1741, 1740, 1757, -1,1758, 1757, 1740, -1,1740, 1739, 1759, -1,1759, 1758, + 1740, -1,1738, 1760, 1759, -1,1738, 1737, 1761, -1,1760, 1738, 1761, -1,1739, 1738, + 1759, -1,1752, 1769, 1753, -1,1768, 1754, 1769, -1,1753, 1769, 1754, -1,1754, 1768, + 1767, -1,1767, 1755, 1754, -1,1767, 1766, 1756, -1,1756, 1766, 1765, -1,1765, 1733, + 1756, -1,1755, 1767, 1756, -1,1736, 1763, 1762, -1,1737, 1736, 1761, -1,1762, 1761, + 1736, -1,1736, 1735, 1763, -1,1764, 1734, 1765, -1,1733, 1765, 1734, -1,1734, 1763, + 1735, -1,1764, 1763, 1734, -1,1764, 1765, 1773, -1,1763, 1764, 2582, -1,1773, 2582, + 1764, -1,2582, 1773, 1774, -1,2583, 2582, 1775, -1,2582, 2583, 1763, -1,1763, 2583, + 2584, -1,1761, 1762, 2584, -1,2585, 1760, 1761, -1,1758, 1759, 2587, -1,1760, 2586, + 1759, -1,2588, 1757, 1758, -1,1761, 2584, 2585, -1,1762, 1763, 2584, -1,2583, 1776, + 2584, -1,2586, 2585, 1778, -1,1775, 2582, 1774, -1,2583, 1775, 1776, -1,2585, 2586, + 1760, -1,1777, 2584, 1776, -1,1777, 1778, 2585, -1,1777, 2585, 2584, -1,2586, 1778, + 1779, -1,2587, 2588, 1758, -1,2588, 2587, 1780, -1,1783, 2588, 1781, -1,2588, 1783, + 1757, -1,1779, 1780, 2587, -1,1781, 1782, 1783, -1,1780, 1781, 2588, -1,2587, 2586, + 1779, -1,2586, 2587, 1759, -1,1772, 1757, 1783, -1,1771, 1772, 2589, -1,1783, 2589, + 1772, -1,2589, 1783, 1782, -1,2590, 2589, 1784, -1,2589, 2590, 1771, -1,1771, 2590, + 2591, -1,1769, 1770, 2591, -1,2592, 1768, 1769, -1,1766, 1767, 2594, -1,1768, 2593, + 1767, -1,2595, 1765, 1766, -1,1769, 2591, 2592, -1,1770, 1771, 2591, -1,2590, 1785, + 2591, -1,2593, 2592, 1787, -1,1784, 2589, 1782, -1,2590, 1784, 1785, -1,2592, 2593, + 1768, -1,1786, 2591, 1785, -1,1786, 1787, 2592, -1,1786, 2592, 2591, -1,2593, 1787, + 1788, -1,2594, 2595, 1766, -1,2595, 2594, 1789, -1,1773, 2595, 1790, -1,2595, 1773, + 1765, -1,1788, 1789, 2594, -1,1790, 1774, 1773, -1,1789, 1790, 2595, -1,2594, 2593, + 1788, -1,2593, 2594, 1767, -1,1775, 1774, 1791, -1,1775, 2596, 1776, -1,2596, 1775, + 1791, -1,2596, 1791, 1792, -1,1777, 1776, 2597, -1,2598, 1778, 1777, -1,2599, 1779, + 1778, -1,2601, 1781, 1780, -1,2602, 1782, 1781, -1,1780, 1779, 2600, -1,2596, 2597, + 1776, -1,2597, 2598, 1777, -1,2598, 2597, 1792, -1,2599, 2598, 1792, -1,2598, 2599, + 1778, -1,1792, 2597, 2596, -1,2599, 1792, 2600, -1,2600, 2601, 1780, -1,2601, 2600, + 1792, -1,2602, 2601, 1792, -1,2601, 2602, 1781, -1,2602, 1792, 1793, -1,2602, 1793, + 1782, -1,2599, 2600, 1779, -1,1784, 1782, 1793, -1,1784, 2603, 1785, -1,2603, 1784, + 1793, -1,2603, 1793, 1792, -1,1786, 1785, 2604, -1,2605, 1787, 1786, -1,2606, 1788, + 1787, -1,2608, 1790, 1789, -1,2609, 1774, 1790, -1,1789, 1788, 2607, -1,2603, 2604, + 1785, -1,2604, 2605, 1786, -1,2605, 2604, 1792, -1,2606, 2605, 1792, -1,2605, 2606, + 1787, -1,1792, 2604, 2603, -1,2606, 1792, 2607, -1,2607, 2608, 1789, -1,2608, 2607, + 1792, -1,2609, 2608, 1792, -1,2608, 2609, 1790, -1,2609, 1792, 1791, -1,2609, 1791, + 1774, -1,2606, 2607, 1788, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,4, 2, 3, -1,1, 5, 0, -1,1, 4, 6, -1,5, 1, 7, -1,1, 2, 4, -1,0, 5, 8, -1, + 10, 8, 9, -1,12, 11, 10, -1,15, 14, 13, -1,11, 16, 14, -1,18, 17, 15, -1,10, 9, 12, -1, + 8, 5, 9, -1,5, 19, 9, -1,16, 12, 20, -1,7, 1, 6, -1,5, 7, 19, -1,12, 16, 11, -1,21, + 9, 19, -1,21, 20, 12, -1,21, 12, 9, -1,16, 20, 22, -1,18, 24, 23, -1,25, 18, 13, -1, + 18, 23, 17, -1,13, 18, 15, -1,22, 25, 13, -1,24, 26, 23, -1,25, 24, 18, -1,13, 16, + 22, -1,16, 13, 14, -1,28, 17, 27, -1,30, 28, 29, -1,27, 29, 28, -1,29, 27, 31, -1, + 33, 29, 32, -1,29, 33, 30, -1,17, 23, 27, -1,30, 33, 34, -1,4, 3, 35, -1,36, 4, 35, -1, + 38, 34, 37, -1,35, 39, 36, -1,41, 40, 38, -1,40, 42, 39, -1,33, 37, 34, -1,33, 32, + 43, -1,27, 23, 31, -1,31, 23, 26, -1,32, 29, 31, -1,43, 44, 37, -1,43, 37, 33, -1, + 37, 44, 45, -1,41, 42, 40, -1,42, 41, 45, -1,36, 42, 46, -1,42, 36, 39, -1,45, 46, + 42, -1,47, 6, 36, -1,46, 47, 36, -1,41, 37, 45, -1,36, 6, 4, -1,37, 41, 38, -1,50, + 49, 48, -1,52, 48, 51, -1,49, 51, 48, -1,54, 53, 49, -1,54, 56, 55, -1,57, 55, 56, -1, + 54, 49, 50, -1,55, 53, 54, -1,59, 52, 58, -1,48, 52, 60, -1,58, 61, 59, -1,60, 52, + 59, -1,63, 61, 62, -1,62, 61, 64, -1,65, 62, 64, -1,59, 61, 63, -1,67, 57, 66, -1, + 55, 57, 68, -1,66, 69, 67, -1,68, 57, 67, -1,71, 69, 70, -1,73, 70, 72, -1,70, 69, + 72, -1,67, 69, 71, -1,75, 74, 65, -1,62, 65, 76, -1,74, 76, 65, -1,78, 77, 74, -1, + 78, 51, 73, -1,70, 73, 51, -1,78, 74, 75, -1,73, 77, 78, -1,81, 80, 79, -1,83, 81, + 82, -1,79, 82, 81, -1,82, 79, 84, -1,86, 82, 85, -1,82, 86, 83, -1,83, 86, 87, -1, + 89, 88, 87, -1,91, 90, 89, -1,94, 93, 92, -1,90, 95, 93, -1,97, 96, 94, -1,89, 87, + 91, -1,88, 83, 87, -1,86, 98, 87, -1,95, 91, 99, -1,85, 82, 84, -1,86, 85, 98, -1, + 91, 95, 90, -1,100, 87, 98, -1,100, 99, 91, -1,100, 91, 87, -1,95, 99, 101, -1,92, + 97, 94, -1,97, 92, 102, -1,104, 97, 103, -1,97, 104, 96, -1,101, 102, 92, -1,103, + 105, 104, -1,102, 103, 97, -1,92, 95, 101, -1,95, 92, 93, -1,106, 96, 104, -1,108, + 106, 107, -1,104, 107, 106, -1,107, 104, 105, -1,110, 107, 109, -1,107, 110, 108, -1, + 108, 110, 111, -1,113, 112, 111, -1,115, 114, 113, -1,118, 117, 116, -1,114, 119, + 117, -1,120, 80, 118, -1,113, 111, 115, -1,112, 108, 111, -1,110, 121, 111, -1,119, + 115, 122, -1,109, 107, 105, -1,110, 109, 121, -1,115, 119, 114, -1,123, 111, 121, -1, + 123, 122, 115, -1,123, 115, 111, -1,119, 122, 124, -1,116, 120, 118, -1,120, 116, + 125, -1,79, 120, 126, -1,120, 79, 80, -1,124, 125, 116, -1,126, 84, 79, -1,125, 126, + 120, -1,116, 119, 124, -1,119, 116, 117, -1,129, 128, 127, -1,129, 131, 130, -1,131, + 129, 127, -1,131, 127, 132, -1,134, 130, 133, -1,136, 135, 134, -1,138, 137, 135, -1, + 141, 140, 139, -1,143, 142, 140, -1,139, 137, 144, -1,131, 133, 130, -1,133, 136, + 134, -1,136, 133, 132, -1,138, 136, 132, -1,136, 138, 135, -1,132, 133, 131, -1,138, + 132, 144, -1,144, 141, 139, -1,141, 144, 132, -1,143, 141, 132, -1,141, 143, 140, -1, + 143, 132, 145, -1,143, 145, 142, -1,138, 144, 137, -1,146, 142, 145, -1,146, 148, + 147, -1,148, 146, 145, -1,148, 145, 132, -1,150, 147, 149, -1,152, 151, 150, -1,154, + 153, 151, -1,157, 156, 155, -1,158, 128, 156, -1,155, 153, 159, -1,148, 149, 147, -1, + 149, 152, 150, -1,152, 149, 132, -1,154, 152, 132, -1,152, 154, 151, -1,132, 149, + 148, -1,154, 132, 159, -1,159, 157, 155, -1,157, 159, 132, -1,158, 157, 132, -1,157, + 158, 156, -1,158, 132, 127, -1,158, 127, 128, -1,154, 159, 153, -1,162, 161, 160, -1, + 164, 160, 163, -1,160, 165, 163, -1,164, 163, 166, -1,166, 167, 164, -1,165, 160, + 161, -1,169, 168, 162, -1,171, 168, 170, -1,161, 162, 168, -1,173, 172, 171, -1,174, + 172, 173, -1,170, 173, 171, -1,170, 168, 169, -1,177, 176, 175, -1,167, 175, 176, -1, + 179, 176, 178, -1,176, 177, 178, -1,181, 180, 174, -1,180, 172, 174, -1,182, 180, + 181, -1,184, 183, 182, -1,180, 182, 183, -1,185, 183, 184, -1,175, 167, 166, -1,187, + 169, 186, -1,170, 169, 188, -1,188, 169, 187, -1,189, 186, 169, -1,191, 190, 187, -1, + 186, 191, 187, -1,193, 192, 189, -1,186, 189, 192, -1,194, 192, 193, -1,196, 195, + 193, -1,194, 193, 195, -1,197, 195, 196, -1,198, 190, 191, -1,200, 198, 199, -1,190, + 198, 200, -1,201, 200, 199, -1,203, 199, 202, -1,201, 199, 203, -1,204, 203, 202, -1, + 206, 205, 197, -1,207, 205, 206, -1,196, 206, 197, -1,204, 202, 208, -1,205, 207, + 209, -1,209, 207, 210, -1,211, 204, 208, -1,212, 185, 184, -1,214, 179, 213, -1,216, + 213, 215, -1,217, 215, 185, -1,215, 217, 216, -1,213, 216, 214, -1,214, 218, 179, -1, + 185, 212, 217, -1,221, 220, 219, -1,222, 212, 184, -1,222, 184, 220, -1,223, 221, + 219, -1,220, 221, 222, -1,221, 225, 224, -1,227, 218, 226, -1,227, 226, 228, -1,231, + 230, 229, -1,228, 230, 227, -1,227, 230, 231, -1,227, 179, 218, -1,234, 233, 232, -1, + 233, 236, 235, -1,238, 231, 237, -1,229, 237, 231, -1,234, 238, 237, -1,236, 224, + 239, -1,227, 176, 179, -1,232, 238, 234, -1,204, 211, 240, -1,223, 241, 240, -1,208, + 242, 211, -1,219, 241, 223, -1,221, 223, 225, -1,243, 242, 208, -1,245, 244, 207, -1, + 248, 247, 246, -1,243, 246, 247, -1,244, 248, 246, -1,247, 242, 243, -1,248, 244, + 249, -1,241, 204, 240, -1,235, 236, 239, -1,232, 235, 250, -1,252, 251, 250, -1,232, + 250, 251, -1,253, 251, 252, -1,225, 239, 224, -1,245, 255, 254, -1,245, 254, 249, -1, + 257, 253, 256, -1,252, 256, 253, -1,255, 245, 257, -1,253, 257, 245, -1,244, 245, + 249, -1,233, 235, 232, -1,210, 207, 244, -1,260, 259, 258, -1,262, 259, 261, -1,260, + 258, 263, -1,265, 264, 260, -1,265, 260, 263, -1,266, 265, 263, -1,269, 268, 267, -1, + 271, 270, 269, -1,272, 261, 267, -1,270, 273, 269, -1,275, 275, 274, -1,264, 265, + 273, -1,278, 277, 276, -1,279, 258, 259, -1,263, 280, 266, -1,280, 281, 266, -1,282, + 280, 263, -1,285, 284, 283, -1,286, 282, 263, -1,287, 278, 276, -1,281, 276, 266, -1, + 289, 288, 278, -1,290, 290, 290, -1,288, 289, 291, -1,291, 292, 288, -1,278, 288, + 277, -1,293, 285, 283, -1,268, 269, 273, -1,261, 294, 262, -1,296, 262, 295, -1,272, + 297, 261, -1,267, 298, 272, -1,274, 298, 268, -1,298, 267, 268, -1,299, 298, 274, -1, + 279, 259, 262, -1,294, 261, 300, -1,262, 294, 295, -1,302, 301, 274, -1,299, 274, + 301, -1,299, 303, 298, -1,300, 261, 297, -1,304, 302, 274, -1,306, 305, 304, -1,305, + 302, 304, -1,277, 306, 304, -1,309, 308, 307, -1,307, 308, 277, -1,288, 307, 277, -1, + 310, 306, 277, -1,313, 312, 311, -1,310, 277, 314, -1,277, 315, 314, -1,277, 308, + 315, -1,314, 315, 316, -1,275, 304, 274, -1,319, 318, 317, -1,307, 319, 309, -1,321, + 263, 320, -1,324, 323, 322, -1,322, 325, 324, -1,320, 263, 326, -1,322, 293, 327, -1, + 329, 328, 323, -1,329, 330, 328, -1,323, 328, 322, -1,327, 325, 322, -1,327, 293, + 283, -1,333, 332, 331, -1,333, 331, 326, -1,335, 333, 334, -1,333, 263, 334, -1,335, + 334, 336, -1,337, 332, 333, -1,333, 326, 263, -1,338, 328, 330, -1,339, 322, 328, -1, + 337, 339, 328, -1,342, 341, 340, -1,341, 339, 343, -1,346, 345, 344, -1,343, 340, + 341, -1,343, 339, 337, -1,286, 263, 321, -1,347, 347, 347, -1,350, 349, 348, -1,352, + 317, 351, -1,317, 354, 353, -1,319, 317, 353, -1,319, 353, 355, -1,352, 354, 317, -1, + 357, 356, 344, -1,358, 344, 356, -1,352, 344, 358, -1,358, 354, 352, -1,292, 291, + 359, -1,345, 360, 344, -1,361, 360, 336, -1,357, 344, 360, -1,363, 336, 362, -1,336, + 364, 362, -1,336, 365, 364, -1,357, 360, 366, -1,334, 365, 336, -1,369, 368, 367, -1, + 370, 336, 363, -1,370, 371, 361, -1,361, 371, 372, -1,336, 370, 361, -1,366, 360, + 361, -1,352, 351, 340, -1,349, 350, 359, -1,312, 313, 373, -1,375, 374, 296, -1,376, + 375, 296, -1,295, 376, 296, -1,378, 374, 377, -1,374, 378, 296, -1,296, 378, 379, -1, + 298, 303, 380, -1,298, 380, 381, -1,379, 383, 382, -1,386, 385, 384, -1,387, 313, + 311, -1,313, 388, 373, -1,387, 390, 389, -1,392, 316, 391, -1,388, 394, 393, -1,391, + 316, 315, -1,388, 313, 394, -1,387, 311, 390, -1,387, 389, 395, -1,391, 396, 392, -1, + 392, 396, 397, -1,387, 392, 398, -1,398, 313, 387, -1,394, 386, 393, -1,386, 384, + 393, -1,381, 399, 298, -1,400, 383, 379, -1,402, 383, 401, -1,403, 399, 381, -1,404, + 403, 381, -1,406, 405, 402, -1,400, 379, 378, -1,405, 408, 407, -1,409, 408, 405, -1, + 406, 410, 405, -1,405, 410, 409, -1,408, 411, 399, -1,411, 408, 409, -1,403, 412, + 399, -1,400, 401, 383, -1,383, 402, 405, -1,399, 412, 413, -1,416, 415, 414, -1,414, + 403, 404, -1,414, 415, 403, -1,417, 398, 397, -1,398, 392, 397, -1,417, 397, 418, -1, + 421, 420, 419, -1,421, 415, 422, -1,421, 422, 420, -1,424, 423, 418, -1,423, 417, + 418, -1,413, 412, 425, -1,425, 424, 426, -1,408, 399, 413, -1,427, 319, 355, -1,430, + 429, 428, -1,432, 429, 431, -1,433, 430, 428, -1,436, 435, 434, -1,436, 434, 437, -1, + 431, 367, 432, -1,428, 429, 432, -1,439, 367, 438, -1,427, 435, 440, -1,441, 367, + 431, -1,443, 438, 442, -1,442, 438, 444, -1,446, 372, 445, -1,371, 445, 372, -1,367, + 368, 438, -1,367, 441, 369, -1,447, 439, 446, -1,444, 438, 368, -1,448, 447, 446, -1, + 445, 449, 446, -1,450, 446, 449, -1,450, 451, 448, -1,450, 448, 446, -1,439, 438, + 446, -1,426, 424, 418, -1,452, 425, 426, -1,455, 454, 453, -1,436, 437, 456, -1,436, + 440, 435, -1,458, 452, 457, -1,459, 413, 458, -1,458, 425, 452, -1,460, 413, 459, -1, + 459, 440, 436, -1,461, 454, 455, -1,453, 456, 437, -1,454, 456, 453, -1,460, 459, + 436, -1,462, 413, 460, -1,425, 458, 413, -1,465, 464, 463, -1,447, 465, 463, -1,465, + 466, 464, -1,467, 464, 466, -1,468, 467, 466, -1,439, 447, 463, -1,470, 469, 468, -1, + 467, 468, 469, -1,471, 469, 470, -1,462, 471, 472, -1,343, 337, 333, -1,472, 473, + 462, -1,462, 469, 471, -1,462, 460, 469, -1,342, 340, 351, -1,318, 319, 307, -1,349, + 359, 291, -1,264, 273, 270, -1,287, 276, 281, -1,440, 319, 427, -1,416, 422, 415, -1, + 476, 475, 474, -1,477, 477, 477, -1,479, 476, 478, -1,480, 475, 476, -1,481, 480, + 479, -1,482, 481, 479, -1,479, 478, 478, -1,483, 483, 483, -1,480, 476, 479, -1,486, + 485, 484, -1,486, 484, 487, -1,489, 486, 488, -1,490, 485, 486, -1,491, 490, 489, -1, + 492, 492, 489, -1,489, 488, 488, -1,495, 494, 493, -1,490, 486, 489, -1,496, 496, + 496, -1,496, 496, 496, -1,499, 498, 497, -1,499, 497, 500, -1,502, 499, 501, -1,503, + 498, 499, -1,504, 503, 502, -1,505, 504, 502, -1,502, 501, 506, -1,507, 505, 502, -1, + 503, 499, 502, -1,510, 509, 508, -1,510, 508, 511, -1,512, 510, 488, -1,513, 509, + 510, -1,514, 513, 512, -1,515, 515, 512, -1,512, 488, 488, -1,518, 517, 516, -1,513, + 510, 512, -1,521, 520, 519, -1,522, 522, 522, -1,523, 521, 478, -1,480, 520, 521, -1, + 524, 480, 523, -1,525, 524, 523, -1,523, 478, 478, -1,526, 526, 526, -1,480, 521, + 523, -1,529, 528, 527, -1,532, 531, 530, -1,534, 532, 533, -1,535, 534, 533, -1,535, + 528, 536, -1,537, 531, 534, -1,535, 533, 528, -1,531, 532, 534, -1,334, 539, 538, -1, + 538, 539, 540, -1,540, 541, 538, -1,542, 540, 531, -1,540, 539, 531, -1,539, 530, + 531, -1,538, 541, 365, -1,534, 535, 543, -1,531, 537, 544, -1,543, 536, 529, -1,537, + 534, 543, -1,545, 531, 544, -1,531, 545, 542, -1,547, 545, 546, -1,546, 473, 547, -1, + 462, 546, 545, -1,545, 544, 462, -1,535, 536, 543, -1,550, 549, 548, -1,552, 550, + 551, -1,548, 551, 550, -1,551, 548, 553, -1,555, 551, 554, -1,551, 555, 552, -1,552, + 555, 556, -1,558, 557, 556, -1,560, 559, 558, -1,563, 562, 561, -1,559, 564, 562, -1, + 566, 565, 563, -1,558, 556, 560, -1,557, 552, 556, -1,555, 567, 556, -1,564, 560, + 219, -1,554, 551, 553, -1,555, 554, 567, -1,560, 564, 559, -1,568, 556, 567, -1,568, + 219, 560, -1,568, 560, 556, -1,564, 219, 569, -1,561, 566, 563, -1,566, 561, 570, -1, + 572, 566, 571, -1,566, 572, 565, -1,569, 570, 561, -1,571, 573, 572, -1,570, 571, + 566, -1,561, 564, 569, -1,564, 561, 562, -1,574, 565, 572, -1,576, 574, 575, -1,572, + 575, 574, -1,575, 572, 573, -1,578, 575, 577, -1,575, 578, 576, -1,576, 578, 579, -1, + 581, 580, 579, -1,583, 582, 581, -1,586, 585, 584, -1,582, 587, 585, -1,588, 549, + 586, -1,581, 579, 583, -1,580, 576, 579, -1,578, 589, 579, -1,587, 583, 590, -1,577, + 575, 573, -1,578, 577, 589, -1,583, 587, 582, -1,591, 579, 589, -1,591, 590, 583, -1, + 591, 583, 579, -1,587, 590, 592, -1,584, 588, 586, -1,588, 584, 593, -1,548, 588, + 594, -1,588, 548, 549, -1,592, 593, 584, -1,594, 553, 548, -1,593, 594, 588, -1,584, + 587, 592, -1,587, 584, 585, -1,597, 596, 595, -1,599, 597, 598, -1,595, 598, 597, -1, + 598, 595, 600, -1,602, 598, 601, -1,598, 602, 599, -1,599, 602, 603, -1,605, 604, + 603, -1,607, 606, 605, -1,610, 609, 608, -1,606, 611, 609, -1,613, 612, 610, -1,605, + 603, 607, -1,604, 599, 603, -1,602, 614, 603, -1,611, 607, 558, -1,601, 598, 600, -1, + 602, 601, 614, -1,607, 611, 606, -1,615, 603, 614, -1,615, 558, 607, -1,615, 607, + 603, -1,611, 558, 616, -1,608, 613, 610, -1,613, 608, 617, -1,619, 613, 618, -1,613, + 619, 612, -1,616, 617, 608, -1,618, 620, 619, -1,617, 618, 613, -1,608, 611, 616, -1, + 611, 608, 609, -1,621, 612, 619, -1,623, 621, 622, -1,619, 622, 621, -1,622, 619, + 620, -1,625, 622, 624, -1,622, 625, 623, -1,623, 625, 626, -1,628, 627, 626, -1,630, + 629, 628, -1,633, 632, 631, -1,629, 634, 632, -1,635, 596, 633, -1,628, 626, 630, -1, + 627, 623, 626, -1,625, 636, 626, -1,634, 630, 637, -1,624, 622, 620, -1,625, 624, + 636, -1,630, 634, 629, -1,638, 626, 636, -1,638, 637, 630, -1,638, 630, 626, -1,634, + 637, 639, -1,631, 635, 633, -1,635, 631, 640, -1,595, 635, 641, -1,635, 595, 596, -1, + 639, 640, 631, -1,641, 600, 595, -1,640, 641, 635, -1,631, 634, 639, -1,634, 631, + 632, -1,644, 643, 642, -1,646, 644, 645, -1,642, 645, 644, -1,645, 642, 647, -1,649, + 645, 648, -1,645, 649, 646, -1,646, 649, 650, -1,652, 651, 650, -1,654, 653, 652, -1, + 657, 656, 655, -1,653, 658, 656, -1,660, 659, 657, -1,652, 650, 654, -1,651, 646, + 650, -1,649, 661, 650, -1,658, 654, 662, -1,648, 645, 647, -1,649, 648, 661, -1,654, + 658, 653, -1,663, 650, 661, -1,663, 662, 654, -1,663, 654, 650, -1,658, 662, 664, -1, + 655, 660, 657, -1,660, 655, 665, -1,667, 660, 666, -1,660, 667, 659, -1,664, 665, + 655, -1,666, 668, 667, -1,665, 666, 660, -1,655, 658, 664, -1,658, 655, 656, -1,669, + 659, 667, -1,671, 669, 670, -1,667, 670, 669, -1,670, 667, 668, -1,673, 670, 672, -1, + 670, 673, 671, -1,671, 673, 674, -1,676, 675, 674, -1,678, 677, 676, -1,681, 680, + 679, -1,677, 682, 680, -1,683, 643, 681, -1,676, 674, 678, -1,675, 671, 674, -1,673, + 684, 674, -1,682, 678, 685, -1,672, 670, 668, -1,673, 672, 684, -1,678, 682, 677, -1, + 686, 674, 684, -1,686, 685, 678, -1,686, 678, 674, -1,682, 685, 687, -1,679, 683, + 681, -1,683, 679, 688, -1,642, 683, 689, -1,683, 642, 643, -1,687, 688, 679, -1,689, + 647, 642, -1,688, 689, 683, -1,679, 682, 687, -1,682, 679, 680, -1,692, 691, 690, -1, + 694, 692, 693, -1,690, 693, 692, -1,693, 690, 695, -1,697, 693, 696, -1,693, 697, + 694, -1,694, 697, 698, -1,700, 699, 698, -1,702, 701, 700, -1,705, 704, 703, -1,701, + 706, 704, -1,708, 707, 705, -1,700, 698, 702, -1,699, 694, 698, -1,697, 709, 698, -1, + 706, 702, 710, -1,696, 693, 695, -1,697, 696, 709, -1,702, 706, 701, -1,711, 698, + 709, -1,711, 710, 702, -1,711, 702, 698, -1,706, 710, 712, -1,703, 708, 705, -1,708, + 703, 713, -1,715, 708, 714, -1,708, 715, 707, -1,712, 713, 703, -1,714, 716, 715, -1, + 713, 714, 708, -1,703, 706, 712, -1,706, 703, 704, -1,717, 707, 715, -1,719, 717, + 718, -1,715, 718, 717, -1,718, 715, 716, -1,721, 718, 720, -1,718, 721, 719, -1,719, + 721, 722, -1,724, 723, 722, -1,726, 725, 724, -1,729, 728, 727, -1,725, 730, 728, -1, + 731, 691, 729, -1,724, 722, 726, -1,723, 719, 722, -1,721, 732, 722, -1,730, 726, + 733, -1,720, 718, 716, -1,721, 720, 732, -1,726, 730, 725, -1,734, 722, 732, -1,734, + 733, 726, -1,734, 726, 722, -1,730, 733, 735, -1,727, 731, 729, -1,731, 727, 736, -1, + 690, 731, 737, -1,731, 690, 691, -1,735, 736, 727, -1,737, 695, 690, -1,736, 737, + 731, -1,727, 730, 735, -1,730, 727, 728, -1,740, 739, 738, -1,740, 738, 741, -1,738, + 742, 741, -1,743, 740, 741, -1,745, 744, 741, -1,741, 746, 745, -1,738, 748, 747, -1, + 747, 749, 742, -1,742, 746, 741, -1,751, 742, 750, -1,745, 746, 752, -1,751, 753, + 746, -1,742, 751, 746, -1,738, 747, 742, -1,756, 755, 754, -1,758, 756, 757, -1,754, + 757, 756, -1,757, 754, 759, -1,761, 757, 760, -1,757, 761, 758, -1,758, 761, 762, -1, + 764, 763, 762, -1,766, 765, 764, -1,769, 768, 767, -1,765, 770, 768, -1,772, 771, + 769, -1,764, 762, 766, -1,763, 758, 762, -1,761, 773, 762, -1,770, 766, 774, -1,760, + 757, 759, -1,761, 760, 773, -1,766, 770, 765, -1,775, 762, 773, -1,775, 774, 766, -1, + 775, 766, 762, -1,770, 774, 776, -1,767, 772, 769, -1,772, 767, 777, -1,779, 772, + 778, -1,772, 779, 771, -1,776, 777, 767, -1,778, 780, 779, -1,777, 778, 772, -1,767, + 770, 776, -1,770, 767, 768, -1,781, 771, 779, -1,783, 781, 782, -1,779, 782, 781, -1, + 782, 779, 780, -1,785, 782, 784, -1,782, 785, 783, -1,783, 785, 786, -1,788, 787, + 786, -1,790, 789, 788, -1,793, 792, 791, -1,789, 794, 792, -1,795, 755, 793, -1,788, + 786, 790, -1,787, 783, 786, -1,785, 796, 786, -1,794, 790, 246, -1,784, 782, 780, -1, + 785, 784, 796, -1,790, 794, 789, -1,244, 786, 796, -1,244, 246, 790, -1,244, 790, + 786, -1,794, 246, 797, -1,791, 795, 793, -1,795, 791, 798, -1,754, 795, 799, -1,795, + 754, 755, -1,797, 798, 791, -1,799, 759, 754, -1,798, 799, 795, -1,791, 794, 797, -1, + 794, 791, 792, -1,802, 801, 800, -1,623, 802, 803, -1,800, 803, 802, -1,803, 800, + 804, -1,625, 803, 805, -1,803, 625, 623, -1,623, 625, 806, -1,808, 807, 806, -1,810, + 809, 808, -1,813, 812, 811, -1,809, 814, 812, -1,816, 815, 813, -1,808, 806, 810, -1, + 807, 623, 806, -1,625, 817, 806, -1,814, 810, 818, -1,805, 803, 804, -1,625, 805, + 817, -1,810, 814, 809, -1,819, 806, 817, -1,819, 818, 810, -1,819, 810, 806, -1,814, + 818, 820, -1,811, 816, 813, -1,816, 811, 821, -1,823, 816, 822, -1,816, 823, 815, -1, + 820, 821, 811, -1,822, 824, 823, -1,821, 822, 816, -1,811, 814, 820, -1,814, 811, + 812, -1,825, 815, 823, -1,827, 825, 826, -1,823, 826, 825, -1,826, 823, 824, -1,829, + 826, 828, -1,826, 829, 827, -1,827, 829, 830, -1,832, 831, 830, -1,834, 833, 832, -1, + 837, 836, 835, -1,833, 838, 836, -1,613, 801, 837, -1,832, 830, 834, -1,831, 827, + 830, -1,829, 839, 830, -1,838, 834, 788, -1,828, 826, 824, -1,829, 828, 839, -1,834, + 838, 833, -1,840, 830, 839, -1,840, 788, 834, -1,840, 834, 830, -1,838, 788, 841, -1, + 835, 613, 837, -1,613, 835, 842, -1,800, 613, 843, -1,613, 800, 801, -1,841, 842, + 835, -1,843, 804, 800, -1,842, 843, 613, -1,835, 838, 841, -1,838, 835, 836, -1,669, + 845, 844, -1,847, 669, 846, -1,844, 846, 669, -1,846, 844, 848, -1,673, 846, 849, -1, + 846, 673, 847, -1,847, 673, 850, -1,852, 851, 850, -1,854, 853, 852, -1,857, 856, + 855, -1,853, 858, 856, -1,860, 859, 857, -1,852, 850, 854, -1,851, 847, 850, -1,673, + 861, 850, -1,858, 854, 862, -1,849, 846, 848, -1,673, 849, 861, -1,854, 858, 853, -1, + 863, 850, 861, -1,863, 862, 854, -1,863, 854, 850, -1,858, 862, 864, -1,855, 860, + 857, -1,860, 855, 865, -1,867, 860, 866, -1,860, 867, 859, -1,864, 865, 855, -1,866, + 868, 867, -1,865, 866, 860, -1,855, 858, 864, -1,858, 855, 856, -1,869, 859, 867, -1, + 871, 869, 870, -1,867, 870, 869, -1,870, 867, 868, -1,873, 870, 872, -1,870, 873, + 871, -1,871, 873, 874, -1,876, 875, 874, -1,878, 877, 876, -1,880, 656, 879, -1,877, + 881, 656, -1,882, 845, 880, -1,876, 874, 878, -1,875, 871, 874, -1,873, 883, 874, -1, + 881, 878, 884, -1,872, 870, 868, -1,873, 872, 883, -1,878, 881, 877, -1,885, 874, + 883, -1,885, 884, 878, -1,885, 878, 874, -1,881, 884, 886, -1,879, 882, 880, -1,882, + 879, 887, -1,844, 882, 888, -1,882, 844, 845, -1,886, 887, 879, -1,888, 848, 844, -1, + 887, 888, 882, -1,879, 881, 886, -1,881, 879, 656, -1,891, 890, 889, -1,892, 891, + 718, -1,889, 718, 891, -1,718, 889, 893, -1,895, 718, 894, -1,718, 895, 892, -1,892, + 895, 896, -1,898, 897, 896, -1,900, 899, 898, -1,903, 902, 901, -1,899, 904, 902, -1, + 906, 905, 903, -1,898, 896, 900, -1,897, 892, 896, -1,895, 907, 896, -1,904, 900, + 908, -1,894, 718, 893, -1,895, 894, 907, -1,900, 904, 899, -1,909, 896, 907, -1,909, + 908, 900, -1,909, 900, 896, -1,904, 908, 910, -1,901, 906, 903, -1,906, 901, 911, -1, + 913, 906, 912, -1,906, 913, 905, -1,910, 911, 901, -1,912, 914, 913, -1,911, 912, + 906, -1,901, 904, 910, -1,904, 901, 902, -1,915, 905, 913, -1,917, 915, 916, -1,913, + 916, 915, -1,916, 913, 914, -1,919, 916, 918, -1,916, 919, 917, -1,917, 919, 920, -1, + 922, 921, 920, -1,924, 923, 922, -1,705, 704, 703, -1,923, 925, 704, -1,708, 890, + 705, -1,922, 920, 924, -1,921, 917, 920, -1,919, 926, 920, -1,925, 924, 927, -1,918, + 916, 914, -1,919, 918, 926, -1,924, 925, 923, -1,928, 920, 926, -1,928, 927, 924, -1, + 928, 924, 920, -1,925, 927, 929, -1,703, 708, 705, -1,708, 703, 930, -1,889, 708, + 931, -1,708, 889, 890, -1,929, 930, 703, -1,931, 893, 889, -1,930, 931, 708, -1,703, + 925, 929, -1,925, 703, 704, -1,933, 739, 932, -1,933, 932, 934, -1,932, 935, 934, -1, + 936, 933, 934, -1,938, 937, 934, -1,934, 939, 938, -1,932, 941, 940, -1,940, 942, + 935, -1,935, 939, 934, -1,944, 935, 943, -1,938, 939, 945, -1,944, 946, 939, -1,935, + 944, 939, -1,932, 940, 935, -1,949, 948, 947, -1,951, 949, 950, -1,947, 950, 949, -1, + 950, 947, 952, -1,954, 950, 953, -1,950, 954, 951, -1,951, 954, 955, -1,957, 956, + 955, -1,959, 958, 957, -1,962, 961, 960, -1,958, 963, 961, -1,965, 964, 962, -1,957, + 955, 959, -1,956, 951, 955, -1,954, 966, 955, -1,963, 959, 967, -1,953, 950, 952, -1, + 954, 953, 966, -1,959, 963, 958, -1,968, 955, 966, -1,968, 967, 959, -1,968, 959, + 955, -1,963, 967, 969, -1,960, 965, 962, -1,965, 960, 970, -1,972, 965, 971, -1,965, + 972, 964, -1,969, 970, 960, -1,971, 973, 972, -1,970, 971, 965, -1,960, 963, 969, -1, + 963, 960, 961, -1,974, 964, 972, -1,976, 974, 975, -1,972, 975, 974, -1,975, 972, + 973, -1,978, 975, 977, -1,975, 978, 976, -1,976, 978, 979, -1,981, 980, 979, -1,983, + 982, 981, -1,986, 985, 984, -1,982, 987, 985, -1,988, 948, 986, -1,981, 979, 983, -1, + 980, 976, 979, -1,978, 989, 979, -1,987, 983, 229, -1,977, 975, 973, -1,978, 977, + 989, -1,983, 987, 982, -1,990, 979, 989, -1,990, 229, 983, -1,990, 983, 979, -1,987, + 229, 991, -1,984, 988, 986, -1,988, 984, 992, -1,947, 988, 993, -1,988, 947, 948, -1, + 991, 992, 984, -1,993, 952, 947, -1,992, 993, 988, -1,984, 987, 991, -1,987, 984, + 985, -1,996, 995, 994, -1,998, 996, 997, -1,994, 997, 996, -1,997, 994, 999, -1,1001, + 997, 1000, -1,997, 1001, 998, -1,998, 1001, 1002, -1,1004, 1003, 1002, -1,1006, 1005, + 1004, -1,1009, 1008, 1007, -1,1005, 1010, 1008, -1,1012, 1011, 1009, -1,1004, 1002, + 1006, -1,1003, 998, 1002, -1,1001, 1013, 1002, -1,1010, 1006, 1014, -1,1000, 997, + 999, -1,1001, 1000, 1013, -1,1006, 1010, 1005, -1,1015, 1002, 1013, -1,1015, 1014, + 1006, -1,1015, 1006, 1002, -1,1010, 1014, 1016, -1,1007, 1012, 1009, -1,1012, 1007, + 1017, -1,1019, 1012, 1018, -1,1012, 1019, 1011, -1,1016, 1017, 1007, -1,1018, 1020, + 1019, -1,1017, 1018, 1012, -1,1007, 1010, 1016, -1,1010, 1007, 1008, -1,1021, 1011, + 1019, -1,1023, 1021, 1022, -1,1019, 1022, 1021, -1,1022, 1019, 1020, -1,1025, 1022, + 1024, -1,1022, 1025, 1023, -1,1023, 1025, 1026, -1,1028, 1027, 1026, -1,1030, 1029, + 1028, -1,1033, 1032, 1031, -1,1029, 1034, 1032, -1,1035, 995, 1033, -1,1028, 1026, + 1030, -1,1027, 1023, 1026, -1,1025, 1036, 1026, -1,1034, 1030, 981, -1,1024, 1022, + 1020, -1,1025, 1024, 1036, -1,1030, 1034, 1029, -1,1037, 1026, 1036, -1,1037, 981, + 1030, -1,1037, 1030, 1026, -1,1034, 981, 1038, -1,1031, 1035, 1033, -1,1035, 1031, + 1039, -1,994, 1035, 1040, -1,1035, 994, 995, -1,1038, 1039, 1031, -1,1040, 999, 994, -1, + 1039, 1040, 1035, -1,1031, 1034, 1038, -1,1034, 1031, 1032, -1,1043, 1042, 1041, -1, + 1045, 1043, 1044, -1,1041, 1044, 1043, -1,1044, 1041, 1046, -1,1048, 1044, 1047, -1, + 1044, 1048, 1045, -1,1045, 1048, 1049, -1,1051, 1050, 1049, -1,1053, 1052, 1051, -1, + 1056, 1055, 1054, -1,1052, 1057, 1055, -1,1059, 1058, 1056, -1,1051, 1049, 1053, -1, + 1050, 1045, 1049, -1,1048, 1060, 1049, -1,1057, 1053, 1061, -1,1047, 1044, 1046, -1, + 1048, 1047, 1060, -1,1053, 1057, 1052, -1,1062, 1049, 1060, -1,1062, 1061, 1053, -1, + 1062, 1053, 1049, -1,1057, 1061, 1063, -1,1054, 1059, 1056, -1,1059, 1054, 1064, -1, + 1066, 1059, 1065, -1,1059, 1066, 1058, -1,1063, 1064, 1054, -1,1065, 1067, 1066, -1, + 1064, 1065, 1059, -1,1054, 1057, 1063, -1,1057, 1054, 1055, -1,1068, 1058, 1066, -1, + 1070, 1068, 1069, -1,1066, 1069, 1068, -1,1069, 1066, 1067, -1,1072, 1069, 1071, -1, + 1069, 1072, 1070, -1,1070, 1072, 1073, -1,1075, 1074, 1073, -1,1077, 1076, 1075, -1, + 1080, 1079, 1078, -1,1076, 1081, 1079, -1,1082, 1042, 1080, -1,1075, 1073, 1077, -1, + 1074, 1070, 1073, -1,1072, 1083, 1073, -1,1081, 1077, 1084, -1,1071, 1069, 1067, -1, + 1072, 1071, 1083, -1,1077, 1081, 1076, -1,1085, 1073, 1083, -1,1085, 1084, 1077, -1, + 1085, 1077, 1073, -1,1081, 1084, 1086, -1,1078, 1082, 1080, -1,1082, 1078, 1087, -1, + 1041, 1082, 1088, -1,1082, 1041, 1042, -1,1086, 1087, 1078, -1,1088, 1046, 1041, -1, + 1087, 1088, 1082, -1,1078, 1081, 1086, -1,1081, 1078, 1079, -1,1091, 1090, 1089, -1, + 1093, 1091, 1092, -1,1089, 1092, 1091, -1,1092, 1089, 1094, -1,1096, 1092, 1095, -1, + 1092, 1096, 1093, -1,1093, 1096, 1097, -1,1099, 1098, 1097, -1,1101, 1100, 1099, -1, + 1104, 1103, 1102, -1,1100, 1105, 1103, -1,1107, 1106, 1104, -1,1099, 1097, 1101, -1, + 1098, 1093, 1097, -1,1096, 1108, 1097, -1,1105, 1101, 1109, -1,1095, 1092, 1094, -1, + 1096, 1095, 1108, -1,1101, 1105, 1100, -1,1110, 1097, 1108, -1,1110, 1109, 1101, -1, + 1110, 1101, 1097, -1,1105, 1109, 1111, -1,1102, 1107, 1104, -1,1107, 1102, 1112, -1, + 1114, 1107, 1113, -1,1107, 1114, 1106, -1,1111, 1112, 1102, -1,1113, 1115, 1114, -1, + 1112, 1113, 1107, -1,1102, 1105, 1111, -1,1105, 1102, 1103, -1,1116, 1106, 1114, -1, + 1118, 1116, 1117, -1,1114, 1117, 1116, -1,1117, 1114, 1115, -1,1120, 1117, 1119, -1, + 1117, 1120, 1118, -1,1118, 1120, 1121, -1,1123, 1122, 1121, -1,1125, 1124, 1123, -1, + 1128, 1127, 1126, -1,1124, 1129, 1127, -1,1130, 1090, 1128, -1,1123, 1121, 1125, -1, + 1122, 1118, 1121, -1,1120, 1131, 1121, -1,1129, 1125, 1132, -1,1119, 1117, 1115, -1, + 1120, 1119, 1131, -1,1125, 1129, 1124, -1,1133, 1121, 1131, -1,1133, 1132, 1125, -1, + 1133, 1125, 1121, -1,1129, 1132, 1134, -1,1126, 1130, 1128, -1,1130, 1126, 1135, -1, + 1089, 1130, 1136, -1,1130, 1089, 1090, -1,1134, 1135, 1126, -1,1136, 1094, 1089, -1, + 1135, 1136, 1130, -1,1126, 1129, 1134, -1,1129, 1126, 1127, -1,1139, 1138, 1137, -1, + 1141, 1140, 1137, -1,1143, 1142, 1137, -1,1144, 1139, 1142, -1,1142, 1139, 1137, -1, + 1142, 1146, 1145, -1,1143, 1137, 1140, -1,1143, 1147, 1142, -1,1149, 1148, 1143, -1, + 1147, 1143, 1148, -1,1150, 1146, 1147, -1,1146, 1142, 1147, -1,1148, 1151, 1147, -1, + 1143, 1140, 1152, -1,1155, 1154, 1153, -1,1154, 1155, 1156, -1,1153, 1154, 1157, -1, + 1155, 1153, 1158, -1,1161, 1160, 1159, -1,1158, 1162, 1159, -1,1162, 1158, 1153, -1, + 1161, 1159, 1162, -1,1153, 1163, 1162, -1,1156, 1164, 1157, -1,1165, 1157, 1164, -1, + 1157, 1163, 1153, -1,1162, 1166, 1161, -1,1162, 1163, 1166, -1,1166, 1167, 1161, -1, + 1154, 1156, 1157, -1,1170, 1169, 1168, -1,1170, 1168, 1171, -1,1174, 1173, 1172, -1, + 1169, 1173, 1174, -1,1174, 1168, 1169, -1,1175, 1174, 1172, -1,1171, 1176, 1170, -1, + 1176, 1171, 1177, -1,1179, 1178, 1177, -1,1176, 1177, 1178, -1,1182, 1181, 1180, -1, + 1184, 1183, 1182, -1,1180, 1183, 1175, -1,1172, 1185, 1175, -1,1183, 1183, 1183, -1, + 1180, 1187, 1186, -1,1189, 1186, 1188, -1,1187, 1188, 1186, -1,1180, 1185, 1187, -1, + 1192, 1191, 1190, -1,1192, 1190, 1189, -1,1194, 1193, 1191, -1,1189, 1188, 1192, -1, + 1182, 1180, 1184, -1,1180, 1175, 1185, -1,1195, 1193, 1194, -1,1196, 1195, 1194, -1, + 1198, 1197, 1196, -1,1196, 1197, 1195, -1,1190, 1191, 1193, -1,1183, 1184, 1183, -1, + 1201, 1200, 1199, -1,1202, 1201, 1199, -1,1179, 1200, 1203, -1,1205, 1199, 1204, -1, + 1204, 1200, 1179, -1,1204, 1199, 1200, -1,1204, 1206, 1205, -1,1207, 1205, 1206, -1, + 1206, 1208, 1207, -1,1209, 1208, 1206, -1,1211, 1209, 1210, -1,1210, 1212, 1211, -1, + 1211, 1208, 1209, -1,1213, 1212, 1210, -1,1215, 1197, 1214, -1,1218, 1217, 1216, -1, + 1215, 1216, 1217, -1,1216, 1215, 1219, -1,1219, 1214, 1220, -1,1220, 1221, 1219, -1, + 1219, 1215, 1214, -1,1198, 1214, 1197, -1,1223, 1213, 1222, -1,1213, 1223, 1224, -1, + 1224, 1212, 1213, -1,1225, 1223, 1222, -1,1218, 1226, 1217, -1,1227, 1217, 1226, -1, + 1227, 1226, 1225, -1,1225, 1222, 1227, -1,1203, 1178, 1179, -1,1230, 1229, 1228, -1, + 1229, 1230, 1231, -1,1233, 1228, 1232, -1,1232, 1228, 1229, -1,1233, 1232, 1234, -1, + 1237, 1236, 1235, -1,1239, 1235, 1238, -1,1237, 1231, 1236, -1,1239, 1237, 1235, -1, + 1236, 1231, 1230, -1,1233, 1241, 1240, -1,1233, 1234, 1241, -1,1240, 1243, 1242, -1, + 1243, 1240, 1241, -1,1242, 1243, 1244, -1,1247, 1246, 1245, -1,1244, 1247, 1248, -1, + 1247, 1245, 1248, -1,1245, 1246, 1249, -1,1244, 1248, 1242, -1,1246, 1250, 1249, -1, + 1251, 1239, 1238, -1,1251, 1253, 1252, -1,1253, 1251, 1238, -1,1256, 1255, 1254, -1, + 1252, 1253, 1257, -1,1259, 1257, 1258, -1,1257, 1259, 1252, -1,1258, 1257, 1254, -1, + 1261, 1260, 1254, -1,1254, 1260, 1258, -1,1261, 1254, 1255, -1,1256, 1254, 1262, -1, + 1262, 1254, 1263, -1,1250, 1265, 1264, -1,1266, 1264, 1265, -1,1250, 1264, 1249, -1, + 1263, 1254, 1267, -1,1267, 1254, 1268, -1,1270, 1254, 1269, -1,1270, 1271, 1254, -1, + 1269, 1266, 1265, -1,1254, 1271, 1268, -1,1269, 1254, 1266, -1,1274, 1273, 1272, -1, + 1276, 1274, 1275, -1,1272, 1275, 1274, -1,1275, 1272, 1277, -1,1279, 1275, 1278, -1, + 1275, 1279, 1276, -1,1276, 1279, 1280, -1,1282, 1281, 1280, -1,1284, 1283, 1282, -1, + 1287, 1286, 1285, -1,1283, 1288, 1286, -1,1290, 1289, 1287, -1,1282, 1280, 1284, -1, + 1281, 1276, 1280, -1,1279, 1291, 1280, -1,1288, 1284, 1292, -1,1278, 1275, 1277, -1, + 1279, 1278, 1291, -1,1284, 1288, 1283, -1,1293, 1280, 1291, -1,1293, 1292, 1284, -1, + 1293, 1284, 1280, -1,1288, 1292, 1294, -1,1285, 1290, 1287, -1,1290, 1285, 1295, -1, + 1297, 1290, 1296, -1,1290, 1297, 1289, -1,1294, 1295, 1285, -1,1296, 1298, 1297, -1, + 1295, 1296, 1290, -1,1285, 1288, 1294, -1,1288, 1285, 1286, -1,1301, 1300, 1299, -1, + 1300, 1301, 1302, -1,1304, 1299, 1303, -1,1303, 1306, 1305, -1,1299, 1306, 1303, -1, + 1308, 1307, 1303, -1,1301, 1299, 1309, -1,1311, 1310, 1309, -1,1310, 1311, 1312, -1, + 1304, 1311, 1309, -1,1304, 1307, 1313, -1,1304, 1303, 1307, -1,1304, 1314, 1311, -1, + 1309, 1299, 1304, -1,1317, 1316, 1315, -1,1316, 1317, 1318, -1,1319, 1318, 1317, -1, + 1320, 1317, 1315, -1,1320, 1322, 1321, -1,1325, 1324, 1323, -1,1324, 1327, 1326, -1, + 1323, 1322, 1325, -1,1321, 1317, 1320, -1,1317, 1329, 1328, -1,1319, 1317, 1328, -1, + 1317, 1321, 1329, -1,1321, 1330, 1329, -1,1323, 1330, 1321, -1,1324, 1326, 1323, -1, + 1331, 1323, 1326, -1,1323, 1331, 1332, -1,1326, 1333, 1331, -1,1332, 1330, 1323, -1, + 1322, 1323, 1321, -1,1336, 1335, 1334, -1,1334, 1335, 1337, -1,1336, 1334, 1338, -1, + 1340, 1339, 1338, -1,1341, 1327, 1339, -1,1340, 1338, 1334, -1,1334, 1342, 1340, -1, + 1342, 1334, 1337, -1,1340, 1342, 1343, -1,1341, 1326, 1327, -1,1326, 1341, 1343, -1, + 1343, 1333, 1326, -1,1341, 1340, 1343, -1,1340, 1341, 1339, -1,1346, 1345, 1344, -1, + 1348, 1346, 1347, -1,1351, 1350, 1349, -1,1353, 1351, 1352, -1,1348, 1354, 1350, -1, + 1354, 1348, 1347, -1,1347, 1344, 1355, -1,1354, 1347, 1356, -1,1349, 1350, 1354, -1, + 1352, 1357, 1353, -1,1351, 1349, 1352, -1,1357, 1358, 1353, -1,1357, 1352, 1359, -1, + 1349, 1360, 1352, -1,1358, 1357, 1361, -1,1354, 1362, 1349, -1,1347, 1346, 1344, -1, + 1365, 1364, 1363, -1,1367, 1366, 1365, -1,1370, 1369, 1368, -1,1372, 1371, 1369, -1, + 1368, 1366, 1373, -1,1375, 1371, 1374, -1,1363, 1364, 1361, -1,1363, 1361, 1376, -1, + 1378, 1375, 1377, -1,1380, 1379, 1378, -1,1335, 1336, 1381, -1,1381, 1379, 1382, -1, + 1363, 1367, 1365, -1,1364, 1358, 1361, -1,1357, 1383, 1361, -1,1362, 1354, 1356, -1, + 1360, 1349, 1362, -1,1373, 1367, 1384, -1,1352, 1360, 1359, -1,1357, 1359, 1383, -1, + 1367, 1373, 1366, -1,1356, 1347, 1355, -1,1376, 1361, 1383, -1,1385, 1363, 1376, -1, + 1385, 1386, 1367, -1,1384, 1387, 1373, -1,1386, 1384, 1367, -1,1385, 1367, 1363, -1, + 1373, 1387, 1370, -1,1370, 1372, 1369, -1,1372, 1370, 1388, -1,1374, 1372, 1389, -1, + 1372, 1374, 1371, -1,1377, 1380, 1378, -1,1380, 1377, 1390, -1,1382, 1335, 1381, -1, + 1335, 1382, 1391, -1,1380, 1392, 1382, -1,1380, 1382, 1379, -1,1374, 1393, 1377, -1, + 1374, 1377, 1375, -1,1388, 1389, 1372, -1,1389, 1393, 1374, -1,1390, 1392, 1380, -1, + 1391, 1337, 1335, -1,1392, 1391, 1382, -1,1393, 1390, 1377, -1,1370, 1387, 1388, -1, + 1373, 1370, 1368, -1,1316, 1318, 1394, -1,1394, 1318, 1319, -1,1316, 1394, 1395, -1, + 1397, 1396, 1395, -1,1398, 1345, 1396, -1,1397, 1395, 1394, -1,1394, 1399, 1397, -1, + 1399, 1394, 1319, -1,1397, 1399, 1400, -1,1398, 1344, 1345, -1,1344, 1398, 1400, -1, + 1400, 1355, 1344, -1,1398, 1397, 1400, -1,1397, 1398, 1396, -1,1403, 1402, 1401, -1, + 1402, 1405, 1404, -1,1406, 1402, 1404, -1,1409, 1408, 1407, -1,1411, 1410, 1407, -1, + 1411, 1407, 1408, -1,1402, 1406, 1410, -1,1402, 1410, 1411, -1,1401, 1165, 1164, -1, + 1412, 1403, 1401, -1,1412, 1164, 1413, -1,1156, 1413, 1164, -1,1412, 1413, 1403, -1, + 1403, 1405, 1402, -1,1412, 1401, 1164, -1,1416, 1415, 1414, -1,1418, 1416, 1417, -1, + 1420, 1419, 1418, -1,1423, 1422, 1421, -1,1422, 1423, 1424, -1,1419, 1425, 1424, -1, + 1424, 1423, 408, -1,1423, 1426, 408, -1,1423, 1427, 1426, -1,1426, 1427, 407, -1, + 1422, 1428, 1421, -1,1420, 1418, 1417, -1,1425, 1420, 1429, -1,1414, 1420, 1417, -1, + 1429, 1420, 1414, -1,1422, 1424, 1425, -1,1425, 1430, 1422, -1,1430, 1425, 1429, -1, + 1422, 1430, 1431, -1,279, 1433, 1432, -1,1428, 1422, 1434, -1,1428, 1434, 1432, -1, + 1432, 1434, 258, -1,1432, 1433, 1428, -1,1422, 1431, 1434, -1,1425, 1419, 1420, -1, + 1437, 1436, 1435, -1,1439, 1437, 1438, -1,1435, 1438, 1437, -1,1438, 1435, 1440, -1, + 1442, 1438, 1441, -1,1438, 1442, 1439, -1,1439, 1442, 1443, -1,1445, 1444, 1443, -1, + 1447, 1446, 1445, -1,1450, 1449, 1448, -1,1446, 1451, 1449, -1,1453, 1452, 1450, -1, + 1445, 1443, 1447, -1,1444, 1439, 1443, -1,1442, 1454, 1443, -1,1451, 1447, 1455, -1, + 1441, 1438, 1440, -1,1442, 1441, 1454, -1,1447, 1451, 1446, -1,1456, 1443, 1454, -1, + 1456, 1455, 1447, -1,1456, 1447, 1443, -1,1451, 1455, 1457, -1,1448, 1453, 1450, -1, + 1453, 1448, 1458, -1,1460, 1453, 1459, -1,1453, 1460, 1452, -1,1457, 1458, 1448, -1, + 1459, 1461, 1460, -1,1458, 1459, 1453, -1,1448, 1451, 1457, -1,1451, 1448, 1449, -1, + 571, 1452, 1460, -1,1462, 571, 566, -1,1460, 566, 571, -1,566, 1460, 1461, -1,1464, + 566, 1463, -1,566, 1464, 1462, -1,1462, 1464, 1465, -1,213, 1466, 1465, -1,1468, + 1467, 213, -1,1471, 1470, 1469, -1,1467, 1472, 1470, -1,1473, 1436, 1471, -1,213, + 1465, 1468, -1,1466, 1462, 1465, -1,1464, 1474, 1465, -1,1472, 1468, 1475, -1,1463, + 566, 1461, -1,1464, 1463, 1474, -1,1468, 1472, 1467, -1,559, 1465, 1474, -1,559, + 1475, 1468, -1,559, 1468, 1465, -1,1472, 1475, 1476, -1,1469, 1473, 1471, -1,1473, + 1469, 1477, -1,1435, 1473, 1478, -1,1473, 1435, 1436, -1,1476, 1477, 1469, -1,1478, + 1440, 1435, -1,1477, 1478, 1473, -1,1469, 1472, 1476, -1,1472, 1469, 1470, -1,1481, + 1480, 1479, -1,1483, 1481, 1482, -1,1479, 1482, 1481, -1,1482, 1479, 1484, -1,1486, + 1482, 1485, -1,1482, 1486, 1483, -1,1483, 1486, 1487, -1,1489, 1488, 1487, -1,1491, + 1490, 1489, -1,1494, 1493, 1492, -1,1490, 1495, 1493, -1,1496, 804, 1494, -1,1489, + 1487, 1491, -1,1488, 1483, 1487, -1,1486, 1497, 1487, -1,1495, 1491, 1498, -1,1485, + 1482, 1484, -1,1486, 1485, 1497, -1,1491, 1495, 1490, -1,1499, 1487, 1497, -1,1499, + 1498, 1491, -1,1499, 1491, 1487, -1,1495, 1498, 1500, -1,1492, 1496, 1494, -1,1496, + 1492, 1501, -1,1503, 1496, 1502, -1,1496, 1503, 804, -1,1500, 1501, 1492, -1,1502, + 1504, 1503, -1,1501, 1502, 1496, -1,1492, 1495, 1500, -1,1495, 1492, 1493, -1,843, + 804, 1503, -1,1505, 843, 613, -1,1503, 613, 843, -1,613, 1503, 1504, -1,1506, 613, + 610, -1,613, 1506, 1505, -1,1505, 1506, 1507, -1,1475, 1508, 1507, -1,1510, 1509, + 1475, -1,1513, 1512, 1511, -1,1509, 1514, 1512, -1,1515, 1480, 1513, -1,1475, 1507, + 1510, -1,1508, 1505, 1507, -1,1506, 836, 1507, -1,1514, 1510, 1516, -1,610, 613, + 1504, -1,1506, 610, 836, -1,1510, 1514, 1509, -1,1517, 1507, 836, -1,1517, 1516, + 1510, -1,1517, 1510, 1507, -1,1514, 1516, 1518, -1,1511, 1515, 1513, -1,1515, 1511, + 1519, -1,1479, 1515, 1520, -1,1515, 1479, 1480, -1,1518, 1519, 1511, -1,1520, 1484, + 1479, -1,1519, 1520, 1515, -1,1511, 1514, 1518, -1,1514, 1511, 1512, -1,1523, 1522, + 1521, -1,1525, 1523, 1524, -1,1521, 1524, 1523, -1,1524, 1521, 1526, -1,1528, 1524, + 1527, -1,1524, 1528, 1525, -1,1525, 1528, 1529, -1,1531, 1530, 1529, -1,1532, 686, + 1531, -1,1535, 1534, 1533, -1,686, 1536, 1534, -1,1538, 1537, 1535, -1,1531, 1529, + 1532, -1,1530, 1525, 1529, -1,1528, 1539, 1529, -1,1536, 1532, 1540, -1,1527, 1524, + 1526, -1,1528, 1527, 1539, -1,1532, 1536, 686, -1,1541, 1529, 1539, -1,1541, 1540, + 1532, -1,1541, 1532, 1529, -1,1536, 1540, 1542, -1,1533, 1538, 1535, -1,1538, 1533, + 1543, -1,1545, 1538, 1544, -1,1538, 1545, 1537, -1,1542, 1543, 1533, -1,1544, 1546, + 1545, -1,1543, 1544, 1538, -1,1533, 1536, 1542, -1,1536, 1533, 1534, -1,1547, 1537, + 1545, -1,1549, 1547, 1548, -1,1545, 1548, 1547, -1,1548, 1545, 1546, -1,1551, 1548, + 1550, -1,1548, 1551, 1549, -1,1549, 1551, 1552, -1,1554, 1553, 1552, -1,1556, 1555, + 1554, -1,1559, 1558, 1557, -1,1555, 1560, 1558, -1,1561, 1522, 1559, -1,1554, 1552, + 1556, -1,1553, 1549, 1552, -1,1551, 1562, 1552, -1,1560, 1556, 1563, -1,1550, 1548, + 1546, -1,1551, 1550, 1562, -1,1556, 1560, 1555, -1,1564, 1552, 1562, -1,1564, 1563, + 1556, -1,1564, 1556, 1552, -1,1560, 1563, 1565, -1,1557, 1561, 1559, -1,1561, 1557, + 1566, -1,1521, 1561, 1567, -1,1561, 1521, 1522, -1,1565, 1566, 1557, -1,1567, 1526, + 1521, -1,1566, 1567, 1561, -1,1557, 1560, 1565, -1,1560, 1557, 1558, -1,1570, 1569, + 1568, -1,1572, 1570, 1571, -1,1568, 1571, 1570, -1,1571, 1568, 1573, -1,1575, 1571, + 1574, -1,1571, 1575, 1572, -1,1572, 1575, 1576, -1,1578, 1577, 1576, -1,1580, 1579, + 1578, -1,1583, 1582, 1581, -1,1579, 1584, 1582, -1,1586, 1585, 1583, -1,1578, 1576, + 1580, -1,1577, 1572, 1576, -1,1575, 1587, 1576, -1,1584, 1580, 1588, -1,1574, 1571, + 1573, -1,1575, 1574, 1587, -1,1580, 1584, 1579, -1,725, 1576, 1587, -1,725, 1588, + 1580, -1,725, 1580, 1576, -1,1584, 1588, 1589, -1,1581, 1586, 1583, -1,1586, 1581, + 1590, -1,1592, 1586, 1591, -1,1586, 1592, 1585, -1,1589, 1590, 1581, -1,1591, 1593, + 1592, -1,1590, 1591, 1586, -1,1581, 1584, 1589, -1,1584, 1581, 1582, -1,1594, 1585, + 1592, -1,1596, 1594, 1595, -1,1592, 1595, 1594, -1,1595, 1592, 1593, -1,1598, 1595, + 1597, -1,1595, 1598, 1596, -1,1596, 1598, 1599, -1,1601, 1600, 1599, -1,1603, 1602, + 1601, -1,1606, 1605, 1604, -1,1602, 1607, 1605, -1,1608, 1569, 1606, -1,1601, 1599, + 1603, -1,1600, 1596, 1599, -1,1598, 1609, 1599, -1,1607, 1603, 1610, -1,1597, 1595, + 1593, -1,1598, 1597, 1609, -1,1603, 1607, 1602, -1,1611, 1599, 1609, -1,1611, 1610, + 1603, -1,1611, 1603, 1599, -1,1607, 1610, 1612, -1,1604, 1608, 1606, -1,1608, 1604, + 1613, -1,1568, 1608, 1614, -1,1608, 1568, 1569, -1,1612, 1613, 1604, -1,1614, 1573, + 1568, -1,1613, 1614, 1608, -1,1604, 1607, 1612, -1,1607, 1604, 1605, -1,1617, 1616, + 1615, -1,1619, 1618, 1615, -1,1621, 1620, 1615, -1,1622, 1617, 1620, -1,1620, 1617, + 1615, -1,1620, 1624, 1623, -1,1621, 1615, 1618, -1,1621, 1625, 1620, -1,1627, 1626, + 1621, -1,1625, 1621, 1626, -1,752, 1624, 1625, -1,1624, 1620, 1625, -1,1626, 1628, + 1625, -1,1621, 1618, 1629, -1,971, 973, 1630, -1,1632, 971, 1631, -1,1630, 1631, + 971, -1,1631, 1630, 1633, -1,1635, 1631, 1634, -1,1631, 1635, 1632, -1,1632, 1635, + 1636, -1,1638, 1637, 1636, -1,1640, 1639, 1638, -1,1643, 1642, 1641, -1,1639, 1644, + 1642, -1,1646, 1645, 1643, -1,1638, 1636, 1640, -1,1637, 1632, 1636, -1,1635, 1647, + 1636, -1,1644, 1640, 1648, -1,1634, 1631, 1633, -1,1635, 1634, 1647, -1,1640, 1644, + 1639, -1,1649, 1636, 1647, -1,1649, 1648, 1640, -1,1649, 1640, 1636, -1,1644, 1648, + 1650, -1,1641, 1646, 1643, -1,1646, 1641, 1651, -1,1653, 1646, 1652, -1,1646, 1653, + 1645, -1,1650, 1651, 1641, -1,1652, 1654, 1653, -1,1651, 1652, 1646, -1,1641, 1644, + 1650, -1,1644, 1641, 1642, -1,1655, 1645, 1653, -1,1657, 1655, 1656, -1,1653, 1656, + 1655, -1,1656, 1653, 1654, -1,1659, 1656, 1658, -1,1656, 1659, 1657, -1,1657, 1659, + 1660, -1,1662, 1661, 1660, -1,1664, 1663, 1662, -1,1667, 1666, 1665, -1,1663, 1668, + 1666, -1,1669, 973, 1667, -1,1662, 1660, 1664, -1,1661, 1657, 1660, -1,1659, 1670, + 1660, -1,1668, 1664, 1671, -1,1658, 1656, 1654, -1,1659, 1658, 1670, -1,1664, 1668, + 1663, -1,1672, 1660, 1670, -1,1672, 1671, 1664, -1,1672, 1664, 1660, -1,1668, 1671, + 1673, -1,1665, 1669, 1667, -1,1669, 1665, 1674, -1,1630, 1669, 1675, -1,1669, 1630, + 973, -1,1673, 1674, 1665, -1,1675, 1633, 1630, -1,1674, 1675, 1669, -1,1665, 1668, + 1673, -1,1668, 1665, 1666, -1,1678, 1677, 1676, -1,1680, 1678, 1679, -1,1676, 1679, + 1678, -1,1679, 1676, 1681, -1,1683, 1679, 1682, -1,1679, 1683, 1680, -1,1680, 1683, + 1684, -1,1686, 1685, 1684, -1,1688, 1687, 1686, -1,1691, 1690, 1689, -1,1687, 1692, + 1690, -1,1694, 1693, 1691, -1,1686, 1684, 1688, -1,1685, 1680, 1684, -1,1683, 1695, + 1684, -1,1692, 1688, 1696, -1,1682, 1679, 1681, -1,1683, 1682, 1695, -1,1688, 1692, + 1687, -1,1697, 1684, 1695, -1,1697, 1696, 1688, -1,1697, 1688, 1684, -1,1692, 1696, + 1698, -1,1689, 1694, 1691, -1,1694, 1689, 1699, -1,1701, 1694, 1700, -1,1694, 1701, + 1693, -1,1698, 1699, 1689, -1,1700, 1702, 1701, -1,1699, 1700, 1694, -1,1689, 1692, + 1698, -1,1692, 1689, 1690, -1,1703, 1693, 1701, -1,1705, 1703, 1704, -1,1701, 1704, + 1703, -1,1704, 1701, 1702, -1,1707, 1704, 1706, -1,1704, 1707, 1705, -1,1705, 1707, + 1708, -1,1671, 1709, 1708, -1,1711, 1710, 1671, -1,1714, 1713, 1712, -1,1710, 1715, + 1713, -1,1716, 1677, 1714, -1,1671, 1708, 1711, -1,1709, 1705, 1708, -1,1707, 1717, + 1708, -1,1715, 1711, 1718, -1,1706, 1704, 1702, -1,1707, 1706, 1717, -1,1711, 1715, + 1710, -1,1719, 1708, 1717, -1,1719, 1718, 1711, -1,1719, 1711, 1708, -1,1715, 1718, + 1720, -1,1712, 1716, 1714, -1,1716, 1712, 1721, -1,1676, 1716, 1722, -1,1716, 1676, + 1677, -1,1720, 1721, 1712, -1,1722, 1681, 1676, -1,1721, 1722, 1716, -1,1712, 1715, + 1720, -1,1715, 1712, 1713, -1,1725, 1724, 1723, -1,1727, 1725, 1726, -1,1723, 1726, + 1725, -1,1726, 1723, 1728, -1,1730, 1726, 1729, -1,1726, 1730, 1727, -1,1727, 1730, + 1731, -1,1733, 1732, 1731, -1,1735, 1734, 1733, -1,1738, 1737, 1736, -1,1734, 1739, + 1737, -1,1741, 1740, 1738, -1,1733, 1731, 1735, -1,1732, 1727, 1731, -1,1730, 1742, + 1731, -1,1739, 1735, 1743, -1,1729, 1726, 1728, -1,1730, 1729, 1742, -1,1735, 1739, + 1734, -1,1744, 1731, 1742, -1,1744, 1743, 1735, -1,1744, 1735, 1731, -1,1739, 1743, + 1745, -1,1736, 1741, 1738, -1,1741, 1736, 1746, -1,1748, 1741, 1747, -1,1741, 1748, + 1740, -1,1745, 1746, 1736, -1,1747, 1749, 1748, -1,1746, 1747, 1741, -1,1736, 1739, + 1745, -1,1739, 1736, 1737, -1,1750, 1740, 1748, -1,1752, 1750, 1751, -1,1748, 1751, + 1750, -1,1751, 1748, 1749, -1,1754, 1751, 1753, -1,1751, 1754, 1752, -1,1752, 1754, + 1755, -1,1757, 1756, 1755, -1,1759, 1758, 1757, -1,1762, 1761, 1760, -1,1758, 1763, + 1761, -1,1764, 1724, 1762, -1,1757, 1755, 1759, -1,1756, 1752, 1755, -1,1754, 1765, + 1755, -1,1763, 1759, 1766, -1,1753, 1751, 1749, -1,1754, 1753, 1765, -1,1759, 1763, + 1758, -1,1767, 1755, 1765, -1,1767, 1766, 1759, -1,1767, 1759, 1755, -1,1763, 1766, + 1768, -1,1760, 1764, 1762, -1,1764, 1760, 1769, -1,1723, 1764, 1770, -1,1764, 1723, + 1724, -1,1768, 1769, 1760, -1,1770, 1728, 1723, -1,1769, 1770, 1764, -1,1760, 1763, + 1768, -1,1763, 1760, 1761, -1,1773, 1772, 1771, -1,1775, 1773, 1774, -1,1771, 1774, + 1773, -1,1774, 1771, 1776, -1,1778, 1774, 1777, -1,1774, 1778, 1775, -1,1775, 1778, + 1779, -1,1781, 1780, 1779, -1,1783, 1782, 1781, -1,1786, 1785, 1784, -1,1782, 1787, + 1785, -1,1789, 1788, 1786, -1,1781, 1779, 1783, -1,1780, 1775, 1779, -1,1778, 1790, + 1779, -1,1787, 1783, 1791, -1,1777, 1774, 1776, -1,1778, 1777, 1790, -1,1783, 1787, + 1782, -1,1792, 1779, 1790, -1,1792, 1791, 1783, -1,1792, 1783, 1779, -1,1787, 1791, + 1793, -1,1784, 1789, 1786, -1,1789, 1784, 1794, -1,1796, 1789, 1795, -1,1789, 1796, + 1788, -1,1793, 1794, 1784, -1,1795, 1797, 1796, -1,1794, 1795, 1789, -1,1784, 1787, + 1793, -1,1787, 1784, 1785, -1,1798, 1788, 1796, -1,1800, 1798, 1799, -1,1796, 1799, + 1798, -1,1799, 1796, 1797, -1,1802, 1799, 1801, -1,1799, 1802, 1800, -1,1800, 1802, + 1803, -1,1805, 1804, 1803, -1,1806, 1133, 1805, -1,1809, 1808, 1807, -1,1133, 1810, + 1808, -1,1811, 1772, 1809, -1,1805, 1803, 1806, -1,1804, 1800, 1803, -1,1802, 1812, + 1803, -1,1810, 1806, 1813, -1,1801, 1799, 1797, -1,1802, 1801, 1812, -1,1806, 1810, + 1133, -1,1814, 1803, 1812, -1,1814, 1813, 1806, -1,1814, 1806, 1803, -1,1810, 1813, + 1815, -1,1807, 1811, 1809, -1,1811, 1807, 1816, -1,1771, 1811, 1817, -1,1811, 1771, + 1772, -1,1815, 1816, 1807, -1,1817, 1776, 1771, -1,1816, 1817, 1811, -1,1807, 1810, + 1815, -1,1810, 1807, 1808, -1,1820, 1819, 1818, -1,1820, 1818, 1821, -1,1818, 1822, + 1821, -1,1823, 1820, 1821, -1,1825, 1824, 1821, -1,1821, 1826, 1825, -1,1818, 1828, + 1827, -1,1827, 1829, 1822, -1,1822, 1826, 1821, -1,1831, 1822, 1830, -1,1825, 1826, + 1832, -1,1831, 1833, 1826, -1,1822, 1831, 1826, -1,1818, 1827, 1822, -1,1836, 1835, + 1834, -1,1835, 1837, 1834, -1,1839, 1838, 1834, -1,1161, 1167, 1840, -1,1840, 1838, + 1841, -1,1837, 1839, 1834, -1,1839, 1842, 1838, -1,1842, 1839, 1843, -1,1843, 1844, + 1842, -1,1839, 1837, 1843, -1,1842, 1844, 1841, -1,1841, 1161, 1840, -1,1161, 1841, + 1845, -1,1845, 1160, 1161, -1,1841, 1844, 1845, -1,1842, 1841, 1838, -1,1846, 1277, + 1272, -1,1848, 1846, 1847, -1,1272, 1847, 1846, -1,1847, 1272, 1273, -1,1850, 1847, + 1849, -1,1847, 1850, 1848, -1,1848, 1850, 1851, -1,1853, 1852, 1851, -1,1855, 1854, + 1853, -1,1858, 1857, 1856, -1,1854, 1859, 1857, -1,1860, 1298, 1858, -1,1853, 1851, + 1855, -1,1852, 1848, 1851, -1,1850, 1861, 1851, -1,1859, 1855, 1862, -1,1849, 1847, + 1273, -1,1850, 1849, 1861, -1,1855, 1859, 1854, -1,1863, 1851, 1861, -1,1863, 1862, + 1855, -1,1863, 1855, 1851, -1,1859, 1862, 1864, -1,1856, 1860, 1858, -1,1860, 1856, + 1865, -1,1297, 1860, 1866, -1,1860, 1297, 1298, -1,1864, 1865, 1856, -1,1866, 1289, + 1297, -1,1865, 1866, 1860, -1,1856, 1859, 1864, -1,1859, 1856, 1857, -1,1837, 1835, + 1867, -1,1867, 1835, 1868, -1,1869, 1867, 1868, -1,1869, 1868, 1870, -1,1868, 1835, + 1870, -1,1870, 1871, 1869, -1,1870, 1835, 1836, -1,1871, 1872, 1869, -1,1871, 1874, + 1873, -1,1877, 1876, 1875, -1,1875, 1876, 1878, -1,1871, 1876, 1877, -1,1871, 1877, + 1874, -1,1873, 1872, 1871, -1,1878, 1879, 1875, -1,1882, 1881, 1880, -1,1881, 1882, + 1883, -1,1885, 1880, 1884, -1,1880, 1885, 1882, -1,1885, 1884, 1886, -1,1881, 1887, + 1884, -1,1887, 1883, 1888, -1,1883, 1887, 1881, -1,1890, 1889, 1886, -1,1890, 1886, + 1884, -1,1887, 1890, 1884, -1,1891, 1891, 1891, -1,1891, 1891, 1891, -1,1893, 1892, + 1892, -1,1894, 1892, 1892, -1,1895, 1895, 1895, -1,1895, 1895, 1895, -1,1897, 1897, + 1896, -1,1897, 1897, 1898, -1,1899, 1899, 1899, -1,1899, 1899, 1899, -1,1900, 1901, + 1900, -1,1900, 1902, 1900, -1,1903, 1903, 1903, -1,1903, 1903, 1903, -1,1905, 1905, + 1904, -1,1905, 1905, 1906, -1,1907, 1907, 1907, -1,1907, 1907, 1907, -1,1909, 1908, + 1908, -1,1910, 1908, 1908, -1,1911, 1912, 1911, -1,1911, 1913, 1911, -1,1916, 1915, + 1914, -1,1915, 1918, 1917, -1,1916, 1918, 1915, -1,1914, 1920, 1919, -1,1923, 1922, + 1921, -1,1916, 1914, 1919, -1,1919, 1920, 1923, -1,1920, 1922, 1923, -1,1926, 1925, + 1924, -1,1917, 1925, 1915, -1,1926, 1928, 1927, -1,1930, 1927, 1929, -1,1931, 1931, + 1931, -1,1917, 1924, 1925, -1,1934, 1933, 1932, -1,1929, 1927, 1928, -1,1930, 1936, + 1935, -1,1930, 1929, 1936, -1,1935, 1936, 1937, -1,1928, 1926, 1924, -1,1921, 1922, + 1938, -1,1941, 1940, 1939, -1,1940, 1932, 1933, -1,1941, 1932, 1940, -1,1939, 1943, + 1942, -1,1944, 1931, 1942, -1,1941, 1939, 1945, -1,1945, 1939, 1942, -1,1931, 1931, + 1931, -1,1943, 1944, 1942, -1,1931, 1931, 1942, -1,1948, 1947, 1946, -1,1937, 1948, + 1949, -1,1948, 1937, 1947, -1,1937, 1949, 1935, -1,1947, 1950, 1946, -1,1934, 1946, + 1950, -1,1933, 1934, 1951, -1,1934, 1950, 1951, -1,1954, 1953, 1952, -1,1953, 1953, + 1954, -1,1957, 1956, 1955, -1,1959, 1956, 1958, -1,1958, 1956, 1960, -1,1953, 1954, + 1953, -1,1960, 1961, 1958, -1,1954, 1953, 1961, -1,1962, 1961, 1960, -1,1955, 1963, + 1957, -1,1964, 1957, 1963, -1,1957, 1964, 1962, -1,1962, 1960, 1957, -1,1956, 1957, + 1960, -1,1965, 1965, 1965, -1,1965, 1965, 1965, -1,1967, 1966, 1966, -1,1968, 1966, + 1966, -1,1895, 1895, 1895, -1,1895, 1895, 1895, -1,1971, 1970, 1969, -1,1969, 1971, + 1971, -1,1969, 1973, 1972, -1,1972, 1973, 1974, -1,1977, 1976, 1975, -1,1974, 1976, + 1972, -1,1978, 1976, 1974, -1,1973, 1970, 1974, -1,1974, 1979, 1978, -1,1979, 1974, + 1970, -1,1978, 1979, 1980, -1,1975, 1981, 1977, -1,1981, 1975, 1982, -1,1980, 1982, + 1975, -1,1975, 1978, 1980, -1,1978, 1975, 1976, -1,1982, 1984, 1983, -1,1983, 1977, + 1982, -1,1987, 1986, 1985, -1,1989, 1985, 1988, -1,1985, 1989, 1987, -1,1990, 1987, + 1989, -1,1992, 1989, 1991, -1,1988, 1991, 1989, -1,1993, 1991, 1988, -1,1993, 1995, + 1994, -1,1994, 1997, 1996, -1,2000, 1999, 1998, -1,1999, 2001, 1997, -1,1998, 1983, + 2002, -1,1996, 1993, 1994, -1,1993, 1988, 1995, -1,1993, 2003, 1991, -1,2004, 1996, + 2001, -1,1990, 1989, 1992, -1,2003, 1992, 1991, -1,1997, 2001, 1996, -1,2003, 1993, + 2005, -1,1996, 2004, 2005, -1,1993, 1996, 2005, -1,2006, 2004, 2001, -1,1998, 2002, + 2000, -1,2007, 2000, 2002, -1,2009, 2002, 2008, -1,1983, 2008, 2002, -1,2000, 2007, + 2006, -1,2008, 1984, 2009, -1,2002, 2009, 2007, -1,2006, 2001, 2000, -1,1999, 2000, + 2001, -1,1990, 2010, 1986, -1,2011, 1986, 2010, -1,2014, 2013, 2012, -1,2015, 2013, + 2014, -1,2018, 2017, 2016, -1,2018, 2016, 2015, -1,2011, 2019, 2017, -1,2015, 2014, + 2018, -1,2015, 2020, 2013, -1,2016, 2021, 2015, -1,2020, 2015, 2021, -1,2016, 2022, + 2021, -1,2023, 2022, 2016, -1,2011, 2024, 2019, -1,2023, 2019, 2024, -1,2024, 2010, + 2023, -1,2023, 2016, 2019, -1,2017, 2019, 2016, -1,2025, 2025, 2025, -1,2025, 2025, + 2025, -1,2028, 2027, 2026, -1,2026, 2027, 2029, -1,2032, 2031, 2030, -1,2029, 2032, + 2030, -1,2031, 2034, 2033, -1,2030, 2026, 2029, -1,2027, 2035, 2029, -1,2029, 2036, + 2032, -1,2036, 2029, 2035, -1,2036, 2037, 2032, -1,2032, 2037, 2038, -1,2034, 2039, + 2033, -1,2039, 2034, 2038, -1,2038, 2040, 2039, -1,2034, 2032, 2038, -1,2032, 2034, + 2031, -1,2042, 2040, 2041, -1,2040, 2042, 2033, -1,2044, 2042, 2043, -1,2046, 2044, + 2045, -1,2043, 2045, 2044, -1,2045, 2043, 2041, -1,2048, 2045, 2047, -1,2045, 2048, + 2046, -1,2046, 2048, 2049, -1,2051, 2050, 2049, -1,2053, 2052, 2051, -1,2056, 2055, + 2054, -1,2052, 2057, 2055, -1,2059, 2058, 2056, -1,2051, 2049, 2053, -1,2050, 2046, + 2049, -1,2048, 2060, 2049, -1,2057, 2053, 2061, -1,2047, 2045, 2041, -1,2048, 2047, + 2060, -1,2053, 2057, 2052, -1,2062, 2049, 2060, -1,2062, 2061, 2053, -1,2062, 2053, + 2049, -1,2057, 2061, 2063, -1,2054, 2059, 2056, -1,2059, 2054, 2064, -1,2066, 2059, + 2065, -1,2059, 2066, 2058, -1,2063, 2064, 2054, -1,2065, 2067, 2066, -1,2064, 2065, + 2059, -1,2054, 2057, 2063, -1,2057, 2054, 2055, -1,2058, 2067, 1964, -1,1964, 1955, + 2058, -1,1888, 2069, 2068, -1,2071, 1888, 2070, -1,2069, 2072, 2068, -1,2072, 2074, + 2073, -1,2074, 2072, 2069, -1,2073, 2074, 2075, -1,2076, 2075, 2071, -1,2076, 2070, + 2072, -1,2075, 2076, 2073, -1,2076, 2071, 2070, -1,2072, 2070, 2068, -1,1895, 1895, + 1895, -1,1895, 1895, 1895, -1,2077, 2078, 2077, -1,2077, 2079, 2077, -1,2080, 2081, + 2080, -1,2080, 1891, 2080, -1,1893, 2082, 2082, -1,2083, 2082, 2082, -1,1895, 1895, + 1895, -1,1895, 1895, 1895, -1,2084, 2085, 2084, -1,2084, 2086, 2084, -1,2087, 2087, + 2087, -1,2087, 2087, 2087, -1,2089, 2088, 2088, -1,2090, 2088, 2088, -1,1907, 1907, + 1907, -1,1907, 1907, 1907, -1,2092, 2091, 2091, -1,2093, 2091, 2091, -1,2094, 2095, + 2094, -1,2094, 2094, 2094, -1,2098, 2097, 2096, -1,2098, 2100, 2099, -1,2100, 2098, + 2096, -1,2102, 2101, 2099, -1,2099, 2101, 2098, -1,2103, 2104, 2103, -1,2103, 2105, + 2103, -1,2106, 2107, 2106, -1,2106, 2108, 2106, -1,1895, 1895, 1895, -1,1895, 1895, + 1895, -1,2109, 2110, 2109, -1,2109, 2111, 2109, -1,1891, 1891, 1891, -1,1891, 1891, + 1891, -1,2112, 2113, 2112, -1,2112, 2114, 2112, -1,2115, 2116, 2115, -1,2115, 2117, + 2115, -1,2120, 2119, 2118, -1,2122, 2118, 2121, -1,2118, 2122, 2120, -1,2123, 2122, + 2121, -1,2123, 2121, 2124, -1,2119, 2120, 2125, -1,2127, 2127, 2126, -1,2129, 2128, + 2128, -1,2131, 2125, 2130, -1,2131, 2130, 2126, -1,2125, 2131, 2119, -1,2126, 2130, + 2132, -1,2124, 2133, 2123, -1,2133, 2124, 2134, -1,2133, 2134, 2135, -1,2137, 2135, + 2136, -1,2135, 2137, 2133, -1,2137, 2136, 2138, -1,2140, 2138, 2139, -1,2142, 2140, + 2141, -1,2141, 2143, 2142, -1,2143, 2132, 2130, -1,2132, 2143, 2141, -1,2141, 2140, + 2139, -1,2138, 2136, 2139, -1,2146, 2145, 2144, -1,2148, 2147, 2144, -1,2146, 2144, + 2147, -1,2149, 2150, 2149, -1,2150, 2149, 2151, -1,2154, 2153, 2152, -1,2156, 2154, + 2155, -1,2152, 2155, 2154, -1,2155, 2152, 2157, -1,2159, 2155, 2158, -1,2155, 2159, + 2156, -1,2156, 2159, 2160, -1,2162, 2161, 2160, -1,2164, 2163, 2162, -1,2167, 2166, + 2165, -1,2163, 2168, 2166, -1,2169, 2151, 2167, -1,2162, 2160, 2164, -1,2161, 2156, + 2160, -1,2159, 2170, 2160, -1,2168, 2164, 2171, -1,2158, 2155, 2157, -1,2159, 2158, + 2170, -1,2164, 2168, 2163, -1,2172, 2160, 2170, -1,2172, 2171, 2164, -1,2172, 2164, + 2160, -1,2168, 2171, 2173, -1,2165, 2169, 2167, -1,2169, 2165, 2174, -1,2176, 2169, + 2175, -1,2169, 2176, 2151, -1,2173, 2174, 2165, -1,2175, 2150, 2176, -1,2174, 2175, + 2169, -1,2165, 2168, 2173, -1,2168, 2165, 2166, -1,1907, 2157, 2153, -1,2153, 1907, + 1907, -1,2129, 2177, 2177, -1,2178, 2177, 2177, -1,2179, 2179, 2179, -1,2179, 2179, + 2179, -1,2180, 2181, 2180, -1,2180, 2182, 2180, -1,2183, 2184, 2183, -1,2185, 2183, + 2184, -1,2188, 2187, 2186, -1,2191, 2190, 2189, -1,2189, 2192, 2191, -1,2194, 2188, + 2193, -1,2195, 2191, 2192, -1,2188, 2186, 2193, -1,2196, 2192, 2189, -1,2198, 2196, + 2197, -1,2200, 2197, 2199, -1,2203, 2202, 2201, -1,2202, 2185, 2201, -1,2206, 2205, + 2204, -1,2206, 2207, 2199, -1,2196, 2198, 2192, -1,2208, 2198, 2200, -1,2194, 2193, + 2195, -1,2209, 2195, 2192, -1,2197, 2200, 2198, -1,2192, 2198, 2209, -1,2200, 2210, + 2208, -1,2198, 2208, 2209, -1,2211, 2210, 2200, -1,2206, 2204, 2207, -1,2211, 2207, + 2204, -1,2212, 2204, 2203, -1,2205, 2203, 2204, -1,2204, 2212, 2211, -1,2203, 2184, + 2213, -1,2203, 2213, 2212, -1,2211, 2200, 2207, -1,2201, 2184, 2203, -1,2199, 2207, + 2200, -1,2214, 2194, 2214, -1,2194, 2214, 2187, -1,2217, 2216, 2215, -1,2216, 2219, + 2218, -1,2217, 2219, 2216, -1,2215, 2221, 2220, -1,2224, 2223, 2222, -1,2217, 2215, + 2220, -1,2220, 2221, 2224, -1,2221, 2223, 2224, -1,2227, 2226, 2225, -1,2218, 2226, + 2216, -1,2227, 2229, 2228, -1,2231, 2228, 2230, -1,2232, 2232, 2232, -1,2218, 2225, + 2226, -1,2230, 2228, 2229, -1,2231, 2234, 2233, -1,2231, 2230, 2234, -1,2233, 2234, + 2235, -1,2229, 2227, 2225, -1,2222, 2223, 2236, -1,2239, 2238, 2237, -1,2238, 2241, + 2240, -1,2242, 2241, 2238, -1,2237, 2244, 2243, -1,2245, 2232, 2243, -1,2242, 2238, + 2239, -1,2239, 2237, 2243, -1,2232, 2232, 2232, -1,2244, 2245, 2243, -1,2232, 2232, + 2243, -1,2248, 2247, 2246, -1,2235, 2248, 2249, -1,2248, 2235, 2247, -1,2235, 2249, + 2233, -1,2247, 2250, 2246, -1,2251, 2246, 2250, -1,2253, 2252, 2240, -1,2253, 2240, + 2241, -1,2251, 2250, 2252, -1,2252, 2253, 2251, -1,2256, 2255, 2254, -1,2257, 2254, + 2255, -1,2259, 2258, 2254, -1,2260, 2258, 2259, -1,2263, 2262, 2261, -1,2264, 2262, + 2260, -1,2260, 2262, 2265, -1,2260, 2256, 2258, -1,2265, 2266, 2260, -1,2256, 2260, + 2266, -1,2267, 2266, 2265, -1,2261, 2268, 2263, -1,2267, 2263, 2268, -1,2268, 2269, + 2267, -1,2267, 2265, 2263, -1,2262, 2263, 2265, -1,2270, 2270, 2270, -1,2270, 2270, + 2270, -1,2145, 2145, 2145, -1,2145, 2145, 2145, -1,2271, 2272, 2271, -1,2271, 2273, + 2271, -1,2276, 2275, 2274, -1,2274, 2277, 2276, -1,2280, 2279, 2278, -1,2278, 2279, + 2281, -1,2276, 2283, 2282, -1,2281, 2283, 2278, -1,2284, 2283, 2281, -1,2279, 2285, + 2281, -1,2281, 2286, 2284, -1,2286, 2281, 2285, -1,2284, 2286, 2287, -1,2282, 2288, + 2276, -1,2288, 2282, 2287, -1,2287, 2275, 2288, -1,2282, 2284, 2287, -1,2284, 2282, + 2283, -1,2280, 2289, 2285, -1,2289, 2280, 2290, -1,2292, 2290, 2291, -1,2294, 2291, + 2293, -1,2291, 2294, 2292, -1,2289, 2292, 2294, -1,2296, 2294, 2295, -1,2293, 2295, + 2294, -1,2297, 2295, 2293, -1,2297, 2299, 2298, -1,2298, 2301, 2300, -1,2304, 2303, + 2302, -1,2303, 2305, 2301, -1,2302, 2307, 2306, -1,2300, 2297, 2298, -1,2297, 2293, + 2299, -1,2297, 2308, 2295, -1,2309, 2300, 2305, -1,2289, 2294, 2296, -1,2308, 2296, + 2295, -1,2301, 2305, 2300, -1,2308, 2297, 2310, -1,2300, 2309, 2310, -1,2297, 2300, + 2310, -1,2311, 2309, 2305, -1,2302, 2306, 2304, -1,2312, 2304, 2306, -1,2314, 2306, + 2313, -1,2307, 2313, 2306, -1,2304, 2312, 2311, -1,2313, 2315, 2314, -1,2306, 2314, + 2312, -1,2311, 2305, 2304, -1,2303, 2304, 2305, -1,2307, 2316, 2315, -1,2316, 2307, + 2317, -1,2319, 2318, 2317, -1,2320, 2318, 2319, -1,2323, 2322, 2321, -1,2323, 2321, + 2320, -1,2325, 2324, 2322, -1,2320, 2319, 2323, -1,2320, 2316, 2318, -1,2321, 2326, + 2320, -1,2316, 2320, 2326, -1,2321, 2327, 2326, -1,2328, 2327, 2321, -1,2325, 2329, + 2324, -1,2328, 2324, 2329, -1,2329, 2330, 2328, -1,2328, 2321, 2324, -1,2322, 2324, + 2321, -1,2331, 2331, 2331, -1,2331, 2331, 2331, -1,2334, 2333, 2332, -1,2332, 2333, + 2335, -1,2338, 2337, 2336, -1,2335, 2338, 2336, -1,2337, 2340, 2339, -1,2336, 2332, + 2335, -1,2333, 2341, 2335, -1,2335, 2342, 2338, -1,2342, 2335, 2341, -1,2342, 2343, + 2338, -1,2338, 2343, 2344, -1,2340, 2345, 2339, -1,2345, 2340, 2344, -1,2344, 2346, + 2345, -1,2340, 2338, 2344, -1,2338, 2340, 2337, -1,2347, 2341, 2334, -1,2334, 2348, + 2347, -1,2350, 2257, 2349, -1,2352, 2350, 2351, -1,2349, 2351, 2350, -1,2351, 2349, + 2255, -1,2354, 2351, 2353, -1,2351, 2354, 2352, -1,2352, 2354, 2355, -1,2357, 2356, + 2355, -1,2359, 2358, 2357, -1,2362, 2361, 2360, -1,2358, 2363, 2361, -1,2364, 2348, + 2362, -1,2357, 2355, 2359, -1,2356, 2352, 2355, -1,2354, 2365, 2355, -1,2363, 2359, + 2366, -1,2353, 2351, 2255, -1,2354, 2353, 2365, -1,2359, 2363, 2358, -1,2367, 2355, + 2365, -1,2367, 2366, 2359, -1,2367, 2359, 2355, -1,2363, 2366, 2368, -1,2360, 2364, + 2362, -1,2364, 2360, 2369, -1,2371, 2364, 2370, -1,2364, 2371, 2348, -1,2368, 2369, + 2360, -1,2370, 2347, 2371, -1,2369, 2370, 2364, -1,2360, 2363, 2368, -1,2363, 2360, + 2361, -1,2373, 2216, 2372, -1,2216, 2375, 2374, -1,2373, 2375, 2216, -1,2372, 2377, + 2376, -1,2380, 2379, 2378, -1,2373, 2372, 2376, -1,2376, 2377, 2380, -1,2377, 2379, + 2380, -1,2383, 2382, 2381, -1,2374, 2382, 2216, -1,2383, 2385, 2384, -1,2387, 2384, + 2386, -1,2232, 2232, 2232, -1,2374, 2381, 2382, -1,2390, 2389, 2388, -1,2386, 2384, + 2385, -1,2387, 2392, 2391, -1,2387, 2386, 2392, -1,2391, 2392, 2393, -1,2385, 2383, + 2381, -1,2378, 2379, 2236, -1,2396, 2395, 2394, -1,2395, 2388, 2389, -1,2396, 2388, + 2395, -1,2394, 2398, 2397, -1,2399, 2232, 2397, -1,2396, 2394, 2400, -1,2401, 2401, + 2401, -1,2232, 2232, 2232, -1,2398, 2399, 2397, -1,2232, 2232, 2397, -1,2404, 2403, + 2402, -1,2393, 2404, 2405, -1,2404, 2393, 2403, -1,2393, 2405, 2391, -1,2403, 2406, + 2402, -1,2390, 2402, 2406, -1,2389, 2390, 2407, -1,2390, 2406, 2407, -1,2410, 2409, + 2408, -1,2411, 2409, 2410, -1,2414, 2413, 2412, -1,2410, 2413, 2411, -1,2411, 2413, + 2415, -1,2411, 2416, 2409, -1,2415, 2417, 2411, -1,2416, 2411, 2417, -1,2418, 2417, + 2415, -1,2412, 2419, 2414, -1,2420, 2414, 2419, -1,2414, 2420, 2418, -1,2418, 2415, + 2414, -1,2413, 2414, 2415, -1,2270, 2270, 2270, -1,2270, 2270, 2270, -1,2145, 2145, + 2145, -1,2145, 2145, 2145, -1,2179, 2179, 2179, -1,2179, 2179, 2179, -1,1971, 2422, + 2421, -1,2421, 1971, 1971, -1,2421, 2424, 2423, -1,2423, 2424, 2425, -1,2428, 2427, + 2426, -1,2425, 2427, 2423, -1,2429, 2427, 2425, -1,2424, 2422, 2425, -1,2425, 2430, + 2429, -1,2430, 2425, 2422, -1,2429, 2430, 2431, -1,2426, 2432, 2428, -1,2432, 2426, + 2433, -1,2431, 2433, 2426, -1,2426, 2429, 2431, -1,2429, 2426, 2427, -1,2433, 2434, + 2428, -1,2435, 2428, 2434, -1,2438, 2437, 2436, -1,2440, 2436, 2439, -1,2436, 2440, + 2438, -1,2441, 2438, 2440, -1,2443, 2440, 2442, -1,2439, 2442, 2440, -1,2444, 2442, + 2439, -1,2444, 2446, 2445, -1,2445, 2448, 2447, -1,2451, 2450, 2449, -1,2450, 2452, + 2448, -1,2449, 2435, 2453, -1,2447, 2444, 2445, -1,2444, 2439, 2446, -1,2444, 2454, + 2442, -1,2455, 2447, 2452, -1,2441, 2440, 2443, -1,2454, 2443, 2442, -1,2448, 2452, + 2447, -1,2454, 2444, 2456, -1,2447, 2455, 2456, -1,2444, 2447, 2456, -1,2457, 2455, + 2452, -1,2449, 2453, 2451, -1,2458, 2451, 2453, -1,2460, 2453, 2459, -1,2435, 2459, + 2453, -1,2451, 2458, 2457, -1,2459, 2434, 2460, -1,2453, 2460, 2458, -1,2457, 2452, + 2451, -1,2450, 2451, 2452, -1,2441, 2461, 2316, -1,2316, 2437, 2441, -1,2464, 2463, + 2462, -1,2465, 2463, 2464, -1,2468, 2467, 2466, -1,2468, 2466, 2465, -1,2316, 2469, + 2467, -1,2465, 2464, 2468, -1,2465, 2470, 2463, -1,2466, 2471, 2465, -1,2470, 2465, + 2471, -1,2466, 2472, 2471, -1,2473, 2472, 2466, -1,2316, 2474, 2469, -1,2473, 2469, + 2474, -1,2474, 2461, 2473, -1,2473, 2466, 2469, -1,2467, 2469, 2466, -1,2331, 2331, + 2331, -1,2331, 2331, 2331, -1,2477, 2476, 2475, -1,2475, 2476, 2478, -1,2481, 2480, + 2479, -1,2478, 2481, 2479, -1,2480, 2483, 2482, -1,2479, 2475, 2478, -1,2476, 2484, + 2478, -1,2478, 2485, 2481, -1,2485, 2478, 2484, -1,2485, 2486, 2481, -1,2481, 2486, + 2487, -1,2483, 2488, 2482, -1,2488, 2483, 2487, -1,2487, 2489, 2488, -1,2483, 2481, + 2487, -1,2481, 2483, 2480, -1,2482, 2489, 2490, -1,2490, 2491, 2482, -1,2493, 2491, + 2492, -1,2495, 2493, 2494, -1,2492, 2494, 2493, -1,2494, 2492, 2490, -1,2497, 2494, + 2496, -1,2494, 2497, 2495, -1,2495, 2497, 2498, -1,2500, 2499, 2498, -1,2502, 2501, + 2500, -1,2505, 2504, 2503, -1,2501, 2506, 2504, -1,2508, 2507, 2505, -1,2500, 2498, + 2502, -1,2499, 2495, 2498, -1,2497, 2509, 2498, -1,2506, 2502, 2510, -1,2496, 2494, + 2490, -1,2497, 2496, 2509, -1,2502, 2506, 2501, -1,2511, 2498, 2509, -1,2511, 2510, + 2502, -1,2511, 2502, 2498, -1,2506, 2510, 2512, -1,2503, 2508, 2505, -1,2508, 2503, + 2513, -1,2515, 2508, 2514, -1,2508, 2515, 2507, -1,2512, 2513, 2503, -1,2514, 2516, + 2515, -1,2513, 2514, 2508, -1,2503, 2506, 2512, -1,2506, 2503, 2504, -1,2507, 2516, + 2420, -1,2420, 2412, 2507, -1,2519, 2518, 2517, -1,2518, 2519, 2520, -1,2522, 2517, + 2521, -1,2521, 2517, 2518, -1,2523, 2522, 2521, -1,2526, 2525, 2524, -1,2529, 2528, + 2527, -1,2527, 2525, 2530, -1,2519, 2531, 2520, -1,2533, 2523, 2532, -1,2534, 2533, + 2532, -1,2537, 2536, 2535, -1,2534, 2536, 2537, -1,2522, 2523, 2533, -1,2532, 2536, + 2534, -1,2540, 2539, 2538, -1,2539, 2540, 2528, -1,2538, 2535, 2540, -1,2539, 2528, + 2529, -1,2540, 2535, 2536, -1,2524, 2520, 2531, -1,2530, 2525, 2526, -1,2530, 2541, + 2529, -1,2530, 2529, 2527, -1,2544, 2543, 2542, -1,2543, 2544, 2531, -1,2546, 2542, + 2545, -1,2542, 2546, 2544, -1,2546, 2545, 2547, -1,2531, 2519, 2543, -1,2548, 2547, + 2545, -1,2551, 2550, 2549, -1,2552, 2529, 2541, -1,2552, 2551, 2549, -1,2550, 2553, + 2549, -1,2552, 2541, 2551, -1,2556, 2555, 2554, -1,2548, 2554, 2547, -1,2556, 2554, + 2548, -1,2557, 2553, 2550, -1,2557, 2555, 2556, -1,2557, 2550, 2555, -1,2526, 2524, + 2531, -1,2559, 2559, 2558, -1,2559, 2559, 2560, -1,2562, 2561, 1907, -1,1907, 1907, + 2562, -1,2565, 2564, 2563, -1,2567, 2565, 2566, -1,2563, 2566, 2565, -1,2566, 2563, + 2568, -1,2570, 2566, 2569, -1,2566, 2570, 2567, -1,2567, 2570, 2571, -1,2573, 2572, + 2571, -1,2575, 2574, 2573, -1,2578, 2577, 2576, -1,2574, 2579, 2577, -1,2580, 2562, + 2578, -1,2573, 2571, 2575, -1,2572, 2567, 2571, -1,2570, 2581, 2571, -1,2579, 2575, + 2582, -1,2569, 2566, 2568, -1,2570, 2569, 2581, -1,2575, 2579, 2574, -1,2583, 2571, + 2581, -1,2583, 2582, 2575, -1,2583, 2575, 2571, -1,2579, 2582, 2584, -1,2576, 2580, + 2578, -1,2580, 2576, 2585, -1,2587, 2580, 2586, -1,2580, 2587, 2562, -1,2584, 2585, + 2576, -1,2586, 2561, 2587, -1,2585, 2586, 2580, -1,2576, 2579, 2584, -1,2579, 2576, + 2577, -1,2590, 2589, 2588, -1,2592, 2590, 2591, -1,2588, 2591, 2590, -1,2591, 2588, + 2593, -1,2595, 2591, 2594, -1,2591, 2595, 2592, -1,2592, 2595, 2596, -1,2598, 2597, + 2596, -1,2600, 2599, 2598, -1,2603, 2602, 2601, -1,2599, 2604, 2602, -1,2606, 2605, + 2603, -1,2598, 2596, 2600, -1,2597, 2592, 2596, -1,2595, 2607, 2596, -1,2604, 2600, + 2608, -1,2594, 2591, 2593, -1,2595, 2594, 2607, -1,2600, 2604, 2599, -1,2609, 2596, + 2607, -1,2609, 2608, 2600, -1,2609, 2600, 2596, -1,2604, 2608, 2610, -1,2601, 2606, + 2603, -1,2606, 2601, 2611, -1,2613, 2606, 2612, -1,2606, 2613, 2605, -1,2610, 2611, + 2601, -1,2612, 2614, 2613, -1,2611, 2612, 2606, -1,2601, 2604, 2610, -1,2604, 2601, + 2602, -1,2179, 2593, 2589, -1,2589, 2179, 2179, -1,2615, 2145, 2615, -1,2615, 2616, + 2615, -1,2214, 2618, 2617, -1,2617, 2214, 2214, -1,2621, 2620, 2619, -1,2624, 2623, + 2622, -1,2619, 2624, 2621, -1,516, 2621, 2624, -1,518, 2624, 2625, -1,2622, 2625, + 2624, -1,2626, 2625, 2622, -1,2626, 2628, 2627, -1,2627, 2630, 2629, -1,2633, 2632, + 2631, -1,2632, 2634, 2630, -1,2636, 2617, 2635, -1,2629, 2626, 2627, -1,2626, 2622, + 2628, -1,2626, 2637, 2625, -1,2638, 2629, 2634, -1,516, 2624, 518, -1,517, 518, 2625, -1, + 2630, 2634, 2629, -1,2637, 2626, 2639, -1,2629, 2638, 2639, -1,2626, 2629, 2639, -1, + 2640, 2638, 2634, -1,2631, 2641, 2633, -1,2642, 2633, 2641, -1,2644, 2635, 2643, -1, + 2617, 2643, 2635, -1,2633, 2642, 2640, -1,2643, 2618, 2644, -1,2641, 2645, 2642, -1, + 2640, 2634, 2633, -1,2632, 2633, 2634, -1,2620, 516, 2646, -1,2646, 2646, 2620, -1, + 2145, 2145, 2145, -1,2145, 2145, 2145, -1,1895, 2648, 2647, -1,2647, 1895, 1895, -1, + 2651, 2650, 2649, -1,2653, 2649, 2652, -1,2649, 2653, 2651, -1,2654, 2651, 2653, -1, + 2656, 2653, 2655, -1,2652, 2655, 2653, -1,2657, 2655, 2652, -1,2657, 2659, 2658, -1, + 2658, 2661, 2660, -1,2664, 2663, 2662, -1,2663, 2665, 2661, -1,2662, 2647, 2666, -1, + 2660, 2657, 2658, -1,2657, 2652, 2659, -1,2657, 2667, 2655, -1,2668, 2660, 2665, -1, + 2654, 2653, 2656, -1,2667, 2656, 2655, -1,2661, 2665, 2660, -1,2667, 2657, 2669, -1, + 2660, 2668, 2669, -1,2657, 2660, 2669, -1,2670, 2668, 2665, -1,2662, 2666, 2664, -1, + 2671, 2664, 2666, -1,2673, 2666, 2672, -1,2647, 2672, 2666, -1,2664, 2671, 2670, -1, + 2672, 2648, 2673, -1,2666, 2673, 2671, -1,2670, 2665, 2664, -1,2663, 2664, 2665, -1, + 2650, 2654, 2270, -1,2270, 2270, 2650, -1,2676, 2675, 2674, -1,2676, 2678, 2677, -1, + 2678, 2676, 2674, -1,2677, 2678, 2679, -1,2675, 2680, 2674, -1,2682, 2681, 2680, -1, + 2681, 2683, 2680, -1,2683, 2681, 2684, -1,2683, 2684, 2685, -1,2682, 2680, 2675, -1, + 2542, 2687, 2686, -1,2542, 2689, 2688, -1,2689, 2542, 2686, -1,2688, 2689, 2690, -1, + 2687, 2679, 2686, -1,2679, 2687, 2677, -1,2693, 2692, 2691, -1,2694, 2690, 2692, -1, + 2691, 2685, 2695, -1,2688, 2690, 2696, -1,2684, 2695, 2685, -1,2699, 2698, 2697, -1, + 2699, 2700, 2695, -1,2700, 2699, 2697, -1,2695, 2700, 2701, -1,2698, 2702, 2697, -1, + 2702, 2704, 2703, -1,2706, 2703, 2705, -1,2705, 2703, 2704, -1,2706, 2705, 2707, -1, + 2702, 2703, 2697, -1,2694, 2692, 2693, -1,2708, 2690, 2694, -1,2693, 2691, 2701, -1, + 2711, 2710, 2709, -1,2711, 2706, 2707, -1,2709, 2710, 2712, -1,2713, 2712, 2696, -1, + 2712, 2713, 2709, -1,2713, 2696, 2708, -1,2710, 2711, 2707, -1,2708, 2696, 2690, -1, + 2695, 2701, 2691, -1,2714, 2715, 2714, -1,2714, 2716, 2714, -1,2719, 2718, 2717, -1, + 2719, 2721, 2720, -1,2722, 2720, 2721, -1,2718, 2719, 2720, -1,2725, 2724, 2723, -1, + 2727, 2725, 2726, -1,2723, 2726, 2725, -1,2726, 2723, 2728, -1,2729, 2726, 2569, -1, + 2726, 2729, 2727, -1,2727, 2729, 2730, -1,2732, 2731, 2730, -1,2734, 2733, 2732, -1, + 2737, 2736, 2735, -1,2733, 2738, 2736, -1,2739, 2721, 2737, -1,2732, 2730, 2734, -1, + 2731, 2727, 2730, -1,2729, 2740, 2730, -1,2738, 2734, 2741, -1,2569, 2726, 2728, -1, + 2729, 2569, 2740, -1,2734, 2738, 2733, -1,2742, 2730, 2740, -1,2742, 2741, 2734, -1, + 2742, 2734, 2730, -1,2738, 2741, 2743, -1,2735, 2739, 2737, -1,2739, 2735, 2744, -1, + 2746, 2739, 2745, -1,2739, 2746, 2721, -1,2743, 2744, 2735, -1,2745, 2722, 2746, -1, + 2744, 2745, 2739, -1,2735, 2738, 2743, -1,2738, 2735, 2736, -1,2749, 2748, 2747, -1, + 2750, 2749, 2591, -1,2747, 2591, 2749, -1,2591, 2747, 2751, -1,2752, 2591, 2594, -1, + 2591, 2752, 2750, -1,2750, 2752, 2753, -1,2755, 2754, 2753, -1,2757, 2756, 2755, -1, + 2760, 2759, 2758, -1,2756, 2761, 2759, -1,2763, 2762, 2760, -1,2755, 2753, 2757, -1, + 2754, 2750, 2753, -1,2752, 2764, 2753, -1,2761, 2757, 2765, -1,2594, 2591, 2751, -1, + 2752, 2594, 2764, -1,2757, 2761, 2756, -1,2766, 2753, 2764, -1,2766, 2765, 2757, -1, + 2766, 2757, 2753, -1,2761, 2765, 2767, -1,2758, 2763, 2760, -1,2763, 2758, 2768, -1, + 2770, 2763, 2769, -1,2763, 2770, 2762, -1,2767, 2768, 2758, -1,2769, 2771, 2770, -1, + 2768, 2769, 2763, -1,2758, 2761, 2767, -1,2761, 2758, 2759, -1,2774, 2773, 2772, -1, + 2775, 2748, 2772, -1,2748, 2775, 2751, -1,2775, 2772, 2773, -1,2145, 2145, 2145, -1, + 2145, 2145, 2145, -1,1895, 2777, 2776, -1,2776, 1895, 1895, -1,2780, 2779, 2778, -1, + 2782, 2778, 2781, -1,2778, 2782, 2780, -1,2783, 2780, 2782, -1,2785, 2782, 2784, -1, + 2781, 2784, 2782, -1,2786, 2784, 2781, -1,2786, 2787, 2658, -1,2658, 2788, 2660, -1, + 2791, 2790, 2789, -1,2790, 2792, 2788, -1,2789, 2776, 2793, -1,2660, 2786, 2658, -1, + 2786, 2781, 2787, -1,2786, 2794, 2784, -1,2668, 2660, 2792, -1,2783, 2782, 2785, -1, + 2794, 2785, 2784, -1,2788, 2792, 2660, -1,2794, 2786, 2795, -1,2660, 2668, 2795, -1, + 2786, 2660, 2795, -1,2796, 2668, 2792, -1,2789, 2793, 2791, -1,2797, 2791, 2793, -1, + 2799, 2793, 2798, -1,2776, 2798, 2793, -1,2791, 2797, 2796, -1,2798, 2777, 2799, -1, + 2793, 2799, 2797, -1,2796, 2792, 2791, -1,2790, 2791, 2792, -1,2270, 2783, 2270, -1, + 2783, 2270, 2779, -1,2801, 2800, 2214, -1,2214, 2214, 2801, -1,2615, 2145, 2615, -1, + 2615, 2616, 2615, -1,2646, 2802, 493, -1,493, 2646, 2646, -1,2804, 2801, 2803, -1, + 2807, 2806, 2805, -1,2805, 2808, 2807, -1,2800, 2804, 2809, -1,2810, 2807, 2808, -1, + 2804, 2803, 2809, -1,2811, 2808, 2805, -1,2813, 2811, 2812, -1,2815, 2812, 2814, -1, + 2817, 495, 2816, -1,495, 493, 2816, -1,494, 495, 2818, -1,2820, 2819, 2814, -1,2811, + 2813, 2808, -1,2821, 2813, 2815, -1,2800, 2809, 2822, -1,2823, 2810, 2808, -1,2812, + 2815, 2813, -1,2808, 2813, 2823, -1,2815, 2824, 2821, -1,2813, 2821, 2823, -1,2825, + 2824, 2815, -1,2820, 2818, 2819, -1,2825, 2819, 2818, -1,2827, 2818, 2826, -1,495, + 2826, 2818, -1,2818, 2827, 2825, -1,2817, 2802, 2828, -1,2826, 2829, 2827, -1,2825, + 2815, 2819, -1,2816, 2802, 2817, -1,2814, 2819, 2815, -1,2832, 2831, 2830, -1,2832, + 2834, 2833, -1,2834, 2832, 2830, -1,2836, 2835, 2833, -1,2833, 2835, 2832, -1,2837, + 2838, 2837, -1,2837, 2839, 2837, -1,2179, 2841, 2840, -1,2842, 2840, 2841, -1,2179, + 2841, 2179, -1,2840, 2842, 2843, -1,2845, 2845, 2844, -1,2845, 2845, 2846, -1,2848, + 2847, 1907, -1,2847, 2848, 2849, -1,1907, 2847, 1907, -1,2850, 2849, 2848, -1,2852, + 2851, 2851, -1,2853, 2851, 2851, -1,2855, 2854, 2854, -1,2856, 2854, 2854, -1,2857, + 2858, 2857, -1,2857, 2859, 2857, -1,2862, 2861, 2860, -1,2864, 2863, 2862, -1,2866, + 2862, 2865, -1,2868, 2860, 2867, -1,2862, 2860, 2865, -1,2864, 2870, 2869, -1,2871, + 2862, 2863, -1,2863, 2869, 2872, -1,2872, 2873, 2863, -1,2863, 2873, 2871, -1,2861, + 2867, 2860, -1,2862, 2871, 2861, -1,2867, 2874, 2868, -1,2867, 2861, 2871, -1,2871, + 2873, 2867, -1,2863, 2864, 2869, -1,2877, 2876, 2875, -1,2879, 2870, 2878, -1,2878, + 2875, 2880, -1,2881, 2875, 2876, -1,2881, 2882, 2875, -1,2884, 2883, 2881, -1,2882, + 2880, 2875, -1,2881, 2883, 2882, -1,2880, 2883, 2885, -1,2883, 2880, 2882, -1,2880, + 2879, 2878, -1,2869, 2879, 2872, -1,2869, 2870, 2879, -1,2885, 2872, 2879, -1,2879, + 2880, 2885, -1,2883, 2884, 2886, -1,2889, 2888, 2887, -1,2891, 2889, 2890, -1,2887, + 2890, 2889, -1,2890, 2887, 2892, -1,2894, 2890, 2893, -1,2890, 2894, 2891, -1,2891, + 2894, 2895, -1,2897, 2896, 2895, -1,2899, 2898, 2897, -1,2902, 2901, 2900, -1,2898, + 2903, 2901, -1,2905, 2904, 2902, -1,2897, 2895, 2899, -1,2896, 2891, 2895, -1,2894, + 2906, 2895, -1,2903, 2899, 2907, -1,2893, 2890, 2892, -1,2894, 2893, 2906, -1,2899, + 2903, 2898, -1,2908, 2895, 2906, -1,2908, 2907, 2899, -1,2908, 2899, 2895, -1,2903, + 2907, 2909, -1,2900, 2905, 2902, -1,2905, 2900, 2910, -1,2912, 2905, 2911, -1,2905, + 2912, 2904, -1,2909, 2910, 2900, -1,2911, 2913, 2912, -1,2910, 2911, 2905, -1,2900, + 2903, 2909, -1,2903, 2900, 2901, -1,2914, 2904, 2912, -1,2916, 2914, 2915, -1,2912, + 2915, 2914, -1,2915, 2912, 2913, -1,2918, 2915, 2917, -1,2915, 2918, 2916, -1,2916, + 2918, 2919, -1,2921, 2920, 2919, -1,2923, 2922, 2921, -1,2926, 2925, 2924, -1,2922, + 2927, 2925, -1,2928, 2888, 2926, -1,2921, 2919, 2923, -1,2920, 2916, 2919, -1,2918, + 2929, 2919, -1,2927, 2923, 2930, -1,2917, 2915, 2913, -1,2918, 2917, 2929, -1,2923, + 2927, 2922, -1,2931, 2919, 2929, -1,2931, 2930, 2923, -1,2931, 2923, 2919, -1,2927, + 2930, 2932, -1,2924, 2928, 2926, -1,2928, 2924, 2933, -1,2887, 2928, 2934, -1,2928, + 2887, 2888, -1,2932, 2933, 2924, -1,2934, 2892, 2887, -1,2933, 2934, 2928, -1,2924, + 2927, 2932, -1,2927, 2924, 2925, -1,2937, 2936, 2935, -1,2937, 2939, 2938, -1,2939, + 2937, 2935, -1,2939, 2935, 2940, -1,2942, 2938, 2941, -1,2944, 2943, 2942, -1,2946, + 2945, 2943, -1,2949, 2948, 2947, -1,2951, 2950, 2948, -1,2947, 2945, 2952, -1,2939, + 2941, 2938, -1,2941, 2944, 2942, -1,2944, 2941, 2940, -1,2946, 2944, 2940, -1,2944, + 2946, 2943, -1,2940, 2941, 2939, -1,2946, 2940, 2952, -1,2952, 2949, 2947, -1,2949, + 2952, 2940, -1,2951, 2949, 2940, -1,2949, 2951, 2948, -1,2951, 2940, 2953, -1,2951, + 2953, 2950, -1,2946, 2952, 2945, -1,2954, 2950, 2953, -1,2954, 2956, 2955, -1,2956, + 2954, 2953, -1,2956, 2953, 2940, -1,2958, 2955, 2957, -1,2960, 2959, 2958, -1,2962, + 2961, 2959, -1,2965, 2964, 2963, -1,2966, 2936, 2964, -1,2963, 2961, 2967, -1,2956, + 2957, 2955, -1,2957, 2960, 2958, -1,2960, 2957, 2940, -1,2962, 2960, 2940, -1,2960, + 2962, 2959, -1,2940, 2957, 2956, -1,2962, 2940, 2967, -1,2967, 2965, 2963, -1,2965, + 2967, 2940, -1,2966, 2965, 2940, -1,2965, 2966, 2964, -1,2966, 2940, 2935, -1,2966, + 2935, 2936, -1,2962, 2967, 2961, -1,2970, 2969, 2968, -1,2972, 2970, 2971, -1,2968, + 2971, 2970, -1,2971, 2968, 2973, -1,2975, 2971, 2974, -1,2971, 2975, 2972, -1,2972, + 2975, 2976, -1,2978, 2977, 2976, -1,2980, 2979, 2978, -1,2983, 2982, 2981, -1,2979, + 2984, 2982, -1,2986, 2985, 2983, -1,2978, 2976, 2980, -1,2977, 2972, 2976, -1,2975, + 2987, 2976, -1,2984, 2980, 2988, -1,2974, 2971, 2973, -1,2975, 2974, 2987, -1,2980, + 2984, 2979, -1,2989, 2976, 2987, -1,2989, 2988, 2980, -1,2989, 2980, 2976, -1,2984, + 2988, 2990, -1,2981, 2986, 2983, -1,2986, 2981, 2991, -1,2993, 2986, 2992, -1,2986, + 2993, 2985, -1,2990, 2991, 2981, -1,2992, 2994, 2993, -1,2991, 2992, 2986, -1,2981, + 2984, 2990, -1,2984, 2981, 2982, -1,2995, 2985, 2993, -1,2997, 2995, 2996, -1,2993, + 2996, 2995, -1,2996, 2993, 2994, -1,2999, 2996, 2998, -1,2996, 2999, 2997, -1,2997, + 2999, 3000, -1,3002, 3001, 3000, -1,3004, 3003, 3002, -1,3007, 3006, 3005, -1,3003, + 3008, 3006, -1,3009, 2969, 3007, -1,3002, 3000, 3004, -1,3001, 2997, 3000, -1,2999, + 3010, 3000, -1,3008, 3004, 3011, -1,2998, 2996, 2994, -1,2999, 2998, 3010, -1,3004, + 3008, 3003, -1,3012, 3000, 3010, -1,3012, 3011, 3004, -1,3012, 3004, 3000, -1,3008, + 3011, 3013, -1,3005, 3009, 3007, -1,3009, 3005, 3014, -1,2968, 3009, 3015, -1,3009, + 2968, 2969, -1,3013, 3014, 3005, -1,3015, 2973, 2968, -1,3014, 3015, 3009, -1,3005, + 3008, 3013, -1,3008, 3005, 3006, -1,3018, 3017, 3016, -1,3018, 3020, 3019, -1,3020, + 3018, 3016, -1,3020, 3016, 3021, -1,3023, 3019, 3022, -1,3025, 3024, 3023, -1,3027, + 3026, 3024, -1,3030, 3029, 3028, -1,3032, 3031, 3029, -1,3028, 3026, 3033, -1,3020, + 3022, 3019, -1,3022, 3025, 3023, -1,3025, 3022, 3021, -1,3027, 3025, 3021, -1,3025, + 3027, 3024, -1,3021, 3022, 3020, -1,3027, 3021, 3033, -1,3033, 3030, 3028, -1,3030, + 3033, 3021, -1,3032, 3030, 3021, -1,3030, 3032, 3029, -1,3032, 3021, 3034, -1,3032, + 3034, 3031, -1,3027, 3033, 3026, -1,3035, 3031, 3034, -1,3035, 3037, 3036, -1,3037, + 3035, 3034, -1,3037, 3034, 3021, -1,3039, 3036, 3038, -1,3041, 3040, 3039, -1,3043, + 3042, 3040, -1,3046, 3045, 3044, -1,3047, 3017, 3045, -1,3044, 3042, 3048, -1,3037, + 3038, 3036, -1,3038, 3041, 3039, -1,3041, 3038, 3021, -1,3043, 3041, 3021, -1,3041, + 3043, 3040, -1,3021, 3038, 3037, -1,3043, 3021, 3048, -1,3048, 3046, 3044, -1,3046, + 3048, 3021, -1,3047, 3046, 3021, -1,3046, 3047, 3045, -1,3047, 3021, 3016, -1,3047, + 3016, 3017, -1,3043, 3048, 3042, -1,3051, 3050, 3049, -1,3053, 3051, 3052, -1,3049, + 3052, 3051, -1,3052, 3049, 3054, -1,3056, 3052, 3055, -1,3052, 3056, 3053, -1,3053, + 3056, 3057, -1,3059, 3058, 3057, -1,3061, 3060, 3059, -1,3064, 3063, 3062, -1,3060, + 3065, 3063, -1,3067, 3066, 3064, -1,3059, 3057, 3061, -1,3058, 3053, 3057, -1,3056, + 3068, 3057, -1,3065, 3061, 3069, -1,3055, 3052, 3054, -1,3056, 3055, 3068, -1,3061, + 3065, 3060, -1,3070, 3057, 3068, -1,3070, 3069, 3061, -1,3070, 3061, 3057, -1,3065, + 3069, 3071, -1,3062, 3067, 3064, -1,3067, 3062, 3072, -1,3074, 3067, 3073, -1,3067, + 3074, 3066, -1,3071, 3072, 3062, -1,3073, 3075, 3074, -1,3072, 3073, 3067, -1,3062, + 3065, 3071, -1,3065, 3062, 3063, -1,3076, 3066, 3074, -1,3078, 3076, 3077, -1,3074, + 3077, 3076, -1,3077, 3074, 3075, -1,3080, 3077, 3079, -1,3077, 3080, 3078, -1,3078, + 3080, 3081, -1,3083, 3082, 3081, -1,3085, 3084, 3083, -1,3088, 3087, 3086, -1,3084, + 3089, 3087, -1,3090, 3050, 3088, -1,3083, 3081, 3085, -1,3082, 3078, 3081, -1,3080, + 3091, 3081, -1,3089, 3085, 3092, -1,3079, 3077, 3075, -1,3080, 3079, 3091, -1,3085, + 3089, 3084, -1,3093, 3081, 3091, -1,3093, 3092, 3085, -1,3093, 3085, 3081, -1,3089, + 3092, 3094, -1,3086, 3090, 3088, -1,3090, 3086, 3095, -1,3049, 3090, 3096, -1,3090, + 3049, 3050, -1,3094, 3095, 3086, -1,3096, 3054, 3049, -1,3095, 3096, 3090, -1,3086, + 3089, 3094, -1,3089, 3086, 3087, -1,3099, 3098, 3097, -1,3099, 3101, 3100, -1,3101, + 3099, 3097, -1,3101, 3097, 3102, -1,3104, 3100, 3103, -1,3106, 3105, 3104, -1,3108, + 3107, 3105, -1,3111, 3110, 3109, -1,3113, 3112, 3110, -1,3109, 3107, 3114, -1,3101, + 3103, 3100, -1,3103, 3106, 3104, -1,3106, 3103, 3102, -1,3108, 3106, 3102, -1,3106, + 3108, 3105, -1,3102, 3103, 3101, -1,3108, 3102, 3114, -1,3114, 3111, 3109, -1,3111, + 3114, 3102, -1,3113, 3111, 3102, -1,3111, 3113, 3110, -1,3113, 3102, 3115, -1,3113, + 3115, 3112, -1,3108, 3114, 3107, -1,3116, 3112, 3115, -1,3116, 3118, 3117, -1,3118, + 3116, 3115, -1,3118, 3115, 3102, -1,3120, 3117, 3119, -1,3122, 3121, 3120, -1,3124, + 3123, 3121, -1,3127, 3126, 3125, -1,3128, 3098, 3126, -1,3125, 3123, 3129, -1,3118, + 3119, 3117, -1,3119, 3122, 3120, -1,3122, 3119, 3102, -1,3124, 3122, 3102, -1,3122, + 3124, 3121, -1,3102, 3119, 3118, -1,3124, 3102, 3129, -1,3129, 3127, 3125, -1,3127, + 3129, 3102, -1,3128, 3127, 3102, -1,3127, 3128, 3126, -1,3128, 3102, 3097, -1,3128, + 3097, 3098, -1,3124, 3129, 3123, -1,3130, 3130, 3130, -1,3131, 3131, 3131, -1,3134, + 3133, 3132, -1,3133, 3134, 3135, -1,3137, 3133, 3136, -1,3139, 3138, 3133, -1,3137, + 3140, 3133, -1,3139, 3133, 3140, -1,3138, 3132, 3133, -1,3137, 3142, 3141, -1,3135, + 3144, 3143, -1,3146, 3145, 3143, -1,3147, 3143, 3144, -1,3148, 3143, 3147, -1,3135, + 3143, 3133, -1,3146, 3143, 3149, -1,3151, 3150, 3143, -1,3148, 3151, 3143, -1,3149, + 3143, 3150, -1,3153, 3152, 3149, -1,3136, 3133, 3154, -1,1183, 3155, 1183, -1,3156, + 3156, 3156, -1,3158, 3157, 3155, -1,3160, 3155, 3159, -1,3155, 3161, 3159, -1,3163, + 3162, 3155, -1,3164, 3163, 3155, -1,3165, 3163, 3164, -1,3166, 3165, 3164, -1,3162, + 3161, 3155, -1,3167, 3166, 3164, -1,3158, 3155, 3168, -1,3142, 3137, 3136, -1,3157, + 3158, 3136, -1,3170, 3141, 3169, -1,3168, 3155, 3160, -1,3171, 3167, 3164, -1,3172, + 3171, 3164, -1,3175, 3174, 3173, -1,3176, 3141, 3142, -1,3172, 3164, 3174, -1,3176, + 3142, 3175, -1,3169, 3153, 3170, -1,3136, 3154, 3157, -1,3176, 3175, 3173, -1,3179, + 3178, 3177, -1,3178, 3179, 3180, -1,3179, 3177, 3181, -1,3181, 3177, 3182, -1,3181, + 3182, 3183, -1,3184, 3180, 3179, -1,3146, 3149, 3152, -1,3186, 3152, 3185, -1,3179, + 3145, 3184, -1,3146, 3184, 3145, -1,3188, 3187, 3181, -1,3187, 3189, 3181, -1,3189, + 3187, 3190, -1,3189, 3190, 3191, -1,3188, 3181, 3183, -1,3193, 3189, 3192, -1,3189, + 3191, 3194, -1,3189, 3194, 3192, -1,3195, 3195, 3195, -1,3192, 3196, 3193, -1,3192, + 3194, 3197, -1,3199, 3198, 3186, -1,3198, 3201, 3200, -1,3201, 3198, 3199, -1,3198, + 3200, 3197, -1,3186, 3185, 3199, -1,3152, 3153, 3185, -1,3203, 3202, 3176, -1,3206, + 3205, 3204, -1,3208, 3207, 3205, -1,3210, 3202, 3209, -1,3153, 3169, 3185, -1,3200, + 3211, 3197, -1,3200, 3212, 3211, -1,3214, 3211, 3213, -1,3213, 3211, 3212, -1,3214, + 3213, 3215, -1,3197, 3211, 3192, -1,3217, 3207, 3216, -1,3218, 3217, 3216, -1,3216, + 3214, 3218, -1,3219, 3216, 3207, -1,3219, 3207, 3208, -1,3218, 3214, 3215, -1,3206, + 3204, 3210, -1,3141, 3176, 3169, -1,3174, 3164, 3220, -1,3222, 3221, 3164, -1,3224, + 3223, 3164, -1,3222, 3226, 3225, -1,3221, 3224, 3164, -1,3226, 1183, 1183, -1,3228, + 3226, 3227, -1,3230, 3226, 3229, -1,3226, 3228, 3225, -1,3222, 3164, 3226, -1,3230, + 3231, 3226, -1,3164, 3232, 3220, -1,3203, 3173, 3233, -1,3176, 3173, 3203, -1,3174, + 3220, 3173, -1,3227, 3226, 3234, -1,3234, 3226, 3235, -1,3231, 3230, 3236, -1,3231, + 3235, 3226, -1,3203, 3233, 3237, -1,3233, 3236, 3238, -1,3240, 3237, 3239, -1,3236, + 3230, 3241, -1,3223, 3242, 3164, -1,3245, 3244, 3243, -1,3237, 3233, 3238, -1,3245, + 3243, 3246, -1,3244, 3238, 3243, -1,3247, 3247, 3247, -1,3241, 3248, 3243, -1,3250, + 3243, 3249, -1,3250, 3246, 3243, -1,3249, 3243, 3251, -1,3238, 3236, 3243, -1,3241, + 3243, 3236, -1,3254, 3253, 3252, -1,3257, 3256, 3255, -1,3258, 3257, 3255, -1,3252, + 3258, 3255, -1,3259, 3251, 3255, -1,3260, 3259, 3255, -1,3262, 3261, 3255, -1,3255, + 3263, 3252, -1,3251, 3243, 3255, -1,3255, 3256, 3260, -1,3240, 3239, 3253, -1,3264, + 3261, 3262, -1,3209, 3202, 3203, -1,3265, 3205, 3206, -1,3206, 3210, 3266, -1,3266, + 3210, 3209, -1,3268, 3267, 3254, -1,3271, 3270, 3269, -1,3268, 3270, 3267, -1,3269, + 3270, 3268, -1,3267, 3240, 3253, -1,3203, 3237, 3240, -1,3273, 3272, 3219, -1,3272, + 3275, 3274, -1,3275, 3272, 3273, -1,3272, 3274, 3276, -1,3219, 3208, 3273, -1,3279, + 3278, 3277, -1,3280, 3279, 3277, -1,3278, 3281, 3276, -1,3281, 3278, 3279, -1,3276, + 3281, 3272, -1,3277, 3269, 3280, -1,3271, 3269, 3277, -1,3205, 3265, 3208, -1,3252, + 3263, 3254, -1,3280, 3283, 3282, -1,3267, 3253, 3254, -1,3285, 3284, 3264, -1,3286, + 3285, 3264, -1,3288, 3264, 3287, -1,3290, 3287, 3289, -1,3286, 3264, 3288, -1,3261, + 3264, 3284, -1,3282, 3292, 3291, -1,3292, 3282, 3293, -1,3294, 3294, 3294, -1,3295, + 3282, 3291, -1,3293, 3282, 3283, -1,3297, 3296, 3289, -1,3297, 3292, 3298, -1,3292, + 3297, 3289, -1,3298, 3292, 3299, -1,3296, 3290, 3289, -1,3299, 3292, 3293, -1,3264, + 3289, 3287, -1,3280, 3282, 3279, -1,3255, 3261, 3263, -1,3242, 3232, 3164, -1,3302, + 3301, 3300, -1,3304, 3302, 3303, -1,3300, 3303, 3302, -1,3303, 3300, 3305, -1,3307, + 3303, 3306, -1,3303, 3307, 3304, -1,3304, 3307, 3308, -1,3310, 3309, 3308, -1,3312, + 3311, 3310, -1,3315, 3314, 3313, -1,3311, 3316, 3314, -1,3318, 3317, 3315, -1,3310, + 3308, 3312, -1,3309, 3304, 3308, -1,3307, 3319, 3308, -1,3316, 3312, 3320, -1,3306, + 3303, 3305, -1,3307, 3306, 3319, -1,3312, 3316, 3311, -1,3321, 3308, 3319, -1,3321, + 3320, 3312, -1,3321, 3312, 3308, -1,3316, 3320, 3322, -1,3313, 3318, 3315, -1,3318, + 3313, 3323, -1,3325, 3318, 3324, -1,3318, 3325, 3317, -1,3322, 3323, 3313, -1,3324, + 3326, 3325, -1,3323, 3324, 3318, -1,3313, 3316, 3322, -1,3316, 3313, 3314, -1,3327, + 3317, 3325, -1,3329, 3327, 3328, -1,3325, 3328, 3327, -1,3328, 3325, 3326, -1,3331, + 3328, 3330, -1,3328, 3331, 3329, -1,3329, 3331, 3332, -1,3334, 3333, 3332, -1,3336, + 3335, 3334, -1,3339, 3338, 3337, -1,3335, 3340, 3338, -1,3341, 3301, 3339, -1,3334, + 3332, 3336, -1,3333, 3329, 3332, -1,3331, 3342, 3332, -1,3340, 3336, 3343, -1,3330, + 3328, 3326, -1,3331, 3330, 3342, -1,3336, 3340, 3335, -1,3344, 3332, 3342, -1,3344, + 3343, 3336, -1,3344, 3336, 3332, -1,3340, 3343, 3345, -1,3337, 3341, 3339, -1,3341, + 3337, 3346, -1,3300, 3341, 3347, -1,3341, 3300, 3301, -1,3345, 3346, 3337, -1,3347, + 3305, 3300, -1,3346, 3347, 3341, -1,3337, 3340, 3345, -1,3340, 3337, 3338, -1,3350, + 3349, 3348, -1,3349, 3350, 3351, -1,3353, 3349, 3352, -1,3349, 3353, 3348, -1,3348, + 3353, 3354, -1,3354, 3355, 3348, -1,3355, 3354, 3356, -1,3357, 3355, 2959, -1,3355, + 3357, 3348, -1,3358, 3348, 3357, -1,3353, 3359, 3354, -1,3359, 3353, 3352, -1,3356, + 3354, 3359, -1,3360, 3357, 2959, -1,3360, 3358, 3357, -1,2959, 3355, 3356, -1,3358, + 3361, 3348, -1,3361, 3358, 3362, -1,3364, 3361, 3363, -1,3361, 3364, 3348, -1,3362, + 3363, 3361, -1,3363, 3365, 3364, -1,3358, 3360, 3362, -1,3352, 3349, 3351, -1,3364, + 3366, 3348, -1,3366, 3364, 3365, -1,3368, 3366, 3367, -1,3366, 3368, 3348, -1,3348, + 3368, 3369, -1,3369, 3370, 3348, -1,3370, 3369, 3371, -1,3373, 3370, 3372, -1,3370, + 3373, 3348, -1,3374, 3348, 3373, -1,3368, 3375, 3369, -1,3375, 3368, 3367, -1,3371, + 3369, 3375, -1,3376, 3373, 3372, -1,3376, 3374, 3373, -1,3372, 3370, 3371, -1,3374, + 3377, 3348, -1,3377, 3374, 3378, -1,3350, 3377, 3379, -1,3377, 3350, 3348, -1,3378, + 3379, 3377, -1,3379, 3351, 3350, -1,3374, 3376, 3378, -1,3367, 3366, 3365, -1,3382, + 3381, 3380, -1,3384, 3382, 3383, -1,3380, 3383, 3382, -1,3383, 3380, 3385, -1,3387, + 3383, 3386, -1,3383, 3387, 3384, -1,3384, 3387, 3388, -1,3011, 3389, 3388, -1,3391, + 3390, 3011, -1,3394, 3393, 3392, -1,3390, 3395, 3393, -1,3397, 3396, 3394, -1,3011, + 3388, 3391, -1,3389, 3384, 3388, -1,3387, 3398, 3388, -1,3395, 3391, 3399, -1,3386, + 3383, 3385, -1,3387, 3386, 3398, -1,3391, 3395, 3390, -1,3400, 3388, 3398, -1,3400, + 3399, 3391, -1,3400, 3391, 3388, -1,3395, 3399, 3401, -1,3392, 3397, 3394, -1,3397, + 3392, 3402, -1,3404, 3397, 3403, -1,3397, 3404, 3396, -1,3401, 3402, 3392, -1,3403, + 3405, 3404, -1,3402, 3403, 3397, -1,3392, 3395, 3401, -1,3395, 3392, 3393, -1,3406, + 3396, 3404, -1,3408, 3406, 3407, -1,3404, 3407, 3406, -1,3407, 3404, 3405, -1,3410, + 3407, 3409, -1,3407, 3410, 3408, -1,3408, 3410, 3411, -1,3413, 3412, 3411, -1,3415, + 3414, 3413, -1,3418, 3417, 3416, -1,3414, 3419, 3417, -1,3420, 3381, 3418, -1,3413, + 3411, 3415, -1,3412, 3408, 3411, -1,3410, 3421, 3411, -1,3419, 3415, 3422, -1,3409, + 3407, 3405, -1,3410, 3409, 3421, -1,3415, 3419, 3414, -1,3423, 3411, 3421, -1,3423, + 3422, 3415, -1,3423, 3415, 3411, -1,3419, 3422, 3424, -1,3416, 3420, 3418, -1,3420, + 3416, 3425, -1,3380, 3420, 3426, -1,3420, 3380, 3381, -1,3424, 3425, 3416, -1,3426, + 3385, 3380, -1,3425, 3426, 3420, -1,3416, 3419, 3424, -1,3419, 3416, 3417, -1,3429, + 3428, 3427, -1,3428, 3429, 3430, -1,3432, 3428, 3431, -1,3428, 3432, 3427, -1,3427, + 3432, 3433, -1,3433, 3434, 3427, -1,3434, 3433, 3435, -1,3437, 3434, 3436, -1,3434, + 3437, 3427, -1,3438, 3427, 3437, -1,3432, 3439, 3433, -1,3439, 3432, 3431, -1,3435, + 3433, 3439, -1,3440, 3437, 3436, -1,3440, 3438, 3437, -1,3436, 3434, 3435, -1,3438, + 3441, 3427, -1,3441, 3438, 3442, -1,3444, 3441, 3443, -1,3441, 3444, 3427, -1,3442, + 3443, 3441, -1,3443, 3445, 3444, -1,3438, 3440, 3442, -1,3431, 3428, 3430, -1,3444, + 3446, 3427, -1,3446, 3444, 3445, -1,3448, 3446, 3447, -1,3446, 3448, 3427, -1,3427, + 3448, 3449, -1,3449, 3450, 3427, -1,3450, 3449, 3451, -1,3453, 3450, 3452, -1,3450, + 3453, 3427, -1,3454, 3427, 3453, -1,3448, 3455, 3449, -1,3455, 3448, 3447, -1,3451, + 3449, 3455, -1,3456, 3453, 3452, -1,3456, 3454, 3453, -1,3452, 3450, 3451, -1,3454, + 3457, 3427, -1,3457, 3454, 3458, -1,3429, 3457, 3459, -1,3457, 3429, 3427, -1,3458, + 3459, 3457, -1,3459, 3430, 3429, -1,3454, 3456, 3458, -1,3447, 3446, 3445, -1,3462, + 3461, 3460, -1,3464, 3462, 3463, -1,3460, 3463, 3462, -1,3463, 3460, 3465, -1,3467, + 3463, 3466, -1,3463, 3467, 3464, -1,3464, 3467, 3468, -1,3092, 3469, 3468, -1,3471, + 3470, 3092, -1,3474, 3473, 3472, -1,3470, 3475, 3473, -1,3477, 3476, 3474, -1,3092, + 3468, 3471, -1,3469, 3464, 3468, -1,3467, 3478, 3468, -1,3475, 3471, 3479, -1,3466, + 3463, 3465, -1,3467, 3466, 3478, -1,3471, 3475, 3470, -1,3480, 3468, 3478, -1,3480, + 3479, 3471, -1,3480, 3471, 3468, -1,3475, 3479, 3481, -1,3472, 3477, 3474, -1,3477, + 3472, 3482, -1,3484, 3477, 3483, -1,3477, 3484, 3476, -1,3481, 3482, 3472, -1,3483, + 3485, 3484, -1,3482, 3483, 3477, -1,3472, 3475, 3481, -1,3475, 3472, 3473, -1,3486, + 3476, 3484, -1,3488, 3486, 3487, -1,3484, 3487, 3486, -1,3487, 3484, 3485, -1,3490, + 3487, 3489, -1,3487, 3490, 3488, -1,3488, 3490, 3491, -1,3493, 3492, 3491, -1,3495, + 3494, 3493, -1,3498, 3497, 3496, -1,3494, 3499, 3497, -1,3500, 3461, 3498, -1,3493, + 3491, 3495, -1,3492, 3488, 3491, -1,3490, 3501, 3491, -1,3499, 3495, 3502, -1,3489, + 3487, 3485, -1,3490, 3489, 3501, -1,3495, 3499, 3494, -1,3503, 3491, 3501, -1,3503, + 3502, 3495, -1,3503, 3495, 3491, -1,3499, 3502, 3504, -1,3496, 3500, 3498, -1,3500, + 3496, 3505, -1,3460, 3500, 3506, -1,3500, 3460, 3461, -1,3504, 3505, 3496, -1,3506, + 3465, 3460, -1,3505, 3506, 3500, -1,3496, 3499, 3504, -1,3499, 3496, 3497, -1,3509, + 3508, 3507, -1,3508, 3509, 3510, -1,3512, 3508, 3511, -1,3508, 3512, 3507, -1,3507, + 3512, 3513, -1,3513, 3514, 3507, -1,3514, 3513, 3515, -1,3517, 3514, 3516, -1,3514, + 3517, 3507, -1,3518, 3507, 3517, -1,3512, 3519, 3513, -1,3519, 3512, 3511, -1,3515, + 3513, 3519, -1,3520, 3517, 3516, -1,3520, 3518, 3517, -1,3516, 3514, 3515, -1,3518, + 3521, 3507, -1,3521, 3518, 3522, -1,3524, 3521, 3523, -1,3521, 3524, 3507, -1,3522, + 3523, 3521, -1,3523, 3525, 3524, -1,3518, 3520, 3522, -1,3511, 3508, 3510, -1,3524, + 3526, 3507, -1,3526, 3524, 3525, -1,3528, 3526, 3527, -1,3526, 3528, 3507, -1,3507, + 3528, 3529, -1,3529, 3530, 3507, -1,3530, 3529, 3531, -1,3533, 3530, 3532, -1,3530, + 3533, 3507, -1,3534, 3507, 3533, -1,3528, 3535, 3529, -1,3535, 3528, 3527, -1,3531, + 3529, 3535, -1,3536, 3533, 3532, -1,3536, 3534, 3533, -1,3532, 3530, 3531, -1,3534, + 3537, 3507, -1,3537, 3534, 3538, -1,3509, 3537, 3539, -1,3537, 3509, 3507, -1,3538, + 3539, 3537, -1,3539, 3510, 3509, -1,3534, 3536, 3538, -1,3527, 3526, 3525, -1,3542, + 3541, 3540, -1,3544, 3542, 3543, -1,3540, 3543, 3542, -1,3543, 3540, 3545, -1,3547, + 3543, 3546, -1,3543, 3547, 3544, -1,3544, 3547, 3548, -1,3550, 3549, 3548, -1,3552, + 3551, 3550, -1,3555, 3554, 3553, -1,3551, 3556, 3554, -1,3558, 3557, 3555, -1,3550, + 3548, 3552, -1,3549, 3544, 3548, -1,3547, 3559, 3548, -1,3556, 3552, 3560, -1,3546, + 3543, 3545, -1,3547, 3546, 3559, -1,3552, 3556, 3551, -1,3561, 3548, 3559, -1,3561, + 3560, 3552, -1,3561, 3552, 3548, -1,3556, 3560, 3562, -1,3553, 3558, 3555, -1,3558, + 3553, 3563, -1,3565, 3558, 3564, -1,3558, 3565, 3557, -1,3562, 3563, 3553, -1,3564, + 3566, 3565, -1,3563, 3564, 3558, -1,3553, 3556, 3562, -1,3556, 3553, 3554, -1,3567, + 3557, 3565, -1,3569, 3567, 3568, -1,3565, 3568, 3567, -1,3568, 3565, 3566, -1,3571, + 3568, 3570, -1,3568, 3571, 3569, -1,3569, 3571, 3572, -1,3574, 3573, 3572, -1,3576, + 3575, 3574, -1,3579, 3578, 3577, -1,3575, 3580, 3578, -1,3581, 3541, 3579, -1,3574, + 3572, 3576, -1,3573, 3569, 3572, -1,3571, 3582, 3572, -1,3580, 3576, 3583, -1,3570, + 3568, 3566, -1,3571, 3570, 3582, -1,3576, 3580, 3575, -1,3584, 3572, 3582, -1,3584, + 3583, 3576, -1,3584, 3576, 3572, -1,3580, 3583, 3585, -1,3577, 3581, 3579, -1,3581, + 3577, 3586, -1,3540, 3581, 3587, -1,3581, 3540, 3541, -1,3585, 3586, 3577, -1,3587, + 3545, 3540, -1,3586, 3587, 3581, -1,3577, 3580, 3585, -1,3580, 3577, 3578, -1,3590, + 3589, 3588, -1,3590, 3592, 3591, -1,3592, 3590, 3588, -1,3592, 3588, 3593, -1,3595, + 3591, 3594, -1,3597, 3596, 3595, -1,3599, 3598, 3596, -1,3602, 3601, 3600, -1,3604, + 3603, 3601, -1,3600, 3598, 3605, -1,3592, 3594, 3591, -1,3594, 3597, 3595, -1,3597, + 3594, 3593, -1,3599, 3597, 3593, -1,3597, 3599, 3596, -1,3593, 3594, 3592, -1,3599, + 3593, 3605, -1,3605, 3602, 3600, -1,3602, 3605, 3593, -1,3604, 3602, 3593, -1,3602, + 3604, 3601, -1,3604, 3593, 3606, -1,3604, 3606, 3603, -1,3599, 3605, 3598, -1,3607, + 3603, 3606, -1,3607, 3609, 3608, -1,3609, 3607, 3606, -1,3609, 3606, 3593, -1,3611, + 3608, 3610, -1,3613, 3612, 3611, -1,3615, 3614, 3612, -1,3618, 3617, 3616, -1,3619, + 3589, 3617, -1,3616, 3614, 3620, -1,3609, 3610, 3608, -1,3610, 3613, 3611, -1,3613, + 3610, 3593, -1,3615, 3613, 3593, -1,3613, 3615, 3612, -1,3593, 3610, 3609, -1,3615, + 3593, 3620, -1,3620, 3618, 3616, -1,3618, 3620, 3593, -1,3619, 3618, 3593, -1,3618, + 3619, 3617, -1,3619, 3593, 3588, -1,3619, 3588, 3589, -1,3615, 3620, 3614, -1,3623, + 3622, 3621, -1,3624, 3623, 3621, -1,3625, 3624, 3621, -1,3626, 3625, 3621, -1,3628, + 3627, 3626, -1,3629, 3626, 3627, -1,3629, 3630, 3626, -1,3630, 3625, 3626, -1,3633, + 3632, 3631, -1,3632, 3633, 3634, -1,3625, 3630, 3633, -1,3636, 3630, 3635, -1,3638, + 3636, 3637, -1,3635, 3637, 3636, -1,3636, 3633, 3630, -1,3631, 3625, 3633, -1,3641, + 3640, 3639, -1,3643, 3641, 3642, -1,3639, 3642, 3641, -1,3642, 3639, 3644, -1,3646, + 3642, 3645, -1,3642, 3646, 3643, -1,3643, 3646, 3647, -1,3649, 3648, 3647, -1,3651, + 3650, 3649, -1,3654, 3653, 3652, -1,3650, 3655, 3653, -1,3657, 3656, 3654, -1,3649, + 3647, 3651, -1,3648, 3643, 3647, -1,3646, 3658, 3647, -1,3655, 3651, 3659, -1,3645, + 3642, 3644, -1,3646, 3645, 3658, -1,3651, 3655, 3650, -1,3660, 3647, 3658, -1,3660, + 3659, 3651, -1,3660, 3651, 3647, -1,3655, 3659, 3661, -1,3652, 3657, 3654, -1,3657, + 3652, 3662, -1,3664, 3657, 3663, -1,3657, 3664, 3656, -1,3661, 3662, 3652, -1,3663, + 3665, 3664, -1,3662, 3663, 3657, -1,3652, 3655, 3661, -1,3655, 3652, 3653, -1,3667, + 3644, 3666, -1,3640, 3666, 3644, -1,3670, 3669, 3668, -1,3672, 3670, 3671, -1,3668, + 3671, 3670, -1,3671, 3668, 3673, -1,3675, 3671, 3674, -1,3671, 3675, 3672, -1,3672, + 3675, 3676, -1,3678, 3677, 3676, -1,3680, 3679, 3678, -1,3683, 3682, 3681, -1,3679, + 3684, 3682, -1,3685, 3666, 3683, -1,3678, 3676, 3680, -1,3677, 3672, 3676, -1,3675, + 3686, 3676, -1,3684, 3680, 3687, -1,3674, 3671, 3673, -1,3675, 3674, 3686, -1,3680, + 3684, 3679, -1,3688, 3676, 3686, -1,3688, 3687, 3680, -1,3688, 3680, 3676, -1,3684, + 3687, 3689, -1,3681, 3685, 3683, -1,3685, 3681, 3690, -1,3692, 3685, 3691, -1,3685, + 3692, 3666, -1,3689, 3690, 3681, -1,3691, 3667, 3692, -1,3690, 3691, 3685, -1,3681, + 3684, 3689, -1,3684, 3681, 3682, -1,3656, 3665, 3673, -1,3673, 3669, 3656, -1,3695, + 3694, 3693, -1,3697, 3695, 3696, -1,3693, 3696, 3695, -1,3696, 3693, 3698, -1,3700, + 3696, 3699, -1,3696, 3700, 3697, -1,3697, 3700, 3701, -1,3703, 3701, 3702, -1,3705, + 3703, 3704, -1,3708, 3707, 3706, -1,3708, 3709, 3707, -1,3711, 3707, 3710, -1,3705, + 3712, 3710, -1,3700, 3702, 3701, -1,3702, 3713, 3704, -1,3713, 3702, 3714, -1,3704, + 3713, 3715, -1,3702, 3704, 3703, -1,3714, 3700, 3699, -1,3702, 3700, 3714, -1,3698, + 3699, 3696, -1,3693, 3716, 3698, -1,3712, 3711, 3710, -1,3711, 3712, 3717, -1,3706, + 3711, 3718, -1,3711, 3706, 3707, -1,3715, 3717, 3712, -1,3718, 3719, 3706, -1,3717, + 3718, 3711, -1,3712, 3704, 3715, -1,3706, 3719, 3708, -1,3704, 3712, 3705, -1,3720, + 3709, 3708, -1,3722, 3720, 3721, -1,3721, 3723, 3722, -1,3721, 3708, 3719, -1,3723, + 3721, 3724, -1,3721, 3720, 3708, -1,3722, 3723, 3725, -1,3727, 3726, 3725, -1,3729, + 3728, 3727, -1,3732, 3731, 3730, -1,3728, 3733, 3731, -1,3734, 3694, 3732, -1,3727, + 3725, 3729, -1,3726, 3722, 3725, -1,3723, 3735, 3725, -1,3724, 3735, 3723, -1,3724, + 3721, 3719, -1,3735, 3736, 3725, -1,3736, 3729, 3725, -1,3729, 3737, 3733, -1,3736, + 3737, 3729, -1,3733, 3737, 3738, -1,3733, 3730, 3731, -1,3733, 3738, 3730, -1,3734, + 3730, 3739, -1,3730, 3734, 3732, -1,3740, 3693, 3734, -1,3716, 3693, 3740, -1,3740, + 3734, 3739, -1,3738, 3739, 3730, -1,3734, 3693, 3694, -1,3729, 3733, 3728, -1,3743, + 3742, 3741, -1,3745, 3744, 3742, -1,3742, 3744, 3741, -1,3741, 3746, 3743, -1,3746, + 3748, 3747, -1,3750, 3749, 3747, -1,3748, 3746, 3741, -1,3747, 3749, 3746, -1,3751, + 3745, 51, -1,3742, 51, 3745, -1,3751, 3753, 3752, -1,3754, 3745, 3751, -1,3753, 3755, + 3752, -1,3757, 3756, 3755, -1,3752, 3755, 3756, -1,3754, 3751, 3752, -1,3759, 3750, + 3758, -1,3747, 3758, 3750, -1,3759, 3761, 3760, -1,3762, 3750, 3759, -1,3761, 3763, + 3760, -1,3764, 51, 3763, -1,3760, 3763, 51, -1,3762, 3759, 3760, -1,3766, 3757, 3765, -1, + 3757, 3767, 3765, -1,3755, 3767, 3757, -1,3765, 3768, 3766, -1,3768, 3769, 3764, -1, + 3763, 3770, 3764, -1,3769, 3768, 3765, -1,3764, 3770, 3768, -1,3773, 3772, 3771, -1, + 3775, 3773, 3774, -1,3771, 3774, 3773, -1,3774, 3771, 96, -1,3777, 3774, 3776, -1, + 3774, 3777, 3775, -1,3775, 3777, 3778, -1,3780, 3779, 3778, -1,3782, 3781, 3780, -1, + 3785, 3784, 3783, -1,3781, 3786, 3784, -1,3788, 3787, 3785, -1,3780, 3778, 3782, -1, + 3779, 3775, 3778, -1,3777, 3789, 3778, -1,3786, 3782, 3790, -1,3776, 3774, 96, -1, + 3777, 3776, 3789, -1,3782, 3786, 3781, -1,3791, 3778, 3789, -1,3791, 3790, 3782, -1, + 3791, 3782, 3778, -1,3786, 3790, 3792, -1,3783, 3788, 3785, -1,3788, 3783, 3793, -1, + 3795, 3788, 3794, -1,3788, 3795, 3787, -1,3792, 3793, 3783, -1,3794, 3796, 3795, -1, + 3793, 3794, 3788, -1,3783, 3786, 3792, -1,3786, 3783, 3784, -1,3797, 3787, 3795, -1, + 3799, 3797, 3798, -1,3795, 3798, 3797, -1,3798, 3795, 3796, -1,3801, 3798, 3800, -1, + 3798, 3801, 3799, -1,3799, 3801, 3802, -1,3804, 3803, 3802, -1,3806, 3805, 3804, -1, + 3809, 3808, 3807, -1,3805, 3810, 3808, -1,3811, 3772, 3809, -1,3804, 3802, 3806, -1, + 3803, 3799, 3802, -1,3801, 3812, 3802, -1,3810, 3806, 3813, -1,3800, 3798, 3796, -1, + 3801, 3800, 3812, -1,3806, 3810, 3805, -1,3814, 3802, 3812, -1,3814, 3813, 3806, -1, + 3814, 3806, 3802, -1,3810, 3813, 3815, -1,3807, 3811, 3809, -1,3811, 3807, 3816, -1, + 3771, 3811, 3817, -1,3811, 3771, 3772, -1,3815, 3816, 3807, -1,3817, 96, 3771, -1, + 3816, 3817, 3811, -1,3807, 3810, 3815, -1,3810, 3807, 3808, -1,3820, 3819, 3818, -1, + 3819, 3820, 3821, -1,3823, 3819, 3822, -1,3819, 3823, 3818, -1,3818, 3823, 3824, -1, + 3824, 3825, 3818, -1,3825, 3824, 3826, -1,3828, 3825, 3827, -1,3825, 3828, 3818, -1, + 3829, 3818, 3828, -1,3823, 3830, 3824, -1,3830, 3823, 3822, -1,3826, 3824, 3830, -1, + 3831, 3828, 3827, -1,3831, 3829, 3828, -1,3827, 3825, 3826, -1,3829, 3832, 3818, -1, + 3832, 3829, 3833, -1,3835, 3832, 3834, -1,3832, 3835, 3818, -1,3833, 3834, 3832, -1, + 3834, 3836, 3835, -1,3829, 3831, 3833, -1,3822, 3819, 3821, -1,3835, 3837, 3818, -1, + 3837, 3835, 3836, -1,3839, 3837, 3838, -1,3837, 3839, 3818, -1,3818, 3839, 3840, -1, + 3840, 3841, 3818, -1,3841, 3840, 3842, -1,3844, 3841, 3843, -1,3841, 3844, 3818, -1, + 3845, 3818, 3844, -1,3839, 3846, 3840, -1,3846, 3839, 3838, -1,3842, 3840, 3846, -1, + 3847, 3844, 3843, -1,3847, 3845, 3844, -1,3843, 3841, 3842, -1,3845, 3848, 3818, -1, + 3848, 3845, 3849, -1,3820, 3848, 3850, -1,3848, 3820, 3818, -1,3849, 3850, 3848, -1, + 3850, 3821, 3820, -1,3845, 3847, 3849, -1,3838, 3837, 3836, -1,3853, 3852, 3851, -1, + 3854, 3852, 3853, -1,3857, 3856, 3855, -1,3851, 3859, 3858, -1,3859, 3851, 3852, -1, + 3859, 3852, 3860, -1,3858, 3859, 3861, -1,3853, 3862, 3854, -1,3864, 3861, 3863, -1, + 3865, 3861, 3859, -1,3863, 3861, 3865, -1,3868, 3867, 3866, -1,3869, 3864, 3863, -1, + 3865, 3870, 3863, -1,3859, 3871, 3865, -1,3854, 3872, 3860, -1,3860, 3871, 3859, -1, + 3870, 3865, 3871, -1,3868, 3866, 3869, -1,3868, 3873, 3867, -1,3869, 3863, 3870, -1, + 3875, 3874, 3856, -1,3877, 3876, 3874, -1,3875, 3856, 3857, -1,3873, 3876, 3877, -1, + 3878, 3878, 3857, -1,3879, 3857, 3879, -1,3856, 3874, 3876, -1,3873, 3868, 3876, -1, + 3869, 3866, 3864, -1,3854, 3860, 3852, -1,3882, 3881, 3880, -1,3881, 3884, 3883, -1, + 3885, 3880, 3881, -1,3882, 3880, 3886, -1,3886, 3880, 3885, -1,3887, 3854, 3862, -1, + 3889, 3887, 3888, -1,3891, 3886, 3890, -1,3889, 3888, 3890, -1,3889, 3890, 3892, -1, + 3886, 3885, 3890, -1,3890, 3888, 3891, -1,3854, 3887, 3889, -1,3885, 3893, 3890, -1, + 3896, 3895, 3894, -1,3899, 3898, 3897, -1,3855, 3897, 3898, -1,3896, 3900, 3897, -1, + 3900, 3899, 3897, -1,3901, 3901, 3898, -1,3895, 3896, 3883, -1,3893, 3885, 3881, -1, + 3884, 3881, 3882, -1,3892, 3890, 3893, -1,3902, 3889, 3892, -1,3902, 3872, 3854, -1, + 3895, 3883, 3903, -1,3902, 3854, 3889, -1,3900, 3896, 3894, -1,3878, 3898, 3878, -1, + 3883, 3884, 3903, -1,3906, 3905, 3904, -1,3905, 3907, 3904, -1,3906, 3908, 3905, -1, + 3909, 3907, 3905, -1,3912, 3911, 3910, -1,3911, 3906, 3910, -1,3908, 3906, 3911, -1, + 3909, 3913, 3907, -1,3914, 3907, 3913, -1,3913, 3916, 3915, -1,3915, 3914, 3913, -1, + 3918, 3917, 3915, -1,3918, 3920, 3919, -1,3917, 3918, 3919, -1,3916, 3918, 3915, -1, + 3911, 3912, 3921, -1,3923, 3922, 3912, -1,3921, 3912, 3922, -1,3922, 3923, 3924, -1, + 3924, 3925, 3922, -1,3924, 3927, 3926, -1,3926, 3927, 3928, -1,3928, 3929, 3926, -1, + 3925, 3924, 3926, -1,3932, 3931, 3930, -1,3920, 3932, 3919, -1,3930, 3919, 3932, -1, + 3932, 3933, 3931, -1,3935, 3934, 3928, -1,3929, 3928, 3934, -1,3934, 3931, 3933, -1, + 3935, 3931, 3934, -1,3938, 3937, 3936, -1,3940, 3938, 3939, -1,3936, 3939, 3938, -1, + 3939, 3936, 3941, -1,3943, 3939, 3942, -1,3939, 3943, 3940, -1,3940, 3943, 3944, -1, + 3946, 3945, 3944, -1,3948, 3947, 3946, -1,3951, 3950, 3949, -1,3947, 3952, 3950, -1, + 3954, 3953, 3951, -1,3946, 3944, 3948, -1,3945, 3940, 3944, -1,3943, 3955, 3944, -1, + 3952, 3948, 3956, -1,3942, 3939, 3941, -1,3943, 3942, 3955, -1,3948, 3952, 3947, -1, + 3957, 3944, 3955, -1,3957, 3956, 3948, -1,3957, 3948, 3944, -1,3952, 3956, 3958, -1, + 3949, 3954, 3951, -1,3954, 3949, 3959, -1,3961, 3954, 3960, -1,3954, 3961, 3953, -1, + 3958, 3959, 3949, -1,3960, 3962, 3961, -1,3959, 3960, 3954, -1,3949, 3952, 3958, -1, + 3952, 3949, 3950, -1,3963, 3953, 3961, -1,3965, 3963, 3964, -1,3961, 3964, 3963, -1, + 3964, 3961, 3962, -1,3967, 3964, 3966, -1,3964, 3967, 3965, -1,3965, 3967, 3968, -1, + 3970, 3969, 3968, -1,3972, 3971, 3970, -1,3975, 3974, 3973, -1,3971, 3976, 3974, -1, + 3977, 3937, 3975, -1,3970, 3968, 3972, -1,3969, 3965, 3968, -1,3967, 3978, 3968, -1, + 3976, 3972, 3979, -1,3966, 3964, 3962, -1,3967, 3966, 3978, -1,3972, 3976, 3971, -1, + 3980, 3968, 3978, -1,3980, 3979, 3972, -1,3980, 3972, 3968, -1,3976, 3979, 3981, -1, + 3973, 3977, 3975, -1,3977, 3973, 3982, -1,3936, 3977, 3983, -1,3977, 3936, 3937, -1, + 3981, 3982, 3973, -1,3983, 3941, 3936, -1,3982, 3983, 3977, -1,3973, 3976, 3981, -1, + 3976, 3973, 3974, -1,3986, 3985, 3984, -1,3986, 3988, 3987, -1,3988, 3986, 3984, -1, + 3988, 3984, 3989, -1,3991, 3987, 3990, -1,3993, 3992, 3991, -1,3995, 3994, 3992, -1, + 3998, 3997, 3996, -1,4000, 3999, 3997, -1,3996, 3994, 4001, -1,3988, 3990, 3987, -1, + 3990, 3993, 3991, -1,3993, 3990, 3989, -1,3995, 3993, 3989, -1,3993, 3995, 3992, -1, + 3989, 3990, 3988, -1,3995, 3989, 4001, -1,4001, 3998, 3996, -1,3998, 4001, 3989, -1, + 4000, 3998, 3989, -1,3998, 4000, 3997, -1,4000, 3989, 4002, -1,4000, 4002, 3999, -1, + 3995, 4001, 3994, -1,4003, 3999, 4002, -1,4003, 4005, 4004, -1,4005, 4003, 4002, -1, + 4005, 4002, 3989, -1,4007, 4004, 4006, -1,4009, 4008, 4007, -1,4011, 4010, 4008, -1, + 4014, 4013, 4012, -1,4015, 3985, 4013, -1,4012, 4010, 4016, -1,4005, 4006, 4004, -1, + 4006, 4009, 4007, -1,4009, 4006, 3989, -1,4011, 4009, 3989, -1,4009, 4011, 4008, -1, + 3989, 4006, 4005, -1,4011, 3989, 4016, -1,4016, 4014, 4012, -1,4014, 4016, 3989, -1, + 4015, 4014, 3989, -1,4014, 4015, 4013, -1,4015, 3989, 3984, -1,4015, 3984, 3985, -1, + 4011, 4016, 4010, -1 + ] + } + } + ] +} +DEF link4c Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.733333 0.866667 0.733333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 3762 + -0.0410003 -2.40933e-005 0.0610011, -0.0402113 -0.00795902 0.0610011, -0.0378803 -0.0156491 0.0610011, + -0.0340923 -0.0227291 0.0610011, -0.0289923 -0.028955 0.0610011, -0.0227783 -0.0340821 0.0610011, + -0.0156903 -0.037866 0.0610011, -0.00799925 -0.0401861 0.0610011, -2.54127e-007 -0.0410401 0.0610011, + 0.00799775 -0.040186 0.0610011, 0.0156897 -0.037866 0.061001, 0.0227777 -0.0340821 0.061001, 0.0289917 -0.028955 0.061001, + 0.0340917 -0.022729 0.061001, 0.0378797 -0.0156491 0.061001, 0.0402107 -0.007959 0.061001, 0.0409997 -2.40744e-005 0.061001, + 0.0402107 0.00803197 0.061001, 0.0378797 0.015723 0.061001, 0.0340917 0.022803 0.061001, 0.0289917 0.0290279 0.061001, + 0.0227777 0.0340329 0.061001, 0.0156897 0.037939 0.0610011, 0.00799773 0.040259 0.0610011, -2.73027e-007 0.0409909 0.0610011, + -0.00799927 0.040259 0.0610011, -0.0156903 0.0379389 0.0610011, -0.0227783 0.0340329 0.0610011, + -0.0289923 0.0290279 0.0610011, -0.0340923 0.0228029 0.0610011, -0.0378803 0.015723 0.0610011, + -0.0402113 0.00803195 0.0610011, -2.72465e-007 0.03855 0.0610011, 0.000784728 0.0384279 0.0610011, + 0.00144973 0.0379389 0.0610011, 0.00189373 0.037329 0.0610011, 0.00204973 0.0364749 0.0610011, 0.00189373 0.0357419 0.0610011, + 0.00144973 0.03501 0.0610011, 0.000784728 0.034644 0.0610011, -2.71508e-007 0.034399 0.0610011, + -0.000785272 0.034644 0.0610011, -0.00145027 0.03501 0.0610011, -0.00189427 0.0357419 0.0610011, + -0.00205027 0.0364749 0.0610011, -0.00189427 0.037329 0.0610011, -0.00145027 0.0379389 0.0610011, + -0.000785272 0.0384279 0.0610011, -2.54689e-007 -0.038599 0.0610011, -0.000785255 -0.038354 0.0610011, + -0.00145025 -0.0379881 0.0610011, -0.00189425 -0.037256 0.0610011, -0.00205026 -0.036523 0.0610011, + -0.00189426 -0.035669 0.0610011, -0.00145026 -0.035059 0.0610011, -0.000785256 -0.03457 0.0610011, + -2.55646e-007 -0.034448 0.0610011, 0.000784744 -0.03457 0.0610011, 0.00144974 -0.035059 0.0610011, + 0.00189374 -0.035669 0.0610011, 0.00204974 -0.036523 0.0610011, 0.00189375 -0.037256 0.0610011, + 0.00144975 -0.0379881 0.0610011, 0.000784745 -0.038354 0.0610011, -0.00799825 -0.0401861 0.0610011, + 0.0410997 -2.40744e-005 0.060902, 0.0411987 -2.40743e-005 0.060803, 0.0404087 -0.00808107 0.060803, + 0.0380627 -0.015771 0.060803, 0.0342557 -0.0228521 0.060803, 0.0291327 -0.029077 0.060803, 0.0228897 -0.034204 0.060803, + 0.0157657 -0.03811 0.060803, 0.00803775 -0.0404301 0.0608031, -2.54144e-007 -0.041162 0.0608031, + -0.00803825 -0.0404301 0.0608031, -0.0157663 -0.03811 0.0608031, -0.0228903 -0.034204 0.0608031, + -0.0291333 -0.0290771 0.0608031, -0.0342563 -0.0228521 0.0608031, -0.0380633 -0.015771 0.0608031, + -0.0404093 -0.00808109 0.0608031, -0.0411993 -2.40933e-005 0.0608031, -0.0411003 -2.40933e-005 0.0609021, + -0.00799827 0.040259 0.0610011, -0.0404093 0.00803195 0.0608031, -0.0380633 0.015723 0.0608031, -0.0342563 0.022925 0.0608031, + -0.0291333 0.02915 0.0608031, -0.0228903 0.034277 0.0608031, -0.0157663 0.038062 0.0608031, -0.00803827 0.040381 0.0608031, + -2.73129e-007 0.041235 0.0608031, 0.00803773 0.040381 0.0608031, 0.0157657 0.038062 0.0608031, 0.0228897 0.034277 0.060803, + 0.0291327 0.02915 0.060803, 0.0342557 0.022925 0.060803, 0.0380627 0.015723 0.060803, 0.0404087 0.00803197 0.060803, + 0.0411987 -2.40743e-005 0.060551, 0.0411987 -2.40743e-005 0.060299, 0.0404087 -0.00808107 0.060299, + 0.0380627 -0.015771 0.060299, 0.0342557 -0.0228521 0.060299, 0.0291327 -0.029077 0.060299, 0.0228897 -0.034204 0.060299, + 0.0157657 -0.03811 0.060299, 0.00803775 -0.0404301 0.0602991, -2.5426e-007 -0.041162 0.0602991, + -0.00803825 -0.0404301 0.0602991, -0.0157663 -0.03811 0.0602991, -0.0228903 -0.034204 0.0602991, + -0.0291333 -0.0290771 0.0602991, -0.0342563 -0.0228521 0.0602991, -0.0380633 -0.015771 0.0602991, + -0.0404093 -0.00808109 0.0602991, -0.0411993 -2.40933e-005 0.0602991, -0.0411993 -2.40933e-005 0.0605511, + -0.0404093 0.00803195 0.0602991, -0.0380633 0.015723 0.0602991, -0.0342563 0.022925 0.0602991, -0.0291333 0.02915 0.0602991, + -0.0228903 0.034277 0.0602991, -0.0157663 0.038062 0.0602991, -0.00803827 0.040381 0.0602991, + -2.73245e-007 0.041235 0.0602991, 0.00803773 0.040381 0.0602991, 0.0157657 0.038062 0.0602991, 0.0228897 0.034277 0.060299, + 0.0291327 0.02915 0.060299, 0.0342557 0.022925 0.060299, 0.0380627 0.015723 0.060299, 0.0404087 0.00803197 0.060299, + 0.0410997 -2.40743e-005 0.0602, 0.0409997 -2.40744e-005 0.060101, 0.0402107 -0.007959 0.060101, 0.0378797 -0.0156491 0.060101, + 0.0340917 -0.022729 0.060101, 0.0289917 -0.028955 0.060101, 0.0227777 -0.0340821 0.060101, 0.0156897 -0.037866 0.060101, + 0.00799775 -0.040186 0.0601011, -2.54334e-007 -0.0410401 0.0601011, -0.00799825 -0.0401861 0.0601011, + -0.0156903 -0.037866 0.0601011, -0.0227783 -0.0340821 0.0601011, -0.0289923 -0.028955 0.0601011, + -0.0340923 -0.0227291 0.0601011, -0.0378803 -0.0156491 0.0601011, -0.0402113 -0.00795902 0.0601011, + -0.0410003 -2.40933e-005 0.0601011, -0.0411003 -2.40933e-005 0.0602001, -0.0402113 0.00803195 0.0601011, + -0.0378803 0.015723 0.0601011, -0.0340923 0.0228029 0.0601011, -0.0289923 0.0290279 0.0601011, -0.0227783 0.0340329 0.0601011, + -0.0156903 0.0379389 0.0601011, -0.00799827 0.040259 0.0601011, -2.73235e-007 0.0409909 0.0601011, + 0.00799773 0.040259 0.0601011, 0.0156897 0.037939 0.0601011, 0.0227777 0.0340329 0.060101, 0.0289917 0.0290279 0.060101, + 0.0340917 0.022803 0.060101, 0.0378797 0.015723 0.060101, 0.0402107 0.00803197 0.060101, -0.00799927 0.040259 0.0601011, + -0.00799925 -0.0401861 0.0601011, -0.0401503 -2.40931e-005 0.0601011, -0.0393793 0.00778793 0.0601011, + -0.0370943 0.0153559 0.0601011, -0.0333823 0.0223139 0.0601011, -0.0283913 0.0284179 0.0601011, + -0.0223063 0.0334229 0.0601011, -0.0153653 0.0370849 0.0601011, -0.00783327 0.039404 0.0601011, + -2.73038e-007 0.0401369 0.0601011, 0.00783273 0.039404 0.0601011, 0.0153647 0.0370849 0.0601011, + 0.0223057 0.0334229 0.0601011, 0.0283907 0.0284179 0.060101, 0.0333817 0.022314 0.060101, 0.0370937 0.0153559 0.060101, + 0.0393787 0.00778795 0.060101, 0.0401497 -2.40746e-005 0.060101, 0.0393787 -0.00783705 0.060101, + 0.0370937 -0.0154051 0.060101, 0.0333817 -0.0223631 0.060101, 0.0283907 -0.028345 0.060101, 0.0223057 -0.03335 0.060101, + 0.0153647 -0.0371341 0.060101, 0.00783275 -0.0393311 0.0601011, -2.54531e-007 -0.0401861 0.0601011, + -0.00783326 -0.0393311 0.0601011, -0.0153653 -0.0371341 0.0601011, -0.0223063 -0.03335 0.0601011, + -0.0283913 -0.028345 0.0601011, -0.0333823 -0.0223631 0.0601011, -0.0370943 -0.0154051 0.0601011, + -0.0393793 -0.00783707 0.0601011, -0.0397493 -2.40929e-005 0.0596971, -0.0397803 -2.4093e-005 0.0598571, + -0.0398673 -2.4093e-005 0.0599871, -0.0399973 -2.4093e-005 0.0600701, 0.0399967 -2.40746e-005 0.06007, + 0.0398667 -2.40746e-005 0.059987, 0.0397797 -2.40746e-005 0.059857, 0.0397487 -2.40746e-005 0.059697, + 0.0389857 -0.00771498 0.059697, 0.0367237 -0.015161 0.059697, 0.0330507 -0.022119 0.059697, 0.0281067 -0.028101 0.059697, + 0.0220827 -0.033105 0.059697, 0.0152117 -0.0367681 0.059697, 0.00775475 -0.038965 0.0596971, + -2.54737e-007 -0.0396971 0.0596971, -0.00775525 -0.038965 0.0596971, -0.0152123 -0.0367681 0.0596971, + -0.0220833 -0.033105 0.0596971, -0.0281073 -0.028101 0.0596971, -0.0330513 -0.0221191 0.0596971, + -0.0367243 -0.015161 0.0596971, -0.0389863 -0.007715 0.0596971, -0.0389863 0.00778793 0.0596971, + -0.0367243 0.015234 0.0596971, -0.0330513 0.0220699 0.0596971, -0.0281073 0.028052 0.0596971, -0.0220833 0.033057 0.0596971, + -0.0152123 0.036719 0.0596971, -0.00775527 0.0390379 0.0596971, -2.73047e-007 0.039771 0.0596971, + 0.00775473 0.0390379 0.0596971, 0.0152117 0.036719 0.0596971, 0.0220827 0.033057 0.0596971, 0.0281067 0.028052 0.059697, + 0.0330507 0.0220699 0.059697, 0.0367237 0.015234 0.059697, 0.0389857 0.00778795 0.059697, 0.0397487 -2.40746e-005 0.059102, + 0.0397487 -2.40746e-005 0.058499, 0.0389857 -0.00771498 0.058499, 0.0367237 -0.015161 0.058499, 0.0330507 -0.022119 0.058499, + 0.0281067 -0.028101 0.058499, 0.0220827 -0.033105 0.058499, 0.0152117 -0.0367681 0.058499, 0.00775474 -0.038965 0.058499, + -2.55013e-007 -0.0396971 0.058499, -0.00775526 -0.038965 0.0584991, -0.0152123 -0.0367681 0.0584991, + -0.0220833 -0.033105 0.0584991, -0.0281073 -0.028101 0.0584991, -0.0330513 -0.0221191 0.0584991, + -0.0367243 -0.015161 0.0584991, -0.0389863 -0.007715 0.0584991, -0.0397493 -2.40929e-005 0.0584991, + -0.0397493 -2.40929e-005 0.0591021, -0.0389863 0.00778793 0.0584991, -0.0367243 0.015234 0.0584991, + -0.0330513 0.0220699 0.0584991, -0.0281073 0.028052 0.0584991, -0.0220833 0.033057 0.0584991, -0.0152123 0.036719 0.0584991, + -0.00775527 0.0390379 0.0584991, -2.73323e-007 0.039771 0.0584991, 0.00775473 0.0390379 0.058499, 0.0152117 0.036719 0.058499, + 0.0220827 0.033057 0.058499, 0.0281067 0.028052 0.058499, 0.0330507 0.0220699 0.058499, 0.0367237 0.015234 0.058499, + 0.0389857 0.00778795 0.058499, -0.0401503 -2.4093e-005 0.0581021, -0.0399973 -2.40929e-005 0.0581331, + -0.0398673 -2.40929e-005 0.0582171, -0.0397803 -2.40929e-005 0.0583461, 0.0397797 -2.40746e-005 0.058346, + 0.0398667 -2.40745e-005 0.058217, 0.0399967 -2.40745e-005 0.058133, 0.0401497 -2.40745e-005 0.058102, + 0.0393787 -0.00783705 0.058102, 0.0370937 -0.0154051 0.058102, 0.0333817 -0.0223631 0.058102, 0.0283907 -0.028345 0.058102, + 0.0223057 -0.03335 0.058102, 0.0153647 -0.0371341 0.058102, 0.00783275 -0.0393311 0.0581021, + -2.54992e-007 -0.0401861 0.0581021, -0.00783326 -0.0393311 0.0581021, -0.0153653 -0.0371341 0.0581021, + -0.0223063 -0.03335 0.0581021, -0.0283913 -0.028345 0.0581021, -0.0333823 -0.0223631 0.0581021, + -0.0370943 -0.0154051 0.0581021, -0.0393793 -0.00783707 0.0581021, -0.0393793 0.00778793 0.0581021, + -0.0370943 0.0153559 0.0581021, -0.0333823 0.0223139 0.0581021, -0.0283913 0.0284179 0.0581021, + -0.0223063 0.0334229 0.0581021, -0.0153653 0.0370849 0.0581021, -0.00783327 0.039404 0.0581021, + -2.73498e-007 0.0401369 0.0581021, 0.00783273 0.039404 0.0581021, 0.0153647 0.0370849 0.0581021, + 0.0223057 0.0334229 0.0581021, 0.0283907 0.0284179 0.058102, 0.0333817 0.022314 0.058102, 0.0370937 0.0153559 0.058102, + 0.0393787 0.00778795 0.058102, -0.0407983 -2.40931e-005 0.0581021, -0.0400163 -0.00795902 0.0581021, + -0.0376933 -0.0156491 0.0581021, -0.0339243 -0.0227291 0.0581021, -0.0288513 -0.028833 0.0581021, + -0.0226673 -0.03396 0.0581021, -0.0156143 -0.0377441 0.0581021, -0.00796026 -0.040063 0.0581021, + -2.54851e-007 -0.040796 0.0581021, 0.00795974 -0.040063 0.0581021, 0.0156137 -0.037744 0.058102, 0.0226667 -0.03396 0.058102, + 0.0288507 -0.028833 0.058102, 0.0339237 -0.022729 0.058102, 0.0376927 -0.0156491 0.058102, 0.0400157 -0.007959 0.058102, + 0.0407977 -2.40743e-005 0.058102, 0.0400157 0.00791002 0.058102, 0.0376927 0.0156009 0.058102, 0.0339237 0.022681 0.058102, + 0.0288507 0.028906 0.058102, 0.0226667 0.033911 0.058102, 0.0156137 0.0376949 0.0581021, 0.00795973 0.040015 0.0581021, + -2.73639e-007 0.0407469 0.0581021, -0.00796027 0.040015 0.0581021, -0.0156143 0.0376949 0.0581021, + -0.0226673 0.033911 0.0581021, -0.0288513 0.028906 0.0581021, -0.0339243 0.022681 0.0581021, -0.0376933 0.0156009 0.0581021, + -0.0400163 0.00791 0.0581021, 0.0409007 -2.40743e-005 0.058003, 0.0409997 -2.40743e-005 0.057904, + 0.0402107 -0.007959 0.057904, 0.0378797 -0.0156491 0.057904, 0.0340917 -0.022729 0.057904, 0.0289917 -0.028955 0.057904, + 0.0227777 -0.0340821 0.057904, 0.0156897 -0.037866 0.057904, 0.00799774 -0.040186 0.0579041, + -2.5484e-007 -0.0410401 0.0579041, -0.00799826 -0.0401861 0.0579041, -0.0156903 -0.037866 0.0579041, + -0.0227783 -0.0340821 0.0579041, -0.0289923 -0.028955 0.0579041, -0.0340923 -0.0227291 0.0579041, + -0.0378803 -0.0156491 0.0579041, -0.0402113 -0.00795902 0.0579041, -0.0410003 -2.40932e-005 0.0579041, + -0.0409013 -2.40931e-005 0.0580031, -0.0402113 0.00803195 0.0579041, -0.0378803 0.015723 0.0579041, + -0.0340923 0.0228029 0.0579041, -0.0289923 0.0290279 0.0579041, -0.0227783 0.0340329 0.0579041, + -0.0156903 0.0379389 0.0579041, -0.00799827 0.040259 0.0579041, -2.73741e-007 0.0409909 0.0579041, + 0.00799773 0.040259 0.0579041, 0.0156897 0.037939 0.0579041, 0.0227777 0.0340329 0.057904, 0.0289917 0.0290279 0.057904, + 0.0340917 0.022803 0.057904, 0.0378797 0.015723 0.057904, 0.0402107 0.00803197 0.057904, -0.0241763 -0.033105 0.0557981, + -0.0312233 -0.0265141 0.0557981, -0.0365523 -0.018579 0.0557981, -0.0398713 -0.00954605 0.0557981, + -0.0410003 -2.40931e-005 0.0557981, -0.0410003 -2.40931e-005 0.0568511, 0.0409997 -2.40742e-005 0.056851, + 0.0409997 -2.40742e-005 0.055798, 0.0401417 -0.00832498 0.055798, 0.0376087 -0.016382 0.055798, 0.0335037 -0.023584 0.055798, + 0.0279957 -0.029932 0.055798, 0.0213197 -0.035059 0.055798, 0.0137527 -0.038599 0.055798, 0.00560974 -0.040552 0.0557981, + -0.00276626 -0.040918 0.0557981, -0.00496826 -0.040674 0.0561181, -0.00715626 -0.0404301 0.0563781, + -0.00932826 -0.0399411 0.0565611, -0.0112173 -0.039453 0.0566681, -0.0130903 -0.038843 0.0567291, + -0.0149523 -0.038232 0.0567291, -0.0167603 -0.0373781 0.0566681, -0.0185203 -0.036523 0.0565611, + -0.0204703 -0.035547 0.0563781, -0.0223563 -0.0343261 0.0561181, -0.0402113 0.00803195 0.0557981, + -0.0378803 0.015723 0.0557981, -0.0340923 0.0228029 0.0557981, -0.0289923 0.0290279 0.0557981, -0.0227783 0.0340329 0.0557981, + -0.0156903 0.0379389 0.0557981, -0.00799827 0.040259 0.0557981, -2.74226e-007 0.0409909 0.0557981, + 0.00799773 0.040259 0.0557981, 0.0156897 0.037939 0.0557981, 0.0227777 0.0340329 0.055798, 0.0289917 0.0290279 0.055798, + 0.0340917 0.022803 0.055798, 0.0378797 0.015723 0.055798, 0.0402107 0.00803197 0.055798, 0.0405997 -2.40742e-005 0.055401, + 0.0401987 -2.40743e-005 0.054997, 0.0394097 -0.007959 0.054997, 0.0370747 -0.015527 0.054997, 0.0332827 -0.022485 0.054997, + 0.0281867 -0.0287111 0.054997, 0.0219837 -0.0337161 0.054997, 0.0149167 -0.0373781 0.054997, 0.00726574 -0.039575 0.0549971, + -0.000671256 -0.0401861 0.0549971, -0.00167826 -0.040552 0.0554011, -0.0253223 -0.0312741 0.0549971, + -0.0315843 -0.024927 0.0549971, -0.0362893 -0.017236 0.0549971, -0.0392113 -0.00881304 0.0549971, + -0.0401993 -2.40928e-005 0.0549971, -0.0394293 0.00778793 0.0549971, -0.0371403 0.0153559 0.0549971, + -0.0334243 0.0223139 0.0549971, -0.0284253 0.0284179 0.0549971, -0.0223333 0.0334229 0.0549971, + -0.0153843 0.0370849 0.0549971, -0.00784327 0.039404 0.0549971, -2.74242e-007 0.040259 0.0549971, + 0.00784273 0.039404 0.0549971, 0.0153837 0.0370849 0.0549971, 0.0223327 0.0334229 0.0549971, 0.0284247 0.0284179 0.054997, + 0.0334237 0.022314 0.054997, 0.0371397 0.015356 0.054997, 0.0394287 0.00778795 0.054997, -0.0247903 -0.0321291 0.0554011, + -2.72925e-007 0.03855 0.0590021, -2.73386e-007 0.03855 0.0570031, 0.000784727 0.0384279 0.0570031, + 0.00144973 0.0379389 0.0570031, 0.00189373 0.037329 0.0570031, 0.00204973 0.0364749 0.0570031, 0.00189373 0.0357419 0.0570031, + 0.00144973 0.03501 0.0570031, 0.000784728 0.034644 0.0570031, -2.7243e-007 0.034399 0.0570031, + -2.71969e-007 0.034399 0.0590021, -0.000785272 0.034644 0.0570031, -0.00145027 0.03501 0.0570031, + -0.00189427 0.0357419 0.0570031, -0.00205027 0.0364749 0.0570031, -0.00189427 0.037329 0.0570031, + -0.00145027 0.0379389 0.0570031, -0.000785273 0.0384279 0.0570031, -2.73298e-007 0.037573 0.0564081, + -2.73182e-007 0.0364749 0.0558131, -2.7282e-007 0.035498 0.0564081, -2.5515e-007 -0.038599 0.0590021, + -2.5561e-007 -0.038599 0.0570031, -0.000785256 -0.038354 0.0570031, -0.00145026 -0.0379881 0.0570031, + -0.00189426 -0.037256 0.0570031, -0.00205026 -0.036523 0.0570031, -0.00189426 -0.035669 0.0570031, + -0.00145026 -0.035059 0.0570031, -0.000785257 -0.03457 0.0570031, -2.56567e-007 -0.034448 0.0570031, + -2.56106e-007 -0.034448 0.0590021, 0.000784743 -0.03457 0.0570031, 0.00144974 -0.035059 0.0570031, + 0.00189374 -0.035669 0.0570031, 0.00204974 -0.036523 0.0570031, 0.00189374 -0.037256 0.0570031, + 0.00144974 -0.0379881 0.0570031, 0.000784744 -0.038354 0.0570031, -2.56001e-007 -0.0375 0.0564081, + -2.56363e-007 -0.036523 0.0558131, -2.56479e-007 -0.0354251 0.0564081, 0.0409997 -2.4069e-005 -0.061, + 0.0402107 0.00803198 -0.061, 0.0378797 0.015723 -0.061, 0.0340917 0.022803 -0.061, 0.0289917 0.0290279 -0.061, + 0.0227777 0.0340329 -0.061, 0.0156897 0.037939 -0.0609999, 0.0079977 0.040259 -0.0609999, -3.01137e-007 0.0409909 -0.0609999, + -0.0079983 0.040259 -0.0609999, -0.0156903 0.037939 -0.0609999, -0.0227783 0.0340329 -0.0609999, + -0.0289923 0.0290279 -0.0609999, -0.0340923 0.0228029 -0.0609999, -0.0378803 0.015723 -0.0609999, + -0.0402113 0.00803196 -0.0609999, -0.0410003 -2.40879e-005 -0.0609999, -0.0402113 -0.00795902 -0.0609999, + -0.0378803 -0.0156491 -0.0609999, -0.0340923 -0.022729 -0.0609999, -0.0289923 -0.028955 -0.0609999, + -0.0227783 -0.0340821 -0.0609999, -0.0156903 -0.037866 -0.0609999, -0.00799828 -0.040186 -0.0609999, + -2.82236e-007 -0.0410401 -0.0609999, 0.00799772 -0.040186 -0.0609999, 0.0156897 -0.037866 -0.061, 0.0227777 -0.034082 -0.061, + 0.0289917 -0.028955 -0.061, 0.0340917 -0.022729 -0.061, 0.0378797 -0.0156491 -0.061, 0.0402107 -0.007959 -0.061, + -3.00574e-007 0.03855 -0.0609999, 0.000784699 0.038428 -0.0609999, 0.0014497 0.037939 -0.0609999, + 0.0018937 0.037329 -0.0609999, 0.0020497 0.0364749 -0.0609999, 0.0018937 0.0357419 -0.0609999, 0.0014497 0.03501 -0.0609999, + 0.0007847 0.034644 -0.0609999, -2.99618e-007 0.034399 -0.0609999, -0.0007853 0.034644 -0.0609999, + -0.0014503 0.03501 -0.0609999, -0.0018943 0.0357419 -0.0609999, -0.0020503 0.0364749 -0.0609999, + -0.0018943 0.037329 -0.0609999, -0.0014503 0.037939 -0.0609999, -0.000785301 0.0384279 -0.0609999, + -2.83755e-007 -0.034448 -0.0609999, 0.000784716 -0.03457 -0.0609999, 0.00144972 -0.035059 -0.0609999, + 0.00189372 -0.035669 -0.0609999, 0.00204972 -0.036523 -0.0609999, 0.00189372 -0.037256 -0.0609999, + 0.00144972 -0.0379881 -0.0609999, 0.000784717 -0.038354 -0.0609999, -2.82799e-007 -0.038599 -0.0609999, + -0.000785283 -0.038354 -0.0609999, -0.00145028 -0.0379881 -0.0609999, -0.00189428 -0.037256 -0.0609999, + -0.00205028 -0.036523 -0.0609999, -0.00189428 -0.035669 -0.0609999, -0.00145028 -0.035059 -0.0609999, + -0.000785284 -0.03457 -0.0609999, 0.0410997 -2.4069e-005 -0.060901, 0.0411987 -2.4069e-005 -0.060798, + 0.0404087 0.00803198 -0.060798, 0.0380627 0.015723 -0.060798, 0.0342557 0.022925 -0.060798, 0.0291327 0.02915 -0.060798, + 0.0228897 0.034277 -0.060798, 0.0157657 0.038062 -0.0607979, 0.0080377 0.040381 -0.0607979, -3.01146e-007 0.041235 -0.0607979, + -0.0080383 0.040381 -0.0607979, -0.0157663 0.038062 -0.0607979, -0.0228903 0.034277 -0.0607979, -0.0291333 0.02915 -0.0607979, + -0.0342563 0.022925 -0.0607979, -0.0380633 0.015723 -0.0607979, -0.0404093 0.00803196 -0.0607979, + -0.0411993 -2.4088e-005 -0.0607979, -0.0411003 -2.40879e-005 -0.0609009, -0.0404093 -0.00808109 -0.0607979, + -0.0380633 -0.015771 -0.0607979, -0.0342563 -0.0228521 -0.0607979, -0.0291333 -0.0290771 -0.0607979, + -0.0228903 -0.034204 -0.0607979, -0.0157663 -0.03811 -0.0607979, -0.00803828 -0.0404301 -0.0607979, + -2.82162e-007 -0.041162 -0.0607979, 0.00803772 -0.0404301 -0.0607979, 0.0157657 -0.03811 -0.060798, + 0.0228897 -0.034204 -0.060798, 0.0291327 -0.029077 -0.060798, 0.0342557 -0.0228521 -0.060798, 0.0380627 -0.015771 -0.060798, + 0.0404087 -0.00808107 -0.060798, 0.0411987 -2.4069e-005 -0.06055, 0.0411987 -2.4069e-005 -0.060298, + 0.0404087 0.00803198 -0.060298, 0.0380627 0.015723 -0.060298, 0.0342557 0.022925 -0.060298, 0.0291327 0.02915 -0.060298, + 0.0228897 0.034277 -0.060298, 0.0157657 0.038062 -0.0602979, 0.0080377 0.040381 -0.0602979, -3.01031e-007 0.041235 -0.0602979, + -0.0080383 0.040381 -0.0602979, -0.0157663 0.038062 -0.0602979, -0.0228903 0.034277 -0.0602979, -0.0291333 0.02915 -0.0602979, + -0.0342563 0.022925 -0.0602979, -0.0380633 0.015723 -0.0602979, -0.0404093 0.00803196 -0.0602979, + -0.0411993 -2.4088e-005 -0.0602979, -0.0411993 -2.4088e-005 -0.0605499, -0.0404093 -0.00808109 -0.0602979, + -0.0380633 -0.015771 -0.0602979, -0.0342563 -0.0228521 -0.0602979, -0.0291333 -0.0290771 -0.0602979, + -0.0228903 -0.034204 -0.0602979, -0.0157663 -0.03811 -0.0602979, -0.00803828 -0.0404301 -0.0602979, + -2.82047e-007 -0.041162 -0.0602979, 0.00803772 -0.0404301 -0.0602979, 0.0157657 -0.03811 -0.060298, + 0.0228897 -0.034204 -0.060298, 0.0291327 -0.029077 -0.060298, 0.0342557 -0.0228521 -0.060298, 0.0380627 -0.015771 -0.060298, + 0.0404087 -0.00808107 -0.060298, 0.0410997 -2.4069e-005 -0.060199, 0.0409997 -2.40691e-005 -0.0601, + 0.0402107 0.00803198 -0.0601, 0.0378797 0.015723 -0.0601, 0.0340917 0.022803 -0.0601, 0.0289917 0.0290279 -0.0601, + 0.0227777 0.0340329 -0.0601, 0.0156897 0.037939 -0.0600999, 0.0079977 0.040259 -0.0600999, -3.00929e-007 0.0409909 -0.0600999, + -0.0079983 0.040259 -0.0600999, -0.0156903 0.037939 -0.0600999, -0.0227783 0.0340329 -0.0600999, + -0.0289923 0.0290279 -0.0600999, -0.0340923 0.0228029 -0.0600999, -0.0378803 0.015723 -0.0600999, + -0.0402113 0.00803196 -0.0600999, -0.0410003 -2.4088e-005 -0.0600999, -0.0411003 -2.4088e-005 -0.0601989, + -0.0402113 -0.00795902 -0.0600999, -0.0378803 -0.0156491 -0.0600999, -0.0340923 -0.022729 -0.0600999, + -0.0289923 -0.028955 -0.0600999, -0.0227783 -0.0340821 -0.0600999, -0.0156903 -0.037866 -0.0600999, + -0.00799828 -0.040186 -0.0600999, -2.82029e-007 -0.0410401 -0.0600999, 0.00799772 -0.040186 -0.0600999, + 0.0156897 -0.037866 -0.0601, 0.0227777 -0.034082 -0.0601, 0.0289917 -0.028955 -0.0601, 0.0340917 -0.022729 -0.0601, + 0.0378797 -0.0156491 -0.0601, 0.0402107 -0.007959 -0.0601, 0.0401497 -2.40693e-005 -0.0601, 0.0393787 -0.00783705 -0.0601, + 0.0370937 -0.015405 -0.0601, 0.0333817 -0.0223631 -0.0601, 0.0283907 -0.028345 -0.0601, 0.0223057 -0.03335 -0.0601, + 0.0153647 -0.037134 -0.0601, 0.00783272 -0.0393311 -0.0600999, -2.82226e-007 -0.040186 -0.0600999, + -0.00783328 -0.0393311 -0.0600999, -0.0153653 -0.0371341 -0.0600999, -0.0223063 -0.03335 -0.0600999, + -0.0283913 -0.028345 -0.0600999, -0.0333823 -0.0223631 -0.0600999, -0.0370943 -0.0154051 -0.0600999, + -0.0393793 -0.00783706 -0.0600999, -0.0401503 -2.40878e-005 -0.0600999, -0.0393793 0.00778794 -0.0600999, + -0.0370943 0.0153559 -0.0600999, -0.0333823 0.0223139 -0.0600999, -0.0283913 0.0284179 -0.0600999, + -0.0223063 0.0334229 -0.0600999, -0.0153653 0.0370849 -0.0600999, -0.0078333 0.039404 -0.0600999, + -3.00733e-007 0.0401369 -0.0600999, 0.0078327 0.039404 -0.0600999, 0.0153647 0.0370849 -0.0600999, + 0.0223057 0.033423 -0.0600999, 0.0283907 0.028418 -0.0601, 0.0333817 0.022314 -0.0601, 0.0370937 0.015356 -0.0601, + 0.0393787 0.00778795 -0.0601, -0.0397493 -2.40877e-005 -0.0596999, -0.0397803 -2.40877e-005 -0.0598519, + -0.0398673 -2.40877e-005 -0.0599819, -0.0399973 -2.40877e-005 -0.0600699, 0.0399967 -2.40693e-005 -0.06007, + 0.0398667 -2.40693e-005 -0.059982, 0.0397797 -2.40694e-005 -0.059852, 0.0397487 -2.40694e-005 -0.0597, + 0.0389857 0.00778795 -0.0597, 0.0367237 0.015234 -0.0597, 0.0330507 0.0220699 -0.0597, 0.0281067 0.028052 -0.0597, + 0.0220827 0.033057 -0.0596999, 0.0152117 0.036719 -0.0596999, 0.0077547 0.0390379 -0.0596999, + -3.00556e-007 0.039771 -0.0596999, -0.0077553 0.0390379 -0.0596999, -0.0152123 0.036719 -0.0596999, + -0.0220833 0.033057 -0.0596999, -0.0281073 0.028052 -0.0596999, -0.0330513 0.0220699 -0.0596999, + -0.0367243 0.015234 -0.0596999, -0.0389863 0.00778794 -0.0596999, -0.0389863 -0.00771499 -0.0596999, + -0.0367243 -0.015161 -0.0596999, -0.0330513 -0.0221191 -0.0596999, -0.0281073 -0.028101 -0.0596999, + -0.0220833 -0.033105 -0.0596999, -0.0152123 -0.0367681 -0.0596999, -0.00775528 -0.038965 -0.0596999, + -2.82246e-007 -0.0396971 -0.0596999, 0.00775472 -0.038965 -0.0596999, 0.0152117 -0.0367681 -0.0597, + 0.0220827 -0.033105 -0.0597, 0.0281067 -0.028101 -0.0597, 0.0330507 -0.022119 -0.0597, 0.0367237 -0.015161 -0.0597, + 0.0389857 -0.00771498 -0.0597, 0.0397487 -2.40694e-005 -0.059101, 0.0397487 -2.40694e-005 -0.058502, + 0.0389857 0.00778795 -0.058502, 0.0367237 0.015234 -0.058502, 0.0330507 0.0220699 -0.058502, 0.0281067 0.028052 -0.058502, + 0.0220827 0.033057 -0.0585019, 0.0152117 0.036719 -0.0585019, 0.0077547 0.0390379 -0.0585019, + -3.0028e-007 0.039771 -0.0585019, -0.0077553 0.0390379 -0.0585019, -0.0152123 0.036719 -0.0585019, + -0.0220833 0.033057 -0.0585019, -0.0281073 0.028052 -0.0585019, -0.0330513 0.0220699 -0.0585019, + -0.0367243 0.015234 -0.0585019, -0.0389863 0.00778794 -0.0585019, -0.0397493 -2.40877e-005 -0.0585019, + -0.0397493 -2.40877e-005 -0.0591009, -0.0389863 -0.00771499 -0.0585019, -0.0367243 -0.015161 -0.0585019, + -0.0330513 -0.0221191 -0.0585019, -0.0281073 -0.028101 -0.0585019, -0.0220833 -0.033105 -0.0585019, + -0.0152123 -0.0367681 -0.0585019, -0.00775528 -0.038965 -0.0585019, -2.8197e-007 -0.0396971 -0.0585019, + 0.00775472 -0.038965 -0.0585019, 0.0152117 -0.0367681 -0.058502, 0.0220827 -0.033105 -0.058502, 0.0281067 -0.028101 -0.058502, + 0.0330507 -0.022119 -0.058502, 0.0367237 -0.015161 -0.058502, 0.0389857 -0.00771498 -0.058502, + -0.0401503 -2.40878e-005 -0.0581009, -0.0399973 -2.40878e-005 -0.0581319, -0.0398673 -2.40878e-005 -0.0582159, + -0.0397803 -2.40878e-005 -0.0583449, 0.0397797 -2.40694e-005 -0.058345, 0.0398667 -2.40694e-005 -0.058216, + 0.0399967 -2.40694e-005 -0.058132, 0.0401497 -2.40693e-005 -0.058101, 0.0393787 0.00778795 -0.058101, + 0.0370937 0.015356 -0.058101, 0.0333817 0.022314 -0.0581009, 0.0283907 0.028418 -0.0581009, 0.0223057 0.033423 -0.0581009, + 0.0153647 0.0370849 -0.0581009, 0.0078327 0.039404 -0.0581009, -3.00272e-007 0.0401369 -0.0581009, + -0.0078333 0.039404 -0.0581009, -0.0153653 0.0370849 -0.0581009, -0.0223063 0.0334229 -0.0581009, + -0.0283913 0.0284179 -0.0581009, -0.0333823 0.0223139 -0.0581009, -0.0370943 0.0153559 -0.0581009, + -0.0393793 0.00778794 -0.0581009, -0.0393793 -0.00783706 -0.0581009, -0.0370943 -0.0154051 -0.0581009, + -0.0333823 -0.0223631 -0.0581009, -0.0283913 -0.028345 -0.0581009, -0.0223063 -0.03335 -0.0581009, + -0.0153653 -0.0371341 -0.0581009, -0.00783328 -0.0393311 -0.0581009, -2.81765e-007 -0.040186 -0.0581009, + 0.00783272 -0.0393311 -0.0581009, 0.0153647 -0.037134 -0.0581009, 0.0223057 -0.03335 -0.0581009, + 0.0283907 -0.028345 -0.058101, 0.0333817 -0.0223631 -0.058101, 0.0370937 -0.015405 -0.058101, 0.0393787 -0.00783705 -0.058101, + 0.0407977 -2.40692e-005 -0.058101, 0.0400157 0.00791002 -0.058101, 0.0376927 0.0156009 -0.058101, + 0.0339237 0.022681 -0.0581009, 0.0288507 0.028906 -0.0581009, 0.0226667 0.033911 -0.0581009, 0.0156137 0.0376949 -0.0581009, + 0.0079597 0.040015 -0.0581009, -3.00413e-007 0.0407469 -0.0581009, -0.0079603 0.040015 -0.0581009, + -0.0156143 0.0376949 -0.0581009, -0.0226673 0.033911 -0.0581009, -0.0288513 0.028906 -0.0581009, + -0.0339243 0.022681 -0.0581009, -0.0376933 0.0156009 -0.0581009, -0.0400163 0.00791001 -0.0581009, + -0.0407983 -2.4088e-005 -0.0581009, -0.0400163 -0.00795902 -0.0581009, -0.0376933 -0.0156491 -0.0581009, + -0.0339243 -0.022729 -0.0581009, -0.0288513 -0.028833 -0.0581009, -0.0226673 -0.03396 -0.0581009, + -0.0156143 -0.037744 -0.0581009, -0.00796028 -0.040063 -0.0581009, -2.81625e-007 -0.040796 -0.0581009, + 0.00795972 -0.040063 -0.0581009, 0.0156137 -0.037744 -0.0581009, 0.0226667 -0.03396 -0.0581009, 0.0288507 -0.028833 -0.058101, + 0.0339237 -0.022729 -0.058101, 0.0376927 -0.0156491 -0.058101, 0.0400157 -0.007959 -0.058101, + 0.0409007 -2.40692e-005 -0.057998, 0.0409997 -2.40692e-005 -0.057899, 0.0402107 0.00803198 -0.057899, + 0.0378797 0.015723 -0.057899, 0.0340917 0.022803 -0.0578989, 0.0289917 0.0290279 -0.0578989, 0.0227777 0.0340329 -0.0578989, + 0.0156897 0.037939 -0.0578989, 0.0079977 0.040259 -0.0578989, -3.00422e-007 0.0409909 -0.0578989, + -0.0079983 0.040259 -0.0578989, -0.0156903 0.0379389 -0.0578989, -0.0227783 0.0340329 -0.0578989, + -0.0289923 0.0290279 -0.0578989, -0.0340923 0.0228029 -0.0578989, -0.0378803 0.015723 -0.0578989, + -0.0402113 0.00803196 -0.0578989, -0.0410003 -2.40881e-005 -0.0578989, -0.0409013 -2.4088e-005 -0.0579979, + -0.0402113 -0.00795902 -0.0578989, -0.0378803 -0.0156491 -0.0578989, -0.0340923 -0.022729 -0.0578989, + -0.0289923 -0.028955 -0.0578989, -0.0227783 -0.0340821 -0.0578989, -0.0156903 -0.037866 -0.0578989, + -0.00799828 -0.040186 -0.0578989, -2.81522e-007 -0.0410401 -0.0578989, 0.00799772 -0.040186 -0.0578989, + 0.0156897 -0.037866 -0.0578989, 0.0227777 -0.034082 -0.0578989, 0.0289917 -0.028955 -0.057899, 0.0340917 -0.022729 -0.057899, + 0.0378797 -0.0156491 -0.057899, 0.0402107 -0.007959 -0.057899, 0.0409997 -2.40692e-005 -0.05685, + 0.0409997 -2.40693e-005 -0.055801, 0.0402107 0.00803198 -0.055801, 0.0378797 0.015723 -0.055801, 0.0340917 0.022803 -0.055801, + 0.0289917 0.0290279 -0.055801, 0.0227777 0.0340329 -0.055801, 0.0156897 0.037939 -0.0558009, 0.0079977 0.040259 -0.0558009, + -2.99939e-007 0.0409909 -0.0558009, -0.0079983 0.040259 -0.0558009, -0.0156903 0.0379389 -0.0558009, + -0.0227783 0.0340329 -0.0558009, -0.0289923 0.0290279 -0.0558009, -0.0340923 0.0228029 -0.0558009, + -0.0378803 0.015723 -0.0558009, -0.0402113 0.00803196 -0.0558009, -0.0410003 -2.40881e-005 -0.0558009, + -0.0410003 -2.40881e-005 -0.0568499, -0.00276628 -0.040918 -0.0558009, 0.00560972 -0.040552 -0.0558009, + 0.0137527 -0.038599 -0.055801, 0.0213197 -0.035059 -0.055801, 0.0279957 -0.029932 -0.055801, 0.0335037 -0.023584 -0.055801, + 0.0376087 -0.016382 -0.055801, 0.0401417 -0.00832497 -0.055801, -0.0398713 -0.00954605 -0.0558009, + -0.0365523 -0.018579 -0.0558009, -0.0312233 -0.0265141 -0.0558009, -0.0241763 -0.033105 -0.0558009, + -0.0223563 -0.0343261 -0.0561209, -0.0204703 -0.035547 -0.0563769, -0.0185223 -0.036523 -0.0565639, + -0.0167603 -0.0373781 -0.0566709, -0.0149523 -0.038232 -0.0567239, -0.0130903 -0.038843 -0.0567239, + -0.0112173 -0.039453 -0.0566709, -0.00932828 -0.0399411 -0.0565639, -0.00715628 -0.0404301 -0.0563769, + -0.00496828 -0.040674 -0.0561209, 0.0405997 -2.40694e-005 -0.0554, 0.0401987 -2.40695e-005 -0.055, + 0.0394287 0.00778795 -0.055, 0.0371397 0.015356 -0.055, 0.0334237 0.022314 -0.055, 0.0284247 0.028418 -0.055, + 0.0223327 0.033423 -0.0549999, 0.0153837 0.0370849 -0.0549999, 0.0078427 0.039404 -0.0549999, + -2.99586e-007 0.040259 -0.0549999, -0.0078433 0.039404 -0.0549999, -0.0153843 0.0370849 -0.0549999, + -0.0223333 0.0334229 -0.0549999, -0.0284253 0.0284179 -0.0549999, -0.0334243 0.0223139 -0.0549999, + -0.0371403 0.0153559 -0.0549999, -0.0394293 0.00778794 -0.0549999, -0.0401993 -2.4088e-005 -0.0549999, + -0.0392113 -0.00881303 -0.0549999, -0.0362893 -0.017236 -0.0549999, -0.0315843 -0.024927 -0.0549999, + -0.0253223 -0.0312741 -0.0549999, -0.0247903 -0.0321291 -0.0553999, -0.000671281 -0.040186 -0.0549999, + 0.00726572 -0.039575 -0.0549999, 0.0149167 -0.0373781 -0.055, 0.0219837 -0.0337161 -0.055, 0.0281867 -0.0287111 -0.055, + 0.0332827 -0.022485 -0.055, 0.0370747 -0.015527 -0.055, 0.0394097 -0.007959 -0.055, -0.00167828 -0.040552 -0.0553999, + -3.00114e-007 0.03855 -0.0590009, -2.99653e-007 0.03855 -0.0569989, -0.0007853 0.0384279 -0.0569989, + -0.0014503 0.037939 -0.0569989, -0.0018943 0.037329 -0.0569989, -0.0020503 0.0364749 -0.0569989, + -0.0018943 0.0357419 -0.0569989, -0.0014503 0.03501 -0.0569989, -0.000785299 0.034644 -0.0569989, + -2.98696e-007 0.034399 -0.0569989, -2.99157e-007 0.034399 -0.0590009, 0.000784701 0.034644 -0.0569989, + 0.0014497 0.03501 -0.0569989, 0.0018937 0.0357419 -0.0569989, 0.0020497 0.0364749 -0.0569989, 0.0018937 0.037329 -0.0569989, + 0.0014497 0.037939 -0.0569989, 0.0007847 0.0384279 -0.0569989, -2.99291e-007 0.037573 -0.0564069, + -2.98902e-007 0.0364749 -0.0558159, -2.98813e-007 0.035498 -0.0564069, -2.82338e-007 -0.038599 -0.0590009, + -2.81877e-007 -0.038599 -0.0569989, 0.000784718 -0.038354 -0.0569989, 0.00144972 -0.0379881 -0.0569989, + 0.00189372 -0.037256 -0.0569989, 0.00204972 -0.036523 -0.0569989, 0.00189372 -0.035669 -0.0569989, + 0.00144972 -0.035059 -0.0569989, 0.000784717 -0.03457 -0.0569989, -2.82833e-007 -0.034448 -0.0569989, + -2.83295e-007 -0.034448 -0.0590009, -0.000785283 -0.03457 -0.0569989, -0.00145028 -0.035059 -0.0569989, + -0.00189428 -0.035669 -0.0569989, -0.00205028 -0.036523 -0.0569989, -0.00189428 -0.037256 -0.0569989, + -0.00145028 -0.0379881 -0.0569989, -0.000785282 -0.038354 -0.0569989, -2.81994e-007 -0.0375 -0.0564069, + -2.82083e-007 -0.036523 -0.0558159, -2.82472e-007 -0.0354251 -0.0564069, 0.0280147 -0.069116 -0.064998, + -0.0139983 -0.053735 -0.0649979, -0.0150403 -0.063745 -0.0649979, 0.0266377 -0.078882 -0.064998, 0.0352247 0.024634 -0.055, + 0.0352247 0.024634 -0.040296, 0.0352247 0.024634 -0.025594, 0.0295657 0.0312259 -0.025594, 0.0227087 0.0364749 -0.0255939, + 0.0149287 0.040381 -0.0255939, 0.00654371 0.042456 -0.0255939, -0.00210629 0.042944 -0.0255939, + -0.0106723 0.041602 -0.0255939, -0.0188033 0.038672 -0.0255939, -0.0261733 0.034155 -0.0255939, -0.0321693 0.02854 -0.0255939, + -0.0369993 0.021948 -0.0255939, -0.0404853 0.0145019 -0.0255939, -0.0425003 0.00656699 -0.0255939, + -0.0429693 -0.001611 -0.0255939, -0.0418783 -0.00979007 -0.0255939, -0.0392653 -0.01748 -0.0255939, + -0.0352253 -0.024683 -0.0255939, -0.0346763 -0.0254151 -0.0255939, -0.0344353 -0.025781 -0.0402809, + -0.0341913 -0.0260251 -0.0549999, -0.0352253 -0.024683 -0.0549999, -0.0393603 -0.0173581 -0.0549999, + -0.0419813 -0.00930203 -0.0549999, -0.0429923 -0.000879058 -0.0549999, -0.0423473 0.00742196 -0.0549999, + -0.0400773 0.0156009 -0.0549999, -0.0362663 0.023047 -0.0549999, -0.0310613 0.029761 -0.0549999, + -0.0246643 0.035254 -0.0549999, -0.0173193 0.039404 -0.0549999, -0.0093073 0.041968 -0.0549999, + -0.0009383 0.042944 -0.0549999, 0.0074667 0.042334 -0.0549999, 0.0155847 0.0401369 -0.0549999, 0.0231037 0.03623 -0.055, + 0.0297357 0.031104 -0.055, 0.0417247 0.015356 -0.055, 0.0352287 0.024634 -0.025594, 0.0417247 0.015356 -0.025595, + 0.0492707 0.00241698 -0.055, 0.0527757 -0.00625001 -0.050796, 0.0554277 -0.015527 -0.047271, 0.0569377 -0.02395 -0.044862, + 0.0576097 -0.032739 -0.043159, 0.0576397 -0.03457 -0.030371, 0.0576397 -0.035181 -0.025947, 0.0576357 -0.034204 -0.025987, + 0.0576207 -0.033228 -0.026, 0.0571397 -0.025781 -0.026, 0.0560147 -0.018213 -0.026, 0.0518647 -0.00368701 -0.026, + 0.0507237 -0.000879037 -0.025538, 0.0494797 0.00192894 -0.025097, 0.0459057 0.00876499 -0.02547, 0.0417247 0.015356 -0.040298, + 0.0457757 0.00900902 -0.055, 0.0480608 -0.086694 0.044919, 0.0491867 -0.087061 3.88214e-008, 0.0480607 -0.086694 -0.04492, + -0.0248473 -0.060083 -0.0615189, -0.0295093 -0.0583741 -0.0591649, -0.0339663 -0.056787 -0.0564229, + -0.0349923 -0.056421 -0.0156809, -0.0325433 -0.0572751 -0.0121339, -0.0307483 -0.0580081 -0.00826894, + -0.0292843 -0.058496 5.81605e-008, -0.0307483 -0.0580081 0.00827106, -0.0325433 -0.0572751 0.0121351, + -0.0349923 -0.0564211 0.0156831, -0.0339663 -0.056787 0.0564241, -0.0248473 -0.060083 0.0615201, + -0.0200142 -0.061914 0.0634661, -0.0150402 -0.063745 0.0649991, 0.0266378 -0.078882 0.064999, + 0.000320725 -0.0692381 -0.0572509, -0.000488275 -0.068994 -0.0574219, -0.00117428 -0.06875 -0.0579099, + -0.00163228 -0.0686281 -0.0586389, -0.00179328 -0.068506 -0.0595009, -0.00163228 -0.0686281 -0.0603589, + -0.00117428 -0.06875 -0.0610919, -0.000488276 -0.068994 -0.0615799, 0.000320724 -0.0692381 -0.0617519, + 0.00112972 -0.069604 -0.0615799, 0.00181572 -0.069849 -0.0610919, 0.00227472 -0.069971 -0.0603589, + 0.00243572 -0.070093 -0.0595009, 0.00227473 -0.069971 -0.0586389, 0.00181573 -0.069849 -0.0579099, + 0.00112973 -0.069604 -0.0574219, 0.0448607 -0.085474 -0.0152, 0.0456537 -0.08584 -0.015032, 0.0463257 -0.086084 -0.014555, + 0.0467717 -0.0862061 -0.013842, 0.0469277 -0.0862061 -0.013, 0.0467717 -0.0862061 -0.012158, 0.0463257 -0.086084 -0.011445, + 0.0456537 -0.08584 -0.010968, 0.0448607 -0.085474 -0.0108, 0.0440707 -0.085229 -0.010968, 0.0433997 -0.084985 -0.011445, + 0.0429527 -0.0848631 -0.012158, 0.0427967 -0.084741 -0.013, 0.0429527 -0.0848631 -0.013842, 0.0433997 -0.084985 -0.014555, + 0.0440707 -0.085229 -0.015032, -0.0222323 -0.0610601 -0.00754994, -0.0230413 -0.060815 -0.00772094, + -0.0237263 -0.0605711 -0.00820894, -0.0241853 -0.0603271 -0.00893894, -0.0243453 -0.0603271 -0.00979994, + -0.0241853 -0.0603271 -0.0106609, -0.0237263 -0.0605711 -0.0113909, -0.0230413 -0.060815 -0.0118789, + -0.0222323 -0.0610601 -0.0120499, -0.0214213 -0.061426 -0.0118789, -0.0207373 -0.0616701 -0.0113909, + -0.0202773 -0.061792 -0.0106609, -0.0201173 -0.061792 -0.00979994, -0.0202773 -0.061792 -0.00893894, + -0.0207373 -0.0616701 -0.00820894, -0.0214213 -0.061426 -0.00772094, 0.000320753 -0.0692381 0.0617491, + -0.000488248 -0.068994 0.061581, -0.00117425 -0.06875 0.0610931, -0.00163225 -0.0686281 0.0603601, + -0.00179325 -0.068506 0.0594981, -0.00163225 -0.0686281 0.0586361, -0.00117425 -0.06875 0.057911, + -0.000488249 -0.068994 0.0574231, 0.000320752 -0.0692381 0.0572481, 0.00112975 -0.069604 0.0574231, + 0.00181575 -0.069849 0.057911, 0.00227475 -0.069971 0.0586361, 0.00243575 -0.070093 0.0594981, 0.00227475 -0.069971 0.0603601, + 0.00181575 -0.069849 0.0610931, 0.00112975 -0.069604 0.061581, 0.0448607 -0.085474 0.0108, 0.0456537 -0.08584 0.010968, + 0.0463257 -0.086084 0.011445, 0.0467717 -0.0862061 0.012158, 0.0469277 -0.0862061 0.013001, 0.0467717 -0.0862061 0.01384, + 0.0463257 -0.086084 0.014557, 0.0456537 -0.08584 0.015034, 0.0448607 -0.085474 0.015198, 0.0440707 -0.085229 0.015034, + 0.0433997 -0.084985 0.014557, 0.0429527 -0.0848631 0.01384, 0.0427967 -0.084741 0.013001, 0.0429527 -0.0848631 0.012158, + 0.0433997 -0.084985 0.011445, 0.0440707 -0.085229 0.010968, -0.0222323 -0.0610601 0.0120511, -0.0230413 -0.060815 0.0118791, + -0.0237263 -0.0605711 0.0113911, -0.0241853 -0.0603271 0.0106611, -0.0243453 -0.0603271 0.00980006, + -0.0241853 -0.0603271 0.00893806, -0.0237263 -0.0605711 0.00821006, -0.0230413 -0.060815 0.00772106, + -0.0222323 -0.0610601 0.00755006, -0.0214213 -0.0614261 0.00772106, -0.0207373 -0.0616701 0.00821006, + -0.0202773 -0.061792 0.00893806, -0.0201173 -0.061792 0.00980006, -0.0202773 -0.061792 0.0106611, + -0.0207373 -0.0616701 0.0113911, -0.0214213 -0.0614261 0.0118791, -0.0312183 -0.0373781 -0.0568689, + -0.0315743 -0.03689 -0.0409059, -0.0319293 -0.036401 -0.0249409, -0.0327763 -0.0421391 -0.0234609, + -0.0335853 -0.04751 -0.0213869, -0.0325973 -0.0471441 -0.0566479, -0.0330243 -0.027856 -0.0549999, + -0.0330703 -0.027734 -0.0549619, -0.0331193 -0.027734 -0.0549199, -0.0331193 -0.027734 -0.0549619, + -0.0331193 -0.027734 -0.0549999, -0.0336273 -0.02688 -0.0549999, -0.0344353 -0.025781 -0.0402959, + -0.0338863 -0.026636 -0.0256269, -0.0332183 -0.027856 -0.0257249, -0.0327613 -0.028955 -0.0258229, + -0.0323833 -0.030054 -0.0259069, -0.0318113 -0.033228 -0.0255179, -0.0311183 -0.0340821 -0.0567199, + -0.0316963 -0.0310301 -0.0561289, -0.0321243 -0.0298101 -0.0555449, -0.0326583 -0.028589 -0.0549999, + -0.0328373 -0.028223 -0.0549999, 0.0537717 -0.0610601 3.8911e-008, 0.0537297 -0.060693 -0.00386596, + 0.0537987 -0.059717 -0.00764596, 0.0525087 -0.067163 -0.00716396, 0.0511247 -0.074976 -0.00699996, + 0.0498917 -0.082056 -0.00699996, 0.0495907 -0.081934 -0.019, 0.0505067 -0.0766851 -0.019, 0.0526727 -0.064478 -0.018603, + 0.0545957 -0.053735 -0.017463, 0.0559227 -0.045312 -0.02342, 0.0567467 -0.0404301 -0.025148, 0.0576317 -0.03396 -0.034239, + 0.0411487 -0.055444 -0.055, 0.0301987 0.030615 -0.055, 0.0241847 0.035498 -0.055, 0.0173797 0.039282 -0.0549999, + 0.0100037 0.0418459 -0.0549999, 0.0007637 0.042944 -0.0549999, -0.0085113 0.0420899 -0.0549999, + -0.0173873 0.039282 -0.0549999, -0.0254483 0.034644 -0.0549999, -0.0318223 0.028906 -0.0549999, + -0.0369303 0.0220699 -0.0549999, -0.0405693 0.014258 -0.0549999, -0.0425913 0.005957 -0.0549999, + -0.0429503 -0.0021 -0.0549999, -0.0418053 -0.010034 -0.0549999, -0.0392003 -0.017725 -0.0549999, + -0.0330053 -0.027734 -0.0549999, -0.0247693 -0.0321291 -0.0554159, -0.0321243 -0.0298101 -0.0555489, + -0.0276793 -0.037744 -0.0589749, -0.0233693 -0.043726 -0.0614119, -0.00171528 -0.040552 -0.0554159, + -0.0140233 -0.0384771 -0.0567319, -0.0192893 -0.036157 -0.0564989, -0.00113328 -0.05813 -0.0648149, + -0.00011128 -0.052881 -0.0618009, 0.00243872 -0.048242 -0.0587839, 0.00493372 -0.045923 -0.0570289, + 0.00751972 -0.045068 -0.055999, 0.00872172 -0.045068 -0.055812, 0.00980172 -0.045557 -0.055854, 0.0107167 -0.046411 -0.056125, + 0.0114337 -0.04751 -0.0566129, 0.0121657 -0.050684 -0.058162, 0.0118877 -0.054468 -0.060264, 0.00861572 -0.0616701 -0.0648149, + 0.0569037 -0.0237061 -0.044925, 0.0552637 -0.0147951 -0.047508, 0.0527077 -0.00600599 -0.050878, + -0.0330623 -0.027734 -0.0549619, -0.0330163 -0.027734 -0.0549999, -0.0145193 -0.05874 -0.0649979, + -0.0223813 -0.0449461 -0.0618929, -0.0313473 -0.0323731 -0.0564569, -0.0325933 -0.047021 -0.0566479, + -0.0294843 -0.058496 -0.0591769, -0.0248133 -0.060083 -0.0615339, 0.0367047 -0.0211431 -0.0225, 0.0365407 -0.0211431 -0.0225, + 0.0363727 -0.021021 -0.0225, 0.0361817 -0.0217531 -0.022489, 0.0359877 -0.022485 -0.022454, 0.0363457 -0.0217531 -0.022489, + 0.00499973 -0.0362791 -0.0164999, 0.00499973 -0.033594 -0.0164999, 0.00499973 -0.033594 -0.0186209, + 0.00499973 -0.035059 -0.0176109, 0.0305117 -0.015039 -0.0225, 0.0335197 -0.00564002 -0.0225, 0.0337517 0.00412596 -0.0225, + 0.0311907 0.013525 -0.0225, 0.0260447 0.021826 -0.0225, 0.0212817 0.0264649 -0.0224999, 0.0156987 0.0301269 -0.0224999, + 0.00951371 0.0326899 -0.0224999, 0.00296271 0.033911 -0.0224999, -0.00370129 0.0337889 -0.0224999, + -0.0102243 0.032446 -0.0224999, -0.0163543 0.029761 -0.0224999, -0.0218543 0.026099 -0.0224999, + -0.0265163 0.021338 -0.0224999, -0.0301593 0.015723 -0.0224999, -0.0326423 0.00949692 -0.0224999, + -0.0338713 0.002905 -0.0224999, -0.0337983 -0.00368703 -0.0224999, -0.0324253 -0.010278 -0.0224999, + -0.0298083 -0.016382 -0.0224999, -0.0260453 -0.021875 -0.0224999, -0.0264283 -0.0221191 -0.0224999, + -0.0302473 -0.016626 -0.0224999, -0.0329023 -0.0104001 -0.0224999, -0.0342943 -0.00380898 -0.0224999, + -0.0343703 0.00302695 -0.0224999, -0.0331233 0.00961899 -0.0224999, -0.0306023 0.015967 -0.0224999, + -0.0269053 0.021582 -0.0224999, -0.0221773 0.0264649 -0.0224999, -0.0165943 0.030249 -0.0224999, + -0.0103743 0.032935 -0.0224999, -0.00375629 0.034277 -0.0224999, 0.00300671 0.034399 -0.0224999, + 0.00965371 0.0331789 -0.0224999, 0.0159297 0.030615 -0.0224999, 0.0215947 0.026953 -0.0224999, 0.0264277 0.022192 -0.0225, + 0.0282647 0.019751 -0.0225, 0.0423807 -0.000390997 -0.0225, 0.0419807 -0.00576197 -0.0225, 0.0408897 -0.0111331 -0.0225, + 0.0267387 -0.021021 -0.0225, 0.0287817 -0.0180911 -0.0225, 0.0302297 -0.0362791 -0.0165, 0.0327297 -0.029565 -0.020817, + 0.0315567 -0.021021 -0.0225, 0.0222257 -0.025781 -0.021997, 0.0169597 -0.029443 -0.020846, 0.0112007 -0.032129 -0.01957, + 0.00499973 -0.0367681 -0.0160079, 0.00499973 -0.037256 -0.0154999, 0.0174387 -0.037256 -0.0155, 0.0298787 -0.037256 -0.0155, + 0.0300497 -0.0367681 -0.016008, 0.0305117 -0.015039 -0.02, 0.0305117 -0.015039 -0.02125, 0.0220947 -0.025781 -0.021973, + 0.0166567 -0.029687 -0.020775, 0.0110357 -0.032129 -0.0195379, 0.00499973 -0.033594 -0.0175599, + 0.0123737 -0.031641 -0.0164999, 0.0191247 -0.028101 -0.0165, 0.0249117 -0.023096 -0.0165, 0.0294457 -0.016992 -0.0165, + 0.0299947 -0.016016 -0.0165, 0.0305117 -0.015039 -0.0165, 0.0305117 -0.015039 -0.01825, -0.0260453 -0.021875 -0.0199999, + -0.0260453 -0.021875 -0.0223179, -0.0207653 -0.028101 -0.0209459, -0.0183543 -0.0310301 -0.0190549, + -0.0162123 -0.033594 -0.0164999, -0.0260453 -0.021875 -0.0164999, -0.0262373 -0.021997 -0.0224999, + -0.0237413 -0.0254151 -0.0221079, -0.0211473 -0.0284671 -0.0209459, -0.0165963 -0.033838 -0.0164999, + -0.0164053 -0.0337161 -0.0164999, 0.0333707 -0.00649404 -0.0165, 0.0339127 0.00241698 -0.0165, 0.0320967 0.011206 -0.0165, + 0.0280487 0.019263 -0.0165, 0.0220547 0.025854 -0.0164999, 0.0145267 0.0307369 -0.0164999, 0.00598971 0.0334229 -0.0164999, + -0.00296329 0.033911 -0.0164999, -0.0119763 0.031836 -0.0164999, -0.0201053 0.027441 -0.0164999, + -0.0267473 0.020972 -0.0164999, -0.0314123 0.013037 -0.0164999, -0.0337563 0.00412594 -0.0164999, + -0.0336043 -0.00515104 -0.0164999, -0.0309703 -0.0140621 -0.0164999, -0.0260453 -0.021875 -0.0182499, + -0.0309703 -0.0140621 -0.0199999, -0.0336043 -0.00515104 -0.0199999, -0.0337563 0.00412594 -0.0199999, + -0.0314123 0.013037 -0.0199999, -0.0267473 0.020972 -0.0199999, -0.0201053 0.027441 -0.0199999, + -0.0119763 0.031836 -0.0199999, -0.00296329 0.033911 -0.0199999, 0.00598971 0.0334229 -0.0199999, + 0.0145267 0.0307369 -0.0199999, 0.0220547 0.025854 -0.0199999, 0.0280487 0.019263 -0.02, 0.0320967 0.011206 -0.02, + 0.0339127 0.00241698 -0.02, 0.0333707 -0.00649404 -0.02, -0.0175823 -0.0362791 -0.0164999, -0.0170763 -0.035059 -0.0164999, + -0.0314123 -0.012964 -0.0164999, -0.0338713 -0.00295401 -0.0164999, -0.0331953 0.00730001 -0.0164999, + -0.0294463 0.016943 -0.0164999, -0.0256563 0.0223139 -0.0164999, -0.0209223 0.026831 -0.0164999, + -0.0154183 0.030249 -0.0164999, -0.00934629 0.0326899 -0.0164999, -0.00293029 0.033911 -0.0164999, + 0.00359371 0.0337889 -0.0164999, 0.00998471 0.032446 -0.0164999, 0.0160087 0.030005 -0.0164999, 0.0214417 0.026343 -0.0164999, + 0.0260887 0.021826 -0.0164999, 0.0297717 0.0164549 -0.0165, 0.0323597 0.010474 -0.0165, 0.0337557 0.00400401 -0.0165, + 0.0339087 -0.00246607 -0.0165, 0.0328137 -0.00893604 -0.0165, -0.0260453 -0.021875 -0.0211589, + -0.0260453 -0.021875 -0.0224089, -0.0309703 -0.0140621 -0.0224999, -0.0336043 -0.00515104 -0.0224999, + -0.0337563 0.00412595 -0.0224999, -0.0314123 0.013037 -0.0224999, -0.0267473 0.020972 -0.0224999, + -0.0201053 0.027441 -0.0224999, -0.0119763 0.031836 -0.0224999, -0.00296329 0.033911 -0.0224999, + 0.00598971 0.0334229 -0.0224999, 0.0145267 0.0307369 -0.0224999, 0.0220547 0.025854 -0.0224999, 0.0280487 0.019263 -0.0225, + 0.0320967 0.011206 -0.0225, 0.0339127 0.00241698 -0.0225, 0.0333707 -0.00649404 -0.0225, -0.0143263 -0.043481 5.53759e-008, + 0.00674873 -0.043481 5.05201e-008, 0.0278237 -0.043481 4.56643e-008, 0.0282267 -0.042261 -0.00737995, + 0.0294017 -0.038721 -0.01388, -0.00629127 -0.0362791 -0.0164999, -0.0172123 -0.0371341 -0.0157369, + -0.0168633 -0.037866 -0.0149309, -0.0163713 -0.037744 -0.0149819, -0.0158763 -0.037744 -0.0149999, + -0.0143483 -0.0379881 -0.0148119, -0.0129973 -0.0384771 -0.0142359, -0.0113403 -0.039819 -0.0123929, + -0.0108363 -0.040918 -0.0105339, -0.0109813 -0.041772 -0.00854394, -0.0123423 -0.0427491 -0.00572394, + -0.0144743 -0.043115 -0.00389994, -0.0143633 -0.043359 -0.00195794, -0.0231843 -0.0533691 5.6981e-008, + -0.0170823 -0.048242 5.5801e-008, -0.0171183 -0.048242 -0.00172594, -0.0172293 -0.04812 -0.00344194, + -0.0189113 -0.049585 -0.00311794, -0.0206283 -0.0510501 -0.00299994, -0.0207503 -0.050928 -0.00385394, + -0.0221273 -0.050439 -0.00885794, -0.0244943 -0.049585 -0.0134299, -0.0223563 -0.0471441 -0.0142599, + -0.0200543 -0.0447021 -0.0147979, -0.0201893 -0.04458 -0.0150999, -0.0225943 -0.0416501 -0.0192969, + -0.0255223 -0.038232 -0.0225909, -0.0288373 -0.0343261 -0.0248299, -0.0327263 -0.041772 -0.0235689, + -0.0335123 -0.047021 -0.0215979, -0.0345313 -0.056543 -0.0150999, -0.0313703 -0.0577641 -0.00981194, + -0.0295943 -0.0583741 -0.00384494, -0.0194553 -0.043481 -0.0148299, -0.0172143 -0.0371341 -0.0157379, + -0.0170843 -0.035059 -0.0164999, -0.0298233 -0.025049 -0.0241129, -0.0157043 -0.045923 5.55857e-008, + -0.0143633 -0.043359 -0.00195994, -0.0158453 -0.045679 -0.00364994, 0.0497087 -0.015283 -0.026, 0.0476757 -0.020776 -0.026, + 0.0450327 -0.026025 -0.026, 0.0458677 0.000707995 -0.023771, 0.0459017 0.00876499 -0.02547, -0.0338903 -0.026636 -0.0256269, + -0.0303383 -0.016382 -0.0224999, -0.0330163 -0.010034 -0.0224999, -0.0343513 -0.00319804 -0.0224999, + -0.0342943 0.00375997 -0.0224999, -0.0328453 0.0105959 -0.0224999, -0.0300623 0.016943 -0.0224999, + -0.0260603 0.0225589 -0.0224999, -0.0209983 0.0273189 -0.0224999, -0.0150853 0.0309809 -0.0224999, + -0.00856029 0.0334229 -0.0224999, -0.00168729 0.034399 -0.0224999, 0.00525471 0.034155 -0.0224999, + 0.0119827 0.032324 -0.0224999, 0.0182247 0.029272 -0.0224999, 0.0237267 0.025 -0.0225, 0.0317477 0.022192 -0.024047, + 0.0507127 -0.000879037 -0.025534, 0.0459437 0.000707995 -0.023798, 0.0408707 -0.023584 -0.02425, + 0.0299277 -0.0460451 4.50665e-008, 0.0320317 -0.048486 4.44742e-008, 0.0326837 -0.0473881 -0.00812196, + 0.0345687 -0.0440921 -0.015431, 0.0366437 -0.040552 -0.01986, 0.0391727 -0.036157 -0.023208, 0.0420227 -0.0312741 -0.025292, + 0.0327907 -0.029443 -0.020878, 0.0300497 -0.0367681 -0.016009, 0.0282307 -0.042261 -0.00740795, + 0.0429037 -0.054834 4.16894e-008, 0.0537297 -0.060693 -0.00387296, 0.0526917 -0.05874 -0.00861196, + 0.0518757 -0.057642 -0.010088, 0.0515937 -0.056543 -0.011792, 0.0518837 -0.055444 -0.013657, 0.0527187 -0.05459 -0.015431, + 0.0559347 -0.045312 -0.023448, 0.0567547 -0.040308 -0.025158, 0.0513267 -0.029687 -0.026, -0.00170128 -0.057886 -0.0633689, + -0.00189728 -0.057886 -0.0618129, -0.00170728 -0.057886 -0.0602569, -0.00114528 -0.05813 -0.0588069, + -0.000250277 -0.058496 -0.0575629, 0.000918723 -0.058862 -0.0566059, 0.00227972 -0.059351 -0.0560029, + 0.00374172 -0.059839 -0.0558009, 0.00520272 -0.060449 -0.056003, 0.00656372 -0.060937 -0.0566059, + 0.00773172 -0.061304 -0.057563, 0.00862772 -0.0616701 -0.058807, 0.00919072 -0.061914 -0.060257, + 0.00937872 -0.061914 -0.061813, 0.00918372 -0.061914 -0.0633689, 0.00374172 -0.059839 -0.0572509, + 0.00293172 -0.059595 -0.0574219, 0.00224572 -0.059351 -0.0579099, 0.00178772 -0.059229 -0.0586389, + 0.00162672 -0.059106 -0.0595009, 0.00178772 -0.059229 -0.0603589, 0.00224572 -0.059351 -0.0610919, + 0.00293172 -0.059595 -0.0615799, 0.00374172 -0.059839 -0.0617519, 0.00454972 -0.060205 -0.06158, + 0.00523672 -0.060449 -0.061092, 0.00569472 -0.0605711 -0.060359, 0.00585572 -0.060693 -0.059501, + 0.00569472 -0.0605711 -0.058639, 0.00523672 -0.060449 -0.05791, 0.00454972 -0.060205 -0.057422, + -0.00019128 -0.053125 -0.0619389, 0.00215272 -0.04873 -0.0590429, 0.00555872 -0.045557 -0.0567089, + 0.00732472 -0.045068 -0.0560489, 0.00822072 -0.045068 -0.055866, 0.00908172 -0.04519 -0.055801, + 0.00986672 -0.045679 -0.055866, 0.0105437 -0.046167 -0.056049, 0.0115267 -0.047754 -0.056709, 0.0121687 -0.052271 -0.059043, + 0.0110827 -0.0572751 -0.061939, 0.00203072 -0.0646 -0.0572509, 0.00203072 -0.0646 -0.0617519, 0.0487327 -0.081567 -0.019, + 0.0465767 -0.080835 -0.018543, 0.0447457 -0.080103 -0.017243, 0.0435257 -0.079736 -0.015296, 0.0430947 -0.079492 -0.013, + 0.0435257 -0.079736 -0.010704, 0.0447457 -0.080103 -0.00875696, 0.0465767 -0.080835 -0.00745596, + 0.0487327 -0.081567 -0.00699996, 0.0465737 -0.080835 -0.0108, 0.0457797 -0.080469 -0.010968, 0.0451127 -0.080225 -0.011445, + 0.0446617 -0.080103 -0.012158, 0.0445057 -0.080103 -0.013, 0.0446617 -0.080103 -0.013842, 0.0451127 -0.080225 -0.014555, + 0.0457797 -0.080469 -0.015032, 0.0465737 -0.080835 -0.0152, 0.0473627 -0.081079 -0.015032, 0.0480347 -0.081323 -0.014555, + 0.0484807 -0.081445 -0.013842, 0.0486407 -0.081567 -0.013, 0.0484807 -0.081445 -0.012158, 0.0480347 -0.081323 -0.011445, + 0.0473627 -0.081079 -0.010968, 0.0542487 -0.055688 -0.017741, 0.0531807 -0.054346 -0.01607, 0.0519937 -0.055322 -0.013987, + 0.0515937 -0.056543 -0.011737, 0.0521807 -0.05813 -0.00937996, 0.0524747 -0.067285 -0.00715596, + 0.0499307 -0.078271 -0.00699996, 0.0496217 -0.079126 -0.019, 0.0457187 -0.0831541 -0.0152, 0.0457187 -0.0831541 -0.0108, + -0.0184823 -0.051782 -0.00347894, -0.0166703 -0.052515 -0.00479394, -0.0154673 -0.052881 -0.00674294, + -0.0150533 -0.0530031 -0.00903394, -0.0154913 -0.052881 -0.0113199, -0.0167143 -0.0523931 -0.0132549, + -0.0185393 -0.051782 -0.0145459, -0.0206913 -0.0510501 -0.0149999, -0.0227303 -0.0503171 -0.0145939, + -0.0236633 -0.0499511 -0.0140989, -0.0230793 -0.050073 -0.0109799, -0.0219543 -0.050562 -0.00840594, + -0.0188103 -0.0516601 -0.00754994, -0.0196213 -0.051416 -0.00772094, -0.0203063 -0.051172 -0.00820894, + -0.0207653 -0.050928 -0.00893894, -0.0209263 -0.050928 -0.00979994, -0.0207653 -0.050928 -0.0106609, + -0.0203063 -0.051172 -0.0113909, -0.0196213 -0.051416 -0.0118789, -0.0188103 -0.0516601 -0.0120499, + -0.0180023 -0.052026 -0.0118789, -0.0173173 -0.052271 -0.0113909, -0.0168573 -0.0523931 -0.0106609, + -0.0166973 -0.0523931 -0.00979994, -0.0168573 -0.0523931 -0.00893894, -0.0173173 -0.052271 -0.00820894, + -0.0180023 -0.052026 -0.00772094, -0.0182843 -0.0443361 -0.0149999, -0.0158463 -0.045679 -0.00364994, + -0.0126623 -0.042871 -0.00534694, -0.0114173 -0.042261 -0.00724794, -0.0108133 -0.041162 -0.0100699, + -0.0114973 -0.039575 -0.0126869, -0.0125163 -0.038721 -0.0138909, -0.0139783 -0.0379881 -0.0146999, + -0.0205213 -0.056421 -0.00754994, -0.0205213 -0.056421 -0.0120499, 0.0280148 -0.069116 0.064999, + -0.0139983 -0.053735 0.0649991, -0.0341913 -0.0260251 0.0549971, -0.0344353 -0.025781 0.0402801, + -0.0346763 -0.0254151 0.0255931, -0.0352253 -0.024683 0.0255931, -0.0392653 -0.01748 0.0255931, + -0.0418783 -0.00979008 0.0255931, -0.0429693 -0.00161101 0.0255931, -0.0425003 0.00656699 0.0255931, + -0.0404853 0.0145019 0.0255931, -0.0369993 0.021948 0.0255931, -0.0321693 0.02854 0.0255931, -0.0261733 0.034155 0.0255931, + -0.0188033 0.038672 0.0255931, -0.0106723 0.041602 0.0255931, -0.00210628 0.042944 0.0255931, 0.00654372 0.042456 0.0255931, + 0.0149287 0.040381 0.0255931, 0.0227087 0.0364749 0.0255931, 0.0295657 0.0312259 0.025593, 0.0352247 0.024634 0.025593, + 0.0352247 0.024634 0.040295, 0.0352247 0.024634 0.054997, 0.0297357 0.031104 0.054997, 0.0231037 0.03623 0.054997, + 0.0155847 0.0401369 0.0549971, 0.00746673 0.042334 0.0549971, -0.000938275 0.042944 0.0549971, -0.00930727 0.041968 0.0549971, + -0.0173193 0.039404 0.0549971, -0.0246643 0.035254 0.0549971, -0.0310613 0.0297609 0.0549971, -0.0362663 0.023047 0.0549971, + -0.0400773 0.0156009 0.0549971, -0.0423473 0.00742196 0.0549971, -0.0429923 -0.000879063 0.0549971, + -0.0419813 -0.00930203 0.0549971, -0.0393603 -0.0173581 0.0549971, -0.0352253 -0.024683 0.0549971, + 0.0352287 0.024634 0.025593, 0.0417247 0.015356 0.025593, 0.0417247 0.015356 0.054997, 0.0417247 0.015356 0.040299, + 0.0459057 0.00876499 0.025471, 0.0494797 0.00192893 0.025097, 0.0507237 -0.00087904 0.02554, 0.0518647 -0.00368701 0.026001, + 0.0560147 -0.018213 0.026001, 0.0571397 -0.025781 0.026001, 0.0576207 -0.033228 0.026001, 0.0576357 -0.034204 0.025986, + 0.0576397 -0.035181 0.025948, 0.0576397 -0.03457 0.030369, 0.0576097 -0.032739 0.04316, 0.0569377 -0.02395 0.044865, + 0.0554277 -0.015527 0.047268, 0.0527757 -0.00625001 0.050793, 0.0492707 0.00241698 0.054997, 0.0457757 0.00900901 0.054997, + -0.0325973 -0.0471441 0.0566451, -0.0312183 -0.0373781 0.0568741, -0.0315743 -0.03689 0.0409051, + -0.0319293 -0.036401 0.0249411, -0.0327763 -0.0421391 0.0234611, -0.0335853 -0.04751 0.0213861, + -0.0331193 -0.0277341 0.0549971, -0.0331193 -0.0277341 0.0549591, -0.0331193 -0.0277341 0.0549211, + -0.0330703 -0.0277341 0.0549591, -0.0330243 -0.027856 0.0549971, -0.0328373 -0.028223 0.0549971, + -0.0326583 -0.028589 0.0549971, -0.0321243 -0.0298101 0.0555461, -0.0316963 -0.0310301 0.0561341, + -0.0311183 -0.0340821 0.0567211, -0.0318113 -0.0332281 0.0255171, -0.0323833 -0.030054 0.0259061, + -0.0327613 -0.028955 0.0258221, -0.0332183 -0.027856 0.0257271, -0.0338863 -0.026636 0.0256281, + -0.0344353 -0.025781 0.0402951, -0.0336273 -0.02688 0.0549971, 0.0537297 -0.060693 0.00386704, 0.0537987 -0.059717 0.00764504, + 0.0525087 -0.067163 0.00716404, 0.0511247 -0.074976 0.00700004, 0.0498917 -0.082056 0.00700004, 0.0495907 -0.081934 0.019001, + 0.0505067 -0.0766851 0.019001, 0.0526727 -0.064478 0.018601, 0.0545957 -0.053735 0.017464, 0.0559227 -0.045312 0.023419, + 0.0567467 -0.0404301 0.025147, 0.0576317 -0.03396 0.034241, 0.0411487 -0.055444 0.054997, 0.0300177 0.0307369 0.054997, + 0.0237617 0.035864 0.054997, 0.0166737 0.0396479 0.0549971, 0.00900473 0.0420899 0.0549971, 0.000477725 0.042944 0.0549971, + -0.00806727 0.042212 0.0549971, -0.0162933 0.039771 0.0549971, -0.0238673 0.0357419 0.0549971, -0.0310103 0.0297609 0.0549971, + -0.0366973 0.022437 0.0549971, -0.0406613 0.014014 0.0549971, -0.0427213 0.004858 0.0549971, -0.0429043 -0.00283207 0.0549971, + -0.0416833 -0.010522 0.0549971, -0.0390933 -0.017969 0.0549971, -0.0330053 -0.0277341 0.0549971, + 0.0431557 -0.0312741 0.054997, 0.0406417 -0.029687 0.054997, 0.0390047 -0.032129 0.054997, 0.0388717 -0.0323731 0.054997, + 0.0386917 -0.0323731 0.054997, 0.0384977 -0.0323731 0.054997, 0.0383147 -0.0323731 0.054997, 0.0381737 -0.032251 0.054997, + 0.0380967 -0.032007 0.054997, 0.0380967 -0.0317631 0.054997, 0.0381657 -0.031641 0.054997, 0.0398027 -0.029077 0.054997, + 0.0372847 -0.02749 0.054997, 0.0371477 -0.0273681 0.054997, 0.0370667 -0.027124 0.054997, 0.0370667 -0.027002 0.054997, + 0.0371397 -0.0267581 0.054997, 0.0372727 -0.026636 0.054997, 0.0374527 -0.026636 0.054997, 0.0376507 -0.026636 0.054997, + 0.0378297 -0.026636 0.054997, 0.0403477 -0.028345 0.054997, 0.0419807 -0.025781 0.054997, 0.0421177 -0.025659 0.054997, + 0.0422967 -0.025537 0.054997, 0.0424917 -0.025537 0.054997, 0.0426707 -0.025659 0.054997, 0.0428117 -0.025781 0.054997, + 0.0428887 -0.025903 0.054997, 0.0428917 -0.026147 0.054997, 0.0428197 -0.02627 0.054997, 0.0411827 -0.028833 0.054997, + 0.0437007 -0.0304201 0.054997, 0.0438417 -0.030542 0.054997, 0.0439187 -0.030786 0.054997, 0.0439187 -0.0310301 0.054997, + 0.0438497 -0.031152 0.054997, 0.0437127 -0.0312741 0.054997, 0.0435327 -0.031396 0.054997, 0.0433387 -0.031396 0.054997, + 0.0349577 -0.037866 0.054997, 0.0345837 -0.0375 0.054997, 0.0318357 -0.039819 0.054997, 0.0288937 -0.041772 0.054997, + 0.0287127 -0.041895 0.054997, 0.0285187 -0.041895 0.054997, 0.0283387 -0.041772 0.054997, 0.0282057 -0.0416501 0.054997, + 0.0281347 -0.041528 0.054997, 0.0281387 -0.041284 0.054997, 0.0282187 -0.041162 0.054997, 0.0283597 -0.0410401 0.054997, + 0.0312157 -0.038965 0.054997, 0.0338897 -0.0367681 0.054997, 0.0332827 -0.036157 0.054997, 0.0331687 -0.035913 0.054997, + 0.0331497 -0.035669 0.054997, 0.0332337 -0.035547 0.054997, 0.0334007 -0.035303 0.054997, 0.0374757 -0.033105 0.054997, + 0.0376277 -0.0329831 0.054997, 0.0377917 -0.0329831 0.054997, 0.0379487 -0.033105 0.054997, 0.0380777 -0.033228 0.054997, + 0.0381697 -0.03335 0.054997, 0.0382157 -0.0334721 0.054997, 0.0382077 -0.033594 0.054997, 0.0381467 -0.033838 0.054997, + 0.0357477 -0.037744 0.054997, 0.0355867 -0.0379881 0.054997, 0.0353737 -0.0379881 0.054997, 0.0351487 -0.0379881 0.054997, + 0.0222587 -0.045312 0.054997, 0.0220147 -0.04519 0.054997, 0.0219167 -0.04519 0.054997, 0.0218447 -0.045068 0.054997, + 0.0206657 -0.042627 0.054997, 0.0206167 -0.0423831 0.054997, 0.0206197 -0.0423831 0.054997, 0.0206427 -0.042261 0.054997, + 0.0212587 -0.0404301 0.054997, 0.0213567 -0.040308 0.054997, 0.0214287 -0.040186 0.054997, 0.0215127 -0.040186 0.054997, + 0.0240587 -0.038843 0.054997, 0.0242477 -0.038843 0.054997, 0.0243447 -0.038843 0.054997, 0.0244407 -0.038843 0.054997, + 0.0262067 -0.039453 0.054997, 0.0263767 -0.039575 0.054997, 0.0264947 -0.039697 0.054997, 0.0265447 -0.0399411 0.054997, + 0.0265177 -0.040063 0.054997, 0.0264207 -0.040308 0.054997, 0.0262637 -0.0404301 0.054997, 0.0260767 -0.0404301 0.054997, + 0.0258827 -0.0404301 0.054997, 0.0243127 -0.0399411 0.054997, 0.0221387 -0.040918 0.054997, 0.0216557 -0.0423831 0.054997, + 0.0226147 -0.0443361 0.054997, 0.0236447 -0.0443361 0.054997, 0.0263227 -0.043115 0.054997, 0.0268857 -0.042261 0.054997, + 0.0269737 -0.042139 0.054997, 0.0270817 -0.042017 0.054997, 0.0272057 -0.042017 0.054997, 0.0273357 -0.042017 0.054997, + 0.0275797 -0.042139 0.054997, 0.0277497 -0.042261 0.054997, 0.0289917 -0.044824 0.054997, 0.0290407 -0.045068 0.054997, + 0.0290157 -0.04519 0.054997, 0.0289167 -0.0454351 0.054997, 0.0287627 -0.045557 0.054997, 0.0238227 -0.047876 0.054997, + 0.0236337 -0.0479981 0.054997, 0.0234407 -0.0479981 0.054997, 0.0232717 -0.047876 0.054997, 0.0231527 -0.047632 0.054997, + 0.0231037 -0.04751 0.054997, 0.0231297 -0.047266 0.054997, 0.0232277 -0.0471441 0.054997, 0.0233817 -0.047021 0.054997, + 0.0278737 -0.044824 0.054997, 0.0272327 -0.043481 0.054997, 0.0270787 -0.043726 0.054997, 0.0269907 -0.043848 0.054997, + 0.0268817 -0.04397 0.054997, 0.0239637 -0.045312 0.054997, 0.0238397 -0.0454351 0.054997, 0.0237097 -0.0454351 0.054997, + -0.00847826 -0.040063 0.0565001, -0.0140233 -0.0384771 0.0567291, -0.0247693 -0.0321291 0.0554171, + -0.0233693 -0.043726 0.0614131, -0.0187973 -0.0490971 0.0634271, -0.00171526 -0.040552 0.055417, + 0.00861575 -0.0616701 0.0648161, -0.00113325 -0.05813 0.0648161, 0.000986748 -0.050439 0.0602611, + 0.00319975 -0.0473881 0.0581631, 0.00576675 -0.045557 0.0566141, 0.00706175 -0.045068 0.0561261, + 0.00829775 -0.045068 0.055851, 0.00942675 -0.045312 0.0558131, 0.0104067 -0.0460451 0.055996, 0.0117727 -0.048486 0.0570261, + 0.0121877 -0.0519041 0.0587891, 0.0111657 -0.057031 0.0618021, 0.0569037 -0.0237061 0.044926, 0.0552637 -0.0147951 0.047505, + 0.0527077 -0.00600599 0.050877, -0.0330623 -0.0277341 0.0549591, -0.0330163 -0.0277341 0.0549971, + -0.0325933 -0.047021 0.0566451, -0.0313473 -0.0323731 0.0564621, -0.0223813 -0.0449461 0.0618941, + -0.0145192 -0.05874 0.0649991, -0.0199893 -0.061914 0.0634731, -0.0248132 -0.060083 0.0615351, 0.0431557 -0.0312741 0.054501, + 0.0433387 -0.031396 0.054501, 0.0435327 -0.031396 0.054501, 0.0437127 -0.0312741 0.054501, 0.0438497 -0.031152 0.054501, + 0.0439187 -0.0310301 0.054501, 0.0439187 -0.030786 0.054501, 0.0438417 -0.030542 0.054501, 0.0437007 -0.0304201 0.054501, + 0.0411827 -0.028833 0.054501, 0.0428197 -0.02627 0.054501, 0.0428917 -0.026147 0.054501, 0.0428887 -0.025903 0.054501, + 0.0428117 -0.025781 0.054501, 0.0426707 -0.025659 0.054501, 0.0424917 -0.025537 0.054501, 0.0422967 -0.025537 0.054501, + 0.0421177 -0.025659 0.054501, 0.0419807 -0.025781 0.054501, 0.0403477 -0.028345 0.054501, 0.0378297 -0.026636 0.054501, + 0.0376507 -0.026636 0.054501, 0.0374527 -0.026636 0.054501, 0.0372727 -0.026636 0.054501, 0.0371397 -0.0267581 0.054501, + 0.0370667 -0.027002 0.054501, 0.0370667 -0.027124 0.054501, 0.0371477 -0.0273681 0.054501, 0.0372847 -0.02749 0.054501, + 0.0398027 -0.029077 0.054501, 0.0381657 -0.031641 0.054501, 0.0380967 -0.0317631 0.054501, 0.0380967 -0.032007 0.054501, + 0.0381737 -0.032251 0.054501, 0.0383147 -0.0323731 0.054501, 0.0384977 -0.0323731 0.054501, 0.0386917 -0.0323731 0.054501, + 0.0388717 -0.0323731 0.054501, 0.0390047 -0.032129 0.054501, 0.0406417 -0.029687 0.054501, 0.0390047 -0.032129 0.054753, + 0.0381657 -0.031641 0.054753, 0.0372847 -0.02749 0.054753, 0.0378297 -0.026636 0.054753, 0.0419807 -0.025781 0.054753, + 0.0428197 -0.02627 0.054753, 0.0437007 -0.0304201 0.054753, 0.0431557 -0.0312741 0.054753, 0.0345837 -0.0375 0.054501, + 0.0349577 -0.037866 0.054501, 0.0351487 -0.0379881 0.054501, 0.0353737 -0.0379881 0.054501, 0.0355867 -0.0379881 0.054501, + 0.0357477 -0.037744 0.054501, 0.0381467 -0.033838 0.054501, 0.0382077 -0.033594 0.054501, 0.0382157 -0.0334721 0.054501, + 0.0381697 -0.03335 0.054501, 0.0380777 -0.033228 0.054501, 0.0379487 -0.033105 0.054501, 0.0377917 -0.0329831 0.054501, + 0.0376277 -0.0329831 0.054501, 0.0374757 -0.033105 0.054501, 0.0334007 -0.035303 0.054501, 0.0332337 -0.035547 0.054501, + 0.0331497 -0.035669 0.054501, 0.0331687 -0.035913 0.054501, 0.0332827 -0.036157 0.054501, 0.0338897 -0.0367681 0.054501, + 0.0312157 -0.038965 0.054501, 0.0283597 -0.0410401 0.054501, 0.0282187 -0.041162 0.054501, 0.0281387 -0.041284 0.054501, + 0.0281347 -0.041528 0.054501, 0.0282057 -0.0416501 0.054501, 0.0283387 -0.041772 0.054501, 0.0285187 -0.041895 0.054501, + 0.0287127 -0.041895 0.054501, 0.0288937 -0.041772 0.054501, 0.0318357 -0.039819 0.054501, 0.0357477 -0.037744 0.054753, + 0.0349577 -0.037866 0.054753, 0.0374757 -0.033105 0.054753, 0.0381467 -0.033838 0.054753, 0.0332827 -0.036157 0.054753, + 0.0334007 -0.035303 0.054753, 0.0338897 -0.0367681 0.054753, 0.0283597 -0.0410401 0.054753, 0.0288937 -0.041772 0.054753, + 0.0345837 -0.0375 0.054753, 0.0222587 -0.045312 0.054501, 0.0237097 -0.0454351 0.054501, 0.0238397 -0.0454351 0.054501, + 0.0239637 -0.045312 0.054501, 0.0268817 -0.04397 0.054501, 0.0269907 -0.043848 0.054501, 0.0270787 -0.043726 0.054501, + 0.0272327 -0.043481 0.054501, 0.0278737 -0.044824 0.054501, 0.0233817 -0.047021 0.054501, 0.0232277 -0.0471441 0.054501, + 0.0231297 -0.047266 0.054501, 0.0231037 -0.04751 0.054501, 0.0231527 -0.047632 0.054501, 0.0232717 -0.047876 0.054501, + 0.0234407 -0.0479981 0.054501, 0.0236337 -0.0479981 0.054501, 0.0238227 -0.047876 0.054501, 0.0287627 -0.045557 0.054501, + 0.0289167 -0.0454351 0.054501, 0.0290157 -0.04519 0.054501, 0.0290407 -0.045068 0.054501, 0.0289917 -0.044824 0.054501, + 0.0277497 -0.042261 0.054501, 0.0275797 -0.042139 0.054501, 0.0273357 -0.042017 0.054501, 0.0272057 -0.042017 0.054501, + 0.0270817 -0.042017 0.054501, 0.0269737 -0.042139 0.054501, 0.0268857 -0.042261 0.054501, 0.0263227 -0.043115 0.054501, + 0.0236447 -0.0443361 0.054501, 0.0226147 -0.0443361 0.054501, 0.0216557 -0.0423831 0.054501, 0.0221387 -0.040918 0.054501, + 0.0243127 -0.0399411 0.054501, 0.0258827 -0.0404301 0.054501, 0.0260767 -0.0404301 0.054501, 0.0262637 -0.0404301 0.054501, + 0.0264207 -0.040308 0.054501, 0.0265177 -0.040063 0.054501, 0.0265447 -0.0399411 0.054501, 0.0264947 -0.039697 0.054501, + 0.0263767 -0.039575 0.054501, 0.0262067 -0.039453 0.054501, 0.0244407 -0.038843 0.054501, 0.0243447 -0.038843 0.054501, + 0.0242477 -0.038843 0.054501, 0.0240587 -0.038843 0.054501, 0.0215127 -0.040186 0.054501, 0.0214287 -0.040186 0.054501, + 0.0213567 -0.040308 0.054501, 0.0212587 -0.0404301 0.054501, 0.0206427 -0.042261 0.054501, 0.0206197 -0.0423831 0.054501, + 0.0206167 -0.0423831 0.054501, 0.0206657 -0.042627 0.054501, 0.0218447 -0.045068 0.054501, 0.0219167 -0.04519 0.054501, + 0.0220147 -0.04519 0.054501, 0.0222587 -0.045312 0.0547531, 0.0218447 -0.045068 0.0547531, 0.0206657 -0.042627 0.0547531, + 0.0206427 -0.042261 0.0547531, 0.0212587 -0.0404301 0.0547531, 0.0215127 -0.040186 0.0547531, 0.0240587 -0.038843 0.0547531, + 0.0244407 -0.038843 0.0547531, 0.0262067 -0.039453 0.054753, 0.0258827 -0.0404301 0.054753, 0.0268857 -0.042261 0.054753, + 0.0274637 -0.042017 0.054501, 0.0276787 -0.042139 0.054501, 0.0277497 -0.042261 0.054753, 0.0276787 -0.042139 0.054997, + 0.0274637 -0.042017 0.054997, 0.0289917 -0.044824 0.054753, 0.0287627 -0.045557 0.054753, 0.0238227 -0.047876 0.054753, + 0.0233817 -0.047021 0.054753, 0.0270787 -0.043726 0.054753, 0.0268817 -0.04397 0.054753, 0.0239637 -0.045312 0.054753, + 0.0237097 -0.0454351 0.054753, 0.0359877 -0.022485 0.022454, 0.0361817 -0.0217531 0.022488, 0.0363727 -0.021021 0.0225, + 0.0365407 -0.0211431 0.0225, 0.0367047 -0.0211431 0.0225, 0.0363457 -0.0217531 0.022488, 0.00499973 -0.033594 0.0164991, + 0.00499973 -0.033594 0.0186201, 0.00499973 -0.035059 0.0176091, 0.00499973 -0.0362791 0.0164991, 0.0305117 -0.015039 0.0225, + 0.0335197 -0.00564002 0.0225, 0.0337517 0.00412596 0.0225, 0.0311907 0.013525 0.0225, 0.0260447 0.021826 0.0225, + 0.0212817 0.0264649 0.0225001, 0.0156987 0.0301269 0.0225001, 0.00951372 0.0326899 0.0225001, 0.00296272 0.033911 0.0225001, + -0.00370128 0.0337889 0.0225001, -0.0102243 0.032446 0.0225001, -0.0163543 0.029761 0.0225001, -0.0218543 0.026099 0.0225001, + -0.0265163 0.021338 0.0225001, -0.0301593 0.015723 0.0225001, -0.0326423 0.00949692 0.0225001, -0.0338713 0.002905 0.0225001, + -0.0337983 -0.00368703 0.0225001, -0.0324253 -0.010278 0.0225001, -0.0298083 -0.016382 0.0225001, + -0.0260453 -0.021875 0.0225001, -0.0264283 -0.0221191 0.0225001, -0.0282653 -0.0198001 0.0225001, + -0.0315823 -0.01394 0.0225001, -0.0336843 -0.00747098 0.0225001, -0.0344923 -0.000756989 0.0225001, + -0.0339743 0.005957 0.0225001, -0.0321503 0.0125489 0.0225001, -0.0290933 0.01853 0.0225001, -0.0249163 0.023901 0.0225001, + -0.0197813 0.028296 0.0225001, -0.0138863 0.031592 0.0225001, -0.00745928 0.033667 0.0225001, -0.00074428 0.034521 0.0225001, + 0.00599972 0.033911 0.0225001, 0.0125117 0.032202 0.0225001, 0.0185447 0.02915 0.0225001, 0.0238627 0.024878 0.0225001, + 0.0282647 0.019751 0.0225, 0.0423807 -0.000390999 0.0225, 0.0408897 -0.0111331 0.0225, 0.0391197 -0.01626 0.0225, + 0.0267387 -0.021021 0.0225, 0.0287817 -0.0180911 0.0225, 0.0112007 -0.032129 0.0195701, 0.0169597 -0.029443 0.020844, + 0.0222257 -0.025781 0.021996, 0.0315567 -0.021021 0.0225, 0.0327297 -0.029565 0.020817, 0.0302297 -0.0362791 0.016499, + 0.0300497 -0.0367681 0.016007, 0.0298787 -0.037256 0.0155, 0.0174387 -0.037256 0.0155001, 0.00499973 -0.037256 0.0155001, + 0.00499973 -0.0367681 0.016007, 0.0305117 -0.015039 0.020001, 0.0305117 -0.015039 0.01825, 0.0305117 -0.015039 0.016499, + 0.0299947 -0.016016 0.016499, 0.0294457 -0.016992 0.016499, 0.0249117 -0.023096 0.016499, 0.0191247 -0.028101 0.016499, + 0.0123737 -0.031641 0.0164991, 0.00499973 -0.033594 0.0175601, 0.0110357 -0.032129 0.019539, 0.0166567 -0.029687 0.020775, + 0.0220947 -0.025781 0.021973, 0.0305117 -0.015039 0.021248, -0.0162123 -0.033594 0.0164991, -0.0260453 -0.021875 0.0164991, + -0.0260453 -0.021875 0.0200011, -0.0260453 -0.021875 0.0223161, -0.0207653 -0.028101 0.0209471, + -0.0183543 -0.0310301 0.0190551, -0.0165963 -0.033838 0.0164991, -0.0187383 -0.031396 0.0190551, + -0.0211473 -0.0284671 0.0209471, -0.0262373 -0.021997 0.0225001, -0.0164053 -0.0337161 0.0164991, + 0.0333707 -0.00649404 0.020001, 0.0339127 0.00241697 0.020001, 0.0320967 0.011206 0.020001, 0.0280487 0.019263 0.0200011, + 0.0220547 0.025854 0.0200011, 0.0145267 0.0307369 0.0200011, 0.00598972 0.0334229 0.0200011, -0.00296328 0.033911 0.0200011, + -0.0119763 0.031836 0.0200011, -0.0201053 0.027441 0.0200011, -0.0267473 0.020972 0.0200011, -0.0314123 0.013037 0.0200011, + -0.0337563 0.00412594 0.0200011, -0.0336043 -0.00515104 0.0200011, -0.0309703 -0.0140621 0.0200011, + -0.0260453 -0.021875 0.0182501, -0.0309703 -0.0140621 0.0164991, -0.0336043 -0.00515104 0.0164991, + -0.0337563 0.00412594 0.0164991, -0.0314123 0.013037 0.0164991, -0.0267473 0.020972 0.0164991, -0.0201053 0.027441 0.0164991, + -0.0119763 0.031836 0.0164991, -0.00296328 0.033911 0.0164991, 0.00598972 0.0334229 0.0164991, 0.0145267 0.0307369 0.0164991, + 0.0220547 0.025854 0.0164991, 0.0280487 0.019263 0.016499, 0.0320967 0.011206 0.016499, 0.0339127 0.00241697 0.016499, + 0.0333707 -0.00649404 0.016499, 0.0328137 -0.00893604 0.016499, 0.0339087 -0.00246608 0.016499, 0.0337557 0.00400401 0.016499, + 0.0323597 0.010474 0.016499, 0.0297717 0.0164549 0.016499, 0.0260887 0.021826 0.016499, 0.0214417 0.026343 0.0164991, + 0.0160087 0.030005 0.0164991, 0.00998472 0.032446 0.0164991, 0.00359372 0.0337889 0.0164991, -0.00293028 0.033911 0.0164991, + -0.00934628 0.0326899 0.0164991, -0.0154183 0.030249 0.0164991, -0.0209223 0.026831 0.0164991, -0.0256563 0.0223139 0.0164991, + -0.0294463 0.016943 0.0164991, -0.0331953 0.00730001 0.0164991, -0.0338713 -0.00295402 0.0164991, + -0.0314123 -0.012964 0.0164991, -0.0170763 -0.035059 0.0164991, -0.0175823 -0.0362791 0.0164991, 0.0333707 -0.00649404 0.0225, + 0.0339127 0.00241697 0.0225, 0.0320967 0.011206 0.0225, 0.0280487 0.019263 0.0225, 0.0220547 0.025854 0.0225001, + 0.0145267 0.0307369 0.0225001, 0.00598972 0.0334229 0.0225001, -0.00296328 0.033911 0.0225001, -0.0119763 0.031836 0.0225001, + -0.0201053 0.027441 0.0225001, -0.0267473 0.020972 0.0225001, -0.0314123 0.013037 0.0225001, -0.0337563 0.00412594 0.0225001, + -0.0336043 -0.00515104 0.0225001, -0.0309703 -0.0140621 0.0225001, -0.0260453 -0.021875 0.0224081, + -0.0260453 -0.021875 0.0211611, -0.0143633 -0.043359 0.00195906, -0.0144743 -0.043115 0.00389906, + -0.0126163 -0.042871 0.00539606, -0.0113693 -0.042261 0.00735905, -0.0108193 -0.041284 0.00969206, + -0.0111393 -0.040063 0.0119181, -0.0123063 -0.038843 0.0137071, -0.0137833 -0.03811 0.0146301, -0.0158763 -0.037744 0.0150001, + -0.0163713 -0.037744 0.0149811, -0.0168633 -0.037866 0.0149311, -0.0172123 -0.0371341 0.0157361, + -0.00629127 -0.0362791 0.0164991, 0.0294017 -0.038721 0.013878, 0.0282267 -0.042261 0.00738005, + -0.0171183 -0.048242 0.00172506, -0.0172293 -0.04812 0.00344106, -0.0189113 -0.049585 0.00311706, + -0.0206283 -0.0510501 0.00300106, -0.0207503 -0.050928 0.00385306, -0.0221273 -0.050439 0.00885806, + -0.0244943 -0.049585 0.0134281, -0.0223563 -0.0471441 0.0142601, -0.0200543 -0.0447021 0.0147981, + -0.0201893 -0.04458 0.0150991, -0.0225943 -0.0416501 0.0192951, -0.0255223 -0.038232 0.0225911, + -0.0288373 -0.0343261 0.0248301, -0.0327263 -0.041772 0.0235681, -0.0335123 -0.047021 0.0215991, + -0.0345313 -0.056543 0.0150991, -0.0313703 -0.0577641 0.00981206, -0.0295943 -0.0583741 0.00384606, + -0.0194553 -0.043481 0.0148321, -0.0172143 -0.0371341 0.0157361, -0.0170843 -0.035059 0.0164991, + -0.0298233 -0.025049 0.0241131, -0.0158453 -0.045679 0.00364906, 0.0497087 -0.015283 0.026001, 0.0476757 -0.020776 0.026001, + 0.0450327 -0.026025 0.026001, 0.0458677 0.000707993 0.02377, 0.0459017 0.00876499 0.025471, -0.0338903 -0.026636 0.0256281, + -0.0303383 -0.016382 0.0225001, -0.0330163 -0.010034 0.0225001, -0.0343513 -0.00319804 0.0225001, + -0.0342943 0.00375997 0.0225001, -0.0328453 0.0105959 0.0225001, -0.0300623 0.016943 0.0225001, + -0.0260603 0.0225589 0.0225001, -0.0209983 0.0273189 0.0225001, -0.0150853 0.0309809 0.0225001, + -0.00856028 0.0334229 0.0225001, -0.00168728 0.034399 0.0225001, 0.00525472 0.034155 0.0225001, 0.0119827 0.032324 0.0225001, + 0.0182247 0.029272 0.0225001, 0.0237267 0.025 0.0225001, 0.0317477 0.022192 0.024048, -0.000288281 0.041113 0.0249301, + -2.81366e-007 0.041113 0.0249301, 0.000287719 0.041113 0.0249301, 0.000287719 0.038672 0.0240181, + 0.000287719 0.03623 0.0231101, -2.8066e-007 0.03623 0.0231101, -0.000288281 0.03623 0.0231101, + -0.000288281 0.038672 0.0240181, -2.8123e-007 0.0409909 0.0253991, -2.80496e-007 0.0359859 0.0235791, + -0.000288281 0.03855 0.0239871, 0.000287719 0.03855 0.0239871, 0.0326837 -0.0473881 0.00812205, 0.0345687 -0.0440921 0.015431, + 0.0366437 -0.040552 0.01986, 0.0391727 -0.036157 0.023209, 0.0420227 -0.0312741 0.025292, 0.0408707 -0.023584 0.02425, + 0.0327907 -0.029443 0.020878, 0.0300497 -0.0367681 0.016011, 0.0282307 -0.042261 0.00740905, 0.0537297 -0.060693 0.00387204, + 0.0526917 -0.05874 0.00861204, 0.0518757 -0.057642 0.010088, 0.0515937 -0.056543 0.011792, 0.0518837 -0.055444 0.013657, + 0.0527187 -0.05459 0.015431, 0.0559347 -0.045312 0.023449, 0.0567547 -0.040308 0.025158, 0.0513267 -0.029687 0.026001, + 0.0459437 0.000707993 0.023797, 0.0507127 -0.00087904 0.025532, -0.00170125 -0.057886 0.063366, + -0.00189725 -0.057886 0.0618101, -0.00170725 -0.057886 0.0602611, -0.00114525 -0.05813 0.0588041, + -0.000250251 -0.058496 0.0575601, 0.000918749 -0.058862 0.056607, 0.00227975 -0.059351 0.0560041, + 0.00374175 -0.059839 0.0557981, 0.00520275 -0.060449 0.056004, 0.00656375 -0.0609371 0.056607, 0.00773175 -0.061304 0.05756, + 0.00862775 -0.0616701 0.0588041, 0.00919075 -0.061914 0.060261, 0.00937875 -0.061914 0.06181, 0.00918375 -0.061914 0.063366, + 0.00374175 -0.059839 0.0572481, 0.00293175 -0.059595 0.0574231, 0.00224575 -0.059351 0.057911, 0.00178775 -0.059229 0.0586361, + 0.00162675 -0.059106 0.0594981, 0.00178775 -0.059229 0.0603601, 0.00224575 -0.059351 0.0610931, 0.00293175 -0.059595 0.061581, + 0.00374175 -0.059839 0.0617491, 0.00454975 -0.060205 0.061581, 0.00523675 -0.060449 0.061093, 0.00569475 -0.0605711 0.0603601, + 0.00585575 -0.060693 0.059498, 0.00569475 -0.0605711 0.058636, 0.00523675 -0.060449 0.057911, 0.00454975 -0.060205 0.057423, + 0.0110747 -0.0572751 0.061947, 0.0121657 -0.0523931 0.059071, 0.0115297 -0.047754 0.0567141, 0.0105467 -0.046167 0.05605, + 0.00986875 -0.045679 0.055867, 0.00908175 -0.04519 0.055798, 0.00821875 -0.045068 0.055867, 0.00732075 -0.045068 0.0560501, + 0.00555275 -0.045679 0.0567141, 0.00212675 -0.04873 0.0590711, -0.000198251 -0.053125 0.0619471, 0.00203075 -0.0646 0.0572481, + 0.00203075 -0.0646 0.0617491, 0.0487327 -0.081567 0.019001, 0.0465767 -0.080835 0.018544, 0.0447457 -0.080103 0.017243, + 0.0435257 -0.079736 0.015297, 0.0430947 -0.079492 0.013001, 0.0435257 -0.079736 0.010704, 0.0447457 -0.080103 0.00875704, + 0.0465767 -0.080835 0.00745604, 0.0487327 -0.081567 0.00700004, 0.0465737 -0.080835 0.0108, 0.0457797 -0.080469 0.010968, + 0.0451127 -0.080225 0.011445, 0.0446617 -0.080103 0.012158, 0.0445057 -0.080103 0.013001, 0.0446617 -0.080103 0.01384, + 0.0451127 -0.080225 0.014557, 0.0457797 -0.080469 0.015034, 0.0465737 -0.080835 0.015198, 0.0473627 -0.081079 0.015034, + 0.0480347 -0.081323 0.014557, 0.0484807 -0.081445 0.01384, 0.0486407 -0.081567 0.013001, 0.0484807 -0.081445 0.012158, + 0.0480347 -0.081323 0.011445, 0.0473627 -0.081079 0.010968, 0.0524747 -0.0672851 0.00715504, 0.0521807 -0.05813 0.00938104, + 0.0515937 -0.056543 0.011736, 0.0519937 -0.055322 0.013985, 0.0531807 -0.054346 0.016072, 0.0542487 -0.055688 0.017743, + 0.0496217 -0.079126 0.019001, 0.0499307 -0.078271 0.00700004, 0.0457187 -0.0831541 0.015198, 0.0457187 -0.0831541 0.0108, + -0.0230793 -0.050073 0.0109811, -0.0219543 -0.050562 0.00840606, -0.0184823 -0.051782 0.00347906, + -0.0166703 -0.052515 0.00479406, -0.0154673 -0.052881 0.00674306, -0.0150533 -0.0530031 0.00903406, + -0.0154913 -0.052881 0.0113191, -0.0167143 -0.0523931 0.0132531, -0.0185393 -0.051782 0.0145461, + -0.0206913 -0.0510501 0.0150001, -0.0217293 -0.050562 0.0148971, -0.0227303 -0.0503171 0.0145951, + -0.0188103 -0.0516601 0.00755006, -0.0196213 -0.051416 0.00772106, -0.0203063 -0.051172 0.00821006, + -0.0207653 -0.050928 0.00893806, -0.0209263 -0.050928 0.00980006, -0.0207653 -0.050928 0.0106611, + -0.0203063 -0.051172 0.0113911, -0.0196213 -0.051416 0.0118791, -0.0188103 -0.0516601 0.0120511, + -0.0180023 -0.052026 0.0118791, -0.0173173 -0.052271 0.0113911, -0.0168573 -0.0523931 0.0106611, + -0.0166973 -0.0523931 0.00980006, -0.0168573 -0.0523931 0.00893806, -0.0173173 -0.052271 0.00821006, + -0.0180023 -0.052026 0.00772106, -0.0182843 -0.0443361 0.0150001, -0.0158463 -0.045679 0.00364906, + -0.0136623 -0.03811 0.0145801, -0.0125953 -0.038599 0.0139551, -0.0111153 -0.0401861 0.0118511, + -0.0108603 -0.041528 0.00922605, -0.0119993 -0.042627 0.00619705, -0.0205213 -0.056421 0.00755006, + -0.0205213 -0.056421 0.0120511, 0.0403097 -0.007959 0.060902, 0.0379707 -0.015771 0.060902, 0.0341717 -0.0228521 0.060902, + 0.0290617 -0.029077 0.060902, 0.0228347 -0.034204 0.0609021, 0.0157277 -0.0379881 0.0609021, 0.00801775 -0.040308 0.0609021, + -2.5415e-007 -0.0410401 0.0609021, -0.00801825 -0.040308 0.0609021, -0.0157283 -0.0379881 0.0609021, + -0.0228353 -0.034204 0.0609021, -0.0290623 -0.0290771 0.0609021, -0.0341723 -0.0228521 0.0609021, + -0.0379713 -0.015771 0.0609021, -0.0403103 -0.00795902 0.0609021, -0.0403103 0.00803195 0.0609021, + -0.0379713 0.015723 0.0609021, -0.0341723 0.0228029 0.0609021, -0.0290623 0.0290279 0.0609021, -0.0228353 0.034155 0.0609021, + -0.0157283 0.0379389 0.0609021, -0.00801827 0.040259 0.0609021, -2.73078e-007 0.041113 0.0609021, + 0.00801773 0.040259 0.0609021, 0.0157277 0.037939 0.0609021, 0.0228347 0.034155 0.0609021, 0.0290617 0.0290279 0.0609021, + 0.0341717 0.022803 0.0609021, 0.0379707 0.015723 0.060902, 0.0403097 0.00803197 0.060902, 0.0404087 -0.00808107 0.060551, + 0.0380627 -0.015771 0.060551, 0.0342557 -0.0228521 0.060551, 0.0291327 -0.029077 0.060551, 0.0228897 -0.034204 0.060551, + 0.0157657 -0.03811 0.060551, 0.00803775 -0.0404301 0.0605511, -2.54202e-007 -0.041162 0.0605511, + -0.00803825 -0.0404301 0.0605511, -0.0157663 -0.03811 0.0605511, -0.0228903 -0.034204 0.0605511, + -0.0291333 -0.0290771 0.0605511, -0.0342563 -0.0228521 0.0605511, -0.0380633 -0.015771 0.0605511, + -0.0404093 -0.00808109 0.0605511, -0.0404093 0.00803195 0.0605511, -0.0380633 0.015723 0.0605511, + -0.0342563 0.022925 0.0605511, -0.0291333 0.02915 0.0605511, -0.0228903 0.034277 0.0605511, -0.0157663 0.038062 0.0605511, + -0.00803827 0.040381 0.0605511, -2.73187e-007 0.041235 0.0605511, 0.00803773 0.040381 0.0605511, 0.0157657 0.038062 0.0605511, + 0.0228897 0.034277 0.060551, 0.0291327 0.02915 0.060551, 0.0342557 0.022925 0.060551, 0.0380627 0.015723 0.060551, + 0.0404087 0.00803197 0.060551, 0.0403097 -0.007959 0.0602, 0.0379707 -0.015771 0.0602, 0.0341717 -0.0228521 0.0602, + 0.0290617 -0.029077 0.0602, 0.0228347 -0.034204 0.0602001, 0.0157277 -0.0379881 0.0602001, 0.00801775 -0.040308 0.0602001, + -2.54311e-007 -0.0410401 0.0602001, -0.00801825 -0.040308 0.0602001, -0.0157283 -0.0379881 0.0602001, + -0.0228353 -0.034204 0.0602001, -0.0290623 -0.0290771 0.0602001, -0.0341723 -0.0228521 0.0602001, + -0.0379713 -0.015771 0.0602001, -0.0403103 -0.00795902 0.0602001, -0.0403103 0.00803195 0.0602001, + -0.0379713 0.015723 0.0602001, -0.0341723 0.0228029 0.0602001, -0.0290623 0.0290279 0.0602001, -0.0228353 0.034155 0.0602001, + -0.0157283 0.0379389 0.0602001, -0.00801827 0.040259 0.0602001, -2.7324e-007 0.041113 0.0602001, + 0.00801773 0.040259 0.0602001, 0.0157277 0.037939 0.0602001, 0.0228347 0.034155 0.0602001, 0.0290617 0.0290279 0.0602001, + 0.0341717 0.022803 0.0602001, 0.0379707 0.015723 0.0602, 0.0403097 0.00803197 0.0602, -0.0392273 -0.00783707 0.0600701, + -0.0391013 -0.00783707 0.0599871, -0.0390173 -0.007715 0.0598571, -0.0369533 -0.015283 0.0600701, + -0.0368313 -0.015283 0.0599871, -0.0367513 -0.015161 0.0598571, -0.0332573 -0.022241 0.0600701, + -0.0331503 -0.0221191 0.0599871, -0.0330773 -0.0221191 0.0598571, -0.0282823 -0.028223 0.0600701, + -0.0281913 -0.028223 0.0599871, -0.0281303 -0.028101 0.0598571, -0.0222213 -0.033228 0.0600701, + -0.0221483 -0.033105 0.0599871, -0.0221003 -0.033105 0.0598571, -0.0153063 -0.03689 0.0600701, -0.0152573 -0.03689 0.0599871, + -0.0152243 -0.0367681 0.0598571, -0.00780325 -0.039209 0.0600701, -0.00777825 -0.0390871 0.0599871, + -0.00776125 -0.038965 0.0598571, -2.54595e-007 -0.0399411 0.06007, -2.54642e-007 -0.039819 0.059987, + -2.54672e-007 -0.039819 0.0598571, 0.00780275 -0.039209 0.06007, 0.00777775 -0.0390871 0.059987, + 0.00776075 -0.038965 0.0598571, 0.0153057 -0.03689 0.06007, 0.0152567 -0.03689 0.059987, 0.0152237 -0.0367681 0.059857, + 0.0222207 -0.033228 0.06007, 0.0221477 -0.033105 0.059987, 0.0220997 -0.033105 0.059857, 0.0282817 -0.028223 0.06007, + 0.0281907 -0.028223 0.059987, 0.0281297 -0.028101 0.059857, 0.0332567 -0.022241 0.06007, 0.0331497 -0.022119 0.059987, + 0.0330767 -0.022119 0.059857, 0.0369527 -0.015283 0.06007, 0.0368307 -0.015283 0.059987, 0.0367507 -0.015161 0.059857, + 0.0392267 -0.00783705 0.06007, 0.0391007 -0.00783705 0.059987, 0.0390167 -0.00771498 0.059857, 0.0392267 0.00778795 0.06007, + 0.0391007 0.00778795 0.059987, 0.0390167 0.00778795 0.059857, 0.0369527 0.0153559 0.06007, 0.0368307 0.015234 0.059987, + 0.0367507 0.015234 0.059857, 0.0332567 0.022192 0.06007, 0.0331497 0.022192 0.059987, 0.0330767 0.0220699 0.059857, + 0.0282817 0.028296 0.06007, 0.0281907 0.0281739 0.059987, 0.0281297 0.0281739 0.059857, 0.0222207 0.033301 0.06007, + 0.0221477 0.0331789 0.059987, 0.0220997 0.033057 0.0598571, 0.0153057 0.036963 0.06007, 0.0152567 0.036841 0.059987, + 0.0152237 0.036719 0.0598571, 0.00780273 0.039282 0.06007, 0.00777773 0.03916 0.059987, 0.00776073 0.0390379 0.0598571, + -2.73017e-007 0.040015 0.0600701, -2.73008e-007 0.039893 0.0599871, -2.7301e-007 0.039771 0.0598571, + -0.00780327 0.039282 0.0600701, -0.00777827 0.03916 0.0599871, -0.00776127 0.0390379 0.0598571, -0.0153063 0.036963 0.0600701, + -0.0152573 0.036841 0.0599871, -0.0152243 0.036719 0.0598571, -0.0222213 0.033301 0.0600701, -0.0221483 0.0331789 0.0599871, + -0.0221003 0.033057 0.0598571, -0.0282823 0.028296 0.0600701, -0.0281913 0.0281739 0.0599871, -0.0281303 0.0281739 0.0598571, + -0.0332573 0.022192 0.0600701, -0.0331503 0.022192 0.0599871, -0.0330773 0.0220699 0.0598571, -0.0369533 0.0153559 0.0600701, + -0.0368313 0.015234 0.0599871, -0.0367513 0.015234 0.0598571, -0.0392273 0.00778793 0.0600701, + -0.0391013 0.00778793 0.0599871, -0.0390173 0.00778793 0.0598571, 0.0389857 -0.00771498 0.059102, + 0.0367237 -0.015161 0.059102, 0.0330507 -0.022119 0.059102, 0.0281067 -0.028101 0.059102, 0.0220827 -0.033105 0.0591021, + 0.0152117 -0.0367681 0.0591021, 0.00775474 -0.038965 0.0591021, -2.54874e-007 -0.0396971 0.0591021, + -0.00775526 -0.038965 0.0591021, -0.0152123 -0.0367681 0.0591021, -0.0220833 -0.033105 0.0591021, + -0.0281073 -0.028101 0.0591021, -0.0330513 -0.0221191 0.0591021, -0.0367243 -0.015161 0.0591021, + -0.0389863 -0.007715 0.0591021, -0.0389863 0.00778793 0.0591021, -0.0367243 0.015234 0.0591021, + -0.0330513 0.0220699 0.0591021, -0.0281073 0.028052 0.0591021, -0.0220833 0.033057 0.0591021, -0.0152123 0.036719 0.0591021, + -0.00775527 0.0390379 0.0591021, -2.73184e-007 0.039771 0.0591021, 0.00775473 0.0390379 0.0591021, + 0.0152117 0.036719 0.0591021, 0.0220827 0.033057 0.0591021, 0.0281067 0.028052 0.0591021, 0.0330507 0.0220699 0.0591021, + 0.0367237 0.015234 0.059102, 0.0389857 0.00778795 0.059102, -0.0390173 -0.007715 0.0583461, -0.0391013 -0.00783707 0.0582171, + -0.0392273 -0.00783707 0.0581331, -0.0367513 -0.015161 0.0583461, -0.0368313 -0.015283 0.0582171, + -0.0369533 -0.015283 0.0581331, -0.0330773 -0.0221191 0.0583461, -0.0331503 -0.0221191 0.0582171, + -0.0332573 -0.022241 0.0581331, -0.0281303 -0.028101 0.0583461, -0.0281913 -0.028223 0.0582171, + -0.0282823 -0.028223 0.0581331, -0.0221003 -0.033105 0.0583461, -0.0221483 -0.033105 0.0582171, + -0.0222213 -0.033228 0.0581331, -0.0152243 -0.0367681 0.0583461, -0.0152573 -0.03689 0.0582171, -0.0153063 -0.03689 0.0581331, + -0.00776126 -0.038965 0.0583461, -0.00777826 -0.0390871 0.0582171, -0.00780326 -0.039209 0.0581331, + -2.5502e-007 -0.039819 0.0583461, -2.5505e-007 -0.039819 0.0582171, -2.55041e-007 -0.0399411 0.0581331, + 0.00776075 -0.038965 0.0583461, 0.00777774 -0.0390871 0.0582171, 0.00780274 -0.039209 0.0581331, + 0.0152237 -0.0367681 0.058346, 0.0152567 -0.03689 0.058217, 0.0153057 -0.03689 0.0581331, 0.0220997 -0.033105 0.058346, + 0.0221477 -0.033105 0.058217, 0.0222207 -0.033228 0.0581331, 0.0281297 -0.028101 0.058346, 0.0281907 -0.028223 0.058217, + 0.0282817 -0.028223 0.058133, 0.0330767 -0.022119 0.058346, 0.0331497 -0.022119 0.058217, 0.0332567 -0.022241 0.058133, + 0.0367507 -0.015161 0.058346, 0.0368307 -0.015283 0.058217, 0.0369527 -0.015283 0.058133, 0.0390167 -0.00771498 0.058346, + 0.0391007 -0.00783705 0.058217, 0.0392267 -0.00783705 0.058133, 0.0390167 0.00778795 0.058346, 0.0391007 0.00778795 0.058217, + 0.0392267 0.00778795 0.058133, 0.0367507 0.015234 0.058346, 0.0368307 0.015234 0.058217, 0.0369527 0.0153559 0.058133, + 0.0330767 0.0220699 0.058346, 0.0331497 0.022192 0.058217, 0.0332567 0.022192 0.0581331, 0.0281297 0.0281739 0.058346, + 0.0281907 0.0281739 0.058217, 0.0282817 0.028296 0.0581331, 0.0220997 0.033057 0.0583461, 0.0221477 0.0331789 0.0582171, + 0.0222207 0.033301 0.0581331, 0.0152237 0.036719 0.0583461, 0.0152567 0.036841 0.0582171, 0.0153057 0.036963 0.0581331, + 0.00776073 0.0390379 0.0583461, 0.00777773 0.03916 0.0582171, 0.00780273 0.039282 0.0581331, -2.73358e-007 0.039771 0.0583461, + -2.73416e-007 0.039893 0.0582171, -2.73463e-007 0.040015 0.0581331, -0.00776127 0.0390379 0.0583461, + -0.00777827 0.03916 0.0582171, -0.00780327 0.039282 0.0581331, -0.0152243 0.036719 0.0583461, -0.0152573 0.036841 0.0582171, + -0.0153063 0.036963 0.0581331, -0.0221003 0.033057 0.0583461, -0.0221483 0.0331789 0.0582171, -0.0222213 0.033301 0.0581331, + -0.0281303 0.0281739 0.0583461, -0.0281913 0.0281739 0.0582171, -0.0282823 0.028296 0.0581331, -0.0330773 0.0220699 0.0583461, + -0.0331503 0.022192 0.0582171, -0.0332573 0.022192 0.0581331, -0.0367513 0.015234 0.0583461, -0.0368313 0.015234 0.0582171, + -0.0369533 0.0153559 0.0581331, -0.0390173 0.00778793 0.0583461, -0.0391013 0.00778793 0.0582171, + -0.0392273 0.00778793 0.0581331, 0.0401147 -0.007959 0.058003, 0.0377877 -0.0156491 0.058003, 0.0340077 -0.022729 0.058003, + 0.0289207 -0.028955 0.058003, 0.0227217 -0.03396 0.058003, 0.0156517 -0.037744 0.058003, 0.00797874 -0.040063 0.058003, + -2.54846e-007 -0.040918 0.058003, -0.00797926 -0.040063 0.0580031, -0.0156523 -0.0377441 0.0580031, + -0.0227223 -0.03396 0.0580031, -0.0289213 -0.028955 0.0580031, -0.0340083 -0.0227291 0.0580031, + -0.0377883 -0.0156491 0.0580031, -0.0401153 -0.00795902 0.0580031, -0.0401153 0.00803195 0.0580031, + -0.0377883 0.0156009 0.0580031, -0.0340083 0.022681 0.0580031, -0.0289213 0.028906 0.0580031, -0.0227223 0.0340329 0.0580031, + -0.0156523 0.037817 0.0580031, -0.00797927 0.0401369 0.0580031, -2.7369e-007 0.040869 0.0580031, + 0.00797873 0.0401369 0.058003, 0.0156517 0.037817 0.058003, 0.0227217 0.0340329 0.058003, 0.0289207 0.028906 0.058003, + 0.0340077 0.022681 0.058003, 0.0377877 0.0156009 0.058003, 0.0401147 0.00803197 0.058003, 0.0402107 -0.007959 0.056851, + 0.0378797 -0.0156491 0.056851, 0.0340917 -0.022729 0.056851, 0.0289917 -0.028955 0.056851, 0.0227777 -0.0340821 0.0568511, + 0.0156897 -0.037866 0.0568511, 0.00799774 -0.040186 0.0568511, -2.55083e-007 -0.0410401 0.0568511, + -0.00799826 -0.0401861 0.0568511, -0.0156903 -0.037866 0.0568511, -0.0227783 -0.0340821 0.0568511, + -0.0289923 -0.028955 0.0568511, -0.0340923 -0.0227291 0.0568511, -0.0378803 -0.0156491 0.0568511, + -0.0402113 -0.00795902 0.0568511, -0.0402113 0.00803195 0.0568511, -0.0378803 0.015723 0.0568511, + -0.0340923 0.0228029 0.0568511, -0.0289923 0.0290279 0.0568511, -0.0227783 0.0340329 0.0568511, + -0.0156903 0.0379389 0.0568511, -0.00799827 0.040259 0.0568511, -2.73983e-007 0.0409909 0.0568511, + 0.00799773 0.040259 0.0568511, 0.0156897 0.037939 0.0568511, 0.0227777 0.0340329 0.0568511, 0.0289917 0.0290279 0.0568511, + 0.0340917 0.022803 0.0568511, 0.0378797 0.015723 0.056851, 0.0402107 0.00803197 0.056851, 0.0397527 -0.00820302 0.055401, + 0.0372427 -0.0161381 0.055401, 0.0331757 -0.02334 0.055401, 0.0277227 -0.029687 0.055401, 0.0211117 -0.034692 0.055401, + 0.0136177 -0.038232 0.055401, 0.00555574 -0.0401861 0.0554011, -0.0309183 -0.02627 0.0554011, -0.0361983 -0.018335 0.0554011, + -0.0394823 -0.00942398 0.0554011, -0.0406003 -2.4093e-005 0.0554011, -0.0398223 0.00791 0.0554011, + -0.0375103 0.0156009 0.0554011, -0.0337563 0.0225589 0.0554011, -0.0287093 0.028662 0.0554011, -0.0225563 0.0337889 0.0554011, + -0.0155373 0.037451 0.0554011, -0.00792127 0.039771 0.0554011, -2.74233e-007 0.040625 0.0554011, + 0.00792073 0.039771 0.0554011, 0.0155367 0.037451 0.0554011, 0.0225557 0.0337889 0.055401, 0.0287087 0.028662 0.055401, + 0.0337557 0.0225589 0.055401, 0.0375097 0.0156009 0.055401, 0.0398217 0.00791002 0.055401, 0.000784727 0.0384279 0.0590021, + 0.00144973 0.0379389 0.0590021, 0.00189373 0.037329 0.0590021, 0.00204973 0.0364749 0.0590021, 0.00189373 0.0357419 0.0590021, + 0.00144973 0.03501 0.0590021, 0.000784728 0.034644 0.0590021, -0.000785272 0.034644 0.0590021, -0.00145027 0.03501 0.0590021, + -0.00189427 0.0357419 0.0590021, -0.00205027 0.0364749 0.0590021, -0.00189427 0.037329 0.0590021, + -0.00145027 0.0379389 0.0590021, -0.000785273 0.0384279 0.0590021, 0.000391727 0.037451 0.0564081, + 0.000724727 0.037207 0.0564081, 0.000946727 0.036841 0.0564081, 0.00102473 0.0364749 0.0564081, + 0.000946727 0.036108 0.0564081, 0.000724727 0.0357419 0.0564081, 0.000391727 0.035498 0.0564081, + -0.000392273 0.035498 0.0564081, -0.000725273 0.0357419 0.0564081, -0.000947273 0.036108 0.0564081, + -0.00102527 0.0364749 0.0564081, -0.000947273 0.036841 0.0564081, -0.000725273 0.037207 0.0564081, + -0.000392273 0.037451 0.0564081, -0.000785255 -0.038354 0.0590021, -0.00145026 -0.0379881 0.0590021, + -0.00189426 -0.037256 0.0590021, -0.00205026 -0.036523 0.0590021, -0.00189426 -0.035669 0.0590021, + -0.00145026 -0.035059 0.0590021, -0.000785256 -0.03457 0.0590021, 0.000784744 -0.03457 0.0590021, + 0.00144974 -0.035059 0.0590021, 0.00189374 -0.035669 0.0590021, 0.00204974 -0.036523 0.0590021, + 0.00189374 -0.037256 0.0590021, 0.00144974 -0.0379881 0.0590021, 0.000784745 -0.038354 0.0590021, + -0.000392256 -0.0375 0.0564081, -0.000725256 -0.037256 0.0564081, -0.000947256 -0.03689 0.0564081, + -0.00102526 -0.036523 0.0564081, -0.000947256 -0.036157 0.0564081, -0.000725256 -0.035791 0.0564081, + -0.000392256 -0.035547 0.0564081, 0.000391744 -0.035547 0.0564081, 0.000724744 -0.035791 0.0564081, + 0.000946744 -0.036157 0.0564081, 0.00102474 -0.036523 0.0564081, 0.000946744 -0.03689 0.0564081, + 0.000724744 -0.037256 0.0564081, 0.000391744 -0.0375 0.0564081, 0.0403097 0.00803198 -0.060901, 0.0379707 0.015723 -0.060901, + 0.0341717 0.022803 -0.060901, 0.0290617 0.0290279 -0.060901, 0.0228347 0.034155 -0.060901, 0.0157277 0.037939 -0.0609009, + 0.0080177 0.040259 -0.0609009, -3.01142e-007 0.041113 -0.0609009, -0.0080183 0.040259 -0.0609009, + -0.0157283 0.037939 -0.0609009, -0.0228353 0.034155 -0.0609009, -0.0290623 0.0290279 -0.0609009, + -0.0341723 0.0228029 -0.0609009, -0.0379713 0.015723 -0.0609009, -0.0403103 0.00803196 -0.0609009, + -0.0403103 -0.00795902 -0.0609009, -0.0379713 -0.015771 -0.0609009, -0.0341723 -0.0228521 -0.0609009, + -0.0290623 -0.0290771 -0.0609009, -0.0228353 -0.034204 -0.0609009, -0.0157283 -0.0379881 -0.0609009, + -0.00801828 -0.040308 -0.0609009, -2.82214e-007 -0.0410401 -0.0609009, 0.00801772 -0.040308 -0.0609009, + 0.0157277 -0.0379881 -0.060901, 0.0228347 -0.034204 -0.060901, 0.0290617 -0.029077 -0.060901, 0.0341717 -0.0228521 -0.060901, + 0.0379707 -0.015771 -0.060901, 0.0403097 -0.007959 -0.060901, 0.0404087 0.00803198 -0.06055, 0.0380627 0.015723 -0.06055, + 0.0342557 0.022925 -0.06055, 0.0291327 0.02915 -0.06055, 0.0228897 0.034277 -0.06055, 0.0157657 0.038062 -0.0605499, + 0.0080377 0.040381 -0.0605499, -3.01089e-007 0.041235 -0.0605499, -0.0080383 0.040381 -0.0605499, + -0.0157663 0.038062 -0.0605499, -0.0228903 0.034277 -0.0605499, -0.0291333 0.02915 -0.0605499, -0.0342563 0.022925 -0.0605499, + -0.0380633 0.015723 -0.0605499, -0.0404093 0.00803196 -0.0605499, -0.0404093 -0.00808109 -0.0605499, + -0.0380633 -0.015771 -0.0605499, -0.0342563 -0.0228521 -0.0605499, -0.0291333 -0.0290771 -0.0605499, + -0.0228903 -0.034204 -0.0605499, -0.0157663 -0.03811 -0.0605499, -0.00803828 -0.0404301 -0.0605499, + -2.82105e-007 -0.041162 -0.0605499, 0.00803772 -0.0404301 -0.0605499, 0.0157657 -0.03811 -0.06055, + 0.0228897 -0.034204 -0.06055, 0.0291327 -0.029077 -0.06055, 0.0342557 -0.0228521 -0.06055, 0.0380627 -0.015771 -0.06055, + 0.0404087 -0.00808107 -0.06055, 0.0403097 0.00803198 -0.060199, 0.0379707 0.015723 -0.060199, 0.0341717 0.022803 -0.060199, + 0.0290617 0.0290279 -0.060199, 0.0228347 0.034155 -0.060199, 0.0157277 0.037939 -0.0601989, 0.0080177 0.040259 -0.0601989, + -3.0098e-007 0.041113 -0.0601989, -0.0080183 0.040259 -0.0601989, -0.0157283 0.037939 -0.0601989, + -0.0228353 0.034155 -0.0601989, -0.0290623 0.0290279 -0.0601989, -0.0341723 0.0228029 -0.0601989, + -0.0379713 0.015723 -0.0601989, -0.0403103 0.00803196 -0.0601989, -0.0403103 -0.00795902 -0.0601989, + -0.0379713 -0.015771 -0.0601989, -0.0341723 -0.0228521 -0.0601989, -0.0290623 -0.0290771 -0.0601989, + -0.0228353 -0.034204 -0.0601989, -0.0157283 -0.0379881 -0.0601989, -0.00801828 -0.040308 -0.0601989, + -2.82052e-007 -0.0410401 -0.0601989, 0.00801772 -0.040308 -0.0601989, 0.0157277 -0.0379881 -0.060199, + 0.0228347 -0.034204 -0.060199, 0.0290617 -0.029077 -0.060199, 0.0341717 -0.0228521 -0.060199, 0.0379707 -0.015771 -0.060199, + 0.0403097 -0.007959 -0.060199, -0.0392273 0.00778794 -0.0600699, -0.0391013 0.00778794 -0.0599819, + -0.0390173 0.00778794 -0.0598519, -0.0369533 0.0153559 -0.0600699, -0.0368313 0.015234 -0.0599819, + -0.0367513 0.015234 -0.0598519, -0.0332573 0.022192 -0.0600699, -0.0331503 0.022192 -0.0599819, + -0.0330773 0.0220699 -0.0598519, -0.0282823 0.028296 -0.0600699, -0.0281913 0.0281739 -0.0599819, + -0.0281303 0.0281739 -0.0598519, -0.0222213 0.033301 -0.0600699, -0.0221483 0.0331789 -0.0599819, + -0.0221003 0.033057 -0.0598519, -0.0153063 0.036963 -0.0600699, -0.0152573 0.036841 -0.0599819, + -0.0152243 0.036719 -0.0598519, -0.0078033 0.039282 -0.0600699, -0.0077783 0.03916 -0.0599819, + -0.0077613 0.0390379 -0.0598519, -3.00698e-007 0.040015 -0.0600699, -3.00649e-007 0.039893 -0.0599819, + -3.00591e-007 0.039771 -0.0598519, 0.0078027 0.039282 -0.0600699, 0.0077777 0.03916 -0.0599819, + 0.0077607 0.0390379 -0.0598519, 0.0153057 0.036963 -0.0600699, 0.0152567 0.036841 -0.0599819, 0.0152237 0.036719 -0.0598519, + 0.0222207 0.033301 -0.0600699, 0.0221477 0.0331789 -0.0599819, 0.0220997 0.033057 -0.0598519, 0.0282817 0.028296 -0.06007, + 0.0281907 0.0281739 -0.0599819, 0.0281297 0.0281739 -0.059852, 0.0332567 0.022192 -0.06007, 0.0331497 0.022192 -0.0599819, + 0.0330767 0.0220699 -0.059852, 0.0369527 0.015356 -0.06007, 0.0368307 0.015234 -0.059982, 0.0367507 0.015234 -0.059852, + 0.0392267 0.00778795 -0.06007, 0.0391007 0.00778795 -0.059982, 0.0390167 0.00778795 -0.059852, 0.0392267 -0.00783705 -0.06007, + 0.0391007 -0.00783705 -0.059982, 0.0390167 -0.00771498 -0.059852, 0.0369527 -0.015283 -0.06007, 0.0368307 -0.015283 -0.059982, + 0.0367507 -0.015161 -0.059852, 0.0332567 -0.022241 -0.06007, 0.0331497 -0.022119 -0.059982, 0.0330767 -0.022119 -0.059852, + 0.0282817 -0.028223 -0.06007, 0.0281907 -0.028223 -0.059982, 0.0281297 -0.028101 -0.059852, 0.0222207 -0.033228 -0.06007, + 0.0221477 -0.033105 -0.0599819, 0.0220997 -0.033105 -0.059852, 0.0153057 -0.03689 -0.06007, 0.0152567 -0.03689 -0.0599819, + 0.0152237 -0.0367681 -0.059852, 0.00780272 -0.039209 -0.0600699, 0.00777772 -0.0390871 -0.0599819, + 0.00776072 -0.038965 -0.0598519, -2.82275e-007 -0.0399411 -0.0600699, -2.82283e-007 -0.039819 -0.0599819, + -2.82253e-007 -0.039819 -0.0598519, -0.00780328 -0.039209 -0.0600699, -0.00777828 -0.0390871 -0.0599819, + -0.00776128 -0.038965 -0.0598519, -0.0153063 -0.03689 -0.0600699, -0.0152573 -0.03689 -0.0599819, + -0.0152243 -0.0367681 -0.0598519, -0.0222213 -0.033228 -0.0600699, -0.0221483 -0.033105 -0.0599819, + -0.0221003 -0.033105 -0.0598519, -0.0282823 -0.028223 -0.0600699, -0.0281913 -0.028223 -0.0599819, + -0.0281303 -0.028101 -0.0598519, -0.0332573 -0.022241 -0.0600699, -0.0331503 -0.0221191 -0.0599819, + -0.0330773 -0.0221191 -0.0598519, -0.0369533 -0.015283 -0.0600699, -0.0368313 -0.015283 -0.0599819, + -0.0367513 -0.015161 -0.0598519, -0.0392273 -0.00783706 -0.0600699, -0.0391013 -0.00783706 -0.0599819, + -0.0390173 -0.00771499 -0.0598519, 0.0389857 0.00778795 -0.059101, 0.0367237 0.015234 -0.059101, + 0.0330507 0.0220699 -0.059101, 0.0281067 0.028052 -0.059101, 0.0220827 0.033057 -0.0591009, 0.0152117 0.036719 -0.0591009, + 0.0077547 0.0390379 -0.0591009, -3.00418e-007 0.039771 -0.0591009, -0.0077553 0.0390379 -0.0591009, + -0.0152123 0.036719 -0.0591009, -0.0220833 0.033057 -0.0591009, -0.0281073 0.028052 -0.0591009, + -0.0330513 0.0220699 -0.0591009, -0.0367243 0.015234 -0.0591009, -0.0389863 0.00778794 -0.0591009, + -0.0389863 -0.00771499 -0.0591009, -0.0367243 -0.015161 -0.0591009, -0.0330513 -0.0221191 -0.0591009, + -0.0281073 -0.028101 -0.0591009, -0.0220833 -0.033105 -0.0591009, -0.0152123 -0.0367681 -0.0591009, + -0.00775528 -0.038965 -0.0591009, -2.82108e-007 -0.0396971 -0.0591009, 0.00775472 -0.038965 -0.0591009, + 0.0152117 -0.0367681 -0.059101, 0.0220827 -0.033105 -0.059101, 0.0281067 -0.028101 -0.059101, 0.0330507 -0.022119 -0.059101, + 0.0367237 -0.015161 -0.059101, 0.0389857 -0.00771498 -0.059101, -0.0390173 0.00778794 -0.0583449, + -0.0391013 0.00778794 -0.0582159, -0.0392273 0.00778794 -0.0581319, -0.0367513 0.015234 -0.0583449, + -0.0368313 0.015234 -0.0582159, -0.0369533 0.0153559 -0.0581319, -0.0330773 0.0220699 -0.0583449, + -0.0331503 0.022192 -0.0582159, -0.0332573 0.022192 -0.0581319, -0.0281303 0.0281739 -0.0583449, + -0.0281913 0.0281739 -0.0582159, -0.0282823 0.028296 -0.0581319, -0.0221003 0.033057 -0.0583449, + -0.0221483 0.0331789 -0.0582159, -0.0222213 0.033301 -0.0581319, -0.0152243 0.036719 -0.0583449, + -0.0152573 0.036841 -0.0582159, -0.0153063 0.036963 -0.0581319, -0.0077613 0.0390379 -0.0583449, + -0.0077783 0.03916 -0.0582159, -0.0078033 0.039282 -0.0581319, -3.00244e-007 0.039771 -0.0583449, + -3.00242e-007 0.039893 -0.0582159, -3.00251e-007 0.040015 -0.0581319, 0.0077607 0.0390379 -0.0583449, + 0.0077777 0.03916 -0.0582159, 0.0078027 0.039282 -0.0581319, 0.0152237 0.036719 -0.0583449, 0.0152567 0.036841 -0.0582159, + 0.0153057 0.036963 -0.0581319, 0.0220997 0.033057 -0.0583449, 0.0221477 0.0331789 -0.0582159, 0.0222207 0.033301 -0.0581319, + 0.0281297 0.0281739 -0.058345, 0.0281907 0.0281739 -0.0582159, 0.0282817 0.028296 -0.058132, 0.0330767 0.0220699 -0.058345, + 0.0331497 0.022192 -0.0582159, 0.0332567 0.022192 -0.058132, 0.0367507 0.015234 -0.058345, 0.0368307 0.015234 -0.058216, + 0.0369527 0.015356 -0.058132, 0.0390167 0.00778795 -0.058345, 0.0391007 0.00778795 -0.058216, 0.0392267 0.00778795 -0.058132, + 0.0390167 -0.00771498 -0.058345, 0.0391007 -0.00783705 -0.058216, 0.0392267 -0.00783705 -0.058132, + 0.0367507 -0.015161 -0.058345, 0.0368307 -0.015283 -0.058216, 0.0369527 -0.015283 -0.058132, 0.0330767 -0.022119 -0.058345, + 0.0331497 -0.022119 -0.058216, 0.0332567 -0.022241 -0.058132, 0.0281297 -0.028101 -0.058345, 0.0281907 -0.028223 -0.058216, + 0.0282817 -0.028223 -0.058132, 0.0220997 -0.033105 -0.058345, 0.0221477 -0.033105 -0.0582159, 0.0222207 -0.033228 -0.058132, + 0.0152237 -0.0367681 -0.058345, 0.0152567 -0.03689 -0.0582159, 0.0153057 -0.03689 -0.058132, 0.00776072 -0.038965 -0.0583449, + 0.00777772 -0.0390871 -0.0582159, 0.00780272 -0.039209 -0.0581319, -2.81906e-007 -0.039819 -0.0583449, + -2.81876e-007 -0.039819 -0.0582159, -2.81829e-007 -0.0399411 -0.0581319, -0.00776128 -0.038965 -0.0583449, + -0.00777828 -0.0390871 -0.0582159, -0.00780328 -0.039209 -0.0581319, -0.0152243 -0.0367681 -0.0583449, + -0.0152573 -0.03689 -0.0582159, -0.0153063 -0.03689 -0.0581319, -0.0221003 -0.033105 -0.0583449, + -0.0221483 -0.033105 -0.0582159, -0.0222213 -0.033228 -0.0581319, -0.0281303 -0.028101 -0.0583449, + -0.0281913 -0.028223 -0.0582159, -0.0282823 -0.028223 -0.0581319, -0.0330773 -0.0221191 -0.0583449, + -0.0331503 -0.0221191 -0.0582159, -0.0332573 -0.022241 -0.0581319, -0.0367513 -0.015161 -0.0583449, + -0.0368313 -0.015283 -0.0582159, -0.0369533 -0.015283 -0.0581319, -0.0390173 -0.00771499 -0.0583449, + -0.0391013 -0.00783706 -0.0582159, -0.0392273 -0.00783706 -0.0581319, 0.0401147 0.00803198 -0.057998, + 0.0377877 0.0156009 -0.057998, 0.0340077 0.022681 -0.0579979, 0.0289207 0.028906 -0.0579979, 0.0227217 0.0340329 -0.0579979, + 0.0156517 0.037817 -0.0579979, 0.0079787 0.0401369 -0.0579979, -3.00417e-007 0.040869 -0.0579979, + -0.0079793 0.0401369 -0.0579979, -0.0156523 0.037817 -0.0579979, -0.0227223 0.0340329 -0.0579979, + -0.0289213 0.028906 -0.0579979, -0.0340083 0.022681 -0.0579979, -0.0377883 0.0156009 -0.0579979, + -0.0401153 0.00803196 -0.0579979, -0.0401153 -0.00795902 -0.0579979, -0.0377883 -0.0156491 -0.0579979, + -0.0340083 -0.022729 -0.0579979, -0.0289213 -0.028955 -0.0579979, -0.0227223 -0.03396 -0.0579979, + -0.0156523 -0.037744 -0.0579979, -0.00797928 -0.040063 -0.0579979, -2.81573e-007 -0.040918 -0.0579979, + 0.00797872 -0.040063 -0.0579979, 0.0156517 -0.037744 -0.0579979, 0.0227217 -0.03396 -0.0579979, 0.0289207 -0.028955 -0.057998, + 0.0340077 -0.022729 -0.057998, 0.0377877 -0.0156491 -0.057998, 0.0401147 -0.007959 -0.057998, 0.0402107 0.00803198 -0.05685, + 0.0378797 0.015723 -0.05685, 0.0340917 0.022803 -0.05685, 0.0289917 0.0290279 -0.05685, 0.0227777 0.0340329 -0.05685, + 0.0156897 0.037939 -0.0568499, 0.0079977 0.040259 -0.0568499, -3.00181e-007 0.0409909 -0.0568499, + -0.0079983 0.040259 -0.0568499, -0.0156903 0.0379389 -0.0568499, -0.0227783 0.0340329 -0.0568499, + -0.0289923 0.0290279 -0.0568499, -0.0340923 0.0228029 -0.0568499, -0.0378803 0.015723 -0.0568499, + -0.0402113 0.00803196 -0.0568499, -0.0402113 -0.00795902 -0.0568499, -0.0378803 -0.0156491 -0.0568499, + -0.0340923 -0.022729 -0.0568499, -0.0289923 -0.028955 -0.0568499, -0.0227783 -0.0340821 -0.0568499, + -0.0156903 -0.037866 -0.0568499, -0.00799828 -0.040186 -0.0568499, -2.8128e-007 -0.0410401 -0.0568499, + 0.00799772 -0.040186 -0.0568499, 0.0156897 -0.037866 -0.05685, 0.0227777 -0.034082 -0.05685, 0.0289917 -0.028955 -0.05685, + 0.0340917 -0.022729 -0.05685, 0.0378797 -0.0156491 -0.05685, 0.0402107 -0.007959 -0.05685, 0.0398217 0.00791002 -0.0554, + 0.0375097 0.0156009 -0.0554, 0.0337557 0.0225589 -0.0554, 0.0287087 0.028662 -0.0554, 0.0225557 0.0337889 -0.0554, + 0.0155367 0.037451 -0.0553999, 0.0079207 0.039771 -0.0553999, -2.99762e-007 0.040625 -0.0553999, + -0.0079213 0.039771 -0.0553999, -0.0155373 0.037451 -0.0553999, -0.0225563 0.0337889 -0.0553999, + -0.0287093 0.028662 -0.0553999, -0.0337563 0.0225589 -0.0553999, -0.0375103 0.0156009 -0.0553999, + -0.0398223 0.00791001 -0.0553999, -0.0406003 -2.40881e-005 -0.0553999, -0.0394823 -0.00942398 -0.0553999, + -0.0361983 -0.018335 -0.0553999, -0.0309183 -0.02627 -0.0553999, 0.00555572 -0.040186 -0.0553999, 0.0136177 -0.038232 -0.0554, + 0.0211117 -0.034692 -0.0554, 0.0277227 -0.029687 -0.0554, 0.0331757 -0.02334 -0.0554, 0.0372427 -0.0161381 -0.0554, + 0.0397527 -0.00820302 -0.0554, -0.0007853 0.0384279 -0.0590009, -0.0014503 0.037939 -0.0590009, + -0.0018943 0.037329 -0.0590009, -0.0020503 0.0364749 -0.0590009, -0.0018943 0.0357419 -0.0590009, + -0.0014503 0.03501 -0.0590009, -0.000785299 0.034644 -0.0590009, 0.000784701 0.034644 -0.0590009, + 0.0014497 0.03501 -0.0590009, 0.0018937 0.0357419 -0.0590009, 0.0020497 0.0364749 -0.0590009, 0.0018937 0.037329 -0.0590009, + 0.0014497 0.037939 -0.0590009, 0.0007847 0.038428 -0.0590009, -0.000392299 0.037451 -0.0564069, + -0.000725299 0.037207 -0.0564069, -0.000947299 0.036841 -0.0564069, -0.0010253 0.0364749 -0.0564069, + -0.000947299 0.036108 -0.0564069, -0.000725299 0.0357419 -0.0564069, -0.000392299 0.035498 -0.0564069, + 0.000391701 0.035498 -0.0564069, 0.000724701 0.0357419 -0.0564069, 0.000946701 0.036108 -0.0564069, + 0.0010247 0.0364749 -0.0564069, 0.000946701 0.036841 -0.0564069, 0.000724701 0.037207 -0.0564069, + 0.000391701 0.037451 -0.0564069, 0.000784718 -0.038354 -0.0590009, 0.00144972 -0.0379881 -0.0590009, + 0.00189372 -0.037256 -0.0590009, 0.00204972 -0.036523 -0.0590009, 0.00189372 -0.035669 -0.0590009, + 0.00144972 -0.035059 -0.0590009, 0.000784717 -0.03457 -0.0590009, -0.000785283 -0.03457 -0.0590009, + -0.00145028 -0.035059 -0.0590009, -0.00189428 -0.035669 -0.0590009, -0.00205028 -0.036523 -0.0590009, + -0.00189428 -0.037256 -0.0590009, -0.00145028 -0.0379881 -0.0590009, -0.000785282 -0.038354 -0.0590009, + 0.000391718 -0.0375 -0.0564069, 0.000724718 -0.037256 -0.0564069, 0.000946718 -0.03689 -0.0564069, + 0.00102472 -0.036523 -0.0564069, 0.000946718 -0.036157 -0.0564069, 0.000724718 -0.035791 -0.0564069, + 0.000391718 -0.035547 -0.0564069, -0.000392282 -0.035547 -0.0564069, -0.000725282 -0.035791 -0.0564069, + -0.000947282 -0.036157 -0.0564069, -0.00102528 -0.036523 -0.0564069, -0.000947282 -0.03689 -0.0564069, + -0.000725282 -0.037256 -0.0564069, -0.000392282 -0.0375 -0.0564069, 0.0278467 0.032813 -0.040296, + 0.0186627 0.0387939 -0.0402959, 0.0082677 0.042212 -0.0402959, -0.0026643 0.042944 -0.0402959, -0.0134243 0.040869 -0.0402959, + -0.0233123 0.036108 -0.0402959, -0.0316873 0.0290279 -0.0402959, -0.0380023 0.0201169 -0.0402959, + -0.0418553 0.00986301 -0.0402959, -0.0429883 -0.00100101 -0.0402959, -0.0413283 -0.011865 -0.0402959, + -0.0369913 -0.021875 -0.0402959, 0.0566287 -0.0217531 -0.040048, 0.0535847 -0.00869106 -0.040048, + 0.0485757 0.00375999 -0.040048, -0.0314503 -0.03396 -0.0409899, -0.0318973 -0.0310301 -0.0410859, + -0.0328983 -0.028223 -0.0411909, -0.0286353 -0.046777 -0.0589749, -0.0237433 -0.047266 -0.0614119, + 0.0206867 -0.033838 -0.018466, 0.0206867 -0.0298101 -0.020676, 0.0260367 -0.021875 -0.0195, 0.0200517 -0.02749 -0.0195, + 0.0128997 -0.0315191 -0.0195, -0.0235503 -0.025171 -0.0221079, -0.0209563 -0.028345 -0.0209459, + -0.0185473 -0.031152 -0.0190549, -0.0309703 -0.0140621 -0.0182499, -0.0336043 -0.00515104 -0.0182499, + -0.0337563 0.00412594 -0.0182499, -0.0314123 0.013037 -0.0182499, -0.0267473 0.020972 -0.0182499, + -0.0201053 0.027441 -0.0182499, -0.0119763 0.031836 -0.0182499, -0.00296329 0.033911 -0.0182499, + 0.00598971 0.0334229 -0.0182499, 0.0145267 0.0307369 -0.0182499, 0.0220547 0.025854 -0.0182499, 0.0280487 0.019263 -0.01825, + 0.0320967 0.011206 -0.01825, 0.0339127 0.00241698 -0.01825, 0.0333707 -0.00649404 -0.01825, 0.0333707 -0.00649404 -0.02125, + 0.0339127 0.00241698 -0.02125, 0.0320967 0.011206 -0.02125, 0.0280487 0.019263 -0.02125, 0.0220547 0.025854 -0.0212499, + 0.0145267 0.0307369 -0.0212499, 0.00598971 0.0334229 -0.0212499, -0.00296329 0.033911 -0.0212499, + -0.0119763 0.031836 -0.0212499, -0.0201053 0.027441 -0.0212499, -0.0267473 0.020972 -0.0212499, + -0.0314123 0.013037 -0.0212499, -0.0337563 0.00412594 -0.0212499, -0.0336043 -0.00515104 -0.0212499, + -0.0309703 -0.0140621 -0.0212499, 0.00614773 -0.0429931 -0.00459795, 0.00614773 -0.0416501 -0.00900195, + 0.00614773 -0.0393311 -0.0130259, -0.0327873 -0.0443361 -0.0225909, -0.0298603 -0.0477541 -0.0192969, + -0.0274543 -0.050684 -0.0150999, -0.0251433 -0.0533691 -0.00792694, -0.0264403 -0.0296871 -0.0235679, + -0.0229763 -0.0337161 -0.0215589, -0.0199133 -0.0373781 -0.0183379, -0.0157293 -0.045801 -0.00203494, + 0.0267727 0.028296 -0.024113, 0.0205647 0.033057 -0.0241129, 0.0135217 0.0364749 -0.0241129, 0.00592871 0.0384279 -0.0241129, + -0.00190329 0.038916 -0.0241129, -0.00965929 0.0376949 -0.0241129, -0.0170233 0.03501 -0.0241129, + -0.0236953 0.030859 -0.0241129, -0.0294063 0.025488 -0.0241129, -0.0339243 0.019141 -0.0241129, + -0.0370643 0.011938 -0.0241129, -0.0387003 0.00424801 -0.0241129, -0.0387653 -0.00356401 -0.0241129, + -0.0372543 -0.011255 -0.0241129, -0.0342333 -0.018579 -0.0241129, 0.0437697 -0.017603 -0.02425, 0.0458107 -0.011377 -0.02425, + 0.0469467 -0.00478505 -0.02425, 0.0380587 -0.028467 -0.02359, 0.0354037 -0.033105 -0.021646, 0.0330427 -0.037134 -0.018523, + 0.0311107 -0.040552 -0.014392, 0.0293497 -0.043604 -0.00757595, 0.0528907 -0.0375 -0.025292, 0.0500407 -0.0423831 -0.023208, + 0.0475117 -0.046777 -0.01986, 0.0454407 -0.050439 -0.015431, 0.0435517 -0.0536131 -0.00812196, 0.0118607 -0.05459 -0.060257, + 0.0112977 -0.054346 -0.058807, 0.0104027 -0.053979 -0.057563, 0.00923372 -0.0536131 -0.0566059, + 0.00787272 -0.053125 -0.056003, 0.00641172 -0.052515 -0.055801, 0.00495072 -0.052026 -0.0560029, + 0.00358872 -0.051538 -0.0566059, 0.00242072 -0.0510501 -0.0575629, 0.00152472 -0.050806 -0.0588069, + 0.00096272 -0.050562 -0.0602569, 0.00284072 -0.064844 -0.0615799, 0.00352572 -0.065088 -0.0610919, + 0.00398472 -0.0653321 -0.060359, 0.00414572 -0.0653321 -0.059501, 0.00398472 -0.0653321 -0.058639, + 0.00352572 -0.065088 -0.0579099, 0.00284072 -0.064844 -0.0574219, 0.00122172 -0.064355 -0.0574219, + 0.000535724 -0.063989 -0.0579099, 7.77236e-005 -0.063867 -0.0586389, -8.32766e-005 -0.063867 -0.0595009, + 7.77232e-005 -0.063867 -0.0603589, 0.000535723 -0.063989 -0.0610919, 0.00122172 -0.064355 -0.0615799, + 0.0513917 -0.0675291 -0.018543, 0.0495607 -0.066919 -0.017243, 0.0483397 -0.066431 -0.015296, 0.0479087 -0.066309 -0.013, + 0.0483397 -0.066431 -0.010704, 0.0495607 -0.066919 -0.00875696, 0.0513917 -0.0675291 -0.00745596, + 0.0449257 -0.0829101 -0.015032, 0.0442537 -0.082666 -0.014555, 0.0438077 -0.082422 -0.013842, 0.0436517 -0.082422 -0.013, + 0.0438077 -0.082422 -0.012158, 0.0442537 -0.082666 -0.011445, 0.0449257 -0.0829101 -0.010968, 0.0465087 -0.083398 -0.010968, + 0.0471797 -0.0836431 -0.011445, 0.0476257 -0.083887 -0.012158, 0.0477867 -0.083887 -0.013, 0.0476257 -0.083887 -0.013842, + 0.0471797 -0.0836431 -0.014555, 0.0465087 -0.083398 -0.015032, -0.0160643 -0.0449461 -0.0145459, + -0.0142393 -0.045679 -0.0132549, -0.0130153 -0.0460451 -0.0113199, -0.0125763 -0.046289 -0.00903394, + -0.0129923 -0.0460451 -0.00674294, -0.0141943 -0.045679 -0.00479394, -0.0193213 -0.04397 -0.0148969, + -0.0197123 -0.0566651 -0.0118789, -0.0190263 -0.056909 -0.0113909, -0.0185683 -0.057031 -0.0106609, + -0.0184083 -0.057153 -0.00979994, -0.0185683 -0.057031 -0.00893894, -0.0190263 -0.056909 -0.00820894, + -0.0197123 -0.0566651 -0.00772094, -0.0213303 -0.0560551 -0.00772094, -0.0220173 -0.0558111 -0.00820894, + -0.0224743 -0.055688 -0.00893894, -0.0226363 -0.0555661 -0.00979994, -0.0224743 -0.055688 -0.0106609, + -0.0220173 -0.0558111 -0.0113909, -0.0213303 -0.0560551 -0.0118789, -0.0369913 -0.021875 0.0402951, + -0.0413283 -0.011865 0.0402951, -0.0429883 -0.00100101 0.0402951, -0.0418553 0.00986301 0.0402951, + -0.0380023 0.0201169 0.0402951, -0.0316873 0.0290279 0.0402951, -0.0233123 0.036108 0.0402951, -0.0134243 0.040869 0.0402951, + -0.00266428 0.042944 0.0402951, 0.00826772 0.042212 0.0402951, 0.0186627 0.0387939 0.0402951, 0.0278467 0.032813 0.040295, + 0.0485757 0.00375999 0.040047, 0.0535847 -0.00869106 0.040047, 0.0566287 -0.0217531 0.040047, -0.0328983 -0.028223 0.0411921, + -0.0318973 -0.0310301 0.0410851, -0.0314503 -0.03396 0.0409891, -0.0237433 -0.047266 0.0614131, + -0.0286353 -0.046777 0.0589721, 0.0380967 -0.0317631 0.054753, 0.0380967 -0.032007 0.054753, 0.0381737 -0.032251 0.054753, + 0.0383147 -0.0323731 0.054753, 0.0384977 -0.0323731 0.054753, 0.0386917 -0.0323731 0.054753, 0.0388717 -0.0323731 0.054753, + 0.0376507 -0.026636 0.054753, 0.0374527 -0.026636 0.054753, 0.0372727 -0.026636 0.054753, 0.0371397 -0.0267581 0.054753, + 0.0370667 -0.027002 0.054753, 0.0370667 -0.027124 0.054753, 0.0371477 -0.0273681 0.054753, 0.0428917 -0.026147 0.054753, + 0.0428887 -0.025903 0.054753, 0.0428117 -0.025781 0.054753, 0.0426707 -0.025659 0.054753, 0.0424917 -0.025537 0.054753, + 0.0422967 -0.025537 0.054753, 0.0421177 -0.025659 0.054753, 0.0433387 -0.031396 0.054753, 0.0435327 -0.031396 0.054753, + 0.0437127 -0.0312741 0.054753, 0.0438497 -0.031152 0.054753, 0.0439187 -0.0310301 0.054753, 0.0439187 -0.030786 0.054753, + 0.0438417 -0.030542 0.054753, 0.0351487 -0.0379881 0.054753, 0.0353737 -0.0379881 0.054753, 0.0355867 -0.0379881 0.054753, + 0.0382077 -0.033594 0.054753, 0.0382157 -0.0334721 0.054753, 0.0381697 -0.03335 0.054753, 0.0380777 -0.033228 0.054753, + 0.0379487 -0.033105 0.054753, 0.0377917 -0.0329831 0.054753, 0.0376277 -0.0329831 0.054753, 0.0332337 -0.035547 0.054753, + 0.0331497 -0.035669 0.054753, 0.0331687 -0.035913 0.054753, 0.0312157 -0.038965 0.054753, 0.0282187 -0.041162 0.054753, + 0.0281387 -0.041284 0.054753, 0.0281347 -0.041528 0.054753, 0.0282057 -0.0416501 0.054753, 0.0283387 -0.041772 0.054753, + 0.0285187 -0.041895 0.054753, 0.0287127 -0.041895 0.054753, 0.0318357 -0.039819 0.054753, 0.0219167 -0.04519 0.0547531, + 0.0220147 -0.04519 0.0547531, 0.0221307 -0.045312 0.0547531, 0.0206197 -0.0423831 0.0547531, 0.0206167 -0.0423831 0.0547531, + 0.0206317 -0.042505 0.0547531, 0.0214287 -0.040186 0.0547531, 0.0213567 -0.040308 0.0547531, 0.0212987 -0.040308 0.0547531, + 0.0243447 -0.038843 0.0547531, 0.0242477 -0.038843 0.0547531, 0.0241507 -0.038843 0.0547531, 0.0260767 -0.0404301 0.054753, + 0.0262637 -0.0404301 0.054753, 0.0264207 -0.040308 0.054753, 0.0265177 -0.040063 0.054753, 0.0265447 -0.0399411 0.054753, + 0.0264947 -0.039697 0.054753, 0.0263767 -0.039575 0.054753, 0.0276787 -0.042139 0.054753, 0.0275797 -0.042139 0.054753, + 0.0274637 -0.042017 0.054753, 0.0273357 -0.042017 0.054753, 0.0270817 -0.042017 0.054753, 0.0289167 -0.0454351 0.054753, + 0.0290157 -0.04519 0.054753, 0.0290407 -0.045068 0.054753, 0.0232277 -0.0471441 0.054753, 0.0231297 -0.047266 0.0547531, + 0.0231037 -0.04751 0.0547531, 0.0231527 -0.047632 0.054753, 0.0232717 -0.047876 0.054753, 0.0234407 -0.0479981 0.054753, + 0.0236337 -0.0479981 0.054753, 0.0269907 -0.043848 0.054753, 0.0238397 -0.0454351 0.054753, 0.0206867 -0.0298101 0.0206761, + 0.0206867 -0.033838 0.0184671, 0.0128997 -0.0315191 0.0195011, 0.0200517 -0.02749 0.019501, 0.0260367 -0.021875 0.019501, + -0.0185473 -0.031152 0.0190551, -0.0209563 -0.028345 0.0209471, -0.0235503 -0.025171 0.0221071, 0.0333707 -0.00649404 0.01825, + 0.0339127 0.00241697 0.01825, 0.0320967 0.011206 0.01825, 0.0280487 0.019263 0.01825, 0.0220547 0.025854 0.0182501, + 0.0145267 0.0307369 0.0182501, 0.00598972 0.0334229 0.0182501, -0.00296328 0.033911 0.0182501, -0.0119763 0.031836 0.0182501, + -0.0201053 0.027441 0.0182501, -0.0267473 0.020972 0.0182501, -0.0314123 0.013037 0.0182501, -0.0337563 0.00412594 0.0182501, + -0.0336043 -0.00515104 0.0182501, -0.0309703 -0.0140621 0.0182501, -0.0309703 -0.0140621 0.0212481, + -0.0336043 -0.00515104 0.0212481, -0.0337563 0.00412594 0.0212481, -0.0314123 0.013037 0.0212481, + -0.0267473 0.020972 0.0212481, -0.0201053 0.027441 0.0212481, -0.0119763 0.031836 0.0212481, -0.00296328 0.033911 0.0212481, + 0.00598972 0.0334229 0.0212481, 0.0145267 0.0307369 0.0212481, 0.0220547 0.025854 0.0212481, 0.0280487 0.019263 0.0212481, + 0.0320967 0.011206 0.021248, 0.0339127 0.00241697 0.021248, 0.0333707 -0.00649404 0.021248, 0.00614773 -0.0393311 0.0130281, + 0.00614773 -0.0416501 0.00900105, 0.00614773 -0.0429931 0.00459705, -0.0327873 -0.0443361 0.0225911, + -0.0298603 -0.0477541 0.0192951, -0.0274543 -0.050684 0.0150991, -0.0251433 -0.0533691 0.00792706, + -0.0264403 -0.0296871 0.0235681, -0.0229763 -0.0337161 0.0215571, -0.0199133 -0.0373781 0.0183381, + -0.0157293 -0.045801 0.00203406, 0.0267727 0.028296 0.024113, 0.0205647 0.033057 0.024113, 0.0135217 0.0364749 0.0241131, + 0.00592872 0.0384279 0.0241131, -0.00190328 0.038916 0.0241131, -0.00965928 0.0376949 0.0241131, -0.0170233 0.03501 0.0241131, + -0.0236953 0.030859 0.0241131, -0.0294063 0.025488 0.0241131, -0.0339243 0.0191409 0.0241131, -0.0370643 0.011938 0.0241131, + -0.0387003 0.00424801 0.0241131, -0.0387653 -0.00356401 0.0241131, -0.0372543 -0.011255 0.0241131, + -0.0342333 -0.018579 0.0241131, 0.0380587 -0.0284671 0.023591, 0.0354037 -0.033105 0.021645, 0.0330427 -0.037134 0.018525, + 0.0311107 -0.040552 0.014393, 0.0293497 -0.043604 0.00757504, 0.0528907 -0.0375 0.025292, 0.0500407 -0.0423831 0.023209, + 0.0475117 -0.046777 0.01986, 0.0454407 -0.050439 0.015431, 0.0435517 -0.0536131 0.00812204, 0.0437697 -0.017603 0.02425, + 0.0458107 -0.011377 0.02425, 0.0469467 -0.00478505 0.02425, 0.000962748 -0.050562 0.0602611, 0.00152475 -0.050806 0.0588041, + 0.00242075 -0.0510501 0.0575601, 0.00358875 -0.051538 0.056607, 0.00495075 -0.052026 0.0560041, 0.00641175 -0.052515 0.055798, + 0.00787275 -0.053125 0.056004, 0.00923375 -0.0536131 0.056607, 0.0104027 -0.053979 0.05756, 0.0112977 -0.054346 0.0588041, + 0.0118607 -0.05459 0.060261, 0.00122175 -0.064355 0.061581, 0.000535751 -0.063989 0.0610931, 7.7751e-005 -0.063867 0.0603601, + -8.32492e-005 -0.063867 0.0594981, 7.77506e-005 -0.063867 0.0586361, 0.00053575 -0.063989 0.057911, + 0.00122175 -0.064355 0.0574231, 0.00284075 -0.064844 0.0574231, 0.00352575 -0.065088 0.057911, 0.00398475 -0.0653321 0.058636, + 0.00414575 -0.0653321 0.059498, 0.00398475 -0.0653321 0.0603601, 0.00352575 -0.065088 0.0610931, + 0.00284075 -0.064844 0.061581, 0.0513917 -0.0675291 0.00745604, 0.0495607 -0.066919 0.00875704, 0.0483397 -0.066431 0.010704, + 0.0479087 -0.066309 0.013001, 0.0483397 -0.066431 0.015297, 0.0495607 -0.066919 0.017243, 0.0513917 -0.0675291 0.018544, + 0.0465087 -0.083398 0.015034, 0.0471797 -0.0836431 0.014557, 0.0476257 -0.083887 0.01384, 0.0477867 -0.083887 0.013001, + 0.0476257 -0.083887 0.012158, 0.0471797 -0.0836431 0.011445, 0.0465087 -0.083398 0.010968, 0.0449257 -0.0829101 0.010968, + 0.0442537 -0.082666 0.011445, 0.0438077 -0.082422 0.012158, 0.0436517 -0.082422 0.013001, 0.0438077 -0.082422 0.01384, + 0.0442537 -0.082666 0.014557, 0.0449257 -0.0829101 0.015034, -0.0193213 -0.04397 0.0148971, -0.0141933 -0.045679 0.00479406, + -0.0129883 -0.0460451 0.00674306, -0.0125743 -0.046289 0.00903406, -0.0130133 -0.0460451 0.0113191, + -0.0142363 -0.045679 0.0132531, -0.0160623 -0.0449461 0.0145461, -0.0213303 -0.0560551 0.0118791, + -0.0220173 -0.0558111 0.0113911, -0.0224743 -0.055688 0.0106611, -0.0226363 -0.0555661 0.00980006, + -0.0224743 -0.055688 0.00893806, -0.0220173 -0.0558111 0.00821006, -0.0213303 -0.0560551 0.00772106, + -0.0197123 -0.0566651 0.00772106, -0.0190263 -0.056909 0.00821006, -0.0185683 -0.057031 0.00893806, + -0.0184083 -0.057153 0.00980006, -0.0185683 -0.057031 0.0106611, -0.0190263 -0.056909 0.0113911, + -0.0197123 -0.0566651 0.0118791, -0.0330923 -0.027734 -0.0549389, -0.0181883 -0.0493411 -0.0634459, + -0.0202853 -0.0471441 -0.0626709, 0.0362777 -0.021387 -0.022494, 0.0244827 -0.02334 -0.022249, + -0.0331193 -0.044458 -0.0225839, -0.000662279 -0.055688 -0.0633769, 0.00098072 -0.050928 -0.0604889, + 0.00039472 -0.052026 -0.0612139, 0.00156672 -0.049829 -0.0597679, 0.00127372 -0.050317 -0.0601269, + 0.00112772 -0.050684 -0.0603099, 0.0116247 -0.054834 -0.060489, 0.0118967 -0.053491 -0.059768, 0.0117617 -0.054224 -0.060127, + 0.0116937 -0.054468 -0.06031, 0.0113537 -0.0560551 -0.061214, 0.00984972 -0.059473 -0.0633769, + -0.0212063 -0.045923 -0.0145289, -0.0234243 -0.0483641 -0.0138449, -0.0228903 -0.0477541 -0.0140529, + 0.0256287 -0.045923 0.054997, 0.0254227 -0.04458 0.054997, -0.0330923 -0.0277341 0.0549441, -0.0181883 -0.0493411 0.0634501, + -0.0202853 -0.0471441 0.0626721, -0.0192383 -0.048242 0.0630611, 0.0325547 -0.037866 0.054501, 0.0256287 -0.045923 0.054501, + 0.0362777 -0.021387 0.022496, 0.0244827 -0.02334 0.022248, -0.0331193 -0.044458 0.0225831, 0.00984575 -0.059473 0.0633821, + 0.0116207 -0.054834 0.060505, 0.0113477 -0.0560551 0.06123, 0.0118927 -0.0536131 0.059788, 0.0117577 -0.054224 0.060147, + 0.0116877 -0.054468 0.06033, 0.000963748 -0.050928 0.0605051, 0.00154575 -0.049829 0.0597881, 0.00125475 -0.050439 0.0601471, + 0.00110975 -0.050684 0.0603301, 0.000382748 -0.052026 0.0612301, -0.00066625 -0.055688 0.0633821, + -0.0212063 -0.045923 0.0145311] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 4724 + 2.24406e-007 2.40477e-007 1, 1.70995e-007 -1.33806e-007 1, 2.20305e-007 -2.93442e-008 1, 3.95908e-007 7.82197e-008 1, + 4.79835e-007 2.18908e-007 1, 5.1314e-007 2.02239e-007 1, 6.29608e-007 -5.52735e-009 1, 1.8203e-007 -2.0602e-007 1, + 2.36552e-007 -1.38588e-007 1, 1.80421e-007 -1.21721e-007 1, 2.00808e-007 -1.96973e-007 1, 2.35608e-007 -6.79328e-008 1, + 3.21078e-007 1.73246e-007 1, 0 0 1, 8.17675e-008 3.88477e-008 1, 1.73064e-007 -3.536e-008 1, 2.40855e-007 -1.46429e-008 1, + 1.83113e-007 -3.23751e-008 1, 2.00742e-007 9.31923e-008 1, 2.95931e-007 -2.0319e-007 1, 2.34821e-007 1.47254e-007 1, + 2.56908e-007 -1.09901e-007 1, 1.6511e-007 3.33522e-008 1, 1.68588e-007 1.66797e-007 1, 2.7783e-007 1.00222e-007 1, + 2.16883e-007 4.28713e-008 1, 6.88171e-008 9.30089e-008 1, 2.14329e-007 2.15453e-007 1, 8.11583e-008 3.85582e-008 1, + 6.8814e-008 9.29896e-008 1, 1.70995e-007 1.33806e-007 1, 2.20305e-007 2.93441e-008 1, 1.97784e-007 8.47609e-008 1, + 2.165e-007 2.29088e-007 1, 2.80187e-007 1.09792e-007 1, 1.57072e-007 4.52885e-008 1, 2.36552e-007 1.38587e-007 1, + 2.9592e-007 -2.03161e-007 1, 2.5691e-007 -1.09906e-007 1, 2.4081e-007 -1.49121e-008 1, 2.47665e-007 -5.00282e-008 1, + 2.46702e-007 -9.5486e-008 1, 2.69659e-007 1.85924e-008 1, 3.18248e-007 -3.72039e-007 1, 4.00003e-007 8.34765e-008 1, + 3.35573e-007 -1.66391e-007 1, 3.13076e-007 1.86851e-007 1, 4.80288e-007 2.18958e-007 1, 5.06691e-007 2.15849e-007 1, + 3.33249e-007 3.47108e-007 1, 1.80431e-007 -1.21693e-007 1, 2.00803e-007 -1.96981e-007 1, 6.42745e-007 -2.58341e-008 1, + 0.701072 -0.116786 0.703463, 0.704542 0.0227586 0.709297, 0.705923 -0.000510473 0.708288, 0.605861 -0.22286 0.763718, + 0.660934 -0.128769 0.739313, 0.427789 -0.39918 0.810958, 0.500421 -0.310404 0.808225, 0.588563 -0.390648 0.707805, + 0.331725 -0.497082 0.80179, 0.533932 -0.528172 0.660266, 0.609901 -0.252176 0.751284, 0.693401 -0.0221165 0.720212, + 0.656674 -0.153155 0.73846, 0.796916 -0.532608 0.28505, 0.480959 -0.686551 0.545276, 0.691195 -0.691122 0.211185, + 0.702937 -0.322071 0.634152, 0.234273 -0.565797 0.790563, 0.141656 -0.604326 0.784043, 0.23461 -0.567198 0.789459, + 0.066445 -0.622266 0.779981, 0.132541 -0.608171 0.782662, -0.118573 -0.612148 0.781802, -0.216848 -0.579014 0.785952, + -0.119444 -0.613856 0.780329, -0.232923 -0.566207 0.790668, -0.318929 -0.512893 0.79701, -0.106175 -0.994347 2.44472e-008, + -0.00766239 -0.999971 1.7643e-009, -0.407108 -0.432709 0.804379, -0.417213 -0.622072 0.66254, 0.218854 -0.578452 0.785809, + -0.48403 -0.345723 0.80386, -0.542653 -0.551027 0.633953, -0.599513 -0.40724 0.689014, -0.552235 -0.24912 0.795597, + -0.678959 -0.134556 0.72174, -0.704525 -0.0238073 0.70928, -0.66862 -0.153752 0.727535, -0.657287 -0.273079 0.702425, + 0.0909249 -0.995858 -2.09358e-008, 0.539131 -0.816612 0.206112, 0.454732 -0.85405 0.252621, -4.5374e-005 -0.627357 0.778732, + -0.0189964 -0.628167 0.777847, -0.138207 -0.6049 0.784216, 0.0984384 -0.619102 0.779116, -0.234049 -0.567774 0.789211, + -0.550571 -0.817098 0.170946, -0.681983 -0.687163 0.250414, -0.663613 -0.25433 0.703515, -0.699072 0.000329949 0.715051, + -0.651459 -0.104278 0.751483, -0.786008 -0.532623 0.313853, -0.384624 -0.920762 0.065281, -0.706931 0.0231105 0.706905, + -0.70113 0.116081 0.703521, -0.70038 0.265642 0.662497, -0.70484 0.141357 0.695139, -0.639307 0.605285 0.474254, + -0.689051 0.431441 0.582295, -0.629307 0.42246 0.652304, -0.452552 0.677978 0.579261, -0.498838 0.501845 0.70662, + -0.704237 0.295179 0.645693, -0.705674 0.166251 0.688756, -0.479472 0.341968 0.808186, -0.339985 0.487428 0.804254, + -0.406195 0.433292 0.804527, -0.647883 0.290615 0.704123, -0.256196 0.545014 0.798325, -0.223091 0.972788 0.062557, + -0.38312 0.911917 0.147062, -0.351916 0.928622 0.117541, -0.0911197 0.99567 0.0184089, -0.190389 0.980955 0.0384644, + 0.227885 0.971617 0.0634766, 0.351917 0.928627 0.117504, 0.197979 0.97939 0.0399978, 0.382829 0.912057 0.14695, + 0.474565 0.861165 0.182163, 0.0575485 0.628835 0.775406, -0.00470452 0.629871 0.776685, -0.0151322 0.628732 0.777475, + 0.560817 0.592736 0.578056, 0.329054 0.497345 0.802728, 0.372675 0.550171 0.747279, -0.122583 0.610154 0.782743, + -0.215519 0.577618 0.787343, 0.68696 0.494842 0.532182, 0.536616 0.530507 0.656205, 0.591282 0.392314 0.70461, + 0.709583 0.324256 0.625579, 0.703633 0.141324 0.696368, 0.706901 0.166128 0.687526, 0.674369 0.277997 0.684065, + -0.31896 0.5143 0.796091, 0.105888 0.994148 0.0213927, 0.02214 0.627938 0.777948, 0.10489 0.618608 0.778667, + 0.141019 0.603588 0.784726, 0.231586 0.564331 0.792401, -0.104729 0.61863 0.778671, 0.248544 0.552255 0.795764, + 0.345169 0.481907 0.805372, 0.424394 0.397368 0.813627, 0.698381 0.26386 0.665313, 0.702291 0.116665 0.702265, + 0.556181 0.339064 0.758748, 0.986621 -0.163033 -1.41491e-009, 0.999466 0.0326742 1.74825e-013, 1 5.98156e-006 1.70456e-013, + 0.935282 -0.353903 0, 0.980674 -0.195651 -7.07854e-010, 0.830414 -0.557147 0, 0.70674 -0.707474 0, 0.923111 -0.384533 0, + 0.999466 -0.0326622 1.65905e-013, 0.973648 -0.228055 0, 0.786004 -0.53262 -0.31387, 0.575484 -0.817813 0, + 0.68198 -0.68716 -0.25043, 0.909938 -0.414745 0, 0.400109 -0.916468 0, 0.222917 -0.974837 0, 0.386276 -0.922383 0, + 0.0303399 -0.99954 -3.56577e-014, 0.190068 -0.981771 -3.50024e-009, -0.190068 -0.981771 3.50022e-009, + -0.157005 -0.987598 6.9965e-009, -0.386276 -0.922383 0, 2.30677e-007 -1 -3.56741e-014, -0.560129 -0.828406 0, + 0.353675 -0.935368 0, -0.706739 -0.707474 0, -0.830414 -0.557147 0, -0.909937 -0.414746 0, -0.980673 -0.195652 -7.07854e-010, + -0.999466 -0.0326628 1.65905e-013, -0.973648 -0.228055 0, -0.923111 -0.384533 0, 0.529769 -0.804659 -0.268082, + -0.0303394 -0.99954 -3.56577e-014, -0.222917 -0.974837 0, 0.157005 -0.987598 -6.99654e-009, -0.418401 -0.908262 0, + -0.546654 -0.801809 -0.241396, -0.691192 -0.69112 -0.211202, -0.935282 -0.353903 0, -1 5.5224e-006 1.6168e-013, + -0.986621 -0.163033 -1.41495e-009, -0.796911 -0.532605 -0.285068, -0.999466 0.0326739 1.57134e-013, + -0.986621 0.163028 1.41509e-009, -0.936115 0.351694 0, -0.980676 0.195638 7.0794e-010, -0.729378 0.684111 0, + -0.850634 0.525758 0, -0.832368 0.554223 0, -0.554669 0.832071 0, -0.70674 0.707474 0, -0.924465 0.381266 0, + -0.973653 0.228033 0, -0.81315 0.582054 0, -0.571183 0.820822 0, -0.683354 0.730088 0, -0.911882 0.410453 0, + -0.393152 0.919474 0, -0.227698 0.973732 0, -0.380143 0.924928 0, -0.0353937 0.999373 3.57047e-014, + -0.197383 0.980326 4.07492e-009, 0.197383 0.980326 -4.07491e-009, 0.34951 0.936933 0, 0.166878 0.985978 -8.14589e-009, + 0.380143 0.924928 0, 0.526664 0.850074 0, -2.34765e-007 1 3.60248e-014, 0.683353 0.730088 0, 0.554669 0.832071 0, + -0.34951 0.936933 0, 0.81315 0.582055 0, 0.706739 0.707474 0, 0.832368 0.554223 0, 0.911882 0.410453 0, + 0.980676 0.195638 7.07931e-010, 0.973653 0.228033 0, 0.924465 0.381267 0, -0.526664 0.850074 0, + 0.0353932 0.999373 3.62998e-014, 0.227698 0.973732 0, -0.166878 0.985978 8.14593e-009, 0.410365 0.911921 0, + 0.582059 0.813146 0, 0.729377 0.684112 0, 0.936115 0.351695 0, 0.986621 0.163028 1.41509e-009, 0.850634 0.525758 0, + 0.651432 -0.104273 -0.751507, 0.706905 0.0231099 -0.706931, 0.699072 0.000331154 -0.715051, 0.663589 -0.254321 -0.703541, + 0.67896 -0.134555 -0.72174, 0.599514 -0.407239 -0.689013, 0.542656 -0.551028 -0.633951, 0.657288 -0.273078 -0.702425, + 0.704551 -0.0238077 -0.709254, 0.668647 -0.153758 -0.727509, 0.484054 -0.34574 -0.803838, 0.440112 -0.636971 -0.632905, + 0.407131 -0.432734 -0.804354, 0.552262 -0.249132 -0.795575, 0.454729 -0.854046 -0.252639, 0.1382 -0.604872 -0.784239, + 0.237664 -0.566478 -0.789062, 0.234134 -0.565787 -0.790611, 0.0189959 -0.628138 -0.77787, 0.118574 -0.612148 -0.781802, + -0.132539 -0.608166 -0.782667, -0.218843 -0.578426 -0.785832, -0.0984337 -0.619074 -0.779139, -0.225134 -0.574071 -0.787246, + 4.69673e-005 -0.627342 -0.778744, -0.451813 -0.667657 -0.591692, 0.216858 -0.579041 -0.785929, -0.533932 -0.528174 -0.660265, + -0.588562 -0.390649 -0.707805, -0.702916 -0.322062 -0.634181, -0.660934 -0.128771 -0.739313, -0.693374 -0.022116 -0.720238, + -0.656647 -0.15315 -0.738485, -0.609901 -0.252177 -0.751284, 0.31895 -0.512926 -0.796981, 0.00766285 -0.999971 -1.76647e-009, + -0.0909244 -0.995858 2.09603e-008, -0.141662 -0.604354 -0.784021, 0.11945 -0.613884 -0.780306, -0.0664481 -0.622294 -0.779958, + 0.106175 -0.994347 -2.4476e-008, -0.249428 -0.552851 -0.795073, -0.345033 -0.480161 -0.806472, -0.42781 -0.399199 -0.810937, + -0.605887 -0.22287 -0.763695, -0.705923 -0.000511675 -0.708288, -0.701098 -0.11679 -0.703436, -0.500445 -0.310419 -0.808204, + -0.704569 0.0227592 -0.709271, -0.45473 -0.854046 -0.252639, -0.702265 0.11666 -0.702292, -0.698358 0.263851 -0.665341, + -0.703634 0.141323 -0.696367, -0.424375 0.397349 -0.813646, -0.556157 0.33905 -0.758771, -0.591283 0.392313 -0.70461, + -0.331491 0.497797 -0.801444, -0.536617 0.530506 -0.656206, -0.674369 0.277996 -0.684064, -0.706926 0.166133 -0.687499, + -0.686975 0.494852 -0.532153, -0.389346 0.550776 -0.738279, -0.56083 0.592749 -0.57803, -0.709604 0.324265 -0.625551, + -0.241242 0.55681 -0.794836, -0.141013 0.60356 -0.784749, -0.232619 0.565099 -0.79155, -0.0221391 0.62791 -0.777971, + -0.104886 0.61858 -0.77869, 0.122579 0.61014 -0.782754, 0.215509 0.577591 -0.787365, 0.104724 0.618601 -0.778695, + 0.248667 0.552166 -0.795787, 0.318945 0.514275 -0.796113, 0.0151313 0.628726 -0.777479, 0.406175 0.433271 -0.804548, + 0.341479 0.48661 -0.804116, -0.227886 0.971617 -0.063472, -0.38283 0.912058 -0.146939, -0.351918 0.928627 -0.117496, + 0.479448 0.341952 -0.808207, 0.498836 0.501845 -0.706621, 0.629306 0.42246 -0.652305, 0.64786 0.290605 -0.70415, + 0.70484 0.141358 -0.695139, 0.705649 0.166246 -0.688783, 0.704237 0.29518 -0.645693, -0.32907 0.497369 -0.802706, + 0.00470444 0.6299 -0.776662, 0.22309 0.972789 -0.0625522, 0.347611 0.930449 -0.115893, 0.190389 0.980955 -0.0384614, + -0.474566 0.861167 -0.18215, -0.19798 0.97939 -0.0399949, -0.105889 0.994148 -0.0213912, 0.0911193 0.99567 -0.0184075, + -0.057551 0.628863 -0.775383, 0.376748 0.914959 -0.144605, 0.427668 0.583801 -0.690127, 0.639318 0.605295 -0.474226, + 0.700403 0.265651 -0.662469, 0.701156 0.116086 -0.703494, 0.689068 0.431452 -0.582267, 0.286219 0.519385 -0.805182, + 0.462499 0.868667 -0.177518, -0.0641865 -0.0262712 -0.997592, -4.66958e-008 1.50408e-007 -1, -1.18846e-007 2.90382e-007 -1, + -1.82372e-007 1.46371e-007 -1, -0.0741897 -0.0462904 -0.996169, 0 0 -1, -0.0664828 3.84815e-007 -0.997788, + -0.110445 -0.0218188 -0.993643, -0.088363 -0.0894438 -0.992064, -3.1048e-007 3.0141e-008 -1, -0.0173395 -0.100014 -0.994835, + -0.0274592 -0.076774 -0.99667, -2.24074e-007 -0.0419211 -0.999121, -2.3286e-007 -5.36504e-014 -1, + -0.0480501 -0.0755378 -0.995985, -1.30442e-007 8.41025e-008 -1, -0.100167 0.0166744 -0.994831, -0.105206 0.0399999 -0.993646, + -0.08526 0.0521443 -0.994993, -1.76872e-007 -1.54738e-007 -1, -0.0888111 0.0890315 -0.992061, -0.0553955 0.0900624 -0.994394, + -1.23108e-007 -9.52585e-008 -1, -0.0404935 0.107741 -0.993354, -3.00097e-007 -8.57738e-008 -1, -1.52523e-007 -2.96138e-008 -1, + -0.0195231 0.120312 -0.992544, -2.53845e-007 0.0826801 -0.996576, -2.32889e-007 -5.36571e-014 -1, + -1.52556e-007 -2.94417e-008 -1, 0.0173391 -0.100014 -0.994835, -2.98516e-007 -9.42516e-008 -1, 0.027459 -0.0767741 -0.99667, + 0.0480493 -0.0755373 -0.995985, -1.30442e-007 -8.41025e-008 -1, -1.82372e-007 -1.46371e-007 -1, + 0.0883624 -0.0894436 -0.992064, 0.0741896 -0.0462906 -0.996169, 0.0868581 -0.0320719 -0.995704, 0.100167 -0.0166735 -0.994831, + 0.0664828 4.16312e-007 -0.997788, -2.67915e-015 0 -1, -6.04184e-017 0 -1, 0.0404928 0.10774 -0.993354, + 0.0553942 0.0900613 -0.994395, -1.91759e-006 -2.64456e-006 -1, -8.42119e-007 -8.57282e-007 -1, 0.0888107 0.0890319 -0.992061, + -1.44821e-007 5.51126e-008 -1, -3.10977e-007 3.00518e-008 -1, 0.0195225 0.120312 -0.992544, -6.55314e-008 1.4033e-007 -1, + 0.0861012 0.0359434 -0.995638, 0.116657 0.0235476 -0.992893, 2.63887e-015 0 -1, 0.0852599 0.0521445 -0.994993, + -1.55418e-007 2.70842e-007 -1, -0.316835 1.82899e-006 -0.948481, -0.413178 -0.0719247 -0.907806, + -0.339079 -0.131504 -0.931521, -0.675763 -0.0116086 -0.737028, -0.655703 -0.152735 -0.739409, -0.579079 -0.250671 -0.775778, + -0.346109 -0.237625 -0.907603, -0.810003 -0.336569 -0.480226, -0.896944 -0.180582 -0.403586, -0.18429 -0.266381 -0.946086, + -0.0698312 -0.341577 -0.937256, -0.0076243 -0.352119 -0.935924, -0.0910852 -0.24001 -0.966488, -0.608534 -0.387194 -0.692653, + -0.357681 -0.37731 -0.854226, -0.540978 -0.512257 -0.667035, -0.332107 -0.776412 -0.535621, -0.451097 -0.851816 -0.26631, + -0.366832 -0.904729 -0.216563, -0.142906 -0.699326 -0.700372, -0.46496 -0.644511 -0.606974, -0.935984 0.0113781 -0.35186, + -0.97624 -0.195076 -0.0943433, -0.786742 -0.518108 -0.33556, -0.915579 -0.391732 -0.0908927, -0.996865 -0.020529 -0.0764087, + -0.810747 -0.581975 -0.0631946, -0.663545 -0.683166 -0.304945, -0.528561 -0.810815 -0.251401, -0.272673 -0.666177 -0.694159, + -0.159062 -0.705109 -0.691028, -0.544931 -0.837746 -0.0351005, -0.693999 -0.718834 -0.0405389, -0.40926 -0.911723 -0.0356091, + -0.346739 -0.937895 -0.0112246, -0.196692 -0.980424 -0.00900374, -0.173238 -0.984876 -0.00295214, + 2.37984e-007 -0.999998 -0.00206323, 0.0104815 -0.629228 -0.77715, 0.0659392 -0.380742 -0.922327, + 0.0644501 -0.136904 -0.988485, 0.184289 -0.266381 -0.946086, 0.290904 -0.941212 -0.171738, 0.372992 -0.901326 -0.2202, + 0.329519 -0.757164 -0.564022, 0.13808 -0.644734 -0.751832, 0.137344 -0.713051 -0.687529, 0.46496 -0.644511 -0.606974, + 0.357681 -0.37731 -0.854226, 0.528561 -0.810815 -0.251401, 0.451098 -0.851815 -0.266311, 0.250436 -0.677863 -0.691219, + 0.346109 -0.237625 -0.907603, 0.373919 -0.0687924 -0.924907, 0.316835 1.97846e-006 -0.948481, 0.361994 -0.143311 -0.921098, + 0.50048 -0.491573 -0.712654, 0.593467 -0.414887 -0.689686, 0.623199 -0.282913 -0.729098, 0.683458 -0.143147 -0.715817, + 0.682247 0.0119557 -0.731024, 0.653812 -0.673573 -0.344717, 0.196692 -0.980424 -0.00900377, 0.211097 -0.977461 -0.00295192, + 2.39858e-007 -1 -5.45059e-014, 0.40926 -0.911723 -0.0356092, 0.557198 -0.829811 -0.0307162, 0.359435 -0.933073 -0.0134746, + 4.48293e-008 -0.795323 -0.606186, 0.0748674 -0.793091 -0.604485, 0.728536 -0.682828 -0.0546059, 0.797459 -0.520879 -0.30454, + -0.0748673 -0.793091 -0.604485, 0.81358 -0.318137 -0.4867, 0.90693 -0.200317 -0.370608, 0.932797 -0.0121311 -0.360198, + 0.926017 -0.366376 -0.090894, 0.841976 -0.536837 -0.0536979, 0.982159 -0.162703 -0.0942932, 0.996895 0.0190101 -0.0764087, + 0.41321 0.0711953 -0.907849, 0.315791 0.121688 -0.940993, 0.690583 0.160856 -0.705139, 0.629297 0.2743 -0.727148, + 0.345267 0.235646 -0.908439, 0.835092 0.344588 -0.428813, 0.911681 0.184206 -0.367296, 0.195716 0.303789 -0.93242, + 0.0764383 0.359978 -0.929824, 0.00758393 0.384929 -0.922915, 0.142437 0.357702 -0.922909, 0.62316 0.396365 -0.674216, + 0.258242 0.270291 -0.927499, 0.544858 0.509181 -0.666231, 0.252102 0.588058 -0.768526, 0.119658 0.601357 -0.78997, + 0.391999 0.54206 -0.743309, 0.976386 0.194335 -0.0943596, 0.771248 0.513191 -0.37658, 0.913932 0.395589 -0.0907648, + 0.80563 0.577346 -0.132786, 0.646922 0.660075 -0.381829, 0.376264 0.609531 -0.69778, 0.277589 0.664171 -0.694134, + 0.141865 0.710099 -0.689662, 0.551233 0.832293 -0.0585693, 0.538382 0.836205 -0.104437, 0.676548 0.701454 -0.224155, + 0.413714 0.909697 -0.0359388, 0.356078 0.934386 -0.011486, 0.230312 0.973038 -0.0123628, 0.16248 0.986709 -0.00245526, + -2.41352e-007 0.999998 -0.00177091, -0.00750017 0.659182 -0.751946, -0.0853106 0.41295 -0.906749, + -0.137215 0.320693 -0.937192, -0.195717 0.303788 -0.93242, -0.244327 0.563644 -0.789057, -0.144009 0.643406 -0.751858, + -0.118134 0.717639 -0.686323, -0.392 0.542059 -0.743309, -0.258243 0.270291 -0.927499, -0.376264 0.609531 -0.697781, + -0.257263 0.675668 -0.690861, -0.345267 0.235646 -0.908439, -0.38073 0.0703106 -0.922009, -0.334854 0.13184 -0.933001, + -0.545093 0.524411 -0.654116, -0.620093 0.436858 -0.651643, -0.6321 0.286937 -0.719803, -0.712903 0.149597 -0.68512, + -0.614402 0.634388 -0.469108, -0.230313 0.973038 -0.0123629, -0.196569 0.980487 -0.00245665, -3.39804e-007 0.728985 -0.68453, + -0.413714 0.909697 -0.0359388, -0.551234 0.832293 -0.0585694, -0.552028 0.82882 -0.0912248, -0.367781 0.92981 -0.0137871, + -0.0189012 0.999821 4.42421e-014, -0.716404 0.6664 -0.206581, -0.764506 0.492113 -0.41636, -0.863665 0.341289 -0.370951, + -0.922841 0.204074 -0.326679, -0.92487 0.369292 -0.0907653, -0.839607 0.540547 -0.0535669, -0.982323 0.161703 -0.0943087, + 1 -0.000761434 -2.23487e-011, 0.980677 -0.195635 -7.48092e-010, 0.831944 -0.55486 -1.73628e-006, 0.707986 -0.706226 0, + 0.924789 -0.380479 -9.27036e-007, 0.996599 -0.0205361 0.0798041, 0.975836 -0.195025 0.0985402, 0.829594 -0.553616 0.0726862, + 0.574414 -0.818565 0, 0.697057 -0.714576 0.0591012, 0.92122 -0.379449 0.0858632, 0.39192 -0.919999 -1.98751e-007, + 0.0314511 -0.999505 -2.46145e-008, 0.189166 -0.981945 -1.26057e-007, -0.189165 -0.981945 5.2975e-008, + -0.378474 -0.925612 1.94847e-007, 2.39479e-007 -1 1.23132e-008, -0.557592 -0.830115 1.21726e-007, + 0.346736 -0.937889 0.0117379, -0.707986 -0.706227 8.0787e-007, -0.831944 -0.55486 1.73628e-006, + -0.980677 -0.195635 -7.07628e-010, -0.924789 -0.380479 0, 0.528789 -0.848331 0.0267782, -0.0314506 -0.999505 -3.68563e-014, + -0.211096 -0.977461 0.00308705, 0.173238 -0.984875 0.00308733, -0.378409 -0.925564 0.0117451, -0.557343 -0.82985 0.0267938, + -0.716001 -0.695593 0.0591015, -0.929975 -0.361901 0.0646136, -1 -0.000761913 -2.23624e-011, -0.977527 -0.180795 0.108417, + -0.848173 -0.524714 0.0726439, -0.996629 0.0190178 0.0798041, -0.980826 0.194888 7.36665e-010, -0.829904 0.557907 0, + -0.708022 0.70619 0, -0.923386 0.383872 0, -0.975982 0.194284 0.0985572, -0.827578 0.556653 0.0724644, -0.57442 0.81856 0, + -0.684863 0.702443 0.193742, -0.91982 0.382844 0.0857944, -0.397751 0.917493 1.72318e-007, -0.196582 0.980487 5.42353e-008, + 0.196582 0.980487 -1.32122e-007, 0.385347 0.922772 -2.39445e-007, -2.40729e-007 1 1.21656e-008, 0.55758 0.830123 0, + -0.356075 0.93438 0.0120113, 0.708022 0.70619 0, 0.829904 0.557907 0, 0.980825 0.194888 6.9681e-010, 0.923386 0.383872 0, + -0.528746 0.848357 0.0267765, 0.0189007 0.999821 -1.45959e-008, 0.196568 0.980487 0.00256912, -0.16248 0.986709 0.00256769, + 0.38528 0.922722 0.0120172, 0.557332 0.829858 0.0267921, 0.704378 0.682873 0.193741, 0.928916 0.364628 0.0645165, + 0.977682 0.179943 0.108433, 0.845606 0.528872 0.0724253, -0.945911 -0.00072154 0.324426, -0.876504 -0.156558 0.455226, + -0.850964 -0.338403 0.401676, -0.718927 -0.00764308 0.695044, -0.656358 -0.152882 0.738797, -0.659151 -0.29272 0.692701, + -0.756317 -0.523226 0.392707, -0.408262 -0.168352 0.897207, -0.376428 -0.0692121 0.923857, -0.548318 -0.804825 0.227166, + -0.22555 -0.974151 0.0125488, -0.0736177 -0.77986 0.62161, 3.36188e-007 -0.781982 0.623301, -0.026458 -0.762152 0.646858, + -0.409233 -0.91167 0.0372365, -0.592214 -0.379669 0.710727, -0.636318 -0.664486 0.391863, -0.541471 -0.512664 0.666321, + -0.329711 -0.757619 0.563298, -0.249512 -0.67536 0.693997, 0.00394443 -0.99999 0.00215679, -0.140265 -0.644284 0.751814, + -0.142466 -0.709495 0.69016, -0.465471 -0.64529 0.605754, 0.0736184 -0.77986 0.62161, -0.354195 0.00790408 0.935138, + -0.0858474 -0.0142899 0.996206, -0.314277 -0.222081 0.92299, -0.0974758 -0.039727 0.994445, -0.0997831 5.77096e-007 0.995009, + -0.0735713 -0.0532491 0.995867, -0.296033 -0.310984 0.903135, -0.201763 -0.298549 0.932824, -0.373225 -0.901832 0.217719, + -0.451476 -0.85253 0.263366, -0.066343 -0.383264 0.921253, -0.0582189 -0.0853657 0.994647, -0.0660122 -0.066418 0.995606, + -0.0644504 -0.136905 0.988485, -0.0274592 -0.076774 0.99667, -0.0148586 -0.085707 0.99621, 2.99987e-007 -0.317504 0.948257, + -0.291005 -0.941541 0.169756, 0.0136225 -0.597067 0.802076, 0.00788525 -0.999969 -1.81723e-009, + -0.0936906 -0.995601 2.15919e-008, 0.196691 -0.98042 0.00941581, 0.409233 -0.91167 0.0372365, 0.548318 -0.804825 0.227166, + 0.158475 -0.702508 0.693807, 0.271662 -0.663696 0.696927, 0.332123 -0.77612 0.536034, 0.161183 -0.725065 0.669553, + 0.0676567 -0.382989 0.921272, 0.465471 -0.64529 0.605754, 0.636319 -0.664486 0.391863, 0.201763 -0.298549 0.932824, + 0.367059 -0.905218 0.214122, 0.756317 -0.523226 0.392707, 0.894613 -0.180125 0.408928, 0.945911 -0.000721082 0.324426, + 0.830701 -0.345756 0.436336, 0.570359 -0.547447 0.612366, 0.601023 -0.420212 0.679848, 0.62384 -0.283214 0.728432, + 0.641155 -0.138814 0.754752, 0.718923 0.00829126 0.69504, 0.327977 -0.33537 0.883152, 0.0148591 -0.0857069 0.99621, + 0.451476 -0.85253 0.263366, 0.0914733 -0.24124 0.966145, 0.0582194 -0.0853654 0.994647, 0.0274594 -0.076774 0.99667, + 2.52355e-007 -0.0628965 0.99802, 0.0798586 -0.0756207 0.993934, 0.278592 -0.176369 0.944077, 0.404119 -0.155411 0.901407, + 0.34104 -0.0721983 0.937272, 0.354195 -0.00789979 0.935138, 0.0974759 -0.0397268 0.994445, 0.0592099 -0.0397154 0.997455, + 0.0858474 -0.0142899 0.996206, 0.0997831 6.24837e-007 0.995009, 0.896612 0.161578 0.412285, 0.879969 0.353289 0.317557, + 0.691247 0.161011 0.704452, 0.64239 0.281555 0.712784, 0.736037 0.506617 0.448987, 0.411088 0.17197 0.895228, + 0.383232 0.0707256 0.92094, 0.483355 0.722768 0.493937, 0.23031 0.973031 0.0129286, -2.35739e-007 0.999998 0.00185197, + 0.413686 0.909644 0.0375812, 0.548173 0.357026 0.756333, 0.604466 0.622746 0.496798, 0.545476 0.509796 0.665255, + 0.244723 0.564711 0.78817, 0.256314 0.673176 0.69364, 0.131424 0.657743 0.741688, 0.142366 0.709512 0.690163, + 0.392446 0.542633 0.742655, 0.0226707 0.724662 0.688732, 0.0858474 0.0142906 0.996206, 0.349596 0.240688 0.905457, + 0.113168 0.0467793 0.992474, 0.0740278 0.0528407 0.995855, 0.22439 0.233557 0.946097, 0.212146 0.337447 0.917128, + 0.137987 0.322549 0.936441, 0.0858712 0.415754 0.905414, 0.0645152 0.0978082 0.993112, 0.066365 0.0661007 0.995604, + 0.0404938 0.107742 0.993354, 0.0167312 0.103106 0.99453, 1.32967e-007 0.356463 0.934309, -0.00978829 0.636126 0.771523, + -0.141342 0.70749 0.692445, -0.230311 0.973031 0.0129286, -0.413686 0.909644 0.0375812, -0.483355 0.722768 0.493937, + -0.276559 0.661697 0.696902, -0.252177 0.588097 0.768472, -0.133401 0.610127 0.780992, -0.0731519 0.398014 0.914458, + -0.392446 0.542633 0.742655, -0.604466 0.622746 0.496798, -0.212146 0.337448 0.917128, -0.14333 0.36005 0.921857, + -0.736037 0.506617 0.448987, -0.909589 0.183806 0.372644, -0.86772 0.364007 0.338468, -0.543623 0.521585 0.657588, + -0.54341 0.374543 0.751281, -0.632686 0.287194 0.719186, -0.671579 0.145741 0.726458, -0.286977 0.285792 0.914312, + -0.0167308 0.103107 0.99453, -0.0645139 0.097807 0.993112, -0.0404931 0.107741 0.993354, 2.05732e-007 0.124133 0.992266, + -0.0803959 0.0751261 0.993928, -0.323294 0.207388 0.923294, -0.371509 0.141784 0.917539, -0.349379 0.0740309 0.934052, + -0.113168 0.0467794 0.992474, -0.059476 0.0394792 0.997449, -0.0858474 0.0142906 0.996206, 5.87174e-008 -1.44133e-007 1, + 1.47309e-007 -2.75336e-007 1, 1.87245e-007 -1.41052e-007 1, -2.67688e-015 0 1, 1.34708e-007 -7.97214e-008 1, + 2.30321e-007 -3.99629e-008 1, 2.34058e-007 -1.99814e-008 1, 1.80419e-007 1.50943e-007 1, 1.25607e-007 9.29096e-008 1, + 2.99078e-007 9.15101e-008 1, 2.33703e-007 -2.38649e-008 1, 2.28931e-007 4.7589e-008 1, 3.01458e-007 8.68817e-008 1, + 2.31202e-007 4.01158e-008 1, 1.34708e-007 7.97214e-008 1, 1.87245e-007 1.41052e-007 1, 2.39812e-006 3.36276e-006 1, + 1.05231e-006 1.11241e-006 1, 2.29612e-007 -4.77298e-008 1, 1.44431e-007 -5.8957e-008 1, 5.8905e-008 -1.44031e-007 1, + 1.47687e-007 -2.75132e-007 1, 0.697672 -0.115896 0.70698, 0.683785 0.0216406 0.729362, 0.704245 -0.000244588 0.709957, + 0.691865 -0.260959 0.673219, 0.705958 -0.14127 0.694022, 0.501781 -0.461959 0.731307, 0.677543 -0.425472 0.599924, + 0.648325 -0.431554 0.627245, 0.371053 -0.447554 0.813643, 0.572241 -0.577168 0.582596, 0.699656 -0.291366 0.65237, + 0.710503 -0.0240475 0.703283, 0.712593 -0.167145 0.681377, 0.797975 -0.530826 0.285411, 0.479541 -0.689023 0.543404, + 0.678732 -0.670065 0.300559, 0.507775 -0.822788 0.255314, 0.703293 -0.320572 0.634518, 0.377541 -0.913649 0.150692, + 0.224084 -0.972625 0.0615376, 0.37872 -0.914024 0.145365, 0.091686 -0.995633 0.0175956, 0.191276 -0.98085 0.0367081, + -0.228899 -0.971448 0.0624074, -0.349356 -0.929848 0.115469, -0.198918 -0.979272 0.0381747, -0.405498 -0.895809 0.181927, + -0.510932 -0.820289 0.25705, -0.057943 -0.629219 0.775065, 0.00472912 -0.630271 0.776361, 0.015144 -0.628131 0.77796, + -0.496583 -0.542828 0.677305, -0.415088 -0.624154 0.661916, 0.123159 -0.60956 0.783115, 0.250176 -0.553126 0.794647, + 0.216944 -0.5784 0.786377, -0.613705 -0.435634 0.658475, -0.532444 -0.529056 0.660759, -0.679626 -0.456387 0.574299, + -0.697254 -0.317239 0.642803, -0.70544 -0.141593 0.694482, -0.697533 -0.0233365 0.716173, -0.702255 -0.164288 0.69271, + -0.698011 -0.291042 0.654275, 0.319871 -0.513519 0.796229, -0.10652 -0.9941 0.0204425, -0.0221658 -0.62667 0.778969, + -0.105037 -0.616676 0.780178, -0.141611 -0.602662 0.785331, -0.217161 -0.578339 0.786362, 0.104921 -0.616687 0.780185, + -0.250086 -0.553177 0.79464, -0.515824 -0.764874 0.385867, -0.683466 -0.685523 0.250865, -0.701506 -0.265385 0.661407, + -0.697512 -0.00129396 0.716572, -0.709276 -0.118173 0.694955, -0.787066 -0.530871 0.31417, -0.710521 0.022992 0.703301, + -0.647188 0.103017 0.755338, -0.656962 0.251756 0.710647, -0.68154 0.135765 0.719076, -0.637657 0.601237 0.481567, + -0.678499 0.42281 0.600726, -0.598615 0.404735 0.691267, -0.394165 0.5772 0.715175, -0.500369 0.501214 0.705985, + -0.654749 0.27269 0.704942, -0.67483 0.156372 0.721216, -0.479475 0.342211 0.808082, -0.43934 0.637612 0.632796, + -0.659646 0.661143 0.357431, -0.548134 0.246698 0.79918, -0.235536 0.565986 0.790052, -0.139296 0.605181 0.783806, + -0.235624 0.566872 0.789391, -0.019107 0.628115 0.777886, -0.119131 0.612437 0.781491, 0.11922 0.612428 0.781485, + 0.217891 0.579042 0.785643, 0.0993976 0.619482 0.778693, 0.234179 0.566392 0.790164, 0.319212 0.51521 0.795401, + 5.17913e-005 0.628283 0.777985, 0.562583 0.591944 0.57715, 0.453876 0.665674 0.592347, -0.219874 0.578422 0.785546, + 0.680939 0.488551 0.545564, 0.573527 0.574486 0.58398, 0.585445 0.386914 0.712427, 0.697257 0.317228 0.642806, + 0.660799 0.12998 0.739223, 0.651983 0.152717 0.742695, 0.603321 0.250146 0.757252, -0.536491 0.818104 0.207085, + -0.455924 0.851831 0.257909, 0.0190964 0.628221 0.7778, 0.138918 0.605116 0.783924, -0.0989823 0.619392 0.778817, + 0.235051 0.567394 0.789186, 0.535275 0.806434 0.251286, 0.42376 0.398039 0.813629, 0.606778 0.224591 0.762482, + 0.709336 0.117463 0.695014, 0.495608 0.306892 0.812521, 0.386127 0.920034 0.0666539, 0.986568 -0.16335 -2.31324e-006, + 0.999483 0.0321382 -1.17873e-006, 1 -0.000739938 -5.89611e-007, 0.935941 -0.352157 -1.13344e-006, + 0.980588 -0.196076 0.0014474, 0.828961 -0.559052 0.0168339, 0.381715 -0.92428 0, 0.583842 -0.811868 0, + 0.551396 -0.833753 0.0286, 0.704911 -0.709136 0.0150209, 0.923072 -0.384245 0.0171365, 0.999342 -0.034904 -0.00985522, + 0.972691 -0.231911 -0.0094113, 0.801768 -0.596569 -0.0356822, 0.38992 -0.920344 0.0304772, 0.503398 -0.863517 -0.0304736, + 0.669151 -0.74237 -0.0335297, 0.905619 -0.424047 -0.00625634, 0.203235 -0.979103 0.00730944, + 0.0355707 -0.999367 -3.57065e-014, 0.198335 -0.980134 0, -0.204757 -0.975904 0.0754023, -0.0221371 -0.999236 0.0322085, + -0.467092 -0.875073 0.126776, -0.39338 -0.917537 0.0581133, -0.71572 -0.698321 0.00965364, -0.569486 -0.819709 0.0613467, + -0.301829 -0.911767 0.278531, -0.156227 -0.973924 0.164517, 0.11923 -0.8835 -0.453004, -0.250509 -0.955033 0.15861, + -0.0850989 -0.967046 0.239959, -0.398851 -0.916326 0.0355608, -0.932429 -0.360918 0.0177448, -0.973817 -0.227333 2.31181e-006, + -0.910742 -0.412975 0, -0.986059 -0.166378 -0.00244706, -0.999435 -0.0336177 1.17852e-006, -0.840207 -0.541919 0.0193964, + -0.427315 -0.903046 0.0437076, 0.304885 -0.855646 -0.418228, -0.134447 -0.957626 0.254707, -0.218271 -0.956627 0.192931, + -0.00517718 -0.96677 -0.255595, -0.427562 -0.897694 0.106475, -0.686719 -0.599699 -0.410827, -0.79222 -0.424275 -0.438609, + -0.99982 0.0189932 7.07446e-007, -0.999349 -0.00517645 -0.0356922, -0.872465 -0.234417 -0.428781, -0.50259 -0.847283 0.171798, + -0.54599 -0.837031 -0.0356818, -0.625407 -0.755662 -0.194527, -0.224495 -0.684065 0.694015, -0.986731 0.162362 2.31361e-006, + -0.935949 0.352135 1.13345e-006, -0.980862 0.194702 1.1574e-006, -0.849256 0.527982 0, -0.83159 0.55539 3.68886e-007, + -0.704153 0.710048 4.15192e-007, -0.923849 0.382757 2.25685e-007, -0.973934 0.226832 1.7176e-007, -0.81304 0.582208 0, + -0.571505 0.820598 0, -0.679241 0.733916 0, -0.910747 0.412965 4.51125e-007, -0.401735 0.915756 0, -0.223902 0.974612 0, + -0.387856 0.92172 0, -0.0304913 0.999535 3.50647e-014, -0.190922 0.981605 3.51742e-009, 0.190922 0.981605 -3.51778e-009, + 0.157725 0.987483 -7.0308e-009, 0.387856 0.92172 0, -2.34427e-007 1 3.56756e-014, 0.67924 0.733916 -8.29888e-007, + 0.557074 0.830463 7.93693e-007, -0.355144 0.934812 0, 0.813039 0.582209 -4.5804e-007, 0.704153 0.710048 4.64654e-008, + 0.83159 0.55539 0, 0.910747 0.412965 0, 0.980862 0.194703 -1.15599e-006, 0.973934 0.226832 -2.31214e-006, + 0.923849 0.382758 -5.67033e-007, -0.53265 0.846335 0, 0.0304908 0.999535 3.62533e-014, 0.223902 0.974612 0, + -0.157725 0.987483 7.03161e-009, 0.420087 0.907484 1.03793e-006, 0.581025 0.813886 1.95783e-006, 0.728227 0.685336 0, + 0.935949 0.352135 0, 0.986731 0.162363 1.46556e-009, 0.849256 0.527982 0, 0.691299 -0.11842 -0.712799, + 0.703993 0.0217281 -0.709875, 0.710996 -0.0120529 -0.703093, 0.635324 -0.249941 -0.73068, 0.695649 -0.1678 -0.698509, + 0.709786 -0.119055 -0.694284, 0.64288 -0.304288 -0.702933, 0.6685 -0.255113 -0.698588, 0.574275 -0.378661 -0.725826, + 0.51311 -0.509102 -0.691038, 0.586776 -0.437961 -0.681091, 0.387009 -0.587805 -0.710429, 0.498538 -0.560089 -0.661635, + 0.0370169 -0.767152 -0.640397, 0.103701 -0.760381 -0.641145, 0.239321 -0.737475 -0.63155, 0.371454 -0.653207 -0.659805, + 0.518457 -0.490876 -0.700174, 0.709736 -0.000306384 -0.704468, 0.59669 -0.376496 -0.708669, 0.412945 -0.596128 -0.688555, + 0.291206 -0.681396 -0.67149, 0.151269 -0.733895 -0.662205, 0.044951 -0.719684 -0.692845, -0.546063 -0.575413 -0.608864, + -0.585088 -0.484856 -0.650066, -0.703042 -0.0325964 -0.710401, -0.704048 -0.166774 -0.690292, -0.663256 0.249581 -0.70555, + -0.692264 0.113582 -0.71265, -0.691098 0.136535 -0.709747, -0.715908 -0.00772039 -0.698152, -0.662978 -0.332616 -0.670692, + -0.532198 -0.542693 -0.649807, -0.646585 -0.277793 -0.710464, -0.599757 -0.440143 -0.668256, -0.643827 0.26668 -0.717195, + -0.594598 0.369848 -0.713909, -0.679717 0.15719 -0.716433, -0.708421 0.0198273 -0.705511, -0.569549 0.382084 -0.727754, + -0.700503 -0.129572 -0.701788, -0.427835 0.596444 -0.679126, -0.4853 0.456542 -0.74569, -0.500345 0.501625 -0.705711, + -0.252002 0.612961 -0.748848, -0.139537 0.605913 -0.783198, -0.281799 0.610458 -0.740223, -0.399296 0.591675 -0.700345, + 0.00793432 0.721382 -0.692492, 0.10586 0.656092 -0.74722, -0.0231213 0.700237 -0.713536, 0.267133 0.643827 -0.717026, + 0.38383 0.615957 -0.687948, 0.220516 0.578955 -0.784974, 0.144764 0.652148 -0.744142, -0.137741 0.682477 -0.717811, + 0.394074 0.596638 -0.699091, 0.472722 0.508803 -0.719482, -0.493889 0.52293 -0.694707, -0.577244 0.415119 -0.703183, + 0.553432 0.39664 -0.732386, 0.491078 0.489611 -0.720503, 0.585528 0.393494 -0.708745, 0.64427 0.292714 -0.706566, + 0.686278 0.135121 -0.714678, 0.685884 0.159226 -0.710077, 0.644763 0.267306 -0.716121, -0.625939 0.284353 -0.726185, + -0.253028 0.674194 -0.693859, -0.1253 0.725188 -0.677054, -0.36376 0.592777 -0.718536, -3.36369e-007 0.741126 -0.671366, + 0.14621 0.71549 -0.683152, 0.411376 0.571018 -0.710428, 0.287573 0.64288 -0.709935, 0.586514 0.365913 -0.722571, + 0.695864 0.114141 -0.709045, 0.643295 0.240218 -0.726958, 0.526556 0.495132 -0.691074, 5.02675e-009 -1 -2.39694e-015, + 0.051765 -0.998659 -1.20585e-008, -0.307728 -0.951474 7.15507e-008, -0.384031 -0.92332 8.93919e-008, + -0.708822 -0.705387 1.65118e-007, -0.051765 -0.998659 1.20585e-008, -0.457793 -0.889059 1.06642e-007, + -0.686625 -0.727012 1.59947e-007, -0.905811 -0.423682 2.11006e-007, -0.919129 -0.393957 2.14109e-007, + -0.998685 -0.0512745 2.32641e-007, -0.948896 0.315588 2.21043e-007, -0.999895 0.0145072 2.32923e-007, + -0.692045 0.721854 1.6121e-007, -0.753383 0.657582 1.75499e-007, -0.422617 0.906308 9.84476e-008, + -0.929598 0.368575 2.16547e-007, -0.103465 0.994633 2.41019e-008, -0.391993 0.919968 9.11874e-008, + -0.744275 -0.667874 1.73377e-007, -0.996777 0.0802261 2.32196e-007, -0.946351 -0.323142 2.2045e-007, + -0.907344 0.420389 2.11363e-007, -0.625244 0.780429 1.45649e-007, -0.360927 0.932594 8.38232e-008, + -2.08132e-008 1 4.96225e-015, 0.103465 0.994633 -2.41019e-008, 0.360927 0.932594 -8.38246e-008, + 0.391993 0.919968 -9.11867e-008, 0.692045 0.721855 -1.6121e-007, 0.422617 0.906308 -9.84475e-008, + 0.652519 0.757773 -1.52002e-007, 0.92041 0.390954 -2.14407e-007, 0.929598 0.368575 -2.16547e-007, + 0.996777 0.0802265 -2.32196e-007, 0.946351 -0.323141 -2.2045e-007, 0.999895 0.0145076 -2.32923e-007, + 0.708822 -0.705387 -1.65118e-007, 0.744275 -0.667873 -1.73377e-007, 0.457793 -0.889059 -1.06642e-007, + 0.919129 -0.393957 -2.14109e-007, 0.384031 -0.92332 -8.93919e-008, 0.753383 0.657582 -1.75499e-007, + 0.998685 -0.051274 -2.32641e-007, 0.948896 0.315588 -2.21043e-007, 0.886617 -0.462505 -2.06535e-007, + 0.671481 -0.741022 -1.5642e-007, 0.307728 -0.951474 -7.15508e-008, -0.0136116 -0.493964 0.869376, 0.0523378 -0.51183 0.857491, + -0.176144 -0.467571 0.866228, -0.335865 -0.370966 0.865782, -0.238329 -0.433744 0.868945, 4.97439e-008 0.00701813 0.999975, + -0.373439 -0.327225 0.868025, -0.442743 -0.214737 0.870555, -0.500455 -0.0303797 0.865229, -0.471593 -0.164997 0.866242, + -0.480155 0.159737 0.862517, -0.501933 0.0212701 0.864645, -0.377277 0.329775 0.865396, -0.243693 0.468712 0.849072, + -0.350491 0.367493 0.861455, -0.00446936 0.490893 0.871209, -0.157414 0.475915 0.86529, -0.463708 0.202291 0.862585, + 0.0294697 0.513141 0.857798, 0.136045 0.507532 0.850825, 0.333435 0.383055 0.861446, 0.172911 0.480743 0.859644, + 0.38336 0.323345 0.865149, 0.45947 0.212945 0.862289, 0.501634 0.0405233 0.86413, 0.476108 0.170363 0.862727, + 0.464981 -0.162598 0.870261, 0.500085 -0.018061 0.865788, 0.379315 -0.321505 0.867615, 0.22595 -0.438899 0.869663, + 0.355515 -0.351628 0.866006, 0.196819 -0.460988 0.865305, 0.454215 -0.207037 0.866501, -1.04066e-008 1 2.48113e-015, + 0.692071 0.72183 -1.61216e-007, 0.65254 0.757754 -1.52008e-007, 0.920426 0.390916 -2.14411e-007, + 0.929611 0.368541 -2.1655e-007, 0.996777 0.0802266 -2.32196e-007, 0.999895 0.0145077 -2.32923e-007, + 0.708822 -0.705387 -1.57177e-007, 0.45775 -0.889081 -1.06632e-007, 0.919129 -0.393957 -1.96266e-007, + 0.0517146 -0.998662 -1.20468e-008, 0.383962 -0.923349 -8.9376e-008, 0.753415 0.657545 -1.75506e-007, + 0.998685 -0.051274 -2.13217e-007, 0.948904 0.315566 -2.21045e-007, 0.886617 -0.462505 -1.70953e-007, + 0.307633 -0.951505 -7.15287e-008, 1.00533e-008 -1 -1.19844e-015, -0.0517146 -0.998662 1.20468e-008, + -0.307633 -0.951505 7.15287e-008, -0.383962 -0.923349 8.9376e-008, -0.45775 -0.889081 1.06632e-007, + -0.905811 -0.423682 1.95721e-007, -0.948904 0.315565 2.21045e-007, -0.999895 0.0145072 2.2319e-007, + -0.692071 0.72183 1.61216e-007, -0.753415 0.657545 1.75506e-007, -0.929612 0.368541 2.16551e-007, + -0.744275 -0.667874 1.57516e-007, -0.996777 0.080226 2.32196e-007, -0.946351 -0.323142 1.84868e-007, + -0.907364 0.420346 2.11368e-007, -0.625262 0.780415 1.45653e-007, 0.0294697 0.513122 0.85781, 0.333459 0.383005 0.861459, + 0.172943 0.480698 0.859663, 3.0279e-008 0.00698652 0.999976, 0.383377 0.323324 0.86515, 0.459472 0.212959 0.862284, + 0.501638 0.0405125 0.864129, 0.476101 0.170378 0.862728, 0.464966 -0.162603 0.870268, 0.500081 -0.0180875 0.86579, + 0.379294 -0.321486 0.867631, 0.22591 -0.438875 0.869686, 0.35551 -0.351622 0.866011, 0.0523376 -0.511823 0.857495, + 0.196806 -0.460993 0.865305, 0.454205 -0.207046 0.866504, -0.0135934 -0.493972 0.869371, -0.176107 -0.467551 0.866246, + -0.335843 -0.370942 0.865801, -0.238325 -0.433738 0.868949, -0.373435 -0.327222 0.868028, -0.442727 -0.214728 0.870566, + -0.500452 -0.0303907 0.865231, -0.471591 -0.16501 0.866241, -0.480173 0.15972 0.86251, -0.501937 0.0212434 0.864643, + -0.377258 0.32977 0.865406, -0.243725 0.468682 0.849079, -0.350501 0.367475 0.861459, -0.157456 0.47588 0.865301, + -0.463697 0.202295 0.86259, -2.20305e-007 2.9344e-008 -1, -1.70995e-007 1.33806e-007 -1, -2.24404e-007 -2.40494e-007 -1, + -4.79902e-007 -2.1893e-007 -1, -3.95949e-007 -7.82281e-008 -1, -6.29716e-007 5.53086e-009 -1, -5.13211e-007 -2.02266e-007 -1, + -2.36552e-007 1.38587e-007 -1, -1.8203e-007 2.0602e-007 -1, -2.00808e-007 1.96973e-007 -1, -1.80421e-007 1.21721e-007 -1, + -2.35608e-007 6.79327e-008 -1, -3.21119e-007 -1.73268e-007 -1, -8.17783e-008 -3.88528e-008 -1, -1.73064e-007 3.53598e-008 -1, + -2.40855e-007 1.4643e-008 -1, -2.34821e-007 -1.47254e-007 -1, -2.95931e-007 2.0319e-007 -1, -2.00742e-007 -9.31924e-008 -1, + -2.56908e-007 1.099e-007 -1, -1.6511e-007 -3.33522e-008 -1, -2.16883e-007 -4.28714e-008 -1, -2.77825e-007 -1.00189e-007 -1, + -1.68588e-007 -1.66797e-007 -1, -2.14324e-007 -2.15421e-007 -1, -6.8814e-008 -9.29895e-008 -1, -1.83113e-007 3.23748e-008 -1, + -8.11583e-008 -3.85583e-008 -1, -1.97784e-007 -8.47612e-008 -1, -1.57072e-007 -4.5289e-008 -1, -2.20305e-007 -2.93442e-008 -1, + -2.165e-007 -2.29088e-007 -1, -2.80187e-007 -1.09792e-007 -1, -1.70995e-007 -1.33806e-007 -1, -2.36552e-007 -1.38587e-007 -1, + -2.9592e-007 2.03161e-007 -1, -2.5691e-007 1.09906e-007 -1, -2.4081e-007 1.49121e-008 -1, -2.46703e-007 9.54858e-008 -1, + -2.47665e-007 5.00277e-008 -1, -4.00003e-007 -8.34766e-008 -1, -3.18248e-007 3.72039e-007 -1, -2.69659e-007 -1.85924e-008 -1, + -3.35573e-007 1.66391e-007 -1, -3.13076e-007 -1.86851e-007 -1, -5.06691e-007 -2.15849e-007 -1, -4.80288e-007 -2.18958e-007 -1, + -1.80431e-007 1.21693e-007 -1, -3.33249e-007 -3.47107e-007 -1, -2.00803e-007 1.96981e-007 -1, -6.42745e-007 2.5834e-008 -1, + 0.701143 0.116084 -0.703508, 0.704538 -0.0238074 -0.709267, 0.706107 8.95815e-005 -0.708105, 0.700392 0.265647 -0.662483, + 0.711599 0.142466 -0.68799, 0.639313 0.60529 -0.47424, 0.689059 0.431447 -0.582281, 0.634551 0.425712 -0.645069, + 0.452556 0.677985 -0.579249, 0.503773 0.506415 -0.699826, 0.710136 0.297377 -0.63818, 0.720771 0.0235633 -0.692773, + 0.718765 0.169286 -0.674328, 0.491833 0.350812 -0.796888, 0.345306 0.494852 -0.797424, 0.416577 0.444375 -0.793092, + 0.660165 0.296207 -0.690249, 0.260887 0.55542 -0.789587, 0.22309 0.972789 -0.0625545, 0.38312 0.911918 -0.147056, + 0.351915 0.928623 -0.117537, 0.0911193 0.99567 -0.0184081, 0.190389 0.980955 -0.0384628, -0.227886 0.971617 -0.0634743, + -0.351918 0.928627 -0.1175, -0.197979 0.97939 -0.0399963, -0.38283 0.912057 -0.146945, -0.474566 0.861165 -0.182157, + -0.0575497 0.628849 -0.775395, 0.00470434 0.629886 -0.776673, 0.0154512 0.63775 -0.770089, -0.560824 0.592742 -0.578043, + -0.329062 0.497357 -0.802717, -0.376482 0.556337 -0.740777, 0.125157 0.621147 -0.773636, 0.220793 0.591743 -0.775301, + -0.686968 0.494847 -0.532167, -0.540836 0.535092 -0.648978, -0.596671 0.396232 -0.697842, -0.709594 0.324261 -0.625565, + -0.710296 0.142863 -0.689253, -0.704555 0.0227587 -0.709284, -0.706913 0.16613 -0.687513, -0.680356 0.280729 -0.676983, + 0.326938 0.52717 -0.784349, -0.105889 0.994148 -0.021392, -0.0226733 0.642919 -0.765598, -0.107399 0.633395 -0.766339, + -0.144453 0.618245 -0.772598, -0.235585 0.575018 -0.783488, 0.107233 0.633417 -0.766344, -0.254762 0.56606 -0.784011, + -0.354015 0.494255 -0.793968, -0.435497 0.407774 -0.802535, -0.710455 0.268344 -0.650573, -0.712902 -0.000289182 -0.701264, + -0.715857 0.118892 -0.68805, -0.568304 0.346679 -0.74622, -0.707487 -0.0225999 -0.706365, -0.701085 -0.116788 -0.703449, + -0.605874 -0.222865 -0.763707, -0.66804 -0.129955 -0.732689, -0.427799 -0.39919 -0.810947, -0.500433 -0.310411 -0.808215, + -0.594175 -0.394134 -0.701152, -0.331737 -0.497101 -0.801774, -0.537904 -0.531859 -0.654052, -0.616681 -0.254698 -0.744871, + -0.670574 -0.15636 -0.725177, -0.798936 -0.534099 -0.276477, -0.483359 -0.6898 -0.539017, -0.692237 -0.692215 -0.204073, + -0.713956 -0.327029 -0.619127, -0.236235 -0.57048 -0.786604, -0.141659 -0.60434 -0.784032, -0.234615 -0.567211 -0.789448, + -0.0664466 -0.62228 -0.77997, -0.134561 -0.616989 -0.775383, 0.119767 -0.619621 -0.77571, 0.216854 -0.579027 -0.78594, + 0.119447 -0.61387 -0.780318, 0.235594 -0.573344 -0.784711, 0.318942 -0.512913 -0.796992, 0.106176 -0.994347 -2.44464e-008, + 0.00766285 -0.999971 -1.76434e-009, 0.407122 -0.432724 -0.804364, 0.419527 -0.625946 -0.65741, -0.224185 -0.592542 -0.773715, + 0.484042 -0.345731 -0.803849, 0.545873 -0.55431 -0.628302, 0.604532 -0.410741 -0.68252, 0.552249 -0.249126 -0.795586, + 0.685778 -0.136136 -0.714965, 0.668633 -0.153755 -0.727522, 0.663457 -0.27582 -0.69552, -0.0909244 -0.995858 2.09349e-008, + -0.539616 -0.817632 -0.200731, -0.45584 -0.856132 -0.243409, -0.00029493 -0.638637 -0.769508, 0.0194538 -0.64315 -0.765493, + 0.141566 -0.619571 -0.772069, -0.100795 -0.633919 -0.766803, 0.239792 -0.581733 -0.77723, 0.551247 -0.817881 -0.164916, + 0.683562 -0.688455 -0.242431, 0.676272 -0.259005 -0.689618, 0.665814 -0.106699 -0.738449, 0.78856 -0.534038 -0.304921, + 0.384744 -0.920879 -0.062878, 0.986621 0.163028 1.43793e-009, 0.999466 -0.0326624 1.68581e-013, 1 5.97657e-006 1.67332e-013, + 0.980676 0.195638 7.07935e-010, 0.729378 0.684111 0, 0.999466 0.0326743 1.65905e-013, 0.571183 0.820823 0, + 0.393151 0.919474 0, 0.0353932 0.999373 3.57047e-014, 0.197383 0.980326 -4.07579e-009, -0.197383 0.980326 4.07293e-009, + -0.166878 0.985978 8.14769e-009, -0.526664 0.850073 0, -2.32268e-007 1 3.57271e-014, -0.81315 0.582055 0, + -0.980676 0.195638 7.19356e-010, -0.999466 0.0326737 1.68581e-013, 0.526663 0.850074 0, 0.166878 0.985978 -8.1419e-009, + -0.410365 0.911921 0, -0.58206 0.813146 0, -1 5.51741e-006 1.6287e-013, -0.850635 0.525757 0, + -0.999466 -0.0326627 1.56985e-013, -0.986621 -0.163033 -1.43776e-009, -0.935282 -0.353904 0, + -0.980673 -0.195652 -7.07858e-010, -0.786006 -0.532622 0.313861, -0.575484 -0.817813 0, -0.681981 -0.687161 0.250422, + -0.909938 -0.414745 0, -0.400109 -0.916468 0, -0.190068 -0.981771 3.49924e-009, 0.157005 -0.987598 -6.99458e-009, + 2.31924e-007 -1 -3.56741e-014, 0.560129 -0.828405 0, -0.353675 -0.935368 0, 0.980674 -0.195651 -7.19278e-010, + 0.973648 -0.228054 0, -0.52977 -0.804661 0.268075, 0.418402 -0.908262 0, 0.546655 -0.80181 0.24139, + 0.691194 -0.691121 0.211192, 0.986621 -0.163033 -1.41493e-009, 0.796914 -0.532606 0.285059, 0.702278 0.116663 0.702278, + 0.693388 -0.0221162 0.720225, 0.705923 -0.000510911 0.708288, 0.69837 0.263855 0.665327, 0.703633 0.141324 0.696367, + 0.424384 0.397358 0.813637, 0.556169 0.339057 0.75876, 0.591282 0.392313 0.70461, 0.331498 0.497808 0.801434, + 0.536616 0.530506 0.656206, 0.704555 0.0227591 0.709284, 0.706914 0.166131 0.687513, 0.686968 0.494847 0.532167, + 0.389344 0.550775 0.73828, 0.560823 0.592742 0.578043, 0.709594 0.324261 0.625565, 0.241245 0.556818 0.79483, + 0.141016 0.603574 0.784738, 0.232624 0.565112 0.791539, 0.0221395 0.627924 0.77796, 0.104888 0.618594 0.778678, + -0.122581 0.610147 0.782748, -0.215514 0.577605 0.787354, -0.104727 0.618616 0.778683, -0.248673 0.552179 0.795776, + -0.318953 0.514287 0.796102, -0.015132 0.628729 0.777477, -0.406185 0.433282 0.804537, -0.341481 0.486612 0.804114, + 0.227885 0.971617 0.0634743, 0.382829 0.912058 0.146944, 0.351918 0.928627 0.1175, -0.47946 0.34196 0.808197, + -0.498837 0.501845 0.70662, -0.647872 0.29061 0.704137, -0.706918 0.02311 0.706918, -0.705662 0.166248 0.68877, + 0.329061 0.497357 0.802717, -0.00470463 0.629886 0.776674, -0.223091 0.972789 0.0625546, -0.347611 0.930449 0.115897, + -0.190389 0.980955 0.0384629, 0.474566 0.861166 0.182156, 0.197979 0.97939 0.0399963, 0.105888 0.994148 0.0213919, + -0.0911197 0.99567 0.0184082, 0.0575498 0.628849 0.775395, -0.376748 0.914958 0.14461, -0.427662 0.583792 0.69014, + -0.639313 0.60529 0.47424, -0.700392 0.265647 0.662483, -0.699072 0.000330386 0.715051, -0.701143 0.116083 0.703508, + -0.689059 0.431446 0.582281, -0.286213 0.519372 0.805192, -0.704538 -0.0238076 0.709267, -0.462499 0.868665 0.177525, + -0.651446 -0.104275 0.751495, -0.663601 -0.254326 0.703528, -0.678959 -0.134555 0.72174, -0.542654 -0.551027 0.633952, + -0.668633 -0.153756 0.727522, -0.484042 -0.345731 0.803849, -0.440106 -0.636964 0.632916, -0.407118 -0.43272 0.804368, + -0.552248 -0.249126 0.795587, -0.45473 -0.854048 0.25263, -0.138204 -0.604886 0.784227, -0.237669 -0.566492 0.78905, + -0.234132 -0.565785 0.790613, -0.0189959 -0.628153 0.777858, 0.132541 -0.608168 0.782665, 0.218849 -0.578439 0.78582, + 0.0984361 -0.619088 0.779128, 0.225134 -0.574069 0.787248, -4.60261e-005 -0.62735 0.778738, 0.451811 -0.667653 0.591698, + -0.216854 -0.579027 0.78594, 0.533932 -0.528173 0.660265, 0.702927 -0.322067 0.634167, 0.660934 -0.12877 0.739313, + 0.65666 -0.153152 0.738473, 0.609901 -0.252177 0.751284, -0.318937 -0.512906 0.796999, -0.00766239 -0.999971 1.76643e-009, + 0.0909249 -0.995858 -2.09611e-008, 0.141659 -0.60434 0.784032, -0.119447 -0.61387 0.780318, 0.0664465 -0.62228 0.77997, + -0.106175 -0.994347 2.44768e-008, 0.24942 -0.552834 0.795088, 0.34502 -0.480141 0.80649, 0.427799 -0.399189 0.810947, + 0.605874 -0.222865 0.763707, 0.701085 -0.116788 0.703449, 0.500433 -0.310411 0.808215, 0.454731 -0.854048 0.25263, + -0.0970249 -0.016151 0.995151, -0.0841216 -0.0310605 0.995971, 4.66958e-008 -1.50408e-007 1, 1.18846e-007 -2.90382e-007 1, + -0.071844 -0.0448273 0.996408, 1.82372e-007 -1.46371e-007 1, -0.0643973 3.72549e-007 0.997924, -2.67915e-015 0 1, + -6.04189e-017 0 1, 2.63887e-015 0 1, 1.30442e-007 -8.41025e-008 1, -0.0265925 -0.0743599 0.996877, + -0.0168003 -0.0968972 0.995153, 3.10518e-007 -2.99633e-008 1, 2.43795e-007 -0.040582 0.999176, -0.0855815 -0.0866303 0.992558, + -0.0465377 -0.073159 0.996234, -0.113005 0.0228115 0.993333, -0.083428 0.0348284 0.995905, 1.76872e-007 1.54738e-007 1, + -0.0825901 0.0505089 0.995303, -0.0536615 0.0872453 0.994741, -0.0860157 0.0862313 0.992555, -0.0392331 0.104391 0.993762, + 1.23108e-007 9.52585e-008 1, -0.0189179 0.116588 0.993, 3.00129e-007 8.56015e-008 1, 2.15301e-007 0.0801294 0.996784, + 1.52556e-007 2.94416e-008 1, 3.10977e-007 -3.00518e-008 1, 2.32889e-007 5.36571e-014 1, 2.98516e-007 9.42514e-008 1, + 0.0168008 -0.0968971 0.995153, 1.30442e-007 8.41025e-008 1, 0.0265928 -0.0743598 0.996877, 1.82372e-007 1.46372e-007 1, + 0.0465381 -0.0731586 0.996234, 0.0718442 -0.0448271 0.996408, 0.0855819 -0.0866299 0.992558, 0.0621573 -0.0254405 0.997742, + 0.106976 -0.0211331 0.994037, 0.0643973 4.0279e-007 0.997924, 2.67915e-015 0 1, 0.0392338 0.104391 0.993762, + 1.91759e-006 2.64456e-006 1, 0.0536626 0.0872465 0.99474, 8.42119e-007 8.57282e-007 1, 0.0860161 0.086231 0.992555, + 0.0825902 0.0505087 0.995303, 0.0189183 0.116588 0.993, 1.44821e-007 -5.51126e-008 1, -2.63887e-015 0 1, + 0.0970249 0.0161518 0.995151, 6.04189e-017 0 1, 6.55314e-008 -1.4033e-007 1, 1.55418e-007 -2.70842e-007 1, + 0.101929 0.0387558 0.994036, -0.321134 1.85325e-006 0.947034, -0.425594 0.0731491 0.901953, -0.321956 0.123878 0.938615, + -0.693528 0.0119245 0.720331, -0.699661 0.162959 0.695642, -0.639625 0.279009 0.716264, -0.35499 0.242059 0.902989, + -0.834052 0.34416 0.431174, -0.910021 0.183852 0.371564, -0.200426 0.311735 0.92879, -0.0774655 0.365788 0.927469, + -0.00791616 0.391639 0.920085, -0.145537 0.3664 0.919005, -0.629697 0.400719 0.665513, -0.266402 0.279048 0.922584, + -0.551333 0.51525 0.656163, -0.255691 0.595937 0.761237, -0.122451 0.615356 0.77868, -0.397591 0.549847 0.734568, + -0.930754 -0.0121185 0.365445, -0.97592 0.194276 0.0991857, -0.770087 0.512446 0.379954, -0.913521 0.395436 0.0954426, + -0.996588 0.0190189 0.0803125, -0.805048 0.576774 0.138671, -0.644684 0.657832 0.38941, -0.376264 0.609531 0.69778, + -0.277589 0.664171 0.694134, -0.141865 0.710099 0.689662, -0.551127 0.832141 0.0616408, -0.53793 0.835956 0.108671, + -0.675038 0.699985 0.23312, -0.413682 0.909635 0.0378276, -0.356075 0.934379 0.0120901, -0.23031 0.97303 0.0130135, + -0.16248 0.986708 0.0025845, -2.41352e-007 0.999998 0.00186414, 0.00779268 0.667973 0.744145, 0.0874203 0.423997 0.901435, + 0.139432 0.326314 0.934921, 0.200426 0.311735 0.92879, 0.248906 0.574706 0.779589, 0.14559 0.651415 0.744622, + 0.118134 0.717639 0.686323, 0.397591 0.549847 0.734568, 0.266403 0.279048 0.922584, 0.376264 0.609531 0.697781, + 0.257262 0.675668 0.690861, 0.35499 0.242059 0.902989, 0.390083 0.0716427 0.917988, 0.321134 2.00442e-006 0.947034, + 0.343027 0.134693 0.929618, 0.552774 0.531554 0.641788, 0.62647 0.441064 0.64265, 0.640579 0.290777 0.710709, + 0.720405 0.151381 0.676832, 0.687132 -0.0115798 0.72644, 0.611947 0.631929 0.47559, 0.23031 0.97303 0.0130135, + 0.196568 0.980487 0.00258604, -1.12023e-008 0.728985 0.68453, 0.413682 0.909635 0.0378276, 0.551127 0.832142 0.0616408, + 0.551682 0.828637 0.0949083, 0.367776 0.929801 0.0145127, 0.0189007 0.999821 4.42421e-014, 0.715171 0.665039 0.215066, + 0.762338 0.490504 0.422192, 0.862569 0.340851 0.373891, 0.921058 0.203677 0.331914, 0.933989 0.0113685 0.357122, + 0.924463 0.369132 0.0954432, 0.839479 0.540463 0.0563452, 0.98186 0.161631 0.0991323, 0.996558 -0.0205374 0.0803125, + 0.425559 -0.0738949 0.901909, 0.346503 -0.134212 0.928398, 0.665569 -0.155048 0.730053, 0.590513 -0.255865 0.765394, + 0.355727 -0.24389 0.902206, 0.808847 -0.336093 0.482503, 0.89512 -0.180194 0.407786, 0.187641 -0.27146 0.943981, + 0.0710547 -0.347982 0.934805, 0.00796042 -0.359889 0.932961, 0.0914805 -0.242858 0.965739, 0.614123 -0.390969 0.685563, + 0.365789 -0.386127 0.84682, 0.547481 -0.518226 0.657044, 0.333868 -0.779638 0.529808, 0.452875 -0.855172 0.25216, + 0.367894 -0.907025 0.204843, 0.144607 -0.709834 0.689366, 0.46957 -0.651033 0.596372, 0.975774 -0.195017 0.0991687, + 0.785707 -0.517452 0.338979, 0.915167 -0.391579 0.0955778, 0.81057 -0.581857 0.0664791, 0.662889 -0.682513 0.307823, + 0.528385 -0.810551 0.25262, 0.272674 -0.666177 0.694159, 0.159063 -0.705109 0.691028, 0.544888 -0.837695 0.0369405, + 0.693932 -0.718776 0.0426547, 0.409229 -0.911662 0.0374807, 0.346736 -0.937888 0.011815, 0.196691 -0.98042 0.00947734, + 0.173238 -0.984875 0.00310737, 2.43606e-007 -0.999998 0.00217185, -0.0108909 -0.641963 0.766658, -0.067306 -0.390315 0.918218, + -0.0624215 -0.132588 0.989204, -0.18764 -0.271461 0.943981, -0.291379 -0.94275 0.162239, -0.374088 -0.903699 0.208292, + -0.331853 -0.762782 0.555011, -0.139601 -0.652753 0.744597, -0.137344 -0.713051 0.687528, -0.469569 -0.651034 0.596372, + -0.365788 -0.386128 0.84682, -0.528385 -0.810551 0.25262, -0.452875 -0.855172 0.25216, -0.250436 -0.677863 0.691219, + -0.355727 -0.24389 0.902206, -0.3835 -0.0702026 0.920869, -0.371652 -0.146778 0.916696, -0.508751 -0.499186 0.701417, + -0.599079 -0.418562 0.682576, -0.632188 -0.286983 0.719708, -0.691625 -0.145093 0.707533, -0.653319 -0.673068 0.346632, + -0.196691 -0.98042 0.00947795, -0.211096 -0.97746 0.00310748, 2.43605e-007 -1 -5.53995e-014, -0.409229 -0.911662 0.0374806, + -0.557164 -0.829773 0.0323263, -0.35943 -0.933064 0.0141836, 3.36184e-007 -0.779988 0.625795, -0.073431 -0.777882 0.624105, + -0.728415 -0.682723 0.0574508, -0.796438 -0.52022 0.308314, 0.0734317 -0.777882 0.624105, -0.812159 -0.317576 0.489431, + -0.904901 -0.199866 0.375775, -0.925608 -0.366217 0.0955783, -0.841847 -0.536752 0.0564807, -0.981696 -0.162629 0.099116, + 1 -0.000761434 -2.23531e-011, 0.980825 0.194888 6.92153e-010, 0.829903 0.557907 0, 0.708022 0.70619 -3.3265e-007, + 0.996785 0.0190135 -0.0778288, 0.976219 0.194314 -0.0961152, 0.827693 0.556717 -0.0706459, 0.57442 0.818561 -6.93393e-007, + 0.685406 0.702981 -0.189832, 0.919995 0.382899 -0.0836552, 0.39775 0.917494 -2.09844e-007, 0.196582 0.980487 -5.45739e-008, + -0.196582 0.980487 5.4574e-008, -0.385348 0.922771 2.83486e-007, -2.38234e-007 1 -1.22468e-008, + -0.557581 0.830123 5.77949e-007, 0.356076 0.934384 -0.0117054, -0.980826 0.194888 6.92147e-010, 0.528757 0.848372 -0.0260958, + -0.0189012 0.999821 1.46936e-008, -0.196569 0.980487 -0.00250365, 0.16248 0.986709 -0.00250226, -0.385282 0.922725 -0.0117111, + -0.557342 0.829872 -0.026111, -0.704897 0.683436 -0.189832, -0.929011 0.364668 -0.0629035, -1 -0.000761908 -2.23665e-011, + -0.977967 0.179997 -0.105743, -0.845718 0.528938 -0.0706077, -0.996755 -0.0205321 -0.0778288, -0.980677 -0.195635 -7.531e-010, + -0.831944 -0.55486 0, -0.707986 -0.706227 0, -0.976073 -0.195055 -0.0960986, -0.82971 -0.553679 -0.0708623, + -0.574414 -0.818565 0, -0.697123 -0.714633 -0.0576084, -0.921394 -0.379504 -0.0837224, -0.391919 -0.92 1.68111e-007, + -0.0314506 -0.999505 -3.62619e-014, -0.189166 -0.981945 7.7197e-008, 0.189166 -0.981945 -3.62582e-009, + 0.378475 -0.925612 -1.9615e-007, 2.39479e-007 -1 -3.62798e-014, 0.557592 -0.830115 -1.2254e-007, + -0.346738 -0.937892 -0.0114389, 0.707986 -0.706227 0, 0.831944 -0.55486 0, 0.980677 -0.195635 -7.53099e-010, + 0.92479 -0.380479 0, -0.5288 -0.848345 -0.0260975, 0.0314511 -0.999505 -3.62619e-014, 0.211097 -0.977461 -0.0030084, + -0.173238 -0.984875 -0.00300866, 0.378411 -0.925567 -0.011446, 0.557354 -0.829864 -0.0261128, 0.716066 -0.695651 -0.0576087, + 0.93007 -0.361941 -0.0629982, 0.977811 -0.18085 -0.105727, 0.848287 -0.52478 -0.0708211, -0.946989 -0.000722348 -0.321264, + -0.897396 0.161724 -0.410518, -0.880672 0.353568 -0.315289, -0.718928 0.00829091 -0.695035, -0.691252 0.161011 -0.704448, + -0.642395 0.281557 -0.712779, -0.736989 0.507352 -0.446588, -0.41109 0.171971 -0.895227, -0.383232 0.0707254 -0.92094, + -0.484171 0.723784 -0.491645, -0.230312 0.973035 -0.0125992, -2.43223e-007 0.999998 -0.00180478, + -0.413703 0.909675 -0.0366251, -0.548181 0.357031 -0.756324, -0.606134 0.62444 -0.492622, -0.54548 0.509799 -0.665249, + -0.244726 0.564716 -0.788166, -0.256318 0.673185 -0.69363, -0.131425 0.65775 -0.741682, -0.142369 0.709522 -0.690152, + -0.392449 0.542636 -0.74265, -0.0226712 0.724672 -0.688721, -0.354195 -0.00789996 -0.935138, -0.0858474 0.0142906 -0.996206, + -0.349599 0.24069 -0.905455, -0.113167 0.0467792 -0.992474, -0.0997831 5.77096e-007 -0.995009, -0.0740268 0.0528402 -0.995855, + -0.22439 0.233557 -0.946097, -0.212146 0.337447 -0.917128, -0.137987 0.322549 -0.936441, -0.0858714 0.415754 -0.905414, + -0.0645143 0.0978066 -0.993112, -0.066365 0.0661006 -0.995604, -0.0167311 0.103106 -0.99453, -3.06895e-007 0.356463 -0.934309, + 0.00978808 0.636131 -0.771519, 0.141343 0.7075 -0.692435, 0.230311 0.973036 -0.0125992, 0.413702 0.909675 -0.036625, + 0.484171 0.723784 -0.491645, 0.276563 0.661706 -0.696891, 0.252179 0.588103 -0.768466, 0.133402 0.610132 -0.780989, + 0.0731517 0.398014 -0.914458, 0.392448 0.542637 -0.74265, 0.606134 0.62444 -0.492622, 0.212145 0.337448 -0.917128, + 0.14333 0.36005 -0.921857, 0.736988 0.507353 -0.446588, 0.910436 0.183987 -0.370479, 0.946989 -0.000721901 -0.321264, + 0.868334 0.364272 -0.336605, 0.543626 0.521588 -0.657584, 0.543409 0.374543 -0.751282, 0.632688 0.287196 -0.719183, + 0.671583 0.145742 -0.726454, 0.718932 -0.00764276 -0.695038, 0.286976 0.28579 -0.914313, 0.0167306 0.103106 -0.99453, + 0.064513 0.0978055 -0.993112, 0.0404927 0.10774 -0.993354, -2.65809e-007 0.124133 -0.992266, 0.0803963 0.0751265 -0.993928, + 0.323291 0.207387 -0.923295, 0.371509 0.141785 -0.917539, 0.349379 0.074031 -0.934052, 0.354195 0.00790424 -0.935138, + 0.113168 0.04678 -0.992474, 0.0594769 0.0394801 -0.997449, 0.0858474 0.0142906 -0.996206, 0.0997831 6.24369e-007 -0.995009, + 0.877367 -0.156718 -0.453505, 0.851862 -0.338758 -0.399468, 0.656363 -0.152883 -0.738793, 0.659156 -0.292722 -0.692695, + 0.756779 -0.523545 -0.39139, 0.408262 -0.168352 -0.897207, 0.376428 -0.0692119 -0.923857, 0.548443 -0.805 -0.22624, + 0.225552 -0.974154 -0.0122291, 0.0743447 -0.787554 -0.611745, 4.10919e-008 -0.78974 -0.613442, 0.0264671 -0.767541 -0.640454, + 0.409249 -0.911701 -0.0362891, 0.592217 -0.379671 -0.710724, 0.636616 -0.664789 -0.390865, 0.541475 -0.512667 -0.666317, + 0.329712 -0.757621 -0.563294, 0.249516 -0.67537 -0.693987, -0.00394395 -0.99999 -0.00210182, 0.140266 -0.64429 -0.751808, + 0.142468 -0.709505 -0.690149, 0.465473 -0.645292 -0.60575, -0.0743446 -0.787554 -0.611745, 0.0858474 -0.0142899 -0.996206, + 0.314277 -0.222081 -0.92299, 0.0974759 -0.0397268 -0.994445, 0.0735715 -0.053249 -0.995867, 0.296033 -0.310984 -0.903135, + 0.201763 -0.298549 -0.932824, 0.373226 -0.901832 -0.217719, 0.451476 -0.85253 -0.263366, 0.0663431 -0.383264 -0.921253, + 0.058219 -0.0853657 -0.994647, 0.0660122 -0.066418 -0.995606, 0.0644504 -0.136905 -0.988485, 0.0148587 -0.085707 -0.99621, + -1.4714e-007 -0.317504 -0.948257, 0.291005 -0.941541 -0.169756, -0.0136224 -0.597069 -0.802074, + -0.00788477 -0.999969 1.81707e-009, 0.0936911 -0.995601 -2.15914e-008, -0.196692 -0.980422 -0.00917591, + -0.409248 -0.911701 -0.0362891, -0.548443 -0.805001 -0.22624, -0.158477 -0.702518 -0.693796, -0.271665 -0.663705 -0.696917, + -0.332124 -0.776124 -0.536027, -0.161184 -0.725069 -0.669548, -0.0676565 -0.382989 -0.921272, -0.465472 -0.645292 -0.60575, + -0.636616 -0.66479 -0.390865, -0.201763 -0.298549 -0.932824, -0.367058 -0.905219 -0.214121, -0.756779 -0.523545 -0.39139, + -0.895544 -0.180323 -0.406799, -0.831495 -0.346094 -0.434551, -0.570362 -0.547451 -0.61236, -0.601026 -0.420213 -0.679844, + -0.623845 -0.283216 -0.728427, -0.641159 -0.138815 -0.754748, -0.327977 -0.33537 -0.883152, -0.0148592 -0.085707 -0.99621, + -0.451476 -0.85253 -0.263366, -0.091473 -0.24124 -0.966145, -0.0582193 -0.0853654 -0.994647, + -2.22026e-007 -0.0628965 -0.99802, -0.0798585 -0.0756207 -0.993934, -0.278592 -0.176368 -0.944077, + -0.404119 -0.155411 -0.901407, -0.34104 -0.0721985 -0.937272, -0.0974761 -0.0397266 -0.994445, -0.05921 -0.0397152 -0.997455, + -0.0858474 -0.0142899 -0.996206, -5.87174e-008 1.44133e-007 -1, -1.47309e-007 2.75336e-007 -1, -1.87245e-007 1.41052e-007 -1, + 2.04241e-019 0 -1, -1.34708e-007 7.97214e-008 -1, -2.30321e-007 3.99629e-008 -1, -2.34058e-007 1.99814e-008 -1, + -1.80419e-007 -1.50943e-007 -1, -1.25607e-007 -9.29096e-008 -1, -2.99078e-007 -9.15102e-008 -1, + -2.28931e-007 -4.75887e-008 -1, -2.33703e-007 2.38651e-008 -1, -2.31202e-007 -4.01158e-008 -1, -3.01458e-007 -8.68814e-008 -1, + -1.34708e-007 -7.97214e-008 -1, -1.87245e-007 -1.41052e-007 -1, -3.26743e-019 0 -1, -2.39813e-006 -3.36276e-006 -1, + -1.05231e-006 -1.11241e-006 -1, -2.29612e-007 4.77302e-008 -1, -1.44431e-007 5.8957e-008 -1, -5.89048e-008 1.44031e-007 -1, + -1.47687e-007 2.75132e-007 -1, 0.661626 0.105425 -0.742386, 0.711557 -0.0237931 -0.702225, 0.704564 -0.00105892 -0.709639, + 0.669792 0.256508 -0.696837, 0.688344 0.137352 -0.712262, 0.643423 0.606453 -0.467141, 0.688032 0.42861 -0.585581, + 0.603654 0.408227 -0.684801, 0.401097 0.587979 -0.702426, 0.504342 0.505492 -0.700083, 0.660962 0.275456 -0.698035, + 0.710534 0.0229928 -0.703287, 0.674842 0.156375 -0.721204, 0.479486 0.342219 -0.808071, 0.44207 0.641711 -0.626722, + 0.659648 0.661145 -0.357423, 0.548146 0.246704 -0.79917, 0.239402 0.575306 -0.782118, 0.142678 0.619842 -0.771647, + 0.241408 0.580817 -0.777415, 0.0195656 0.643098 -0.765534, 0.120331 0.619908 -0.775393, -0.120913 0.619776 -0.775408, + -0.223199 0.593137 -0.773544, -0.101773 0.634291 -0.766366, -0.237303 0.57328 -0.784243, -0.327184 0.528077 -0.783636, + -0.000281283 0.635815 -0.771842, -0.569022 0.599027 -0.563365, -0.456844 0.669976 -0.585171, 0.219879 0.578436 -0.785535, + -0.68881 0.494037 -0.530536, -0.577113 0.577777 -0.57716, -0.59112 0.390414 -0.7058, -0.708486 0.322236 -0.627863, + -0.667903 0.131175 -0.732597, -0.698054 0.0221143 -0.715704, -0.665969 0.155976 -0.729491, -0.610174 0.252708 -0.750884, + 0.536491 0.818105 -0.20708, 0.455924 0.851834 -0.2579, -0.019097 0.628236 -0.777789, -0.138921 0.60513 -0.783912, + 0.0989843 0.619406 -0.778805, -0.235057 0.567407 -0.789175, -0.535277 0.806435 -0.25128, -0.423771 0.398048 -0.813619, + -0.606791 0.224596 -0.76247, -0.71124 -0.000474511 -0.702949, -0.709349 0.117465 -0.695001, -0.49562 0.306899 -0.812511, + -0.386127 0.920035 -0.0666515, -0.710516 -0.0240483 -0.70327, -0.711333 -0.118129 -0.692857, -0.704124 -0.265513 -0.658568, + -0.712608 -0.142805 -0.686874, -0.511569 -0.471274 -0.718469, -0.687042 -0.431282 -0.584782, -0.653018 -0.434966 -0.619977, + -0.49894 -0.76691 -0.403619, -0.575566 -0.580563 -0.575908, -0.705396 -0.293923 -0.645001, -0.712605 -0.167148 -0.681363, + -0.797977 -0.530828 -0.285403, -0.480894 -0.690967 -0.539728, -0.678733 -0.670067 -0.300552, -0.703303 -0.320577 -0.634504, + -0.377933 -0.914402 -0.145034, -0.224128 -0.972762 -0.0591657, -0.379058 -0.914744 -0.139852, -0.0916866 -0.995644 -0.0169129, + -0.19129 -0.980899 -0.0352862, 0.228945 -0.971588 -0.0600003, 0.349571 -0.930304 -0.111065, 0.198934 -0.979326 -0.0366962, + 0.406061 -0.896908 -0.175132, 0.5123 -0.822287 -0.247775, 0.0593155 -0.644116 -0.762624, -0.00484025 -0.645245 -0.76396, + -0.01519 -0.634171 -0.773044, 0.504442 -0.550941 -0.664832, 0.417763 -0.62767 -0.65689, -0.123574 -0.613363 -0.780074, + -0.250182 -0.553139 -0.794636, -0.216949 -0.578414 -0.786365, 0.623554 -0.442785 -0.6443, 0.536895 -0.533325 -0.653688, + 0.684224 -0.459176 -0.566564, 0.708483 -0.322247 -0.62786, 0.712194 -0.142695 -0.687327, 0.715442 -0.167335 -0.678337, + 0.704012 -0.293268 -0.646809, -0.319879 -0.513531 -0.796218, 0.106522 -0.994116 -0.0196496, 0.0221667 -0.626684 -0.778958, + 0.10504 -0.61669 -0.780167, 0.141614 -0.602676 -0.78532, 0.217166 -0.578352 -0.786351, -0.104923 -0.616702 -0.780173, + 0.250092 -0.55319 -0.794629, 0.515117 -0.773852 -0.368521, 0.683468 -0.685523 -0.250857, 0.701518 -0.265389 -0.661393, + 0.709289 -0.118174 -0.694942, 0.787069 -0.530872 -0.314162, 0.986731 0.162363 1.47116e-009, 0.999435 -0.0336174 -2.2231e-011, + 0.99982 0.0189936 -2.61723e-011, 0.935949 0.352136 0, 0.980862 0.194703 -1.1604e-006, 0.849256 0.527982 -1.96776e-006, + 0.83159 0.55539 -9.84405e-007, 0.704153 0.710048 0, 0.923849 0.382758 -1.09362e-006, 0.999971 -0.00170091 0.00742185, + 0.973934 0.226832 -2.32095e-006, 0.813039 0.582209 0, 0.571505 0.820599 0, 0.67924 0.733916 0, 0.401735 0.915756 0, + 0.190922 0.981605 -3.51716e-009, -0.190922 0.981605 3.51758e-009, -0.157725 0.987483 7.03036e-009, + -2.36921e-007 1 3.59729e-014, -0.67924 0.733916 0, -0.557074 0.830463 0, 0.355143 0.934812 0, -0.81304 0.582208 1.96776e-006, + -0.704153 0.710048 4.60293e-007, -0.83159 0.55539 9.84405e-007, -0.910747 0.412965 1.04828e-006, + -0.980862 0.194702 1.16181e-006, -0.999483 0.0321375 -2.13885e-011, -0.973934 0.226832 0, -0.923849 0.382758 0, + 0.53265 0.846336 0, -0.0304913 0.999535 3.5659e-014, 0.157725 0.987483 -7.03113e-009, -0.420087 0.907484 0, + -0.581025 0.813886 0, -0.728228 0.685335 0, -0.935949 0.352135 1.13777e-006, -1 -0.000740409 5.919e-007, + -0.986731 0.162362 2.32243e-006, -0.998073 -0.0396169 0.0477574, -0.986568 -0.16335 -1.43587e-009, -0.935941 -0.352157 0, + -0.980088 -0.198547 0.00245811, -0.821902 -0.569296 -0.0194738, -0.467239 -0.875093 -0.126098, -0.393287 -0.917564 -0.0583256, + -0.562663 -0.826216 -0.0278747, -0.692436 -0.721414 -0.00969291, -0.919935 -0.391665 -0.0178179, -0.854928 -0.213498 0.472776, + -0.687402 -0.600336 0.408749, -0.427047 -0.903185 -0.0434407, -0.398718 -0.916391 -0.0353882, -0.557718 -0.826985 -0.0710353, + -0.625553 -0.755785 0.193577, -0.793107 -0.424791 0.436501, -0.302266 -0.912449 -0.275812, -0.22925 -0.968713 -0.0950749, + -0.0355702 -0.999367 -3.51114e-014, -0.149318 -0.978617 -0.141465, 0.167688 -0.98584 -8.18526e-009, + 0.00860967 -0.999439 -0.0323702, 0.351013 -0.936371 -4.51614e-007, 0.403793 -0.914496 -0.0254653, + 0.727654 -0.685778 -0.0150728, 0.578995 -0.814826 -0.0286967, 0.219361 -0.975606 -0.00856561, -0.0853626 -0.967016 -0.239985, + 0.282247 -0.869241 0.405902, 0.109423 -0.908722 0.402804, 0.93523 -0.353622 -0.0171938, 0.973817 -0.227333 0, + 0.910742 -0.412975 0, 0.986463 -0.163979 -0.00145447, 0.846771 -0.53169 -0.0168914, 0.503399 -0.863512 0.0305924, + -0.250624 -0.95466 -0.160659, -0.427187 -0.897933 -0.105962, -0.217986 -0.956369 -0.194525, -0.13473 -0.957708 -0.254249, + -0.503077 -0.8474 -0.169783, -0.545988 -0.837024 0.0358786, -0.00511054 -0.967126 0.254245, 0.801765 -0.596566 0.0358174, + 0.905619 -0.424046 0.00628032, 0.972691 -0.231911 0.00944471, 0.669148 -0.742366 0.0336568, -0.227952 -0.6946 -0.682326, + 0.695783 0.114163 0.709121, 0.707287 -0.0256534 0.706461, 0.711957 -0.00195567 0.702221, 0.666562 0.250819 0.701986, + 0.69109 0.136651 0.709733, 0.487994 0.459091 0.742359, 0.597627 0.37174 0.710388, 0.569492 0.382192 0.727742, + 0.283271 0.613751 0.736931, 0.429802 0.599145 0.675496, 0.399189 0.591714 0.700374, 0.500256 0.501702 0.705718, + 0.643799 0.266795 0.717177, 0.704858 0.0227589 0.708983, 0.622648 0.282858 0.72959, 0.676239 0.15638 0.719893, + 0.251879 0.612979 0.748875, 0.140397 0.609639 0.780147, 0.361885 0.589731 0.721981, 0.491521 0.520411 0.698269, + 0.13762 0.682486 0.717825, 0.574393 0.413077 0.706711, -0.106471 0.659722 0.743929, 0.0232561 0.703771 0.710046, + 0.00394986 0.719509 0.694472, -0.267221 0.643745 0.717067, -0.385594 0.618824 0.684379, -0.221879 0.582532 0.781937, + -0.134279 0.667375 0.732516, -0.491167 0.489534 0.720494, -0.556399 0.398775 0.728971, -0.475163 0.51139 0.716031, + -0.686316 0.135009 0.714662, -0.707595 0.0182806 0.706381, -0.689346 0.160029 0.706535, -0.647487 0.294179 0.703007, + -0.585604 0.39341 0.708729, -0.394164 0.596556 0.69911, -0.663198 -0.332621 0.670471, -0.644825 0.267203 0.716103, + 0.124724 0.72187 0.680697, -0.713639 -0.0184517 0.700271, -0.546805 -0.576203 0.607449, -0.585338 -0.484897 0.649812, + 0.251808 0.670957 0.69743, -0.167474 0.703532 0.690648, -0.409322 0.568145 0.713909, -0.286123 0.639653 0.713426, + -0.0261953 0.73467 0.677918, -0.524044 0.492782 0.694654, -0.583461 0.364013 0.725995, -0.692375 0.113564 0.712545, + -0.639909 0.238944 0.730358, -0.703246 -0.183232 0.686929, -0.697091 -0.128906 0.705299, -0.597328 -0.438297 0.671636, + -0.643429 -0.276391 0.713868, -0.706213 -0.00486298 0.707983, -0.530046 -0.540521 0.653366, 0.037065 -0.768231 0.639099, + 0.114532 -0.750128 0.651299, 0.260028 -0.723068 0.639967, 0.044731 -0.716312 0.696345, 0.150702 -0.730917 0.665619, + 0.341051 -0.609212 0.715922, 0.47753 -0.543661 0.690216, 0.396672 -0.643403 0.65474, 0.516752 -0.545295 0.660016, + 0.567983 -0.430563 0.701435, 0.678293 -0.163993 0.716258, 0.619896 -0.296189 0.726637, 0.652831 -0.281349 0.703317, + 0.591906 -0.413202 0.692034, 0.704044 -0.145527 0.695085, 0.290004 -0.678488 0.674946, 0.51601 -0.488513 0.703626, + 0.411097 -0.593399 0.692009, 0.593747 -0.374611 0.712131, 0.66527 -0.253854 0.702121, 0.706375 -0.118476 0.697852, + 1.54824e-006 -1 -3.10894e-007, -0.0517619 -0.998659 1.20578e-008, 0.307728 -0.951474 -7.15506e-008, + 0.384031 -0.92332 -8.56251e-008, 0.708822 -0.705387 -1.53206e-007, 0.051765 -0.998659 -1.05354e-008, + 0.457793 -0.889059 -9.90626e-008, 0.686625 -0.727012 -1.56322e-007, 0.905811 -0.423682 -1.95588e-007, + 0.919129 -0.393957 -1.60581e-007, 0.948896 0.315588 -2.21042e-007, 0.999895 0.0145077 -2.32748e-007, + 0.692045 0.721855 -1.61078e-007, 0.753383 0.657582 -1.75498e-007, 0.422617 0.906308 -9.84474e-008, + 0.929598 0.368575 -2.16381e-007, 0.103464 0.994633 -2.41016e-008, 0.391993 0.919968 -8.73137e-008, + 0.744275 -0.667873 -1.73117e-007, 0.996777 0.0802266 -2.31848e-007, 0.946351 -0.323141 -2.20119e-007, + 0.907344 0.42039 -2.11046e-007, 0.625244 0.78043 -1.40613e-007, 0.360927 0.932594 -7.61391e-008, -2.18539e-006 1 1.53088e-009, + -0.103467 0.994633 6.3799e-007, -0.36093 0.932593 8.38237e-008, -0.391994 0.919968 6.57963e-007, + -0.422619 0.906308 1.23131e-006, -0.652519 0.757772 4.85984e-007, -0.920411 0.390953 2.14271e-007, + -0.946351 -0.323142 1.84867e-007, -0.999895 0.0145072 2.23015e-007, -0.708822 -0.705388 1.64988e-007, + -0.744275 -0.667874 1.57515e-007, -0.457792 -0.889059 1.06641e-007, -0.919129 -0.393957 1.961e-007, + -0.384028 -0.923321 -4.87112e-007, -0.753384 0.657581 1.75236e-007, -0.998685 -0.0512745 2.32292e-007, + -0.948896 0.315588 2.20711e-007, -0.886617 -0.462505 2.06225e-007, -0.67148 -0.741023 -3.54617e-007, + -0.307726 -0.951475 -1.07757e-006, 0.0135536 -0.491834 -0.870584, -0.0521445 -0.509925 -0.858637, + 0.175472 -0.465797 -0.867319, 0.33459 -0.369558 -0.866877, 0.237308 -0.431863 -0.87016, -3.56241e-008 0.00698376 -0.999976, + 0.37183 -0.325808 -0.869248, 0.441045 -0.213912 -0.87162, 0.498558 -0.0302637 -0.866328, 0.469569 -0.164276 -0.867478, + 0.478347 0.159136 -0.863632, 0.499784 0.0211898 -0.865891, 0.375846 0.328525 -0.866494, 0.242803 0.467002 -0.850268, + 0.34899 0.365946 -0.862722, 0.00446445 0.489009 -0.872267, 0.15675 0.473877 -0.866528, 0.461728 0.201437 -0.863846, + -0.0293563 0.51098 -0.859091, -0.135537 0.505679 -0.852009, -0.332181 0.381619 -0.862568, -0.172176 0.478718 -0.860921, + -0.381725 0.32195 -0.866392, -0.457741 0.212144 -0.863405, -0.499738 0.0403704 -0.865235, -0.474081 0.169629 -0.863987, + -0.463199 -0.161972 -0.871328, -0.497937 -0.0179915 -0.867027, -0.377869 -0.32028 -0.868698, -0.225084 -0.437219 -0.870733, + -0.353981 -0.350123 -0.867243, -0.195961 -0.459021 -0.866544, -0.452254 -0.206156 -0.867736, -2.18539e-006 1 -1.49586e-009, + 0.103464 0.994633 -2.10888e-008, -0.36093 0.932593 7.62185e-008, -0.391994 0.919968 6.57958e-007, + -0.692071 0.721829 1.57583e-007, -0.103467 0.994633 6.40999e-007, -0.422619 0.906308 1.22951e-006, + -0.652541 0.757753 4.72816e-007, -0.920427 0.390915 2.07073e-007, -0.929612 0.368541 2.1655e-007, + -0.946351 -0.323142 2.20449e-007, -0.999895 0.0145072 2.32748e-007, -0.744275 -0.667874 1.73376e-007, + -0.457749 -0.889081 1.06631e-007, -0.919129 -0.393957 2.13943e-007, -0.0517115 -0.998662 1.2046e-008, + -0.38396 -0.92335 -4.87145e-007, -0.753416 0.657544 1.4852e-007, -0.998685 -0.0512744 2.32292e-007, + -0.948904 0.315565 2.20713e-007, -0.30763 -0.951506 -1.07762e-006, 1.55323e-006 -1 -3.10893e-007, + 0.0517146 -0.998662 -1.05251e-008, 0.307633 -0.951505 -7.15286e-008, 0.383962 -0.923349 -8.56099e-008, + 0.45775 -0.889081 -9.9054e-008, 0.905811 -0.423682 -2.10873e-007, 0.919129 -0.393957 -2.14108e-007, + 0.998685 -0.0512741 -2.3264e-007, 0.948904 0.315566 -2.21044e-007, 0.999895 0.0145076 -2.32748e-007, + 0.692071 0.72183 -1.45247e-007, 0.422617 0.906308 -9.08422e-008, 0.929611 0.368542 -2.16384e-007, + 0.391993 0.919968 -8.26116e-008, 0.996777 0.0802265 -2.31848e-007, 0.907364 0.420346 -1.94269e-007, + 0.625262 0.780415 -1.18712e-007, 0.360927 0.932594 -8.37329e-008, -0.0293563 0.510962 -0.859102, -0.332205 0.381569 -0.86258, + -0.172208 0.478674 -0.860939, -8.63617e-009 0.00695228 -0.999976, -0.381742 0.321929 -0.866392, -0.457743 0.212158 -0.863401, + -0.499742 0.0403597 -0.865234, -0.474074 0.169644 -0.863988, -0.463185 -0.161977 -0.871334, -0.497933 -0.0180178 -0.867028, + -0.377848 -0.320261 -0.868714, -0.225045 -0.437195 -0.870756, -0.353977 -0.350117 -0.867248, -0.0521443 -0.509918 -0.858641, + -0.195948 -0.459026 -0.866545, -0.452245 -0.206166 -0.867739, 0.0135354 -0.491842 -0.870579, 0.175436 -0.465777 -0.867337, + 0.334569 -0.369534 -0.866896, 0.237304 -0.431857 -0.870165, 0.371826 -0.325805 -0.869251, 0.441029 -0.213903 -0.87163, + 0.498556 -0.0302747 -0.866329, 0.469566 -0.164289 -0.867477, 0.478365 0.159119 -0.863625, 0.499788 0.0211633 -0.865889, + 0.375827 0.32852 -0.866504, 0.242836 0.466972 -0.850275, 0.348999 0.365929 -0.862726, 0.156791 0.473843 -0.866539, + 0.461717 0.201441 -0.863851, -0.162195 0.0162548 -0.986625, -1.70057e-007 2.39779e-008 -1, 0.10601 0.289558 -0.951272, + 0.0682202 0.343941 -0.93651, 0.708555 0.705654 0.00138761, 0.791624 0.611009 -5.58103e-005, 0.751663 0.659547 0.000756601, + 0.540889 0.841087 -0.00339701, 0.636403 0.771356 0.000833464, 0.167581 0.985858 -0.000952573, 0.346338 0.93811 -0.00010733, + 0.191466 0.981499 0.0010701, 0.00781858 0.999969 -0.000476904, 0.44016 0.897919 0.000147332, 0.706085 0.708127 4.33971e-005, + 0.535674 0.844411 0.00472173, -0.0660533 0.997816 -0.000559004, -0.203972 0.978974 -0.0024679, 0.121558 0.992584 0.000399231, + -0.316796 0.948492 0.001731, 0.33519 0.942148 0.00212123, -0.598752 0.800907 0.00661215, -0.411674 0.911329 0.00189211, + -0.531861 0.846832 -0.000313154, -0.736589 0.67634 -0.000587182, -0.724578 0.689184 0.00350939, + -0.888337 0.459191 -0.00041511, -0.933147 0.359493 -0.00080285, -0.83478 0.550583 0.000494008, + -0.971084 0.238737 -0.000587357, -0.988671 0.150089 0.00161171, -0.99978 -0.0209546 9.85012e-005, + -0.999646 -0.0265856 -0.000346328, -0.433299 0.901249 0.00135494, -0.981019 -0.193906 0.00172503, + -0.957118 -0.289698 0.000473553, -0.916148 -0.400838 0.00110123, -0.805068 -0.593182 -0.00104143, + -0.813985 -0.580873 -0.00386571, -0.826589 -0.562801 -0.00256228, -0.886601 -0.462534 0.000651226, + -0.22849 0.973542 0.00298159, -0.0495031 0.998772 0.00187885, 0.758757 0.651374 -1.09734e-007, -0.61952 0.784972 -0.00361137, + -0.748318 0.663336 -0.00251859, -0.846012 0.533143 -0.00475172, -0.990687 0.136154 -0.00135593, + -0.979289 -0.202442 -0.00330622, -0.819401 -0.573221 0.000230405, -0.914775 -0.403963 -0.000586017, + -0.840812 -0.541314 0.00378384, -0.939826 0.341654 -0.000706948, -0.999291 -0.0376514 -0.000270569, 0 1 3.16712e-008, + 0 1 6.33424e-008, 0 1 1.26685e-008, 0.819093 0.573661 -5.58454e-005, 0.827209 0.561894 -3.72977e-005, + 0.832018 0.554749 -2.01726e-007, 0.975244 0.221047 -0.00612575, 0.991837 0.1274 -0.00543419, 0.987166 0.159678 -0.00262497, + 0.976422 0.215759 0.00696572, 0.950771 0.309888 0.0020142, 0.995464 0.0951328 -0.000960331, 0.998428 -0.0545929 -0.0126807, + 0.939895 0.341437 0.00435415, 0.862871 0.505394 0.00548995, 0.852438 0.522828 0.000160375, 0.903035 0.429564 -0.00156935, + 0.905625 0.424061 0.00400514, 0.864393 0.502797 -0.00455151, 0.939451 0.342644 -0.00514591, 0.999401 0.0345242 -0.00246185, + 0.999172 0.0399194 -0.00791179, 0.999953 0.00974149 9.93741e-005, 0.996379 -0.0840435 -0.0128722, 0.91979 0.392263 -0.0107507, + 0.900506 0.434841 -0.00119325, -0.340346 -0.94001 0.0233753, -0.340672 -0.940176 -0.00330824, -0.344619 -0.938719 0.00668683, + -0.343274 -0.939235 -0.000997478, -0.337639 -0.940796 -0.0300325, -0.30627 -0.951942 -0.00227552, + -0.379658 -0.925118 0.00414166, -0.357017 -0.934098 9.65269e-005, -0.305614 -0.952154 -0.00166547, + -0.344275 -0.938776 -0.0132253, -0.359765 -0.933035 0.00385105, -0.325303 -0.94559 0.00606492, -0.353072 -0.928583 0.114342, + -0.339207 -0.933969 0.112434, -0.32493 -0.943467 0.065503, -0.338995 -0.94074 0.00950173, -0.33859 -0.940933 -0.00108026, + -0.314574 -0.949139 -0.013374, -0.357159 -0.934004 0.00863211, -0.356428 -0.934316 0.00361023, + -0.318209 -0.948012 -0.00398685, -0.170249 -0.985365 -0.00840859, -0.205019 -0.978737 0.00641828, + -0.231018 -0.972689 0.0225127, -0.313919 -0.94945 -1.55117e-006, -0.31006 -0.95071 0.0036523, -0.376274 -0.926332 -0.0180771, + -0.353258 -0.935517 -0.00402738, -0.328137 -0.944611 0.00594376, -0.304164 -0.952451 0.017943, -0.324201 -0.945818 -0.0179594, + -0.235117 -0.971961 0.00344021, -0.302743 -0.953072 4.92706e-008, -0.302743 -0.953072 4.92474e-008, + -0.332852 -0.942614 0.0262325, -0.344764 -0.938652 -0.00842955, -0.335955 -0.941858 0.00613859, -0.34673 -0.937781 -0.0185831, + -0.346263 -0.938135 -0.00232806, -0.343261 -0.939237 -0.00253052, -0.321708 -0.946795 -0.00912976, + -0.361324 -0.93244 -0.00102914, -0.369127 -0.929379 -0.000789349, -0.348811 -0.937185 0.00382405, + -0.326103 -0.94532 0.00516665, -0.326732 -0.945079 0.00849665, -0.346186 -0.938164 -0.00213124, -0.349896 -0.93626 -0.0314748, + -0.349164 -0.936639 -0.0281486, -0.307123 -0.95153 -0.0163047, -0.129213 -0.991617 -1.71676e-007, + -0.283063 -0.959101 -1.40094e-007, -0.129212 -0.991617 -1.66249e-007, -0.3865 -0.922289 -1.0215e-007, + -0.371555 -0.928411 -2.79769e-008, -0.36138 -0.932419 -1.64929e-007, -0.309669 -0.950845 -1.61898e-007, + -0.350288 -0.936642 -0.000474006, -0.341054 -0.94004 0.00250966, -0.338688 -0.940882 0.00557559, + -0.359396 -0.933185 9.92936e-006, -0.357165 -0.934024 -0.00564939, -0.375301 -0.926691 0.01985, + -0.317187 -0.948361 -0.00185559, -0.331021 -0.943623 4.05682e-008, -0.323574 -0.94617 -0.00792525, + -0.310061 -0.95071 -0.00365194, -0.376275 -0.926332 0.0180775, -0.230969 -0.9727 -0.0225233, -0.170333 -0.985351 0.00840501, + -0.205051 -0.97873 -0.00642812, -0.306281 -0.951939 0.00227562, -0.379642 -0.925124 -0.00413981, + -0.305599 -0.952159 0.00166618, -0.356388 -0.934331 -0.00367342, -0.344187 -0.938809 0.013156, + -0.359695 -0.933062 -0.00377662, -0.325269 -0.945602 -0.00607737, -0.340295 -0.940036 -0.023044, + -0.259003 -0.965864 -0.00482181, -0.353258 -0.935517 0.00402748, -0.318191 -0.948018 0.003989, + -0.356984 -0.934111 -9.24602e-005, -0.340703 -0.940166 0.0031596, -0.344643 -0.938709 -0.00683459, + -0.34322 -0.939254 0.00123073, -0.337639 -0.940796 0.0300323, -0.338544 -0.94095 0.00110457, -0.314504 -0.949161 0.0134097, + -0.35702 -0.934058 -0.00856087, -0.352946 -0.928826 -0.112747, -0.325092 -0.943459 -0.0648043, -0.339239 -0.934141 -0.110899, + -0.339852 -0.940433 -0.00934399, -0.307092 -0.95154 0.0163202, -0.326211 -0.945294 0.00247611, -0.321708 -0.946795 0.00913004, + -0.375254 -0.92671 -0.0198156, -0.357125 -0.934039 0.00569212, -0.338685 -0.940883 -0.00555827, + -0.341048 -0.940043 -0.00247902, -0.350293 -0.93664 0.000477326, -0.349162 -0.936639 0.0281539, + -0.359896 -0.932992 0.00111023, -0.347192 -0.937555 0.0211788, -0.343123 -0.939288 0.00220268, -0.344806 -0.938635 0.00856922, + -0.332853 -0.942614 -0.0262271, -0.336009 -0.94184 -0.00599657, -0.369033 -0.929416 0.000756121, + -0.346186 -0.938164 0.00213151, -0.349893 -0.936261 0.031477, -0.32901 -0.944309 -0.00570884, -0.349847 -0.936805 -0.00201054, + -0.324405 -0.945909 -0.00411333, -0.340919 -0.940092 -0.00139426, -0.997146 0.0712768 -0.0249029, + -0.989921 0.13916 -0.0263013, -0.994638 0.100296 -0.0252237, -0.9899 0.139308 -0.0263096, -0.997209 0.0707722 -0.0237661, + -0.989879 0.139465 -0.0262528, -0.989872 0.13953 -0.0261808, -0.989844 0.13972 -0.0262314, -0.99479 -0.0998979 -0.0203223, + -0.999429 -0.0260389 -0.0215536, -0.967393 -0.252852 -0.0147139, -0.968273 -0.249501 -0.0140393, + -0.994649 -0.101707 -0.018132, -0.937415 -0.348097 -0.00901622, -0.845456 -0.534033 -0.00371535, + -0.854826 -0.51891 -0.00213102, -0.904819 -0.425758 -0.00569496, -0.901772 -0.43213 -0.00840237, + -0.855279 -0.518146 -0.00474572, -0.935282 -0.353747 -0.010539, -0.894689 -0.446671 -0.00395213, + -0.914776 -0.403955 -0.00239034, -0.907919 -0.41912 -0.00467183, -0.966774 -0.255306 -0.0129176, + -0.853342 -0.521341 -0.00341663, -0.859445 -0.511229 0, -0.0100297 -0.999881 -0.0117013, -0.0300819 -0.998931 -0.0350956, + -0.935727 -0.352723 -0.000837429, 0.984778 -0.173818 -4.9563e-007, 0.984503 -0.173582 -0.0249581, + 0.984406 -0.173925 -0.0263798, 0.984545 -0.17333 -0.0250515, 0.984822 -0.173569 -1.29685e-006, 0.984564 -0.17308 -0.0260349, + 0.984509 -0.173369 -0.0261615, 0.984601 -0.172846 -0.0261703, 0.984475 -0.1736 -0.0259378, 0.984375 -0.174023 -0.0268826, + 0.984701 -0.172183 -0.0267741, 0.984686 -0.172312 -0.0265153, 0.984328 -0.174095 -0.0280813, 0.984404 -0.173769 -0.0274287, + 0.984497 -0.173469 -0.0259695, -1.20529e-008 2.48398e-007 -1, -4.1031e-008 2.44258e-007 -1, -1.60706e-008 3.31197e-007 -1, + 4.83574e-009 7.21538e-008 -1, 0.058468 0.159743 -0.985426, -2.68123e-008 -1.86626e-007 -1, -9.26532e-008 -3.5459e-007 -1, + -6.58409e-008 -1.67964e-007 -1, -1.98151e-007 2.33514e-007 -1, -3.13269e-007 7.61474e-007 -1, -3.22145e-007 9.17847e-007 -1, + -1.92914e-007 -1.75878e-007 -1, 0.120704 0.340521 -0.932457, -2.36886e-007 1.98466e-007 -1, 0.146713 0.396335 -0.906308, + 0.0823152 0.22522 -0.970824, -3.17224e-007 6.3098e-008 -1, -2.74577e-007 1.372e-008 -1, -3.09708e-007 -1.08161e-008 -1, + -1.25576e-007 8.30581e-008 -1, -3.62858e-007 1.01744e-007 -1, -3.7299e-007 1.48393e-007 -1, -4.10976e-007 1.26224e-009 -1, + -4.90654e-007 1.07272e-007 -1, -4.93286e-008 2.56407e-007 -1, -1.24671e-007 1.18346e-007 -1, -6.79682e-008 1.86611e-007 -1, + -3.40117e-007 5.3294e-007 -1, -2.75166e-007 1.51311e-007 -1, -4.12651e-007 1.90432e-007 -1, -1.21602e-007 1.07614e-007 -1, + -3.44342e-007 -2.91094e-007 -1, -5.61459e-007 -4.04343e-007 -1, -9.06243e-008 2.48815e-007 -1, -9.06243e-008 7.03494e-008 -1, + -1.22543e-007 9.89475e-008 -1, -5.43759e-014 2.67698e-007 -1, -9.39103e-007 -9.57107e-007 -1, -4.0427e-007 -2.4803e-007 -1, + 0.164038 0.461059 -0.872076, 0.167461 0.468935 -0.867212, 0.165361 0.460178 -0.872291, 0.167724 0.467452 -0.867962, + 0.168384 0.479419 -0.861281, 0.167779 0.469278 -0.866965, 0.169957 0.471296 -0.865445, 0.171078 0.471666 -0.865022, + 0.169673 0.470478 -0.865945, 0.171308 0.485841 -0.857095, 0.166416 0.458525 -0.872961, 0.173009 0.472254 -0.864317, + 0.170269 0.47171 -0.865158, 0.170732 0.468303 -0.866916, 0.184112 0.503789 -0.843979, 0.179482 0.491589 -0.852131, + 0.171655 0.468943 -0.866387, 0.17126 0.466224 -0.867931, 0.183008 0.493531 -0.850256, 0.173084 0.475713 -0.862403, + 0.174584 0.478967 -0.860297, 0.189031 0.499887 -0.84521, 0.662715 -0.0931654 -0.743054, 0.662423 -0.093017 -0.743333, + 0.662394 -0.0928925 -0.743374, 0.663016 -0.0933415 -0.742763, 0.66291 -0.0930532 -0.742894, 0.662821 -0.0934573 -0.742923, + 0.662688 -0.0933177 -0.743058, 0.662936 -0.0932178 -0.74285, 0.662682 -0.0931161 -0.743089, 0 -1 0, 0 1 0, + -0.575088 0.0377173 -0.817222, -0.438566 0.0859572 -0.894579, -0.50119 0.0557552 -0.863539, -0.472126 0.059443 -0.879525, + -0.380353 0.124958 -0.916361, -0.395601 0.0684334 -0.915869, -0.428501 0.0515827 -0.902068, -0.359947 0.0352177 -0.932308, + -0.319147 0.0314587 -0.947183, -0.320383 0.0289151 -0.946847, -0.474449 0.0490038 -0.878918, -0.508495 0.0520499 -0.85949, + -0.316584 0.032955 -0.947992, -0.508446 0.0516794 -0.859542, 0.00780897 0.0139859 0.999872, 0.00306419 0.0259084 0.99966, + 0.0117132 0.0119644 0.99986, 0.158041 -0.0524428 0.986039, 0.12645 0.0415691 0.991102, 0.153169 -0.067216 0.985911, + 0.00167019 0.00480228 0.999987, 1 2.56677e-007 -3.38453e-007, 1 1.66501e-007 -2.19548e-007, 1 3.46852e-007 -4.57359e-007, + 0.13862 -0.0433352 0.989397, 2.72633e-007 -4.1194e-008 1, 0.204996 -0.030712 0.978281, 0.13983 0.0228649 0.989911, + 2.9084e-007 3.34879e-009 1, 1.97335e-007 -1.24466e-007 1, 0.00349848 0.0430097 0.999068, 4.1567e-007 -3.0657e-008 1, + -2.97983e-008 -2.46603e-007 1, 0.1596 0.117964 0.980108, -1.01688e-007 -2.45414e-007 1, 1.43284e-007 -1.18051e-007 1, + 2.21564e-007 -1.68254e-007 1, 1.15901e-006 2.01235e-006 1, 7.86711e-007 8.7344e-007 1, 1.14872e-006 1.98751e-006 1, + 6.19281e-007 1.01246e-006 1, 2.70432e-007 -5.94018e-008 1, 2.75096e-007 -2.38922e-008 1, 2.76654e-007 1.25244e-008 1, + 2.75764e-007 -2.48617e-008 1, 2.74228e-007 4.82781e-008 1, -0.0169449 0.0266779 0.9995, -0.170165 -0.0665574 0.983165, + 1.40221e-007 -2.40807e-007 1, 2.34572e-008 -9.16604e-008 1, 1.1377e-007 -2.54135e-007 1, 6.82681e-008 -1.72276e-007 1, + 1.19334e-006 -1.97384e-006 1, 1.1763e-006 -1.93813e-006 1, 7.86517e-007 -8.30771e-007 1, 1.90482e-007 2.04175e-007 1, + 6.3616e-007 -9.9222e-007 1, 2.69395e-007 6.48383e-008 1, 5.06775e-008 8.07866e-008 1, 1.19378e-007 1.4142e-007 1, + -0.000322631 0.711991 0.702189, -0.00207944 0.739762 0.672865, 2.05862e-005 0.715267 0.698851, -0.00548697 0.635138 0.772379, + -0.00251152 0.69746 0.716619, -0.00667157 0.563765 0.825908, 0.000424718 0.555479 0.831531, -0.00478812 0.484643 0.874699, + -0.00566474 0.372331 0.928083, -0.00429097 0.404441 0.914554, -0.0127707 0.397722 0.917417, -0.00520122 0.239568 0.970866, + -0.00701451 0.638425 0.769652, 0.000484371 0.715179 0.698941, 0.00165906 0.0309616 0.999519, 0.010667 0.0951339 0.995407, + -6.59404e-008 0.731543 0.681795, 0.87777 -0.479013 -0.00811871, 0.929616 -0.368531 0, 0.9026 -0.430235 -0.014523, + 0.71675 -0.696978 0.0221576, 0.840413 -0.541758 -0.0142925, 0.782356 -0.622762 0.00926844, 0.531824 -0.845935 0.0394682, + 0.628919 -0.777445 -0.00632831, 0.277252 -0.957168 -0.0834261, 0.247243 -0.968835 0.0151495, 0.32152 -0.946524 0.0267842, + 0.256023 -0.966671 0, 0.235858 -0.971788 -1.03515e-007, 0.389277 -0.918694 -0.0668227, 0.904817 -0.425577 0.0138232, + 0.921087 -0.389358 -5.67777e-007, 0.850269 -0.525609 0.0278952, 0.913386 -0.407094 0, 0.769808 -0.638274 -0.00156381, + 0.657856 -0.75279 -0.0230588, 0.47504 -0.873295 -0.108133, -0.814579 -0.580052 0, -0.772978 -0.622497 0.122483, + -0.801205 -0.573033 0.172345, -0.807038 -0.590485 -0.00399317, -0.794191 -0.607667 -0.000933255, + -0.766054 -0.64277 -0.00279532, -0.765366 -0.643534 -0.00889918, -0.717898 -0.483911 0.500452, -0.290193 0.227141 0.929621, + -0.316218 0.428217 0.846544, -0.241764 0.274399 0.930728, -0.326509 0.516229 0.79177, -0.327129 0.515751 0.791826, + -0.287953 0.453251 0.843591, -0.0508866 0.0798677 0.995506, -0.123625 0.112852 0.985891, -0.257651 0.0285041 0.965818, + -0.391139 0.158212 0.906631, 0.460694 0.764125 0.451524, -0.567968 0.274784 0.775826, -0.891104 -0.453799 9.48463e-007, + -0.845953 -0.533257 6.00271e-007, -0.980597 -0.196034 3.43031e-007, -0.911069 -0.412253 3.23238e-007, -0.939927 0.341376 0, + -0.997222 0.0744935 0, -0.992759 0.120127 0, -0.786897 0.617085 1.87325e-007, -0.923248 0.384204 6.55118e-007, + -0.988486 -0.151311 0, -0.911069 -0.412253 0, -0.992759 0.120126 8.47676e-007, -0.803189 0.595724 3.70185e-007, + -0.988486 -0.151311 9.81972e-007, -0.608209 0.793777 4.61561e-007, -0.395026 0.91867 2.9528e-007, + -0.592311 0.80571 6.30437e-007, -0.132582 0.991172 5.53536e-008, -0.353172 0.935558 2.30165e-007, + 0.178678 0.983908 -3.41294e-008, 0.384602 0.923082 -2.68385e-008, 0.137284 0.990532 -3.65303e-008, + 0.426049 0.9047 -1.86438e-007, 0.613905 0.78938 -4.58921e-007, -0.0858035 0.996312 1.27832e-008, + 0.797628 0.60315 -8.4897e-007, 0.66133 0.750095 -3.5195e-007, -0.576178 0.817324 2.44972e-007, + 0.929209 0.369554 -3.19455e-007, 0.849301 0.527909 -2.92157e-007, 0.952838 0.303478 0, 0.993301 0.115557 0, + 0.98166 -0.190638 -1.8267e-008, 0.989083 -0.147362 0, 0.997445 0.0714415 3.16834e-009, -0.786897 0.617085 1.28223e-007, + -0.0858035 0.996312 1.05e-008, 0.178678 0.983908 -4.43818e-008, -0.327697 0.944783 1.20443e-008, + 0.426049 0.9047 -7.55789e-008, 0.797628 0.60315 0, 0.938175 0.34616 -8.00234e-007, 0.997445 0.0714416 -4.90264e-007, + 0.98166 -0.190638 -2.14979e-007, 0.627416 0.778684 0, 3.10715e-007 -5.44315e-008 1, 2.41179e-007 -3.37617e-008 1, + 1.03882e-007 -5.665e-008 1, 2.05507e-007 -1.48856e-008 1, 3.34341e-007 -5.68594e-008 1, 2.14214e-007 -4.36428e-008 1, + 2.85487e-007 -4.78401e-008 1, 3.00651e-007 -4.75753e-008 1, 1.0076e-007 -4.11318e-008 1, 1.58373e-007 -4.33637e-008 1, + 2.87658e-007 -5.14469e-008 1, 2.0251e-007 -5.4193e-008 1, 2.78822e-007 -4.83246e-008 1, 2.98534e-006 -4.89224e-007 1, + -1.29232e-006 2.03364e-006 1, 1.31388e-006 -1.16305e-007 1, 2.21029e-007 -5.47353e-008 1, 3.75523e-006 -1.22232e-006 1, + 2.11536e-007 2.83724e-007 1, 2.85024e-007 -4.13285e-008 1, 1.09282e-007 -6.76974e-008 1, 3.23778e-007 -3.41868e-008 1, + -5.82999e-007 -1.43216e-007 1, 7.47096e-009 -9.12614e-008 1, 1.67073e-007 -3.40627e-008 1, 1.46601e-007 -3.79637e-008 1, + 1.40014e-007 -5.23638e-008 1, 2.48922e-007 -4.4343e-008 1, 2.18678e-007 -2.30009e-008 1, 0.972346 -0.233547 -1.9485e-006, + 0.99963 0.0271857 -9.99331e-007, 0.98166 -0.190638 -9.75191e-007, 0.849301 0.527909 5.61804e-007, 0.958013 0.286725 0, + 0.944519 0.328456 -8.25838e-007, 0.679598 0.733585 3.36662e-007, 0.824323 0.56612 -1.66791e-007, 0.997445 0.0714418 0, + 0.647353 0.76219 0, 0.46662 0.884458 0, 0.426049 0.9047 -1.88063e-008, 0.178678 0.983908 -2.38906e-008, + -0.0388355 0.999246 3.82435e-009, 0.219757 0.975555 -4.43361e-008, -0.0858035 0.996312 3.87904e-008, + -0.310598 0.950541 1.89286e-007, -0.614499 0.788918 0, -0.7585 0.651674 0, -0.554338 0.832292 1.19126e-007, + -0.786897 0.617085 0, -0.904619 0.426221 0, -0.371213 0.928548 8.11901e-008, -0.988486 -0.151311 9.63183e-007, + -0.899314 -0.437303 -2.1313e-008, -0.994337 -0.106276 -3.95908e-008, -0.923248 0.384204 1.59443e-008, + -0.986209 0.165507 2.98024e-008, -0.992759 0.120127 1.38901e-008, -0.845954 -0.533257 0, -0.911069 -0.412253 4.80871e-007, + -0.845953 -0.533257 0, -0.00191291 0.995215 0.0976947, -0.000374755 0.986896 0.161358, -0.00246293 0.983038 0.183384, + -0.000731989 0.962013 0.273002, 0.00303261 0.932303 0.361666, -0.00241573 0.91685 0.399224, -1.7676e-007 1 1.58408e-005, + -0.00137136 0.999999 -2.46579e-006, -0.0414638 0.754098 0.655452, -0.10493 0.713177 0.693086, -0.00597106 0.74602 0.665897, + 2.648e-008 0.665838 0.746096, -0.00173913 0.705234 0.708972, 0.01154 0.753393 0.657469, 0.0417268 0.805534 0.591078, + -0.00439171 0.776734 0.629813, -0.0030538 0.815388 0.578907, -0.00337758 0.834967 0.55029, -0.00307939 0.883313 0.468774, + -0.00602739 0.949652 0.313248, -0.00618016 0.999981 -5.68826e-006, -0.00275289 0.815695 0.578476, -0.222897 0.318814 0.921235, + -0.216562 0.372563 0.902384, -0.114341 0.364347 0.924217, -0.326117 0.45059 0.831033, -0.437245 0.28411 0.853287, + -0.518872 0.62097 0.587511, -0.541174 0.657891 0.523746, -0.463873 0.58433 0.665868, -0.598496 0.529739 0.600982, + -0.442455 0.544024 0.712932, -0.55573 0.668319 0.494484, -0.576623 0.382523 0.721929, -0.316775 0.125406 0.940174, + -0.186869 0.227337 0.955719, -0.17625 0.133683 0.975226, -0.307085 -0.0777276 0.948503, -0.546403 0.644677 0.534636, + -0.612518 0.717101 0.332547, -0.591696 0.713763 0.374751, -0.620139 0.739227 0.262624, -0.639754 0.76858 8.26736e-006, + -0.643409 0.765522 1.00202e-005, -0.630672 0.758586 0.163708, -0.631196 0.74242 0.22451, -0.63716 0.764197 0.100154, + -0.67704 0.525621 0.515111, -0.74702 0.662185 0.058922, -0.642866 0.760101 0.0947085, -0.762201 0.64734 -4.5994e-006, + -0.798867 0.593683 0.0967042, -0.294214 -0.188859 0.936894, -0.271885 -0.210431 0.939041, -0.293987 -0.179914 0.938724, + -0.404092 -0.0498885 0.913357, -0.548058 0.102228 0.83017, -0.648712 0.239825 0.722258, -0.691698 0.314804 0.649963, + -0.724082 0.347393 0.595839, -0.670696 0.270917 0.690487, -0.673218 0.291109 0.67973, -0.710524 0.339084 0.616586, + -0.867179 0.493116 0.0695504, -0.867944 0.485906 0.102804, -0.87172 0.482531 0.0852495, -0.872008 0.476996 0.109892, + -0.86587 0.500269 -8.07351e-006, -0.872131 0.489272 -1.05638e-005, 2.45843e-007 -3.73591e-008 1, 0.202041 -0.0588326 0.977608, + 0.262733 -0.0360812 0.964194, 0.157576 -0.0710785 0.984945, 1.74227e-007 -1.21944e-008 1, 0.144844 -0.0258947 0.989116, + 0.00377919 0.00671726 0.99997, 0.280388 0.196667 0.939524, 0.312565 0.101365 0.944473, 0.280454 0.196921 0.939451, + 0.143728 0.375196 0.915735, 0.280888 0.196348 0.939441, 0.177828 0.334194 0.925576, 0.198187 0.30599 0.931178, + 0.180171 0.29162 0.939413, 0.227554 0.257979 0.938971, 0.234878 0.247252 0.940053, 0.124619 0.316754 0.940286, + 0.171151 0.296303 0.939634, 0.189019 0.282524 0.940453, 0.0410826 0.34043 0.939372, 0.106097 0.320749 0.941203, + 0.064604 0.337449 0.939124, -0.0293188 0.343492 0.938698, -0.0114981 0.341872 0.939676, -0.158501 0.30156 0.94018, + -0.0962081 0.330132 0.939019, -0.142754 0.310117 0.93992, -0.0862573 0.332358 0.939201, -0.204908 0.268829 0.94114, + -0.202667 0.272375 0.940605, 0.119651 0.322368 0.939022, 0.242328 0.238007 0.940548, 0.0419893 0.34214 0.93871, + -0.0740513 0.332788 0.94009, -0.149611 0.306184 0.940143, -0.0177989 0.335491 0.941875, -0.216537 0.263385 0.940075, + -0.247532 0.232896 0.940472, -0.259014 0.220459 0.940377, -0.289838 0.182557 0.939504, -0.290874 0.178499 0.939963, + -0.301314 0.158675 0.94023, -0.325126 0.0997856 0.940391, -0.321515 0.122892 0.938896, -0.339541 0.0586551 0.938761, + -0.325564 0.104528 0.939725, -0.337594 0.0396503 0.940456, -0.267811 -0.210602 0.940172, -0.336622 -0.0747894 0.938665, + -0.345042 -0.00796524 0.938553, -0.338422 -0.0280353 0.940577, -0.285476 -0.18817 0.939732, -0.318135 -0.138582 0.937862, + -0.294848 -0.166793 0.940874, -0.32497 -0.1001 0.940412, -0.271873 -0.202163 0.940859, -0.256886 0.22423 0.940069, + -0.341137 0.0256401 0.939664, -0.339949 -0.0432145 0.939451, -0.305317 -0.152173 0.940013, -0.328556 -0.100262 0.939148, + 0.32111 -0.116857 0.939805, 0.312903 -0.125277 0.941487, 0.336734 -0.0772967 0.938422, 0.341271 -0.0318054 0.939427, + 0.33981 -0.00947655 0.940446, 0.342298 -0.00840691 0.939554, 0.510476 0.194205 0.837675, 0.529163 0.156435 0.833975, + 0.416775 0.032833 0.908417, 0.599246 0.356947 0.716585, 0.385023 0.271275 0.882138, 0.245667 0.0789138 0.966137, + 0.466763 0.4637 0.75307, 0.674301 0.490034 0.552436, 0.614827 0.346261 0.708584, 0.624326 0.454528 0.635312, + 0.605322 0.452621 0.654767, 0.744645 0.599877 0.292663, 0.775102 0.631837 -3.73462e-006, 0.742496 0.578129 0.338329, + 0.692723 0.501666 0.518137, 0.536077 0.636832 0.554137, 0.621623 0.739275 0.258955, 0.63965 0.768666 -1.33732e-007, + 0.763887 0.64535 -4.98664e-006, 0.0472666 0.0727275 0.996231, 0.123375 0.20848 0.970214, 0.227548 0.389453 0.892496, + 0.144633 0.242978 0.959189, 0.319197 0.565832 0.760229, 0.0599204 0.0961186 0.993565, 0.0174305 0.0272222 0.999478, + 0.237196 0.438068 0.867084, 0.338604 0.611875 0.714812, 0.418284 0.706644 0.570696, 0.464304 0.757125 0.459546, + 0.426657 0.735693 0.526042, 0.480769 0.811126 0.333071, 0.399442 0.700348 0.591573, 0.505168 0.863021 -2.48204e-006, + 0.501415 0.850803 0.157215, 0.474164 0.793424 0.381638, 0.485685 0.835404 0.257314, 0.47711 0.820455 0.314991, + 0.497088 0.8677 -9.8675e-006, 0.362217 0.932075 -0.00597648, 0.333136 0.942782 0.0135339, 0.37756 0.925948 -0.00830702, + 0.351221 0.936174 -0.0149076, 0.351199 0.936301 -1.12786e-007, 0.32616 0.944968 0.0256131, 0.338696 0.940749 -0.0166152, + 0.344919 0.937803 -0.0394517, 0.32977 0.943937 0.0153393, 0.31704 0.948342 -0.0115331, 0.324712 0.945711 -0.0138992, + 0.333412 0.942679 -0.013871, 0.326206 0.944941 -0.0259911, 0.329645 0.943976 -0.0156158, 0.338628 0.940766 0.0170505, + 0.344809 0.937818 0.0400479, 0.347514 0.937624 0.00977426, 0.347583 0.9376 -0.00962429, 0.346842 0.937692 0.0208379, + 0.350809 0.936048 0.0273326, 0.33163 0.942832 -0.0330001, 0.336945 0.941409 -0.0147423, 0.364007 0.930894 0.0305859, + 0.340577 0.940151 -0.0110924, 0.346098 0.937327 0.0404239, 0.363789 0.931054 0.0282087, 0.336918 0.941419 0.0146826, + 0.346873 0.937669 -0.0213442, 0.350792 0.936043 -0.0277325, 0.331634 0.942832 0.0329679, 0.331206 0.94354 0.00590576, + 0.331483 0.943327 0.0159275, 0.340636 0.940131 0.0110148, -0.580898 0.193469 -0.79065, -0.321873 0.114982 -0.939775, + -0.478927 0.174099 -0.860418, -0.888184 0.243615 0.38959, -0.91135 0.2802 0.301545, -0.88805 0.24358 0.389918, + -0.815004 0.277736 -0.508557, -0.693732 0.240068 -0.679046, -0.906754 0.308025 -0.287954, -0.897547 0.323109 -0.300017, + -0.916337 0.312961 -0.249764, -0.841601 0.305038 -0.445712, -0.826262 0.297401 -0.478377, -0.63743 0.232418 -0.734619, + -0.437593 0.159527 -0.884909, -0.256955 0.0945927 -0.961783, -0.930361 0.324906 -0.169893, -0.923328 0.310002 -0.226635, + -0.131547 0.0494885 -0.990074, -0.0149573 0.00738226 -0.999861, 0.00214166 -0.000780639 -0.999997, + 0.131957 -0.0465537 -0.990162, 0.315422 -0.115587 -0.941886, 0.216785 -0.0778616 -0.973109, 0.436636 -0.158126 -0.885633, + 0.566963 -0.222955 -0.792997, 0.108452 -0.269161 0.956969, 0.244327 -0.0890707 0.965594, 0.826566 -0.389243 0.406544, + 0.831923 -0.391825 0.392908, 0.872588 -0.374351 0.313769, 0.0420669 -0.0153397 -0.998997, 0.283915 -0.103517 -0.953245, + 0.662155 -0.251329 -0.705963, 0.82378 -0.298544 -0.481932, 0.805716 -0.309822 -0.504809, 0.697442 -0.25164 -0.671008, + 0.894404 -0.32823 -0.30382, 0.843683 -0.311754 -0.437045, 0.506612 -0.183552 -0.842409, -0.201507 0.0734604 -0.976728, + -0.24217 0.0882844 0.966209, -0.94309 0.317039 0.100337, -0.938398 0.338159 -0.0711121, -0.532955 -0.407567 0.741518, + -0.480606 0.175207 -0.859256, -0.912841 0.304925 -0.271554, 0.904651 -0.350242 -0.242769, 0.906619 -0.357705 -0.223807, + 0.919755 -0.348619 -0.180322, 0.925156 -0.364569 0.105712, -0.0329499 -0.435532 0.89957, 0.497447 -0.181347 -0.848327, + 0.936227 -0.342864 -0.0769663, 0.900252 -0.350115 -0.258779, 0.899484 -0.355937 -0.253452, 0.00149331 -0.00024519 0.999999, + 0.00410428 -0.00147499 0.999991, -0.301486 0.110517 0.947044, -0.360818 0.131902 0.923262, -0.622702 0.229593 0.748017, + -0.662153 0.240001 0.709896, 0.00206371 -0.00118005 0.999997, -0.416568 0.149686 0.896697, -0.838707 0.303817 0.451957, + -0.867521 0.315828 0.384265, -0.937598 0.342661 0.0590975, -0.939044 0.342347 -0.0315457, -0.891684 0.323194 -0.316931, + -0.360661 0.130985 -0.923454, -0.359433 0.13206 -0.923779, 0.00148388 -0.000243752 -0.999999, + 0.00407844 -0.00146571 -0.999991, -0.704377 0.257207 -0.661587, -0.660365 0.241341 -0.711107, -0.853482 0.311325 -0.417907, + -0.890978 0.325494 0.316563, -0.706061 0.256122 0.660212, -0.941136 0.338027 0.000496292, -0.866961 0.315462 -0.385826, + -0.623823 0.224109 -0.748745, 0.00205266 -0.00117353 -0.999997, -0.35826 0.128777 -0.924698, 0.304308 -0.109329 -0.946279, + 0.354151 -0.129423 -0.926189, 0.616569 -0.225639 -0.754274, 0.663704 -0.242562 -0.707574, 0.410693 -0.14971 -0.899399, + 0.841887 -0.310398 -0.441451, 0.87234 -0.316071 -0.37299, 0.938565 -0.340069 -0.0587191, 0.939433 -0.341211 0.0322558, + 0.891017 -0.325552 0.316393, 0.355055 -0.128973 0.925906, 0.356869 -0.129464 0.92514, 0.713209 -0.262954 0.64976, + 0.665276 -0.24108 0.706604, 0.860218 -0.313818 0.401924, 0.891685 -0.323189 -0.316934, 0.714223 -0.256525 -0.651215, + 0.938285 -0.345863 0.000496956, 0.871435 -0.315188 0.375842, 0.618011 -0.223648 0.753687, 0.361776 -0.133355 0.922678, + 0.345242 0.938505 -0.00414836, 0.392943 0.919556 0.0035499, 0.408014 0.912975 0.00125257, 0.351454 0.936202 0.00239445, + 0.456463 0.889742 -0.00125764, 0.318729 0.947845 -0.00127549, 0.349551 0.936904 -0.00506675, 0.345367 0.938451 0.0055544, + 0.389014 0.921226 -0.00333611, 0.349939 0.93677 -0.00212455, 0.402404 0.915461 -0.00162575, 0.318731 0.947844 0.00127558, + 0.349551 0.936904 0.00506561, 0.35782 0.93379 -0.000320889, 0.35782 0.93379 0.000320586, 0.374149 0.927348 -0.00618452, + 0.332191 0.943198 -0.00518513, 0.307116 0.951655 0.0056985, 0.344125 0.938734 0.0189047, 0.309158 0.951 -0.00449213, + 0.397407 0.917642 -2.9883e-008, 0.372397 0.928074 -1.67976e-007, 0.33219 0.943198 0.00518378, 0.307116 0.951655 -0.00569886, + 0.374147 0.927349 0.00618316, 0.309158 0.951 0.00449171, 0.344125 0.938734 -0.0189051, 0.18485 -0.0671704 0.980469, + 0.0929303 -0.0338441 0.995097, 0.271764 -0.0984845 0.957311, 0.340052 -0.138925 0.930088, 0.620911 -0.226177 0.750542, + 0.0623315 -0.0432503 0.997118, 0.881505 -0.319198 0.34794, 0.841757 -0.305468 0.445124, 0.937691 -0.341368 0.0648382, + 0.685934 -0.247448 0.684298, -0.122191 -0.0376922 0.991791, 0.939652 -0.339875 -0.0392307, 0.890421 -0.323214 -0.320442, + 0.706999 -0.257299 -0.658749, 0.34365 -0.122961 -0.931013, 0.631015 -0.228737 -0.741282, 0.156041 -0.0536168 -0.986294, + 0.0927528 -0.0337128 -0.995118, 0.0540152 -0.0195729 -0.998348, 0.215543 -0.0776903 -0.973399, 0.853798 -0.308764 -0.419158, + 0.804797 -0.294757 0.51519, 0.924444 -0.339685 0.173256, 0.669473 -0.243966 0.701632, 0.56447 -0.200109 0.800831, + 0.915893 -0.337523 -0.217296, 0.753342 -0.280467 -0.594823, 0.477103 -0.178005 -0.860632, 0.411494 -0.148751 -0.899192, + -3.48428e-007 1.26449e-007 -1, 0.361258 -0.130915 0.92323, 0.00186669 -0.00153601 0.999997, 0.360894 -0.13306 0.923066, + 0.621331 -0.228891 0.749371, 0.84011 -0.299059 0.452525, 0.662341 -0.236315 0.710957, 0.360728 -0.127328 0.923939, + 0.868582 -0.312593 0.384514, -0.00169712 0.00121275 0.999998, 0.939232 -0.343185 -0.0081772, 0.938549 -0.340267 0.057833, + 0.893413 -0.318645 -0.316669, 0.70516 -0.254852 -0.661665, 0.870756 -0.315381 -0.377251, 0.416621 -0.153531 -0.896022, + 0.660077 -0.239474 -0.712004, 0.894609 -0.329453 0.301886, 0.0018664 -0.00153601 -0.999997, 0.362081 -0.129755 -0.923072, + 0.705986 -0.252794 0.661573, -0.0049454 0.00182326 0.999986, 0.936819 -0.344997 -0.0578546, 0.843918 -0.30639 -0.440373, + -0.00169731 0.00121276 -0.999998, 0.302368 -0.106918 -0.947176, 0.624333 -0.219336 -0.749733, + -0.00494593 0.00182346 -0.999986, -0.360606 0.129043 -0.923748, -0.358519 0.125526 -0.925045, -0.625019 0.218719 -0.749342, + -0.844741 0.306119 -0.438981, -0.660747 0.239272 -0.71145, -0.360828 0.132934 -0.92311, -0.870076 0.315459 -0.378753, + -0.939077 0.343591 -0.00887928, -0.936287 0.34613 -0.0596641, -0.894316 0.330005 0.302152, -0.706638 0.252141 0.661126, + -0.86809 0.312014 0.386092, -0.416321 0.145718 0.897465, -0.662332 0.235932 0.711092, -0.892616 0.318098 -0.319452, + -0.360074 0.130508 0.92375, -0.705212 0.254944 -0.661574, -0.938575 0.339869 0.059722, -0.839657 0.298892 0.453475, + -0.303447 0.111775 0.94627, -0.621477 0.228984 0.749222, 0.313112 0.949627 0.0129937, 0.356543 0.934263 -0.00543102, + 0.372974 0.927725 -0.0147413, 0.307062 0.95158 0.0144624, 0.356319 0.934313 -0.00977194, 0.312685 0.949348 0.0310971, + 0.330053 0.943947 -0.00534127, 0.333047 0.942767 0.0164328, 0.325143 0.945463 -0.0195417, 0.315171 0.949035 -0.000142517, + 0.327729 0.944772 -0.00049517, 0.339745 0.939912 0.033743, 0.335158 0.942159 -0.00216317, 0.329185 0.944096 0.0179086, + 0.304711 0.95209 0.0260098, 0.3586 0.933355 -0.0159591, 0.324095 0.945963 0.0108069, 0.315283 0.948919 0.0122019, + 0.314518 0.947939 -0.0499092, 0.309154 0.950363 0.0351268, 0.330438 0.943823 0.00296496, 0.342128 0.939397 0.021964, + 0.313462 0.94958 -0.00630263, 0.349601 0.936866 -0.00781651, 0.351328 0.936031 -0.0203538, 0.348081 0.936961 -0.0307248, + 0.348014 0.937412 -0.0120671, 0.330902 0.943662 -0.00240877, 0.365442 0.930282 -0.0320518, 0.379273 0.924628 -0.0348625, + -0.367665 0.137607 0.919721, -0.252534 0.0929583 0.963112, -0.533958 0.194011 0.822951, -0.0695661 0.027233 0.997206, + -0.778476 0.27561 0.563928, -0.638699 0.236987 0.732052, -0.358267 0.130422 0.924465, -0.928245 0.324779 0.18133, + -0.851713 0.312238 0.420823, -0.706481 0.258734 0.658742, -0.0566374 0.020689 0.99818, -0.938528 0.344492 0.0221468, + -0.912982 0.321379 -0.251356, -0.893216 0.326032 -0.309626, -0.765057 0.269406 -0.584901, -0.614558 0.218722 -0.757944, + -0.651987 0.242237 -0.718494, -0.93687 0.343483 -0.0655264, -0.507112 0.19179 -0.84027, -0.592338 0.206827 -0.77869, + -0.85688 0.313989 -0.408862, -0.887357 0.323501 0.328549, 0.0667042 -0.0162068 0.997641, -0.342829 0.144796 -0.928172, + -0.331339 0.122824 -0.935483, -0.224906 0.115067 -0.967562, -0.174875 0.126298 -0.976457, 0.233735 -0.078996 0.969086, + 0.206859 -0.0769504 0.97534, 0.147776 -0.0506289 0.987724, 0.0793696 -0.0272375 0.996473, 0.159385 -0.0586931 0.98547, + 0.555005 -0.212306 0.804298, 0.554837 -0.212057 0.80448, 0.522351 -0.19562 0.829989, 0.447933 -0.165955 0.87853, + 0.332852 -0.118717 0.935476, 0.36344 -0.139678 0.921087, 0.554352 -0.212281 0.804755, -0.00157743 0.000600616 0.999999, + 0.0039786 -0.00142983 0.999991, -0.301155 0.11045 0.947157, -0.360334 0.131667 0.923484, -0.62199 0.229215 0.748725, + -0.669779 0.243971 0.701337, 2.29369e-005 -1.04507e-005 1, -0.416421 0.149552 0.896787, -0.848243 0.312812 0.427355, + -0.869835 0.315259 0.379471, -0.937563 0.339974 0.0734368, -0.93962 0.341291 -0.0251837, -0.890872 0.325685 -0.316665, + -0.360709 0.130992 -0.923434, -0.359571 0.132104 -0.923719, -0.00157805 0.00060071 -0.999999, + 0.00397833 -0.00142983 -0.999991, -0.712151 0.262529 -0.651091, -0.669811 0.243508 -0.701468, -0.852772 0.311075 -0.419537, + -0.891895 0.323109 0.316424, -0.714335 0.256601 0.651062, -0.938351 0.345685 -9.07561e-008, -0.871371 0.31509 -0.376073, + -0.623957 0.224158 -0.748619, 2.20293e-005 -1.02703e-005 -1, -0.358757 0.128779 -0.924505, 0.300991 -0.110314 -0.947225, + 0.358841 -0.131168 -0.924136, 0.612888 -0.225973 -0.757169, 0.665806 -0.241228 -0.706053, 0.418658 -0.150415 -0.895601, + 0.844598 -0.30579 -0.439485, 0.866741 -0.315485 -0.386303, 0.936623 -0.34229 -0.0746659, 0.939221 -0.342394 0.0251141, + 0.887764 -0.321768 0.329152, 0.359122 -0.130398 0.924136, 0.359304 -0.131995 0.923839, 0.705188 -0.257538 0.660594, + 0.665256 -0.243173 0.705905, 0.849498 -0.309958 0.426942, 0.886882 -0.323996 -0.329342, 0.705577 -0.25587 -0.660826, + 0.941199 -0.337852 -9.07642e-008, 0.867144 -0.315571 0.385327, 0.614898 -0.220843 0.757053, 0.362533 -0.130316 0.922815, + 0.118074 0.321988 0.939352, 3.40114e-007 -4.79559e-008 1, -0.0957278 0.00996484 0.995358, 0.0470778 0.317704 0.947021, + -0.886601 -0.462534 -0.000651325, -0.826589 -0.562801 0.00256284, -0.840812 -0.541314 -0.00378365, + -0.916148 -0.400838 -0.00110105, -0.99978 -0.0209546 -9.80096e-005, -0.981019 -0.193906 -0.00172493, + -0.999647 -0.0265856 0.000346127, -0.988671 0.150089 -0.00161156, -0.957118 -0.289698 -0.000473959, + -0.914775 -0.403963 0.00058633, -0.979289 -0.202442 0.00330656, -0.971084 0.238737 0.000587095, + -0.933147 0.359493 0.000803346, -0.888337 0.459191 0.000414865, -0.939826 0.341654 0.000707405, + -0.83478 0.550583 -0.000493747, -0.990687 0.136154 0.0013563, -0.813984 -0.580874 0.00386634, -0.805068 -0.593182 0.00104176, + -0.724577 0.689185 -0.00350942, -0.736589 0.67634 0.000586887, -0.598752 0.800907 -0.00661275, -0.316796 0.948492 -0.00173149, + -0.203972 0.978974 0.00246833, -0.411674 0.911329 -0.00189218, -0.0660533 0.997816 0.00055882, + 0.00781859 0.999969 0.000476967, -0.531861 0.846832 0.000312661, 0.167581 0.985858 0.000952627, 0.191466 0.981499 -0.00107066, + -0.61952 0.784972 0.00361183, 0.346338 0.93811 0.000107183, 0.44016 0.897919 -0.000148031, 0.540889 0.841087 0.00339725, + 0.751663 0.659547 -0.000757419, 0.791624 0.611009 5.56317e-005, 0.708555 0.705654 -0.00138804, 0.636403 0.771356 -0.000834181, + -0.846012 0.533142 0.00475218, -0.819401 -0.573221 -0.000230237, -0.999291 -0.0376514 0.000271071, + -0.748318 0.663335 0.00251907, -0.433299 0.901249 -0.00135463, -0.22849 0.973542 -0.00298135, 0.121558 0.992584 -0.000399144, + 0.535674 0.844411 -0.00472182, 0.706085 0.708127 -4.35853e-005, 0.33519 0.942148 -0.00212128, -0.0495031 0.998772 -0.00187883, + 0.758756 0.651375 0, 0.82721 0.561893 3.69858e-005, 0.819093 0.573661 5.55742e-005, 0.832018 0.554749 -1.84742e-007, + 0.862871 0.505395 -0.00549135, 0.852438 0.522828 -0.000161181, 0.903035 0.429564 0.00156915, 0.905625 0.424061 -0.00400606, + 0.864393 0.502796 0.00455155, 0.939895 0.341437 -0.00435526, 0.975243 0.221051 0.00612402, 0.950771 0.309888 -0.00201496, + 0.991836 0.127404 0.00543157, 0.987165 0.159681 0.00262291, 0.998428 -0.054596 0.0126812, 0.995464 0.0951324 0.000962155, + 0.976422 0.21576 -0.00696709, 0.939452 0.342643 0.0051472, 0.900505 0.434843 0.00119268, 0.919791 0.392262 0.0107527, + 0.999401 0.034524 0.00246452, 0.999172 0.0399188 0.00791703, 0.999953 0.00974053 -9.94767e-005, 0.996379 -0.0840484 0.0128707, + -0.994638 0.100292 0.0252213, -0.989921 0.139157 0.0263035, -0.997145 0.0712791 0.0249045, -0.997209 0.0707739 0.0237593, + -0.9899 0.139303 0.0263087, -0.989842 0.139729 0.0262328, -0.98987 0.139539 0.026182, -0.989878 0.13947 0.0262544, + -0.854827 -0.518908 0.00213151, -0.904819 -0.425759 0.00569568, -0.901768 -0.432139 0.00840299, -0.84546 -0.534027 0.00371662, + -0.937412 -0.348106 0.00901635, -0.855286 -0.518135 0.00474742, -0.968273 -0.249501 0.0140379, -0.99479 -0.0998953 0.0203229, + -0.967393 -0.252852 0.0147143, -0.999429 -0.0260332 0.021552, -0.99465 -0.101704 0.018129, -0.935287 -0.353733 0.0105381, + -0.853346 -0.521334 0.00341803, -0.914776 -0.403955 0.00239147, -0.935727 -0.352723 0.000838125, + -0.907923 -0.419112 0.00467389, -0.894689 -0.446671 0.0039537, -0.966777 -0.255296 0.0129129, -0.0272589 -0.999011 0.0351438, + -0.0136328 -0.999753 0.0175762, 0.984405 -0.173927 0.0263795, 0.984504 -0.17358 0.0249564, 0.984545 -0.17333 0.0250509, + 0.984563 -0.173081 0.0260366, 0.984602 -0.172843 0.0261731, 0.984509 -0.17337 0.0261618, 0.984474 -0.1736 0.0259435, + 0.984374 -0.174026 0.0268831, 0.984701 -0.172185 0.026777, 0.984686 -0.172309 0.0265277, 0.984403 -0.173775 0.027425, + 0.984328 -0.174098 0.0280735, 0.984496 -0.173474 0.0259849, -4.83578e-009 -7.21538e-008 1, 3.07378e-008 -3.29102e-007 1, + 0.0584677 0.159742 0.985426, 0.120916 0.341718 0.931992, 2.27593e-007 1.85524e-007 1, -6.05113e-006 -4.05845e-006 1, + 2.00928e-007 -3.11683e-007 1, 4.11566e-008 4.50779e-008 1, 2.30534e-008 -2.46826e-007 1, 6.30319e-008 -2.41114e-007 1, + 3.95207e-007 1.2749e-007 1, 4.14524e-007 9.93562e-008 1, 0.0963867 0.269198 0.958249, 8.15006e-006 3.63299e-006 1, + -9.27041e-005 -4.74301e-005 1, 7.02882e-006 2.23693e-006 1, 1.27961e-005 4.73477e-006 1, -9.87389e-005 -5.0993e-005 1, + 7.33017e-007 -3.90254e-007 1, -7.39888e-005 -3.85781e-005 1, 4.00158e-007 4.32506e-007 1, 0.043623 0.119105 0.991923, + 6.4133e-008 -3.49453e-007 1, 1.19821e-007 -2.17926e-007 1, 1.26158e-006 -2.6091e-007 1, 1.4555e-006 -2.51967e-007 1, + 1.01734e-006 1.60941e-009 1, 5.22982e-007 -1.34441e-007 1, 3.86121e-007 1.70124e-007 1, 8.33473e-007 1.36586e-007 1, + 6.65644e-008 1.28122e-007 1, 1.98628e-007 2.15482e-007 1, 1.48971e-007 1.61611e-007 1, 1.98095e-007 1.31039e-007 1, + 2.96611e-007 6.22375e-008 1, 1.49146e-007 5.04738e-008 1, 1.55313e-007 -2.76503e-008 1, 1.47465e-007 1.17637e-008 1, + 2.94893e-007 -8.80363e-008 1, 1.39579e-007 -6.0386e-008 1, 2.57221e-007 2.39449e-007 1, 4.23534e-008 3.02103e-008 1, + 1.26752e-007 -3.83069e-008 1, 1.26395e-006 6.05726e-007 1, 6.95119e-007 1.87006e-007 1, 4.12034e-007 2.54264e-007 1, + 1.30299e-007 -8.95074e-008 1, 6.16907e-007 6.43031e-007 1, 9.06243e-008 -7.03494e-008 1, 6.24697e-007 6.63036e-007 1, + 2.07133e-007 -1.04253e-007 1, 4.93286e-008 -2.56407e-007 1, 1.24671e-007 -1.18346e-007 1, 6.79682e-008 -1.86611e-007 1, + 5.43759e-014 -2.67698e-007 1, 9.06243e-008 -2.48815e-007 1, 4.29858e-007 -8.61004e-008 1, 4.10976e-007 -1.26225e-009 1, + 1.3058e-007 -2.13203e-007 1, 1.89341e-007 -1.40802e-007 1, 2.45298e-007 -7.30533e-008 1, 1.08966e-007 -5.236e-008 1, + 4.35416e-008 -9.23006e-008 1, 1.0906e-007 -1.78661e-007 1, 5.65776e-007 -2.61425e-007 1, 5.90571e-007 2.44495e-007 1, + 3.69802e-007 2.21285e-007 1, 4.39941e-007 -1.79571e-007 1, 6.11331e-007 4.58989e-007 1, 1.84129e-007 4.52453e-009 1, + 1.56044e-007 5.23314e-008 1, 6.68354e-007 -4.6064e-008 1, 1.0412e-006 -6.97973e-007 1, 8.63381e-007 1.65381e-007 1, + -6.59131e-007 -7.43517e-007 1, -1.20967e-006 -1.08754e-006 1, -2.80694e-006 -1.46981e-006 1, 3.87155e-007 -7.97423e-007 1, + 5.19138e-008 -8.86633e-007 1, 2.01483e-006 -6.20858e-008 1, 1.05483e-006 -6.73724e-007 1, 0.166588 0.461326 0.871451, + 0.169769 0.470202 0.866077, 0.164978 0.462638 0.871062, 0.170005 0.469811 0.866242, 0.168957 0.481121 0.860219, + 0.175645 0.475583 0.861957, 0.173044 0.472543 0.864152, 0.172115 0.469127 0.866196, 0.170653 0.469213 0.866439, + 0.171584 0.4698 0.865937, 0.171805 0.488485 0.855492, 0.166532 0.460483 0.871907, 0.175724 0.475255 0.862122, + 0.166636 0.459971 0.872158, 0.180422 0.494002 0.850535, 0.173416 0.470639 0.865116, 0.179404 0.491389 0.852262, + 0.172228 0.470072 0.865661, 0.149739 0.430773 0.889951, 0.170165 0.465085 0.868758, 0.166168 0.450254 0.877302, + 0.15006 0.429665 0.890432, 0.662377 -0.0929176 0.743386, 0.662325 -0.0929658 0.743426, 0.662663 -0.0931437 0.743103, + 0.662801 -0.0932643 0.742965, 0.662733 -0.0930283 0.743055, 0.662791 -0.0932911 0.742971, 0.662968 -0.0934782 0.742789, + 0.662658 -0.0930822 0.743115, 0.662838 -0.093232 0.742936, -0.57505 0.0377149 0.817248, -0.425841 0.0532126 0.903232, + -0.395673 0.068433 0.915838, -0.399817 0.0383179 0.915794, -0.472986 0.0551207 0.879344, -0.437727 0.0858787 0.894997, + -0.379793 0.125154 0.916566, -0.500064 0.0554788 0.86421, -0.508516 0.0520708 0.859477, -0.309145 0.0415024 0.950109, + -0.328355 0.0393288 0.943735, -0.305291 0.0454324 0.951175, -0.29749 0.0353588 0.95407, -0.304272 0.0406237 0.951719, + -0.493664 0.0417999 0.868648, 2.64329e-007 -1.67446e-007 1, 5.284e-007 -3.35966e-007 1, 5.28143e-007 -3.3704e-007 1, + 0.547675 0.836691 0, 0.533811 0.845604 0, 0.540761 0.841176 0, -0.830635 0.556818 0, -0.855238 0.518236 0, + 0.870552 -0.492077 0, 0.857015 -0.515292 0, 0.941176 -0.337916 0, 0.967097 -0.254409 0, 0.988345 0.152231 0, + 0.985623 -0.168958 0, 0.992564 0.121727 0, 0.857178 0.51502 0, 0.835674 0.549226 0, 0.654537 0.75603 0, -6.40078e-006 1 0, + -9.60117e-006 1 0, -1.28016e-005 1 0, -0.87805 0.478568 0, -0.87805 0.478569 0, 0.979239 0.202708 0, 0.780399 0.625282 0, + 0.842858 -0.538136 0, 0.533205 0.845986 0, 0.578848 0.815435 0, 0.622875 0.782321 0, -0.293748 -0.955883 2.20624e-006, + -0.293748 -0.955883 1.10312e-006, 0.676186 -0.736731 -6.66397e-006, 0.676186 -0.736731 -9.99595e-006, + 0.79545 -0.606019 -1.1759e-005, 0.981206 -0.192962 -4.7654e-006, 0.847511 -0.530778 -4.17621e-006, 0.987188 0.15956 0, + 0.994343 0.10622 0, 0.880915 0.473275 0, 0.989447 -0.144897 0, 0.835381 0.549672 0, 0.892477 -0.451093 0, + 0.676186 -0.736731 0, 0.995335 -0.0964831 0, 0.977174 0.212439 0, 0.783238 0.621721 0, 0.664888 0.746943 0, + -0.561578 -0.827424 0, -0.561578 -0.827424 2.10891e-006, 0.843454 -0.537201 0, 0.761585 -0.648065 0, -0.86305 0.505118 0, + -0.849671 0.527313 0, -0.939055 0.343766 0, -0.966747 0.255735 0, -0.958888 -0.283786 0, -0.856433 0.516258 0, + -0.986206 0.165525 0, -0.973375 -0.22922 0, -0.771848 -0.635807 0, -0.758226 -0.651992 0, -0.624955 -0.78066 0, + -0.390728 -0.920506 0, -0.609797 -0.792558 0, 0.294597 -0.955622 0, 0.195369 -0.98073 0, 0.598233 -0.801322 0, + -0.294589 -0.955624 0, 0.615444 -0.788181 0, -0.928044 -0.372471 0, -0.594412 -0.804161 0, -0.725157 -0.688584 0, + -0.195364 -0.980731 0, 0.390739 -0.920502 0, 0.632365 -0.77467 0, 0.66525 -0.74662 0, -0.842767 0.538278 0, + -0.533204 -0.845987 0, -0.595377 -0.803446 0, 0.554552 0.832149 0, 0.384314 0.923203 0, 0.289699 0.957118 0, + -0.293357 0.956003 0, 0.192157 0.981364 0, -0.234245 0.972178 0, -0.606923 0.79476 0, -0.61442 0.788979 0, + -0.742468 0.669881 0, -0.941081 0.338182 0, -0.778245 0.62796 0, -0.988344 -0.152238 0, -0.99485 -0.101358 0, + -0.883484 -0.468461 0, -0.967043 0.254612 0, -0.835537 -0.549434 0, -0.389113 0.92119 0, -0.811659 0.584132 0, + -0.631696 0.775216 0, -0.9856 0.169091 0, -0.979237 -0.202717 0, -0.780191 -0.625541 0, -0.654172 -0.756346 0, + 0.648822 0.76094 0, 0.594945 0.803766 0, 0.699394 0.714736 0, 0.372272 0.928124 0, 0.538524 0.84261 0, 0.280526 0.959846 0, + -0.8406 0.541656 0, -0.834695 0.550712 0, 0.186136 0.982524 0, -0.846408 0.532535 0, -0.940551 0.339653 0, + -0.900796 0.434243 0, -0.970146 0.242522 0, -0.982897 0.184155 0, -0.987976 0.154605 0, -0.98915 -0.146908 0, + -0.992167 0.124917 0, -0.994573 -0.104038 0, -0.885707 -0.464244 0, -0.875975 -0.482356 0, -0.764506 -0.644616 0, + -0.665337 -0.746543 0, -0.746702 -0.665159 0, -0.613442 -0.78974 0, -0.652632 -0.757675 0, 0.625795 -0.779988 0, + 0.552535 -0.83349 0, -0.976031 -0.217632 0, -0.728345 -0.68521 0, -0.85185 -0.523786 0, -0.63974 -0.768592 0, + 0.668839 -0.743407 0, 0.824677 -0.565604 0, 0.825246 -0.564774 0, 0.824392 -0.566019 0, 0.996982 0.0776381 0, + 0.980676 0.19564 0, 0.823537 -0.567263 0, 0.819907 0.572497 0, 0.957184 0.289479 0, 0.824107 -0.566434 0, 0.967061 0.254543 0, + 0.906011 0.423254 0, 0.709462 0.704744 0, 0.621541 -0.783382 0, 0.62154 -0.783382 0, 0.603706 -0.797207 0, + 0.611574 -0.791187 0, 0.63481 -0.772668 0, 0.619382 -0.785089 0, 0.720967 -0.69297 0, 0.752369 -0.658742 0, + 0.955783 -0.294072 0, 0.782148 -0.623093 0, 0.937165 -0.348887 0, 0.976882 0.213781 0, 0.967611 0.252445 0, + 0.809734 0.586798 0, 0.640084 0.768305 0, 0.778981 0.627048 0, 0.295301 0.955404 0, 0.391662 0.920109 0, -0.195023 0.980799 0, + 0.621624 0.783316 0, -0.559119 0.829088 0, -0.294069 0.955784 0, 0.979632 -0.200803 0, 0.746229 0.665689 0, 0.940136 0.3408 0, + 0.602812 0.797883 0, 0.195831 0.980638 0, -0.390047 0.920795 0, -0.557608 0.830104 0, -0.556096 0.831118 0, + -0.584544 0.811362 0, -0.644928 0.764243 0, -0.599987 0.80001 0, -0.61521 0.788364 0, 8.30127e-007 -3.02801e-007 1, + 4.98076e-007 -8.59628e-007 1, 1.04845e-006 -2.32566e-006 1, 1.02161e-006 -1.89837e-006 1, 9.44855e-006 7.68075e-006 1, + 1.53985e-006 -2.99229e-006 1, -4.05909e-006 -1.81538e-005 1, 1.19059e-005 7.41893e-006 1, 1.04073e-006 -2.20452e-006 1, + 6.49432e-007 -6.5439e-007 1, 1.0139e-006 -1.18191e-007 1, 8.35693e-007 -1.89914e-007 1, 6.9641e-007 -1.58262e-007 1, + 5.37666e-007 -1.78297e-007 1, -4.34429e-006 -1.1928e-005 1, 2.67902e-007 1.75161e-007 1, 0.150397 0.988626 0, + 0.861116 0.508408 0, 0.888038 0.459769 0, 0.412947 0.910754 -0.0012262, 0.309484 0.949069 0.059064, + 0.178115 0.981086 0.0757949, 0.87491 0.484285 0, 0.411579 0.907764 -0.0810418, 0.15433 0.986296 -0.0583336, + 0.724901 0.688853 0, 0.941851 0.335895 -0.00959538, 0.953283 0.301825 0.0123817, 0.982709 -0.185158 0, 0.961476 -0.274888 0, + 0.980558 0.196228 -0.000202001, 0.98701 0.159594 0.0184828, 0.973139 -0.23022 0, 0.963266 0.26855 0, + 0.986998 0.159592 -0.0190882, 0.99252 0.122079 0, 0.916646 -0.397016 -0.0462445, 0.904229 -0.422822 0.0599237, + 0.240327 -0.970692 0, 0.879937 -0.475089 -0.00143558, 0.83472 -0.54748 0.0592242, 0.861116 -0.508408 0, + 0.240327 -0.970692 -4.51254e-007, 0.819436 -0.56578 -0.0917443, 0.950282 -0.311391 0, 0.159675 -0.98717 -5.99633e-007, + -0.165524 -0.986206 6.21599e-007, -0.165525 -0.986206 3.108e-007, -0.459499 -0.888178 0, -0.459499 -0.888178 3.09756e-007, + 0.100136 0.994974 0, -0.776038 0.630686 0, -0.613816 0.789449 0, -0.800021 0.599972 0, -0.947962 0.318383 0, + -0.996896 0.0787323 0, -0.956087 0.293083 0, -0.884548 -0.46645 0, -0.925449 -0.378872 0, -0.676058 -0.736849 0, + -0.999969 0.00788958 0, -0.653588 -0.75685 0, -0.963537 0.267575 0, -0.85109 0.525019 0, -0.998014 -0.0629929 0, + -0.835382 -0.549669 0, -0.630527 -0.776167 0, -0.582891 -0.81255 0, 0.297372 0.954762 0, -0.409885 0.912137 0, + -0.949721 0.313099 0, -0.897621 -0.440768 0, 0.212272 -0.977211 0, 0.650222 -0.759744 0, 0.817283 -0.576237 0, + 0.798846 -0.601535 0, -0.864204 -0.503142 0, -0.882692 -0.469952 0, 0.779646 -0.62622 0, -0.724901 -0.688853 0, + -0.947745 -0.31903 0, -0.744916 0.667158 0, -0.620811 0.78396 0, -0.493146 0.869947 0, -0.800629 0.59916 0, + -0.948161 0.31779 0, -0.997582 0.069492 0, -0.961047 0.276386 0, -0.999257 -0.0385323 0, -0.558825 0.829286 0, + -0.850155 0.526533 0, -0.957369 0.288867 0, -0.999998 0.00201654 0, -0.980429 -0.196875 0, -0.465077 0.88527 0, + -0.504359 0.863494 0, 0.624151 -0.781304 0, 0.534965 -0.844874 0, 0.679575 -0.733606 0, 0.706083 -0.708129 0, + 0.924322 -0.381613 0, 0.731636 -0.681696 0, 0.90038 -0.435105 0, 0.994763 0.102209 0, 0.9905 0.137516 0, 0.918732 0.394881 0, + 0.816152 0.577837 0, 0.913947 0.405833 0, -0.187643 0.982237 0, 0.585538 0.810645 0, 0.765169 0.643829 0, + -0.282821 0.959173 0, 0.957078 -0.289829 0, 0.909032 0.416727 0, 0.975726 0.218994 0, 0.708865 0.705344 0, + -0.375286 0.926909 0, -0.542548 0.840025 0, 0.439362 -0.89831 0, 0.902477 0.430739 0, -0.84661 0.532214 0, + -0.829318 0.558777 0, -0.768393 0.639978 0, -0.745588 0.666408 0, -0.537096 0.843521 0, -0.77946 0.626452 0, + -0.790288 0.612735 0, -0.648415 0.761287 0, -0.811193 0.584778 0, -0.520409 0.853917 0, -0.617211 0.786798 0, + 0.0563648 0.99841 0, -0.704307 0.709895 0, 0.0281824 0.999603 0, 6.99899e-006 0.0163941 -0.999866, + 4.66593e-006 0.0174851 -0.999847, 0.00111362 0.00426445 -0.99999, 0.158139 -0.0523727 -0.986027, + 0.123417 -0.0550523 -0.990827, -0.00035125 0.0284875 -0.999594, 0.126413 0.0411419 -0.991124, 1 1.6247e-007 -2.05089e-007, + 1 1.51514e-007 -2.19548e-007, 1 1.73426e-007 -1.90629e-007, 2.47248e-007 3.32223e-007 -1, -2.32488e-007 -3.17678e-008 -1, + 0.137309 0.0200003 -0.990326, -2.15435e-007 3.40539e-008 -1, 9.62654e-007 1.15411e-006 -1, 0.159551 0.11795 -0.980118, + 7.9641e-007 9.76256e-007 -1, 0.158724 -0.0698496 -0.984849, -2.02922e-007 9.15111e-008 -1, 0.188764 -0.0464415 -0.980924, + -1.97335e-007 1.24466e-007 -1, -7.96995e-007 -1.05073e-006 -1, -1.12388e-007 2.09339e-008 -1, -1.07311e-006 -1.47481e-006 -1, + -1.12708e-006 -2.2538e-006 -1, -6.65667e-007 -1.54513e-006 -1, -3.89551e-007 -1.03204e-007 -1, -2.90753e-007 2.19228e-006 -1, + -1.00614e-007 1.42426e-006 -1, -4.69074e-007 1.57826e-006 -1, -3.6846e-007 1.17186e-006 -1, -6.2991e-008 -9.06984e-008 -1, + 4.57337e-007 -1.29459e-006 -1, 0.00351765 0.0431331 -0.999063, -5.12345e-007 -1.17944e-007 -1, -9.24443e-007 -4.17314e-007 -1, + -0.228296 -0.0965583 -0.968792, -0.016988 0.0267458 -0.999498, -1.43679e-006 -5.35257e-007 -1, -2.86351e-007 -2.07175e-007 -1, + -9.95772e-007 8.2225e-007 -1, -3.67414e-007 2.29365e-007 -1, 0.000535579 0.555711 -0.831376, -0.00540049 0.635159 -0.772363, + -0.00664278 0.563838 -0.825858, -0.00503975 0.239389 -0.970911, -0.0052572 0.371554 -0.928396, -0.00411572 0.404023 -0.91474, + -0.00461923 0.484242 -0.874922, 0.0107425 0.0952758 -0.995393, -0.000327848 0.711857 -0.702324, + -0.00248984 0.697356 -0.716721, -0.00122088 0.740142 -0.672449, 1.92362e-005 0.714924 -0.699202, + 0.00152051 0.0309991 -0.999518, -1.53159e-007 0.731416 -0.681932, 0.000455681 0.714841 -0.699287, -0.012781 0.39765 -0.917448, + -0.00710472 0.638525 -0.769568, 0.321519 -0.946525 -0.026767, 0.247242 -0.968835 -0.0151401, 0.53182 -0.845938 -0.0394524, + 0.389275 -0.918689 0.0668981, 0.27725 -0.957163 0.0835003, 0.628918 -0.777446 0.00633324, 0.71675 -0.696979 -0.0221433, + 0.840414 -0.541757 0.0142851, 0.9026 -0.430235 0.014514, 0.87777 -0.479013 0.00811421, 0.782357 -0.622762 -0.00928053, + 0.919187 -0.393821 0, 0.235857 -0.971788 -1.03613e-007, 0.475035 -0.873288 0.10821, 0.657854 -0.752792 0.0230698, + 0.904817 -0.425577 -0.0138288, 0.850269 -0.525608 -0.0279056, 0.921087 -0.389358 -5.4345e-007, 0.769807 -0.638274 0.00156453, + 0.926026 -0.377459 -9.44948e-007, -0.801187 -0.572902 -0.172869, -0.772978 -0.622421 -0.122872, -0.798771 -0.601617 0.0047894, + -0.765365 -0.643534 0.00889562, -0.766054 -0.64277 0.00279442, -0.807775 -0.58949 0.000700223, -0.298835 0.472768 -0.828968, + -0.36986 0.486402 -0.791591, -0.32659 0.516356 -0.791654, -0.339456 0.374229 -0.862973, -0.27621 0.280561 -0.919235, + -0.0510155 0.08007 -0.995483, -0.1178 0.141354 -0.982925, -0.717384 -0.483201 -0.501874, -0.498395 0.288189 -0.817649, + -0.559768 0.342907 -0.754371, -0.369741 0.156785 -0.915811, -0.246266 0.270455 -0.930702, 0.572023 0.610019 -0.548331, + 0.972346 -0.233547 0, 0.99963 0.0271857 6.32685e-009, 0.98166 -0.190638 -1.3571e-009, 0.849301 0.527909 0, + 0.958013 0.286725 9.03739e-009, 0.944519 0.328456 -3.50249e-007, 0.647353 0.762191 -7.29635e-008, 0.824323 0.56612 0, + 0.997445 0.0714415 -7.04194e-007, 0.98166 -0.190638 -3.56994e-007, 0.938175 0.34616 9.66079e-008, 0.666856 0.745187 0, + 0.797628 0.60315 2.81577e-007, 0.997445 0.0714415 -7.07361e-007, 0.443559 0.896245 -7.6238e-008, + 0.219757 0.975555 -8.52339e-008, 0.426049 0.9047 -2.26607e-007, -0.0388356 0.999246 1.0328e-008, + 0.178677 0.983908 -3.41099e-008, -0.353172 0.935559 7.26499e-008, -0.554338 0.832292 8.50415e-008, + -0.310598 0.950541 1.45152e-007, -0.592311 0.80571 1.24893e-007, -0.7585 0.651673 5.57488e-007, + -0.0858035 0.996312 3.28613e-008, -0.904619 0.426221 4.44337e-007, -0.786897 0.617085 3.24354e-007, + 0.408379 0.912813 -1.18556e-007, -0.986209 0.165507 4.54794e-008, -0.923248 0.384204 6.8117e-008, -0.994337 -0.106276 0, + -0.911069 -0.412253 -7.30897e-008, -0.929099 -0.369831 0, -0.0858035 0.996312 9.52513e-009, -0.353172 0.935558 7.04529e-009, + 0.153865 0.988092 -4.85986e-008, -0.592311 0.80571 0, -0.923248 0.384204 0, -0.988486 -0.151311 4.57215e-007, + -0.845953 -0.533257 -9.45428e-008, -0.902743 -0.430181 -7.78991e-008, -0.992759 0.120126 1.00354e-006, + -2.90581e-007 1.01606e-007 -1, -3.08314e-007 1.30161e-007 -1, -1.48566e-007 1.13281e-008 -1, -3.77692e-007 1.89652e-007 -1, + -2.60175e-007 6.14883e-008 -1, -2.42932e-007 3.39074e-008 -1, -1.03242e-007 5.09395e-008 -1, -1.92048e-007 2.7246e-009 -1, + -2.09371e-007 5.39915e-008 -1, -8.24836e-008 4.20855e-008 -1, -2.84234e-007 6.02051e-008 -1, -2.8043e-007 8.37053e-008 -1, + -1.56388e-007 3.08157e-008 -1, -2.93561e-007 5.91631e-008 -1, -1.47764e-007 -4.85992e-009 -1, -2.3725e-007 5.54921e-008 -1, + -1.70295e-007 4.20854e-008 -1, -2.37606e-007 3.24232e-008 -1, -2.68733e-007 4.65765e-008 -1, -2.6682e-007 1.25789e-007 -1, + -3.11014e-007 1.15872e-007 -1, -2.0738e-007 1.15729e-007 -1, -1.90577e-007 1.94916e-008 -1, -2.39497e-007 4.41074e-008 -1, + -2.0167e-007 9.52222e-009 -1, -1.49675e-007 1.36588e-008 -1, -0.880438 -0.474162 0, -0.980597 -0.196034 0, + -0.997222 0.0744937 0, -0.992759 0.120126 1.00251e-006, -0.923248 0.384204 5.02066e-007, -0.988486 -0.151311 -1.88344e-008, + -0.803189 0.595724 0, -0.608209 0.793777 5.10172e-008, -0.395026 0.91867 1.74964e-007, -0.132581 0.991172 6.67452e-008, + -0.353172 0.935558 9.45882e-008, 0.196334 0.980537 -5.27925e-008, 0.384602 0.923082 0, 0.137284 0.990532 -3.39771e-009, + 0.450513 0.89277 -2.90584e-007, 0.613905 0.78938 -6.41464e-007, -0.0858035 0.996312 1.06591e-008, + 0.797628 0.60315 -3.69928e-007, 0.66133 0.750095 -1.88916e-007, 0.929209 0.369554 0, 0.849301 0.527909 2.81577e-007, + 0.98166 -0.190638 -2.60813e-007, 0.989083 -0.147362 -4.72244e-008, 0.997445 0.0714415 -3.79659e-009, + -0.0241548 0.734101 -0.67861, 0.00250806 0.744568 -0.667542, -0.00254019 0.714283 -0.699853, -0.0414402 0.754111 -0.655438, + -0.106076 0.712385 -0.693725, -0.00305145 0.745771 -0.666195, -3.42765e-007 0.665841 -0.746093, + -0.00102455 0.989771 -0.142664, -0.00191392 0.995211 -0.0977343, -0.00321285 0.981267 -0.192627, + -0.00124009 0.81064 -0.585544, -0.00286934 0.7907 -0.612198, -0.00139248 0.857346 -0.514739, -0.00334294 0.973824 -0.227281, + -0.00272035 0.945937 -0.324339, -0.00280342 0.815809 -0.578314, 0.00173077 0.900605 -0.434635, -0.00248947 0.907535 -0.419969, + -0.00601664 0.949639 -0.31329, -0.111327 0.363762 -0.924815, -0.214957 0.372179 -0.902927, -0.222131 0.318762 -0.921438, + -0.437234 0.284023 -0.853321, -0.325717 0.450505 -0.831236, -0.464417 0.584619 -0.665235, -0.541472 0.658221 -0.523022, + -0.519027 0.621144 -0.587189, -0.442618 0.543999 -0.71285, -0.597925 0.52978 -0.601514, -0.555752 0.668385 -0.49437, + -0.576547 0.382787 -0.721851, -0.175981 0.133567 -0.97529, -0.186831 0.227278 -0.95574, -0.316755 0.125388 -0.940183, + -0.306885 -0.0776928 -0.94857, -0.546117 0.644574 -0.535051, -0.591693 0.713727 -0.374823, -0.612516 0.717085 -0.332587, + -0.620151 0.739217 -0.262622, -0.630675 0.758564 -0.163798, -0.631198 0.742379 -0.22464, -0.637175 0.764167 -0.100285, + -0.67611 0.525568 -0.516385, -0.642892 0.760072 -0.0947706, -0.747028 0.662175 -0.05894, -0.798867 0.593683 -0.0967037, + -0.294373 -0.186041 -0.937408, -0.272808 -0.209898 -0.938892, -0.295074 -0.187936 -0.936809, -0.402782 -0.0676255 -0.912794, + -0.530529 0.103348 -0.841343, -0.643702 0.241534 -0.72616, -0.691606 0.31481 -0.650059, -0.723423 0.347523 -0.596562, + -0.67087 0.270986 -0.69029, -0.673399 0.291339 -0.679452, -0.709978 0.338627 -0.617466, -0.87172 0.482531 -0.0852571, + -0.867944 0.485906 -0.102804, -0.867178 0.493116 -0.0695605, -0.872008 0.476997 -0.109891, 0.262907 -0.0363114 -0.964138, + 0.202145 -0.0588631 -0.977585, -1.40128e-007 -2.85737e-008 -1, 0.157658 -0.0711154 -0.98493, 0.144938 -0.0258737 -0.989102, + -3.01365e-007 1.13429e-007 -1, 0.00435971 0.00774977 -0.999961, 0.280574 0.196702 -0.939461, 0.281002 0.197109 -0.939248, + 0.312647 0.101813 -0.944397, 0.281107 0.196373 -0.93937, 0.143654 0.374925 -0.915857, 0.198181 0.30578 -0.931248, + 0.177689 0.333853 -0.925726, 0.227418 0.257826 -0.939046, 0.234806 0.247132 -0.940102, 0.180114 0.291535 -0.93945, + 0.189018 0.282524 -0.940453, 0.171049 0.296127 -0.939708, 0.11914 0.320254 -0.93981, 0.106033 0.320558 -0.941275, + 0.130271 0.316217 -0.9397, 0.0532213 0.341132 -0.938508, 0.043079 0.34612 -0.937201, 0.0194428 0.348926 -0.936949, + -0.0135929 0.345771 -0.938221, -0.0260154 0.342268 -0.939242, 0.00102579 0.345196 -0.93853, 0.030873 0.349081 -0.936584, + 0 0.340476 -0.940253, -0.0795472 0.33477 -0.938936, -0.0961514 0.329936 -0.939094, 0.05479 0.331647 -0.941811, + 0.242407 0.238022 -0.940524, 0.0180657 0.329801 -0.943878, -0.0128933 0.321435 -0.946844, -0.0100816 0.333255 -0.942783, + -0.00234844 0.349247 -0.937028, -0.0846944 0.329588 -0.940318, -0.139054 0.31215 -0.939801, -2.04429e-006 0.316085 -0.948731, + -0.159994 0.299993 -0.940429, -0.158407 0.30138 -0.940254, -0.206612 0.269449 -0.94059, -0.204786 0.268669 -0.941212, + -0.247385 0.232757 -0.940545, -0.289666 0.182448 -0.939578, -0.26298 0.215534 -0.940418, -0.249472 0.232654 -0.940019, + -0.325079 0.101119 -0.940265, -0.298463 0.162728 -0.940446, -0.321324 0.122818 -0.938971, -0.297072 0.16828 -0.93991, + -0.33934 0.0586202 -0.938836, -0.344837 -0.00796055 -0.938629, -0.337694 0.0333046 -0.940667, -0.267589 -0.211609 -0.940009, + -0.337317 -0.0746654 -0.938425, -0.31802 -0.136713 -0.938175, -0.329654 -0.108939 -0.937796, -0.283955 -0.190468 -0.93973, + -0.302773 -0.167059 -0.938307, -0.341652 -0.0184645 -0.939645, -0.271619 -0.202758 -0.940804, -0.207469 0.270314 -0.940153, + -0.339996 0.0371286 -0.939694, -0.32589 0.104779 -0.939584, -0.323629 -0.102085 -0.940661, -0.337699 -0.0385543 -0.940464, + -0.295582 -0.161273 -0.941606, 0 -0.967757 -0.251886, -5.73738e-006 0.887107 0.461564, -1.14748e-005 0.887107 0.461564, + 0 0.887107 0.461564, 0.860988 0.174731 -0.47767, 0.858576 0.17703 -0.481152, 0.866339 0.173195 -0.468466, + 0.876739 0.170065 -0.449897, 0.870144 0.171263 -0.462081, -0.866339 0.173195 -0.468466, -0.858576 0.17703 -0.481152, + -0.860989 0.17473 -0.477669, -0.870144 0.171262 -0.462081, -0.876739 0.170064 -0.449896, 0.319807 -0.120874 -0.939741, + 0.416809 0.0328398 -0.908401, 0.529245 0.156393 -0.833931, 0.510499 0.19413 -0.837678, 0.599298 0.356745 -0.716642, + 0.385028 0.271225 -0.882151, 0.245642 0.0789343 -0.966142, 0.466704 0.463826 -0.753029, 0.6744 0.490048 -0.552302, + 0.615341 0.344553 -0.70897, 0.624492 0.455076 -0.634756, 0.605459 0.452087 -0.655008, 0.742468 0.578166 -0.338329, + 0.744579 0.599967 -0.292646, 0.693201 0.501361 -0.517793, 0.549798 0.610957 -0.569608, 0.599095 0.747012 -0.288197, + 0.0472004 0.0728171 -0.996228, 0.123389 0.208491 -0.97021, 0.227539 0.389443 -0.892502, 0.144617 0.242939 -0.959201, + 0.319238 0.565852 -0.760196, 0.0594137 0.0955478 -0.99365, 0.0171197 0.0272308 -0.999483, 0.237222 0.438049 -0.867087, + 0.338684 0.611904 -0.714749, 0.421546 0.715285 -0.557374, 0.426656 0.735693 -0.526042, 0.464303 0.757126 -0.459547, + 0.399477 0.70041 -0.591476, 0.484304 0.815657 -0.316469, 0.501405 0.850808 -0.157222, 0.474163 0.793424 -0.381638, + 0.477125 0.820495 -0.314865, 0.485688 0.835442 -0.257186, 0.317571 -0.123347 -0.940178, 0.335895 -0.0789708 -0.938583, + 0.336835 -0.0349585 -0.940915, 0.33985 -0.00960503 -0.940431, 0.342168 -0.00832273 -0.939602, 0.377522 0.925964 0.00828645, + 0.333119 0.942787 -0.0135526, 0.362178 0.93209 0.00595594, 0.351221 0.936174 0.0148767, 0.351199 0.936301 -5.6393e-008, + 0.326116 0.944981 -0.0256894, 0.329726 0.943951 -0.0154153, 0.344909 0.937808 0.0394128, 0.338668 0.94076 0.0165578, + 0.324752 0.945697 0.0138788, 0.31708 0.948329 0.0115122, 0.333397 0.942684 0.0138901, 0.326163 0.944954 0.0260687, + 0.338602 0.940776 -0.0169921, 0.329603 0.943989 0.0156933, 0.344802 0.937822 -0.0400077, 0.347525 0.937619 -0.00984199, + 0.347592 0.937596 0.00969076, 0.350828 0.936041 -0.027332, 0.346882 0.937678 -0.0207901, 0.336978 0.941398 0.0146856, + 0.331655 0.942823 0.0330123, 0.34058 0.94015 0.0111098, 0.364091 0.930857 -0.0307036, 0.363872 0.931018 -0.0283378, + 0.346124 0.937307 -0.0406598, 0.350813 0.936035 0.0277312, 0.346915 0.937655 0.0212947, 0.336952 0.941408 -0.0146259, + 0.33166 0.942822 -0.0329812, 0.33141 0.943351 -0.0160374, 0.331131 0.943566 -0.00602103, 0.34064 0.940129 -0.0110332, + 0.567234 -0.227256 0.791581, 0.319293 -0.117805 0.940305, 0.474554 -0.172525 0.863153, 0.82825 -0.387061 -0.405198, + 0.873782 -0.372337 -0.312843, 0.833394 -0.38958 -0.392023, 0.803916 -0.308651 0.508383, 0.687533 -0.262154 0.677181, + 0.922271 -0.364874 0.127604, 0.902419 -0.330879 0.275969, 0.910477 -0.352422 0.216402, 0.839556 -0.303202 0.450793, + 0.823105 -0.301771 0.481074, 0.633763 -0.228475 0.739015, 0.436878 -0.159277 0.885307, 0.257766 -0.0927844 0.961742, + 0.920515 -0.347416 0.178755, 0.907247 -0.356117 0.223792, 0.133983 -0.047329 0.989853, 0.0201014 -0.00545954 0.999783, + 0.00226222 -0.000824586 0.999997, -0.133564 0.0501832 0.989769, -0.322538 0.11519 0.939521, -0.217251 0.0801242 0.972822, + -0.441871 0.160499 0.882604, -0.580405 0.193117 0.791098, -0.300619 0.109593 -0.947427, -0.888654 0.243557 -0.388554, + -0.888473 0.243511 -0.388996, -0.911725 0.27974 -0.300837, -0.0396987 0.0144727 0.999107, -0.283763 0.103447 0.953298, + -0.665688 0.230533 0.709728, -0.818133 0.300354 0.490353, -0.809263 0.281556 0.515576, -0.691742 0.252216 0.676668, + -0.900498 0.32736 0.28625, -0.845765 0.304311 0.438265, -0.509481 0.185751 0.840194, 0.205105 -0.0747864 0.975879, + 0.336485 -0.122668 -0.933665, 0.925785 -0.362936 -0.10583, 0.936716 -0.341657 0.0763758, -0.0828085 -0.564493 -0.821274, + 0.414052 -0.150945 0.897651, 0.899333 -0.354221 0.256373, -0.921043 0.313962 0.230452, -0.922616 0.308692 0.231275, + -0.931114 0.323845 0.16778, -0.943386 0.315936 -0.101027, -0.563466 -0.386095 -0.730368, -0.428998 0.156394 0.889664, + -0.938954 0.336811 0.0701759, -0.931614 0.313705 0.183534, -0.909797 0.302467 0.284223, 0.0014596 -0.000240102 -0.999999, + 0.00401213 -0.00144188 -0.999991, 0.302263 -0.108594 -0.947019, 0.352664 -0.12888 -0.926832, 0.617145 -0.225851 -0.75374, + 0.664531 -0.242864 -0.706694, 0.00201945 -0.00115396 -0.999997, 0.409748 -0.149361 -0.899888, 0.842578 -0.310654 -0.43995, + 0.872777 -0.316229 -0.371834, 0.938547 -0.340063 -0.0590429, 0.939448 -0.341217 0.0317432, 0.890708 -0.325437 0.317381, + 0.356537 -0.129515 0.925261, 0.358351 -0.129997 0.924492, 0.00151745 -0.000248787 0.999999, 0.00417023 -0.0014987 0.99999, + 0.711152 -0.262195 0.652316, 0.663611 -0.240476 0.708373, 0.859192 -0.313443 0.404403, 0.891929 -0.323276 -0.316158, + 0.715249 -0.256893 -0.649942, 0.938285 -0.345862 -1.83254e-007, 0.870706 -0.314928 0.377746, 0.616851 -0.22323 0.75476, + 0.00209672 -0.00119954 0.999997, 0.363252 -0.133899 0.922019, -0.303482 0.111244 0.946321, -0.362274 0.132434 0.922615, + -0.621553 0.22917 0.749102, -0.660444 0.239382 0.711695, -0.417469 0.15001 0.896224, -0.83739 0.303337 0.454713, + -0.86675 0.31555 0.386229, -0.937631 0.342674 0.058498, -0.939033 0.342343 -0.0319109, -0.891928 0.323281 -0.316155, + -0.359202 0.130451 -0.924098, -0.357982 0.131532 -0.924418, -0.705433 0.257592 -0.66031, -0.661214 0.241652 -0.710211, + -0.854084 0.311546 -0.416508, -0.890668 0.325378 0.317552, -0.703934 0.255349 0.662777, -0.941136 0.338027 2.51943e-007, + -0.86742 0.315629 -0.384657, -0.624398 0.224315 -0.748205, -0.356837 0.128266 -0.925319, 0.408194 0.912894 -0.00129737, + 0.393034 0.919517 -0.00357255, 0.345288 0.938488 0.00413196, 0.351455 0.936202 -0.00239427, 0.456516 0.889714 0.00123701, + 0.31873 0.947845 0.00127608, 0.349548 0.936905 0.00506858, 0.349939 0.93677 0.00212455, 0.388998 0.921233 0.0033309, + 0.345367 0.938451 -0.0055544, 0.402371 0.915475 0.00161508, 0.318731 0.947844 -0.00127558, 0.349551 0.936904 -0.00506561, + 0.35782 0.93379 0.000320889, 0.35782 0.933791 -0.000321095, 0.374144 0.92735 0.00618729, 0.307129 0.951651 -0.00567512, + 0.332187 0.943199 0.0051872, 0.309194 0.950988 0.00450968, 0.344159 0.93872 -0.0189735, 0.37241 0.928068 -8.77398e-005, + 0.397407 0.917642 -0.000174234, 0.374147 0.927349 -0.00618316, 0.307116 0.951655 0.00569887, 0.33219 0.943198 -0.00518378, + 0.344121 0.938735 0.0188801, 0.309154 0.951001 -0.00448772, 0.155788 -0.0534991 0.986341, 0.0927532 -0.0337129 0.995118, + 0.295276 -0.104655 0.949663, 0.433783 -0.157146 0.887208, 0.62108 -0.226239 0.750384, 0.215791 -0.0777167 0.973342, + 0.876615 -0.3171 0.36193, 0.841768 -0.305472 0.445099, 0.937694 -0.341369 0.0647816, 0.677465 -0.245547 0.69336, + 0.0536724 -0.0194487 0.998369, 0.939915 -0.339973 -0.0312667, 0.890398 -0.323205 -0.320515, 0.7069 -0.257263 -0.658869, + 0.32542 -0.118226 -0.93815, 0.647072 -0.233347 -0.725842, 0.18485 -0.0671701 -0.980469, 0.0929302 -0.033844 -0.995097, + 0.0624735 -0.0432638 -0.997109, 0.291669 -0.124921 -0.948327, 0.859485 -0.311157 -0.405545, 0.753374 -0.28051 0.594762, + 0.915881 -0.337505 0.217376, 0.477511 -0.17807 0.860392, 0.924472 -0.339716 -0.173047, 0.804808 -0.294726 -0.515189, + 0.565304 -0.200344 -0.800183, 0.669954 -0.244105 -0.701124, -0.121621 -0.0377507 -0.991859, 3.48428e-007 -1.2645e-007 1, + -0.358614 0.12832 -0.924624, 0.00182563 -0.00150072 -0.999997, -0.356579 0.124847 -0.925886, -0.625608 0.218925 -0.74879, + -0.845379 0.306348 -0.437591, -0.661618 0.239588 -0.710535, -0.358808 0.13219 -0.924004, -0.87043 0.315586 -0.377832, + -0.00166013 0.00118507 -0.999998, -0.939074 0.343589 -0.00931642, -0.936261 0.346119 -0.0601382, -0.894355 0.330018 0.302022, + -0.706638 0.25214 0.661127, -0.86813 0.312028 0.38599, -0.662332 0.235931 0.711093, -0.892728 0.318134 -0.319104, + 0.0018664 -0.00153601 0.999997, -0.360075 0.130509 0.92375, -0.706295 0.255333 -0.660267, -0.00483672 0.00178318 -0.999987, + -0.938598 0.339877 0.059314, -0.839693 0.298905 0.453401, -0.00169693 0.00121275 0.999998, -0.303447 0.111776 0.94627, + -0.621477 0.228984 0.749221, -0.00494489 0.00182307 0.999986, 0.840145 -0.299072 0.452451, 0.360729 -0.127328 0.923939, + 0.868621 -0.312607 0.384414, 0.939229 -0.343183 -0.00860543, 0.938571 -0.340274 0.0574315, 0.893526 -0.318681 -0.316312, + 0.706243 -0.255241 -0.660358, 0.871111 -0.315509 -0.376324, 0.415338 -0.153057 -0.896698, 0.660949 -0.23979 -0.711089, + 0.894647 -0.329467 0.301759, 0.360064 -0.129022 -0.923963, 0.936793 -0.344988 -0.0583241, 0.844559 -0.30662 -0.43898, + 0.299648 -0.10594 -0.94815, 0.624925 -0.219544 -0.749179, 0.372976 0.927724 0.0147419, 0.356543 0.934263 0.00543178, + 0.313098 0.949632 -0.0130066, 0.307048 0.951584 -0.0144761, 0.356318 0.934314 0.00977163, 0.333058 0.942764 -0.0164087, + 0.330075 0.943939 0.00536775, 0.312681 0.949349 -0.03109, 0.325152 0.94546 0.0195403, 0.327728 0.944772 0.000495214, + 0.315171 0.949035 0.00014254, 0.335158 0.942159 0.00216332, 0.339753 0.939906 -0.0338299, 0.304753 0.952072 -0.0261641, + 0.329205 0.944087 -0.0179846, 0.324105 0.945959 -0.0108204, 0.357673 0.933773 0.0117716, 0.314546 0.947929 0.0499197, + 0.315276 0.948921 -0.0122203, 0.309129 0.95037 -0.035152, 0.342109 0.939403 -0.0219772, 0.330425 0.943828 -0.00296422, + 0.349589 0.936871 0.00782112, 0.313456 0.949582 0.00630548, 0.347707 0.937501 0.0138574, 0.330117 0.943935 -0.00310597, + 0.348018 0.93741 0.0120572, 0.360241 0.932841 0.00590279, 0.341486 0.939558 -0.0248689, 0.36773 0.929533 0.0272517, + 0.079283 -0.0272294 -0.99648, -0.073395 0.0275174 -0.996923, -0.0691483 0.0252591 -0.997287, 0.140833 -0.0506972 -0.988735, + 0.363152 -0.139371 -0.921247, 0.435034 -0.145099 -0.888646, 0.375417 -0.130667 -0.917599, 0.155449 -0.0571041 -0.986192, + 0.202573 -0.0742807 -0.976446, 0.260658 -0.0952958 -0.960716, -0.00412851 0.00128749 -0.999991, 0.186798 -0.0665664 -0.980141, + 0.5018 -0.149104 -0.852036, -0.624236 0.195606 0.756352, -0.81844 0.26958 0.507427, -0.683804 0.241393 0.688579, + -0.507353 0.191993 0.840078, -0.868759 0.313114 0.383689, -0.677178 0.248769 0.692491, -0.891762 0.325445 0.314399, + -0.939064 0.342113 0.0334198, -0.943861 0.330276 -0.00669713, -0.269546 0.0985923 -0.957927, -0.399136 0.148323 -0.904815, + -0.559405 0.199267 -0.804586, -0.815859 0.289519 -0.500552, -0.88526 0.324281 -0.333401, -0.689767 0.253192 -0.678318, + -0.842072 0.306978 -0.443486, -0.936116 0.343532 -0.0753186, -0.342965 0.145205 0.928057, -0.224734 0.115538 0.967546, + -0.331944 0.123283 0.935208, -0.174231 0.126874 0.976497, -0.302272 0.109288 -0.946936, -0.615289 0.225892 -0.755243, + -0.00158671 0.000603932 -0.999999, 0.004 -0.00143752 -0.999991, 0.301657 -0.110556 -0.946985, 0.359321 -0.131344 -0.923925, + 0.612888 -0.225974 -0.757169, 0.665806 -0.241229 -0.706053, 2.19734e-005 -1.03353e-005 -1, 0.418973 -0.150528 -0.895434, + 0.844597 -0.30579 -0.439486, 0.86674 -0.315484 -0.386304, 0.936618 -0.342289 -0.0747311, 0.939224 -0.342395 0.0249862, + 0.887679 -0.321738 0.329409, 0.359532 -0.130547 0.923956, 0.359715 -0.132146 0.923657, -0.00157749 0.000600567 0.999999, + 0.00397903 -0.00142988 0.999991, 0.704848 -0.257415 0.661004, 0.665149 -0.243135 0.706018, 0.849231 -0.30986 0.427544, + 0.705578 -0.25587 -0.660826, 0.941199 -0.337852 -9.84623e-005, 0.866953 -0.315501 0.385812, 0.615048 -0.220898 0.756915, + 2.26141e-005 -1.04013e-005 1, 0.362944 -0.130464 0.922633, -0.301431 0.110551 0.947057, -0.360745 0.131817 0.923302, + -0.622149 0.229273 0.748575, -0.669678 0.243933 0.701447, -0.416959 0.149745 0.896505, -0.84793 0.312697 0.428059, + -0.869653 0.315192 0.379944, -0.937573 0.339978 0.0732887, -0.939618 0.34129 -0.0252808, -0.361196 0.13117 -0.923218, + -0.360055 0.13228 -0.923505, -0.891817 0.323081 0.316673, -0.714008 0.256483 0.651467, -0.938351 0.345684 -9.81812e-005, + -0.871371 0.31509 -0.376074, -0.623957 0.224159 -0.748619, -0.359231 0.128949 -0.924297] + } + coordIndex [ + 54, 5, 6, -1,6, 7, 53, -1,52, 7, 51, -1,4, 5, 55, -1,55, 2, 3, -1,3, 4, 55, -1,2, + 55, 1, -1,52, 53, 7, -1,50, 51, 7, -1,8, 48, 49, -1,49, 50, 8, -1,53, 54, 6, -1,55, + 56, 1, -1,54, 55, 5, -1,40, 0, 56, -1,8, 50, 7, -1,1, 56, 0, -1,28, 29, 41, -1,41, + 29, 30, -1,30, 31, 41, -1,42, 26, 27, -1,43, 25, 26, -1,41, 27, 28, -1,41, 31, 40, -1, + 43, 44, 25, -1,41, 42, 27, -1,43, 26, 42, -1,46, 24, 25, -1,47, 24, 46, -1,32, 24, + 47, -1,46, 25, 45, -1,44, 45, 25, -1,40, 31, 0, -1,63, 8, 62, -1,9, 61, 62, -1,62, + 8, 9, -1,57, 58, 11, -1,59, 60, 9, -1,58, 59, 10, -1,61, 9, 60, -1,56, 57, 15, -1, + 10, 11, 58, -1,12, 57, 11, -1,13, 57, 12, -1,14, 15, 57, -1,15, 16, 56, -1,13, 14, + 57, -1,10, 59, 9, -1,16, 40, 56, -1,39, 40, 17, -1,37, 38, 22, -1,39, 21, 38, -1, + 34, 24, 33, -1,34, 35, 23, -1,34, 23, 24, -1,19, 20, 39, -1,18, 19, 39, -1,21, 39, + 20, -1,36, 23, 35, -1,36, 37, 23, -1,23, 37, 22, -1,21, 22, 38, -1,18, 39, 17, -1, + 40, 16, 17, -1,33, 24, 32, -1,8, 63, 48, -1,65, 16, 15, -1,2419, 15, 14, -1,2421, + 13, 12, -1,2422, 12, 11, -1,13, 2420, 14, -1,15, 2419, 65, -1,66, 65, 2419, -1,67, + 2419, 2420, -1,14, 2420, 2419, -1,12, 2422, 2421, -1,69, 2421, 2422, -1,70, 2422, + 2423, -1,11, 2423, 2422, -1,2421, 68, 2420, -1,13, 2421, 2420, -1,2424, 2423, 11, -1, + 2424, 10, 9, -1,2425, 9, 8, -1,64, 6, 2427, -1,6, 5, 2428, -1,2426, 8, 64, -1,2429, + 5, 4, -1,2424, 9, 2425, -1,72, 2424, 2425, -1,2430, 4, 3, -1,3, 2, 2431, -1,1, 0, + 2433, -1,2432, 2, 1, -1,2425, 8, 2426, -1,2424, 11, 10, -1,2424, 71, 2423, -1,67, + 2420, 68, -1,68, 2421, 69, -1,64, 2427, 2426, -1,2426, 2427, 74, -1,2427, 2428, 75, -1, + 6, 2428, 2427, -1,70, 69, 2422, -1,66, 2419, 67, -1,70, 2423, 71, -1,71, 2424, 72, -1, + 2425, 2426, 73, -1,2427, 75, 74, -1,2426, 74, 73, -1,72, 2425, 73, -1,76, 75, 2428, -1, + 4, 2430, 2429, -1,77, 2429, 2430, -1,78, 2430, 2431, -1,3, 2431, 2430, -1,1, 2433, + 2432, -1,80, 2432, 2433, -1,81, 2433, 83, -1,0, 83, 2433, -1,2432, 79, 2431, -1,2, + 2432, 2431, -1,2429, 77, 76, -1,2430, 78, 77, -1,2432, 80, 79, -1,83, 82, 81, -1, + 2433, 81, 80, -1,2431, 79, 78, -1,76, 2428, 2429, -1,5, 2429, 2428, -1,83, 0, 31, -1, + 2434, 31, 30, -1,2436, 29, 28, -1,2437, 28, 27, -1,29, 2435, 30, -1,31, 2434, 83, -1, + 82, 83, 2434, -1,85, 2434, 2435, -1,30, 2435, 2434, -1,28, 2437, 2436, -1,87, 2436, + 2437, -1,88, 2437, 2438, -1,27, 2438, 2437, -1,2436, 86, 2435, -1,29, 2436, 2435, -1, + 2439, 2438, 27, -1,2439, 26, 84, -1,2440, 84, 24, -1,23, 22, 2442, -1,22, 21, 2443, -1, + 2441, 24, 23, -1,2444, 21, 20, -1,2439, 84, 2440, -1,90, 2439, 2440, -1,2445, 20, + 19, -1,19, 18, 2446, -1,17, 16, 2448, -1,2447, 18, 17, -1,2440, 24, 2441, -1,2439, + 27, 26, -1,2439, 89, 2438, -1,85, 2435, 86, -1,86, 2436, 87, -1,23, 2442, 2441, -1, + 2441, 2442, 92, -1,2442, 2443, 93, -1,22, 2443, 2442, -1,88, 87, 2437, -1,82, 2434, + 85, -1,88, 2438, 89, -1,89, 2439, 90, -1,2440, 2441, 91, -1,2442, 93, 92, -1,2441, + 92, 91, -1,90, 2440, 91, -1,94, 93, 2443, -1,20, 2445, 2444, -1,95, 2444, 2445, -1, + 96, 2445, 2446, -1,19, 2446, 2445, -1,17, 2448, 2447, -1,98, 2447, 2448, -1,99, 2448, + 65, -1,16, 65, 2448, -1,2447, 97, 2446, -1,18, 2447, 2446, -1,2444, 95, 94, -1,2445, + 96, 95, -1,2447, 98, 97, -1,65, 66, 99, -1,2448, 99, 98, -1,2446, 97, 96, -1,94, + 2443, 2444, -1,21, 2444, 2443, -1,100, 66, 67, -1,2449, 67, 68, -1,2451, 69, 70, -1, + 2452, 70, 71, -1,69, 2450, 68, -1,67, 2449, 100, -1,101, 100, 2449, -1,102, 2449, + 2450, -1,68, 2450, 2449, -1,70, 2452, 2451, -1,104, 2451, 2452, -1,105, 2452, 2453, -1, + 71, 2453, 2452, -1,2451, 103, 2450, -1,69, 2451, 2450, -1,2454, 2453, 71, -1,2454, + 72, 73, -1,2455, 73, 74, -1,75, 76, 2457, -1,76, 77, 2458, -1,2456, 74, 75, -1,2459, + 77, 78, -1,2454, 73, 2455, -1,107, 2454, 2455, -1,2460, 78, 79, -1,79, 80, 2461, -1, + 81, 82, 2463, -1,2462, 80, 81, -1,2455, 74, 2456, -1,2454, 71, 72, -1,2454, 106, + 2453, -1,102, 2450, 103, -1,103, 2451, 104, -1,75, 2457, 2456, -1,2456, 2457, 109, -1, + 2457, 2458, 110, -1,76, 2458, 2457, -1,105, 104, 2452, -1,101, 2449, 102, -1,105, + 2453, 106, -1,106, 2454, 107, -1,2455, 2456, 108, -1,2457, 110, 109, -1,2456, 109, + 108, -1,107, 2455, 108, -1,111, 110, 2458, -1,78, 2460, 2459, -1,112, 2459, 2460, -1, + 113, 2460, 2461, -1,79, 2461, 2460, -1,81, 2463, 2462, -1,115, 2462, 2463, -1,116, + 2463, 118, -1,82, 118, 2463, -1,2462, 114, 2461, -1,80, 2462, 2461, -1,2459, 112, + 111, -1,2460, 113, 112, -1,2462, 115, 114, -1,118, 117, 116, -1,2463, 116, 115, -1, + 2461, 114, 113, -1,111, 2458, 2459, -1,77, 2459, 2458, -1,118, 82, 85, -1,2464, 85, + 86, -1,2466, 87, 88, -1,2467, 88, 89, -1,87, 2465, 86, -1,85, 2464, 118, -1,117, + 118, 2464, -1,119, 2464, 2465, -1,86, 2465, 2464, -1,88, 2467, 2466, -1,121, 2466, + 2467, -1,122, 2467, 2468, -1,89, 2468, 2467, -1,2466, 120, 2465, -1,87, 2466, 2465, -1, + 2469, 2468, 89, -1,2469, 90, 91, -1,2470, 91, 92, -1,93, 94, 2472, -1,94, 95, 2473, -1, + 2471, 92, 93, -1,2474, 95, 96, -1,2469, 91, 2470, -1,124, 2469, 2470, -1,2475, 96, + 97, -1,97, 98, 2476, -1,99, 66, 2478, -1,2477, 98, 99, -1,2470, 92, 2471, -1,2469, + 89, 90, -1,2469, 123, 2468, -1,119, 2465, 120, -1,120, 2466, 121, -1,93, 2472, 2471, -1, + 2471, 2472, 126, -1,2472, 2473, 127, -1,94, 2473, 2472, -1,122, 121, 2467, -1,117, + 2464, 119, -1,122, 2468, 123, -1,123, 2469, 124, -1,2470, 2471, 125, -1,2472, 127, + 126, -1,2471, 126, 125, -1,124, 2470, 125, -1,128, 127, 2473, -1,96, 2475, 2474, -1, + 129, 2474, 2475, -1,130, 2475, 2476, -1,97, 2476, 2475, -1,99, 2478, 2477, -1,132, + 2477, 2478, -1,133, 2478, 100, -1,66, 100, 2478, -1,2477, 131, 2476, -1,98, 2477, + 2476, -1,2474, 129, 128, -1,2475, 130, 129, -1,2477, 132, 131, -1,100, 101, 133, -1, + 2478, 133, 132, -1,2476, 131, 130, -1,128, 2473, 2474, -1,95, 2474, 2473, -1,134, + 101, 102, -1,2479, 102, 103, -1,2481, 104, 105, -1,2482, 105, 106, -1,104, 2480, + 103, -1,102, 2479, 134, -1,135, 134, 2479, -1,136, 2479, 2480, -1,103, 2480, 2479, -1, + 105, 2482, 2481, -1,138, 2481, 2482, -1,139, 2482, 2483, -1,106, 2483, 2482, -1,2481, + 137, 2480, -1,104, 2481, 2480, -1,2484, 2483, 106, -1,2484, 107, 108, -1,2485, 108, + 109, -1,110, 111, 2487, -1,111, 112, 2488, -1,2486, 109, 110, -1,2489, 112, 113, -1, + 2484, 108, 2485, -1,141, 2484, 2485, -1,2490, 113, 114, -1,114, 115, 2491, -1,116, + 117, 2493, -1,2492, 115, 116, -1,2485, 109, 2486, -1,2484, 106, 107, -1,2484, 140, + 2483, -1,136, 2480, 137, -1,137, 2481, 138, -1,110, 2487, 2486, -1,2486, 2487, 143, -1, + 2487, 2488, 144, -1,111, 2488, 2487, -1,139, 138, 2482, -1,135, 2479, 136, -1,139, + 2483, 140, -1,140, 2484, 141, -1,2485, 2486, 142, -1,2487, 144, 143, -1,2486, 143, + 142, -1,141, 2485, 142, -1,145, 144, 2488, -1,113, 2490, 2489, -1,146, 2489, 2490, -1, + 147, 2490, 2491, -1,114, 2491, 2490, -1,116, 2493, 2492, -1,149, 2492, 2493, -1,150, + 2493, 152, -1,117, 152, 2493, -1,2492, 148, 2491, -1,115, 2492, 2491, -1,2489, 146, + 145, -1,2490, 147, 146, -1,2492, 149, 148, -1,152, 151, 150, -1,2493, 150, 149, -1, + 2491, 148, 147, -1,145, 2488, 2489, -1,112, 2489, 2488, -1,152, 117, 119, -1,2494, + 119, 120, -1,2496, 121, 122, -1,2497, 122, 123, -1,121, 2495, 120, -1,119, 2494, + 152, -1,151, 152, 2494, -1,153, 2494, 2495, -1,120, 2495, 2494, -1,122, 2497, 2496, -1, + 155, 2496, 2497, -1,156, 2497, 2498, -1,123, 2498, 2497, -1,2496, 154, 2495, -1,121, + 2496, 2495, -1,2499, 2498, 123, -1,2499, 124, 125, -1,2500, 125, 126, -1,127, 128, + 2502, -1,128, 129, 2503, -1,2501, 126, 127, -1,2504, 129, 130, -1,2499, 125, 2500, -1, + 158, 2499, 2500, -1,2505, 130, 131, -1,131, 132, 2506, -1,133, 101, 2508, -1,2507, + 132, 133, -1,2500, 126, 2501, -1,2499, 123, 124, -1,2499, 157, 2498, -1,153, 2495, + 154, -1,154, 2496, 155, -1,127, 2502, 2501, -1,2501, 2502, 160, -1,2502, 2503, 161, -1, + 128, 2503, 2502, -1,156, 155, 2497, -1,151, 2494, 153, -1,156, 2498, 157, -1,157, + 2499, 158, -1,2500, 2501, 159, -1,2502, 161, 160, -1,2501, 160, 159, -1,158, 2500, + 159, -1,162, 161, 2503, -1,130, 2505, 2504, -1,163, 2504, 2505, -1,164, 2505, 2506, -1, + 131, 2506, 2505, -1,133, 2508, 2507, -1,166, 2507, 2508, -1,167, 2508, 134, -1,101, + 134, 2508, -1,2507, 165, 2506, -1,132, 2507, 2506, -1,2504, 163, 162, -1,2505, 164, + 163, -1,2507, 166, 165, -1,134, 135, 167, -1,2508, 167, 166, -1,2506, 165, 164, -1, + 162, 2503, 2504, -1,129, 2504, 2503, -1,148, 149, 200, -1,148, 199, 147, -1,199, + 148, 200, -1,151, 170, 150, -1,201, 150, 170, -1,149, 150, 201, -1,201, 200, 149, -1, + 198, 147, 199, -1,195, 169, 145, -1,196, 195, 145, -1,169, 195, 194, -1,194, 143, + 169, -1,198, 197, 147, -1,146, 147, 197, -1,146, 197, 196, -1,196, 145, 146, -1,153, + 170, 151, -1,154, 171, 153, -1,172, 171, 154, -1,155, 172, 154, -1,155, 156, 173, -1, + 173, 156, 174, -1,155, 173, 172, -1,153, 171, 170, -1,174, 156, 175, -1,157, 175, + 156, -1,157, 176, 175, -1,158, 176, 157, -1,177, 158, 168, -1,168, 178, 177, -1,176, + 158, 177, -1,160, 178, 168, -1,193, 142, 194, -1,193, 141, 142, -1,192, 141, 193, -1, + 140, 192, 191, -1,190, 139, 191, -1,140, 191, 139, -1,140, 141, 192, -1,138, 139, + 189, -1,188, 138, 189, -1,137, 138, 188, -1,187, 137, 188, -1,135, 136, 186, -1,187, + 186, 136, -1,187, 136, 137, -1,139, 190, 189, -1,163, 181, 180, -1,182, 181, 164, -1, + 163, 164, 181, -1,162, 163, 180, -1,160, 161, 178, -1,179, 161, 162, -1,162, 180, + 179, -1,161, 179, 178, -1,185, 184, 166, -1,186, 185, 167, -1,167, 185, 166, -1,165, + 183, 164, -1,183, 182, 164, -1,184, 183, 165, -1,165, 166, 184, -1,186, 167, 135, -1, + 194, 142, 143, -1,201, 170, 205, -1,2509, 201, 205, -1,200, 201, 2512, -1,199, 200, + 2512, -1,2510, 2509, 204, -1,205, 204, 2509, -1,2513, 2512, 2510, -1,2509, 2510, + 2512, -1,2512, 2513, 2515, -1,2514, 2513, 2510, -1,2512, 201, 2509, -1,2511, 2510, + 204, -1,2515, 199, 2512, -1,2521, 197, 198, -1,2527, 195, 196, -1,2530, 194, 195, -1, + 2524, 196, 197, -1,2516, 2515, 2513, -1,198, 2515, 2518, -1,198, 2518, 2521, -1,2518, + 2515, 2519, -1,2524, 2521, 2525, -1,196, 2524, 2527, -1,195, 2527, 2530, -1,2527, + 2524, 2528, -1,2524, 197, 2521, -1,2521, 2518, 2522, -1,2530, 193, 194, -1,199, 2515, + 198, -1,2530, 2527, 2528, -1,224, 2511, 203, -1,2511, 204, 203, -1,2516, 2514, 2517, -1, + 2510, 2511, 2514, -1,2515, 2516, 2519, -1,2519, 2516, 2517, -1,2513, 2514, 2516, -1, + 223, 2514, 2511, -1,224, 203, 202, -1,222, 2517, 223, -1,2511, 224, 223, -1,2517, + 222, 2520, -1,2514, 223, 2517, -1,2520, 2519, 2517, -1,2523, 2522, 2520, -1,2519, + 2520, 2522, -1,2525, 2523, 2526, -1,2522, 2523, 2525, -1,2524, 2525, 2528, -1,2528, + 2525, 2529, -1,2525, 2521, 2522, -1,220, 2523, 2520, -1,221, 220, 2520, -1,2526, + 2523, 220, -1,219, 2526, 220, -1,218, 2529, 219, -1,2526, 219, 2529, -1,2529, 218, + 2532, -1,2529, 2525, 2526, -1,2531, 2528, 2529, -1,222, 221, 2520, -1,2522, 2518, + 2519, -1,2530, 2528, 2531, -1,2530, 2531, 2533, -1,192, 193, 2533, -1,2536, 191, + 192, -1,2539, 191, 2536, -1,2533, 2536, 192, -1,2537, 2536, 2533, -1,2535, 2534, + 2531, -1,2534, 2533, 2531, -1,2540, 2539, 2537, -1,2533, 2534, 2537, -1,2542, 2539, + 2540, -1,2541, 2540, 2537, -1,2536, 2537, 2539, -1,2538, 2537, 2534, -1,2539, 190, + 191, -1,193, 2530, 2533, -1,2545, 189, 190, -1,2551, 187, 188, -1,206, 186, 187, -1, + 2548, 188, 189, -1,2543, 2545, 2542, -1,190, 2542, 2545, -1,2545, 2543, 2546, -1, + 2540, 2543, 2542, -1,2548, 2545, 2549, -1,188, 2548, 2551, -1,187, 2551, 206, -1, + 2551, 2548, 2552, -1,2548, 189, 2545, -1,206, 2551, 207, -1,2539, 2542, 190, -1,2544, + 2543, 2540, -1,216, 2535, 2532, -1,2535, 2531, 2532, -1,2538, 2541, 2537, -1,2534, + 2535, 2538, -1,2541, 2544, 2540, -1,214, 2541, 2538, -1,2544, 2546, 2543, -1,215, + 2538, 2535, -1,216, 2532, 217, -1,215, 2535, 216, -1,213, 2544, 214, -1,2538, 215, + 214, -1,2544, 213, 2547, -1,2544, 2541, 214, -1,2547, 2546, 2544, -1,218, 217, 2532, -1, + 2550, 2549, 2547, -1,2546, 2547, 2549, -1,2552, 2550, 2553, -1,2549, 2550, 2552, -1, + 2551, 2552, 207, -1,207, 2552, 208, -1,2552, 2548, 2549, -1,211, 2550, 2547, -1,212, + 211, 2547, -1,2553, 2550, 211, -1,210, 2553, 211, -1,209, 208, 210, -1,2553, 210, + 208, -1,208, 2552, 2553, -1,213, 212, 2547, -1,2549, 2545, 2546, -1,2529, 2532, 2531, -1, + 185, 186, 206, -1,2554, 185, 206, -1,184, 185, 2557, -1,183, 184, 2557, -1,2555, + 2554, 207, -1,206, 207, 2554, -1,2558, 2557, 2555, -1,2554, 2555, 2557, -1,2557, + 2558, 2560, -1,2559, 2558, 2555, -1,2557, 185, 2554, -1,2556, 2555, 207, -1,2560, + 183, 2557, -1,2566, 181, 182, -1,2572, 179, 180, -1,2575, 178, 179, -1,2569, 180, + 181, -1,2561, 2560, 2558, -1,182, 2560, 2563, -1,182, 2563, 2566, -1,2563, 2560, + 2564, -1,2569, 2566, 2570, -1,180, 2569, 2572, -1,179, 2572, 2575, -1,2572, 2569, + 2573, -1,2569, 181, 2566, -1,2566, 2563, 2567, -1,2575, 177, 178, -1,183, 2560, 182, -1, + 2575, 2572, 2573, -1,239, 2556, 208, -1,2556, 207, 208, -1,2561, 2559, 2562, -1,2555, + 2556, 2559, -1,2560, 2561, 2564, -1,2564, 2561, 2562, -1,2558, 2559, 2561, -1,238, + 2559, 2556, -1,239, 208, 209, -1,237, 2562, 238, -1,2556, 239, 238, -1,2562, 237, + 2565, -1,2559, 238, 2562, -1,2565, 2564, 2562, -1,2568, 2567, 2565, -1,2564, 2565, + 2567, -1,2570, 2568, 2571, -1,2567, 2568, 2570, -1,2569, 2570, 2573, -1,2573, 2570, + 2574, -1,2570, 2566, 2567, -1,235, 2568, 2565, -1,236, 235, 2565, -1,2571, 2568, + 235, -1,234, 2571, 235, -1,233, 2574, 234, -1,2571, 234, 2574, -1,2574, 233, 2577, -1, + 2574, 2570, 2571, -1,2576, 2573, 2574, -1,237, 236, 2565, -1,2567, 2563, 2564, -1, + 2575, 2573, 2576, -1,2575, 2576, 2578, -1,176, 177, 2578, -1,2581, 175, 176, -1,2584, + 175, 2581, -1,2578, 2581, 176, -1,2582, 2581, 2578, -1,2580, 2579, 2576, -1,2579, + 2578, 2576, -1,2585, 2584, 2582, -1,2578, 2579, 2582, -1,2587, 2584, 2585, -1,2586, + 2585, 2582, -1,2581, 2582, 2584, -1,2583, 2582, 2579, -1,2584, 174, 175, -1,177, + 2575, 2578, -1,2590, 173, 174, -1,2596, 171, 172, -1,205, 170, 171, -1,2593, 172, + 173, -1,2588, 2590, 2587, -1,174, 2587, 2590, -1,2590, 2588, 2591, -1,2585, 2588, + 2587, -1,2593, 2590, 2594, -1,172, 2593, 2596, -1,171, 2596, 205, -1,2596, 2593, + 2597, -1,2593, 173, 2590, -1,205, 2596, 204, -1,2584, 2587, 174, -1,2589, 2588, 2585, -1, + 231, 2580, 2577, -1,2580, 2576, 2577, -1,2583, 2586, 2582, -1,2579, 2580, 2583, -1, + 2586, 2589, 2585, -1,229, 2586, 2583, -1,2589, 2591, 2588, -1,230, 2583, 2580, -1, + 231, 2577, 232, -1,230, 2580, 231, -1,228, 2589, 229, -1,2583, 230, 229, -1,2589, + 228, 2592, -1,2589, 2586, 229, -1,2592, 2591, 2589, -1,233, 232, 2577, -1,2595, 2594, + 2592, -1,2591, 2592, 2594, -1,2597, 2595, 2598, -1,2594, 2595, 2597, -1,2596, 2597, + 204, -1,204, 2597, 203, -1,2597, 2593, 2594, -1,226, 2595, 2592, -1,227, 226, 2592, -1, + 2598, 2595, 226, -1,225, 2598, 226, -1,202, 203, 225, -1,2598, 225, 203, -1,203, + 2597, 2598, -1,228, 227, 2592, -1,2594, 2590, 2591, -1,2574, 2577, 2576, -1,240, + 209, 210, -1,2599, 210, 211, -1,2601, 212, 213, -1,2602, 213, 214, -1,212, 2600, + 211, -1,210, 2599, 240, -1,241, 240, 2599, -1,242, 2599, 2600, -1,211, 2600, 2599, -1, + 213, 2602, 2601, -1,244, 2601, 2602, -1,245, 2602, 2603, -1,214, 2603, 2602, -1,2601, + 243, 2600, -1,212, 2601, 2600, -1,2604, 2603, 214, -1,2604, 215, 216, -1,2605, 216, + 217, -1,218, 219, 2607, -1,219, 220, 2608, -1,2606, 217, 218, -1,2609, 220, 221, -1, + 2604, 216, 2605, -1,247, 2604, 2605, -1,2610, 221, 222, -1,222, 223, 2611, -1,224, + 202, 2613, -1,2612, 223, 224, -1,2605, 217, 2606, -1,2604, 214, 215, -1,2604, 246, + 2603, -1,242, 2600, 243, -1,243, 2601, 244, -1,218, 2607, 2606, -1,2606, 2607, 249, -1, + 2607, 2608, 250, -1,219, 2608, 2607, -1,245, 244, 2602, -1,241, 2599, 242, -1,245, + 2603, 246, -1,246, 2604, 247, -1,2605, 2606, 248, -1,2607, 250, 249, -1,2606, 249, + 248, -1,247, 2605, 248, -1,251, 250, 2608, -1,221, 2610, 2609, -1,252, 2609, 2610, -1, + 253, 2610, 2611, -1,222, 2611, 2610, -1,224, 2613, 2612, -1,255, 2612, 2613, -1,256, + 2613, 258, -1,202, 258, 2613, -1,2612, 254, 2611, -1,223, 2612, 2611, -1,2609, 252, + 251, -1,2610, 253, 252, -1,2612, 255, 254, -1,258, 257, 256, -1,2613, 256, 255, -1, + 2611, 254, 253, -1,251, 2608, 2609, -1,220, 2609, 2608, -1,258, 202, 225, -1,2614, + 225, 226, -1,2616, 227, 228, -1,2617, 228, 229, -1,227, 2615, 226, -1,225, 2614, + 258, -1,257, 258, 2614, -1,259, 2614, 2615, -1,226, 2615, 2614, -1,228, 2617, 2616, -1, + 261, 2616, 2617, -1,262, 2617, 2618, -1,229, 2618, 2617, -1,2616, 260, 2615, -1,227, + 2616, 2615, -1,2619, 2618, 229, -1,2619, 230, 231, -1,2620, 231, 232, -1,233, 234, + 2622, -1,234, 235, 2623, -1,2621, 232, 233, -1,2624, 235, 236, -1,2619, 231, 2620, -1, + 264, 2619, 2620, -1,2625, 236, 237, -1,237, 238, 2626, -1,239, 209, 2628, -1,2627, + 238, 239, -1,2620, 232, 2621, -1,2619, 229, 230, -1,2619, 263, 2618, -1,259, 2615, + 260, -1,260, 2616, 261, -1,233, 2622, 2621, -1,2621, 2622, 266, -1,2622, 2623, 267, -1, + 234, 2623, 2622, -1,262, 261, 2617, -1,257, 2614, 259, -1,262, 2618, 263, -1,263, + 2619, 264, -1,2620, 2621, 265, -1,2622, 267, 266, -1,2621, 266, 265, -1,264, 2620, + 265, -1,268, 267, 2623, -1,236, 2625, 2624, -1,269, 2624, 2625, -1,270, 2625, 2626, -1, + 237, 2626, 2625, -1,239, 2628, 2627, -1,272, 2627, 2628, -1,273, 2628, 240, -1,209, + 240, 2628, -1,2627, 271, 2626, -1,238, 2627, 2626, -1,2624, 269, 268, -1,2625, 270, + 269, -1,2627, 272, 271, -1,240, 241, 273, -1,2628, 273, 272, -1,2626, 271, 270, -1, + 268, 2623, 2624, -1,235, 2624, 2623, -1,256, 257, 277, -1,2629, 256, 277, -1,255, + 256, 2632, -1,254, 255, 2632, -1,2630, 2629, 276, -1,277, 276, 2629, -1,2633, 2632, + 2630, -1,2629, 2630, 2632, -1,2632, 2633, 2635, -1,2634, 2633, 2630, -1,2632, 256, + 2629, -1,2631, 2630, 276, -1,2635, 254, 2632, -1,2641, 252, 253, -1,2647, 250, 251, -1, + 2650, 249, 250, -1,2644, 251, 252, -1,2636, 2635, 2633, -1,253, 2635, 2638, -1,253, + 2638, 2641, -1,2638, 2635, 2639, -1,2644, 2641, 2645, -1,251, 2644, 2647, -1,250, + 2647, 2650, -1,2647, 2644, 2648, -1,2644, 252, 2641, -1,2641, 2638, 2642, -1,2650, + 248, 249, -1,254, 2635, 253, -1,2650, 2647, 2648, -1,296, 2631, 275, -1,2631, 276, + 275, -1,2636, 2634, 2637, -1,2630, 2631, 2634, -1,2635, 2636, 2639, -1,2639, 2636, + 2637, -1,2633, 2634, 2636, -1,295, 2634, 2631, -1,296, 275, 274, -1,294, 2637, 295, -1, + 2631, 296, 295, -1,2637, 294, 2640, -1,2634, 295, 2637, -1,2640, 2639, 2637, -1,2643, + 2642, 2640, -1,2639, 2640, 2642, -1,2645, 2643, 2646, -1,2642, 2643, 2645, -1,2644, + 2645, 2648, -1,2648, 2645, 2649, -1,2645, 2641, 2642, -1,292, 2643, 2640, -1,293, + 292, 2640, -1,2646, 2643, 292, -1,291, 2646, 292, -1,290, 2649, 291, -1,2646, 291, + 2649, -1,2649, 290, 2652, -1,2649, 2645, 2646, -1,2651, 2648, 2649, -1,294, 293, + 2640, -1,2642, 2638, 2639, -1,2650, 2648, 2651, -1,2650, 2651, 2653, -1,247, 248, + 2653, -1,2656, 246, 247, -1,2659, 246, 2656, -1,2653, 2656, 247, -1,2657, 2656, 2653, -1, + 2655, 2654, 2651, -1,2654, 2653, 2651, -1,2660, 2659, 2657, -1,2653, 2654, 2657, -1, + 2662, 2659, 2660, -1,2661, 2660, 2657, -1,2656, 2657, 2659, -1,2658, 2657, 2654, -1, + 2659, 245, 246, -1,248, 2650, 2653, -1,2665, 244, 245, -1,2671, 242, 243, -1,278, + 241, 242, -1,2668, 243, 244, -1,2663, 2665, 2662, -1,245, 2662, 2665, -1,2665, 2663, + 2666, -1,2660, 2663, 2662, -1,2668, 2665, 2669, -1,243, 2668, 2671, -1,242, 2671, + 278, -1,2671, 2668, 2672, -1,2668, 244, 2665, -1,278, 2671, 279, -1,2659, 2662, 245, -1, + 2664, 2663, 2660, -1,288, 2655, 2652, -1,2655, 2651, 2652, -1,2658, 2661, 2657, -1, + 2654, 2655, 2658, -1,2661, 2664, 2660, -1,286, 2661, 2658, -1,2664, 2666, 2663, -1, + 287, 2658, 2655, -1,288, 2652, 289, -1,287, 2655, 288, -1,285, 2664, 286, -1,2658, + 287, 286, -1,2664, 285, 2667, -1,2664, 2661, 286, -1,2667, 2666, 2664, -1,290, 289, + 2652, -1,2670, 2669, 2667, -1,2666, 2667, 2669, -1,2672, 2670, 2673, -1,2669, 2670, + 2672, -1,2671, 2672, 279, -1,279, 2672, 280, -1,2672, 2668, 2669, -1,283, 2670, 2667, -1, + 284, 283, 2667, -1,2673, 2670, 283, -1,282, 2673, 283, -1,281, 280, 282, -1,2673, + 282, 280, -1,280, 2672, 2673, -1,285, 284, 2667, -1,2669, 2665, 2666, -1,2649, 2652, + 2651, -1,273, 241, 278, -1,2674, 273, 278, -1,272, 273, 2677, -1,271, 272, 2677, -1, + 2675, 2674, 279, -1,278, 279, 2674, -1,2678, 2677, 2675, -1,2674, 2675, 2677, -1, + 2677, 2678, 2680, -1,2679, 2678, 2675, -1,2677, 273, 2674, -1,2676, 2675, 279, -1, + 2680, 271, 2677, -1,2686, 269, 270, -1,2692, 267, 268, -1,2695, 266, 267, -1,2689, + 268, 269, -1,2681, 2680, 2678, -1,270, 2680, 2683, -1,270, 2683, 2686, -1,2683, 2680, + 2684, -1,2689, 2686, 2690, -1,268, 2689, 2692, -1,267, 2692, 2695, -1,2692, 2689, + 2693, -1,2689, 269, 2686, -1,2686, 2683, 2687, -1,2695, 265, 266, -1,271, 2680, 270, -1, + 2695, 2692, 2693, -1,311, 2676, 280, -1,2676, 279, 280, -1,2681, 2679, 2682, -1,2675, + 2676, 2679, -1,2680, 2681, 2684, -1,2684, 2681, 2682, -1,2678, 2679, 2681, -1,310, + 2679, 2676, -1,311, 280, 281, -1,309, 2682, 310, -1,2676, 311, 310, -1,2682, 309, + 2685, -1,2679, 310, 2682, -1,2685, 2684, 2682, -1,2688, 2687, 2685, -1,2684, 2685, + 2687, -1,2690, 2688, 2691, -1,2687, 2688, 2690, -1,2689, 2690, 2693, -1,2693, 2690, + 2694, -1,2690, 2686, 2687, -1,307, 2688, 2685, -1,308, 307, 2685, -1,2691, 2688, + 307, -1,306, 2691, 307, -1,305, 2694, 306, -1,2691, 306, 2694, -1,2694, 305, 2697, -1, + 2694, 2690, 2691, -1,2696, 2693, 2694, -1,309, 308, 2685, -1,2687, 2683, 2684, -1, + 2695, 2693, 2696, -1,2695, 2696, 2698, -1,264, 265, 2698, -1,2701, 263, 264, -1,2704, + 263, 2701, -1,2698, 2701, 264, -1,2702, 2701, 2698, -1,2700, 2699, 2696, -1,2699, + 2698, 2696, -1,2705, 2704, 2702, -1,2698, 2699, 2702, -1,2707, 2704, 2705, -1,2706, + 2705, 2702, -1,2701, 2702, 2704, -1,2703, 2702, 2699, -1,2704, 262, 263, -1,265, + 2695, 2698, -1,2710, 261, 262, -1,2716, 259, 260, -1,277, 257, 259, -1,2713, 260, + 261, -1,2708, 2710, 2707, -1,262, 2707, 2710, -1,2710, 2708, 2711, -1,2705, 2708, + 2707, -1,2713, 2710, 2714, -1,260, 2713, 2716, -1,259, 2716, 277, -1,2716, 2713, + 2717, -1,2713, 261, 2710, -1,277, 2716, 276, -1,2704, 2707, 262, -1,2709, 2708, 2705, -1, + 303, 2700, 2697, -1,2700, 2696, 2697, -1,2703, 2706, 2702, -1,2699, 2700, 2703, -1, + 2706, 2709, 2705, -1,301, 2706, 2703, -1,2709, 2711, 2708, -1,302, 2703, 2700, -1, + 303, 2697, 304, -1,302, 2700, 303, -1,300, 2709, 301, -1,2703, 302, 301, -1,2709, + 300, 2712, -1,2709, 2706, 301, -1,2712, 2711, 2709, -1,305, 304, 2697, -1,2715, 2714, + 2712, -1,2711, 2712, 2714, -1,2717, 2715, 2718, -1,2714, 2715, 2717, -1,2716, 2717, + 276, -1,276, 2717, 275, -1,2717, 2713, 2714, -1,298, 2715, 2712, -1,299, 298, 2712, -1, + 2718, 2715, 298, -1,297, 2718, 298, -1,274, 275, 297, -1,2718, 297, 275, -1,275, + 2717, 2718, -1,300, 299, 2712, -1,2714, 2710, 2711, -1,2694, 2697, 2696, -1,314, + 295, 296, -1,295, 314, 315, -1,315, 294, 295, -1,294, 315, 316, -1,312, 274, 297, -1, + 274, 312, 296, -1,313, 296, 312, -1,296, 313, 314, -1,318, 291, 317, -1,291, 318, + 290, -1,319, 290, 318, -1,290, 319, 320, -1,316, 293, 294, -1,293, 316, 292, -1,317, + 292, 316, -1,292, 317, 291, -1,343, 297, 342, -1,297, 343, 312, -1,342, 298, 341, -1, + 298, 342, 297, -1,341, 299, 340, -1,299, 341, 298, -1,340, 300, 301, -1,300, 340, + 299, -1,339, 301, 302, -1,301, 339, 340, -1,338, 302, 303, -1,302, 338, 339, -1,337, + 303, 336, -1,303, 337, 338, -1,336, 304, 305, -1,304, 336, 303, -1,289, 320, 288, -1, + 320, 289, 290, -1,288, 321, 322, -1,321, 288, 320, -1,287, 322, 323, -1,322, 287, + 288, -1,286, 323, 324, -1,323, 286, 287, -1,285, 324, 284, -1,324, 285, 286, -1,284, + 325, 283, -1,325, 284, 324, -1,283, 326, 282, -1,326, 283, 325, -1,282, 327, 328, -1, + 327, 282, 326, -1,307, 333, 306, -1,333, 307, 332, -1,308, 332, 307, -1,332, 308, + 309, -1,305, 335, 336, -1,335, 305, 334, -1,306, 334, 305, -1,334, 306, 333, -1,311, + 329, 330, -1,329, 311, 328, -1,281, 328, 311, -1,328, 281, 282, -1,309, 331, 332, -1, + 331, 309, 310, -1,310, 330, 331, -1,330, 310, 311, -1,344, 328, 327, -1,2719, 327, + 326, -1,2721, 325, 324, -1,2722, 324, 323, -1,325, 2720, 326, -1,327, 2719, 344, -1, + 345, 344, 2719, -1,346, 2719, 2720, -1,326, 2720, 2719, -1,324, 2722, 2721, -1,348, + 2721, 2722, -1,349, 2722, 2723, -1,323, 2723, 2722, -1,2721, 347, 2720, -1,325, 2721, + 2720, -1,2724, 2723, 323, -1,2724, 322, 321, -1,2725, 321, 320, -1,319, 318, 2727, -1, + 318, 317, 2728, -1,2726, 320, 319, -1,2729, 317, 316, -1,2724, 321, 2725, -1,351, + 2724, 2725, -1,2730, 316, 315, -1,315, 314, 2731, -1,313, 312, 2733, -1,2732, 314, + 313, -1,2725, 320, 2726, -1,2724, 323, 322, -1,2724, 350, 2723, -1,346, 2720, 347, -1, + 347, 2721, 348, -1,319, 2727, 2726, -1,2726, 2727, 353, -1,2727, 2728, 354, -1,318, + 2728, 2727, -1,349, 348, 2722, -1,345, 2719, 346, -1,349, 2723, 350, -1,350, 2724, + 351, -1,2725, 2726, 352, -1,2727, 354, 353, -1,2726, 353, 352, -1,351, 2725, 352, -1, + 355, 354, 2728, -1,316, 2730, 2729, -1,356, 2729, 2730, -1,357, 2730, 2731, -1,315, + 2731, 2730, -1,313, 2733, 2732, -1,359, 2732, 2733, -1,360, 2733, 362, -1,312, 362, + 2733, -1,2732, 358, 2731, -1,314, 2732, 2731, -1,2729, 356, 355, -1,2730, 357, 356, -1, + 2732, 359, 358, -1,362, 361, 360, -1,2733, 360, 359, -1,2731, 358, 357, -1,355, 2728, + 2729, -1,317, 2729, 2728, -1,362, 312, 343, -1,2734, 343, 342, -1,2736, 341, 340, -1, + 2737, 340, 339, -1,341, 2735, 342, -1,343, 2734, 362, -1,361, 362, 2734, -1,363, + 2734, 2735, -1,342, 2735, 2734, -1,340, 2737, 2736, -1,365, 2736, 2737, -1,366, 2737, + 2738, -1,339, 2738, 2737, -1,2736, 364, 2735, -1,341, 2736, 2735, -1,2739, 2738, + 339, -1,2739, 338, 337, -1,2740, 337, 336, -1,335, 334, 2742, -1,334, 333, 2743, -1, + 2741, 336, 335, -1,2744, 333, 332, -1,2739, 337, 2740, -1,368, 2739, 2740, -1,2745, + 332, 331, -1,331, 330, 2746, -1,329, 328, 2748, -1,2747, 330, 329, -1,2740, 336, + 2741, -1,2739, 339, 338, -1,2739, 367, 2738, -1,363, 2735, 364, -1,364, 2736, 365, -1, + 335, 2742, 2741, -1,2741, 2742, 370, -1,2742, 2743, 371, -1,334, 2743, 2742, -1,366, + 365, 2737, -1,361, 2734, 363, -1,366, 2738, 367, -1,367, 2739, 368, -1,2740, 2741, + 369, -1,2742, 371, 370, -1,2741, 370, 369, -1,368, 2740, 369, -1,372, 371, 2743, -1, + 332, 2745, 2744, -1,373, 2744, 2745, -1,374, 2745, 2746, -1,331, 2746, 2745, -1,329, + 2748, 2747, -1,376, 2747, 2748, -1,377, 2748, 344, -1,328, 344, 2748, -1,2747, 375, + 2746, -1,330, 2747, 2746, -1,2744, 373, 372, -1,2745, 374, 373, -1,2747, 376, 375, -1, + 344, 345, 377, -1,2748, 377, 376, -1,2746, 375, 374, -1,372, 2743, 2744, -1,333, + 2744, 2743, -1,384, 345, 346, -1,2749, 346, 347, -1,2751, 348, 349, -1,2753, 350, + 351, -1,350, 2752, 349, -1,348, 2750, 347, -1,346, 2749, 384, -1,385, 384, 2749, -1, + 386, 2749, 2750, -1,347, 2750, 2749, -1,349, 2752, 2751, -1,388, 2751, 2752, -1,351, + 2754, 2753, -1,390, 2753, 2754, -1,2753, 389, 2752, -1,350, 2753, 2752, -1,2751, + 387, 2750, -1,348, 2751, 2750, -1,2755, 2754, 351, -1,2755, 352, 353, -1,2756, 353, + 354, -1,355, 356, 401, -1,357, 358, 2760, -1,357, 2759, 356, -1,398, 354, 355, -1, + 2756, 354, 2757, -1,392, 2755, 2756, -1,356, 2759, 401, -1,354, 397, 2757, -1,2757, + 394, 2756, -1,355, 2758, 398, -1,359, 360, 2762, -1,2759, 357, 2760, -1,361, 2763, + 360, -1,2761, 358, 359, -1,2758, 355, 400, -1,2755, 353, 2756, -1,2755, 351, 352, -1, + 2755, 391, 2754, -1,2750, 387, 386, -1,394, 2757, 395, -1,2751, 388, 387, -1,397, + 354, 398, -1,2757, 396, 395, -1,396, 2757, 397, -1,385, 2749, 386, -1,388, 2752, + 389, -1,389, 2753, 390, -1,391, 2755, 392, -1,2756, 394, 393, -1,2756, 393, 392, -1, + 391, 390, 2754, -1,355, 401, 400, -1,400, 399, 2758, -1,379, 2760, 2761, -1,359, + 2762, 2761, -1,2761, 2762, 380, -1,361, 383, 2763, -1,2763, 383, 382, -1,381, 2762, + 2763, -1,360, 2763, 2762, -1,2759, 402, 401, -1,358, 2761, 2760, -1,378, 403, 2759, -1, + 2760, 379, 378, -1,378, 2759, 2760, -1,379, 2761, 380, -1,381, 2763, 382, -1,380, + 2762, 381, -1,403, 402, 2759, -1,398, 2758, 399, -1,383, 361, 363, -1,2764, 363, + 364, -1,2766, 365, 366, -1,2767, 366, 367, -1,365, 2765, 364, -1,363, 2764, 383, -1, + 382, 383, 2764, -1,404, 2764, 2765, -1,364, 2765, 2764, -1,366, 2767, 2766, -1,406, + 2766, 2767, -1,407, 2767, 2768, -1,367, 2768, 2767, -1,2766, 405, 2765, -1,365, 2766, + 2765, -1,2769, 2768, 367, -1,2769, 368, 369, -1,2770, 369, 370, -1,371, 372, 2772, -1, + 372, 373, 2773, -1,2771, 370, 371, -1,2774, 373, 374, -1,2769, 369, 2770, -1,409, + 2769, 2770, -1,2775, 374, 375, -1,375, 376, 2776, -1,377, 345, 2778, -1,2777, 376, + 377, -1,2770, 370, 2771, -1,2769, 367, 368, -1,2769, 408, 2768, -1,404, 2765, 405, -1, + 405, 2766, 406, -1,371, 2772, 2771, -1,2771, 2772, 411, -1,2772, 2773, 412, -1,372, + 2773, 2772, -1,407, 406, 2767, -1,382, 2764, 404, -1,407, 2768, 408, -1,408, 2769, + 409, -1,2770, 2771, 410, -1,2772, 412, 411, -1,2771, 411, 410, -1,409, 2770, 410, -1, + 413, 412, 2773, -1,374, 2775, 2774, -1,414, 2774, 2775, -1,415, 2775, 2776, -1,375, + 2776, 2775, -1,377, 2778, 2777, -1,417, 2777, 2778, -1,418, 2778, 384, -1,345, 384, + 2778, -1,2777, 416, 2776, -1,376, 2777, 2776, -1,2774, 414, 413, -1,2775, 415, 414, -1, + 2777, 417, 416, -1,384, 385, 418, -1,2778, 418, 417, -1,2776, 416, 415, -1,413, 2773, + 2774, -1,373, 2774, 2773, -1,419, 385, 386, -1,2779, 386, 387, -1,386, 2779, 419, -1, + 421, 419, 2779, -1,422, 2779, 2780, -1,387, 2780, 2779, -1,388, 2780, 387, -1,2781, + 388, 389, -1,2782, 389, 390, -1,2785, 392, 429, -1,392, 393, 429, -1,391, 392, 2784, -1, + 391, 2783, 390, -1,388, 2781, 2780, -1,424, 2781, 2782, -1,420, 419, 421, -1,422, + 421, 2779, -1,389, 2782, 2781, -1,422, 2780, 423, -1,2781, 424, 423, -1,2780, 2781, + 423, -1,425, 424, 2782, -1,391, 2784, 2783, -1,426, 2783, 2784, -1,427, 2784, 2785, -1, + 392, 2785, 2784, -1,2783, 426, 425, -1,2785, 428, 427, -1,2784, 427, 426, -1,425, + 2782, 2783, -1,429, 428, 2785, -1,390, 2783, 2782, -1,450, 378, 379, -1,2786, 379, + 380, -1,2788, 381, 382, -1,2790, 404, 405, -1,404, 2789, 382, -1,381, 2787, 380, -1, + 380, 2787, 2786, -1,430, 450, 2786, -1,381, 2788, 2787, -1,432, 2787, 2788, -1,2787, + 431, 2786, -1,382, 2789, 2788, -1,405, 2791, 2790, -1,2790, 2789, 404, -1,405, 406, + 2791, -1,435, 2790, 2791, -1,2790, 434, 2789, -1,2792, 2791, 406, -1,2789, 433, 2788, -1, + 450, 379, 2786, -1,2793, 407, 408, -1,409, 410, 2795, -1,409, 2794, 408, -1,411, + 412, 2797, -1,413, 414, 2799, -1,2798, 412, 413, -1,2796, 410, 411, -1,408, 2794, + 2793, -1,2792, 407, 2793, -1,415, 2800, 414, -1,438, 2793, 2794, -1,2793, 437, 2792, -1, + 2801, 415, 416, -1,416, 417, 2802, -1,418, 385, 2804, -1,2803, 417, 418, -1,2795, + 2794, 409, -1,2792, 406, 407, -1,2792, 436, 2791, -1,431, 2787, 432, -1,433, 2789, + 434, -1,432, 2788, 433, -1,410, 2796, 2795, -1,2795, 2796, 440, -1,435, 2791, 436, -1, + 2797, 441, 2796, -1,2790, 435, 434, -1,411, 2797, 2796, -1,430, 2786, 431, -1,436, + 2792, 437, -1,438, 2794, 439, -1,437, 2793, 438, -1,2795, 440, 439, -1,2797, 442, + 441, -1,2796, 441, 440, -1,2794, 2795, 439, -1,443, 442, 2797, -1,413, 2799, 2798, -1, + 443, 2798, 2799, -1,415, 2801, 2800, -1,445, 2800, 2801, -1,2800, 444, 2799, -1,414, + 2800, 2799, -1,417, 2803, 2802, -1,447, 2802, 2803, -1,385, 419, 2804, -1,449, 2804, + 419, -1,2804, 448, 2803, -1,418, 2804, 2803, -1,2802, 446, 2801, -1,416, 2802, 2801, -1, + 2799, 444, 443, -1,2801, 446, 445, -1,2800, 445, 444, -1,2803, 448, 447, -1,419, + 420, 449, -1,2804, 449, 448, -1,2802, 447, 446, -1,443, 2797, 2798, -1,412, 2798, + 2797, -1,33, 32, 451, -1,34, 33, 2805, -1,451, 2805, 33, -1,2805, 451, 452, -1,2806, + 2805, 453, -1,2805, 2806, 34, -1,34, 2806, 2807, -1,36, 35, 2807, -1,2808, 37, 36, -1, + 39, 38, 2810, -1,37, 2809, 38, -1,2811, 40, 39, -1,36, 2807, 2808, -1,35, 34, 2807, -1, + 2806, 454, 2807, -1,2809, 2808, 456, -1,453, 2805, 452, -1,2806, 453, 454, -1,2808, + 2809, 37, -1,455, 2807, 454, -1,455, 456, 2808, -1,455, 2808, 2807, -1,2809, 456, + 457, -1,2810, 2811, 39, -1,2811, 2810, 458, -1,461, 2811, 459, -1,2811, 461, 40, -1, + 457, 458, 2810, -1,459, 460, 461, -1,458, 459, 2811, -1,2810, 2809, 457, -1,2809, + 2810, 38, -1,41, 40, 461, -1,42, 41, 2812, -1,461, 2812, 41, -1,2812, 461, 460, -1, + 2813, 2812, 462, -1,2812, 2813, 42, -1,42, 2813, 2814, -1,44, 43, 2814, -1,2815, + 45, 44, -1,47, 46, 2817, -1,45, 2816, 46, -1,2818, 32, 47, -1,44, 2814, 2815, -1, + 43, 42, 2814, -1,2813, 463, 2814, -1,2816, 2815, 465, -1,462, 2812, 460, -1,2813, + 462, 463, -1,2815, 2816, 45, -1,464, 2814, 463, -1,464, 465, 2815, -1,464, 2815, + 2814, -1,2816, 465, 466, -1,2817, 2818, 47, -1,2818, 2817, 467, -1,451, 2818, 468, -1, + 2818, 451, 32, -1,466, 467, 2817, -1,468, 452, 451, -1,467, 468, 2818, -1,2817, 2816, + 466, -1,2816, 2817, 46, -1,453, 452, 469, -1,453, 2819, 454, -1,2819, 453, 469, -1, + 2819, 469, 470, -1,455, 454, 2820, -1,2821, 456, 455, -1,2822, 457, 456, -1,2824, + 459, 458, -1,2825, 460, 459, -1,458, 457, 2823, -1,2819, 2820, 454, -1,2820, 2821, + 455, -1,2821, 2820, 470, -1,2822, 2821, 470, -1,2821, 2822, 456, -1,470, 2820, 2819, -1, + 2822, 470, 2823, -1,2823, 2824, 458, -1,2824, 2823, 470, -1,2825, 2824, 470, -1,2824, + 2825, 459, -1,2825, 470, 471, -1,2825, 471, 460, -1,2822, 2823, 457, -1,462, 460, + 471, -1,462, 2826, 463, -1,2826, 462, 471, -1,2826, 471, 470, -1,464, 463, 2827, -1, + 2828, 465, 464, -1,2829, 466, 465, -1,2831, 468, 467, -1,2832, 452, 468, -1,467, + 466, 2830, -1,2826, 2827, 463, -1,2827, 2828, 464, -1,2828, 2827, 470, -1,2829, 2828, + 470, -1,2828, 2829, 465, -1,470, 2827, 2826, -1,2829, 470, 2830, -1,2830, 2831, 467, -1, + 2831, 2830, 470, -1,2832, 2831, 470, -1,2831, 2832, 468, -1,2832, 470, 469, -1,2832, + 469, 452, -1,2829, 2830, 466, -1,49, 48, 472, -1,50, 49, 2833, -1,472, 2833, 49, -1, + 2833, 472, 473, -1,2834, 2833, 474, -1,2833, 2834, 50, -1,50, 2834, 2835, -1,52, + 51, 2835, -1,2836, 53, 52, -1,55, 54, 2838, -1,53, 2837, 54, -1,2839, 56, 55, -1, + 52, 2835, 2836, -1,51, 50, 2835, -1,2834, 475, 2835, -1,2837, 2836, 477, -1,474, + 2833, 473, -1,2834, 474, 475, -1,2836, 2837, 53, -1,476, 2835, 475, -1,476, 477, + 2836, -1,476, 2836, 2835, -1,2837, 477, 478, -1,2838, 2839, 55, -1,2839, 2838, 479, -1, + 482, 2839, 480, -1,2839, 482, 56, -1,478, 479, 2838, -1,480, 481, 482, -1,479, 480, + 2839, -1,2838, 2837, 478, -1,2837, 2838, 54, -1,57, 56, 482, -1,58, 57, 2840, -1, + 482, 2840, 57, -1,2840, 482, 481, -1,2841, 2840, 483, -1,2840, 2841, 58, -1,58, 2841, + 2842, -1,60, 59, 2842, -1,2843, 61, 60, -1,63, 62, 2845, -1,61, 2844, 62, -1,2846, + 48, 63, -1,60, 2842, 2843, -1,59, 58, 2842, -1,2841, 484, 2842, -1,2844, 2843, 486, -1, + 483, 2840, 481, -1,2841, 483, 484, -1,2843, 2844, 61, -1,485, 2842, 484, -1,485, + 486, 2843, -1,485, 2843, 2842, -1,2844, 486, 487, -1,2845, 2846, 63, -1,2846, 2845, + 488, -1,472, 2846, 489, -1,2846, 472, 48, -1,487, 488, 2845, -1,489, 473, 472, -1, + 488, 489, 2846, -1,2845, 2844, 487, -1,2844, 2845, 62, -1,474, 473, 490, -1,474, + 2847, 475, -1,2847, 474, 490, -1,2847, 490, 491, -1,476, 475, 2848, -1,2849, 477, + 476, -1,2850, 478, 477, -1,2852, 480, 479, -1,2853, 481, 480, -1,479, 478, 2851, -1, + 2847, 2848, 475, -1,2848, 2849, 476, -1,2849, 2848, 491, -1,2850, 2849, 491, -1,2849, + 2850, 477, -1,491, 2848, 2847, -1,2850, 491, 2851, -1,2851, 2852, 479, -1,2852, 2851, + 491, -1,2853, 2852, 491, -1,2852, 2853, 480, -1,2853, 491, 492, -1,2853, 492, 481, -1, + 2850, 2851, 478, -1,483, 481, 492, -1,483, 2854, 484, -1,2854, 483, 492, -1,2854, + 492, 491, -1,485, 484, 2855, -1,2856, 486, 485, -1,2857, 487, 486, -1,2859, 489, + 488, -1,2860, 473, 489, -1,488, 487, 2858, -1,2854, 2855, 484, -1,2855, 2856, 485, -1, + 2856, 2855, 491, -1,2857, 2856, 491, -1,2856, 2857, 486, -1,491, 2855, 2854, -1,2857, + 491, 2858, -1,2858, 2859, 488, -1,2859, 2858, 491, -1,2860, 2859, 491, -1,2859, 2860, + 489, -1,2860, 491, 490, -1,2860, 490, 473, -1,2857, 2858, 487, -1,515, 514, 555, -1, + 554, 516, 515, -1,552, 516, 553, -1,556, 514, 513, -1,512, 511, 556, -1,556, 513, + 512, -1,510, 556, 511, -1,516, 554, 553, -1,517, 551, 550, -1,550, 549, 517, -1,548, + 517, 549, -1,551, 516, 552, -1,514, 556, 555, -1,515, 555, 554, -1,556, 510, 541, -1, + 517, 516, 551, -1,541, 510, 509, -1,534, 506, 505, -1,507, 506, 534, -1,534, 508, + 507, -1,504, 503, 535, -1,503, 502, 536, -1,505, 504, 534, -1,533, 508, 534, -1,502, + 537, 536, -1,504, 535, 534, -1,535, 503, 536, -1,502, 501, 539, -1,539, 501, 540, -1, + 540, 501, 525, -1,538, 502, 539, -1,502, 538, 537, -1,509, 508, 533, -1,547, 517, + 548, -1,518, 546, 545, -1,546, 518, 547, -1,524, 542, 541, -1,519, 544, 543, -1,520, + 543, 542, -1,544, 518, 545, -1,543, 520, 519, -1,520, 542, 521, -1,521, 542, 522, -1, + 542, 524, 523, -1,493, 524, 541, -1,542, 523, 522, -1,518, 544, 519, -1,547, 518, + 517, -1,533, 493, 541, -1,494, 533, 532, -1,499, 531, 530, -1,531, 498, 532, -1,526, + 501, 527, -1,500, 528, 527, -1,501, 500, 527, -1,532, 497, 496, -1,532, 496, 495, -1, + 497, 532, 498, -1,528, 500, 529, -1,500, 530, 529, -1,499, 530, 500, -1,531, 499, + 498, -1,494, 532, 495, -1,494, 493, 533, -1,525, 501, 526, -1,541, 509, 533, -1,557, + 493, 494, -1,2861, 494, 495, -1,2863, 496, 497, -1,2864, 497, 498, -1,496, 2862, + 495, -1,494, 2861, 557, -1,558, 557, 2861, -1,559, 2861, 2862, -1,495, 2862, 2861, -1, + 497, 2864, 2863, -1,561, 2863, 2864, -1,562, 2864, 2865, -1,498, 2865, 2864, -1,2863, + 560, 2862, -1,496, 2863, 2862, -1,2866, 2865, 498, -1,2866, 499, 500, -1,2867, 500, + 501, -1,502, 503, 2869, -1,503, 504, 2870, -1,2868, 501, 502, -1,2871, 504, 505, -1, + 2866, 500, 2867, -1,564, 2866, 2867, -1,2872, 505, 506, -1,506, 507, 2873, -1,508, + 509, 2875, -1,2874, 507, 508, -1,2867, 501, 2868, -1,2866, 498, 499, -1,2866, 563, + 2865, -1,559, 2862, 560, -1,560, 2863, 561, -1,502, 2869, 2868, -1,2868, 2869, 566, -1, + 2869, 2870, 567, -1,503, 2870, 2869, -1,562, 561, 2864, -1,558, 2861, 559, -1,562, + 2865, 563, -1,563, 2866, 564, -1,2867, 2868, 565, -1,2869, 567, 566, -1,2868, 566, + 565, -1,564, 2867, 565, -1,568, 567, 2870, -1,505, 2872, 2871, -1,569, 2871, 2872, -1, + 570, 2872, 2873, -1,506, 2873, 2872, -1,508, 2875, 2874, -1,572, 2874, 2875, -1,573, + 2875, 575, -1,509, 575, 2875, -1,2874, 571, 2873, -1,507, 2874, 2873, -1,2871, 569, + 568, -1,2872, 570, 569, -1,2874, 572, 571, -1,575, 574, 573, -1,2875, 573, 572, -1, + 2873, 571, 570, -1,568, 2870, 2871, -1,504, 2871, 2870, -1,575, 509, 510, -1,2876, + 510, 511, -1,2878, 512, 513, -1,2879, 513, 514, -1,512, 2877, 511, -1,510, 2876, + 575, -1,574, 575, 2876, -1,576, 2876, 2877, -1,511, 2877, 2876, -1,513, 2879, 2878, -1, + 578, 2878, 2879, -1,579, 2879, 2880, -1,514, 2880, 2879, -1,2878, 577, 2877, -1,512, + 2878, 2877, -1,2881, 2880, 514, -1,2881, 515, 516, -1,2882, 516, 517, -1,518, 519, + 2884, -1,519, 520, 2885, -1,2883, 517, 518, -1,2886, 520, 521, -1,2881, 516, 2882, -1, + 581, 2881, 2882, -1,2887, 521, 522, -1,522, 523, 2888, -1,524, 493, 2890, -1,2889, + 523, 524, -1,2882, 517, 2883, -1,2881, 514, 515, -1,2881, 580, 2880, -1,576, 2877, + 577, -1,577, 2878, 578, -1,518, 2884, 2883, -1,2883, 2884, 583, -1,2884, 2885, 584, -1, + 519, 2885, 2884, -1,579, 578, 2879, -1,574, 2876, 576, -1,579, 2880, 580, -1,580, + 2881, 581, -1,2882, 2883, 582, -1,2884, 584, 583, -1,2883, 583, 582, -1,581, 2882, + 582, -1,585, 584, 2885, -1,521, 2887, 2886, -1,586, 2886, 2887, -1,587, 2887, 2888, -1, + 522, 2888, 2887, -1,524, 2890, 2889, -1,589, 2889, 2890, -1,590, 2890, 557, -1,493, + 557, 2890, -1,2889, 588, 2888, -1,523, 2889, 2888, -1,2886, 586, 585, -1,2887, 587, + 586, -1,2889, 589, 588, -1,557, 558, 590, -1,2890, 590, 589, -1,2888, 588, 587, -1, + 585, 2885, 2886, -1,520, 2886, 2885, -1,591, 558, 559, -1,2891, 559, 560, -1,2893, + 561, 562, -1,2894, 562, 563, -1,561, 2892, 560, -1,559, 2891, 591, -1,592, 591, 2891, -1, + 593, 2891, 2892, -1,560, 2892, 2891, -1,562, 2894, 2893, -1,595, 2893, 2894, -1,596, + 2894, 2895, -1,563, 2895, 2894, -1,2893, 594, 2892, -1,561, 2893, 2892, -1,2896, + 2895, 563, -1,2896, 564, 565, -1,2897, 565, 566, -1,567, 568, 2899, -1,568, 569, + 2900, -1,2898, 566, 567, -1,2901, 569, 570, -1,2896, 565, 2897, -1,598, 2896, 2897, -1, + 2902, 570, 571, -1,571, 572, 2903, -1,573, 574, 2905, -1,2904, 572, 573, -1,2897, + 566, 2898, -1,2896, 563, 564, -1,2896, 597, 2895, -1,593, 2892, 594, -1,594, 2893, + 595, -1,567, 2899, 2898, -1,2898, 2899, 600, -1,2899, 2900, 601, -1,568, 2900, 2899, -1, + 596, 595, 2894, -1,592, 2891, 593, -1,596, 2895, 597, -1,597, 2896, 598, -1,2897, + 2898, 599, -1,2899, 601, 600, -1,2898, 600, 599, -1,598, 2897, 599, -1,602, 601, + 2900, -1,570, 2902, 2901, -1,603, 2901, 2902, -1,604, 2902, 2903, -1,571, 2903, 2902, -1, + 573, 2905, 2904, -1,606, 2904, 2905, -1,607, 2905, 609, -1,574, 609, 2905, -1,2904, + 605, 2903, -1,572, 2904, 2903, -1,2901, 603, 602, -1,2902, 604, 603, -1,2904, 606, + 605, -1,609, 608, 607, -1,2905, 607, 606, -1,2903, 605, 604, -1,602, 2900, 2901, -1, + 569, 2901, 2900, -1,609, 574, 576, -1,2906, 576, 577, -1,2908, 578, 579, -1,2909, + 579, 580, -1,578, 2907, 577, -1,576, 2906, 609, -1,608, 609, 2906, -1,610, 2906, + 2907, -1,577, 2907, 2906, -1,579, 2909, 2908, -1,612, 2908, 2909, -1,613, 2909, 2910, -1, + 580, 2910, 2909, -1,2908, 611, 2907, -1,578, 2908, 2907, -1,2911, 2910, 580, -1,2911, + 581, 582, -1,2912, 582, 583, -1,584, 585, 2914, -1,585, 586, 2915, -1,2913, 583, + 584, -1,2916, 586, 587, -1,2911, 582, 2912, -1,615, 2911, 2912, -1,2917, 587, 588, -1, + 588, 589, 2918, -1,590, 558, 2920, -1,2919, 589, 590, -1,2912, 583, 2913, -1,2911, + 580, 581, -1,2911, 614, 2910, -1,610, 2907, 611, -1,611, 2908, 612, -1,584, 2914, + 2913, -1,2913, 2914, 617, -1,2914, 2915, 618, -1,585, 2915, 2914, -1,613, 612, 2909, -1, + 608, 2906, 610, -1,613, 2910, 614, -1,614, 2911, 615, -1,2912, 2913, 616, -1,2914, + 618, 617, -1,2913, 617, 616, -1,615, 2912, 616, -1,619, 618, 2915, -1,587, 2917, + 2916, -1,620, 2916, 2917, -1,621, 2917, 2918, -1,588, 2918, 2917, -1,590, 2920, 2919, -1, + 623, 2919, 2920, -1,624, 2920, 591, -1,558, 591, 2920, -1,2919, 622, 2918, -1,589, + 2919, 2918, -1,2916, 620, 619, -1,2917, 621, 620, -1,2919, 623, 622, -1,591, 592, + 624, -1,2920, 624, 623, -1,2918, 622, 621, -1,619, 2915, 2916, -1,586, 2916, 2915, -1, + 625, 592, 593, -1,2921, 593, 594, -1,2923, 595, 596, -1,2924, 596, 597, -1,595, 2922, + 594, -1,593, 2921, 625, -1,626, 625, 2921, -1,627, 2921, 2922, -1,594, 2922, 2921, -1, + 596, 2924, 2923, -1,629, 2923, 2924, -1,630, 2924, 2925, -1,597, 2925, 2924, -1,2923, + 628, 2922, -1,595, 2923, 2922, -1,2926, 2925, 597, -1,2926, 598, 599, -1,2927, 599, + 600, -1,601, 602, 2929, -1,602, 603, 2930, -1,2928, 600, 601, -1,2931, 603, 604, -1, + 2926, 599, 2927, -1,632, 2926, 2927, -1,2932, 604, 605, -1,605, 606, 2933, -1,607, + 608, 2935, -1,2934, 606, 607, -1,2927, 600, 2928, -1,2926, 597, 598, -1,2926, 631, + 2925, -1,627, 2922, 628, -1,628, 2923, 629, -1,601, 2929, 2928, -1,2928, 2929, 634, -1, + 2929, 2930, 635, -1,602, 2930, 2929, -1,630, 629, 2924, -1,626, 2921, 627, -1,630, + 2925, 631, -1,631, 2926, 632, -1,2927, 2928, 633, -1,2929, 635, 634, -1,2928, 634, + 633, -1,632, 2927, 633, -1,636, 635, 2930, -1,604, 2932, 2931, -1,637, 2931, 2932, -1, + 638, 2932, 2933, -1,605, 2933, 2932, -1,607, 2935, 2934, -1,640, 2934, 2935, -1,641, + 2935, 643, -1,608, 643, 2935, -1,2934, 639, 2933, -1,606, 2934, 2933, -1,2931, 637, + 636, -1,2932, 638, 637, -1,2934, 640, 639, -1,643, 642, 641, -1,2935, 641, 640, -1, + 2933, 639, 638, -1,636, 2930, 2931, -1,603, 2931, 2930, -1,643, 608, 610, -1,2936, + 610, 611, -1,2938, 612, 613, -1,2939, 613, 614, -1,612, 2937, 611, -1,610, 2936, + 643, -1,642, 643, 2936, -1,644, 2936, 2937, -1,611, 2937, 2936, -1,613, 2939, 2938, -1, + 646, 2938, 2939, -1,647, 2939, 2940, -1,614, 2940, 2939, -1,2938, 645, 2937, -1,612, + 2938, 2937, -1,2941, 2940, 614, -1,2941, 615, 616, -1,2942, 616, 617, -1,618, 619, + 2944, -1,619, 620, 2945, -1,2943, 617, 618, -1,2946, 620, 621, -1,2941, 616, 2942, -1, + 649, 2941, 2942, -1,2947, 621, 622, -1,622, 623, 2948, -1,624, 592, 2950, -1,2949, + 623, 624, -1,2942, 617, 2943, -1,2941, 614, 615, -1,2941, 648, 2940, -1,644, 2937, + 645, -1,645, 2938, 646, -1,618, 2944, 2943, -1,2943, 2944, 651, -1,2944, 2945, 652, -1, + 619, 2945, 2944, -1,647, 646, 2939, -1,642, 2936, 644, -1,647, 2940, 648, -1,648, + 2941, 649, -1,2942, 2943, 650, -1,2944, 652, 651, -1,2943, 651, 650, -1,649, 2942, + 650, -1,653, 652, 2945, -1,621, 2947, 2946, -1,654, 2946, 2947, -1,655, 2947, 2948, -1, + 622, 2948, 2947, -1,624, 2950, 2949, -1,657, 2949, 2950, -1,658, 2950, 625, -1,592, + 625, 2950, -1,2949, 656, 2948, -1,623, 2949, 2948, -1,2946, 654, 653, -1,2947, 655, + 654, -1,2949, 657, 656, -1,625, 626, 658, -1,2950, 658, 657, -1,2948, 656, 655, -1, + 653, 2945, 2946, -1,620, 2946, 2945, -1,645, 673, 674, -1,673, 645, 646, -1,646, + 672, 673, -1,672, 646, 647, -1,642, 644, 675, -1,674, 675, 644, -1,644, 645, 674, -1, + 642, 675, 641, -1,649, 669, 648, -1,669, 649, 668, -1,650, 668, 649, -1,668, 650, + 667, -1,647, 671, 672, -1,671, 647, 670, -1,648, 670, 647, -1,670, 648, 669, -1,641, + 676, 640, -1,676, 641, 675, -1,640, 677, 639, -1,677, 640, 676, -1,639, 678, 638, -1, + 678, 639, 677, -1,638, 679, 680, -1,679, 638, 678, -1,637, 680, 681, -1,680, 637, + 638, -1,636, 681, 682, -1,681, 636, 637, -1,635, 682, 683, -1,682, 635, 636, -1,634, + 683, 633, -1,683, 634, 635, -1,667, 651, 652, -1,651, 667, 650, -1,666, 652, 653, -1, + 652, 666, 667, -1,665, 653, 654, -1,653, 665, 666, -1,664, 654, 655, -1,654, 664, + 665, -1,663, 655, 662, -1,655, 663, 664, -1,662, 656, 661, -1,656, 662, 655, -1,661, + 657, 660, -1,657, 661, 656, -1,660, 658, 659, -1,658, 660, 657, -1,686, 631, 685, -1, + 631, 686, 630, -1,687, 630, 686, -1,630, 687, 688, -1,684, 633, 683, -1,633, 684, + 632, -1,685, 632, 684, -1,632, 685, 631, -1,690, 659, 627, -1,626, 627, 659, -1,659, + 658, 626, -1,690, 627, 628, -1,688, 629, 630, -1,629, 688, 689, -1,689, 628, 629, -1, + 628, 689, 690, -1,676, 675, 694, -1,2951, 676, 694, -1,677, 676, 2954, -1,678, 677, + 2954, -1,2952, 2951, 693, -1,694, 693, 2951, -1,2955, 2954, 2952, -1,2951, 2952, + 2954, -1,2954, 2955, 2957, -1,2956, 2955, 2952, -1,2954, 676, 2951, -1,2953, 2952, + 693, -1,2957, 678, 2954, -1,2963, 680, 679, -1,2969, 682, 681, -1,2972, 683, 682, -1, + 2966, 681, 680, -1,2958, 2957, 2955, -1,679, 2957, 2960, -1,679, 2960, 2963, -1,2960, + 2957, 2961, -1,2966, 2963, 2967, -1,681, 2966, 2969, -1,682, 2969, 2972, -1,2969, + 2966, 2970, -1,2966, 680, 2963, -1,2963, 2960, 2964, -1,2972, 684, 683, -1,678, 2957, + 679, -1,2972, 2969, 2970, -1,713, 2953, 692, -1,2953, 693, 692, -1,2958, 2956, 2959, -1, + 2952, 2953, 2956, -1,2957, 2958, 2961, -1,2961, 2958, 2959, -1,2955, 2956, 2958, -1, + 712, 2956, 2953, -1,713, 692, 691, -1,711, 2959, 712, -1,2953, 713, 712, -1,2959, + 711, 2962, -1,2956, 712, 2959, -1,2962, 2961, 2959, -1,2965, 2964, 2962, -1,2961, + 2962, 2964, -1,2967, 2965, 2968, -1,2964, 2965, 2967, -1,2966, 2967, 2970, -1,2970, + 2967, 2971, -1,2967, 2963, 2964, -1,709, 2965, 2962, -1,710, 709, 2962, -1,2968, + 2965, 709, -1,708, 2968, 709, -1,707, 2971, 708, -1,2968, 708, 2971, -1,2971, 707, + 2974, -1,2971, 2967, 2968, -1,2973, 2970, 2971, -1,711, 710, 2962, -1,2964, 2960, + 2961, -1,2972, 2970, 2973, -1,2972, 2973, 2975, -1,685, 684, 2975, -1,2978, 686, + 685, -1,2981, 686, 2978, -1,2975, 2978, 685, -1,2979, 2978, 2975, -1,2977, 2976, + 2973, -1,2976, 2975, 2973, -1,2982, 2981, 2979, -1,2975, 2976, 2979, -1,2984, 2981, + 2982, -1,2983, 2982, 2979, -1,2978, 2979, 2981, -1,2980, 2979, 2976, -1,2981, 687, + 686, -1,684, 2972, 2975, -1,2987, 688, 687, -1,2993, 690, 689, -1,695, 659, 690, -1, + 2990, 689, 688, -1,2985, 2987, 2984, -1,687, 2984, 2987, -1,2987, 2985, 2988, -1, + 2982, 2985, 2984, -1,2990, 2987, 2991, -1,689, 2990, 2993, -1,690, 2993, 695, -1, + 2993, 2990, 2994, -1,2990, 688, 2987, -1,695, 2993, 696, -1,2981, 2984, 687, -1,2986, + 2985, 2982, -1,705, 2977, 2974, -1,2977, 2973, 2974, -1,2980, 2983, 2979, -1,2976, + 2977, 2980, -1,2983, 2986, 2982, -1,703, 2983, 2980, -1,2986, 2988, 2985, -1,704, + 2980, 2977, -1,705, 2974, 706, -1,704, 2977, 705, -1,702, 2986, 703, -1,2980, 704, + 703, -1,2986, 702, 2989, -1,2986, 2983, 703, -1,2989, 2988, 2986, -1,707, 706, 2974, -1, + 2992, 2991, 2989, -1,2988, 2989, 2991, -1,2994, 2992, 2995, -1,2991, 2992, 2994, -1, + 2993, 2994, 696, -1,696, 2994, 697, -1,2994, 2990, 2991, -1,700, 2992, 2989, -1,701, + 700, 2989, -1,2995, 2992, 700, -1,699, 2995, 700, -1,698, 697, 699, -1,2995, 699, + 697, -1,697, 2994, 2995, -1,702, 701, 2989, -1,2991, 2987, 2988, -1,2971, 2974, 2973, -1, + 660, 659, 695, -1,2996, 660, 695, -1,661, 660, 2999, -1,662, 661, 2999, -1,2997, + 2996, 696, -1,695, 696, 2996, -1,3000, 2999, 2997, -1,2996, 2997, 2999, -1,2999, + 3000, 3002, -1,3001, 3000, 2997, -1,2999, 660, 2996, -1,2998, 2997, 696, -1,3002, + 662, 2999, -1,3008, 664, 663, -1,3014, 666, 665, -1,3017, 667, 666, -1,3011, 665, + 664, -1,3003, 3002, 3000, -1,663, 3002, 3005, -1,663, 3005, 3008, -1,3005, 3002, + 3006, -1,3011, 3008, 3012, -1,665, 3011, 3014, -1,666, 3014, 3017, -1,3014, 3011, + 3015, -1,3011, 664, 3008, -1,3008, 3005, 3009, -1,3017, 668, 667, -1,662, 3002, 663, -1, + 3017, 3014, 3015, -1,728, 2998, 697, -1,2998, 696, 697, -1,3003, 3001, 3004, -1,2997, + 2998, 3001, -1,3002, 3003, 3006, -1,3006, 3003, 3004, -1,3000, 3001, 3003, -1,727, + 3001, 2998, -1,728, 697, 698, -1,726, 3004, 727, -1,2998, 728, 727, -1,3004, 726, + 3007, -1,3001, 727, 3004, -1,3007, 3006, 3004, -1,3010, 3009, 3007, -1,3006, 3007, + 3009, -1,3012, 3010, 3013, -1,3009, 3010, 3012, -1,3011, 3012, 3015, -1,3015, 3012, + 3016, -1,3012, 3008, 3009, -1,724, 3010, 3007, -1,725, 724, 3007, -1,3013, 3010, + 724, -1,723, 3013, 724, -1,722, 3016, 723, -1,3013, 723, 3016, -1,3016, 722, 3019, -1, + 3016, 3012, 3013, -1,3018, 3015, 3016, -1,726, 725, 3007, -1,3009, 3005, 3006, -1, + 3017, 3015, 3018, -1,3017, 3018, 3020, -1,669, 668, 3020, -1,3023, 670, 669, -1,3026, + 670, 3023, -1,3020, 3023, 669, -1,3024, 3023, 3020, -1,3022, 3021, 3018, -1,3021, + 3020, 3018, -1,3027, 3026, 3024, -1,3020, 3021, 3024, -1,3029, 3026, 3027, -1,3028, + 3027, 3024, -1,3023, 3024, 3026, -1,3025, 3024, 3021, -1,3026, 671, 670, -1,668, + 3017, 3020, -1,3032, 672, 671, -1,3038, 674, 673, -1,694, 675, 674, -1,3035, 673, + 672, -1,3030, 3032, 3029, -1,671, 3029, 3032, -1,3032, 3030, 3033, -1,3027, 3030, + 3029, -1,3035, 3032, 3036, -1,673, 3035, 3038, -1,674, 3038, 694, -1,3038, 3035, + 3039, -1,3035, 672, 3032, -1,694, 3038, 693, -1,3026, 3029, 671, -1,3031, 3030, 3027, -1, + 720, 3022, 3019, -1,3022, 3018, 3019, -1,3025, 3028, 3024, -1,3021, 3022, 3025, -1, + 3028, 3031, 3027, -1,718, 3028, 3025, -1,3031, 3033, 3030, -1,719, 3025, 3022, -1, + 720, 3019, 721, -1,719, 3022, 720, -1,717, 3031, 718, -1,3025, 719, 718, -1,3031, + 717, 3034, -1,3031, 3028, 718, -1,3034, 3033, 3031, -1,722, 721, 3019, -1,3037, 3036, + 3034, -1,3033, 3034, 3036, -1,3039, 3037, 3040, -1,3036, 3037, 3039, -1,3038, 3039, + 693, -1,693, 3039, 692, -1,3039, 3035, 3036, -1,715, 3037, 3034, -1,716, 715, 3034, -1, + 3040, 3037, 715, -1,714, 3040, 715, -1,691, 692, 714, -1,3040, 714, 692, -1,692, + 3039, 3040, -1,717, 716, 3034, -1,3036, 3032, 3033, -1,3016, 3019, 3018, -1,729, + 698, 699, -1,3041, 699, 700, -1,3043, 701, 702, -1,3044, 702, 703, -1,701, 3042, + 700, -1,699, 3041, 729, -1,730, 729, 3041, -1,731, 3041, 3042, -1,700, 3042, 3041, -1, + 702, 3044, 3043, -1,733, 3043, 3044, -1,734, 3044, 3045, -1,703, 3045, 3044, -1,3043, + 732, 3042, -1,701, 3043, 3042, -1,3046, 3045, 703, -1,3046, 704, 705, -1,3047, 705, + 706, -1,707, 708, 3049, -1,708, 709, 3050, -1,3048, 706, 707, -1,3051, 709, 710, -1, + 3046, 705, 3047, -1,736, 3046, 3047, -1,3052, 710, 711, -1,711, 712, 3053, -1,713, + 691, 3055, -1,3054, 712, 713, -1,3047, 706, 3048, -1,3046, 703, 704, -1,3046, 735, + 3045, -1,731, 3042, 732, -1,732, 3043, 733, -1,707, 3049, 3048, -1,3048, 3049, 738, -1, + 3049, 3050, 739, -1,708, 3050, 3049, -1,734, 733, 3044, -1,730, 3041, 731, -1,734, + 3045, 735, -1,735, 3046, 736, -1,3047, 3048, 737, -1,3049, 739, 738, -1,3048, 738, + 737, -1,736, 3047, 737, -1,740, 739, 3050, -1,710, 3052, 3051, -1,741, 3051, 3052, -1, + 742, 3052, 3053, -1,711, 3053, 3052, -1,713, 3055, 3054, -1,744, 3054, 3055, -1,745, + 3055, 747, -1,691, 747, 3055, -1,3054, 743, 3053, -1,712, 3054, 3053, -1,3051, 741, + 740, -1,3052, 742, 741, -1,3054, 744, 743, -1,747, 746, 745, -1,3055, 745, 744, -1, + 3053, 743, 742, -1,740, 3050, 3051, -1,709, 3051, 3050, -1,747, 691, 714, -1,3056, + 714, 715, -1,3058, 716, 717, -1,3059, 717, 718, -1,716, 3057, 715, -1,714, 3056, + 747, -1,746, 747, 3056, -1,748, 3056, 3057, -1,715, 3057, 3056, -1,717, 3059, 3058, -1, + 750, 3058, 3059, -1,751, 3059, 3060, -1,718, 3060, 3059, -1,3058, 749, 3057, -1,716, + 3058, 3057, -1,3061, 3060, 718, -1,3061, 719, 720, -1,3062, 720, 721, -1,722, 723, + 3064, -1,723, 724, 3065, -1,3063, 721, 722, -1,3066, 724, 725, -1,3061, 720, 3062, -1, + 753, 3061, 3062, -1,3067, 725, 726, -1,726, 727, 3068, -1,728, 698, 3070, -1,3069, + 727, 728, -1,3062, 721, 3063, -1,3061, 718, 719, -1,3061, 752, 3060, -1,748, 3057, + 749, -1,749, 3058, 750, -1,722, 3064, 3063, -1,3063, 3064, 755, -1,3064, 3065, 756, -1, + 723, 3065, 3064, -1,751, 750, 3059, -1,746, 3056, 748, -1,751, 3060, 752, -1,752, + 3061, 753, -1,3062, 3063, 754, -1,3064, 756, 755, -1,3063, 755, 754, -1,753, 3062, + 754, -1,757, 756, 3065, -1,725, 3067, 3066, -1,758, 3066, 3067, -1,759, 3067, 3068, -1, + 726, 3068, 3067, -1,728, 3070, 3069, -1,761, 3069, 3070, -1,762, 3070, 729, -1,698, + 729, 3070, -1,3069, 760, 3068, -1,727, 3069, 3068, -1,3066, 758, 757, -1,3067, 759, + 758, -1,3069, 761, 760, -1,729, 730, 762, -1,3070, 762, 761, -1,3068, 760, 759, -1, + 757, 3065, 3066, -1,724, 3066, 3065, -1,745, 746, 766, -1,3071, 745, 766, -1,744, + 745, 3074, -1,743, 744, 3074, -1,3072, 3071, 765, -1,766, 765, 3071, -1,3075, 3074, + 3072, -1,3071, 3072, 3074, -1,3074, 3075, 3077, -1,3076, 3075, 3072, -1,3074, 745, + 3071, -1,3073, 3072, 765, -1,3077, 743, 3074, -1,3083, 741, 742, -1,3089, 739, 740, -1, + 3092, 738, 739, -1,3086, 740, 741, -1,3078, 3077, 3075, -1,742, 3077, 3080, -1,742, + 3080, 3083, -1,3080, 3077, 3081, -1,3086, 3083, 3087, -1,740, 3086, 3089, -1,739, + 3089, 3092, -1,3089, 3086, 3090, -1,3086, 741, 3083, -1,3083, 3080, 3084, -1,3092, + 737, 738, -1,743, 3077, 742, -1,3092, 3089, 3090, -1,785, 3073, 764, -1,3073, 765, + 764, -1,3078, 3076, 3079, -1,3072, 3073, 3076, -1,3077, 3078, 3081, -1,3081, 3078, + 3079, -1,3075, 3076, 3078, -1,784, 3076, 3073, -1,785, 764, 763, -1,783, 3079, 784, -1, + 3073, 785, 784, -1,3079, 783, 3082, -1,3076, 784, 3079, -1,3082, 3081, 3079, -1,3085, + 3084, 3082, -1,3081, 3082, 3084, -1,3087, 3085, 3088, -1,3084, 3085, 3087, -1,3086, + 3087, 3090, -1,3090, 3087, 3091, -1,3087, 3083, 3084, -1,781, 3085, 3082, -1,782, + 781, 3082, -1,3088, 3085, 781, -1,780, 3088, 781, -1,779, 3091, 780, -1,3088, 780, + 3091, -1,3091, 779, 3094, -1,3091, 3087, 3088, -1,3093, 3090, 3091, -1,783, 782, + 3082, -1,3084, 3080, 3081, -1,3092, 3090, 3093, -1,3092, 3093, 3095, -1,736, 737, + 3095, -1,3098, 735, 736, -1,3101, 735, 3098, -1,3095, 3098, 736, -1,3099, 3098, 3095, -1, + 3097, 3096, 3093, -1,3096, 3095, 3093, -1,3102, 3101, 3099, -1,3095, 3096, 3099, -1, + 3104, 3101, 3102, -1,3103, 3102, 3099, -1,3098, 3099, 3101, -1,3100, 3099, 3096, -1, + 3101, 734, 735, -1,737, 3092, 3095, -1,3107, 733, 734, -1,3113, 731, 732, -1,767, + 730, 731, -1,3110, 732, 733, -1,3105, 3107, 3104, -1,734, 3104, 3107, -1,3107, 3105, + 3108, -1,3102, 3105, 3104, -1,3110, 3107, 3111, -1,732, 3110, 3113, -1,731, 3113, + 767, -1,3113, 3110, 3114, -1,3110, 733, 3107, -1,767, 3113, 768, -1,3101, 3104, 734, -1, + 3106, 3105, 3102, -1,777, 3097, 3094, -1,3097, 3093, 3094, -1,3100, 3103, 3099, -1, + 3096, 3097, 3100, -1,3103, 3106, 3102, -1,775, 3103, 3100, -1,3106, 3108, 3105, -1, + 776, 3100, 3097, -1,777, 3094, 778, -1,776, 3097, 777, -1,774, 3106, 775, -1,3100, + 776, 775, -1,3106, 774, 3109, -1,3106, 3103, 775, -1,3109, 3108, 3106, -1,779, 778, + 3094, -1,3112, 3111, 3109, -1,3108, 3109, 3111, -1,3114, 3112, 3115, -1,3111, 3112, + 3114, -1,3113, 3114, 768, -1,768, 3114, 769, -1,3114, 3110, 3111, -1,772, 3112, 3109, -1, + 773, 772, 3109, -1,3115, 3112, 772, -1,771, 3115, 772, -1,770, 769, 771, -1,3115, + 771, 769, -1,769, 3114, 3115, -1,774, 773, 3109, -1,3111, 3107, 3108, -1,3091, 3094, + 3093, -1,762, 730, 767, -1,3116, 762, 767, -1,761, 762, 3119, -1,760, 761, 3119, -1, + 3117, 3116, 768, -1,767, 768, 3116, -1,3120, 3119, 3117, -1,3116, 3117, 3119, -1, + 3119, 3120, 3122, -1,3121, 3120, 3117, -1,3119, 762, 3116, -1,3118, 3117, 768, -1, + 3122, 760, 3119, -1,3128, 758, 759, -1,3134, 756, 757, -1,3137, 755, 756, -1,3131, + 757, 758, -1,3123, 3122, 3120, -1,759, 3122, 3125, -1,759, 3125, 3128, -1,3125, 3122, + 3126, -1,3131, 3128, 3132, -1,757, 3131, 3134, -1,756, 3134, 3137, -1,3134, 3131, + 3135, -1,3131, 758, 3128, -1,3128, 3125, 3129, -1,3137, 754, 755, -1,760, 3122, 759, -1, + 3137, 3134, 3135, -1,800, 3118, 769, -1,3118, 768, 769, -1,3123, 3121, 3124, -1,3117, + 3118, 3121, -1,3122, 3123, 3126, -1,3126, 3123, 3124, -1,3120, 3121, 3123, -1,799, + 3121, 3118, -1,800, 769, 770, -1,798, 3124, 799, -1,3118, 800, 799, -1,3124, 798, + 3127, -1,3121, 799, 3124, -1,3127, 3126, 3124, -1,3130, 3129, 3127, -1,3126, 3127, + 3129, -1,3132, 3130, 3133, -1,3129, 3130, 3132, -1,3131, 3132, 3135, -1,3135, 3132, + 3136, -1,3132, 3128, 3129, -1,796, 3130, 3127, -1,797, 796, 3127, -1,3133, 3130, + 796, -1,795, 3133, 796, -1,794, 3136, 795, -1,3133, 795, 3136, -1,3136, 794, 3139, -1, + 3136, 3132, 3133, -1,3138, 3135, 3136, -1,798, 797, 3127, -1,3129, 3125, 3126, -1, + 3137, 3135, 3138, -1,3137, 3138, 3140, -1,753, 754, 3140, -1,3143, 752, 753, -1,3146, + 752, 3143, -1,3140, 3143, 753, -1,3144, 3143, 3140, -1,3142, 3141, 3138, -1,3141, + 3140, 3138, -1,3147, 3146, 3144, -1,3140, 3141, 3144, -1,3149, 3146, 3147, -1,3148, + 3147, 3144, -1,3143, 3144, 3146, -1,3145, 3144, 3141, -1,3146, 751, 752, -1,754, + 3137, 3140, -1,3152, 750, 751, -1,3158, 748, 749, -1,766, 746, 748, -1,3155, 749, + 750, -1,3150, 3152, 3149, -1,751, 3149, 3152, -1,3152, 3150, 3153, -1,3147, 3150, + 3149, -1,3155, 3152, 3156, -1,749, 3155, 3158, -1,748, 3158, 766, -1,3158, 3155, + 3159, -1,3155, 750, 3152, -1,766, 3158, 765, -1,3146, 3149, 751, -1,3151, 3150, 3147, -1, + 792, 3142, 3139, -1,3142, 3138, 3139, -1,3145, 3148, 3144, -1,3141, 3142, 3145, -1, + 3148, 3151, 3147, -1,790, 3148, 3145, -1,3151, 3153, 3150, -1,791, 3145, 3142, -1, + 792, 3139, 793, -1,791, 3142, 792, -1,789, 3151, 790, -1,3145, 791, 790, -1,3151, + 789, 3154, -1,3151, 3148, 790, -1,3154, 3153, 3151, -1,794, 793, 3139, -1,3157, 3156, + 3154, -1,3153, 3154, 3156, -1,3159, 3157, 3160, -1,3156, 3157, 3159, -1,3158, 3159, + 765, -1,765, 3159, 764, -1,3159, 3155, 3156, -1,787, 3157, 3154, -1,788, 787, 3154, -1, + 3160, 3157, 787, -1,786, 3160, 787, -1,763, 764, 786, -1,3160, 786, 764, -1,764, + 3159, 3160, -1,789, 788, 3154, -1,3156, 3152, 3153, -1,3136, 3139, 3138, -1,786, + 787, 819, -1,820, 819, 787, -1,787, 788, 820, -1,821, 820, 788, -1,785, 763, 817, -1, + 786, 817, 763, -1,817, 786, 818, -1,819, 818, 786, -1,822, 791, 823, -1,792, 823, + 791, -1,823, 792, 824, -1,825, 824, 792, -1,788, 789, 821, -1,790, 821, 789, -1,821, + 790, 822, -1,791, 822, 790, -1,815, 785, 816, -1,817, 816, 785, -1,814, 784, 815, -1, + 785, 815, 784, -1,813, 783, 814, -1,784, 814, 783, -1,781, 782, 813, -1,783, 813, + 782, -1,780, 781, 812, -1,813, 812, 781, -1,779, 780, 811, -1,812, 811, 780, -1,809, + 779, 810, -1,811, 810, 779, -1,777, 778, 809, -1,779, 809, 778, -1,794, 825, 793, -1, + 792, 793, 825, -1,827, 826, 794, -1,825, 794, 826, -1,828, 827, 795, -1,794, 795, + 827, -1,829, 828, 796, -1,795, 796, 828, -1,798, 829, 797, -1,796, 797, 829, -1,799, + 830, 798, -1,829, 798, 830, -1,800, 831, 799, -1,830, 799, 831, -1,801, 832, 800, -1, + 831, 800, 832, -1,776, 806, 775, -1,805, 775, 806, -1,775, 805, 774, -1,773, 774, + 805, -1,809, 808, 777, -1,807, 777, 808, -1,777, 807, 776, -1,806, 776, 807, -1,803, + 802, 771, -1,801, 771, 802, -1,771, 801, 770, -1,800, 770, 801, -1,805, 804, 773, -1, + 772, 773, 804, -1,804, 803, 772, -1,771, 772, 803, -1,833, 801, 802, -1,3161, 802, + 803, -1,3163, 804, 805, -1,3164, 805, 806, -1,804, 3162, 803, -1,802, 3161, 833, -1, + 834, 833, 3161, -1,835, 3161, 3162, -1,803, 3162, 3161, -1,805, 3164, 3163, -1,837, + 3163, 3164, -1,838, 3164, 3165, -1,806, 3165, 3164, -1,3163, 836, 3162, -1,804, 3163, + 3162, -1,3166, 3165, 806, -1,3166, 807, 808, -1,3167, 808, 809, -1,810, 811, 3169, -1, + 811, 812, 3170, -1,3168, 809, 810, -1,3171, 812, 813, -1,3166, 808, 3167, -1,840, + 3166, 3167, -1,3172, 813, 814, -1,814, 815, 3173, -1,816, 817, 3175, -1,3174, 815, + 816, -1,3167, 809, 3168, -1,3166, 806, 807, -1,3166, 839, 3165, -1,835, 3162, 836, -1, + 836, 3163, 837, -1,810, 3169, 3168, -1,3168, 3169, 842, -1,3169, 3170, 843, -1,811, + 3170, 3169, -1,838, 837, 3164, -1,834, 3161, 835, -1,838, 3165, 839, -1,839, 3166, + 840, -1,3167, 3168, 841, -1,3169, 843, 842, -1,3168, 842, 841, -1,840, 3167, 841, -1, + 844, 843, 3170, -1,813, 3172, 3171, -1,845, 3171, 3172, -1,846, 3172, 3173, -1,814, + 3173, 3172, -1,816, 3175, 3174, -1,848, 3174, 3175, -1,849, 3175, 851, -1,817, 851, + 3175, -1,3174, 847, 3173, -1,815, 3174, 3173, -1,3171, 845, 844, -1,3172, 846, 845, -1, + 3174, 848, 847, -1,851, 850, 849, -1,3175, 849, 848, -1,3173, 847, 846, -1,844, 3170, + 3171, -1,812, 3171, 3170, -1,851, 817, 818, -1,3176, 818, 819, -1,3178, 820, 821, -1, + 3179, 821, 822, -1,820, 3177, 819, -1,818, 3176, 851, -1,850, 851, 3176, -1,852, + 3176, 3177, -1,819, 3177, 3176, -1,821, 3179, 3178, -1,854, 3178, 3179, -1,855, 3179, + 3180, -1,822, 3180, 3179, -1,3178, 853, 3177, -1,820, 3178, 3177, -1,3181, 3180, + 822, -1,3181, 823, 824, -1,3182, 824, 825, -1,826, 827, 3184, -1,827, 828, 3185, -1, + 3183, 825, 826, -1,3186, 828, 829, -1,3181, 824, 3182, -1,857, 3181, 3182, -1,3187, + 829, 830, -1,830, 831, 3188, -1,832, 801, 3190, -1,3189, 831, 832, -1,3182, 825, + 3183, -1,3181, 822, 823, -1,3181, 856, 3180, -1,852, 3177, 853, -1,853, 3178, 854, -1, + 826, 3184, 3183, -1,3183, 3184, 859, -1,3184, 3185, 860, -1,827, 3185, 3184, -1,855, + 854, 3179, -1,850, 3176, 852, -1,855, 3180, 856, -1,856, 3181, 857, -1,3182, 3183, + 858, -1,3184, 860, 859, -1,3183, 859, 858, -1,857, 3182, 858, -1,861, 860, 3185, -1, + 829, 3187, 3186, -1,862, 3186, 3187, -1,863, 3187, 3188, -1,830, 3188, 3187, -1,832, + 3190, 3189, -1,865, 3189, 3190, -1,866, 3190, 833, -1,801, 833, 3190, -1,3189, 864, + 3188, -1,831, 3189, 3188, -1,3186, 862, 861, -1,3187, 863, 862, -1,3189, 865, 864, -1, + 833, 834, 866, -1,3190, 866, 865, -1,3188, 864, 863, -1,861, 3185, 3186, -1,828, + 3186, 3185, -1,867, 834, 835, -1,3191, 835, 836, -1,3193, 837, 838, -1,3194, 838, + 839, -1,837, 3192, 836, -1,835, 3191, 867, -1,868, 867, 3191, -1,869, 3191, 3192, -1, + 836, 3192, 3191, -1,838, 3194, 3193, -1,871, 3193, 3194, -1,872, 3194, 3195, -1,839, + 3195, 3194, -1,3193, 870, 3192, -1,837, 3193, 3192, -1,3196, 3195, 839, -1,3196, + 840, 841, -1,3197, 841, 842, -1,843, 844, 3199, -1,844, 845, 3200, -1,3198, 842, + 843, -1,3201, 845, 846, -1,3196, 841, 3197, -1,874, 3196, 3197, -1,3202, 846, 847, -1, + 847, 848, 3203, -1,849, 850, 3205, -1,3204, 848, 849, -1,3197, 842, 3198, -1,3196, + 839, 840, -1,3196, 873, 3195, -1,869, 3192, 870, -1,870, 3193, 871, -1,843, 3199, + 3198, -1,3198, 3199, 876, -1,3199, 3200, 877, -1,844, 3200, 3199, -1,872, 871, 3194, -1, + 868, 3191, 869, -1,872, 3195, 873, -1,873, 3196, 874, -1,3197, 3198, 875, -1,3199, + 877, 876, -1,3198, 876, 875, -1,874, 3197, 875, -1,878, 877, 3200, -1,846, 3202, + 3201, -1,879, 3201, 3202, -1,880, 3202, 3203, -1,847, 3203, 3202, -1,849, 3205, 3204, -1, + 882, 3204, 3205, -1,883, 3205, 885, -1,850, 885, 3205, -1,3204, 881, 3203, -1,848, + 3204, 3203, -1,3201, 879, 878, -1,3202, 880, 879, -1,3204, 882, 881, -1,885, 884, + 883, -1,3205, 883, 882, -1,3203, 881, 880, -1,878, 3200, 3201, -1,845, 3201, 3200, -1, + 885, 850, 852, -1,3206, 852, 853, -1,3208, 854, 855, -1,856, 857, 900, -1,856, 3209, + 855, -1,854, 3207, 853, -1,852, 3206, 885, -1,884, 885, 3206, -1,894, 3206, 3207, -1, + 853, 3207, 3206, -1,855, 3209, 3208, -1,896, 3208, 3209, -1,3211, 901, 857, -1,856, + 900, 3210, -1,3210, 897, 3209, -1,856, 3210, 3209, -1,3208, 895, 3207, -1,854, 3208, + 3207, -1,857, 858, 903, -1,3212, 858, 859, -1,3213, 859, 860, -1,3215, 861, 862, -1, + 863, 864, 3217, -1,863, 3216, 862, -1,861, 3214, 860, -1,3213, 860, 3214, -1,907, + 3212, 3213, -1,3215, 862, 3216, -1,888, 3214, 3215, -1,3214, 887, 3213, -1,3214, + 861, 3215, -1,865, 866, 3219, -1,3216, 863, 3217, -1,834, 3220, 866, -1,3218, 864, + 865, -1,3216, 889, 3215, -1,3212, 859, 3213, -1,904, 858, 3212, -1,903, 3211, 857, -1, + 901, 3211, 902, -1,900, 857, 901, -1,904, 3212, 905, -1,906, 3212, 907, -1,3212, + 906, 905, -1,903, 858, 904, -1,3208, 896, 895, -1,896, 3209, 897, -1,898, 3210, 899, -1, + 3210, 898, 897, -1,900, 899, 3210, -1,895, 894, 3207, -1,3206, 894, 884, -1,3214, + 888, 887, -1,3213, 886, 907, -1,891, 3217, 3218, -1,865, 3219, 3218, -1,3218, 3219, + 892, -1,834, 867, 3220, -1,3220, 867, 868, -1,893, 3219, 3220, -1,866, 3220, 3219, -1, + 887, 886, 3213, -1,864, 3218, 3217, -1,889, 888, 3215, -1,3216, 3217, 890, -1,889, + 3216, 890, -1,3218, 892, 891, -1,3220, 868, 893, -1,3219, 893, 892, -1,3217, 891, + 890, -1,902, 3211, 903, -1,908, 868, 869, -1,3221, 869, 870, -1,3223, 871, 872, -1, + 3225, 873, 874, -1,873, 3224, 872, -1,871, 3222, 870, -1,3221, 870, 3222, -1,909, + 908, 3221, -1,3223, 872, 3224, -1,911, 3222, 3223, -1,3222, 910, 3221, -1,3222, 871, + 3223, -1,874, 3226, 3225, -1,3225, 3224, 873, -1,874, 875, 3226, -1,914, 3225, 3226, -1, + 3225, 913, 3224, -1,3227, 3226, 875, -1,3224, 912, 3223, -1,908, 869, 3221, -1,3228, + 876, 877, -1,878, 879, 3230, -1,3229, 877, 878, -1,880, 881, 3232, -1,883, 884, 3235, -1, + 3233, 881, 882, -1,3231, 879, 880, -1,895, 3238, 894, -1,883, 3234, 882, -1,916, + 3227, 3228, -1,3228, 3227, 876, -1,884, 894, 3236, -1,3239, 896, 930, -1,896, 897, + 930, -1,895, 896, 3239, -1,877, 3229, 3228, -1,3227, 875, 876, -1,3227, 915, 3226, -1, + 910, 3222, 911, -1,912, 3224, 913, -1,911, 3223, 912, -1,878, 3230, 3229, -1,3229, + 3230, 918, -1,880, 3232, 3231, -1,3231, 3232, 920, -1,919, 3230, 3231, -1,879, 3231, + 3230, -1,913, 3225, 914, -1,909, 3221, 910, -1,914, 3226, 915, -1,916, 3228, 917, -1, + 915, 3227, 916, -1,3229, 918, 917, -1,3231, 920, 919, -1,3230, 919, 918, -1,3228, + 3229, 917, -1,921, 920, 3232, -1,882, 3234, 3233, -1,3233, 3234, 922, -1,924, 3235, + 3236, -1,3235, 923, 3234, -1,921, 3232, 3233, -1,883, 3235, 3234, -1,894, 3237, 3236, -1, + 3236, 3237, 926, -1,895, 3239, 3238, -1,3238, 3239, 928, -1,927, 3237, 3238, -1,894, + 3238, 3237, -1,3233, 922, 921, -1,884, 3236, 3235, -1,3234, 923, 922, -1,3236, 925, + 924, -1,3235, 924, 923, -1,3237, 927, 926, -1,3239, 929, 928, -1,3238, 928, 927, -1, + 3236, 926, 925, -1,930, 929, 3239, -1,881, 3233, 3232, -1,939, 886, 887, -1,3240, + 887, 888, -1,888, 3241, 3240, -1,931, 939, 3240, -1,932, 3240, 3241, -1,939, 887, + 3240, -1,889, 3241, 888, -1,3242, 889, 890, -1,890, 891, 3243, -1,3245, 892, 893, -1, + 892, 3244, 891, -1,893, 868, 3246, -1,3243, 3242, 890, -1,3242, 3241, 889, -1,3242, + 933, 3241, -1,935, 3243, 3244, -1,931, 3240, 932, -1,933, 932, 3241, -1,891, 3244, + 3243, -1,933, 3242, 934, -1,3243, 935, 934, -1,3242, 3243, 934, -1,936, 935, 3244, -1, + 893, 3246, 3245, -1,937, 3245, 3246, -1,938, 3246, 908, -1,868, 908, 3246, -1,3245, + 937, 936, -1,908, 909, 938, -1,3246, 938, 937, -1,936, 3244, 3245, -1,892, 3245, + 3244, -1,540, 525, 940, -1,539, 540, 3247, -1,940, 3247, 540, -1,3247, 940, 941, -1, + 3248, 3247, 942, -1,3247, 3248, 539, -1,539, 3248, 3249, -1,537, 538, 3249, -1,3250, + 536, 537, -1,534, 535, 3252, -1,536, 3251, 535, -1,3253, 533, 534, -1,537, 3249, + 3250, -1,538, 539, 3249, -1,3248, 943, 3249, -1,3251, 3250, 945, -1,942, 3247, 941, -1, + 3248, 942, 943, -1,3250, 3251, 536, -1,944, 3249, 943, -1,944, 945, 3250, -1,944, + 3250, 3249, -1,3251, 945, 946, -1,3252, 3253, 534, -1,3253, 3252, 947, -1,950, 3253, + 948, -1,3253, 950, 533, -1,946, 947, 3252, -1,948, 949, 950, -1,947, 948, 3253, -1, + 3252, 3251, 946, -1,3251, 3252, 535, -1,532, 533, 950, -1,531, 532, 3254, -1,950, + 3254, 532, -1,3254, 950, 949, -1,3255, 3254, 951, -1,3254, 3255, 531, -1,531, 3255, + 3256, -1,529, 530, 3256, -1,3257, 528, 529, -1,526, 527, 3259, -1,528, 3258, 527, -1, + 3260, 525, 526, -1,529, 3256, 3257, -1,530, 531, 3256, -1,3255, 952, 3256, -1,3258, + 3257, 954, -1,951, 3254, 949, -1,3255, 951, 952, -1,3257, 3258, 528, -1,953, 3256, + 952, -1,953, 954, 3257, -1,953, 3257, 3256, -1,3258, 954, 955, -1,3259, 3260, 526, -1, + 3260, 3259, 956, -1,940, 3260, 957, -1,3260, 940, 525, -1,955, 956, 3259, -1,957, + 941, 940, -1,956, 957, 3260, -1,3259, 3258, 955, -1,3258, 3259, 527, -1,942, 941, + 958, -1,942, 3261, 943, -1,3261, 942, 958, -1,3261, 958, 959, -1,944, 943, 3262, -1, + 3263, 945, 944, -1,3264, 946, 945, -1,3266, 948, 947, -1,3267, 949, 948, -1,947, + 946, 3265, -1,3261, 3262, 943, -1,3262, 3263, 944, -1,3263, 3262, 959, -1,3264, 3263, + 959, -1,3263, 3264, 945, -1,959, 3262, 3261, -1,3264, 959, 3265, -1,3265, 3266, 947, -1, + 3266, 3265, 959, -1,3267, 3266, 959, -1,3266, 3267, 948, -1,3267, 959, 960, -1,3267, + 960, 949, -1,3264, 3265, 946, -1,951, 949, 960, -1,951, 3268, 952, -1,3268, 951, + 960, -1,3268, 960, 959, -1,953, 952, 3269, -1,3270, 954, 953, -1,3271, 955, 954, -1, + 3273, 957, 956, -1,3274, 941, 957, -1,956, 955, 3272, -1,3268, 3269, 952, -1,3269, + 3270, 953, -1,3270, 3269, 959, -1,3271, 3270, 959, -1,3270, 3271, 954, -1,959, 3269, + 3268, -1,3271, 959, 3272, -1,3272, 3273, 956, -1,3273, 3272, 959, -1,3274, 3273, + 959, -1,3273, 3274, 957, -1,3274, 959, 958, -1,3274, 958, 941, -1,3271, 3272, 955, -1, + 548, 549, 961, -1,547, 548, 3275, -1,961, 3275, 548, -1,3275, 961, 962, -1,3276, + 3275, 963, -1,3275, 3276, 547, -1,547, 3276, 3277, -1,545, 546, 3277, -1,3278, 544, + 545, -1,542, 543, 3280, -1,544, 3279, 543, -1,3281, 541, 542, -1,545, 3277, 3278, -1, + 546, 547, 3277, -1,3276, 964, 3277, -1,3279, 3278, 966, -1,963, 3275, 962, -1,3276, + 963, 964, -1,3278, 3279, 544, -1,965, 3277, 964, -1,965, 966, 3278, -1,965, 3278, + 3277, -1,3279, 966, 967, -1,3280, 3281, 542, -1,3281, 3280, 968, -1,971, 3281, 969, -1, + 3281, 971, 541, -1,967, 968, 3280, -1,969, 970, 971, -1,968, 969, 3281, -1,3280, + 3279, 967, -1,3279, 3280, 543, -1,556, 541, 971, -1,555, 556, 3282, -1,971, 3282, + 556, -1,3282, 971, 970, -1,3283, 3282, 972, -1,3282, 3283, 555, -1,555, 3283, 3284, -1, + 553, 554, 3284, -1,3285, 552, 553, -1,550, 551, 3287, -1,552, 3286, 551, -1,3288, + 549, 550, -1,553, 3284, 3285, -1,554, 555, 3284, -1,3283, 973, 3284, -1,3286, 3285, + 975, -1,972, 3282, 970, -1,3283, 972, 973, -1,3285, 3286, 552, -1,974, 3284, 973, -1, + 974, 975, 3285, -1,974, 3285, 3284, -1,3286, 975, 976, -1,3287, 3288, 550, -1,3288, + 3287, 977, -1,961, 3288, 978, -1,3288, 961, 549, -1,976, 977, 3287, -1,978, 962, + 961, -1,977, 978, 3288, -1,3287, 3286, 976, -1,3286, 3287, 551, -1,963, 962, 979, -1, + 963, 3289, 964, -1,3289, 963, 979, -1,3289, 979, 980, -1,965, 964, 3290, -1,3291, + 966, 965, -1,3292, 967, 966, -1,3294, 969, 968, -1,3295, 970, 969, -1,968, 967, 3293, -1, + 3289, 3290, 964, -1,3290, 3291, 965, -1,3291, 3290, 980, -1,3292, 3291, 980, -1,3291, + 3292, 966, -1,980, 3290, 3289, -1,3292, 980, 3293, -1,3293, 3294, 968, -1,3294, 3293, + 980, -1,3295, 3294, 980, -1,3294, 3295, 969, -1,3295, 980, 981, -1,3295, 981, 970, -1, + 3292, 3293, 967, -1,972, 970, 981, -1,972, 3296, 973, -1,3296, 972, 981, -1,3296, + 981, 980, -1,974, 973, 3297, -1,3298, 975, 974, -1,3299, 976, 975, -1,3301, 978, + 977, -1,3302, 962, 978, -1,977, 976, 3300, -1,3296, 3297, 973, -1,3297, 3298, 974, -1, + 3298, 3297, 980, -1,3299, 3298, 980, -1,3298, 3299, 975, -1,980, 3297, 3296, -1,3299, + 980, 3300, -1,3300, 3301, 977, -1,3301, 3300, 980, -1,3302, 3301, 980, -1,3301, 3302, + 978, -1,3302, 980, 979, -1,3302, 979, 962, -1,3299, 3300, 976, -1,982, 985, 984, -1, + 984, 983, 982, -1,987, 986, 1023, -1,3303, 1023, 1022, -1,3305, 1021, 1020, -1,3305, + 1020, 1019, -1,1021, 3304, 1022, -1,3303, 1022, 3304, -1,989, 987, 3303, -1,990, + 3303, 3304, -1,3304, 1021, 3305, -1,1018, 3306, 1019, -1,3306, 3305, 1019, -1,992, + 3305, 3306, -1,3307, 3306, 1018, -1,3305, 991, 3304, -1,987, 1023, 3303, -1,3308, + 1017, 1016, -1,1016, 1015, 3309, -1,1014, 1013, 3310, -1,1013, 1012, 3311, -1,3309, + 1015, 1014, -1,3312, 1012, 1011, -1,3307, 1017, 3308, -1,995, 3307, 3308, -1,3312, + 1011, 1010, -1,1010, 1009, 3313, -1,1008, 1007, 1006, -1,3314, 1009, 1008, -1,1016, + 3309, 3308, -1,3307, 1018, 1017, -1,3307, 994, 3306, -1,989, 3303, 990, -1,990, 3304, + 991, -1,3306, 993, 992, -1,992, 991, 3305, -1,3306, 994, 993, -1,988, 987, 989, -1, + 994, 3307, 995, -1,995, 3308, 996, -1,3309, 997, 996, -1,3309, 998, 997, -1,3308, + 3309, 996, -1,3310, 998, 3309, -1,1013, 3311, 3310, -1,3311, 3312, 1000, -1,3312, + 3313, 1002, -1,1012, 3312, 3311, -1,1008, 1006, 1005, -1,3314, 1003, 3313, -1,1004, + 3314, 1008, -1,1009, 3314, 3313, -1,999, 3310, 3311, -1,1010, 3313, 3312, -1,3311, + 1000, 999, -1,3312, 1001, 1000, -1,3313, 1003, 1002, -1,1004, 1008, 1005, -1,3314, + 1004, 1003, -1,3312, 1002, 1001, -1,999, 998, 3310, -1,1014, 3310, 3309, -1,988, + 1025, 986, -1,988, 988, 986, -1,1024, 986, 1025, -1,1024, 1025, 1026, -1,3315, 1030, + 1029, -1,3316, 1037, 1029, -1,1031, 1030, 1036, -1,3315, 1029, 1037, -1,1030, 3315, + 1036, -1,1028, 3316, 1029, -1,1042, 1043, 1024, -1,1027, 1043, 3317, -1,1043, 1042, + 3317, -1,3316, 1028, 3317, -1,1041, 3317, 1042, -1,1028, 1027, 3317, -1,3317, 1038, + 3316, -1,1036, 1035, 1032, -1,1034, 1032, 1035, -1,1032, 1034, 1033, -1,3315, 1037, + 1036, -1,1042, 1026, 1041, -1,3317, 1039, 1038, -1,1037, 3316, 1038, -1,3317, 1041, + 1040, -1,1040, 1039, 3317, -1,1031, 1036, 1032, -1,1123, 1122, 1061, -1,1121, 1061, + 1122, -1,1124, 1123, 1061, -1,1134, 1133, 1044, -1,1132, 1044, 1133, -1,1061, 1120, + 1137, -1,1061, 1121, 1120, -1,1061, 1136, 1044, -1,1061, 1110, 1125, -1,1060, 1111, + 1110, -1,1118, 1155, 1119, -1,1138, 1120, 1119, -1,1124, 1061, 1125, -1,1135, 1134, + 1044, -1,1060, 1110, 1061, -1,1044, 1132, 1131, -1,1044, 1131, 1130, -1,1128, 1045, + 1129, -1,1130, 1129, 1045, -1,1045, 1128, 1127, -1,1127, 1126, 1045, -1,1045, 1044, + 1130, -1,1044, 1136, 1135, -1,1120, 1138, 1137, -1,1061, 1137, 1136, -1,1045, 1126, + 1141, -1,1154, 1089, 1139, -1,1088, 1141, 1140, -1,1138, 1119, 1154, -1,1154, 1139, + 1138, -1,1088, 1140, 1139, -1,1113, 1112, 1060, -1,1111, 1060, 1112, -1,1114, 1113, + 1060, -1,1059, 1116, 1060, -1,1060, 1115, 1114, -1,1115, 1060, 1116, -1,1116, 1157, + 1156, -1,1057, 1142, 1058, -1,1059, 1058, 1157, -1,1057, 1143, 1142, -1,1056, 1143, + 1057, -1,1056, 1055, 1144, -1,1157, 1058, 1142, -1,1157, 1116, 1059, -1,1156, 1117, + 1116, -1,1117, 1156, 1155, -1,1118, 1117, 1155, -1,1153, 1152, 1107, -1,1151, 1150, + 1109, -1,1108, 1152, 1151, -1,1155, 1154, 1119, -1,1144, 1055, 1145, -1,1054, 1146, + 1145, -1,1055, 1054, 1145, -1,1148, 1147, 1053, -1,1146, 1054, 1147, -1,1147, 1054, + 1053, -1,1149, 1148, 1053, -1,1143, 1056, 1144, -1,1150, 1149, 1094, -1,1153, 1107, + 1154, -1,1141, 1087, 1045, -1,1045, 1085, 1084, -1,1045, 1084, 1083, -1,1046, 1082, + 1081, -1,1046, 1080, 1079, -1,1080, 1046, 1081, -1,1082, 1045, 1083, -1,1089, 1088, + 1139, -1,1088, 1087, 1141, -1,1076, 1091, 1090, -1,1091, 985, 1092, -1,1090, 1089, + 1106, -1,1154, 1106, 1089, -1,1045, 1086, 1085, -1,1046, 1078, 1093, -1,1079, 1078, + 1046, -1,1092, 985, 1046, -1,1073, 985, 1074, -1,1075, 1074, 985, -1,1073, 1072, + 985, -1,1091, 1076, 985, -1,1075, 985, 1076, -1,1076, 1090, 1077, -1,1062, 1077, + 1105, -1,1090, 1106, 1077, -1,985, 1072, 1071, -1,984, 1070, 1069, -1,1070, 985, + 1071, -1,1070, 984, 985, -1,1046, 1093, 1092, -1,1046, 1045, 1082, -1,1062, 1105, + 1063, -1,1094, 1149, 1095, -1,1109, 1150, 1094, -1,1107, 1106, 1154, -1,1104, 1063, + 1105, -1,1106, 1105, 1077, -1,1108, 1107, 1152, -1,1096, 1095, 1053, -1,1095, 1149, + 1053, -1,1097, 1096, 1053, -1,1099, 1098, 1052, -1,1097, 1052, 1098, -1,1052, 1051, + 1099, -1,1053, 1052, 1097, -1,1109, 1108, 1151, -1,1064, 1103, 984, -1,1104, 1103, + 1064, -1,1065, 1064, 984, -1,984, 1068, 1067, -1,1065, 984, 1066, -1,1067, 1066, + 984, -1,984, 1069, 1068, -1,1047, 984, 1103, -1,1101, 1100, 1050, -1,1099, 1051, + 1100, -1,1100, 1051, 1050, -1,1048, 1102, 1101, -1,1048, 1101, 1049, -1,1049, 1101, + 1050, -1,1047, 1102, 1048, -1,1047, 1103, 1102, -1,1064, 1063, 1104, -1,1086, 1045, + 1087, -1,1159, 1161, 1160, -1,1159, 1158, 1163, -1,1163, 1161, 1159, -1,1049, 1050, + 1162, -1,1162, 1163, 1049, -1,1161, 1163, 1162, -1,3318, 1160, 1175, -1,3319, 1175, + 1174, -1,1160, 3318, 1159, -1,1158, 1159, 3318, -1,1176, 3318, 3319, -1,1175, 3319, + 3318, -1,1173, 3319, 1174, -1,1171, 1005, 1170, -1,1172, 1171, 3320, -1,1171, 1170, + 3320, -1,3319, 1173, 3320, -1,1166, 3320, 1170, -1,1173, 1172, 3320, -1,3320, 1178, + 3319, -1,1164, 1180, 3320, -1,1178, 3320, 1179, -1,1178, 1177, 3319, -1,1177, 1176, + 3319, -1,3318, 1176, 1158, -1,1007, 1169, 1170, -1,1167, 1166, 1169, -1,1166, 1170, + 1169, -1,1165, 3320, 1166, -1,1168, 1167, 1169, -1,3320, 1165, 1164, -1,1179, 3320, + 1180, -1,1187, 1186, 1045, -1,1185, 1045, 1186, -1,1185, 1184, 1181, -1,1181, 1045, + 1185, -1,1188, 1187, 1046, -1,1045, 1046, 1187, -1,1046, 1189, 1188, -1,1191, 1189, + 1046, -1,1184, 1182, 1181, -1,1184, 1183, 1182, -1,1193, 1192, 1191, -1,1191, 1031, + 1193, -1,1033, 1192, 1193, -1,1191, 1046, 1031, -1,1190, 1189, 1191, -1,1008, 1209, + 927, -1,1008, 927, 928, -1,926, 1208, 1207, -1,1208, 926, 927, -1,927, 1209, 1208, -1, + 925, 926, 1207, -1,928, 1007, 1008, -1,928, 1179, 1180, -1,1210, 1180, 1164, -1,1210, + 1168, 1169, -1,1169, 928, 1210, -1,1180, 1210, 928, -1,1007, 928, 1169, -1,924, 1206, + 1205, -1,925, 1206, 924, -1,923, 924, 1205, -1,922, 923, 1204, -1,1205, 1204, 923, -1, + 921, 922, 1203, -1,1204, 1203, 922, -1,1202, 920, 921, -1,1201, 920, 1202, -1,1200, + 918, 1201, -1,1201, 919, 920, -1,918, 919, 1201, -1,1203, 1202, 921, -1,925, 1207, + 1206, -1,929, 1179, 928, -1,1194, 931, 932, -1,1194, 933, 934, -1,935, 1194, 934, -1, + 933, 1194, 932, -1,937, 1194, 936, -1,935, 936, 1194, -1,1027, 1194, 937, -1,1027, + 938, 909, -1,1027, 910, 1043, -1,1027, 937, 938, -1,909, 910, 1027, -1,1024, 1043, + 910, -1,1199, 916, 917, -1,1200, 1199, 917, -1,1198, 916, 1199, -1,1198, 1197, 915, -1, + 914, 915, 1197, -1,1198, 915, 916, -1,918, 1200, 917, -1,913, 986, 912, -1,1024, + 912, 986, -1,912, 1024, 911, -1,910, 911, 1024, -1,1197, 1196, 914, -1,1195, 914, + 1196, -1,914, 1195, 913, -1,986, 913, 1195, -1,897, 1213, 1177, -1,1217, 1213, 897, -1, + 1211, 897, 1177, -1,1220, 1216, 886, -1,1216, 1213, 1217, -1,1214, 1216, 1220, -1, + 1214, 1213, 1216, -1,929, 1212, 1179, -1,1211, 1212, 929, -1,1177, 1212, 1211, -1, + 1215, 931, 1222, -1,1221, 886, 1215, -1,1214, 1219, 983, -1,983, 1219, 1218, -1,1214, + 1220, 1219, -1,1228, 982, 1229, -1,983, 1218, 1229, -1,1228, 1227, 1194, -1,1194, + 982, 1228, -1,1229, 982, 983, -1,931, 1223, 1222, -1,1215, 1222, 1221, -1,1194, 1226, + 1225, -1,1224, 931, 1194, -1,1225, 1224, 1194, -1,1226, 1194, 1227, -1,1223, 931, + 1224, -1,886, 1221, 1220, -1,1232, 1231, 1194, -1,1231, 1230, 1194, -1,1194, 1027, + 1232, -1,1194, 985, 982, -1,1046, 1194, 1031, -1,1194, 1230, 1031, -1,985, 1194, + 1046, -1,1210, 1233, 1168, -1,1233, 1167, 1168, -1,1167, 1233, 1166, -1,1165, 1233, + 1210, -1,3717, 1166, 1233, -1,3717, 1233, 1165, -1,1165, 1234, 1164, -1,1210, 1234, + 1165, -1,3321, 1158, 1237, -1,1236, 1237, 1177, -1,3322, 3321, 1236, -1,1237, 1236, + 3321, -1,3719, 3718, 1240, -1,3322, 1236, 1240, -1,3322, 1239, 3321, -1,3321, 1238, + 1158, -1,3718, 1235, 984, -1,1239, 1049, 1238, -1,3322, 1240, 1239, -1,984, 1240, + 3718, -1,3719, 1240, 1236, -1,1239, 1238, 3321, -1,1235, 3718, 983, -1,3720, 1244, + 1242, -1,1245, 1246, 1244, -1,1244, 1241, 1242, -1,1241, 1244, 1246, -1,1242, 1243, + 3720, -1,1250, 1249, 1248, -1,1248, 1247, 1250, -1,1292, 1243, 1241, -1,1292, 1291, + 1252, -1,1252, 1291, 1290, -1,1243, 1292, 1251, -1,1243, 1251, 1294, -1,1243, 1294, + 1293, -1,1290, 1253, 1252, -1,1290, 1254, 1253, -1,1292, 1252, 1251, -1,1289, 1254, + 1290, -1,1288, 1255, 1289, -1,1256, 1255, 1288, -1,1257, 1287, 1286, -1,1288, 1287, + 1256, -1,1287, 1257, 1256, -1,1255, 1254, 1289, -1,1286, 1285, 1258, -1,1259, 1258, + 1285, -1,1257, 1286, 1258, -1,1259, 1284, 1283, -1,1285, 1284, 1259, -1,1260, 1259, + 1283, -1,1273, 1272, 1271, -1,1274, 1270, 1269, -1,1271, 1270, 1273, -1,1273, 1270, + 1274, -1,1269, 1268, 1275, -1,1276, 1275, 1268, -1,1276, 1267, 1266, -1,1268, 1267, + 1276, -1,1277, 1276, 1266, -1,1275, 1274, 1269, -1,1280, 1262, 1281, -1,1263, 1262, + 1280, -1,1261, 1281, 1262, -1,1283, 1282, 1260, -1,1281, 1261, 1282, -1,1261, 1260, + 1282, -1,1278, 1277, 1265, -1,1264, 1278, 1265, -1,1280, 1279, 1263, -1,1279, 1264, + 1263, -1,1278, 1264, 1279, -1,1265, 1277, 1266, -1,1301, 1302, 1303, -1,1247, 1303, + 1250, -1,1303, 1247, 1301, -1,1250, 1303, 3323, -1,1300, 1249, 3323, -1,1300, 3324, + 1299, -1,3324, 1300, 3323, -1,3324, 3323, 1296, -1,1299, 3324, 1298, -1,1249, 1250, + 3323, -1,1303, 1295, 3323, -1,1303, 1305, 1295, -1,1296, 1298, 3324, -1,1295, 1296, + 3323, -1,1298, 1296, 1245, -1,1293, 1245, 1297, -1,1244, 1243, 1297, -1,1245, 1244, + 1297, -1,1298, 1245, 3721, -1,1305, 1303, 1304, -1,1245, 1293, 3721, -1,1318, 1317, + 1316, -1,3325, 1315, 1314, -1,1316, 1315, 1318, -1,3326, 1314, 1313, -1,1312, 1311, + 1310, -1,1312, 1248, 1311, -1,1311, 1249, 1310, -1,1313, 1312, 3327, -1,1315, 3325, + 1318, -1,1294, 1307, 1306, -1,1307, 1294, 1251, -1,3325, 1294, 1306, -1,1293, 1294, + 3325, -1,1314, 3326, 3325, -1,1308, 3325, 3326, -1,3327, 1309, 1313, -1,3326, 1313, + 1309, -1,1310, 1309, 3327, -1,1308, 3326, 1309, -1,1308, 1293, 3325, -1,1312, 1310, + 3327, -1,1318, 3325, 1306, -1,1271, 1321, 1320, -1,1320, 1321, 1319, -1,1322, 1323, + 1324, -1,1324, 1319, 1322, -1,1322, 1319, 1321, -1,1321, 1271, 3328, -1,3329, 1322, + 1321, -1,1322, 1329, 1323, -1,3330, 1329, 1322, -1,3328, 1271, 1325, -1,3328, 1272, + 1326, -1,1272, 3328, 1325, -1,3328, 1326, 3329, -1,3329, 3330, 1322, -1,3330, 3329, + 1327, -1,1327, 1328, 3330, -1,3329, 1326, 1327, -1,3330, 1328, 1329, -1,3328, 3329, + 1321, -1,1345, 1324, 1344, -1,3331, 1344, 1343, -1,3333, 1342, 1341, -1,3334, 1341, + 1340, -1,1342, 3332, 1343, -1,1344, 3331, 1345, -1,1319, 1345, 3331, -1,1346, 3331, + 3332, -1,1343, 3332, 3331, -1,1341, 3334, 3333, -1,1348, 3333, 3334, -1,1349, 3334, + 3335, -1,1340, 3335, 3334, -1,3333, 1347, 3332, -1,1342, 3333, 3332, -1,3336, 3335, + 1340, -1,3336, 1339, 1338, -1,3337, 1338, 1337, -1,1336, 1335, 3339, -1,1335, 1334, + 3340, -1,3338, 1337, 1336, -1,3341, 1334, 1333, -1,3336, 1338, 3337, -1,1351, 3336, + 3337, -1,3342, 1333, 1332, -1,1332, 1331, 3343, -1,1330, 1317, 3345, -1,3344, 1331, + 1330, -1,3337, 1337, 3338, -1,3336, 1340, 1339, -1,3336, 1350, 3335, -1,1346, 3332, + 1347, -1,1347, 3333, 1348, -1,1336, 3339, 3338, -1,3338, 3339, 1353, -1,3339, 3340, + 1354, -1,1335, 3340, 3339, -1,1349, 1348, 3334, -1,1319, 3331, 1346, -1,1349, 3335, + 1350, -1,1350, 3336, 1351, -1,3337, 3338, 1352, -1,3339, 1354, 1353, -1,3338, 1353, + 1352, -1,1351, 3337, 1352, -1,1355, 1354, 3340, -1,1333, 3342, 3341, -1,1357, 3341, + 3342, -1,1358, 3342, 3343, -1,1332, 3343, 3342, -1,1330, 3345, 3344, -1,1359, 3344, + 3345, -1,1360, 3345, 1318, -1,1317, 1318, 3345, -1,3344, 1358, 3343, -1,1331, 3344, + 3343, -1,3341, 1356, 1355, -1,3341, 1357, 1356, -1,3344, 1359, 1358, -1,1318, 1306, + 1360, -1,3345, 1360, 1359, -1,3342, 1358, 1357, -1,1355, 3340, 3341, -1,1334, 3341, + 3340, -1,1316, 1317, 1377, -1,1317, 1381, 1378, -1,1315, 1316, 1377, -1,1374, 1312, + 1313, -1,1313, 1314, 1375, -1,1314, 1315, 1376, -1,1312, 1373, 1248, -1,1379, 1381, + 1380, -1,1378, 1381, 1379, -1,1317, 1378, 1377, -1,1377, 1376, 1315, -1,1376, 1375, + 1314, -1,1313, 1375, 1374, -1,1374, 1373, 1312, -1,1323, 1328, 1362, -1,1324, 1323, + 1248, -1,1361, 1323, 1362, -1,1247, 1248, 1323, -1,1370, 1324, 1248, -1,1366, 1363, + 1324, -1,1323, 1361, 1247, -1,1363, 1365, 1364, -1,1324, 1370, 1369, -1,1248, 1371, + 1370, -1,1248, 1372, 1371, -1,1324, 1367, 1366, -1,1367, 1324, 1368, -1,1324, 1369, + 1368, -1,1365, 1363, 1366, -1,1373, 1372, 1248, -1,1307, 1251, 1398, -1,3346, 1398, + 1397, -1,3348, 1396, 1395, -1,3349, 1395, 1394, -1,1396, 3347, 1397, -1,3346, 1397, + 3347, -1,1306, 1307, 3346, -1,1360, 3346, 3347, -1,3347, 1396, 3348, -1,1394, 3350, + 3349, -1,3349, 3348, 1395, -1,1394, 1393, 3350, -1,1357, 3349, 3350, -1,3349, 1358, + 3348, -1,3351, 3350, 1393, -1,3348, 1359, 3347, -1,1307, 1398, 3346, -1,1392, 1391, + 3352, -1,1391, 1390, 3353, -1,1389, 1388, 3355, -1,1388, 1387, 3356, -1,3354, 1390, + 1389, -1,1385, 1384, 3359, -1,1386, 3357, 1387, -1,1385, 3358, 1386, -1,1383, 1384, + 1271, -1,1384, 1383, 1320, -1,3360, 1384, 1320, -1,3352, 3351, 1392, -1,3351, 1393, + 1392, -1,3351, 1356, 3350, -1,1360, 3347, 1359, -1,1359, 3348, 1358, -1,1391, 3353, + 3352, -1,3352, 3353, 1354, -1,3353, 3354, 1353, -1,1390, 3354, 3353, -1,1357, 1358, + 3349, -1,1306, 3346, 1360, -1,1357, 3350, 1356, -1,1356, 3351, 1355, -1,3352, 1354, + 1355, -1,3354, 1352, 1353, -1,3353, 1353, 1354, -1,3351, 3352, 1355, -1,1351, 1352, + 3354, -1,1388, 3356, 3355, -1,3356, 3357, 1350, -1,3357, 3358, 1349, -1,1387, 3357, + 3356, -1,1385, 3359, 3358, -1,3359, 3360, 1347, -1,1320, 1382, 3360, -1,3360, 1382, + 1346, -1,3358, 3359, 1348, -1,1384, 3360, 3359, -1,1351, 3355, 3356, -1,1386, 3358, + 3357, -1,3356, 1350, 1351, -1,3357, 1349, 1350, -1,3359, 1347, 1348, -1,1382, 1319, + 1346, -1,3360, 1346, 1347, -1,3358, 1348, 1349, -1,1351, 3354, 3355, -1,1389, 3355, + 3354, -1,3361, 1415, 1416, -1,1414, 1415, 3361, -1,3362, 1413, 1414, -1,1400, 1416, + 1399, -1,1405, 1406, 1407, -1,1404, 1361, 1405, -1,1404, 1405, 1409, -1,1407, 1408, + 1405, -1,1409, 1405, 1408, -1,1302, 1409, 1410, -1,1411, 3363, 1410, -1,1413, 3362, + 1412, -1,1414, 3361, 3362, -1,3362, 3361, 1402, -1,1412, 3362, 3363, -1,1401, 1402, + 3361, -1,1403, 3362, 1402, -1,1403, 3363, 3362, -1,3361, 1400, 1401, -1,1416, 1400, + 3361, -1,1302, 1410, 3363, -1,1404, 1302, 1301, -1,1404, 1409, 1302, -1,1404, 1301, + 1247, -1,1303, 1403, 1304, -1,1302, 3363, 1303, -1,3363, 1403, 1303, -1,3363, 1411, + 1412, -1,3722, 3364, 1432, -1,1430, 3364, 1433, -1,1050, 1434, 3366, -1,3365, 3366, + 1428, -1,3366, 3365, 1050, -1,1434, 1425, 3366, -1,1050, 3365, 1433, -1,1429, 1433, + 3365, -1,1175, 1160, 1431, -1,1431, 1174, 1175, -1,1160, 1432, 1431, -1,1432, 1430, + 1431, -1,1432, 3364, 1430, -1,1430, 1433, 1429, -1,3365, 1428, 1429, -1,1433, 3364, + 3722, -1,3366, 1426, 1428, -1,1425, 1435, 1424, -1,1435, 1425, 1434, -1,1424, 1435, + 3367, -1,1436, 1053, 1417, -1,1424, 3367, 1423, -1,1436, 1423, 3367, -1,1436, 3367, + 1435, -1,1417, 1422, 1436, -1,1426, 1427, 1428, -1,1421, 1422, 1419, -1,1419, 1422, + 1417, -1,1417, 1418, 1419, -1,1421, 1419, 1420, -1,1423, 1436, 1422, -1,1425, 1426, + 3366, -1,1440, 1172, 1173, -1,1173, 1174, 1440, -1,1431, 3368, 1174, -1,3369, 1431, + 1430, -1,1440, 1326, 1272, -1,1326, 1440, 3368, -1,3368, 3369, 1327, -1,3369, 3368, + 1431, -1,1327, 3369, 1328, -1,3368, 1327, 1326, -1,1440, 1174, 3368, -1,1430, 3370, + 3369, -1,1438, 3370, 1429, -1,1429, 3370, 1430, -1,1428, 1427, 1437, -1,1428, 1437, + 1429, -1,1438, 1429, 1437, -1,3370, 1439, 1328, -1,1439, 3370, 1361, -1,1437, 1406, + 1438, -1,1438, 1361, 3370, -1,3370, 1328, 3369, -1,1442, 1443, 3371, -1,1442, 1415, + 1443, -1,1443, 1420, 3371, -1,1419, 1418, 1441, -1,3371, 1441, 1399, -1,1441, 3371, + 1419, -1,3371, 1399, 1442, -1,1419, 3371, 1420, -1,1038, 1444, 1037, -1,1037, 1444, + 1445, -1,1445, 1446, 1036, -1,1035, 1036, 1446, -1,1445, 1036, 1037, -1,1447, 1289, + 1290, -1,1448, 1447, 1040, -1,1026, 1025, 1289, -1,1026, 1447, 1448, -1,1447, 1026, + 1289, -1,1465, 988, 988, -1,1465, 1025, 988, -1,3372, 989, 3373, -1,989, 3372, 988, -1, + 3373, 990, 3374, -1,990, 3373, 989, -1,3372, 3373, 1463, -1,3372, 1465, 988, -1,3375, + 991, 992, -1,3376, 992, 993, -1,3374, 991, 3375, -1,991, 3374, 990, -1,3378, 994, + 995, -1,3377, 993, 994, -1,3379, 995, 996, -1,3373, 3374, 1462, -1,1289, 1465, 1464, -1, + 3374, 3375, 1462, -1,3372, 1463, 1464, -1,1464, 1465, 3372, -1,1461, 1462, 3375, -1, + 3373, 1462, 1463, -1,3375, 3376, 1461, -1,3376, 3377, 1459, -1,3377, 3376, 993, -1, + 3378, 3377, 994, -1,3377, 3378, 1458, -1,1460, 3376, 1459, -1,1458, 3379, 1457, -1, + 1458, 1459, 3377, -1,3379, 1458, 3378, -1,3378, 995, 3379, -1,3376, 1460, 1461, -1, + 3375, 992, 3376, -1,996, 997, 3379, -1,997, 998, 3380, -1,3380, 3381, 1455, -1,3380, + 998, 3381, -1,999, 3382, 3381, -1,3382, 999, 1000, -1,998, 999, 3381, -1,3381, 3382, + 1454, -1,3382, 1000, 3383, -1,3380, 1457, 3379, -1,1449, 1172, 1440, -1,3384, 1001, + 1002, -1,3386, 1003, 1004, -1,3385, 1002, 1003, -1,1004, 1005, 1440, -1,3383, 1000, + 1001, -1,1440, 1005, 1449, -1,1457, 3380, 1456, -1,3383, 1454, 3382, -1,3384, 3383, + 1001, -1,1453, 3383, 3384, -1,1456, 3380, 1455, -1,1453, 1454, 3383, -1,3381, 1454, + 1455, -1,3384, 1452, 1453, -1,3385, 3386, 1450, -1,3386, 3385, 1003, -1,1440, 3386, + 1004, -1,3386, 1440, 1272, -1,1451, 1452, 3385, -1,1272, 1450, 3386, -1,1451, 3385, + 1450, -1,3385, 1452, 3384, -1,3384, 1002, 3385, -1,3380, 3379, 997, -1,1446, 1445, + 1468, -1,1445, 1444, 3387, -1,1241, 1468, 3387, -1,3387, 1292, 1241, -1,3388, 1292, + 3387, -1,1468, 1445, 3387, -1,3387, 1444, 3388, -1,3389, 3388, 1038, -1,1038, 3388, + 1444, -1,3389, 1038, 1466, -1,1467, 1466, 1040, -1,1291, 3389, 1290, -1,3389, 1291, + 3388, -1,1467, 1290, 3389, -1,3389, 1466, 1467, -1,3388, 1291, 1292, -1,1246, 1468, + 1241, -1,1245, 1468, 1246, -1,3390, 1476, 3391, -1,1476, 3390, 1245, -1,3391, 1476, + 3392, -1,3390, 3391, 1474, -1,3390, 1468, 1245, -1,1468, 1475, 1446, -1,1468, 3390, + 1475, -1,1474, 3392, 1473, -1,1474, 1475, 3390, -1,1473, 3392, 3393, -1,3392, 1474, + 3391, -1,1476, 1295, 3392, -1,1304, 3393, 3392, -1,3392, 1477, 1304, -1,1478, 1401, + 3394, -1,1403, 1478, 3393, -1,1304, 1403, 3393, -1,3393, 3394, 1472, -1,3394, 3393, + 1478, -1,1472, 3394, 1471, -1,1472, 1473, 3393, -1,1471, 1469, 1470, -1,1469, 1471, + 3394, -1,3394, 1401, 1469, -1,1477, 3392, 1295, -1,1446, 1475, 1488, -1,1488, 1475, + 3395, -1,1474, 1473, 3396, -1,3395, 3396, 1487, -1,3396, 3395, 1474, -1,1473, 3397, + 3396, -1,1474, 3395, 1475, -1,1488, 3395, 1033, -1,1488, 1033, 1034, -1,1034, 1035, + 1488, -1,3396, 1486, 1487, -1,1487, 1033, 3395, -1,1190, 1486, 3397, -1,1190, 3397, + 3398, -1,3396, 3397, 1486, -1,3397, 1473, 1472, -1,1484, 3398, 1483, -1,3399, 3398, + 1472, -1,3398, 1484, 1485, -1,1472, 3398, 3397, -1,1471, 1470, 1479, -1,1483, 3398, + 3399, -1,1479, 3399, 1471, -1,1471, 3399, 1472, -1,1480, 3399, 1479, -1,1483, 3399, + 1482, -1,1481, 3399, 1183, -1,1481, 1482, 3399, -1,1183, 3399, 1480, -1,1181, 1480, + 1479, -1,3398, 1485, 1190, -1,1497, 1498, 1519, -1,1504, 1497, 1519, -1,1497, 1504, + 1496, -1,1498, 1518, 1519, -1,1499, 1500, 1517, -1,1517, 1518, 1499, -1,1499, 1518, + 1498, -1,1504, 1505, 1495, -1,1494, 1495, 1505, -1,1505, 1506, 1494, -1,1504, 1495, + 1496, -1,1506, 1507, 1493, -1,1492, 1493, 1507, -1,1492, 1507, 1508, -1,1506, 1493, + 1494, -1,1517, 1500, 1516, -1,1516, 1501, 1515, -1,1501, 1516, 1500, -1,1502, 1514, + 1515, -1,1515, 1501, 1502, -1,1503, 1513, 1514, -1,1513, 1229, 1512, -1,1229, 1513, + 1503, -1,1503, 1514, 1502, -1,1491, 1509, 1490, -1,1508, 1491, 1492, -1,1491, 1508, + 1509, -1,1509, 1510, 1490, -1,1511, 1512, 1218, -1,1489, 1490, 1510, -1,1489, 1511, + 1218, -1,1512, 1229, 1218, -1,1489, 1510, 1511, -1,3403, 1527, 1528, -1,1229, 1503, + 3734, -1,3402, 1528, 1529, -1,1501, 3730, 3731, -1,3730, 3401, 1529, -1,3730, 1501, + 1500, -1,3402, 3403, 1528, -1,3403, 3402, 1499, -1,3404, 3403, 1498, -1,3403, 3404, + 1527, -1,3401, 1500, 3402, -1,3401, 3402, 1529, -1,1501, 3729, 3733, -1,1527, 3404, + 1526, -1,1524, 1525, 3405, -1,1524, 3406, 1523, -1,1522, 1523, 3407, -1,3410, 1491, + 3728, -1,1526, 3405, 1525, -1,1489, 1218, 3723, -1,3407, 1523, 3406, -1,3406, 3405, + 1496, -1,3407, 3406, 1495, -1,3408, 1522, 3407, -1,1521, 3408, 3409, -1,1521, 1522, + 3408, -1,3409, 3408, 1493, -1,3409, 1492, 3726, -1,3407, 1494, 3408, -1,3406, 1524, + 3405, -1,1526, 3404, 3405, -1,3404, 1497, 3405, -1,3400, 3732, 1501, -1,1502, 1530, + 1503, -1,3731, 3732, 3400, -1,3401, 3730, 1500, -1,1530, 3734, 1503, -1,1499, 3402, + 1500, -1,3400, 1501, 3731, -1,1498, 3403, 1499, -1,1496, 3405, 1497, -1,1502, 1501, + 3733, -1,3732, 3729, 1501, -1,1496, 1495, 3406, -1,1497, 3404, 1498, -1,1495, 1494, + 3407, -1,3725, 3724, 1491, -1,3408, 1494, 1493, -1,1520, 1489, 3723, -1,1493, 1492, + 3409, -1,3409, 3726, 1521, -1,3726, 1492, 1491, -1,3728, 3727, 3410, -1,3727, 1491, + 3410, -1,1490, 1489, 1520, -1,3727, 3726, 1491, -1,3725, 1491, 1490, -1,1520, 3725, + 1490, -1,1502, 3733, 1530, -1,3724, 3728, 1491, -1,1513, 1512, 1532, -1,1514, 1513, + 3411, -1,3411, 3412, 1514, -1,3411, 1532, 1070, -1,3412, 3411, 1071, -1,3411, 1513, + 1532, -1,1514, 3412, 1515, -1,1516, 1515, 3413, -1,1517, 1516, 3414, -1,1531, 1519, + 3417, -1,1531, 1504, 1519, -1,3416, 1519, 1518, -1,1517, 3415, 1518, -1,3412, 3413, + 1515, -1,3414, 3413, 1073, -1,1071, 3411, 1070, -1,3412, 1071, 1072, -1,3413, 3414, + 1516, -1,1072, 3413, 3412, -1,1073, 1074, 3414, -1,1072, 1073, 3413, -1,3414, 1074, + 1075, -1,3415, 3416, 1518, -1,3416, 3415, 1075, -1,3417, 3416, 1076, -1,3416, 3417, + 1519, -1,1075, 1076, 3416, -1,1077, 1062, 3417, -1,1076, 1077, 3417, -1,3415, 3414, + 1075, -1,3417, 1062, 1531, -1,3414, 3415, 1517, -1,1505, 1504, 1531, -1,1506, 1505, + 3418, -1,3418, 3419, 1506, -1,3418, 1531, 1062, -1,3419, 3418, 1063, -1,3418, 1505, + 1531, -1,1506, 3419, 1507, -1,1508, 1507, 3420, -1,1509, 1508, 3421, -1,1532, 1511, + 3424, -1,1532, 1512, 1511, -1,3423, 1511, 1510, -1,1509, 3422, 1510, -1,3419, 3420, + 1507, -1,3421, 3420, 1065, -1,1063, 3418, 1062, -1,3419, 1063, 1064, -1,3420, 3421, + 1508, -1,1064, 3420, 3419, -1,1065, 1066, 3421, -1,1064, 1065, 3420, -1,3421, 1066, + 1067, -1,3422, 3423, 1510, -1,3423, 3422, 1067, -1,3424, 3423, 1068, -1,3423, 3424, + 1511, -1,1067, 1068, 3423, -1,1069, 1070, 3424, -1,1068, 1069, 3424, -1,3422, 3421, + 1067, -1,3424, 1070, 1532, -1,3421, 3422, 1509, -1,1553, 1187, 1552, -1,1552, 1187, + 1533, -1,1187, 1553, 1554, -1,1533, 1551, 1552, -1,1551, 1533, 1534, -1,1541, 1186, + 1556, -1,1554, 1186, 1187, -1,1555, 1186, 1554, -1,1557, 1541, 1556, -1,1540, 1541, + 1557, -1,1542, 1540, 1557, -1,1556, 1186, 1555, -1,1551, 1534, 1550, -1,1550, 1534, + 1549, -1,1548, 1549, 1535, -1,1536, 1547, 1548, -1,1537, 1546, 1547, -1,1547, 1536, + 1537, -1,1536, 1548, 1535, -1,1534, 1535, 1549, -1,1543, 1544, 1539, -1,1543, 1539, + 1540, -1,1545, 1537, 1538, -1,1537, 1545, 1546, -1,1539, 1544, 1538, -1,1538, 1544, + 1545, -1,1543, 1540, 1542, -1,1534, 1533, 1565, -1,1535, 1534, 3425, -1,1188, 3425, + 1534, -1,1537, 1536, 3427, -1,3426, 1536, 1535, -1,1188, 1558, 3425, -1,1534, 1565, + 1188, -1,1538, 1537, 3428, -1,3430, 1540, 1539, -1,1541, 1540, 1564, -1,1563, 1185, + 1564, -1,1563, 1564, 1540, -1,1539, 1538, 3429, -1,1535, 3425, 3426, -1,3426, 3427, + 1536, -1,3427, 3426, 1559, -1,3428, 3427, 1560, -1,3427, 3428, 1537, -1,1190, 1559, + 3426, -1,1560, 3427, 1559, -1,3426, 1558, 1190, -1,3426, 3425, 1558, -1,3428, 1560, + 1561, -1,3429, 3430, 1539, -1,3430, 3429, 1562, -1,3431, 3430, 1183, -1,3430, 3431, + 1540, -1,1183, 3430, 1562, -1,1563, 3431, 1183, -1,1562, 3429, 1561, -1,3429, 3428, + 1561, -1,3431, 1563, 1540, -1,3428, 3429, 1538, -1,1185, 1186, 1541, -1,1188, 1533, + 1187, -1,1093, 1078, 3432, -1,1092, 1093, 3432, -1,1092, 3433, 1091, -1,3433, 1092, + 3432, -1,3433, 3432, 1549, -1,1091, 3433, 3434, -1,1078, 1566, 3432, -1,1089, 1090, + 3435, -1,3436, 1088, 1089, -1,1088, 3437, 1087, -1,3435, 3434, 1547, -1,3438, 1086, + 1087, -1,3435, 3436, 1089, -1,3435, 1090, 3434, -1,1090, 1091, 3434, -1,3433, 1548, + 3434, -1,3434, 1548, 1547, -1,3432, 1566, 1549, -1,1549, 1566, 1550, -1,1548, 3433, + 1549, -1,1546, 3436, 3435, -1,1546, 3435, 1547, -1,3436, 1546, 1545, -1,3438, 1543, + 1567, -1,1544, 3438, 3437, -1,3438, 1567, 1086, -1,3437, 3438, 1087, -1,1545, 1544, + 3437, -1,1543, 1542, 1567, -1,1544, 1543, 3438, -1,3437, 3436, 1545, -1,3436, 3437, + 1088, -1,1085, 1086, 3439, -1,1084, 1085, 3439, -1,1084, 3440, 1083, -1,3440, 1084, + 3439, -1,3440, 3439, 1557, -1,1083, 3440, 3441, -1,1086, 1567, 3439, -1,1081, 1082, + 3442, -1,3443, 1080, 1081, -1,1080, 3444, 1079, -1,3442, 3441, 1555, -1,3445, 1078, + 1079, -1,3442, 3443, 1081, -1,3442, 1082, 3441, -1,1082, 1083, 3441, -1,3440, 1556, + 3441, -1,3441, 1556, 1555, -1,3439, 1567, 1557, -1,1557, 1567, 1542, -1,1556, 3440, + 1557, -1,1554, 3443, 3442, -1,1554, 3442, 1555, -1,3443, 1554, 1553, -1,3445, 1551, + 1566, -1,1552, 3445, 3444, -1,3445, 1566, 1078, -1,3444, 3445, 1079, -1,1553, 1552, + 3444, -1,1551, 1550, 1566, -1,1552, 1551, 3445, -1,3444, 3443, 1553, -1,3443, 3444, + 1080, -1,1595, 1569, 1594, -1,1594, 1569, 1570, -1,1569, 1595, 1580, -1,1571, 1592, + 1593, -1,1592, 1571, 1572, -1,1594, 1570, 1593, -1,1593, 1570, 1571, -1,1568, 1580, + 1581, -1,1580, 1568, 1569, -1,1422, 1581, 1582, -1,1581, 1422, 1568, -1,1582, 1583, + 1579, -1,1579, 1584, 1578, -1,1584, 1579, 1583, -1,1582, 1579, 1422, -1,1591, 1572, + 1590, -1,1572, 1591, 1592, -1,1590, 1572, 1573, -1,1589, 1573, 1574, -1,1573, 1589, + 1590, -1,1588, 1574, 1587, -1,1574, 1588, 1589, -1,1578, 1586, 1576, -1,1585, 1578, + 1584, -1,1578, 1585, 1586, -1,1586, 1587, 1575, -1,1577, 1578, 1576, -1,1425, 1578, + 1577, -1,1576, 1586, 1575, -1,1587, 1574, 1575, -1,1602, 1603, 3446, -1,1596, 3446, + 1603, -1,3447, 1601, 1602, -1,3447, 3446, 1574, -1,1601, 3448, 1600, -1,3448, 1601, + 3447, -1,3447, 1573, 3448, -1,3447, 1602, 3446, -1,1603, 1408, 1596, -1,1599, 1600, + 3449, -1,1598, 1599, 3450, -1,1569, 3451, 1598, -1,3450, 3449, 1571, -1,1415, 3451, + 1597, -1,1415, 1598, 3451, -1,1598, 3450, 1570, -1,3450, 1599, 3449, -1,1600, 3448, + 3449, -1,3448, 1572, 3449, -1,1596, 1575, 1574, -1,1574, 1573, 3447, -1,1572, 3448, + 1573, -1,1571, 1570, 3450, -1,1571, 3449, 1572, -1,1570, 1569, 1598, -1,1420, 1597, + 1568, -1,1568, 1421, 1420, -1,1422, 1421, 1568, -1,1568, 1597, 1569, -1,3451, 1569, + 1597, -1,1574, 3446, 1596, -1,3452, 1437, 1427, -1,1596, 1408, 1407, -1,1406, 3452, + 1407, -1,3452, 1406, 1437, -1,1596, 1407, 3452, -1,1577, 3737, 3736, -1,1426, 3737, + 1577, -1,1426, 1577, 1576, -1,3452, 1575, 1596, -1,1575, 3452, 1427, -1,1576, 1575, + 1427, -1,1426, 1576, 3735, -1,1425, 1577, 3736, -1,1427, 3735, 1576, -1,1589, 1588, + 1605, -1,1590, 1589, 3453, -1,3453, 3454, 1590, -1,3453, 1605, 1102, -1,3454, 3453, + 1103, -1,3453, 1589, 1605, -1,1590, 3454, 1591, -1,1592, 1591, 3455, -1,1593, 1592, + 3456, -1,1604, 1595, 3459, -1,1604, 1580, 1595, -1,3458, 1595, 1594, -1,1593, 3457, + 1594, -1,3454, 3455, 1591, -1,3456, 3455, 1105, -1,1103, 3453, 1102, -1,3454, 1103, + 1104, -1,3455, 3456, 1592, -1,1104, 3455, 3454, -1,1105, 1106, 3456, -1,1104, 1105, + 3455, -1,3456, 1106, 1107, -1,3457, 3458, 1594, -1,3458, 3457, 1107, -1,3459, 3458, + 1108, -1,3458, 3459, 1595, -1,1107, 1108, 3458, -1,1109, 1094, 3459, -1,1108, 1109, + 3459, -1,3457, 3456, 1107, -1,3459, 1094, 1604, -1,3456, 3457, 1593, -1,1581, 1580, + 1604, -1,1582, 1581, 3460, -1,3460, 3461, 1582, -1,3460, 1604, 1094, -1,3461, 3460, + 1095, -1,3460, 1581, 1604, -1,1582, 3461, 1583, -1,1584, 1583, 3462, -1,1585, 1584, + 3463, -1,1605, 1587, 3466, -1,1605, 1588, 1587, -1,3465, 1587, 1586, -1,1585, 3464, + 1586, -1,3461, 3462, 1583, -1,3463, 3462, 1097, -1,1095, 3460, 1094, -1,3461, 1095, + 1096, -1,3462, 3463, 1584, -1,1096, 3462, 3461, -1,1097, 1098, 3463, -1,1096, 1097, + 3462, -1,3463, 1098, 1099, -1,3464, 3465, 1586, -1,3465, 3464, 1099, -1,3466, 3465, + 1100, -1,3465, 3466, 1587, -1,1099, 1100, 3465, -1,1101, 1102, 3466, -1,1100, 1101, + 3466, -1,3464, 3463, 1099, -1,3466, 1102, 1605, -1,3463, 3464, 1585, -1,1060, 1061, + 1606, -1,1606, 1607, 1060, -1,1611, 1645, 3467, -1,3467, 1645, 1644, -1,3469, 1643, + 1642, -1,3469, 1642, 1641, -1,1643, 3468, 1644, -1,3468, 1643, 3469, -1,1612, 3467, + 3468, -1,1613, 3468, 3469, -1,3469, 1641, 3470, -1,3471, 3470, 1640, -1,3470, 1641, + 1640, -1,1616, 3470, 3471, -1,1639, 3471, 1640, -1,3470, 1615, 3469, -1,3467, 1644, + 3468, -1,1609, 1608, 1645, -1,3472, 1639, 1638, -1,3472, 1638, 1637, -1,1636, 1635, + 3474, -1,1635, 1634, 3475, -1,1636, 3473, 1637, -1,3476, 1634, 1633, -1,3472, 1637, + 3473, -1,1619, 3472, 3473, -1,3476, 1633, 1632, -1,1632, 1631, 3477, -1,1630, 1629, + 1628, -1,3478, 1631, 1630, -1,3474, 3473, 1636, -1,3472, 3471, 1639, -1,3472, 1617, + 3471, -1,1645, 1611, 1610, -1,3467, 1612, 1611, -1,1612, 3468, 1613, -1,1613, 3469, + 1614, -1,3469, 1615, 1614, -1,3470, 1616, 1615, -1,3471, 1617, 1616, -1,3472, 1619, + 1618, -1,3473, 1620, 1619, -1,3472, 1618, 1617, -1,3474, 1620, 3473, -1,1635, 3475, + 3474, -1,1621, 3474, 3475, -1,1623, 3475, 3476, -1,1634, 3476, 3475, -1,1631, 3478, + 3477, -1,1625, 3477, 3478, -1,1626, 3478, 1628, -1,1630, 1628, 3478, -1,3477, 1624, + 3476, -1,1632, 3477, 3476, -1,3475, 1622, 1621, -1,3475, 1623, 1622, -1,3477, 1625, + 1624, -1,1628, 1627, 1626, -1,3478, 1626, 1625, -1,3476, 1624, 1623, -1,1621, 1620, + 3474, -1,1610, 1609, 1645, -1,1629, 1646, 1627, -1,1629, 1627, 1627, -1,1646, 1629, + 1648, -1,1647, 1646, 1648, -1,1649, 1648, 1665, -1,1664, 3479, 1665, -1,1649, 1665, + 3479, -1,1650, 1649, 3479, -1,1663, 3479, 1664, -1,3480, 1663, 1662, -1,3481, 1662, + 1661, -1,1655, 1661, 1660, -1,1662, 3481, 1654, -1,3480, 1662, 1654, -1,3481, 1661, + 1655, -1,3480, 3479, 1663, -1,3480, 1653, 3479, -1,1650, 3479, 1651, -1,1653, 3480, + 1654, -1,1652, 1651, 3479, -1,3479, 1653, 1652, -1,1659, 1655, 1660, -1,1655, 1654, + 3481, -1,1656, 1655, 1659, -1,1659, 1658, 1657, -1,1659, 1657, 1656, -1,1650, 1647, + 1649, -1,1669, 1670, 1668, -1,1666, 1667, 1668, -1,1668, 1670, 1666, -1,1671, 1056, + 1057, -1,1057, 1666, 1671, -1,1671, 1666, 1670, -1,1685, 3482, 1686, -1,1610, 1686, + 1687, -1,1684, 3482, 1685, -1,1687, 1686, 3482, -1,1674, 1687, 3482, -1,3483, 3482, + 1684, -1,3483, 1683, 1682, -1,3484, 1682, 1669, -1,1682, 3484, 3483, -1,1681, 3483, + 3484, -1,1667, 3484, 1668, -1,1669, 1668, 3484, -1,3483, 1684, 1683, -1,3483, 1679, + 3482, -1,1688, 1674, 1673, -1,1608, 1687, 1688, -1,1688, 1687, 1674, -1,1688, 1673, + 1672, -1,1675, 3482, 1676, -1,1677, 3482, 1678, -1,1677, 1676, 3482, -1,3483, 1681, + 1680, -1,1681, 3484, 1667, -1,3483, 1680, 1679, -1,1678, 3482, 1679, -1,1675, 1674, + 3482, -1,1045, 1693, 1694, -1,1693, 1045, 1692, -1,1181, 1691, 1692, -1,1692, 1045, + 1181, -1,1044, 1694, 1695, -1,1694, 1044, 1045, -1,1695, 1696, 1044, -1,1044, 1696, + 1698, -1,1181, 1689, 1691, -1,1689, 1690, 1691, -1,1698, 1699, 1700, -1,1700, 1660, + 1698, -1,1700, 1699, 1658, -1,1660, 1044, 1698, -1,1698, 1696, 1697, -1,1672, 1717, + 1688, -1,1688, 431, 1608, -1,431, 1645, 1608, -1,431, 1688, 1717, -1,431, 1677, 1678, -1, + 431, 1717, 1677, -1,431, 1678, 430, -1,1717, 1676, 1677, -1,427, 1793, 1794, -1,1797, + 426, 1796, -1,426, 1797, 1798, -1,432, 1645, 431, -1,426, 1798, 1799, -1,426, 1799, + 1800, -1,1645, 432, 1716, -1,1795, 1796, 426, -1,1794, 1795, 426, -1,1800, 1801, + 426, -1,427, 1794, 426, -1,425, 426, 1801, -1,427, 428, 1836, -1,1838, 1839, 1791, -1, + 1839, 1840, 1790, -1,1791, 1792, 1838, -1,1790, 1791, 1839, -1,1840, 1841, 1790, -1, + 1838, 1792, 1837, -1,1835, 1836, 428, -1,1834, 1835, 1701, -1,1834, 1701, 1833, -1, + 1836, 1837, 427, -1,1792, 1793, 1837, -1,1790, 1841, 1849, -1,1816, 1820, 1815, -1, + 1819, 1817, 1818, -1,1814, 1815, 1820, -1,1819, 1816, 1817, -1,1816, 1819, 1820, -1, + 1847, 1848, 1841, -1,1814, 1821, 1813, -1,1812, 1813, 1823, -1,1824, 1811, 1812, -1, + 3739, 1847, 3738, -1,1849, 1841, 1848, -1,1811, 1768, 1810, -1,1837, 1793, 427, -1, + 428, 1701, 1835, -1,1713, 435, 1712, -1,435, 1713, 434, -1,1712, 436, 1711, -1,436, + 1712, 435, -1,1711, 436, 437, -1,1841, 3738, 1847, -1,1715, 432, 433, -1,432, 1715, + 1716, -1,1715, 433, 1714, -1,434, 1714, 433, -1,434, 1713, 1714, -1,1711, 437, 1710, -1, + 1709, 1710, 438, -1,438, 1710, 437, -1,1709, 438, 439, -1,1709, 440, 1708, -1,440, + 1709, 439, -1,1708, 440, 441, -1,1842, 3739, 3738, -1,1707, 441, 442, -1,441, 1707, + 1708, -1,1707, 442, 1706, -1,1706, 443, 1705, -1,443, 1706, 442, -1,1705, 443, 444, -1, + 1803, 1804, 425, -1,1802, 1803, 425, -1,1774, 424, 425, -1,1805, 425, 1804, -1,1806, + 425, 1805, -1,1809, 1769, 1808, -1,424, 1733, 423, -1,1806, 1807, 1770, -1,1770, + 1807, 1808, -1,425, 1806, 1774, -1,1769, 1809, 1810, -1,1801, 1802, 425, -1,445, + 446, 1702, -1,1702, 446, 1629, -1,445, 1702, 1703, -1,444, 1703, 1704, -1,1703, 444, + 445, -1,444, 1704, 1705, -1,1648, 449, 1665, -1,448, 449, 1648, -1,447, 1648, 1629, -1, + 1648, 447, 448, -1,447, 1629, 446, -1,449, 420, 1664, -1,1846, 3739, 1842, -1,1824, + 1812, 1823, -1,1822, 1823, 1813, -1,1822, 1813, 1821, -1,1844, 1845, 1842, -1,1842, + 1845, 1846, -1,1843, 1844, 1842, -1,1828, 1762, 1827, -1,1825, 1826, 1766, -1,1824, + 1825, 1767, -1,1766, 1767, 1825, -1,1768, 1811, 1767, -1,1826, 1765, 1766, -1,1769, + 1810, 1768, -1,1764, 1826, 1827, -1,1764, 1827, 1763, -1,1762, 1828, 1761, -1,1764, + 1765, 1826, -1,1827, 1762, 1763, -1,1824, 1767, 1811, -1,1828, 1760, 1761, -1,1808, + 1769, 1770, -1,1831, 1832, 1701, -1,1830, 1831, 1701, -1,1828, 1829, 1760, -1,1788, + 1760, 1829, -1,1829, 1830, 1701, -1,1760, 1789, 1758, -1,1758, 1759, 1760, -1,1760, + 1788, 1789, -1,1787, 1788, 1701, -1,1701, 1786, 1787, -1,1701, 1788, 1829, -1,1772, + 1773, 1770, -1,1771, 1772, 1770, -1,1776, 1777, 424, -1,424, 1774, 1775, -1,1773, + 1774, 1770, -1,1756, 1785, 1786, -1,1757, 1784, 1785, -1,1782, 1783, 1722, -1,1783, + 1784, 1721, -1,1727, 424, 1777, -1,1701, 1756, 1786, -1,1806, 1770, 1774, -1,1833, + 1701, 1832, -1,1776, 424, 1775, -1,1726, 1778, 1725, -1,1725, 1778, 1779, -1,1726, + 1727, 1777, -1,1728, 1731, 1727, -1,1731, 424, 1727, -1,1730, 1728, 1729, -1,1730, + 1731, 1728, -1,1780, 1781, 1723, -1,1781, 1782, 1723, -1,1780, 1723, 1724, -1,1725, + 1779, 1724, -1,1724, 1779, 1780, -1,1733, 424, 1732, -1,1736, 423, 1735, -1,1735, + 423, 1734, -1,421, 422, 1744, -1,449, 1664, 1665, -1,1664, 420, 421, -1,423, 1733, + 1734, -1,423, 1737, 1741, -1,1737, 1738, 1740, -1,421, 1745, 1664, -1,422, 423, 1741, -1, + 423, 1736, 1737, -1,1731, 1732, 424, -1,1778, 1726, 1777, -1,1783, 1721, 1722, -1, + 1721, 1784, 1720, -1,1718, 1719, 1720, -1,1757, 1718, 1720, -1,1782, 1722, 1723, -1, + 1755, 1756, 1701, -1,1754, 1755, 1701, -1,1752, 1753, 1664, -1,1751, 1752, 1747, -1, + 1754, 1701, 1753, -1,1784, 1757, 1720, -1,1739, 1740, 1738, -1,1742, 1743, 422, -1, + 1741, 1742, 422, -1,1740, 1741, 1737, -1,1750, 1751, 1748, -1,1751, 1747, 1748, -1, + 1745, 1746, 1664, -1,1744, 1745, 421, -1,1752, 1746, 1747, -1,1748, 1749, 1750, -1, + 1743, 1744, 422, -1,1752, 1664, 1746, -1,1785, 1756, 1757, -1,1664, 1753, 1701, -1, + 1814, 1820, 1821, -1,1680, 1853, 378, -1,378, 1853, 1851, -1,1680, 378, 1852, -1, + 393, 1850, 1859, -1,1850, 1851, 1858, -1,1854, 1858, 1853, -1,1853, 1858, 1851, -1, + 1678, 1679, 430, -1,430, 1679, 1852, -1,1852, 1679, 1680, -1,1861, 428, 1855, -1, + 1855, 393, 1860, -1,1607, 1857, 1854, -1,1857, 1858, 1854, -1,1858, 1859, 1850, -1, + 1856, 1606, 1867, -1,1856, 1857, 1607, -1,1866, 1867, 1606, -1,1606, 1701, 1866, -1, + 1607, 1606, 1856, -1,1861, 1862, 428, -1,1860, 1861, 1855, -1,1864, 1865, 1701, -1, + 1863, 1701, 428, -1,1701, 1863, 1864, -1,1865, 1866, 1701, -1,1862, 1863, 428, -1, + 1859, 1860, 393, -1,1701, 1869, 1870, -1,1701, 1868, 1869, -1,1870, 1664, 1701, -1, + 1606, 1061, 1701, -1,1660, 1701, 1044, -1,1660, 1868, 1701, -1,1044, 1701, 1061, -1, + 1871, 1717, 1672, -1,1673, 1674, 1871, -1,1673, 1871, 1672, -1,1675, 1717, 1871, -1, + 3740, 1675, 1871, -1,3740, 1871, 1674, -1,1675, 1676, 1872, -1,1717, 1675, 1872, -1, + 1878, 1875, 3485, -1,3486, 3485, 1875, -1,1875, 1680, 1874, -1,1873, 3486, 1667, -1, + 1874, 1667, 3486, -1,3486, 1875, 1874, -1,3486, 1878, 3485, -1,3743, 3742, 1877, -1, + 1877, 3742, 1878, -1,1877, 1060, 1876, -1,3741, 1877, 1876, -1,1057, 3486, 1873, -1, + 1057, 1878, 3486, -1,3742, 1875, 1878, -1,1607, 3741, 1876, -1,3743, 1877, 3741, -1, + 1912, 1913, 1911, -1,1910, 1911, 1909, -1,1909, 1911, 1913, -1,1913, 1916, 1909, -1, + 1914, 1915, 1916, -1,1917, 1908, 1909, -1,1909, 1916, 1917, -1,1898, 1908, 1888, -1, + 1913, 1914, 1916, -1,1903, 1905, 1907, -1,1905, 1903, 1904, -1,1902, 1903, 1907, -1, + 1907, 1905, 1906, -1,1907, 1898, 1899, -1,1898, 1907, 1908, -1,1901, 1899, 1900, -1, + 1901, 1902, 1899, -1,1899, 1902, 1907, -1,1908, 1917, 1918, -1,1879, 1880, 1887, -1, + 1879, 1887, 1918, -1,1886, 1887, 1880, -1,1882, 1880, 1881, -1,1918, 1887, 1888, -1, + 1882, 1883, 1886, -1,1886, 1884, 1885, -1,1884, 1886, 1883, -1,1882, 1886, 1880, -1, + 1892, 1895, 1897, -1,1898, 1888, 1889, -1,1897, 1895, 1896, -1,1894, 1895, 1893, -1, + 1898, 1889, 1897, -1,1889, 1890, 1892, -1,1892, 1893, 1895, -1,1892, 1890, 1891, -1, + 1892, 1897, 1889, -1,1888, 1908, 1918, -1,1879, 1719, 1718, -1,1719, 1879, 1918, -1, + 1917, 1720, 1719, -1,1719, 1918, 1917, -1,1910, 1909, 1920, -1,1911, 1910, 3487, -1, + 1920, 3487, 1910, -1,3487, 1920, 1728, -1,3488, 3487, 1727, -1,3487, 3488, 1911, -1, + 1911, 3488, 3489, -1,1913, 1912, 3489, -1,3490, 1914, 1913, -1,1916, 1915, 3492, -1, + 1914, 3491, 1915, -1,3493, 1917, 1916, -1,1913, 3489, 3490, -1,1912, 1911, 3489, -1, + 3488, 1726, 3489, -1,3491, 3490, 1724, -1,1727, 3487, 1728, -1,3488, 1727, 1726, -1, + 3490, 3491, 1914, -1,1725, 3489, 1726, -1,1725, 1724, 3490, -1,1725, 3490, 3489, -1, + 3491, 1724, 1723, -1,3492, 3493, 1916, -1,3493, 3492, 1722, -1,1919, 3493, 1721, -1, + 3493, 1919, 1917, -1,1723, 1722, 3492, -1,1721, 1720, 1919, -1,1722, 1721, 3493, -1, + 3492, 3491, 1723, -1,3491, 3492, 1915, -1,1908, 1729, 1728, -1,1728, 1909, 1908, -1, + 1908, 1730, 1729, -1,1730, 1908, 1907, -1,1900, 1899, 1922, -1,1901, 1900, 3494, -1, + 1922, 3494, 1900, -1,3494, 1922, 1738, -1,3495, 3494, 1737, -1,3494, 3495, 1901, -1, + 1901, 3495, 3496, -1,1903, 1902, 3496, -1,3497, 1904, 1903, -1,1906, 1905, 3499, -1, + 1904, 3498, 1905, -1,3500, 1907, 1906, -1,1903, 3496, 3497, -1,1902, 1901, 3496, -1, + 3495, 1736, 3496, -1,3498, 3497, 1734, -1,1737, 3494, 1738, -1,3495, 1737, 1736, -1, + 3497, 3498, 1904, -1,1735, 3496, 1736, -1,1735, 1734, 3497, -1,1735, 3497, 3496, -1, + 3498, 1734, 1733, -1,3499, 3500, 1906, -1,3500, 3499, 1732, -1,1921, 3500, 1731, -1, + 3500, 1921, 1907, -1,1733, 1732, 3499, -1,1731, 1730, 1921, -1,1732, 1731, 3500, -1, + 3499, 3498, 1733, -1,3498, 3499, 1905, -1,1898, 1739, 1738, -1,1738, 1899, 1898, -1, + 1897, 1740, 1739, -1,1739, 1898, 1897, -1,1890, 1889, 1924, -1,1891, 1890, 3501, -1, + 1924, 3501, 1890, -1,3501, 1924, 1748, -1,3502, 3501, 1747, -1,3501, 3502, 1891, -1, + 1891, 3502, 3503, -1,1893, 1892, 3503, -1,3504, 1894, 1893, -1,1896, 1895, 3506, -1, + 1894, 3505, 1895, -1,3507, 1897, 1896, -1,1893, 3503, 3504, -1,1892, 1891, 3503, -1, + 3502, 1746, 3503, -1,3505, 3504, 1744, -1,1747, 3501, 1748, -1,3502, 1747, 1746, -1, + 3504, 3505, 1894, -1,1745, 3503, 1746, -1,1745, 1744, 3504, -1,1745, 3504, 3503, -1, + 3505, 1744, 1743, -1,3506, 3507, 1896, -1,3507, 3506, 1742, -1,1923, 3507, 1741, -1, + 3507, 1923, 1897, -1,1743, 1742, 3506, -1,1741, 1740, 1923, -1,1742, 1741, 3507, -1, + 3506, 3505, 1743, -1,3505, 3506, 1895, -1,1889, 1749, 1748, -1,1749, 1889, 1888, -1, + 1887, 1750, 1749, -1,1749, 1888, 1887, -1,1880, 1879, 1926, -1,1881, 1880, 3508, -1, + 1926, 3508, 1880, -1,3508, 1926, 1718, -1,3509, 3508, 1757, -1,3508, 3509, 1881, -1, + 1881, 3509, 3510, -1,1883, 1882, 3510, -1,3511, 1884, 1883, -1,1886, 1885, 3513, -1, + 1884, 3512, 1885, -1,3514, 1887, 1886, -1,1883, 3510, 3511, -1,1882, 1881, 3510, -1, + 3509, 1756, 3510, -1,3512, 3511, 1754, -1,1757, 3508, 1718, -1,3509, 1757, 1756, -1, + 3511, 3512, 1884, -1,1755, 3510, 1756, -1,1755, 1754, 3511, -1,1755, 3511, 3510, -1, + 3512, 1754, 1753, -1,3513, 3514, 1886, -1,3514, 3513, 1752, -1,1925, 3514, 1751, -1, + 3514, 1925, 1887, -1,1753, 1752, 3513, -1,1751, 1750, 1925, -1,1752, 1751, 3514, -1, + 3513, 3512, 1753, -1,3512, 3513, 1885, -1,1950, 1952, 1949, -1,1948, 1958, 3744, -1, + 1950, 1951, 1952, -1,1949, 1952, 1953, -1,1954, 1955, 1949, -1,1955, 1956, 1949, -1, + 1953, 1954, 1949, -1,1949, 1956, 1957, -1,1949, 1957, 1948, -1,1943, 1944, 1945, -1, + 1945, 1942, 1943, -1,1942, 1945, 1946, -1,1946, 1947, 1942, -1,1957, 1958, 1948, -1, + 3744, 1958, 1927, -1,1927, 1928, 1932, -1,1927, 1941, 1947, -1,1947, 3744, 1927, -1, + 1932, 1928, 1929, -1,1930, 1931, 1932, -1,1932, 1941, 1927, -1,1932, 1929, 1930, -1, + 1933, 1941, 1932, -1,1941, 1933, 1940, -1,1938, 1939, 1933, -1,1933, 1939, 1940, -1, + 1935, 1936, 1933, -1,1937, 1933, 1936, -1,1937, 1938, 1933, -1,1934, 1935, 1933, -1, + 1947, 1941, 1942, -1,1759, 1758, 1928, -1,1928, 1927, 1759, -1,1928, 1960, 1929, -1, + 1929, 1960, 3515, -1,3516, 1931, 1930, -1,3515, 3516, 1930, -1,1931, 3517, 1932, -1, + 1930, 1929, 3515, -1,1960, 1758, 3515, -1,3515, 1789, 3516, -1,1789, 3515, 1758, -1, + 1789, 1788, 3516, -1,3516, 1788, 1787, -1,3517, 1959, 1932, -1,1959, 3517, 1787, -1, + 1787, 1786, 1959, -1,3517, 3516, 1787, -1,3516, 3517, 1931, -1,1933, 1786, 1785, -1, + 1786, 1933, 1932, -1,1934, 1933, 1962, -1,1935, 1934, 3518, -1,1962, 3518, 1934, -1, + 3518, 1962, 1785, -1,3519, 3518, 1784, -1,3518, 3519, 1935, -1,1935, 3519, 3520, -1, + 1937, 1936, 3520, -1,3521, 1938, 1937, -1,1940, 1939, 3523, -1,1938, 3522, 1939, -1, + 3524, 1941, 1940, -1,1937, 3520, 3521, -1,1936, 1935, 3520, -1,3519, 1783, 3520, -1, + 3522, 3521, 1781, -1,1784, 3518, 1785, -1,3519, 1784, 1783, -1,3521, 3522, 1938, -1, + 1782, 3520, 1783, -1,1782, 1781, 3521, -1,1782, 3521, 3520, -1,3522, 1781, 1780, -1, + 3523, 3524, 1940, -1,3524, 3523, 1779, -1,1961, 3524, 1778, -1,3524, 1961, 1941, -1, + 1780, 1779, 3523, -1,1778, 1777, 1961, -1,1779, 1778, 3524, -1,3523, 3522, 1780, -1, + 3522, 3523, 1939, -1,1777, 1776, 1941, -1,1942, 1941, 1776, -1,1942, 1964, 1943, -1, + 1943, 1964, 3525, -1,3526, 1945, 1944, -1,3525, 3526, 1944, -1,1945, 3527, 1946, -1, + 1944, 1943, 3525, -1,1964, 1776, 3525, -1,3525, 1775, 3526, -1,1775, 3525, 1776, -1, + 1775, 1774, 3526, -1,3526, 1774, 1773, -1,3527, 1963, 1946, -1,1963, 3527, 1773, -1, + 1773, 1772, 1963, -1,3527, 3526, 1773, -1,3526, 3527, 1945, -1,1772, 1771, 1946, -1, + 1947, 1946, 1771, -1,1948, 1966, 1949, -1,1948, 1947, 3528, -1,3528, 1966, 1948, -1, + 1770, 1769, 3528, -1,1966, 3528, 1769, -1,1771, 1770, 1965, -1,3528, 1965, 1770, -1, + 1947, 1965, 3528, -1,1950, 1949, 1966, -1,1951, 1950, 3529, -1,1966, 3529, 1950, -1, + 3529, 1966, 1769, -1,3530, 3529, 1768, -1,3529, 3530, 1951, -1,1951, 3530, 3531, -1, + 1953, 1952, 3531, -1,3532, 1954, 1953, -1,1956, 1955, 3534, -1,1954, 3533, 1955, -1, + 3535, 1957, 1956, -1,1953, 3531, 3532, -1,1952, 1951, 3531, -1,3530, 1767, 3531, -1, + 3533, 3532, 1765, -1,1768, 3529, 1769, -1,3530, 1768, 1767, -1,3532, 3533, 1954, -1, + 1766, 3531, 1767, -1,1766, 1765, 3532, -1,1766, 3532, 3531, -1,3533, 1765, 1764, -1, + 3534, 3535, 1956, -1,3535, 3534, 1763, -1,1967, 3535, 1762, -1,3535, 1967, 1957, -1, + 1764, 1763, 3534, -1,1762, 1761, 1967, -1,1763, 1762, 3535, -1,3534, 3533, 1764, -1, + 3533, 3534, 1955, -1,1957, 1967, 1958, -1,3536, 1927, 1958, -1,1958, 1967, 3536, -1, + 3536, 1761, 1760, -1,1761, 3536, 1967, -1,1968, 1760, 1759, -1,1760, 1968, 3536, -1, + 3536, 1968, 1927, -1,2027, 2028, 1969, -1,2027, 1969, 2026, -1,2025, 2026, 2001, -1, + 2025, 2001, 2002, -1,2001, 2026, 1969, -1,2001, 1970, 2000, -1,2001, 1969, 1970, -1, + 1986, 1978, 1979, -1,1980, 1981, 1986, -1,1980, 1986, 1979, -1,1970, 1971, 1972, -1, + 1972, 1973, 2000, -1,1970, 1972, 2000, -1,3745, 1978, 1986, -1,2023, 2024, 2025, -1, + 2002, 2021, 2022, -1,2020, 2021, 2018, -1,2018, 2019, 2020, -1,2018, 2021, 2003, -1, + 1987, 3745, 1986, -1,2025, 2022, 2023, -1,2002, 2003, 2021, -1,2017, 2004, 2014, -1, + 2017, 2018, 2004, -1,2004, 2018, 2003, -1,2015, 2016, 2014, -1,2014, 2016, 2017, -1, + 2004, 2013, 2014, -1,2004, 2005, 2013, -1,2025, 2002, 2022, -1,1982, 1986, 1981, -1, + 1983, 1984, 1985, -1,1985, 1986, 1982, -1,2000, 1973, 1999, -1,1999, 1973, 1975, -1, + 1975, 1973, 1974, -1,1991, 1977, 1987, -1,1977, 3745, 1987, -1,1988, 1989, 1987, -1, + 1991, 1987, 1989, -1,1975, 1976, 1999, -1,1976, 1977, 1991, -1,1989, 1990, 1991, -1, + 1976, 1991, 1992, -1,1999, 1976, 1998, -1,2005, 2006, 2007, -1,2005, 2007, 2008, -1, + 2012, 2013, 2011, -1,2009, 2005, 2008, -1,2011, 2013, 2010, -1,2013, 2009, 2010, -1, + 2009, 2013, 2005, -1,1997, 1998, 1992, -1,1996, 1992, 1995, -1,1992, 1996, 1997, -1, + 1998, 1976, 1992, -1,1993, 1994, 1995, -1,1995, 1992, 1993, -1,1983, 1985, 1982, -1, + 2026, 2030, 2027, -1,2027, 2030, 3537, -1,1969, 2028, 3539, -1,3537, 2028, 2027, -1, + 3538, 2028, 3537, -1,2030, 1793, 3537, -1,3537, 1792, 3538, -1,1792, 3537, 1793, -1, + 3538, 1792, 1791, -1,3539, 2029, 1969, -1,2029, 3539, 1790, -1,1791, 1790, 3539, -1, + 3539, 3538, 1791, -1,3538, 3539, 2028, -1,2026, 1794, 1793, -1,1794, 2026, 2025, -1, + 2022, 2032, 2023, -1,2023, 2032, 3540, -1,2025, 2024, 3542, -1,3540, 2024, 2023, -1, + 3541, 2024, 3540, -1,2032, 1797, 3540, -1,3540, 1796, 3541, -1,1796, 3540, 1797, -1, + 3541, 1796, 1795, -1,3542, 2031, 2025, -1,2031, 3542, 1794, -1,1795, 1794, 3542, -1, + 3542, 3541, 1795, -1,3541, 3542, 2024, -1,2022, 1798, 1797, -1,1798, 2022, 2021, -1, + 2018, 2034, 2019, -1,2019, 2034, 3543, -1,2021, 2020, 3545, -1,3543, 2020, 2019, -1, + 3544, 2020, 3543, -1,2034, 1801, 3543, -1,3543, 1800, 3544, -1,1800, 3543, 1801, -1, + 3544, 1800, 1799, -1,3545, 2033, 2021, -1,2033, 3545, 1798, -1,1799, 1798, 3545, -1, + 3545, 3544, 1799, -1,3544, 3545, 2020, -1,2017, 1802, 1801, -1,1801, 2018, 2017, -1, + 2014, 2036, 2015, -1,2015, 2036, 3546, -1,2017, 2016, 3548, -1,3546, 2016, 2015, -1, + 3547, 2016, 3546, -1,2036, 1805, 3546, -1,3546, 1804, 3547, -1,1804, 3546, 1805, -1, + 3547, 1804, 1803, -1,3548, 2035, 2017, -1,2035, 3548, 1802, -1,1803, 1802, 3548, -1, + 3548, 3547, 1803, -1,3547, 3548, 2016, -1,2013, 1806, 1805, -1,1805, 2014, 2013, -1, + 2006, 2005, 2038, -1,2007, 2006, 3549, -1,2038, 3549, 2006, -1,3549, 2038, 1814, -1, + 3550, 3549, 1813, -1,3549, 3550, 2007, -1,2007, 3550, 3551, -1,2009, 2008, 3551, -1, + 3552, 2010, 2009, -1,2012, 2011, 3554, -1,2010, 3553, 2011, -1,3555, 2013, 2012, -1, + 2009, 3551, 3552, -1,2008, 2007, 3551, -1,3550, 1812, 3551, -1,3553, 3552, 1810, -1, + 1813, 3549, 1814, -1,3550, 1813, 1812, -1,3552, 3553, 2010, -1,1811, 3551, 1812, -1, + 1811, 1810, 3552, -1,1811, 3552, 3551, -1,3553, 1810, 1809, -1,3554, 3555, 2012, -1, + 3555, 3554, 1808, -1,2037, 3555, 1807, -1,3555, 2037, 2013, -1,1809, 1808, 3554, -1, + 1807, 1806, 2037, -1,1808, 1807, 3555, -1,3554, 3553, 1809, -1,3553, 3554, 2011, -1, + 2005, 1815, 1814, -1,1815, 2005, 2004, -1,2004, 1816, 1815, -1,1816, 2004, 2003, -1, + 2003, 1817, 1816, -1,1817, 2003, 2002, -1,2001, 1818, 1817, -1,1817, 2002, 2001, -1, + 2001, 1819, 1818, -1,1819, 2001, 2000, -1,1999, 1820, 1819, -1,1819, 2000, 1999, -1, + 1999, 1821, 1820, -1,1821, 1999, 1998, -1,2041, 1992, 2042, -1,2041, 3556, 1993, -1, + 3556, 2041, 2042, -1,3556, 2042, 1827, -1,1993, 3556, 3557, -1,3558, 1994, 2040, -1, + 1998, 1996, 3560, -1,1994, 3559, 1996, -1,2040, 3557, 3558, -1,2040, 1993, 3557, -1, + 3556, 2043, 3557, -1,2043, 1826, 3557, -1,2043, 3556, 1827, -1,1826, 3558, 3557, -1, + 1826, 2044, 3558, -1,3558, 2044, 1825, -1,3559, 3560, 1996, -1,3560, 3559, 1825, -1, + 2039, 3560, 1823, -1,3560, 2039, 1998, -1,1825, 1823, 3560, -1,1823, 1821, 2039, -1, + 3559, 3558, 1825, -1,3558, 3559, 1994, -1,1991, 1828, 1827, -1,1827, 1992, 1991, -1, + 1987, 2046, 1988, -1,1988, 2046, 3561, -1,3562, 1990, 1989, -1,3561, 3562, 1989, -1, + 1990, 3563, 1991, -1,1989, 1988, 3561, -1,2046, 1832, 3561, -1,3561, 1831, 3562, -1, + 1831, 3561, 1832, -1,1831, 1830, 3562, -1,3562, 1830, 1829, -1,3563, 2045, 1991, -1, + 2045, 3563, 1829, -1,1829, 1828, 2045, -1,3563, 3562, 1829, -1,3562, 3563, 1990, -1, + 1987, 1833, 1832, -1,1833, 1987, 1986, -1,1979, 1978, 2048, -1,1980, 1979, 3564, -1, + 2048, 3564, 1979, -1,3564, 2048, 1841, -1,3565, 3564, 1840, -1,3564, 3565, 1980, -1, + 1980, 3565, 3566, -1,1982, 1981, 3566, -1,3567, 1983, 1982, -1,1985, 1984, 3569, -1, + 1983, 3568, 1984, -1,3570, 1986, 1985, -1,1982, 3566, 3567, -1,1981, 1980, 3566, -1, + 3565, 1839, 3566, -1,3568, 3567, 1837, -1,1840, 3564, 1841, -1,3565, 1840, 1839, -1, + 3567, 3568, 1983, -1,1838, 3566, 1839, -1,1838, 1837, 3567, -1,1838, 3567, 3566, -1, + 3568, 1837, 1836, -1,3569, 3570, 1985, -1,3570, 3569, 1835, -1,2047, 3570, 1834, -1, + 3570, 2047, 1986, -1,1836, 1835, 3569, -1,1834, 1833, 2047, -1,1835, 1834, 3570, -1, + 3569, 3568, 1836, -1,3568, 3569, 1984, -1,1977, 1842, 1841, -1,1841, 1978, 1977, -1, + 1977, 1843, 1842, -1,1843, 1977, 1976, -1,1975, 1844, 1843, -1,1843, 1976, 1975, -1, + 1973, 2050, 1974, -1,3571, 1975, 1974, -1,1974, 2050, 3571, -1,3571, 1846, 1845, -1, + 1846, 3571, 2050, -1,2049, 1845, 1844, -1,1845, 2049, 3571, -1,3571, 2049, 1975, -1, + 1973, 1847, 1846, -1,1847, 1973, 1972, -1,1970, 2052, 1971, -1,3572, 1972, 1971, -1, + 1971, 2052, 3572, -1,3572, 1849, 1848, -1,1849, 3572, 2052, -1,2051, 1848, 1847, -1, + 1848, 2051, 3572, -1,3572, 2051, 1972, -1,1970, 1790, 1849, -1,1790, 1970, 1969, -1, + 2055, 2056, 3746, -1,2054, 2057, 2058, -1,2057, 2054, 2056, -1,2058, 2053, 2054, -1, + 2054, 3746, 2056, -1,2059, 2060, 2061, -1,2061, 2062, 2059, -1,2102, 2065, 2066, -1, + 2065, 2102, 2064, -1,2101, 2066, 2067, -1,2066, 2101, 2102, -1,2101, 2067, 2100, -1, + 2104, 2057, 2055, -1,2104, 2055, 2063, -1,2103, 2063, 2064, -1,2063, 2103, 2104, -1, + 2103, 2064, 2102, -1,2055, 2106, 2063, -1,2100, 2068, 2099, -1,2099, 2068, 2069, -1, + 2069, 2070, 2098, -1,2098, 2070, 2097, -1,2069, 2098, 2099, -1,2100, 2067, 2068, -1, + 2097, 2071, 2096, -1,2097, 2070, 2071, -1,2096, 2071, 2072, -1,2072, 2073, 2095, -1, + 2095, 2073, 2094, -1,2072, 2095, 2096, -1,2105, 2106, 2055, -1,2088, 2080, 2087, -1, + 2081, 2087, 2080, -1,2079, 2080, 2088, -1,2083, 2084, 2085, -1,2083, 2085, 2082, -1, + 2081, 2082, 2086, -1,2086, 2082, 2085, -1,2081, 2086, 2087, -1,2094, 2073, 2074, -1, + 2094, 2074, 2093, -1,2093, 2075, 2092, -1,2075, 2093, 2074, -1,2092, 2075, 2076, -1, + 2076, 2091, 2092, -1,2078, 2079, 2089, -1,2089, 2079, 2088, -1,2078, 2089, 2090, -1, + 2091, 2077, 2090, -1,2091, 2076, 2077, -1,2090, 2077, 2078, -1,3574, 2061, 2060, -1, + 3573, 2108, 2109, -1,2108, 3573, 2107, -1,2060, 2107, 3574, -1,2109, 3747, 2053, -1, + 2062, 2061, 2115, -1,2117, 2115, 2116, -1,2115, 2117, 2062, -1,2115, 2061, 3574, -1, + 2107, 3573, 3574, -1,2105, 2053, 3747, -1,2105, 2110, 2053, -1,2054, 2053, 2110, -1, + 2055, 2054, 2110, -1,2115, 2113, 2114, -1,2111, 3573, 2109, -1,3574, 3573, 2111, -1, + 2115, 3574, 2112, -1,2113, 2115, 2112, -1,2111, 2112, 3574, -1,2109, 2053, 2111, -1, + 2126, 2059, 2125, -1,3575, 2125, 2124, -1,2125, 2127, 2126, -1,2124, 2123, 3576, -1, + 2121, 2119, 2122, -1,2122, 2119, 3577, -1,2120, 2119, 2121, -1,2123, 2122, 3577, -1, + 2126, 2127, 2060, -1,3575, 2124, 2128, -1,3576, 2128, 2124, -1,3576, 2129, 2128, -1, + 2127, 3575, 2128, -1,2127, 2125, 3575, -1,3577, 2129, 3576, -1,2130, 2106, 2118, -1, + 3577, 2118, 2106, -1,2119, 2118, 3577, -1,3577, 2106, 2105, -1,2130, 2063, 2106, -1, + 2105, 2129, 3577, -1,2123, 3577, 3576, -1,2134, 2135, 2083, -1,2133, 2135, 2134, -1, + 2132, 2131, 2136, -1,2136, 2133, 2132, -1,2135, 2133, 2136, -1,2131, 2141, 2136, -1, + 2135, 2136, 3578, -1,2083, 3580, 2140, -1,2135, 3580, 2083, -1,3578, 2136, 2141, -1, + 2141, 2138, 3578, -1,2138, 2141, 2137, -1,3578, 2138, 2139, -1,3579, 3580, 2135, -1, + 3580, 3579, 2139, -1,2139, 2084, 3580, -1,3579, 3578, 2139, -1,3580, 2084, 2140, -1, + 3578, 3579, 2135, -1,2119, 2120, 2172, -1,3581, 2172, 2171, -1,3583, 2170, 2169, -1, + 3584, 2169, 2168, -1,2170, 3582, 2171, -1,2172, 3581, 2119, -1,2118, 2119, 3581, -1, + 2142, 3581, 3582, -1,2171, 3582, 3581, -1,2169, 3584, 3583, -1,2144, 3583, 3584, -1, + 2145, 3584, 3585, -1,2168, 3585, 3584, -1,3583, 2143, 3582, -1,2170, 3583, 3582, -1, + 3586, 3585, 2168, -1,3586, 2167, 2166, -1,3587, 2166, 2165, -1,2164, 2163, 3589, -1, + 2163, 2162, 3590, -1,3588, 2165, 2164, -1,3591, 2162, 2161, -1,3586, 2166, 3587, -1, + 2147, 3586, 3587, -1,3592, 2161, 2160, -1,2160, 2159, 3593, -1,2158, 2132, 3595, -1, + 3594, 2159, 2158, -1,3587, 2165, 3588, -1,3586, 2168, 2167, -1,3586, 2146, 3585, -1, + 2142, 3582, 2143, -1,2143, 3583, 2144, -1,2164, 3589, 3588, -1,3588, 3589, 2149, -1, + 3589, 3590, 2150, -1,2163, 3590, 3589, -1,2145, 2144, 3584, -1,2118, 3581, 2142, -1, + 2145, 3585, 2146, -1,2146, 3586, 2147, -1,3587, 3588, 2148, -1,3589, 2150, 2149, -1, + 3588, 2149, 2148, -1,2147, 3587, 2148, -1,2151, 2150, 3590, -1,2161, 3592, 3591, -1, + 2152, 3591, 3592, -1,2153, 3592, 3593, -1,2160, 3593, 3592, -1,2158, 3595, 3594, -1, + 2155, 3594, 3595, -1,2156, 3595, 2157, -1,2132, 2157, 3595, -1,3594, 2154, 3593, -1, + 2159, 3594, 3593, -1,3591, 2152, 2151, -1,3592, 2153, 2152, -1,3594, 2155, 2154, -1, + 2157, 2133, 2156, -1,3595, 2156, 2155, -1,3593, 2154, 2153, -1,2151, 3590, 3591, -1, + 2162, 3591, 3590, -1,2190, 2189, 2186, -1,2189, 2188, 2187, -1,2191, 2190, 2184, -1, + 2131, 2192, 2137, -1,2132, 2191, 2182, -1,2131, 2193, 2192, -1,2132, 2180, 2179, -1, + 2186, 2189, 2187, -1,2185, 2190, 2186, -1,2190, 2185, 2184, -1,2184, 2183, 2191, -1, + 2183, 2182, 2191, -1,2132, 2182, 2181, -1,2181, 2180, 2132, -1,2059, 2131, 2132, -1, + 2131, 2059, 2062, -1,2179, 2059, 2132, -1,2059, 2176, 2125, -1,2123, 2124, 2173, -1, + 2120, 2122, 2123, -1,2175, 2124, 2125, -1,2122, 2120, 2121, -1,2059, 2177, 2176, -1, + 2059, 2178, 2177, -1,2059, 2179, 2178, -1,2124, 2174, 2173, -1,2174, 2124, 2175, -1, + 2125, 2176, 2175, -1,2120, 2123, 2173, -1,2062, 2193, 2131, -1,2209, 2083, 2208, -1, + 3596, 2208, 2207, -1,3598, 2206, 2205, -1,3599, 2205, 2204, -1,2206, 3597, 2207, -1, + 2208, 3596, 2134, -1,2210, 2134, 3596, -1,2207, 3597, 3596, -1,3597, 2206, 3598, -1, + 2155, 3597, 3598, -1,3599, 2204, 3600, -1,2153, 3599, 3600, -1,3599, 2154, 3598, -1, + 3598, 2205, 3599, -1,3597, 2156, 3596, -1,2134, 2209, 2208, -1,3601, 3600, 2204, -1, + 3601, 2203, 2202, -1,3602, 2202, 2201, -1,2200, 2199, 3604, -1,2199, 2198, 3605, -1, + 3603, 2201, 2200, -1,3606, 2198, 2197, -1,3601, 2202, 3602, -1,2151, 3601, 3602, -1, + 3607, 2197, 2196, -1,2196, 2195, 3608, -1,2194, 2063, 3610, -1,3609, 2195, 2194, -1, + 3602, 2201, 3603, -1,3601, 2204, 2203, -1,3601, 2152, 3600, -1,2156, 2133, 2210, -1, + 3597, 2155, 2156, -1,2149, 3603, 3604, -1,2153, 3600, 2152, -1,2155, 3598, 2154, -1, + 2200, 3604, 3603, -1,2210, 3596, 2156, -1,2154, 3599, 2153, -1,2152, 3601, 2151, -1, + 3602, 3603, 2150, -1,3604, 2148, 2149, -1,3603, 2149, 2150, -1,2151, 3602, 2150, -1, + 2147, 2148, 3604, -1,2198, 3606, 3605, -1,2147, 3605, 3606, -1,2145, 3606, 3607, -1, + 2197, 3607, 3606, -1,2195, 3609, 3608, -1,2144, 3608, 3609, -1,2063, 2130, 3610, -1, + 2142, 3610, 2130, -1,3610, 2143, 3609, -1,2194, 3610, 3609, -1,3608, 2144, 3607, -1, + 2196, 3608, 3607, -1,3606, 2146, 2147, -1,3606, 2145, 2146, -1,3609, 2143, 2144, -1, + 2130, 2118, 2142, -1,3610, 2142, 2143, -1,3607, 2144, 2145, -1,2147, 3604, 3605, -1, + 2199, 3605, 3604, -1,2223, 2219, 2222, -1,2221, 2222, 2220, -1,2219, 2220, 2222, -1, + 2116, 2218, 2219, -1,2222, 2193, 2223, -1,3613, 2211, 2212, -1,1400, 1399, 2211, -1, + 2216, 2217, 3611, -1,2213, 3613, 2212, -1,3613, 2213, 2214, -1,2218, 2116, 2217, -1, + 2223, 2062, 2117, -1,2223, 2117, 2116, -1,3611, 2116, 2115, -1,2114, 2224, 2115, -1, + 3611, 2115, 2224, -1,2116, 3611, 2217, -1,2216, 3612, 2215, -1,2216, 3611, 3612, -1, + 3611, 2224, 3612, -1,3612, 3613, 2214, -1,3613, 2225, 1401, -1,2225, 3613, 3612, -1, + 1401, 1400, 3613, -1,1400, 2211, 3613, -1,2224, 2225, 3612, -1,2214, 2215, 3612, -1, + 2219, 2223, 2116, -1,2239, 3614, 3748, -1,2240, 3614, 2237, -1,3616, 2241, 1056, -1, + 2235, 3616, 3615, -1,1056, 3615, 3616, -1,3616, 2232, 2241, -1,2240, 3615, 1056, -1, + 3615, 2240, 2236, -1,2238, 1669, 1682, -1,1682, 1683, 2238, -1,2238, 2239, 1669, -1, + 2238, 2237, 2239, -1,2237, 3614, 2239, -1,2236, 2240, 2237, -1,2236, 2235, 3615, -1, + 3748, 3614, 2240, -1,2235, 2233, 3616, -1,2231, 2242, 2232, -1,2241, 2232, 2242, -1, + 3617, 2242, 2231, -1,1417, 1053, 2243, -1,2230, 3617, 2231, -1,3617, 2230, 2243, -1, + 2242, 3617, 2243, -1,2243, 2229, 1417, -1,2235, 2234, 2233, -1,2226, 2229, 2228, -1, + 1417, 2229, 2226, -1,2226, 1418, 1417, -1,2227, 2226, 2228, -1,2229, 2243, 2230, -1, + 3616, 2233, 2232, -1,1684, 1685, 2247, -1,2247, 1683, 1684, -1,1683, 3618, 2238, -1, + 2237, 2238, 3619, -1,3618, 2247, 2084, -1,1683, 2247, 3618, -1,2139, 3618, 2084, -1, + 2138, 3619, 2139, -1,3618, 2139, 3619, -1,3619, 2138, 3620, -1,3619, 2238, 3618, -1, + 3620, 2237, 3619, -1,2236, 3620, 2245, -1,2237, 3620, 2236, -1,2244, 2234, 2235, -1, + 2236, 2244, 2235, -1,2244, 2236, 2245, -1,2137, 2246, 3620, -1,2193, 3620, 2246, -1, + 2245, 2221, 2244, -1,3620, 2193, 2245, -1,2138, 2137, 3620, -1,3621, 2248, 2211, -1, + 2248, 2212, 2211, -1,3621, 2227, 2248, -1,1441, 1418, 2226, -1,1399, 1441, 3621, -1, + 2226, 3621, 1441, -1,2211, 1399, 3621, -1,2227, 3621, 2226, -1,1654, 2249, 1653, -1, + 2250, 2249, 1654, -1,1655, 2251, 2250, -1,2251, 1655, 1656, -1,1654, 1655, 2250, -1, + 2102, 2101, 2252, -1,1651, 2252, 2253, -1,2101, 1646, 1647, -1,2253, 2252, 1647, -1, + 2101, 1647, 2252, -1,1627, 1646, 2270, -1,3622, 1626, 1627, -1,1627, 1627, 2270, -1, + 2268, 3623, 3622, -1,3623, 1626, 3622, -1,3623, 3624, 1625, -1,1624, 1625, 3624, -1, + 3623, 1625, 1626, -1,2267, 3624, 3623, -1,1627, 2270, 3622, -1,1623, 1624, 3625, -1, + 1622, 1623, 2273, -1,1622, 2271, 3626, -1,2273, 3625, 2274, -1,1623, 3625, 2273, -1, + 1622, 2273, 2272, -1,2272, 2271, 1622, -1,1621, 1622, 3627, -1,3624, 3625, 1624, -1, + 2266, 3625, 3624, -1,2270, 2101, 2269, -1,3622, 2269, 2268, -1,3625, 2275, 2274, -1, + 2275, 3625, 2266, -1,3622, 2270, 2269, -1,2266, 3624, 2267, -1,2268, 2267, 3623, -1, + 2266, 2265, 2275, -1,3626, 2278, 2277, -1,3627, 3626, 2264, -1,1621, 3627, 3628, -1, + 3627, 1622, 3626, -1,3628, 3627, 2264, -1,2265, 2277, 2276, -1,3626, 2277, 2265, -1, + 2265, 2264, 3626, -1,2275, 2265, 2276, -1,2264, 2263, 3628, -1,2271, 2278, 3626, -1, + 3628, 1620, 1621, -1,1619, 1620, 3629, -1,3630, 1617, 1618, -1,1618, 1619, 3629, -1, + 2261, 3630, 3629, -1,3630, 1618, 3629, -1,1616, 3631, 3632, -1,1617, 3630, 3631, -1, + 1617, 3631, 1616, -1,2260, 3631, 3630, -1,3628, 2263, 3629, -1,3633, 1614, 1615, -1, + 2247, 1685, 2254, -1,3635, 1612, 1613, -1,3636, 1611, 1612, -1,1614, 3634, 1613, -1, + 2247, 1610, 1611, -1,3632, 1615, 1616, -1,2254, 1610, 2247, -1,2262, 3629, 2263, -1, + 2262, 2261, 3629, -1,1615, 3632, 3633, -1,3632, 3631, 2260, -1,3633, 3632, 2258, -1, + 2260, 3630, 2261, -1,3632, 2259, 2258, -1,2259, 3632, 2260, -1,2258, 3634, 3633, -1, + 1613, 2257, 2256, -1,3635, 1613, 2256, -1,1611, 2255, 2084, -1,2247, 1611, 2084, -1, + 2255, 3636, 1612, -1,1612, 2256, 2255, -1,1613, 3634, 2257, -1,1611, 3636, 2255, -1, + 2256, 1612, 3635, -1,2258, 2257, 3634, -1,3634, 1614, 3633, -1,1620, 3628, 3629, -1, + 2272, 2273, 2279, -1,2279, 2271, 2272, -1,2280, 2275, 2276, -1,2276, 2277, 2280, -1, + 2281, 2271, 2279, -1,2280, 2277, 2281, -1,2279, 2280, 2281, -1,2279, 2273, 2282, -1, + 2282, 2275, 2280, -1,2282, 2280, 2279, -1,2057, 2288, 2058, -1,2058, 2288, 2053, -1, + 3638, 2289, 3637, -1,2053, 3637, 2289, -1,3639, 2289, 3638, -1,2286, 3638, 3637, -1, + 2053, 2288, 3637, -1,2251, 2287, 2288, -1,2287, 3637, 2288, -1,2285, 3639, 2286, -1, + 3637, 2287, 2286, -1,3640, 3639, 2285, -1,3638, 2286, 3639, -1,3639, 2112, 2289, -1, + 3639, 3640, 2114, -1,2114, 2290, 3639, -1,3641, 1401, 2291, -1,3640, 2291, 2224, -1, + 3640, 2224, 2114, -1,2284, 3641, 3640, -1,2291, 3640, 3641, -1,2283, 3641, 2284, -1, + 3640, 2285, 2284, -1,1470, 1469, 2283, -1,3641, 2283, 1469, -1,1469, 1401, 3641, -1, + 2112, 3639, 2290, -1,2300, 2287, 2251, -1,3642, 2287, 2300, -1,3643, 2285, 2286, -1, + 2299, 3643, 3642, -1,2286, 3642, 3643, -1,3643, 3644, 2285, -1,2287, 3642, 2286, -1, + 1658, 3642, 2300, -1,1657, 1658, 2300, -1,2300, 1656, 1657, -1,2299, 2298, 3643, -1, + 3642, 1658, 2299, -1,3644, 2298, 1697, -1,3645, 3644, 1697, -1,2298, 3644, 3643, -1, + 2284, 2285, 3644, -1,2295, 3645, 2296, -1,2284, 3645, 2283, -1,2297, 2296, 3645, -1, + 3644, 3645, 2284, -1,1479, 1470, 2283, -1,3646, 3645, 2295, -1,2283, 3646, 1479, -1, + 3645, 3646, 2283, -1,1479, 3646, 2292, -1,2294, 3646, 2295, -1,1690, 3646, 2293, -1, + 3646, 2294, 2293, -1,2292, 3646, 1690, -1,1479, 2292, 1181, -1,1697, 2297, 3645, -1, + 2288, 2250, 2251, -1,3647, 2249, 2250, -1,2104, 2288, 2057, -1,3647, 2104, 2103, -1, + 2288, 2104, 3647, -1,3647, 2250, 2288, -1,3648, 2249, 3647, -1,1653, 3648, 3649, -1, + 2249, 3648, 1653, -1,2302, 1653, 3649, -1,1651, 2302, 2301, -1,2102, 3649, 2103, -1, + 3648, 2103, 3649, -1,3649, 2102, 2301, -1,2301, 2302, 3649, -1,3647, 2103, 3648, -1, + 2333, 2312, 2311, -1,2333, 2311, 2318, -1,2310, 2318, 2311, -1,2333, 2332, 2312, -1, + 2331, 2314, 2313, -1,2313, 2332, 2331, -1,2312, 2332, 2313, -1,2309, 2319, 2318, -1, + 2319, 2309, 2308, -1,2308, 2320, 2319, -1,2310, 2309, 2318, -1,2307, 2321, 2320, -1, + 2321, 2307, 2306, -1,2322, 2321, 2306, -1,2308, 2307, 2320, -1,2330, 2314, 2331, -1, + 2329, 2315, 2330, -1,2314, 2330, 2315, -1,2329, 2328, 2316, -1,2316, 2315, 2329, -1, + 2328, 2327, 2317, -1,2326, 1856, 2327, -1,2317, 2327, 1856, -1,2316, 2328, 2317, -1, + 2304, 2323, 2305, -1,2306, 2305, 2322, -1,2323, 2322, 2305, -1,2304, 2324, 2323, -1, + 1857, 2326, 2325, -1,2324, 2304, 2303, -1,1857, 2325, 2303, -1,1857, 1856, 2326, -1, + 2325, 2324, 2303, -1,3653, 2341, 2342, -1,1857, 2303, 3760, -1,3652, 2342, 2343, -1, + 2305, 3756, 3757, -1,3756, 3651, 2343, -1,3756, 2305, 2306, -1,3652, 3653, 2342, -1, + 3653, 3652, 2307, -1,3654, 3653, 2308, -1,3653, 3654, 2341, -1,3651, 2306, 3652, -1, + 3651, 3652, 2343, -1,2305, 3755, 3759, -1,2341, 3654, 2340, -1,2338, 2339, 3655, -1, + 2338, 3656, 2337, -1,2336, 2337, 3657, -1,3660, 2315, 3754, -1,2340, 3655, 2339, -1, + 2317, 1856, 3749, -1,3657, 2337, 3656, -1,3656, 3655, 2310, -1,3657, 3656, 2311, -1, + 3658, 2336, 3657, -1,2335, 3658, 3659, -1,2335, 2336, 3658, -1,3659, 3658, 2313, -1, + 3659, 2314, 3752, -1,3657, 2312, 3658, -1,3656, 2338, 3655, -1,2340, 3654, 3655, -1, + 3654, 2309, 3655, -1,3650, 3758, 2305, -1,2304, 2344, 2303, -1,3757, 3758, 3650, -1, + 3651, 3756, 2306, -1,2344, 3760, 2303, -1,2307, 3652, 2306, -1,3650, 2305, 3757, -1, + 2308, 3653, 2307, -1,2310, 3655, 2309, -1,2304, 2305, 3759, -1,3758, 3755, 2305, -1, + 2310, 2311, 3656, -1,2309, 3654, 2308, -1,2311, 2312, 3657, -1,3751, 3750, 2315, -1, + 3658, 2312, 2313, -1,2334, 2317, 3749, -1,2313, 2314, 3659, -1,3659, 3752, 2335, -1, + 3752, 2314, 2315, -1,3754, 3753, 3660, -1,3753, 2315, 3660, -1,2316, 2317, 2334, -1, + 3753, 3752, 2315, -1,3751, 2315, 2316, -1,2334, 3751, 2316, -1,2304, 3759, 2344, -1, + 3750, 3754, 2315, -1,2325, 2326, 2346, -1,2324, 2325, 3661, -1,3661, 3662, 2324, -1, + 3661, 2346, 1110, -1,3662, 3661, 1111, -1,3661, 2325, 2346, -1,2324, 3662, 2323, -1, + 2322, 2323, 3663, -1,2321, 2322, 3664, -1,2345, 2319, 3667, -1,2345, 2318, 2319, -1, + 3666, 2319, 2320, -1,2321, 3665, 2320, -1,3662, 3663, 2323, -1,3664, 3663, 1113, -1, + 1111, 3661, 1110, -1,3662, 1111, 1112, -1,3663, 3664, 2322, -1,1112, 3663, 3662, -1, + 1113, 1114, 3664, -1,1112, 1113, 3663, -1,3664, 1114, 1115, -1,3665, 3666, 2320, -1, + 3666, 3665, 1115, -1,3667, 3666, 1116, -1,3666, 3667, 2319, -1,1115, 1116, 3666, -1, + 1117, 1118, 3667, -1,1116, 1117, 3667, -1,3665, 3664, 1115, -1,3667, 1118, 2345, -1, + 3664, 3665, 2321, -1,2333, 2318, 2345, -1,2332, 2333, 3668, -1,3668, 3669, 2332, -1, + 3668, 2345, 1118, -1,3669, 3668, 1119, -1,3668, 2333, 2345, -1,2332, 3669, 2331, -1, + 2330, 2331, 3670, -1,2329, 2330, 3671, -1,2346, 2327, 3674, -1,2346, 2326, 2327, -1, + 3673, 2327, 2328, -1,2329, 3672, 2328, -1,3669, 3670, 2331, -1,3671, 3670, 1121, -1, + 1119, 3668, 1118, -1,3669, 1119, 1120, -1,3670, 3671, 2330, -1,1120, 3670, 3669, -1, + 1121, 1122, 3671, -1,1120, 1121, 3670, -1,3671, 1122, 1123, -1,3672, 3673, 2328, -1, + 3673, 3672, 1123, -1,3674, 3673, 1124, -1,3673, 3674, 2327, -1,1123, 1124, 3673, -1, + 1125, 1110, 3674, -1,1124, 1125, 3674, -1,3672, 3671, 1123, -1,3674, 1110, 2346, -1, + 3671, 3672, 2329, -1,2366, 1694, 2367, -1,2347, 1694, 2366, -1,2368, 2367, 1694, -1, + 2366, 2365, 2347, -1,2348, 2347, 2365, -1,2370, 1693, 2355, -1,1694, 1693, 2368, -1, + 2368, 1693, 2369, -1,2370, 2355, 2371, -1,2371, 2355, 2354, -1,2371, 2354, 2356, -1, + 2369, 1693, 2370, -1,2364, 2348, 2365, -1,2363, 2348, 2364, -1,2349, 2363, 2362, -1, + 2362, 2361, 2350, -1,2361, 2360, 2351, -1,2351, 2350, 2361, -1,2349, 2362, 2350, -1, + 2363, 2349, 2348, -1,2353, 2358, 2357, -1,2354, 2353, 2357, -1,2352, 2351, 2359, -1, + 2360, 2359, 2351, -1,2352, 2358, 2353, -1,2359, 2358, 2352, -1,2356, 2354, 2357, -1, + 2354, 2355, 2379, -1,2353, 2354, 3675, -1,2354, 2372, 3675, -1,2351, 2352, 3677, -1, + 3676, 2352, 2353, -1,2372, 2379, 1692, -1,2372, 2354, 2379, -1,2350, 2351, 3678, -1, + 3680, 2348, 2349, -1,2347, 2348, 2378, -1,1695, 2378, 2348, -1,1695, 2348, 3681, -1, + 2349, 2350, 3679, -1,2353, 3675, 3676, -1,3676, 3677, 2352, -1,3677, 3676, 2373, -1, + 3678, 3677, 2374, -1,3677, 3678, 2351, -1,1690, 2373, 3676, -1,2374, 3677, 2373, -1, + 3675, 1690, 3676, -1,3675, 2372, 1690, -1,3678, 2374, 2375, -1,3679, 3680, 2349, -1, + 3680, 3679, 2376, -1,3681, 3680, 2377, -1,3680, 3681, 2348, -1,1697, 3680, 2376, -1, + 2377, 3680, 1697, -1,2376, 3679, 2375, -1,3679, 3678, 2375, -1,3681, 2377, 1695, -1, + 3678, 3679, 2350, -1,2355, 1693, 1692, -1,1694, 2347, 1695, -1,1133, 1134, 3682, -1, + 1132, 1133, 3682, -1,1132, 3683, 1131, -1,3683, 1132, 3682, -1,3683, 3682, 2365, -1, + 1131, 3683, 3684, -1,1134, 2380, 3682, -1,1129, 1130, 3685, -1,3686, 1128, 1129, -1, + 1128, 3687, 1127, -1,3685, 3684, 2367, -1,3688, 1126, 1127, -1,3685, 3686, 1129, -1, + 3685, 1130, 3684, -1,1130, 1131, 3684, -1,3683, 2366, 3684, -1,3684, 2366, 2367, -1, + 3682, 2380, 2365, -1,2365, 2380, 2364, -1,2366, 3683, 2365, -1,2368, 3686, 3685, -1, + 2368, 3685, 2367, -1,3686, 2368, 2369, -1,3688, 2371, 2381, -1,2370, 3688, 3687, -1, + 3688, 2381, 1126, -1,3687, 3688, 1127, -1,2369, 2370, 3687, -1,2371, 2356, 2381, -1, + 2370, 2371, 3688, -1,3687, 3686, 2369, -1,3686, 3687, 1128, -1,1141, 1126, 3689, -1, + 1140, 1141, 3689, -1,1140, 3690, 1139, -1,3690, 1140, 3689, -1,3690, 3689, 2357, -1, + 1139, 3690, 3691, -1,1126, 2381, 3689, -1,1137, 1138, 3692, -1,3693, 1136, 1137, -1, + 1136, 3694, 1135, -1,3692, 3691, 2359, -1,3695, 1134, 1135, -1,3692, 3693, 1137, -1, + 3692, 1138, 3691, -1,1138, 1139, 3691, -1,3690, 2358, 3691, -1,3691, 2358, 2359, -1, + 3689, 2381, 2357, -1,2357, 2381, 2356, -1,2358, 3690, 2357, -1,2360, 3693, 3692, -1, + 2360, 3692, 2359, -1,3693, 2360, 2361, -1,3695, 2363, 2380, -1,2362, 3695, 3694, -1, + 3695, 2380, 1134, -1,3694, 3695, 1135, -1,2361, 2362, 3694, -1,2363, 2364, 2380, -1, + 2362, 2363, 3695, -1,3694, 3693, 2361, -1,3693, 3694, 1136, -1,2408, 2385, 2409, -1, + 2386, 2385, 2408, -1,2394, 2409, 2385, -1,2407, 2406, 2387, -1,2388, 2387, 2406, -1, + 2407, 2386, 2408, -1,2387, 2386, 2407, -1,2395, 2394, 2384, -1,2385, 2384, 2394, -1, + 2396, 2395, 2229, -1,2384, 2229, 2395, -1,2383, 2397, 2396, -1,2382, 2398, 2383, -1, + 2397, 2383, 2398, -1,2229, 2383, 2396, -1,2404, 2388, 2405, -1,2406, 2405, 2388, -1, + 2389, 2388, 2404, -1,2390, 2389, 2403, -1,2404, 2403, 2389, -1,2401, 2390, 2402, -1, + 2403, 2402, 2390, -1,2393, 2400, 2382, -1,2398, 2382, 2399, -1,2400, 2399, 2382, -1, + 2391, 2401, 2400, -1,2392, 2400, 2393, -1,2393, 2382, 2232, -1,2391, 2400, 2392, -1, + 2391, 2390, 2401, -1,2219, 2410, 2220, -1,2220, 2410, 3696, -1,2393, 2233, 3761, -1, + 2244, 2221, 3696, -1,2234, 2244, 3696, -1,2221, 2220, 3696, -1,2410, 2391, 3696, -1, + 3696, 2392, 2234, -1,2392, 3696, 2391, -1,2234, 2392, 2393, -1,2393, 2232, 2233, -1, + 2234, 2393, 3761, -1,3697, 2416, 2212, -1,2411, 3697, 2212, -1,3697, 3698, 2416, -1, + 3698, 3697, 2385, -1,3699, 3698, 2386, -1,2416, 3698, 2415, -1,2415, 3698, 3699, -1, + 2410, 2219, 2412, -1,2413, 3702, 2412, -1,2415, 3700, 2414, -1,3700, 2415, 3699, -1, + 2414, 3701, 2413, -1,3701, 2414, 3700, -1,3700, 2388, 3701, -1,3701, 3702, 2413, -1, + 3699, 2387, 3700, -1,2227, 2228, 2384, -1,2411, 2227, 2384, -1,2229, 2384, 2228, -1, + 2386, 3698, 2385, -1,2384, 2385, 2411, -1,2386, 2387, 3699, -1,2410, 3702, 2390, -1, + 3700, 2387, 2388, -1,3701, 2388, 2389, -1,3702, 2410, 2412, -1,2389, 3702, 3701, -1, + 2390, 2391, 2410, -1,2389, 2390, 3702, -1,2411, 2385, 3697, -1,2401, 2402, 2418, -1, + 2400, 2401, 3703, -1,3703, 3704, 2400, -1,3703, 2418, 1142, -1,3704, 3703, 1143, -1, + 3703, 2401, 2418, -1,2400, 3704, 2399, -1,2398, 2399, 3705, -1,2397, 2398, 3706, -1, + 2417, 2395, 3709, -1,2417, 2394, 2395, -1,3708, 2395, 2396, -1,2397, 3707, 2396, -1, + 3704, 3705, 2399, -1,3706, 3705, 1145, -1,1143, 3703, 1142, -1,3704, 1143, 1144, -1, + 3705, 3706, 2398, -1,1144, 3705, 3704, -1,1145, 1146, 3706, -1,1144, 1145, 3705, -1, + 3706, 1146, 1147, -1,3707, 3708, 2396, -1,3708, 3707, 1147, -1,3709, 3708, 1148, -1, + 3708, 3709, 2395, -1,1147, 1148, 3708, -1,1149, 1150, 3709, -1,1148, 1149, 3709, -1, + 3707, 3706, 1147, -1,3709, 1150, 2417, -1,3706, 3707, 2397, -1,2409, 2394, 2417, -1, + 2408, 2409, 3710, -1,3710, 3711, 2408, -1,3710, 2417, 1150, -1,3711, 3710, 1151, -1, + 3710, 2409, 2417, -1,2408, 3711, 2407, -1,2406, 2407, 3712, -1,2405, 2406, 3713, -1, + 2418, 2403, 3716, -1,2418, 2402, 2403, -1,3715, 2403, 2404, -1,2405, 3714, 2404, -1, + 3711, 3712, 2407, -1,3713, 3712, 1153, -1,1151, 3710, 1150, -1,3711, 1151, 1152, -1, + 3712, 3713, 2406, -1,1152, 3712, 3711, -1,1153, 1154, 3713, -1,1152, 1153, 3712, -1, + 3713, 1154, 1155, -1,3714, 3715, 2404, -1,3715, 3714, 1155, -1,3716, 3715, 1156, -1, + 3715, 3716, 2403, -1,1155, 1156, 3715, -1,1157, 1142, 3716, -1,1156, 1157, 3716, -1, + 3714, 3713, 1155, -1,3716, 1142, 2418, -1,3713, 3714, 2405, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,0, 4, 3, -1,6, 4, 5, -1,8, 1, 7, -1,7, 10, 9, -1,9, 8, 7, -1,10, 7, 11, -1, + 6, 3, 4, -1,12, 5, 4, -1,14, 13, 13, -1,13, 12, 14, -1,3, 2, 0, -1,7, 15, 11, -1, + 2, 7, 1, -1,17, 16, 15, -1,14, 12, 4, -1,11, 15, 16, -1,20, 19, 18, -1,18, 19, 21, -1, + 21, 22, 18, -1,25, 24, 23, -1,27, 26, 24, -1,18, 23, 20, -1,18, 22, 17, -1,27, 13, + 26, -1,18, 25, 23, -1,27, 24, 25, -1,13, 28, 26, -1,13, 28, 13, -1,13, 28, 13, -1, + 13, 26, 13, -1,13, 13, 26, -1,17, 22, 16, -1,13, 14, 13, -1,29, 13, 13, -1,13, 14, + 29, -1,32, 31, 30, -1,33, 13, 29, -1,31, 33, 34, -1,13, 29, 13, -1,15, 32, 35, -1, + 34, 30, 31, -1,36, 32, 30, -1,37, 32, 36, -1,38, 35, 32, -1,35, 39, 15, -1,37, 38, + 32, -1,34, 33, 29, -1,39, 17, 15, -1,41, 17, 40, -1,44, 43, 42, -1,41, 45, 43, -1, + 46, 28, 13, -1,46, 48, 47, -1,46, 47, 28, -1,50, 49, 41, -1,51, 50, 41, -1,45, 41, + 49, -1,52, 47, 48, -1,52, 44, 47, -1,47, 44, 42, -1,45, 42, 43, -1,51, 41, 40, -1, + 17, 39, 40, -1,13, 28, 13, -1,14, 13, 13, -1,55, 54, 53, -1,57, 53, 56, -1,60, 59, + 58, -1,62, 58, 61, -1,59, 63, 56, -1,53, 57, 55, -1,64, 55, 57, -1,65, 57, 63, -1, + 56, 63, 57, -1,58, 62, 60, -1,66, 60, 62, -1,68, 62, 67, -1,61, 67, 62, -1,60, 69, + 63, -1,59, 60, 63, -1,70, 67, 61, -1,70, 72, 71, -1,74, 71, 73, -1,77, 76, 75, -1, + 76, 79, 78, -1,81, 81, 80, -1,83, 79, 82, -1,70, 71, 74, -1,84, 70, 74, -1,86, 82, + 85, -1,85, 88, 87, -1,91, 90, 89, -1,92, 88, 91, -1,93, 81, 81, -1,70, 61, 72, -1, + 95, 94, 67, -1,65, 63, 69, -1,69, 60, 66, -1,77, 75, 96, -1,96, 75, 97, -1,75, 78, + 98, -1,76, 78, 75, -1,68, 66, 62, -1,64, 57, 65, -1,68, 67, 94, -1,94, 70, 84, -1, + 74, 96, 99, -1,75, 98, 97, -1,96, 97, 99, -1,84, 74, 99, -1,100, 98, 78, -1,82, 86, + 83, -1,101, 83, 86, -1,102, 86, 87, -1,85, 87, 86, -1,91, 89, 92, -1,103, 92, 89, -1, + 105, 89, 104, -1,90, 104, 89, -1,92, 106, 87, -1,88, 92, 87, -1,83, 101, 107, -1, + 86, 102, 101, -1,92, 103, 106, -1,104, 108, 105, -1,89, 105, 103, -1,87, 106, 102, -1, + 100, 78, 83, -1,79, 83, 78, -1,104, 90, 109, -1,111, 109, 110, -1,114, 113, 112, -1, + 116, 112, 115, -1,113, 117, 110, -1,109, 111, 104, -1,108, 104, 111, -1,118, 111, + 117, -1,110, 117, 111, -1,112, 116, 114, -1,119, 114, 116, -1,121, 116, 120, -1,115, + 120, 116, -1,114, 122, 117, -1,113, 114, 117, -1,123, 120, 115, -1,126, 125, 124, -1, + 128, 124, 127, -1,131, 130, 129, -1,130, 133, 132, -1,136, 135, 134, -1,139, 138, + 137, -1,126, 124, 128, -1,141, 123, 140, -1,143, 137, 142, -1,142, 145, 144, -1,147, + 54, 146, -1,148, 145, 147, -1,140, 135, 136, -1,126, 115, 125, -1,123, 149, 120, -1, + 118, 117, 122, -1,122, 114, 119, -1,131, 129, 150, -1,136, 152, 151, -1,152, 154, + 153, -1,130, 132, 129, -1,121, 119, 116, -1,108, 111, 118, -1,121, 120, 149, -1,149, + 123, 141, -1,140, 136, 155, -1,152, 153, 151, -1,136, 151, 155, -1,141, 140, 155, -1, + 156, 153, 154, -1,137, 143, 139, -1,157, 139, 143, -1,158, 143, 144, -1,142, 144, + 143, -1,147, 146, 148, -1,159, 148, 146, -1,160, 146, 55, -1,54, 55, 146, -1,148, + 161, 144, -1,145, 148, 144, -1,139, 157, 156, -1,143, 158, 157, -1,148, 159, 161, -1, + 55, 64, 160, -1,146, 160, 159, -1,144, 161, 158, -1,156, 154, 139, -1,138, 139, 154, -1, + 164, 163, 162, -1,166, 162, 165, -1,167, 66, 68, -1,168, 68, 94, -1,66, 169, 165, -1, + 162, 166, 164, -1,170, 164, 166, -1,171, 166, 169, -1,165, 169, 166, -1,68, 168, + 167, -1,172, 167, 168, -1,174, 168, 173, -1,94, 173, 168, -1,167, 175, 169, -1,66, + 167, 169, -1,176, 173, 94, -1,176, 178, 177, -1,180, 177, 179, -1,182, 107, 181, -1, + 107, 101, 183, -1,184, 179, 182, -1,185, 101, 102, -1,176, 177, 180, -1,186, 176, + 180, -1,187, 102, 106, -1,106, 189, 188, -1,192, 191, 190, -1,193, 189, 192, -1,180, + 179, 184, -1,176, 94, 178, -1,176, 194, 173, -1,171, 169, 175, -1,175, 167, 172, -1, + 182, 181, 184, -1,184, 181, 195, -1,181, 183, 196, -1,107, 183, 181, -1,174, 172, + 168, -1,170, 166, 171, -1,174, 173, 194, -1,194, 176, 186, -1,180, 184, 197, -1,181, + 196, 195, -1,184, 195, 197, -1,186, 180, 197, -1,198, 196, 183, -1,102, 187, 185, -1, + 199, 185, 187, -1,200, 187, 188, -1,106, 188, 187, -1,192, 190, 193, -1,201, 193, + 190, -1,203, 190, 202, -1,191, 202, 190, -1,193, 204, 188, -1,189, 193, 188, -1,185, + 199, 198, -1,187, 200, 199, -1,193, 201, 204, -1,202, 205, 203, -1,190, 203, 201, -1, + 188, 204, 200, -1,198, 183, 185, -1,101, 185, 183, -1,202, 191, 206, -1,208, 206, + 207, -1,211, 210, 209, -1,213, 209, 212, -1,210, 214, 207, -1,206, 208, 202, -1,205, + 202, 208, -1,215, 208, 214, -1,207, 214, 208, -1,209, 213, 211, -1,216, 211, 213, -1, + 218, 213, 217, -1,212, 217, 213, -1,211, 219, 214, -1,210, 211, 214, -1,220, 217, + 212, -1,220, 222, 221, -1,224, 221, 223, -1,227, 226, 225, -1,226, 229, 228, -1,230, + 223, 227, -1,232, 229, 231, -1,220, 221, 224, -1,233, 220, 224, -1,235, 231, 234, -1, + 234, 237, 236, -1,239, 163, 238, -1,240, 237, 239, -1,224, 223, 230, -1,220, 212, + 222, -1,220, 241, 217, -1,215, 214, 219, -1,219, 211, 216, -1,227, 225, 230, -1,230, + 225, 242, -1,225, 228, 243, -1,226, 228, 225, -1,218, 216, 213, -1,205, 208, 215, -1, + 218, 217, 241, -1,241, 220, 233, -1,224, 230, 244, -1,225, 243, 242, -1,230, 242, + 244, -1,233, 224, 244, -1,245, 243, 228, -1,231, 235, 232, -1,246, 232, 235, -1,247, + 235, 236, -1,234, 236, 235, -1,239, 238, 240, -1,248, 240, 238, -1,249, 238, 164, -1, + 163, 164, 238, -1,240, 250, 236, -1,237, 240, 236, -1,232, 246, 245, -1,235, 247, + 246, -1,240, 248, 250, -1,164, 170, 249, -1,238, 249, 248, -1,236, 250, 247, -1,245, + 228, 232, -1,229, 232, 228, -1,253, 252, 251, -1,255, 251, 254, -1,256, 172, 174, -1, + 257, 174, 194, -1,172, 258, 254, -1,251, 255, 253, -1,259, 253, 255, -1,260, 255, + 258, -1,254, 258, 255, -1,174, 257, 256, -1,261, 256, 257, -1,263, 257, 262, -1,194, + 262, 257, -1,256, 264, 258, -1,172, 256, 258, -1,265, 262, 194, -1,268, 267, 266, -1, + 270, 266, 269, -1,273, 272, 271, -1,272, 199, 274, -1,275, 269, 273, -1,276, 199, + 200, -1,268, 266, 270, -1,277, 268, 270, -1,278, 200, 204, -1,204, 280, 279, -1,283, + 282, 281, -1,284, 280, 283, -1,270, 269, 275, -1,268, 194, 267, -1,268, 285, 262, -1, + 260, 258, 264, -1,264, 256, 261, -1,273, 271, 275, -1,286, 287, 286, -1,271, 274, + 288, -1,272, 274, 271, -1,263, 261, 257, -1,259, 255, 260, -1,263, 262, 285, -1,285, + 268, 277, -1,270, 275, 289, -1,271, 288, 290, -1,286, 286, 291, -1,277, 270, 289, -1, + 292, 288, 274, -1,200, 278, 276, -1,293, 276, 278, -1,294, 278, 279, -1,204, 279, + 278, -1,283, 281, 284, -1,295, 284, 281, -1,297, 281, 296, -1,282, 296, 281, -1,284, + 298, 279, -1,280, 284, 279, -1,276, 293, 292, -1,278, 294, 293, -1,284, 295, 298, -1, + 296, 299, 297, -1,281, 297, 295, -1,279, 298, 294, -1,292, 274, 276, -1,199, 276, + 300, -1,296, 282, 301, -1,303, 301, 302, -1,306, 305, 304, -1,308, 304, 307, -1,305, + 309, 302, -1,301, 303, 296, -1,299, 296, 303, -1,310, 303, 309, -1,302, 309, 303, -1, + 304, 308, 306, -1,311, 306, 308, -1,313, 308, 312, -1,307, 312, 308, -1,306, 314, + 309, -1,305, 306, 309, -1,315, 312, 307, -1,315, 317, 316, -1,319, 316, 318, -1,322, + 321, 320, -1,321, 324, 323, -1,325, 318, 322, -1,327, 324, 326, -1,315, 316, 319, -1, + 330, 329, 328, -1,332, 326, 331, -1,331, 334, 333, -1,336, 252, 335, -1,337, 334, + 336, -1,319, 318, 325, -1,315, 307, 317, -1,315, 338, 312, -1,310, 309, 314, -1,314, + 306, 311, -1,322, 320, 325, -1,325, 320, 339, -1,342, 341, 340, -1,321, 323, 320, -1, + 313, 311, 308, -1,299, 303, 310, -1,313, 312, 338, -1,343, 329, 330, -1,328, 345, + 344, -1,342, 340, 346, -1,325, 339, 347, -1,330, 328, 344, -1,348, 340, 341, -1,326, + 332, 327, -1,349, 327, 332, -1,350, 332, 333, -1,331, 333, 332, -1,336, 335, 337, -1, + 351, 337, 335, -1,352, 335, 253, -1,252, 253, 335, -1,337, 353, 333, -1,334, 337, + 333, -1,327, 349, 354, -1,332, 350, 349, -1,337, 351, 353, -1,253, 259, 352, -1,335, + 352, 351, -1,333, 353, 350, -1,348, 341, 355, -1,324, 327, 323, -1,358, 357, 356, -1, + 358, 360, 359, -1,360, 358, 356, -1,361, 362, 361, -1,363, 361, 362, -1,357, 361, + 363, -1,363, 356, 357, -1,364, 359, 360, -1,366, 365, 361, -1,367, 366, 361, -1,365, + 366, 368, -1,368, 369, 365, -1,364, 370, 359, -1,371, 359, 370, -1,371, 370, 367, -1, + 367, 361, 371, -1,361, 362, 361, -1,361, 372, 361, -1,373, 372, 361, -1,361, 373, + 361, -1,361, 375, 374, -1,374, 375, 376, -1,361, 374, 373, -1,361, 372, 362, -1,376, + 375, 377, -1,378, 377, 375, -1,378, 379, 377, -1,380, 379, 378, -1,382, 380, 381, -1, + 381, 383, 382, -1,379, 380, 382, -1,384, 383, 381, -1,386, 385, 368, -1,386, 387, + 385, -1,388, 387, 386, -1,390, 388, 389, -1,392, 391, 389, -1,390, 389, 391, -1,390, + 387, 388, -1,361, 391, 393, -1,394, 361, 393, -1,361, 361, 394, -1,395, 361, 394, -1, + 398, 397, 396, -1,395, 396, 397, -1,395, 397, 361, -1,391, 392, 393, -1,401, 400, + 399, -1,403, 400, 402, -1,401, 402, 400, -1,404, 401, 399, -1,384, 405, 383, -1,406, + 405, 404, -1,404, 399, 406, -1,405, 406, 383, -1,409, 408, 407, -1,396, 409, 410, -1, + 410, 409, 407, -1,412, 411, 402, -1,411, 403, 402, -1,408, 411, 412, -1,412, 407, + 408, -1,396, 410, 398, -1,368, 385, 369, -1,363, 362, 413, -1,414, 363, 413, -1,356, + 363, 415, -1,360, 356, 415, -1,417, 414, 416, -1,413, 416, 414, -1,418, 415, 417, -1, + 414, 417, 415, -1,415, 418, 419, -1,420, 418, 417, -1,415, 363, 414, -1,421, 417, + 416, -1,419, 360, 415, -1,422, 370, 364, -1,423, 366, 367, -1,424, 368, 366, -1,425, + 367, 370, -1,426, 419, 418, -1,364, 419, 427, -1,364, 427, 422, -1,427, 419, 428, -1, + 431, 430, 429, -1,367, 425, 423, -1,366, 423, 424, -1,423, 425, 432, -1,425, 370, + 422, -1,422, 427, 433, -1,424, 386, 368, -1,360, 419, 364, -1,424, 423, 432, -1,435, + 421, 434, -1,421, 416, 434, -1,426, 420, 436, -1,417, 421, 420, -1,419, 426, 428, -1, + 428, 426, 436, -1,418, 420, 426, -1,437, 420, 421, -1,435, 434, 438, -1,439, 436, + 437, -1,421, 435, 437, -1,436, 439, 440, -1,420, 437, 436, -1,440, 428, 436, -1,441, + 433, 440, -1,428, 440, 433, -1,429, 441, 442, -1,433, 441, 429, -1,431, 429, 432, -1, + 432, 429, 443, -1,429, 422, 433, -1,444, 441, 440, -1,445, 444, 440, -1,446, 441, + 444, -1,447, 446, 444, -1,449, 448, 447, -1,446, 447, 448, -1,448, 449, 450, -1,443, + 429, 442, -1,451, 432, 443, -1,439, 445, 440, -1,433, 427, 428, -1,424, 432, 451, -1, + 424, 451, 452, -1,388, 386, 452, -1,453, 389, 388, -1,454, 389, 453, -1,452, 453, + 388, -1,457, 456, 455, -1,459, 458, 451, -1,458, 452, 451, -1,460, 454, 457, -1,452, + 458, 457, -1,461, 454, 460, -1,462, 460, 457, -1,456, 457, 463, -1,464, 457, 458, -1, + 454, 392, 389, -1,386, 424, 452, -1,465, 393, 392, -1,466, 395, 394, -1,467, 396, + 395, -1,468, 394, 393, -1,469, 465, 461, -1,392, 461, 465, -1,465, 469, 470, -1,460, + 469, 461, -1,468, 465, 471, -1,394, 468, 466, -1,395, 466, 467, -1,466, 468, 472, -1, + 468, 393, 465, -1,467, 466, 473, -1,454, 461, 392, -1,474, 469, 460, -1,476, 475, + 450, -1,475, 477, 450, -1,464, 462, 457, -1,458, 459, 464, -1,462, 474, 460, -1,479, + 462, 478, -1,474, 470, 469, -1,480, 478, 475, -1,482, 481, 481, -1,480, 475, 476, -1, + 483, 474, 479, -1,478, 480, 479, -1,474, 483, 484, -1,474, 462, 479, -1,484, 470, + 474, -1,485, 481, 481, -1,486, 471, 484, -1,470, 484, 471, -1,472, 486, 487, -1,471, + 486, 472, -1,466, 472, 473, -1,473, 472, 488, -1,472, 468, 471, -1,489, 486, 484, -1, + 490, 489, 484, -1,487, 486, 489, -1,491, 487, 489, -1,492, 488, 491, -1,487, 491, + 488, -1,488, 472, 487, -1,483, 490, 484, -1,471, 465, 470, -1,448, 450, 477, -1,409, + 396, 467, -1,493, 409, 467, -1,408, 409, 494, -1,411, 408, 494, -1,495, 493, 473, -1, + 467, 473, 493, -1,496, 494, 495, -1,493, 495, 494, -1,494, 496, 497, -1,498, 496, + 495, -1,494, 409, 493, -1,499, 495, 473, -1,497, 411, 494, -1,500, 400, 403, -1,501, + 406, 399, -1,502, 383, 406, -1,503, 399, 400, -1,504, 497, 496, -1,403, 497, 505, -1, + 403, 505, 500, -1,505, 497, 506, -1,503, 500, 507, -1,399, 503, 501, -1,406, 501, + 502, -1,501, 503, 508, -1,503, 400, 500, -1,500, 505, 509, -1,502, 382, 383, -1,411, + 497, 403, -1,502, 501, 508, -1,510, 499, 488, -1,499, 473, 488, -1,504, 498, 511, -1, + 495, 499, 498, -1,497, 504, 506, -1,506, 504, 511, -1,496, 498, 504, -1,512, 498, + 499, -1,510, 488, 492, -1,513, 511, 512, -1,499, 510, 512, -1,511, 513, 514, -1,498, + 512, 511, -1,514, 506, 511, -1,515, 509, 514, -1,506, 514, 509, -1,507, 515, 516, -1, + 509, 515, 507, -1,503, 507, 508, -1,508, 507, 517, -1,507, 500, 509, -1,519, 518, + 514, -1,520, 519, 514, -1,521, 518, 519, -1,522, 521, 519, -1,524, 523, 522, -1,521, + 522, 523, -1,523, 524, 525, -1,517, 507, 516, -1,526, 508, 517, -1,513, 520, 514, -1, + 509, 505, 506, -1,502, 508, 526, -1,502, 526, 527, -1,379, 382, 527, -1,528, 377, + 379, -1,529, 377, 528, -1,527, 528, 379, -1,530, 528, 527, -1,532, 531, 526, -1,531, + 527, 526, -1,533, 529, 530, -1,527, 531, 530, -1,534, 529, 533, -1,535, 533, 530, -1, + 528, 530, 529, -1,536, 530, 531, -1,529, 376, 377, -1,382, 502, 527, -1,537, 374, + 376, -1,538, 372, 373, -1,413, 362, 372, -1,539, 373, 374, -1,540, 537, 534, -1,376, + 534, 537, -1,537, 540, 541, -1,533, 540, 534, -1,539, 537, 542, -1,373, 539, 538, -1, + 372, 538, 413, -1,538, 539, 543, -1,539, 374, 537, -1,413, 538, 416, -1,529, 534, + 376, -1,544, 540, 533, -1,546, 545, 525, -1,532, 526, 547, -1,536, 535, 530, -1,531, + 532, 536, -1,535, 544, 533, -1,550, 549, 548, -1,544, 541, 540, -1,551, 548, 545, -1, + 546, 525, 552, -1,551, 545, 546, -1,553, 544, 550, -1,548, 551, 550, -1,544, 553, + 554, -1,544, 549, 550, -1,554, 541, 544, -1,524, 552, 525, -1,555, 542, 554, -1,541, + 554, 542, -1,543, 555, 556, -1,542, 555, 543, -1,538, 543, 416, -1,416, 543, 434, -1, + 543, 539, 542, -1,557, 555, 554, -1,558, 557, 554, -1,556, 555, 557, -1,559, 556, + 557, -1,438, 434, 559, -1,556, 559, 434, -1,434, 543, 556, -1,553, 558, 554, -1,542, + 537, 541, -1,517, 547, 526, -1,560, 492, 491, -1,561, 491, 489, -1,562, 490, 483, -1, + 563, 483, 479, -1,490, 564, 489, -1,491, 561, 560, -1,565, 560, 561, -1,566, 561, + 564, -1,489, 564, 561, -1,483, 563, 562, -1,567, 562, 563, -1,569, 563, 568, -1,479, + 568, 563, -1,562, 570, 564, -1,490, 562, 564, -1,571, 568, 479, -1,571, 480, 476, -1, + 573, 476, 572, -1,449, 447, 574, -1,447, 444, 575, -1,576, 572, 449, -1,577, 444, + 445, -1,571, 476, 573, -1,578, 571, 573, -1,579, 445, 439, -1,439, 437, 580, -1,435, + 438, 581, -1,582, 437, 435, -1,573, 572, 576, -1,571, 479, 480, -1,571, 583, 568, -1, + 566, 564, 570, -1,570, 562, 567, -1,449, 574, 576, -1,576, 574, 584, -1,574, 575, + 585, -1,447, 575, 574, -1,569, 567, 563, -1,565, 561, 566, -1,569, 568, 583, -1,583, + 571, 578, -1,573, 576, 586, -1,574, 585, 584, -1,576, 584, 586, -1,578, 573, 586, -1, + 587, 585, 575, -1,445, 579, 577, -1,588, 577, 579, -1,589, 579, 580, -1,439, 580, + 579, -1,435, 581, 582, -1,590, 582, 581, -1,592, 581, 591, -1,438, 591, 581, -1,582, + 593, 580, -1,437, 582, 580, -1,577, 588, 587, -1,579, 589, 588, -1,582, 590, 593, -1, + 591, 594, 592, -1,581, 592, 590, -1,580, 593, 589, -1,587, 575, 577, -1,444, 577, + 575, -1,591, 438, 559, -1,595, 559, 557, -1,596, 558, 553, -1,597, 553, 550, -1,558, + 598, 557, -1,559, 595, 591, -1,594, 591, 595, -1,599, 595, 598, -1,557, 598, 595, -1, + 553, 597, 596, -1,600, 596, 597, -1,602, 597, 601, -1,550, 601, 597, -1,596, 603, + 598, -1,558, 596, 598, -1,604, 601, 550, -1,604, 551, 546, -1,605, 546, 552, -1,524, + 522, 606, -1,522, 519, 607, -1,608, 552, 524, -1,609, 519, 520, -1,604, 546, 605, -1, + 610, 604, 605, -1,611, 520, 513, -1,513, 512, 612, -1,510, 492, 613, -1,614, 512, + 510, -1,605, 552, 608, -1,604, 550, 551, -1,604, 615, 601, -1,599, 598, 603, -1,603, + 596, 600, -1,524, 606, 608, -1,608, 606, 616, -1,606, 607, 617, -1,522, 607, 606, -1, + 602, 600, 597, -1,594, 595, 599, -1,602, 601, 615, -1,615, 604, 610, -1,605, 608, + 618, -1,606, 617, 616, -1,608, 616, 618, -1,610, 605, 618, -1,619, 617, 607, -1,520, + 611, 609, -1,620, 609, 611, -1,621, 611, 612, -1,513, 612, 611, -1,510, 613, 614, -1, + 622, 614, 613, -1,623, 613, 560, -1,492, 560, 613, -1,614, 624, 612, -1,512, 614, + 612, -1,609, 620, 619, -1,611, 621, 620, -1,614, 622, 624, -1,560, 565, 623, -1,613, + 623, 622, -1,612, 624, 621, -1,619, 607, 609, -1,519, 609, 607, -1,592, 594, 625, -1, + 626, 592, 625, -1,590, 592, 627, -1,593, 590, 627, -1,629, 626, 628, -1,625, 628, + 626, -1,630, 627, 629, -1,626, 629, 627, -1,627, 630, 631, -1,632, 630, 629, -1,627, + 592, 626, -1,633, 629, 628, -1,631, 593, 627, -1,634, 588, 589, -1,635, 585, 587, -1, + 638, 637, 636, -1,639, 587, 588, -1,640, 631, 630, -1,589, 631, 641, -1,589, 641, + 634, -1,641, 631, 642, -1,644, 634, 643, -1,587, 639, 635, -1,585, 635, 645, -1,647, + 644, 646, -1,639, 588, 634, -1,634, 641, 648, -1,638, 649, 637, -1,593, 631, 589, -1, + 638, 647, 646, -1,651, 633, 650, -1,633, 628, 650, -1,640, 632, 652, -1,629, 633, + 632, -1,631, 640, 642, -1,642, 640, 652, -1,630, 632, 640, -1,653, 632, 633, -1,651, + 650, 654, -1,655, 652, 653, -1,633, 651, 653, -1,652, 655, 656, -1,632, 653, 652, -1, + 656, 642, 652, -1,657, 648, 656, -1,642, 656, 648, -1,643, 659, 658, -1,648, 657, + 643, -1,644, 643, 646, -1,646, 643, 660, -1,643, 634, 648, -1,661, 657, 656, -1,662, + 661, 656, -1,663, 657, 661, -1,664, 663, 661, -1,665, 660, 664, -1,663, 664, 660, -1, + 660, 665, 666, -1,667, 643, 658, -1,668, 646, 660, -1,655, 662, 656, -1,648, 641, + 642, -1,645, 670, 669, -1,645, 669, 671, -1,578, 586, 671, -1,672, 583, 578, -1,673, + 583, 672, -1,671, 672, 578, -1,676, 675, 674, -1,678, 677, 668, -1,677, 674, 668, -1, + 679, 673, 676, -1,674, 677, 676, -1,680, 673, 679, -1,681, 679, 676, -1,675, 676, + 673, -1,682, 676, 677, -1,673, 569, 583, -1,586, 645, 671, -1,683, 567, 569, -1,684, + 566, 570, -1,685, 565, 566, -1,686, 570, 567, -1,687, 683, 680, -1,569, 680, 683, -1, + 683, 687, 688, -1,679, 687, 680, -1,686, 683, 689, -1,570, 686, 684, -1,566, 684, + 685, -1,684, 686, 690, -1,686, 567, 683, -1,685, 684, 691, -1,673, 680, 569, -1,692, + 687, 679, -1,693, 678, 666, -1,678, 668, 666, -1,682, 694, 676, -1,677, 678, 695, -1, + 681, 692, 679, -1,696, 681, 695, -1,692, 688, 687, -1,697, 695, 678, -1,693, 666, + 698, -1,697, 678, 693, -1,699, 692, 696, -1,695, 697, 696, -1,692, 699, 700, -1,692, + 681, 696, -1,700, 688, 692, -1,665, 698, 666, -1,701, 689, 700, -1,688, 700, 689, -1, + 690, 701, 702, -1,689, 701, 690, -1,684, 690, 691, -1,691, 690, 703, -1,690, 686, + 689, -1,704, 701, 700, -1,705, 704, 700, -1,702, 701, 704, -1,706, 702, 704, -1,707, + 703, 706, -1,702, 706, 703, -1,703, 690, 702, -1,699, 705, 700, -1,689, 683, 688, -1, + 660, 666, 668, -1,623, 565, 685, -1,708, 623, 685, -1,622, 623, 709, -1,624, 622, + 709, -1,710, 708, 691, -1,685, 691, 708, -1,711, 709, 710, -1,708, 710, 709, -1,709, + 711, 712, -1,713, 711, 710, -1,709, 623, 708, -1,714, 710, 691, -1,712, 624, 709, -1, + 715, 620, 621, -1,716, 617, 619, -1,717, 616, 617, -1,718, 619, 620, -1,719, 712, + 711, -1,621, 712, 720, -1,621, 720, 715, -1,720, 712, 721, -1,723, 715, 722, -1,619, + 718, 716, -1,617, 716, 717, -1,725, 723, 724, -1,718, 620, 715, -1,715, 720, 726, -1, + 717, 618, 616, -1,624, 712, 621, -1,727, 725, 724, -1,728, 714, 703, -1,714, 691, + 703, -1,719, 713, 729, -1,710, 714, 713, -1,712, 719, 721, -1,721, 719, 729, -1,711, + 713, 719, -1,730, 713, 714, -1,728, 703, 707, -1,731, 729, 730, -1,714, 728, 730, -1, + 729, 731, 732, -1,713, 730, 729, -1,732, 721, 729, -1,733, 726, 732, -1,721, 732, + 726, -1,722, 733, 734, -1,726, 733, 722, -1,723, 722, 724, -1,724, 722, 735, -1,722, + 715, 726, -1,736, 733, 732, -1,737, 736, 732, -1,734, 733, 736, -1,738, 734, 736, -1, + 739, 735, 738, -1,734, 738, 735, -1,735, 739, 740, -1,735, 722, 734, -1,741, 724, + 735, -1,731, 737, 732, -1,726, 720, 721, -1,727, 724, 741, -1,727, 741, 742, -1,610, + 618, 743, -1,744, 615, 610, -1,745, 615, 744, -1,743, 744, 610, -1,747, 746, 742, -1, + 749, 748, 741, -1,748, 742, 741, -1,750, 745, 747, -1,742, 748, 747, -1,751, 745, + 750, -1,752, 750, 747, -1,746, 747, 745, -1,753, 747, 748, -1,745, 602, 615, -1,618, + 717, 743, -1,754, 600, 602, -1,755, 599, 603, -1,625, 594, 599, -1,756, 603, 600, -1, + 757, 754, 751, -1,602, 751, 754, -1,754, 757, 758, -1,750, 757, 751, -1,756, 754, + 759, -1,603, 756, 755, -1,599, 755, 625, -1,755, 756, 760, -1,756, 600, 754, -1,625, + 755, 628, -1,745, 751, 602, -1,761, 757, 750, -1,762, 749, 740, -1,749, 741, 740, -1, + 753, 752, 747, -1,748, 749, 753, -1,752, 761, 750, -1,763, 752, 753, -1,761, 758, + 757, -1,764, 753, 749, -1,762, 740, 765, -1,764, 749, 762, -1,766, 761, 763, -1,753, + 764, 763, -1,761, 766, 767, -1,761, 752, 763, -1,767, 758, 761, -1,739, 765, 740, -1, + 768, 759, 767, -1,758, 767, 759, -1,760, 768, 769, -1,759, 768, 760, -1,755, 760, + 628, -1,628, 760, 650, -1,760, 756, 759, -1,770, 768, 767, -1,771, 770, 767, -1,769, + 768, 770, -1,772, 769, 770, -1,654, 650, 772, -1,769, 772, 650, -1,650, 760, 769, -1, + 766, 771, 767, -1,759, 754, 758, -1,735, 740, 741, -1,773, 653, 651, -1,653, 773, + 774, -1,774, 655, 653, -1,655, 774, 775, -1,776, 654, 772, -1,654, 776, 651, -1,13, + 651, 776, -1,651, 13, 773, -1,13, 664, 777, -1,664, 13, 665, -1,778, 665, 13, -1, + 665, 778, 779, -1,775, 662, 655, -1,662, 775, 661, -1,777, 661, 775, -1,661, 777, + 664, -1,13, 772, 13, -1,772, 13, 776, -1,13, 770, 13, -1,770, 13, 772, -1,13, 771, + 780, -1,771, 13, 770, -1,780, 766, 763, -1,766, 780, 771, -1,781, 763, 764, -1,763, + 781, 780, -1,782, 764, 762, -1,764, 782, 781, -1,784, 762, 783, -1,762, 784, 782, -1, + 783, 765, 739, -1,765, 783, 762, -1,698, 779, 693, -1,779, 698, 665, -1,693, 786, + 785, -1,786, 693, 779, -1,697, 785, 787, -1,785, 697, 693, -1,696, 787, 788, -1,787, + 696, 697, -1,699, 788, 705, -1,788, 699, 696, -1,705, 13, 704, -1,13, 705, 788, -1, + 704, 13, 706, -1,13, 704, 13, -1,706, 13, 13, -1,13, 706, 13, -1,736, 789, 738, -1, + 789, 736, 790, -1,737, 790, 736, -1,790, 737, 731, -1,739, 791, 783, -1,791, 739, + 792, -1,738, 792, 739, -1,792, 738, 789, -1,728, 13, 793, -1,13, 728, 13, -1,707, + 13, 728, -1,13, 707, 706, -1,731, 794, 790, -1,794, 731, 730, -1,730, 793, 794, -1, + 793, 730, 728, -1,797, 796, 795, -1,799, 795, 798, -1,802, 801, 800, -1,804, 800, + 803, -1,801, 805, 798, -1,795, 799, 797, -1,806, 797, 799, -1,807, 799, 805, -1,798, + 805, 799, -1,800, 804, 802, -1,808, 802, 804, -1,810, 804, 809, -1,811, 809, 804, -1, + 802, 812, 805, -1,801, 802, 805, -1,813, 809, 811, -1,813, 815, 814, -1,817, 814, + 816, -1,820, 819, 818, -1,819, 822, 821, -1,825, 824, 823, -1,827, 822, 826, -1,813, + 814, 817, -1,830, 829, 828, -1,832, 826, 831, -1,831, 834, 833, -1,837, 836, 835, -1, + 838, 834, 837, -1,828, 824, 825, -1,813, 811, 815, -1,829, 839, 809, -1,807, 805, + 812, -1,812, 802, 808, -1,820, 818, 840, -1,825, 842, 841, -1,842, 844, 843, -1,819, + 821, 818, -1,810, 808, 804, -1,806, 799, 807, -1,810, 809, 839, -1,839, 829, 830, -1, + 828, 825, 845, -1,842, 843, 841, -1,825, 841, 845, -1,830, 828, 845, -1,846, 843, + 844, -1,826, 832, 827, -1,847, 827, 832, -1,848, 832, 833, -1,831, 833, 832, -1,837, + 835, 838, -1,849, 838, 835, -1,851, 835, 850, -1,836, 850, 835, -1,838, 852, 833, -1, + 834, 838, 833, -1,827, 847, 846, -1,832, 848, 847, -1,838, 849, 852, -1,850, 853, + 851, -1,835, 851, 849, -1,833, 852, 848, -1,846, 844, 827, -1,822, 827, 821, -1,850, + 836, 854, -1,856, 854, 855, -1,859, 858, 857, -1,861, 857, 860, -1,858, 862, 855, -1, + 854, 856, 850, -1,853, 850, 856, -1,863, 856, 862, -1,855, 862, 856, -1,857, 861, + 859, -1,864, 859, 861, -1,866, 861, 865, -1,860, 865, 861, -1,859, 867, 862, -1,858, + 859, 862, -1,868, 865, 860, -1,868, 870, 869, -1,872, 869, 871, -1,875, 874, 873, -1, + 874, 877, 876, -1,878, 871, 875, -1,880, 877, 879, -1,868, 869, 872, -1,881, 868, + 872, -1,883, 879, 882, -1,882, 885, 884, -1,887, 796, 886, -1,888, 885, 887, -1,872, + 871, 878, -1,868, 860, 870, -1,890, 889, 865, -1,863, 862, 867, -1,867, 859, 864, -1, + 875, 873, 878, -1,878, 873, 891, -1,873, 876, 892, -1,874, 876, 873, -1,866, 864, + 861, -1,853, 856, 863, -1,866, 865, 889, -1,889, 868, 881, -1,872, 878, 893, -1,873, + 892, 891, -1,878, 891, 893, -1,881, 872, 893, -1,894, 892, 876, -1,879, 883, 880, -1, + 895, 880, 883, -1,896, 883, 884, -1,882, 884, 883, -1,887, 886, 888, -1,897, 888, + 886, -1,898, 886, 797, -1,796, 797, 886, -1,888, 899, 884, -1,885, 888, 884, -1,880, + 895, 900, -1,883, 896, 895, -1,888, 897, 899, -1,797, 806, 898, -1,886, 898, 897, -1, + 884, 899, 896, -1,894, 876, 880, -1,877, 880, 876, -1,903, 902, 901, -1,905, 901, + 904, -1,906, 808, 810, -1,909, 908, 907, -1,908, 910, 810, -1,808, 911, 904, -1,901, + 905, 903, -1,912, 903, 905, -1,913, 905, 911, -1,904, 911, 905, -1,810, 910, 906, -1, + 914, 906, 910, -1,907, 915, 909, -1,916, 909, 915, -1,909, 917, 910, -1,908, 909, + 910, -1,906, 918, 911, -1,808, 906, 911, -1,919, 915, 907, -1,919, 921, 920, -1,923, + 920, 922, -1,925, 847, 924, -1,848, 852, 926, -1,848, 927, 847, -1,928, 922, 925, -1, + 923, 922, 929, -1,930, 919, 923, -1,847, 927, 924, -1,922, 931, 929, -1,929, 932, + 923, -1,925, 933, 928, -1,936, 935, 934, -1,927, 848, 926, -1,938, 937, 935, -1,939, + 852, 936, -1,933, 925, 940, -1,919, 920, 923, -1,919, 907, 921, -1,919, 941, 915, -1, + 911, 918, 913, -1,932, 929, 942, -1,906, 914, 918, -1,931, 922, 928, -1,929, 943, + 942, -1,943, 929, 931, -1,912, 905, 913, -1,914, 910, 917, -1,917, 909, 916, -1,941, + 919, 930, -1,923, 932, 944, -1,923, 944, 930, -1,941, 916, 915, -1,925, 924, 940, -1, + 940, 945, 933, -1,946, 926, 939, -1,936, 934, 939, -1,939, 934, 947, -1,938, 948, + 937, -1,937, 948, 949, -1,950, 934, 937, -1,935, 937, 934, -1,927, 951, 924, -1,852, + 939, 926, -1,953, 952, 927, -1,926, 946, 953, -1,953, 927, 926, -1,946, 939, 947, -1, + 950, 937, 949, -1,947, 934, 950, -1,952, 951, 927, -1,928, 954, 954, -1,948, 938, + 955, -1,957, 955, 956, -1,959, 958, 866, -1,960, 866, 889, -1,958, 961, 956, -1,955, + 957, 948, -1,949, 948, 957, -1,962, 957, 961, -1,956, 961, 957, -1,866, 960, 959, -1, + 963, 959, 960, -1,965, 960, 964, -1,889, 964, 960, -1,959, 966, 961, -1,958, 959, + 961, -1,967, 964, 889, -1,967, 969, 968, -1,971, 968, 970, -1,973, 900, 972, -1,900, + 895, 974, -1,975, 970, 973, -1,977, 895, 976, -1,967, 968, 971, -1,978, 967, 971, -1, + 980, 976, 979, -1,979, 982, 981, -1,984, 902, 983, -1,985, 982, 984, -1,971, 970, + 975, -1,967, 889, 969, -1,967, 986, 964, -1,962, 961, 966, -1,966, 959, 963, -1,973, + 972, 975, -1,975, 972, 987, -1,972, 974, 988, -1,900, 974, 972, -1,965, 963, 960, -1, + 949, 957, 962, -1,965, 964, 986, -1,986, 967, 978, -1,971, 975, 989, -1,972, 988, + 987, -1,975, 987, 989, -1,978, 971, 989, -1,990, 988, 974, -1,976, 980, 977, -1,991, + 977, 980, -1,992, 980, 981, -1,979, 981, 980, -1,984, 983, 985, -1,993, 985, 983, -1, + 994, 983, 903, -1,902, 903, 983, -1,985, 995, 981, -1,982, 985, 981, -1,977, 991, + 990, -1,980, 992, 991, -1,985, 993, 995, -1,903, 912, 994, -1,983, 994, 993, -1,981, + 995, 992, -1,990, 974, 977, -1,895, 977, 974, -1,998, 997, 996, -1,1000, 996, 999, -1, + 996, 1000, 998, -1,1001, 998, 1000, -1,1003, 1000, 1002, -1,999, 1002, 1000, -1,1004, + 1002, 999, -1,1006, 1004, 1005, -1,1008, 1005, 1007, -1,1010, 930, 1009, -1,930, + 944, 1009, -1,941, 930, 1011, -1,941, 1012, 1007, -1,1004, 1006, 1002, -1,1013, 1006, + 1008, -1,1014, 998, 1001, -1,1003, 1001, 1000, -1,1005, 1008, 1006, -1,1003, 1002, + 1015, -1,1006, 1013, 1015, -1,1002, 1006, 1015, -1,1016, 1013, 1008, -1,941, 1011, + 1012, -1,1017, 1012, 1011, -1,1018, 1011, 1010, -1,930, 1010, 1011, -1,1012, 1017, + 1016, -1,1010, 1019, 1018, -1,1011, 1018, 1017, -1,1016, 1008, 1012, -1,1009, 1019, + 1010, -1,1007, 1012, 1008, -1,1020, 953, 946, -1,1021, 946, 947, -1,1023, 950, 1022, -1, + 1026, 1025, 1024, -1,1025, 1027, 1022, -1,950, 1028, 947, -1,947, 1028, 1021, -1, + 1029, 1020, 1021, -1,950, 1023, 1028, -1,1030, 1028, 1023, -1,1028, 1031, 1021, -1, + 1022, 1027, 1023, -1,1024, 1032, 1026, -1,1026, 1027, 1025, -1,1024, 1033, 1032, -1, + 1034, 1026, 1032, -1,1026, 1035, 1027, -1,1036, 1032, 1033, -1,1027, 1037, 1023, -1, + 1020, 946, 1021, -1,1040, 1039, 1038, -1,1043, 1042, 1041, -1,1043, 1044, 1038, -1, + 1047, 1046, 1045, -1,1050, 1049, 1048, -1,1051, 1046, 1050, -1,1052, 1042, 1047, -1, + 1038, 1044, 1040, -1,1036, 1039, 1040, -1,1054, 1053, 1049, -1,1055, 1040, 1044, -1, + 1040, 1056, 1036, -1,1058, 1054, 1057, -1,1057, 1060, 1059, -1,1062, 997, 1061, -1, + 1063, 1060, 1062, -1,1041, 1044, 1043, -1,1036, 1033, 1039, -1,1036, 1064, 1032, -1, + 1031, 1028, 1030, -1,1037, 1027, 1035, -1,1030, 1023, 1037, -1,1042, 1052, 1041, -1, + 1041, 1052, 1065, -1,1034, 1032, 1064, -1,1045, 1066, 1052, -1,1026, 1034, 1035, -1, + 1047, 1045, 1052, -1,1029, 1021, 1031, -1,1064, 1036, 1056, -1,1055, 1044, 1067, -1, + 1056, 1040, 1055, -1,1041, 1065, 1067, -1,1045, 1068, 1066, -1,1052, 1066, 1065, -1, + 1044, 1041, 1067, -1,1069, 1068, 1045, -1,1050, 1048, 1051, -1,1069, 1051, 1048, -1, + 1054, 1058, 1053, -1,1070, 1053, 1058, -1,1053, 1071, 1048, -1,1049, 1053, 1048, -1, + 1060, 1063, 1059, -1,1072, 1059, 1063, -1,997, 998, 1061, -1,1073, 1061, 998, -1, + 1061, 1074, 1063, -1,1062, 1061, 1063, -1,1059, 1075, 1058, -1,1057, 1059, 1058, -1, + 1048, 1071, 1069, -1,1058, 1075, 1070, -1,1053, 1070, 1071, -1,1063, 1074, 1072, -1, + 998, 1014, 1073, -1,1061, 1073, 1074, -1,1059, 1072, 1075, -1,1069, 1045, 1051, -1, + 1046, 1051, 1045, -1,1078, 1077, 1076, -1,1080, 1078, 1079, -1,1076, 1079, 1078, -1, + 1079, 1076, 1081, -1,1083, 1079, 1082, -1,1079, 1083, 1080, -1,1080, 1083, 1084, -1, + 1086, 1085, 1084, -1,1088, 1087, 1086, -1,1091, 1090, 1089, -1,1087, 1092, 1090, -1, + 1094, 1093, 1091, -1,1086, 1084, 1088, -1,1085, 1080, 1084, -1,1083, 1095, 1084, -1, + 1092, 1088, 1096, -1,1082, 1079, 1081, -1,1083, 1082, 1095, -1,1088, 1092, 1087, -1, + 1097, 1084, 1095, -1,1097, 1096, 1088, -1,1097, 1088, 1084, -1,1092, 1096, 1098, -1, + 1089, 1094, 1091, -1,1094, 1089, 1099, -1,1101, 1094, 1100, -1,1094, 1101, 1093, -1, + 1098, 1099, 1089, -1,1100, 1102, 1101, -1,1099, 1100, 1094, -1,1089, 1092, 1098, -1, + 1092, 1089, 1090, -1,1103, 1093, 1101, -1,1105, 1103, 1104, -1,1101, 1104, 1103, -1, + 1104, 1101, 1102, -1,1107, 1104, 1106, -1,1104, 1107, 1105, -1,1105, 1107, 1108, -1, + 1110, 1109, 1108, -1,1112, 1111, 1110, -1,1115, 1114, 1113, -1,1111, 1116, 1114, -1, + 1117, 1077, 1115, -1,1110, 1108, 1112, -1,1109, 1105, 1108, -1,1107, 1118, 1108, -1, + 1116, 1112, 1119, -1,1106, 1104, 1102, -1,1107, 1106, 1118, -1,1112, 1116, 1111, -1, + 1120, 1108, 1118, -1,1120, 1119, 1112, -1,1120, 1112, 1108, -1,1116, 1119, 1121, -1, + 1113, 1117, 1115, -1,1117, 1113, 1122, -1,1076, 1117, 1123, -1,1117, 1076, 1077, -1, + 1121, 1122, 1113, -1,1123, 1081, 1076, -1,1122, 1123, 1117, -1,1113, 1116, 1121, -1, + 1116, 1113, 1114, -1,1126, 1125, 1124, -1,1126, 1128, 1127, -1,1128, 1126, 1124, -1, + 1128, 1124, 1129, -1,1131, 1127, 1130, -1,1133, 1132, 1131, -1,1135, 1134, 1132, -1, + 1138, 1137, 1136, -1,1140, 1139, 1137, -1,1136, 1134, 1141, -1,1128, 1130, 1127, -1, + 1130, 1133, 1131, -1,1133, 1130, 1129, -1,1135, 1133, 1129, -1,1133, 1135, 1132, -1, + 1129, 1130, 1128, -1,1135, 1129, 1141, -1,1141, 1138, 1136, -1,1138, 1141, 1129, -1, + 1140, 1138, 1129, -1,1138, 1140, 1137, -1,1140, 1129, 1142, -1,1140, 1142, 1139, -1, + 1135, 1141, 1134, -1,1143, 1139, 1142, -1,1143, 1145, 1144, -1,1145, 1143, 1142, -1, + 1145, 1142, 1129, -1,1147, 1144, 1146, -1,1149, 1148, 1147, -1,1151, 1150, 1148, -1, + 1154, 1153, 1152, -1,1155, 1125, 1153, -1,1152, 1150, 1156, -1,1145, 1146, 1144, -1, + 1146, 1149, 1147, -1,1149, 1146, 1129, -1,1151, 1149, 1129, -1,1149, 1151, 1148, -1, + 1129, 1146, 1145, -1,1151, 1129, 1156, -1,1156, 1154, 1152, -1,1154, 1156, 1129, -1, + 1155, 1154, 1129, -1,1154, 1155, 1153, -1,1155, 1129, 1124, -1,1155, 1124, 1125, -1, + 1151, 1156, 1150, -1,1103, 1093, 1157, -1,1158, 1103, 1104, -1,1157, 1104, 1103, -1, + 1104, 1157, 1102, -1,1159, 1104, 1106, -1,1104, 1159, 1158, -1,1158, 1159, 1160, -1, + 1162, 1161, 1160, -1,1163, 1111, 1162, -1,1165, 1114, 1164, -1,1111, 1166, 1114, -1, + 1168, 1167, 1165, -1,1162, 1160, 1163, -1,1161, 1158, 1160, -1,1159, 1169, 1160, -1, + 1166, 1163, 1170, -1,1106, 1104, 1102, -1,1159, 1106, 1169, -1,1163, 1166, 1111, -1, + 1171, 1160, 1169, -1,1171, 1170, 1163, -1,1171, 1163, 1160, -1,1166, 1170, 1172, -1, + 1164, 1168, 1165, -1,1168, 1164, 1122, -1,1174, 1168, 1173, -1,1168, 1174, 1167, -1, + 1172, 1122, 1164, -1,1173, 1175, 1174, -1,1122, 1173, 1168, -1,1164, 1166, 1172, -1, + 1166, 1164, 1114, -1,1176, 1167, 1174, -1,1080, 1176, 1177, -1,1174, 1177, 1176, -1, + 1177, 1174, 1175, -1,1083, 1177, 1178, -1,1177, 1083, 1080, -1,1080, 1083, 1179, -1, + 1086, 1085, 1179, -1,1181, 1180, 1086, -1,1091, 1183, 1182, -1,1180, 1184, 1183, -1, + 1094, 1093, 1091, -1,1086, 1179, 1181, -1,1085, 1080, 1179, -1,1083, 1185, 1179, -1, + 1184, 1181, 1186, -1,1178, 1177, 1175, -1,1083, 1178, 1185, -1,1181, 1184, 1180, -1, + 1187, 1179, 1185, -1,1187, 1186, 1181, -1,1187, 1181, 1179, -1,1184, 1186, 1188, -1, + 1182, 1094, 1091, -1,1094, 1182, 1189, -1,1157, 1094, 1100, -1,1094, 1157, 1093, -1, + 1188, 1189, 1182, -1,1100, 1102, 1157, -1,1189, 1100, 1094, -1,1182, 1184, 1188, -1, + 1184, 1182, 1183, -1,1143, 1139, 1190, -1,1143, 1192, 1191, -1,1192, 1143, 1190, -1, + 1192, 1190, 1193, -1,1195, 1191, 1194, -1,1197, 1196, 1195, -1,1199, 1198, 1196, -1, + 1202, 1201, 1200, -1,1204, 1203, 1201, -1,1200, 1198, 1205, -1,1192, 1194, 1191, -1, + 1194, 1197, 1195, -1,1197, 1194, 1193, -1,1199, 1197, 1193, -1,1197, 1199, 1196, -1, + 1193, 1194, 1192, -1,1199, 1193, 1205, -1,1205, 1202, 1200, -1,1202, 1205, 1193, -1, + 1204, 1202, 1193, -1,1202, 1204, 1201, -1,1204, 1193, 1206, -1,1204, 1206, 1203, -1, + 1199, 1205, 1198, -1,1207, 1203, 1206, -1,1207, 1209, 1208, -1,1209, 1207, 1206, -1, + 1209, 1206, 1193, -1,1211, 1208, 1210, -1,1213, 1212, 1211, -1,1215, 1214, 1212, -1, + 1218, 1217, 1216, -1,1219, 1139, 1217, -1,1216, 1214, 1220, -1,1209, 1210, 1208, -1, + 1210, 1213, 1211, -1,1213, 1210, 1193, -1,1215, 1213, 1193, -1,1213, 1215, 1212, -1, + 1193, 1210, 1209, -1,1215, 1193, 1220, -1,1220, 1218, 1216, -1,1218, 1220, 1193, -1, + 1219, 1218, 1193, -1,1218, 1219, 1217, -1,1219, 1193, 1190, -1,1219, 1190, 1139, -1, + 1215, 1220, 1214, -1,1223, 1222, 1221, -1,1225, 1224, 1223, -1,1227, 1224, 1226, -1, + 1229, 1222, 1228, -1,1231, 1230, 1229, -1,1229, 1228, 1231, -1,1232, 1229, 1230, -1, + 1224, 1225, 1226, -1,1234, 1233, 361, -1,361, 361, 1234, -1,361, 1234, 361, -1,1233, + 1224, 1227, -1,1222, 1229, 1221, -1,1223, 1221, 1225, -1,1229, 1232, 1235, -1,1234, + 1224, 1233, -1,1235, 1232, 1236, -1,1239, 1238, 1237, -1,1240, 1238, 1239, -1,1239, + 1241, 1240, -1,1244, 1243, 1242, -1,1243, 1246, 1245, -1,1237, 1244, 1239, -1,1247, + 1241, 1239, -1,1246, 361, 1245, -1,1244, 1242, 1239, -1,1242, 1243, 1245, -1,1246, + 1248, 361, -1,361, 1248, 361, -1,361, 1248, 361, -1,361, 1246, 361, -1,1246, 361, + 361, -1,1236, 1241, 1247, -1,361, 1234, 361, -1,1246, 361, 361, -1,361, 1246, 361, -1, + 1250, 1249, 1235, -1,1253, 1252, 1251, -1,1254, 1251, 1249, -1,1252, 1246, 361, -1, + 1251, 1254, 1253, -1,1254, 1249, 1255, -1,1255, 1249, 1256, -1,1249, 1250, 1257, -1, + 1258, 1250, 1235, -1,1249, 1257, 1256, -1,1246, 1252, 1253, -1,361, 1246, 1234, -1, + 1247, 1258, 1235, -1,1260, 1247, 1259, -1,1263, 1262, 1261, -1,1262, 1264, 1259, -1, + 361, 1248, 1265, -1,1267, 1266, 1265, -1,1248, 1267, 1265, -1,1259, 1269, 1268, -1, + 1259, 1268, 1270, -1,1269, 1259, 1264, -1,1266, 1267, 1271, -1,1267, 1261, 1271, -1, + 1263, 1261, 1267, -1,1262, 1263, 1264, -1,1260, 1259, 1270, -1,1260, 1258, 1247, -1, + 361, 1248, 361, -1,1235, 1236, 1247, -1,1274, 1273, 1272, -1,1276, 1272, 1275, -1, + 1279, 1278, 1277, -1,1281, 1277, 1280, -1,1278, 1282, 1275, -1,1272, 1276, 1274, -1, + 1283, 1274, 1276, -1,1284, 1276, 1282, -1,1275, 1282, 1276, -1,1277, 1281, 1279, -1, + 1285, 1279, 1281, -1,1287, 1281, 1286, -1,1280, 1286, 1281, -1,1279, 1288, 1282, -1, + 1278, 1279, 1282, -1,1289, 1286, 1280, -1,1292, 1291, 1290, -1,1294, 1290, 1293, -1, + 1297, 1296, 1295, -1,1296, 1299, 1298, -1,1302, 1301, 1300, -1,1305, 1304, 1303, -1, + 1292, 1290, 1294, -1,1307, 1289, 1306, -1,1309, 1303, 1308, -1,1308, 1311, 1310, -1, + 1314, 1313, 1312, -1,1315, 1311, 1314, -1,1306, 1301, 1302, -1,1292, 1280, 1291, -1, + 1289, 1316, 1286, -1,1284, 1282, 1288, -1,1288, 1279, 1285, -1,1297, 1295, 1317, -1, + 1302, 1319, 1318, -1,1319, 1321, 1320, -1,1296, 1298, 1295, -1,1287, 1285, 1281, -1, + 1283, 1276, 1284, -1,1287, 1286, 1316, -1,1316, 1289, 1307, -1,1306, 1302, 1322, -1, + 1319, 1320, 1318, -1,1302, 1318, 1322, -1,1307, 1306, 1322, -1,1323, 1320, 1321, -1, + 1303, 1309, 1305, -1,1324, 1305, 1309, -1,1325, 1309, 1310, -1,1308, 1310, 1309, -1, + 1314, 1312, 1315, -1,1326, 1315, 1312, -1,1328, 1312, 1327, -1,1313, 1327, 1312, -1, + 1315, 1329, 1310, -1,1311, 1315, 1310, -1,1305, 1324, 1323, -1,1309, 1325, 1324, -1, + 1315, 1326, 1329, -1,1327, 1330, 1328, -1,1312, 1328, 1326, -1,1310, 1329, 1325, -1, + 1323, 1321, 1305, -1,1304, 1305, 1321, -1,1327, 1313, 1331, -1,1333, 1331, 1332, -1, + 1336, 1335, 1334, -1,1338, 1334, 1337, -1,1335, 1339, 1332, -1,1331, 1333, 1327, -1, + 1330, 1327, 1333, -1,1340, 1333, 1339, -1,1332, 1339, 1333, -1,1334, 1338, 1336, -1, + 1341, 1336, 1338, -1,1343, 1338, 1342, -1,1337, 1342, 1338, -1,1336, 1344, 1339, -1, + 1335, 1336, 1339, -1,1345, 1342, 1337, -1,1345, 1347, 1346, -1,1349, 1346, 1348, -1, + 1352, 1351, 1350, -1,1351, 1354, 1353, -1,1356, 1356, 1355, -1,1358, 1354, 1357, -1, + 1345, 1346, 1349, -1,1359, 1345, 1349, -1,1361, 1357, 1360, -1,1360, 1363, 1362, -1, + 1365, 1273, 1364, -1,1366, 1363, 1365, -1,1367, 1356, 1356, -1,1345, 1337, 1347, -1, + 1369, 1368, 1342, -1,1340, 1339, 1344, -1,1344, 1336, 1341, -1,1352, 1350, 1370, -1, + 1370, 1350, 1371, -1,1350, 1353, 1372, -1,1351, 1353, 1350, -1,1343, 1341, 1338, -1, + 1330, 1333, 1340, -1,1343, 1342, 1368, -1,1368, 1345, 1359, -1,1349, 1370, 1373, -1, + 1350, 1372, 1371, -1,1370, 1371, 1373, -1,1359, 1349, 1373, -1,1374, 1372, 1353, -1, + 1357, 1361, 1358, -1,1375, 1358, 1361, -1,1376, 1361, 1362, -1,1360, 1362, 1361, -1, + 1365, 1364, 1366, -1,1377, 1366, 1364, -1,1378, 1364, 1274, -1,1273, 1274, 1364, -1, + 1366, 1379, 1362, -1,1363, 1366, 1362, -1,1358, 1375, 1380, -1,1361, 1376, 1375, -1, + 1366, 1377, 1379, -1,1274, 1283, 1378, -1,1364, 1378, 1377, -1,1362, 1379, 1376, -1, + 1374, 1353, 1358, -1,1354, 1358, 1353, -1,1383, 1382, 1381, -1,1384, 1381, 248, -1, + 236, 250, 1385, -1,235, 1385, 232, -1,250, 240, 248, -1,1381, 1384, 1383, -1,1386, + 1383, 1384, -1,239, 1384, 240, -1,248, 240, 1384, -1,1385, 235, 236, -1,234, 236, + 235, -1,231, 235, 1387, -1,232, 1387, 235, -1,236, 237, 240, -1,250, 236, 240, -1, + 1388, 1387, 232, -1,1388, 228, 243, -1,1390, 243, 1389, -1,1392, 233, 1391, -1,233, + 1393, 222, -1,1394, 1389, 1392, -1,212, 1393, 218, -1,1388, 243, 1390, -1,226, 1388, + 1390, -1,213, 218, 1395, -1,1395, 219, 211, -1,215, 1397, 1396, -1,214, 219, 215, -1, + 1390, 1389, 1394, -1,1388, 232, 228, -1,1388, 1398, 1387, -1,239, 240, 237, -1,237, + 236, 234, -1,1392, 1391, 1394, -1,1394, 1391, 223, -1,1391, 222, 221, -1,233, 222, + 1391, -1,231, 234, 235, -1,1386, 1384, 239, -1,231, 1387, 1398, -1,1398, 1388, 226, -1, + 1390, 1394, 1399, -1,1391, 221, 223, -1,1394, 223, 1399, -1,226, 1390, 1399, -1,1400, + 221, 222, -1,218, 213, 212, -1,1401, 212, 213, -1,209, 213, 211, -1,1395, 211, 213, -1, + 215, 1396, 214, -1,207, 214, 1396, -1,206, 1396, 1402, -1,1397, 1402, 1396, -1,214, + 1403, 211, -1,219, 214, 211, -1,212, 1401, 1400, -1,213, 209, 1401, -1,214, 207, + 1403, -1,1402, 1404, 206, -1,1396, 206, 207, -1,211, 1403, 209, -1,1400, 222, 212, -1, + 1393, 212, 222, -1,1402, 1397, 1405, -1,1407, 1405, 1406, -1,188, 1341, 1343, -1, + 187, 1343, 1368, -1,1341, 193, 1406, -1,1405, 1407, 1402, -1,1404, 1402, 1407, -1, + 192, 1407, 193, -1,1406, 193, 1407, -1,1343, 187, 188, -1,1408, 188, 187, -1,1410, + 187, 1409, -1,1368, 1409, 187, -1,188, 1411, 193, -1,1341, 188, 193, -1,1412, 1409, + 1368, -1,1412, 183, 196, -1,1413, 196, 195, -1,1414, 1380, 180, -1,1380, 1375, 178, -1, + 1415, 195, 1414, -1,1416, 1375, 1376, -1,1412, 196, 1413, -1,1417, 1412, 1413, -1, + 168, 1376, 1379, -1,1379, 175, 167, -1,1419, 1382, 1418, -1,169, 175, 1419, -1,1413, + 195, 1415, -1,1412, 1368, 183, -1,1412, 1420, 1409, -1,192, 193, 1411, -1,1411, 188, + 1408, -1,1414, 180, 1415, -1,1415, 180, 179, -1,180, 178, 177, -1,1380, 178, 180, -1, + 1410, 1408, 187, -1,1404, 1407, 192, -1,1410, 1409, 1420, -1,1420, 1412, 1417, -1, + 1413, 1415, 182, -1,180, 177, 179, -1,1415, 179, 182, -1,1417, 1413, 182, -1,1421, + 177, 178, -1,1376, 168, 1416, -1,1422, 1416, 168, -1,1423, 168, 167, -1,1379, 167, + 168, -1,1419, 1418, 169, -1,165, 169, 1418, -1,1424, 1418, 1383, -1,1382, 1383, 1418, -1, + 169, 1425, 167, -1,175, 169, 167, -1,1416, 1422, 1421, -1,168, 1423, 1422, -1,169, + 165, 1425, -1,1383, 1386, 1424, -1,1418, 1424, 165, -1,167, 1425, 1423, -1,1421, + 178, 1416, -1,1375, 1416, 178, -1,1428, 1427, 1426, -1,1430, 1426, 1429, -1,1433, + 1432, 1431, -1,1435, 1431, 1434, -1,1432, 148, 1429, -1,1426, 1430, 1428, -1,1436, + 1428, 1430, -1,1437, 1430, 148, -1,1429, 148, 1430, -1,1431, 1435, 1433, -1,1438, + 1433, 1435, -1,1440, 1435, 1439, -1,1434, 1439, 1435, -1,1433, 1441, 148, -1,1432, + 1433, 148, -1,1442, 1439, 1434, -1,1442, 1444, 1443, -1,1446, 1443, 1445, -1,1449, + 1448, 1447, -1,1448, 1451, 1450, -1,1452, 1445, 1449, -1,1454, 1451, 1453, -1,1442, + 1443, 1446, -1,1457, 1456, 1455, -1,1459, 1453, 1458, -1,1458, 1460, 114, -1,1462, + 1461, 111, -1,117, 1460, 1462, -1,1446, 1445, 1452, -1,1442, 1434, 1444, -1,1442, + 1463, 1439, -1,1437, 148, 1441, -1,1441, 1433, 1438, -1,1449, 1447, 1452, -1,1452, + 1447, 1464, -1,1467, 1466, 1465, -1,1448, 1450, 1447, -1,1440, 1438, 1435, -1,1436, + 1430, 1437, -1,1440, 1439, 1463, -1,1468, 1456, 1457, -1,1455, 1470, 1469, -1,1467, + 1465, 1471, -1,1452, 1464, 1472, -1,1457, 1455, 1469, -1,1473, 1465, 1466, -1,1453, + 1459, 1454, -1,1474, 1454, 1459, -1,1475, 1459, 114, -1,1458, 114, 1459, -1,1462, + 111, 117, -1,1476, 117, 111, -1,1478, 111, 1477, -1,1461, 1477, 111, -1,117, 1479, + 114, -1,1460, 117, 114, -1,1454, 1474, 1480, -1,1459, 1475, 1474, -1,117, 1476, 1479, -1, + 1477, 1481, 1478, -1,111, 1478, 1476, -1,114, 1479, 1475, -1,1473, 1466, 1482, -1, + 1451, 1454, 1450, -1,1477, 1461, 1483, -1,1485, 1483, 1484, -1,87, 1408, 1410, -1, + 1486, 1410, 1420, -1,1408, 92, 1484, -1,1483, 1485, 1477, -1,1481, 1477, 1485, -1, + 1487, 1485, 92, -1,1484, 92, 1485, -1,1410, 1486, 87, -1,1488, 87, 1486, -1,1490, + 1486, 1489, -1,1420, 1489, 1486, -1,87, 1491, 92, -1,1408, 87, 92, -1,1492, 1489, + 1420, -1,1495, 1494, 1493, -1,75, 1493, 1496, -1,1499, 1498, 1497, -1,1498, 1422, + 1500, -1,1501, 1496, 1499, -1,1502, 1422, 1423, -1,1495, 1493, 75, -1,1503, 1495, + 75, -1,1504, 1423, 1425, -1,1425, 1505, 60, -1,1507, 1427, 1506, -1,1508, 1505, 1507, -1, + 75, 1496, 1501, -1,1495, 1420, 1494, -1,1495, 1509, 1489, -1,1487, 92, 1491, -1,1491, + 87, 1488, -1,1499, 1497, 1501, -1,1510, 1511, 1510, -1,1497, 1500, 1512, -1,1498, + 1500, 1497, -1,1490, 1488, 1486, -1,1481, 1485, 1487, -1,1490, 1489, 1509, -1,1509, + 1495, 1503, -1,75, 1501, 1513, -1,1497, 1512, 1514, -1,1510, 1510, 1515, -1,1503, + 75, 1513, -1,1516, 1512, 1500, -1,1423, 1504, 1502, -1,1517, 1502, 1504, -1,1518, + 1504, 60, -1,1425, 60, 1504, -1,1507, 1506, 1508, -1,1519, 1508, 1506, -1,1520, 1506, + 1428, -1,1427, 1428, 1506, -1,1508, 1521, 60, -1,1505, 1508, 60, -1,1502, 1517, 1516, -1, + 1504, 1518, 1517, -1,1508, 1519, 1521, -1,1428, 1436, 1520, -1,1506, 1520, 1519, -1, + 60, 1521, 1518, -1,1516, 1500, 1502, -1,1422, 1502, 1522, -1,1525, 1524, 1523, -1, + 1524, 1525, 1526, -1,1526, 1527, 1524, -1,1527, 1526, 1528, -1,1531, 1530, 1529, -1, + 1523, 1529, 1530, -1,1530, 1525, 1523, -1,1531, 1529, 1532, -1,13, 1534, 1533, -1, + 1534, 13, 1535, -1,1536, 1535, 13, -1,1535, 1536, 1537, -1,1528, 1538, 1527, -1,1538, + 1528, 1539, -1,1533, 1539, 1528, -1,1539, 1533, 1534, -1,1532, 1540, 13, -1,1540, + 1532, 1529, -1,13, 1541, 13, -1,1541, 13, 1540, -1,13, 1543, 1542, -1,1543, 13, 1541, -1, + 1542, 1545, 1544, -1,1545, 1542, 1543, -1,1547, 1544, 1546, -1,1544, 1547, 1542, -1, + 1549, 1546, 1548, -1,1546, 1549, 1547, -1,1551, 1548, 1550, -1,1548, 1551, 1549, -1, + 1553, 1550, 1552, -1,1550, 1553, 1551, -1,1537, 1553, 1551, -1,1553, 1537, 1536, -1, + 1555, 1551, 1554, -1,1551, 1555, 1537, -1,1557, 1554, 1556, -1,1554, 1557, 1555, -1, + 1559, 1556, 1558, -1,1556, 1559, 1557, -1,1561, 1558, 1560, -1,1558, 1561, 1559, -1, + 1560, 13, 1562, -1,13, 1560, 1558, -1,1562, 13, 1563, -1,13, 1562, 13, -1,1563, 1565, + 1564, -1,1565, 1563, 13, -1,1568, 1567, 1566, -1,1567, 1568, 1569, -1,1570, 1569, + 1568, -1,1569, 1570, 1571, -1,1572, 1552, 1550, -1,1552, 1572, 1573, -1,1566, 1573, + 1572, -1,1573, 1566, 1567, -1,1575, 1564, 1574, -1,1576, 1574, 1564, -1,1564, 1565, + 1576, -1,1575, 1574, 1577, -1,1571, 1578, 1569, -1,1578, 1571, 1579, -1,1579, 1577, + 1578, -1,1577, 1579, 1575, -1,1540, 1529, 1580, -1,1581, 1540, 1580, -1,1541, 1540, + 1582, -1,1543, 1541, 1582, -1,1584, 1581, 1583, -1,1580, 1583, 1581, -1,1585, 1582, + 1584, -1,1581, 1584, 1582, -1,1582, 1585, 1586, -1,1587, 1585, 1584, -1,1582, 1540, + 1581, -1,1588, 1584, 1583, -1,1586, 1543, 1582, -1,1589, 1544, 1545, -1,1590, 1548, + 1546, -1,1591, 1550, 1548, -1,1592, 1546, 1544, -1,1593, 1586, 1585, -1,1545, 1586, + 1594, -1,1545, 1594, 1589, -1,1594, 1586, 1595, -1,1592, 1589, 1596, -1,1546, 1592, + 1590, -1,1548, 1590, 1591, -1,1590, 1592, 1597, -1,1592, 1544, 1589, -1,1589, 1594, + 1598, -1,1591, 1572, 1550, -1,1543, 1586, 1545, -1,1591, 1590, 1597, -1,1600, 1588, + 1599, -1,1588, 1583, 1599, -1,1593, 1587, 1601, -1,1584, 1588, 1587, -1,1586, 1593, + 1595, -1,1595, 1593, 1601, -1,1585, 1587, 1593, -1,1602, 1587, 1588, -1,1600, 1599, + 1603, -1,1604, 1601, 1602, -1,1588, 1600, 1602, -1,1601, 1604, 1605, -1,1587, 1602, + 1601, -1,1605, 1595, 1601, -1,1606, 1598, 1605, -1,1595, 1605, 1598, -1,1596, 1606, + 1607, -1,1598, 1606, 1596, -1,1592, 1596, 1597, -1,1597, 1596, 1608, -1,1596, 1589, + 1598, -1,1610, 1609, 1605, -1,1611, 1610, 1605, -1,1612, 1609, 1610, -1,1613, 1612, + 1610, -1,1615, 1614, 1613, -1,1612, 1613, 1614, -1,1614, 1615, 1616, -1,1608, 1596, + 1607, -1,1617, 1597, 1608, -1,1604, 1611, 1605, -1,1598, 1594, 1595, -1,1591, 1597, + 1617, -1,1591, 1617, 1618, -1,1566, 1572, 1618, -1,1619, 1568, 1566, -1,1620, 1568, + 1619, -1,1618, 1619, 1566, -1,1621, 1619, 1618, -1,1623, 1622, 1617, -1,1622, 1618, + 1617, -1,1624, 1620, 1621, -1,1618, 1622, 1621, -1,1625, 1620, 1624, -1,1626, 1624, + 1621, -1,1619, 1621, 1620, -1,1627, 1621, 1622, -1,1620, 1570, 1568, -1,1572, 1591, + 1618, -1,1628, 1571, 1570, -1,1629, 1575, 1579, -1,1630, 1564, 1575, -1,1631, 1579, + 1571, -1,1632, 1628, 1625, -1,1570, 1625, 1628, -1,1628, 1632, 1633, -1,1624, 1632, + 1625, -1,1631, 1628, 1634, -1,1579, 1631, 1629, -1,1575, 1629, 1630, -1,1629, 1631, + 1635, -1,1631, 1571, 1628, -1,1630, 1629, 1636, -1,1620, 1625, 1570, -1,1637, 1632, + 1624, -1,1639, 1638, 1616, -1,1623, 1617, 1640, -1,1627, 1626, 1621, -1,1622, 1623, + 1627, -1,1626, 1637, 1624, -1,1643, 1642, 1641, -1,1637, 1633, 1632, -1,1644, 1641, + 1638, -1,1639, 1616, 1645, -1,1644, 1638, 1639, -1,1646, 1637, 1643, -1,1641, 1644, + 1643, -1,1637, 1646, 1647, -1,1637, 1642, 1643, -1,1647, 1633, 1637, -1,1615, 1645, + 1616, -1,1648, 1634, 1647, -1,1633, 1647, 1634, -1,1635, 1648, 1649, -1,1634, 1648, + 1635, -1,1629, 1635, 1636, -1,1636, 1635, 1650, -1,1635, 1631, 1634, -1,1651, 1648, + 1647, -1,1652, 1651, 1647, -1,1649, 1648, 1651, -1,1653, 1649, 1651, -1,1654, 1650, + 1653, -1,1649, 1653, 1650, -1,1650, 1635, 1649, -1,1646, 1652, 1647, -1,1634, 1628, + 1633, -1,1608, 1640, 1617, -1,1563, 1564, 1630, -1,1655, 1563, 1630, -1,1562, 1563, + 1656, -1,1560, 1562, 1656, -1,1657, 1655, 1636, -1,1630, 1636, 1655, -1,1658, 1656, + 1657, -1,1655, 1657, 1656, -1,1656, 1658, 1659, -1,1660, 1658, 1657, -1,1656, 1563, + 1655, -1,1661, 1657, 1636, -1,1659, 1560, 1656, -1,1662, 1559, 1561, -1,1663, 1555, + 1557, -1,1664, 1537, 1555, -1,1665, 1557, 1559, -1,1666, 1659, 1658, -1,1561, 1659, + 1667, -1,1561, 1667, 1662, -1,1667, 1659, 1668, -1,1671, 1670, 1669, -1,1557, 1665, + 1663, -1,1555, 1663, 1664, -1,1663, 1665, 1672, -1,1665, 1559, 1662, -1,1662, 1667, + 1673, -1,1664, 1535, 1537, -1,1560, 1659, 1561, -1,1664, 1663, 1672, -1,1674, 1661, + 1650, -1,1661, 1636, 1650, -1,1666, 1660, 1675, -1,1657, 1661, 1660, -1,1659, 1666, + 1668, -1,1668, 1666, 1675, -1,1658, 1660, 1666, -1,1676, 1660, 1661, -1,1674, 1650, + 1654, -1,1677, 1675, 1676, -1,1661, 1674, 1676, -1,1675, 1677, 1678, -1,1660, 1676, + 1675, -1,1678, 1668, 1675, -1,1679, 1673, 1678, -1,1668, 1678, 1673, -1,1669, 1679, + 1680, -1,1673, 1679, 1669, -1,1671, 1669, 1672, -1,1672, 1669, 1681, -1,1669, 1662, + 1673, -1,1682, 1679, 1678, -1,1683, 1682, 1678, -1,1684, 1679, 1682, -1,1685, 1684, + 1682, -1,1687, 1686, 1685, -1,1684, 1685, 1686, -1,1686, 1687, 1688, -1,1681, 1669, + 1680, -1,1689, 1672, 1681, -1,1677, 1683, 1678, -1,1673, 1667, 1668, -1,1664, 1672, + 1689, -1,1664, 1689, 1690, -1,1534, 1535, 1690, -1,1691, 1539, 1534, -1,1692, 1539, + 1691, -1,1690, 1691, 1534, -1,1695, 1694, 1693, -1,1697, 1696, 1689, -1,1696, 1690, + 1689, -1,1698, 1692, 1695, -1,1690, 1696, 1695, -1,1699, 1692, 1698, -1,1700, 1698, + 1695, -1,1694, 1695, 1701, -1,1702, 1695, 1696, -1,1692, 1538, 1539, -1,1535, 1664, + 1690, -1,1703, 1527, 1538, -1,1704, 1523, 1524, -1,1580, 1529, 1523, -1,1705, 1524, + 1527, -1,1706, 1703, 1699, -1,1538, 1699, 1703, -1,1703, 1706, 1707, -1,1698, 1706, + 1699, -1,1705, 1703, 1708, -1,1524, 1705, 1704, -1,1523, 1704, 1580, -1,1704, 1705, + 1709, -1,1705, 1527, 1703, -1,1580, 1704, 1583, -1,1692, 1699, 1538, -1,1710, 1706, + 1698, -1,1712, 1711, 1688, -1,1711, 1713, 1688, -1,1702, 1700, 1695, -1,1696, 1697, + 1702, -1,1700, 1710, 1698, -1,1715, 1700, 1714, -1,1710, 1707, 1706, -1,1716, 1714, + 1711, -1,1718, 1717, 1717, -1,1716, 1711, 1712, -1,1719, 1710, 1715, -1,1714, 1716, + 1715, -1,1710, 1719, 1720, -1,1710, 1700, 1715, -1,1720, 1707, 1710, -1,1721, 1717, + 1717, -1,1722, 1708, 1720, -1,1707, 1720, 1708, -1,1709, 1722, 1723, -1,1708, 1722, + 1709, -1,1704, 1709, 1583, -1,1583, 1709, 1599, -1,1709, 1705, 1708, -1,1724, 1722, + 1720, -1,1725, 1724, 1720, -1,1723, 1722, 1724, -1,1726, 1723, 1724, -1,1603, 1599, + 1726, -1,1723, 1726, 1599, -1,1599, 1709, 1723, -1,1719, 1725, 1720, -1,1708, 1703, + 1707, -1,1686, 1688, 1713, -1,1727, 1654, 1653, -1,1728, 1653, 1651, -1,1729, 1652, + 1646, -1,1730, 1646, 1643, -1,1652, 614, 1651, -1,1653, 1728, 1727, -1,1731, 1727, + 1728, -1,1732, 1728, 614, -1,1651, 614, 1728, -1,1646, 1730, 1729, -1,1733, 1729, + 1730, -1,1735, 1730, 1734, -1,1643, 1734, 1730, -1,1729, 1736, 614, -1,1652, 1729, + 614, -1,1737, 1734, 1643, -1,1737, 1644, 1639, -1,1738, 1639, 1645, -1,1615, 1613, + 1739, -1,1613, 1610, 1740, -1,1741, 1645, 1615, -1,1742, 1610, 1611, -1,1737, 1639, + 1738, -1,1743, 1737, 1738, -1,597, 1611, 1604, -1,1604, 1602, 596, -1,1600, 1603, + 1744, -1,598, 1602, 1600, -1,1738, 1645, 1741, -1,1737, 1643, 1644, -1,1737, 1745, + 1734, -1,1732, 614, 1736, -1,1736, 1729, 1733, -1,1615, 1739, 1741, -1,1741, 1739, + 1746, -1,1739, 1740, 1747, -1,1613, 1740, 1739, -1,1735, 1733, 1730, -1,1731, 1728, + 1732, -1,1735, 1734, 1745, -1,1745, 1737, 1743, -1,1738, 1741, 1748, -1,1739, 1747, + 1746, -1,1741, 1746, 1748, -1,1743, 1738, 1748, -1,1749, 1747, 1740, -1,1611, 597, + 1742, -1,1750, 1742, 597, -1,1751, 597, 596, -1,1604, 596, 597, -1,1600, 1744, 598, -1, + 1752, 598, 1744, -1,1754, 1744, 1753, -1,1603, 1753, 1744, -1,598, 1755, 596, -1, + 1602, 598, 596, -1,1742, 1750, 1749, -1,597, 1751, 1750, -1,598, 1752, 1755, -1,1753, + 1756, 1754, -1,1744, 1754, 1752, -1,596, 1755, 1751, -1,1749, 1740, 1742, -1,1610, + 1742, 1740, -1,1753, 1603, 1726, -1,1757, 1726, 1724, -1,1758, 1725, 1719, -1,1759, + 1719, 1715, -1,1725, 582, 1724, -1,1726, 1757, 1753, -1,1756, 1753, 1757, -1,1760, + 1757, 582, -1,1724, 582, 1757, -1,1719, 1759, 1758, -1,1761, 1758, 1759, -1,1763, + 1759, 1762, -1,1715, 1762, 1759, -1,1758, 1764, 582, -1,1725, 1758, 582, -1,1765, + 1762, 1715, -1,1765, 1716, 1712, -1,1767, 1712, 1766, -1,1687, 1685, 1768, -1,1685, + 1682, 1769, -1,1770, 1766, 1687, -1,1771, 1682, 1683, -1,1765, 1712, 1767, -1,1772, + 1765, 1767, -1,1773, 1683, 1677, -1,1677, 1676, 1774, -1,1674, 1654, 1775, -1,1776, + 1676, 1674, -1,1767, 1766, 1770, -1,1765, 1715, 1716, -1,1765, 1777, 1762, -1,1760, + 582, 1764, -1,1764, 1758, 1761, -1,1687, 1768, 1770, -1,1770, 1768, 1778, -1,1768, + 1769, 1779, -1,1685, 1769, 1768, -1,1763, 1761, 1759, -1,1756, 1757, 1760, -1,1763, + 1762, 1777, -1,1777, 1765, 1772, -1,1767, 1770, 1780, -1,1768, 1779, 1778, -1,1770, + 1778, 1780, -1,1772, 1767, 1780, -1,1781, 1779, 1769, -1,1683, 1773, 1771, -1,1782, + 1771, 1773, -1,1783, 1773, 1774, -1,1677, 1774, 1773, -1,1674, 1775, 1776, -1,1784, + 1776, 1775, -1,1785, 1775, 1727, -1,1654, 1727, 1775, -1,1776, 1786, 1774, -1,1676, + 1776, 1774, -1,1771, 1782, 1781, -1,1773, 1783, 1782, -1,1776, 1784, 1786, -1,1727, + 1731, 1785, -1,1775, 1785, 1784, -1,1774, 1786, 1783, -1,1781, 1769, 1771, -1,1682, + 1771, 1769, -1,1754, 1756, 1787, -1,1788, 1754, 1787, -1,1752, 1754, 1789, -1,1755, + 1752, 1789, -1,1791, 1788, 1790, -1,1787, 1790, 1788, -1,1792, 1789, 1791, -1,1788, + 1791, 1789, -1,1789, 1792, 1793, -1,1794, 1792, 1791, -1,1789, 1754, 1788, -1,1795, + 1791, 1790, -1,1793, 1755, 1789, -1,1796, 1750, 1751, -1,1797, 1747, 1749, -1,1798, + 1746, 1747, -1,1799, 1749, 1750, -1,1800, 1793, 1792, -1,1751, 1793, 1801, -1,1751, + 1801, 1796, -1,1801, 1793, 1802, -1,1804, 1796, 1803, -1,1749, 1799, 1797, -1,1747, + 1797, 1798, -1,1806, 1804, 1805, -1,1799, 1750, 1796, -1,1796, 1801, 1807, -1,1798, + 1748, 1746, -1,1755, 1793, 1751, -1,1808, 1806, 1805, -1,1810, 1795, 1809, -1,1795, + 1790, 1809, -1,1800, 1794, 1811, -1,1791, 1795, 1794, -1,1793, 1800, 1802, -1,1802, + 1800, 1811, -1,1792, 1794, 1800, -1,1812, 1794, 1795, -1,1810, 1809, 1813, -1,1814, + 1811, 1812, -1,1795, 1810, 1812, -1,1811, 1814, 1815, -1,1794, 1812, 1811, -1,1815, + 1802, 1811, -1,1816, 1807, 1815, -1,1802, 1815, 1807, -1,1803, 1816, 1817, -1,1807, + 1816, 1803, -1,1804, 1803, 1805, -1,1805, 1803, 1818, -1,1803, 1796, 1807, -1,1819, + 1816, 1815, -1,1820, 1819, 1815, -1,1817, 1816, 1819, -1,379, 1817, 1819, -1,1821, + 1818, 379, -1,1817, 379, 1818, -1,1818, 1821, 1822, -1,1818, 1803, 1817, -1,1823, + 1805, 1818, -1,1814, 1820, 1815, -1,1807, 1801, 1802, -1,1808, 1805, 1823, -1,1808, + 1823, 1824, -1,1743, 1748, 1825, -1,1826, 1745, 1743, -1,1827, 1745, 1826, -1,1825, + 1826, 1743, -1,1829, 1828, 1824, -1,1831, 1830, 1823, -1,1830, 1824, 1823, -1,1832, + 1827, 1829, -1,1824, 1830, 1829, -1,1833, 1827, 1832, -1,1834, 1832, 1829, -1,1828, + 1829, 1827, -1,1835, 1829, 1830, -1,1827, 1735, 1745, -1,1748, 1798, 1825, -1,1836, + 1733, 1735, -1,1837, 1732, 1736, -1,1838, 1731, 1732, -1,1839, 1736, 1733, -1,1840, + 1836, 1833, -1,1735, 1833, 1836, -1,1836, 1840, 1841, -1,1832, 1840, 1833, -1,1839, + 1836, 1842, -1,1736, 1839, 1837, -1,1732, 1837, 1838, -1,1837, 1839, 1843, -1,1839, + 1733, 1836, -1,1838, 1837, 1844, -1,1827, 1833, 1735, -1,1845, 1840, 1832, -1,1846, + 1831, 1822, -1,1831, 1823, 1822, -1,1835, 1834, 1829, -1,1830, 1831, 1835, -1,1834, + 1845, 1832, -1,1847, 1834, 1835, -1,1845, 1841, 1840, -1,1848, 1835, 1831, -1,1846, + 1822, 1849, -1,1848, 1831, 1846, -1,1850, 1845, 1847, -1,1835, 1848, 1847, -1,1845, + 1850, 1851, -1,1845, 1834, 1847, -1,1851, 1841, 1845, -1,1821, 1849, 1822, -1,1852, + 1842, 1851, -1,1841, 1851, 1842, -1,1843, 1852, 1853, -1,1842, 1852, 1843, -1,1837, + 1843, 1844, -1,1844, 1843, 1854, -1,1843, 1839, 1842, -1,1855, 1852, 1851, -1,1856, + 1855, 1851, -1,1853, 1852, 1855, -1,1857, 1853, 1855, -1,1858, 1854, 1857, -1,1853, + 1857, 1854, -1,1854, 1843, 1853, -1,1850, 1856, 1851, -1,1842, 1836, 1841, -1,1818, + 1822, 1823, -1,1785, 1731, 1838, -1,1859, 1785, 1838, -1,1784, 1785, 1860, -1,1786, + 1784, 1860, -1,1861, 1859, 1844, -1,1838, 1844, 1859, -1,1862, 1860, 1861, -1,1859, + 1861, 1860, -1,1860, 1862, 1863, -1,1864, 1862, 1861, -1,1860, 1785, 1859, -1,1865, + 1861, 1844, -1,1863, 1786, 1860, -1,1866, 1782, 1783, -1,1867, 1779, 1781, -1,1870, + 1869, 1868, -1,1871, 1781, 1782, -1,1872, 1863, 1862, -1,1783, 1863, 1873, -1,1783, + 1873, 1866, -1,1873, 1863, 1874, -1,1876, 1866, 1875, -1,1781, 1871, 1867, -1,1779, + 1867, 1877, -1,1879, 1876, 1878, -1,1871, 1782, 1866, -1,1866, 1873, 1880, -1,1870, + 1881, 1869, -1,1786, 1863, 1783, -1,1870, 1879, 1878, -1,1882, 1865, 1854, -1,1865, + 1844, 1854, -1,1872, 1864, 1883, -1,1861, 1865, 1864, -1,1863, 1872, 1874, -1,1874, + 1872, 1883, -1,1862, 1864, 1872, -1,1884, 1864, 1865, -1,1882, 1854, 1858, -1,1885, + 1883, 1884, -1,1865, 1882, 1884, -1,1883, 1885, 1886, -1,1864, 1884, 1883, -1,1886, + 1874, 1883, -1,1887, 1880, 1886, -1,1874, 1886, 1880, -1,1875, 1889, 1888, -1,1880, + 1887, 1875, -1,1876, 1875, 1878, -1,1878, 1875, 1890, -1,1875, 1866, 1880, -1,1891, + 1887, 1886, -1,1892, 1891, 1886, -1,1893, 1887, 1891, -1,388, 1893, 1891, -1,1894, + 1890, 388, -1,1893, 388, 1890, -1,1890, 1894, 1895, -1,1896, 1875, 1888, -1,1897, + 1878, 1890, -1,1885, 1892, 1886, -1,1880, 1873, 1874, -1,1877, 1899, 1898, -1,1877, + 1898, 1900, -1,1772, 1780, 1900, -1,1901, 1777, 1772, -1,1902, 1777, 1901, -1,1900, + 1901, 1772, -1,1905, 1904, 1903, -1,1907, 1906, 1897, -1,1906, 1903, 1897, -1,1908, + 1902, 1905, -1,1903, 1906, 1905, -1,1909, 1902, 1908, -1,1910, 1908, 1905, -1,1904, + 1905, 1902, -1,1911, 1905, 1906, -1,1902, 1763, 1777, -1,1780, 1877, 1900, -1,1912, + 1761, 1763, -1,1913, 1760, 1764, -1,1787, 1756, 1760, -1,1914, 1764, 1761, -1,1915, + 1912, 1909, -1,1763, 1909, 1912, -1,1912, 1915, 1916, -1,1908, 1915, 1909, -1,1914, + 1912, 1917, -1,1764, 1914, 1913, -1,1760, 1913, 1787, -1,1913, 1914, 1918, -1,1914, + 1761, 1912, -1,1787, 1913, 1790, -1,1902, 1909, 1763, -1,1919, 1915, 1908, -1,1920, + 1907, 1895, -1,1907, 1897, 1895, -1,1911, 1921, 1905, -1,1906, 1907, 1922, -1,1910, + 1919, 1908, -1,1923, 1910, 1922, -1,1919, 1916, 1915, -1,367, 1922, 1907, -1,1920, + 1895, 1924, -1,367, 1907, 1920, -1,1925, 1919, 1923, -1,1922, 367, 1923, -1,1919, + 1925, 1926, -1,1919, 1910, 1923, -1,1926, 1916, 1919, -1,1894, 1924, 1895, -1,1927, + 1917, 1926, -1,1916, 1926, 1917, -1,1918, 1927, 1928, -1,1917, 1927, 1918, -1,1913, + 1918, 1790, -1,1790, 1918, 1809, -1,1918, 1914, 1917, -1,1929, 1927, 1926, -1,1930, + 1929, 1926, -1,1928, 1927, 1929, -1,1931, 1928, 1929, -1,1813, 1809, 1931, -1,1928, + 1931, 1809, -1,1809, 1918, 1928, -1,1925, 1930, 1926, -1,1917, 1912, 1916, -1,1890, + 1895, 1897, -1,1931, 1929, 1932, -1,1933, 1932, 1929, -1,1929, 1930, 1933, -1,1934, + 1933, 1930, -1,1810, 1813, 1935, -1,1931, 1935, 1813, -1,1935, 1931, 361, -1,1932, + 361, 1931, -1,1936, 367, 361, -1,1920, 361, 367, -1,361, 1920, 1937, -1,1938, 1937, + 1920, -1,1930, 1925, 1934, -1,1923, 1934, 1925, -1,1934, 1923, 1936, -1,367, 1936, + 1923, -1,361, 1810, 361, -1,1935, 361, 1810, -1,361, 1812, 361, -1,1810, 361, 1812, -1, + 1939, 1814, 361, -1,1812, 361, 1814, -1,1819, 1820, 1939, -1,1814, 1939, 1820, -1, + 379, 1819, 1940, -1,1939, 1940, 1819, -1,1821, 379, 1941, -1,1940, 1941, 379, -1, + 1943, 1821, 1942, -1,1941, 1942, 1821, -1,1846, 1849, 1943, -1,1821, 1943, 1849, -1, + 1894, 1938, 1924, -1,1920, 1924, 1938, -1,1945, 1944, 1894, -1,1938, 1894, 1944, -1, + 1946, 1945, 388, -1,1894, 388, 1945, -1,1947, 1946, 1891, -1,388, 1891, 1946, -1, + 1885, 1947, 1892, -1,1891, 1892, 1947, -1,1884, 361, 1885, -1,1947, 1885, 361, -1, + 1882, 361, 1884, -1,361, 1884, 361, -1,1948, 361, 1882, -1,361, 1882, 361, -1,1848, + 1949, 1847, -1,1950, 1847, 1949, -1,1847, 1950, 1850, -1,1856, 1850, 1950, -1,1943, + 1951, 1846, -1,1952, 1846, 1951, -1,1846, 1952, 1848, -1,1949, 1848, 1952, -1,1953, + 361, 1857, -1,1948, 1857, 361, -1,1857, 1948, 1858, -1,1882, 1858, 1948, -1,1950, + 1954, 1856, -1,1855, 1856, 1954, -1,1954, 1953, 1855, -1,1857, 1855, 1953, -1,1957, + 1956, 1955, -1,1959, 1955, 1958, -1,1962, 1961, 1960, -1,1964, 1960, 1963, -1,1961, + 1965, 1958, -1,1955, 1959, 1957, -1,1966, 1957, 1959, -1,1967, 1959, 1965, -1,1958, + 1965, 1959, -1,1960, 1964, 1962, -1,1968, 1962, 1964, -1,1970, 1964, 1969, -1,1963, + 1969, 1964, -1,1962, 1971, 1965, -1,1961, 1962, 1965, -1,1972, 1969, 1963, -1,1972, + 1974, 1973, -1,1976, 1973, 1975, -1,1979, 1978, 1977, -1,1978, 1981, 1980, -1,1982, + 1975, 1979, -1,1984, 1981, 1983, -1,1972, 1973, 1976, -1,1985, 1972, 1976, -1,1987, + 1983, 1986, -1,1986, 1989, 1988, -1,1992, 1991, 1990, -1,1993, 1989, 1992, -1,1976, + 1975, 1982, -1,1972, 1963, 1974, -1,1995, 1994, 1969, -1,1967, 1965, 1971, -1,1971, + 1962, 1968, -1,1979, 1977, 1982, -1,1982, 1977, 1996, -1,1977, 1980, 1997, -1,1978, + 1980, 1977, -1,1970, 1968, 1964, -1,1966, 1959, 1967, -1,1970, 1969, 1994, -1,1994, + 1972, 1985, -1,1976, 1982, 1998, -1,1977, 1997, 1996, -1,1982, 1996, 1998, -1,1985, + 1976, 1998, -1,1999, 1997, 1980, -1,1983, 1987, 1984, -1,2000, 1984, 1987, -1,2001, + 1987, 1988, -1,1986, 1988, 1987, -1,1992, 1990, 1993, -1,2002, 1993, 1990, -1,2004, + 1990, 2003, -1,1991, 2003, 1990, -1,1993, 2005, 1988, -1,1989, 1993, 1988, -1,1984, + 2000, 2006, -1,1987, 2001, 2000, -1,1993, 2002, 2005, -1,2003, 2007, 2004, -1,1990, + 2004, 2002, -1,1988, 2005, 2001, -1,1999, 1980, 1984, -1,1981, 1984, 1980, -1,2003, + 1991, 2008, -1,2010, 2008, 2009, -1,2013, 2012, 2011, -1,2015, 2011, 2014, -1,2012, + 2016, 2009, -1,2008, 2010, 2003, -1,2007, 2003, 2010, -1,2017, 2010, 2016, -1,2009, + 2016, 2010, -1,2011, 2015, 2013, -1,2018, 2013, 2015, -1,2020, 2015, 2019, -1,2014, + 2019, 2015, -1,2013, 2021, 2016, -1,2012, 2013, 2016, -1,2022, 2019, 2014, -1,2022, + 2024, 2023, -1,2026, 2023, 2025, -1,2029, 2028, 2027, -1,2028, 2031, 2030, -1,2034, + 2033, 2032, -1,2036, 2031, 2035, -1,2022, 2023, 2026, -1,2039, 2038, 2037, -1,2041, + 2035, 2040, -1,2040, 2043, 2042, -1,2045, 1956, 2044, -1,2046, 2043, 2045, -1,2037, + 2033, 2034, -1,2022, 2014, 2024, -1,2038, 2047, 2019, -1,2017, 2016, 2021, -1,2021, + 2013, 2018, -1,2029, 2027, 2048, -1,2034, 2050, 2049, -1,2050, 2052, 2051, -1,2028, + 2030, 2027, -1,2020, 2018, 2015, -1,2007, 2010, 2017, -1,2020, 2019, 2047, -1,2047, + 2038, 2039, -1,2037, 2034, 2053, -1,2050, 2051, 2049, -1,2034, 2049, 2053, -1,2039, + 2037, 2053, -1,2054, 2051, 2052, -1,2035, 2041, 2036, -1,2055, 2036, 2041, -1,2056, + 2041, 2042, -1,2040, 2042, 2041, -1,2045, 2044, 2046, -1,2057, 2046, 2044, -1,2058, + 2044, 1957, -1,1956, 1957, 2044, -1,2046, 2059, 2042, -1,2043, 2046, 2042, -1,2036, + 2055, 2054, -1,2041, 2056, 2055, -1,2046, 2057, 2059, -1,1957, 1966, 2058, -1,2044, + 2058, 2057, -1,2042, 2059, 2056, -1,2054, 2052, 2036, -1,2031, 2036, 2030, -1,2062, + 2061, 2060, -1,2064, 2060, 2063, -1,2066, 2065, 1970, -1,2067, 1970, 1994, -1,2065, + 2068, 2063, -1,2060, 2064, 2062, -1,2069, 2062, 2064, -1,2070, 2064, 2068, -1,2063, + 2068, 2064, -1,1970, 2067, 2066, -1,2071, 2066, 2067, -1,2073, 2067, 2072, -1,1994, + 2072, 2067, -1,2066, 982, 2068, -1,2065, 2066, 2068, -1,2074, 2072, 1994, -1,2074, + 974, 988, -1,2075, 988, 987, -1,2077, 2006, 2076, -1,2006, 2000, 969, -1,2078, 987, + 2077, -1,2080, 2000, 2079, -1,2074, 988, 2075, -1,2081, 2074, 2075, -1,2083, 2079, + 2082, -1,2082, 2085, 2084, -1,2088, 2087, 2086, -1,2089, 2085, 2088, -1,2075, 987, + 2078, -1,2074, 1994, 974, -1,2074, 2090, 2072, -1,2070, 2068, 982, -1,982, 2066, + 2071, -1,2077, 2076, 2078, -1,2078, 2076, 2091, -1,2076, 969, 968, -1,2006, 969, + 2076, -1,2073, 2071, 2067, -1,2069, 2064, 2070, -1,2073, 2072, 2090, -1,2090, 2074, + 2081, -1,2075, 2078, 2092, -1,2076, 968, 2091, -1,2078, 2091, 2092, -1,2081, 2075, + 2092, -1,2093, 968, 969, -1,2079, 2083, 2080, -1,2094, 2080, 2083, -1,2095, 2083, + 2084, -1,2082, 2084, 2083, -1,2088, 2086, 2089, -1,2096, 2089, 2086, -1,2098, 2086, + 2097, -1,2087, 2097, 2086, -1,2089, 958, 2084, -1,2085, 2089, 2084, -1,2080, 2094, + 2093, -1,2083, 2095, 2094, -1,2089, 2096, 958, -1,2097, 2099, 2098, -1,2086, 2098, + 2096, -1,2084, 958, 2095, -1,2093, 969, 2080, -1,2000, 2080, 969, -1,2097, 2087, + 2100, -1,2102, 2100, 2101, -1,2103, 2018, 2020, -1,2106, 2105, 2104, -1,2106, 2107, + 2020, -1,2018, 2108, 2101, -1,2100, 2102, 2097, -1,2099, 2097, 2102, -1,2109, 2102, + 2108, -1,2101, 2108, 2102, -1,2020, 2107, 2103, -1,2110, 2103, 2107, -1,2112, 2111, + 2105, -1,2106, 2104, 2113, -1,2113, 2114, 2107, -1,2106, 2113, 2107, -1,2103, 2115, + 2108, -1,2018, 2103, 2108, -1,2105, 2117, 2116, -1,2119, 2117, 2118, -1,2121, 2118, + 2120, -1,2123, 2122, 2055, -1,2056, 2059, 2124, -1,2056, 2125, 2055, -1,2122, 2126, + 2120, -1,2121, 2120, 2126, -1,2127, 2119, 2121, -1,2123, 2055, 2125, -1,2128, 2126, + 2123, -1,2126, 2129, 2121, -1,2126, 2122, 2123, -1,2132, 2131, 2130, -1,2125, 2056, + 2124, -1,2061, 2133, 2131, -1,2134, 2059, 2132, -1,2125, 2135, 2123, -1,2119, 2118, + 2121, -1,2136, 2117, 2119, -1,2116, 2112, 2105, -1,2111, 2112, 2137, -1,2104, 2105, + 2111, -1,2136, 2119, 2138, -1,2139, 2119, 2127, -1,2119, 2139, 2138, -1,2116, 2117, + 2136, -1,2103, 2110, 2115, -1,2110, 2107, 2114, -1,2141, 2113, 2140, -1,2113, 2141, + 2114, -1,2104, 2140, 2113, -1,2115, 2109, 2108, -1,2102, 2109, 2099, -1,2126, 2128, + 2129, -1,2121, 2142, 2127, -1,2143, 2124, 2134, -1,2132, 2130, 2134, -1,2134, 2130, + 2144, -1,2061, 2062, 2133, -1,2133, 2062, 2069, -1,2145, 2130, 2133, -1,2131, 2133, + 2130, -1,2129, 2142, 2121, -1,2059, 2134, 2124, -1,2135, 2128, 2123, -1,2125, 2124, + 2146, -1,2135, 2125, 2146, -1,2134, 2144, 2143, -1,2133, 2069, 2145, -1,2130, 2145, + 2144, -1,2124, 2143, 2146, -1,2147, 2147, 2116, -1,2150, 2149, 2148, -1,2152, 2148, + 2151, -1,2155, 2154, 2153, -1,2158, 2157, 2156, -1,2157, 2159, 2153, -1,2154, 2160, + 2151, -1,2152, 2151, 2160, -1,2161, 2150, 2152, -1,2155, 2153, 2159, -1,2162, 2160, + 2155, -1,2160, 2163, 2152, -1,2160, 2154, 2155, -1,2156, 2164, 2158, -1,2158, 2159, + 2157, -1,2156, 2165, 2164, -1,2166, 2158, 2164, -1,2158, 2167, 2159, -1,2168, 2164, + 2165, -1,2159, 2169, 2155, -1,2150, 2148, 2152, -1,2172, 2171, 2170, -1,2175, 2174, + 2173, -1,2176, 2170, 2175, -1,2179, 2178, 2177, -1,2182, 2181, 2180, -1,2184, 2178, + 2183, -1,2185, 2174, 2179, -1,2115, 2186, 2109, -1,2182, 2187, 2183, -1,2188, 2168, + 2172, -1,2172, 2168, 2171, -1,2181, 2109, 2189, -1,2191, 2110, 2190, -1,2110, 2114, + 2190, -1,2115, 2110, 2191, -1,2170, 2176, 2172, -1,2168, 2165, 2171, -1,2168, 2192, + 2164, -1,2163, 2160, 2162, -1,2169, 2159, 2167, -1,2162, 2155, 2169, -1,2175, 2173, + 2176, -1,2176, 2173, 2193, -1,2179, 2177, 2185, -1,2185, 2177, 2194, -1,2195, 2173, + 2185, -1,2174, 2185, 2173, -1,2167, 2158, 2166, -1,2161, 2152, 2163, -1,2166, 2164, + 2192, -1,2188, 2172, 2196, -1,2192, 2168, 2188, -1,2176, 2193, 2196, -1,2185, 2194, + 2195, -1,2173, 2195, 2193, -1,2172, 2176, 2196, -1,2197, 2194, 2177, -1,2183, 2187, + 2184, -1,2184, 2187, 2198, -1,2199, 2180, 2189, -1,2180, 2200, 2187, -1,2197, 2177, + 2184, -1,2182, 2180, 2187, -1,2109, 2201, 2189, -1,2189, 2201, 2202, -1,2115, 2191, + 2186, -1,2186, 2191, 2203, -1,2204, 2201, 2186, -1,2109, 2186, 2201, -1,2184, 2198, + 2197, -1,2181, 2189, 2180, -1,2187, 2200, 2198, -1,2189, 2205, 2199, -1,2180, 2199, + 2200, -1,2201, 2204, 2202, -1,2191, 2206, 2203, -1,2186, 2203, 2204, -1,2189, 2202, + 2205, -1,2190, 2206, 2191, -1,2178, 2184, 2177, -1,2207, 2142, 2129, -1,2208, 2129, + 2128, -1,2128, 2209, 2208, -1,2210, 2207, 2208, -1,2211, 2208, 2209, -1,2207, 2129, + 2208, -1,2212, 2209, 2128, -1,2214, 2212, 2213, -1,2213, 2216, 2215, -1,2219, 2218, + 2217, -1,2218, 2220, 2216, -1,2217, 2149, 2221, -1,2215, 2214, 2213, -1,2214, 2209, + 2212, -1,2214, 2222, 2209, -1,2223, 2215, 2220, -1,2210, 2208, 2211, -1,2222, 2211, + 2209, -1,2216, 2220, 2215, -1,2222, 2214, 2224, -1,2215, 2223, 2224, -1,2214, 2215, + 2224, -1,2225, 2223, 2220, -1,2217, 2221, 2219, -1,2226, 2219, 2221, -1,2227, 2221, + 2150, -1,2149, 2150, 2221, -1,2219, 2226, 2225, -1,2150, 2161, 2227, -1,2221, 2227, + 2226, -1,2225, 2220, 2219, -1,2218, 2219, 2220, -1,2230, 2229, 2228, -1,2232, 2230, + 2231, -1,2228, 2231, 2230, -1,2231, 2228, 2233, -1,2235, 2231, 2234, -1,2231, 2235, + 2232, -1,2232, 2235, 2236, -1,1170, 2237, 2236, -1,2239, 2238, 1170, -1,2242, 2241, + 2240, -1,2238, 2243, 2241, -1,2245, 2244, 2242, -1,1170, 2236, 2239, -1,2237, 2232, + 2236, -1,2235, 2246, 2236, -1,2243, 2239, 2247, -1,2234, 2231, 2233, -1,2235, 2234, + 2246, -1,2239, 2243, 2238, -1,2248, 2236, 2246, -1,2248, 2247, 2239, -1,2248, 2239, + 2236, -1,2243, 2247, 2249, -1,2240, 2245, 2242, -1,2245, 2240, 2250, -1,2252, 2245, + 2251, -1,2245, 2252, 2244, -1,2249, 2250, 2240, -1,2251, 2253, 2252, -1,2250, 2251, + 2245, -1,2240, 2243, 2249, -1,2243, 2240, 2241, -1,2254, 2244, 2252, -1,1089, 2254, + 2255, -1,2252, 2255, 2254, -1,2255, 2252, 2253, -1,2257, 2255, 2256, -1,2255, 2257, + 1089, -1,1089, 2257, 2258, -1,1186, 1092, 2258, -1,2260, 2259, 1186, -1,2263, 2262, + 2261, -1,2259, 2264, 2262, -1,2265, 2229, 2263, -1,1186, 2258, 2260, -1,1092, 1089, + 2258, -1,2257, 2266, 2258, -1,2264, 2260, 2267, -1,2256, 2255, 2253, -1,2257, 2256, + 2266, -1,2260, 2264, 2259, -1,2268, 2258, 2266, -1,2268, 2267, 2260, -1,2268, 2260, + 2258, -1,2264, 2267, 2269, -1,2261, 2265, 2263, -1,2265, 2261, 2270, -1,2228, 2265, + 2271, -1,2265, 2228, 2229, -1,2269, 2270, 2261, -1,2271, 2233, 2228, -1,2270, 2271, + 2265, -1,2261, 2264, 2269, -1,2264, 2261, 2262, -1,2274, 2273, 2272, -1,2274, 2276, + 2275, -1,2276, 2274, 2272, -1,2276, 2272, 2277, -1,2279, 2275, 2278, -1,2281, 2280, + 2279, -1,2283, 2282, 2280, -1,2286, 2285, 2284, -1,2288, 2287, 2285, -1,2284, 2282, + 2289, -1,2276, 2278, 2275, -1,2278, 2281, 2279, -1,2281, 2278, 2277, -1,2283, 2281, + 2277, -1,2281, 2283, 2280, -1,2277, 2278, 2276, -1,2283, 2277, 2289, -1,2289, 2286, + 2284, -1,2286, 2289, 2277, -1,2288, 2286, 2277, -1,2286, 2288, 2285, -1,2288, 2277, + 2290, -1,2288, 2290, 2287, -1,2283, 2289, 2282, -1,2291, 2287, 2290, -1,2291, 2293, + 2292, -1,2293, 2291, 2290, -1,2293, 2290, 2277, -1,2295, 2292, 2294, -1,2297, 2296, + 2295, -1,2299, 2298, 2296, -1,2302, 2301, 2300, -1,2303, 2273, 2301, -1,2300, 2298, + 2304, -1,2293, 2294, 2292, -1,2294, 2297, 2295, -1,2297, 2294, 2277, -1,2299, 2297, + 2277, -1,2297, 2299, 2296, -1,2277, 2294, 2293, -1,2299, 2277, 2304, -1,2304, 2302, + 2300, -1,2302, 2304, 2277, -1,2303, 2302, 2277, -1,2302, 2303, 2301, -1,2303, 2277, + 2272, -1,2303, 2272, 2273, -1,2299, 2304, 2298, -1,2307, 2306, 2305, -1,2309, 2307, + 2308, -1,2305, 2308, 2307, -1,2308, 2305, 2310, -1,2312, 2308, 2311, -1,2308, 2312, + 2309, -1,2309, 2312, 2313, -1,1186, 2314, 2313, -1,2316, 2315, 1186, -1,2318, 2317, + 2261, -1,2315, 2319, 2317, -1,2321, 2320, 2318, -1,1186, 2313, 2316, -1,2314, 2309, + 2313, -1,2312, 2322, 2313, -1,2319, 2316, 2323, -1,2311, 2308, 2310, -1,2312, 2311, + 2322, -1,2316, 2319, 2315, -1,2324, 2313, 2322, -1,2324, 2323, 2316, -1,2324, 2316, + 2313, -1,2319, 2323, 2269, -1,2261, 2321, 2318, -1,2321, 2261, 2270, -1,2326, 2321, + 2325, -1,2321, 2326, 2320, -1,2269, 2270, 2261, -1,2325, 2327, 2326, -1,2270, 2325, + 2321, -1,2261, 2319, 2269, -1,2319, 2261, 2317, -1,2328, 2320, 2326, -1,1113, 2328, + 2329, -1,2326, 2329, 2328, -1,2329, 2326, 2327, -1,2235, 2329, 2330, -1,2329, 2235, + 1113, -1,1113, 2235, 2331, -1,2333, 2332, 2331, -1,2335, 2334, 2333, -1,2337, 1169, + 2336, -1,2334, 2338, 1169, -1,2339, 2306, 2337, -1,2333, 2331, 2335, -1,2332, 1113, + 2331, -1,2235, 2246, 2331, -1,2338, 2335, 2340, -1,2330, 2329, 2327, -1,2235, 2330, + 2246, -1,2335, 2338, 2334, -1,2248, 2331, 2246, -1,2248, 2340, 2335, -1,2248, 2335, + 2331, -1,2338, 2340, 2341, -1,2336, 2339, 2337, -1,2339, 2336, 2342, -1,2305, 2339, + 2343, -1,2339, 2305, 2306, -1,2341, 2342, 2336, -1,2343, 2310, 2305, -1,2342, 2343, + 2339, -1,2336, 2338, 2341, -1,2338, 2336, 1169, -1,2291, 2287, 2344, -1,2291, 2346, + 2345, -1,2346, 2291, 2344, -1,2346, 2344, 2347, -1,2349, 2345, 2348, -1,2351, 2350, + 2349, -1,2353, 2352, 2350, -1,2356, 2355, 2354, -1,2358, 2357, 2355, -1,2354, 2352, + 2359, -1,2346, 2348, 2345, -1,2348, 2351, 2349, -1,2351, 2348, 2347, -1,2353, 2351, + 2347, -1,2351, 2353, 2350, -1,2347, 2348, 2346, -1,2353, 2347, 2359, -1,2359, 2356, + 2354, -1,2356, 2359, 2347, -1,2358, 2356, 2347, -1,2356, 2358, 2355, -1,2358, 2347, + 2360, -1,2358, 2360, 2357, -1,2353, 2359, 2352, -1,2361, 2357, 2360, -1,2361, 2363, + 2362, -1,2363, 2361, 2360, -1,2363, 2360, 2347, -1,2365, 2362, 2364, -1,2367, 2366, + 2365, -1,2369, 2368, 2366, -1,2372, 2371, 2370, -1,2373, 2287, 2371, -1,2370, 2368, + 2374, -1,2363, 2364, 2362, -1,2364, 2367, 2365, -1,2367, 2364, 2347, -1,2369, 2367, + 2347, -1,2367, 2369, 2366, -1,2347, 2364, 2363, -1,2369, 2347, 2374, -1,2374, 2372, + 2370, -1,2372, 2374, 2347, -1,2373, 2372, 2347, -1,2372, 2373, 2371, -1,2373, 2347, + 2344, -1,2373, 2344, 2287, -1,2369, 2374, 2368, -1,2377, 2376, 2375, -1,2375, 2378, + 2377, -1,2381, 2380, 2379, -1,2383, 2379, 2382, -1,2386, 2385, 2384, -1,2386, 2384, + 2387, -1,2385, 2388, 2382, -1,2383, 2382, 2388, -1,2389, 2381, 2383, -1,2390, 2383, + 2388, -1,2388, 2385, 2386, -1,2392, 2391, 2387, -1,2391, 2386, 2387, -1,2393, 2386, + 2391, -1,2394, 2391, 2392, -1,2386, 2395, 2388, -1,2381, 2379, 2383, -1,2398, 2397, + 2396, -1,2396, 2400, 2399, -1,2403, 2402, 2401, -1,2402, 2405, 2404, -1,2399, 2400, + 2403, -1,2407, 2405, 2406, -1,2394, 2397, 2398, -1,2408, 2394, 2398, -1,2407, 2406, + 2409, -1,2409, 2411, 2410, -1,2414, 2413, 2412, -1,2415, 2411, 2414, -1,2396, 2399, + 2398, -1,2394, 2392, 2397, -1,2394, 2416, 2391, -1,2389, 2383, 2390, -1,2390, 2388, + 2395, -1,2391, 2417, 2393, -1,2393, 2395, 2386, -1,2391, 2416, 2417, -1,2418, 2381, + 2389, -1,2416, 2394, 2408, -1,2408, 2398, 2419, -1,2399, 2420, 2419, -1,2399, 2421, + 2420, -1,2398, 2399, 2419, -1,2401, 2421, 2399, -1,2402, 2404, 2401, -1,2404, 2407, + 2422, -1,2407, 2410, 2423, -1,2405, 2407, 2404, -1,2414, 2412, 2424, -1,2415, 2425, + 2410, -1,2426, 2415, 2414, -1,2411, 2415, 2410, -1,2427, 2401, 2404, -1,2409, 2410, + 2407, -1,2404, 2422, 2427, -1,2407, 2428, 2422, -1,2410, 2425, 2423, -1,2426, 2414, + 2424, -1,2415, 2426, 2425, -1,2407, 2423, 2428, -1,2427, 2421, 2401, -1,2403, 2401, + 2399, -1,2431, 2430, 2429, -1,2431, 2431, 2429, -1,2433, 2380, 2432, -1,2433, 2432, + 2434, -1,2437, 2436, 2435, -1,2439, 2438, 2435, -1,2441, 2436, 2440, -1,2437, 2435, + 2438, -1,2436, 2437, 2440, -1,2442, 2439, 2435, -1,2444, 2443, 2433, -1,2446, 2443, + 2445, -1,2443, 2444, 2445, -1,2439, 2442, 2445, -1,2447, 2445, 2444, -1,2442, 2446, + 2445, -1,2445, 2448, 2439, -1,2440, 2450, 2449, -1,2451, 2449, 2450, -1,2449, 2451, + 2452, -1,2437, 2438, 2440, -1,2444, 2434, 2447, -1,2445, 2453, 2448, -1,2438, 2439, + 2448, -1,2445, 2447, 2454, -1,2454, 2453, 2445, -1,2441, 2440, 2449, -1,2457, 2456, + 2455, -1,2458, 2455, 2456, -1,2459, 2457, 2455, -1,2462, 2461, 2460, -1,2463, 2460, + 2461, -1,2455, 2465, 2464, -1,2455, 2458, 2465, -1,2455, 2466, 2460, -1,2455, 2468, + 2467, -1,2470, 2469, 2468, -1,2473, 2472, 2471, -1,2474, 2465, 2471, -1,2459, 2455, + 2467, -1,2475, 2462, 2460, -1,2470, 2468, 2455, -1,2460, 2463, 2476, -1,2460, 2476, + 2477, -1,2480, 2479, 2478, -1,2477, 2478, 2479, -1,2479, 2480, 2481, -1,2481, 2482, + 2479, -1,2479, 2460, 2477, -1,2460, 2466, 2475, -1,2465, 2474, 2464, -1,2455, 2464, + 2466, -1,2479, 2482, 2483, -1,2486, 2485, 2484, -1,2488, 2483, 2487, -1,2474, 2471, + 2486, -1,2486, 2484, 2474, -1,2488, 2487, 2484, -1,2490, 2489, 2470, -1,2469, 2470, + 2489, -1,2491, 2490, 2470, -1,2493, 2492, 2470, -1,2470, 2494, 2491, -1,2494, 2470, + 2492, -1,2492, 2496, 2495, -1,2499, 2498, 2497, -1,2493, 2497, 2496, -1,2499, 2500, + 2498, -1,2501, 2500, 2499, -1,2501, 2503, 2502, -1,2496, 2497, 2498, -1,2496, 2492, + 2493, -1,2495, 2504, 2492, -1,2504, 2495, 2472, -1,2473, 2504, 2472, -1,2507, 2506, + 2505, -1,2510, 2509, 2508, -1,2511, 2506, 2510, -1,2472, 2486, 2471, -1,2502, 2503, + 2512, -1,2514, 2513, 2512, -1,2503, 2514, 2512, -1,2517, 2516, 2515, -1,2513, 2514, + 2516, -1,2516, 2514, 2515, -1,2518, 2517, 2515, -1,2500, 2501, 2502, -1,2509, 2518, + 2519, -1,2507, 2505, 2486, -1,2483, 2520, 2479, -1,2479, 2522, 2521, -1,2479, 2521, + 2523, -1,2526, 2525, 2524, -1,2526, 2528, 2527, -1,2528, 2526, 2524, -1,2525, 2479, + 2523, -1,2485, 2488, 2484, -1,2488, 2520, 2483, -1,2531, 2530, 2529, -1,2530, 2533, + 2532, -1,2529, 2485, 2534, -1,2486, 2534, 2485, -1,2479, 2535, 2522, -1,2526, 2537, + 2536, -1,2527, 2537, 2526, -1,2532, 2533, 2526, -1,2539, 2533, 2538, -1,2540, 2538, + 2533, -1,2539, 2541, 2533, -1,2530, 2531, 2533, -1,2540, 2533, 2531, -1,2531, 2529, + 2542, -1,2544, 2542, 2543, -1,2529, 2534, 2542, -1,2533, 2541, 2545, -1,2548, 2547, + 2546, -1,2547, 2533, 2545, -1,2547, 2548, 2533, -1,2526, 2536, 2532, -1,2526, 2479, + 2525, -1,2544, 2543, 2549, -1,2519, 2518, 2550, -1,2508, 2509, 2519, -1,2505, 2534, + 2486, -1,2551, 2549, 2543, -1,2534, 2543, 2542, -1,2511, 2505, 2506, -1,2552, 2550, + 2515, -1,2550, 2518, 2515, -1,2553, 2552, 2515, -1,2556, 2555, 2554, -1,2553, 2554, + 2555, -1,2554, 2557, 2556, -1,2515, 2554, 2553, -1,2508, 2511, 2510, -1,2559, 2558, + 2548, -1,2551, 2558, 2559, -1,2560, 2559, 2548, -1,2548, 2562, 2561, -1,2560, 2548, + 2563, -1,2561, 2563, 2548, -1,2548, 2546, 2562, -1,2564, 2548, 2558, -1,2567, 2566, + 2565, -1,2556, 2557, 2566, -1,2566, 2557, 2565, -1,2569, 2568, 2567, -1,2569, 2567, + 2570, -1,2570, 2567, 2565, -1,2564, 2568, 2569, -1,2564, 2558, 2568, -1,2559, 2549, + 2551, -1,2535, 2479, 2520, -1,2573, 2572, 2571, -1,2573, 2575, 2574, -1,2574, 2572, + 2573, -1,2578, 2577, 2576, -1,2576, 2574, 2578, -1,2572, 2574, 2576, -1,2580, 2571, + 2579, -1,2582, 2579, 2581, -1,2571, 2580, 2573, -1,2575, 2573, 2580, -1,2583, 2580, + 2582, -1,2579, 2582, 2580, -1,2584, 2582, 2581, -1,2586, 2424, 2585, -1,2588, 2586, + 2587, -1,2586, 2585, 2587, -1,2582, 2584, 2587, -1,2589, 2587, 2585, -1,2584, 2588, + 2587, -1,2587, 2590, 2582, -1,2592, 2591, 2587, -1,2590, 2587, 2593, -1,2590, 2594, + 2582, -1,2594, 2583, 2582, -1,2580, 2583, 2575, -1,2413, 2595, 2585, -1,2596, 2589, + 2595, -1,2589, 2585, 2595, -1,2598, 2598, 2597, -1,2596, 2596, 2595, -1,2587, 2599, + 2592, -1,2593, 2587, 2591, -1,2602, 2601, 2600, -1,2603, 2600, 2601, -1,2603, 2605, + 2604, -1,2604, 2600, 2603, -1,2607, 2602, 2606, -1,2600, 2606, 2602, -1,2606, 2608, + 2607, -1,2609, 2608, 2606, -1,2605, 2610, 2604, -1,2605, 2611, 2610, -1,2613, 2612, + 2609, -1,2609, 2441, 2613, -1,2452, 2612, 2613, -1,2609, 2606, 2441, -1,2614, 2608, + 2609, -1,2617, 2616, 2615, -1,2617, 2615, 2618, -1,361, 361, 361, -1,361, 361, 2615, -1, + 2615, 2616, 361, -1,361, 361, 361, -1,2618, 361, 2617, -1,2618, 2619, 361, -1,361, + 361, 361, -1,361, 361, 361, -1,361, 2618, 361, -1,361, 361, 2618, -1,361, 2618, 361, -1, + 361, 361, 361, -1,361, 361, 361, -1,361, 361, 361, -1,361, 361, 361, -1,361, 361, + 361, -1,2621, 361, 2620, -1,361, 2620, 361, -1,2621, 2622, 2621, -1,2623, 2622, 2621, -1, + 2625, 2624, 2623, -1,2623, 2626, 2622, -1,2624, 2626, 2623, -1,2620, 2621, 2621, -1, + 361, 361, 361, -1,2627, 2619, 2618, -1,2630, 2629, 2628, -1,2630, 2632, 2631, -1, + 2633, 2630, 2631, -1,2632, 2630, 2628, -1,2635, 2630, 2634, -1,2633, 2634, 2630, -1, + 2636, 2630, 2635, -1,2636, 2638, 2637, -1,2636, 2640, 2639, -1,2636, 2635, 2638, -1, + 2637, 2640, 2636, -1,2641, 2639, 2640, -1,2644, 2643, 2642, -1,2625, 2644, 2642, -1, + 2645, 2643, 2644, -1,2645, 2646, 361, -1,2647, 361, 2646, -1,2645, 361, 2643, -1, + 2624, 2625, 2642, -1,2650, 2649, 2648, -1,2641, 2648, 2649, -1,2648, 2641, 2651, -1, + 2640, 2651, 2641, -1,2646, 2652, 2647, -1,2653, 2647, 2652, -1,2647, 2653, 2650, -1, + 2649, 2650, 2653, -1,2656, 2655, 2654, -1,2657, 2655, 2656, -1,2658, 2656, 2654, -1, + 2661, 2660, 2659, -1,2660, 2655, 2657, -1,2662, 2660, 2661, -1,2662, 2655, 2660, -1, + 2627, 2663, 2619, -1,2658, 2663, 2627, -1,2654, 2663, 2658, -1,2665, 2629, 2664, -1, + 2666, 2659, 2665, -1,2662, 2667, 2378, -1,2378, 2667, 2668, -1,2662, 2661, 2667, -1, + 2670, 2377, 2669, -1,2378, 2668, 2669, -1,2670, 2671, 2630, -1,2630, 2377, 2670, -1, + 2669, 2377, 2378, -1,2629, 2672, 2664, -1,2665, 2664, 2666, -1,2630, 2674, 2673, -1, + 2675, 2629, 2630, -1,2673, 2675, 2630, -1,2674, 2630, 2671, -1,2672, 2629, 2675, -1, + 2659, 2666, 2661, -1,2678, 2677, 2676, -1,2677, 2679, 2676, -1,2676, 2680, 2678, -1, + 2676, 2682, 2681, -1,2684, 2676, 2683, -1,2676, 2679, 2683, -1,2682, 2676, 2684, -1, + 2685, 2685, 2685, -1,2685, 2685, 2685, -1,2685, 2685, 2597, -1,2686, 2686, 2686, -1, + 2685, 2597, 2685, -1,2686, 2686, 2686, -1,2687, 2687, 2687, -1,2686, 2686, 2686, -1, + 2690, 2689, 2688, -1,2692, 2688, 2691, -1,2693, 2690, 2692, -1,2688, 2692, 2690, -1, + 2696, 2695, 2694, -1,2693, 2692, 2694, -1,2693, 2697, 2690, -1,2690, 2698, 2689, -1, + 2695, 2699, 2375, -1,2697, 2700, 2698, -1,2693, 2694, 2697, -1,2375, 2694, 2695, -1, + 2696, 2694, 2692, -1,2697, 2698, 2690, -1,2699, 2695, 2378, -1,2703, 2702, 2701, -1, + 2705, 2704, 2702, -1,2702, 2706, 2701, -1,2706, 2702, 2704, -1,2701, 2707, 2703, -1, + 2708, 2709, 2708, -1,2708, 2710, 2708, -1,2711, 2707, 2706, -1,2711, 2713, 2712, -1, + 2712, 2713, 2714, -1,2707, 2711, 2715, -1,2707, 2715, 2716, -1,2707, 2716, 2717, -1, + 2714, 2718, 2712, -1,2714, 2719, 2718, -1,2711, 2712, 2715, -1,2720, 2719, 2714, -1, + 2722, 2721, 2720, -1,2723, 2721, 2722, -1,2726, 2725, 2724, -1,2722, 2725, 2723, -1, + 2725, 2726, 2723, -1,2721, 2719, 2720, -1,2724, 2728, 2727, -1,2729, 2727, 2728, -1, + 2726, 2724, 2727, -1,2729, 2731, 2730, -1,2728, 2731, 2729, -1,2732, 2729, 2730, -1, + 2735, 2734, 2733, -1,2738, 2737, 2736, -1,2733, 2737, 2735, -1,2735, 2737, 2738, -1, + 2736, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, + 2738, 2736, -1,2741, 2740, 2739, -1,2742, 2740, 2741, -1,2743, 2739, 2740, -1,2730, + 2744, 2732, -1,2739, 2743, 2744, -1,2743, 2732, 2744, -1,13, 13, 13, -1,2745, 13, + 13, -1,2741, 2746, 2742, -1,2746, 2745, 2742, -1,13, 2745, 2746, -1,13, 13, 13, -1, + 2749, 2748, 2747, -1,2751, 2747, 2750, -1,2747, 2751, 2749, -1,2750, 2747, 2752, -1, + 2754, 2753, 2752, -1,2754, 2756, 2755, -1,2756, 2754, 2752, -1,2756, 2752, 2757, -1, + 2755, 2756, 2758, -1,2753, 2750, 2752, -1,2747, 2759, 2752, -1,2747, 2760, 2759, -1, + 2757, 2758, 2756, -1,2759, 2757, 2752, -1,2758, 2757, 2705, -1,2717, 2705, 2761, -1, + 2702, 2707, 2761, -1,2705, 2702, 2761, -1,2758, 2705, 2762, -1,2760, 2747, 2763, -1, + 2705, 2717, 2762, -1,2766, 2765, 2764, -1,2769, 2768, 2767, -1,2764, 2768, 2766, -1, + 2771, 2767, 2770, -1,2774, 2773, 2772, -1,2774, 2775, 2773, -1,2773, 2776, 2772, -1, + 2770, 2774, 2777, -1,2768, 2769, 2766, -1,2780, 2779, 2778, -1,2779, 2780, 2781, -1, + 2769, 2780, 2778, -1,2782, 2780, 2769, -1,2767, 2771, 2769, -1,2783, 2769, 2771, -1, + 2777, 2784, 2770, -1,2771, 2770, 2784, -1,2772, 2784, 2777, -1,2783, 2771, 2784, -1, + 2783, 2782, 2769, -1,2774, 2772, 2777, -1,2766, 2769, 2778, -1,2787, 2786, 2785, -1, + 2785, 2786, 2788, -1,2791, 2790, 2789, -1,2789, 2788, 2791, -1,2791, 2788, 2786, -1, + 2786, 2787, 2792, -1,2795, 2794, 2793, -1,2794, 2797, 2796, -1,2798, 2797, 2794, -1, + 2800, 2733, 2799, -1,2800, 2734, 2801, -1,2734, 2800, 2799, -1,2800, 2801, 2795, -1, + 2795, 2798, 2794, -1,2798, 2795, 2802, -1,2803, 2803, 2803, -1,2795, 2801, 2802, -1, + 2798, 2804, 2797, -1,2800, 2795, 2793, -1,2806, 2789, 2805, -1,2808, 2805, 2807, -1, + 2811, 2810, 2809, -1,2813, 2809, 2812, -1,2810, 2814, 2807, -1,2805, 2808, 2806, -1, + 2788, 2806, 2808, -1,2815, 2808, 2814, -1,2807, 2814, 2808, -1,2809, 2813, 2811, -1, + 2816, 2811, 2813, -1,2813, 2813, 2817, -1,2812, 2817, 2813, -1,2811, 2818, 2814, -1, + 2810, 2811, 2814, -1,2819, 2817, 2812, -1,2819, 2821, 2820, -1,2823, 2820, 2822, -1, + 2826, 2825, 2824, -1,2825, 2828, 2827, -1,2829, 2822, 2826, -1,2831, 2828, 2830, -1, + 2819, 2820, 2823, -1,2832, 2819, 2823, -1,2834, 2830, 2833, -1,2833, 2836, 2835, -1, + 2838, 2765, 2837, -1,2839, 2836, 2838, -1,2823, 2822, 2829, -1,2819, 2812, 2821, -1, + 2819, 2840, 2817, -1,2815, 2814, 2818, -1,2818, 2811, 2816, -1,2826, 2824, 2829, -1, + 2829, 2824, 2841, -1,2824, 2827, 2842, -1,2825, 2827, 2824, -1,2813, 2816, 2813, -1, + 2788, 2808, 2815, -1,2813, 2817, 2840, -1,2840, 2819, 2832, -1,2823, 2829, 2843, -1, + 2824, 2842, 2841, -1,2829, 2841, 2843, -1,2832, 2823, 2843, -1,2844, 2842, 2827, -1, + 2830, 2834, 2831, -1,2845, 2831, 2834, -1,2846, 2834, 2835, -1,2833, 2835, 2834, -1, + 2838, 2837, 2839, -1,2847, 2839, 2837, -1,2848, 2837, 2766, -1,2765, 2766, 2837, -1, + 2839, 2846, 2835, -1,2836, 2839, 2835, -1,2831, 2849, 2844, -1,2831, 2845, 2849, -1, + 2839, 2847, 2846, -1,2766, 2778, 2848, -1,2837, 2848, 2847, -1,2834, 2846, 2845, -1, + 2844, 2827, 2831, -1,2828, 2831, 2827, -1,2852, 2851, 2850, -1,2851, 13, 2853, -1, + 2854, 2852, 2850, -1,2857, 2856, 2855, -1,2855, 2859, 2858, -1,2859, 2854, 2860, -1, + 2856, 2862, 2861, -1,13, 13, 13, -1,2853, 13, 13, -1,2851, 2853, 2850, -1,2850, 2860, + 2854, -1,2860, 2858, 2859, -1,2855, 2858, 2857, -1,2857, 2862, 2856, -1,2865, 2864, + 2863, -1,2866, 2865, 2861, -1,2867, 2865, 2863, -1,2868, 2861, 2865, -1,2869, 2866, + 2861, -1,2871, 2870, 2866, -1,2865, 2867, 2868, -1,2870, 2873, 2872, -1,2866, 2869, + 2874, -1,2861, 2875, 2869, -1,2861, 2876, 2875, -1,2866, 2877, 2871, -1,2877, 2866, + 2878, -1,2866, 2874, 2878, -1,2873, 2870, 2871, -1,2862, 2876, 2861, -1,2779, 2781, + 2879, -1,2881, 2879, 2880, -1,2884, 2883, 2882, -1,2886, 2882, 2885, -1,2883, 2887, + 2880, -1,2881, 2880, 2887, -1,2778, 2779, 2881, -1,2848, 2881, 2887, -1,2887, 2883, + 2884, -1,2885, 2888, 2886, -1,2886, 2884, 2882, -1,2885, 2889, 2888, -1,2845, 2886, + 2888, -1,2886, 2846, 2884, -1,2890, 2888, 2889, -1,2884, 2847, 2887, -1,2779, 2879, + 2881, -1,2893, 2892, 2891, -1,2892, 2895, 2894, -1,2898, 2897, 2896, -1,2897, 2900, + 2899, -1,2901, 2895, 2898, -1,2904, 2903, 2902, -1,2906, 2905, 2900, -1,2904, 2907, + 2906, -1,2908, 2903, 2787, -1,2903, 2908, 2785, -1,2909, 2903, 2785, -1,2891, 2890, + 2893, -1,2890, 2889, 2893, -1,2890, 2849, 2888, -1,2848, 2887, 2847, -1,2847, 2884, + 2846, -1,2892, 2894, 2891, -1,2891, 2894, 2842, -1,2894, 2901, 2841, -1,2895, 2901, + 2894, -1,2845, 2846, 2886, -1,2778, 2881, 2848, -1,2845, 2888, 2849, -1,2849, 2890, + 2844, -1,2891, 2842, 2844, -1,2901, 2843, 2841, -1,2894, 2841, 2842, -1,2890, 2891, + 2844, -1,2832, 2843, 2901, -1,2897, 2899, 2896, -1,2899, 2905, 2840, -1,2905, 2907, + 2813, -1,2900, 2905, 2899, -1,2904, 2902, 2907, -1,2902, 2909, 2818, -1,2785, 2910, + 2909, -1,2909, 2910, 2815, -1,2907, 2902, 2816, -1,2903, 2909, 2902, -1,2832, 2896, + 2899, -1,2906, 2907, 2905, -1,2899, 2840, 2832, -1,2905, 2813, 2840, -1,2902, 2818, + 2816, -1,2910, 2788, 2815, -1,2909, 2815, 2818, -1,2907, 2816, 2813, -1,2832, 2901, + 2896, -1,2898, 2896, 2901, -1,2913, 2912, 2911, -1,2914, 2912, 2913, -1,2916, 2915, + 2914, -1,2918, 2911, 2917, -1,2921, 2920, 2919, -1,2923, 2922, 2921, -1,2923, 2921, + 2924, -1,2919, 2925, 2921, -1,2924, 2921, 2925, -1,2748, 2924, 2926, -1,2928, 2927, + 2926, -1,2915, 2916, 2929, -1,2914, 2913, 2916, -1,2916, 2913, 2930, -1,2929, 2916, + 2927, -1,2931, 2930, 2913, -1,2932, 2916, 2930, -1,2932, 2927, 2916, -1,2913, 2918, + 2931, -1,2911, 2918, 2913, -1,2748, 2926, 2927, -1,2923, 2748, 2749, -1,2923, 2924, + 2748, -1,2923, 2749, 2751, -1,2747, 2932, 2763, -1,2748, 2927, 2747, -1,2927, 2932, + 2747, -1,2927, 2928, 2929, -1,2935, 2934, 2933, -1,2937, 2934, 2936, -1,2940, 2939, + 2938, -1,2942, 2938, 2941, -1,2938, 2942, 2940, -1,2939, 2943, 2938, -1,2940, 2942, + 2936, -1,2944, 2936, 2942, -1,2947, 2946, 2945, -1,2945, 2948, 2947, -1,2946, 2933, + 2945, -1,2933, 2937, 2945, -1,2933, 2934, 2937, -1,2937, 2936, 2944, -1,2942, 2941, + 2944, -1,2936, 2934, 2935, -1,2938, 2949, 2941, -1,2943, 2951, 2950, -1,2951, 2943, + 2939, -1,2950, 2951, 2952, -1,2955, 2954, 2953, -1,2950, 2952, 2956, -1,2955, 2956, + 2952, -1,2955, 2952, 2951, -1,2953, 2957, 2955, -1,2949, 2958, 2941, -1,2960, 2957, + 2959, -1,2959, 2957, 2953, -1,2953, 2961, 2959, -1,2960, 2959, 2962, -1,2956, 2955, + 2957, -1,2943, 2949, 2938, -1,2965, 2964, 2963, -1,2963, 2948, 2965, -1,2945, 2966, + 2948, -1,2967, 2945, 2937, -1,2965, 2801, 2734, -1,2801, 2965, 2966, -1,2966, 2967, + 2802, -1,2967, 2966, 2945, -1,2802, 2967, 2804, -1,2966, 2802, 2801, -1,2965, 2948, + 2966, -1,2937, 2968, 2967, -1,2969, 2968, 2944, -1,2944, 2968, 2937, -1,2941, 2958, + 2970, -1,2941, 2970, 2944, -1,2969, 2944, 2970, -1,2968, 2971, 2804, -1,2971, 2968, + 2972, -1,2970, 2973, 2969, -1,2969, 2972, 2968, -1,2968, 2804, 2967, -1,2976, 2975, + 2974, -1,2976, 2977, 2975, -1,2975, 2962, 2974, -1,2959, 2961, 2978, -1,2974, 2978, + 2979, -1,2978, 2974, 2959, -1,2974, 2979, 2976, -1,2959, 2974, 2962, -1,2982, 2981, + 2980, -1,2980, 2981, 2983, -1,2983, 2985, 2984, -1,2986, 2984, 2985, -1,2983, 2984, + 2980, -1,2987, 2720, 2714, -1,2989, 2987, 2988, -1,2991, 2990, 2720, -1,2991, 2987, + 2989, -1,2987, 2991, 2720, -1,2686, 2431, 2431, -1,2993, 2990, 2992, -1,2996, 2995, + 2994, -1,2995, 2996, 2992, -1,2994, 2998, 2997, -1,2998, 2994, 2995, -1,2996, 2994, + 2999, -1,2996, 2993, 2992, -1,3002, 3001, 3000, -1,3004, 3000, 3003, -1,2997, 3001, + 3002, -1,3001, 2997, 2998, -1,3007, 3006, 3005, -1,3008, 3003, 3006, -1,3010, 3005, + 3009, -1,2994, 2997, 3011, -1,2720, 2993, 3012, -1,2997, 3002, 3011, -1,2996, 2999, + 3012, -1,3012, 2993, 2996, -1,3013, 3011, 3002, -1,2994, 3011, 2999, -1,3002, 3004, + 3013, -1,3004, 3008, 3014, -1,3008, 3004, 3003, -1,3007, 3008, 3006, -1,3008, 3007, + 3015, -1,3016, 3004, 3014, -1,3015, 3010, 3017, -1,3015, 3014, 3008, -1,3010, 3015, + 3007, -1,3007, 3005, 3010, -1,3004, 3016, 3013, -1,3002, 3000, 3004, -1,3009, 3018, + 3010, -1,3018, 3020, 3019, -1,3019, 3022, 3021, -1,3019, 3020, 3022, -1,3024, 3023, + 3022, -1,3023, 3024, 3025, -1,3020, 3024, 3022, -1,3022, 3023, 3026, -1,3023, 3025, + 3027, -1,3019, 3017, 3010, -1,3028, 2964, 2965, -1,3031, 3030, 3029, -1,3034, 3033, + 3032, -1,3035, 3029, 3033, -1,3032, 3036, 2965, -1,3027, 3025, 3030, -1,2965, 3036, + 3028, -1,3017, 3019, 3037, -1,3027, 3026, 3023, -1,3031, 3027, 3030, -1,3038, 3027, + 3031, -1,3037, 3019, 3021, -1,3038, 3026, 3027, -1,3022, 3026, 3021, -1,3031, 3039, + 3038, -1,3035, 3034, 3040, -1,3034, 3035, 3033, -1,2965, 3034, 3032, -1,3034, 2965, + 2734, -1,3041, 3039, 3035, -1,2734, 3040, 3034, -1,3041, 3035, 3040, -1,3035, 3039, + 3031, -1,3031, 3029, 3035, -1,3019, 3010, 3018, -1,2985, 2983, 3042, -1,2983, 2981, + 3043, -1,2706, 3042, 3043, -1,3043, 2711, 2706, -1,3044, 2711, 3043, -1,3042, 2983, + 3043, -1,3043, 2981, 3044, -1,3045, 3044, 2982, -1,2982, 3044, 2981, -1,3045, 2982, + 3046, -1,3047, 3046, 2988, -1,2713, 3045, 2714, -1,3045, 2713, 3044, -1,3047, 2714, + 3045, -1,3045, 3046, 3047, -1,3044, 2713, 2711, -1,2704, 3042, 2706, -1,2705, 3042, + 2704, -1,3050, 3049, 3048, -1,3049, 3050, 2705, -1,3048, 3049, 3051, -1,3050, 3048, + 3052, -1,3050, 3042, 2705, -1,3042, 3053, 2985, -1,3042, 3050, 3053, -1,3052, 3051, + 3054, -1,3052, 3053, 3050, -1,3054, 3051, 3055, -1,3051, 3052, 3048, -1,3049, 3056, + 3051, -1,3057, 3055, 3051, -1,3051, 3058, 3057, -1,3061, 3060, 3059, -1,3062, 3061, + 3055, -1,3057, 3062, 3055, -1,3055, 3059, 3063, -1,3059, 3055, 3061, -1,3063, 3059, + 3064, -1,3063, 3054, 3055, -1,3064, 3066, 3065, -1,3066, 3064, 3059, -1,3059, 3060, + 3066, -1,3058, 3051, 3056, -1,2985, 3053, 3067, -1,3067, 3053, 3068, -1,3052, 3054, + 3069, -1,3068, 3069, 3070, -1,3069, 3068, 3052, -1,3054, 3071, 3069, -1,3052, 3068, + 3053, -1,3067, 3068, 3072, -1,3067, 3072, 3073, -1,3073, 2986, 3067, -1,3069, 3074, + 3070, -1,3070, 3072, 3068, -1,3075, 3074, 3071, -1,3075, 3071, 3076, -1,3069, 3071, + 3074, -1,3071, 3054, 3063, -1,3078, 3076, 3077, -1,3079, 3076, 3063, -1,3076, 3078, + 3080, -1,3063, 3076, 3071, -1,3064, 3065, 3081, -1,3077, 3076, 3079, -1,3081, 3079, + 3064, -1,3064, 3079, 3063, -1,3082, 3079, 3081, -1,3077, 3079, 3083, -1,3085, 3079, + 3084, -1,3085, 3083, 3079, -1,3084, 3079, 3082, -1,3086, 3082, 3081, -1,3076, 3080, + 3075, -1,3089, 3088, 3087, -1,3090, 3089, 3087, -1,3089, 3090, 3091, -1,3088, 3092, + 3087, -1,3095, 3094, 3093, -1,3093, 3092, 3095, -1,3095, 3092, 3088, -1,3090, 3097, + 3096, -1,3098, 3096, 3097, -1,3097, 3099, 3098, -1,3090, 3096, 3091, -1,3099, 3101, + 3100, -1,3102, 3100, 3101, -1,3102, 3101, 3103, -1,3099, 3100, 3098, -1,3093, 3094, + 3104, -1,3104, 3106, 3105, -1,3106, 3104, 3094, -1,3108, 3107, 3105, -1,3105, 3106, + 3108, -1,3110, 3109, 3107, -1,3109, 3112, 3111, -1,3112, 3109, 3110, -1,3110, 3107, + 3108, -1,3115, 3114, 3113, -1,3103, 3115, 3102, -1,3115, 3103, 3114, -1,3114, 3116, + 3113, -1,3118, 3111, 3117, -1,3119, 3113, 3116, -1,3119, 3118, 3117, -1,3111, 3112, + 3117, -1,3119, 3116, 3118, -1,3122, 3121, 3120, -1,3125, 3124, 3123, -1,3127, 3120, + 3126, -1,3130, 3129, 3128, -1,3129, 3131, 3126, -1,3129, 3130, 3132, -1,3127, 3122, + 3120, -1,3122, 3127, 3133, -1,3135, 3122, 3134, -1,3122, 3135, 3121, -1,3131, 3132, + 3127, -1,3131, 3127, 3126, -1,3130, 3137, 3136, -1,3121, 3135, 3138, -1,3141, 3140, + 3139, -1,3141, 3143, 3142, -1,3145, 3142, 3144, -1,3146, 3147, 3146, -1,3138, 3139, + 3140, -1,3150, 3149, 3148, -1,3144, 3142, 3143, -1,3143, 3139, 3151, -1,3144, 3143, + 3152, -1,3153, 3145, 3144, -1,3155, 3153, 3154, -1,3155, 3145, 3153, -1,3154, 3153, + 3156, -1,3154, 3158, 3157, -1,3144, 3159, 3153, -1,3143, 3141, 3139, -1,3138, 3135, + 3139, -1,3135, 3160, 3139, -1,3161, 3161, 3161, -1,3163, 3162, 3124, -1,3164, 3164, + 3164, -1,3131, 3129, 3132, -1,3162, 3123, 3124, -1,3133, 3127, 3132, -1,3165, 3165, + 3165, -1,3134, 3122, 3133, -1,3151, 3139, 3160, -1,3163, 3130, 3136, -1,3166, 3137, + 3130, -1,3151, 3152, 3143, -1,3160, 3135, 3134, -1,3152, 3159, 3144, -1,3169, 3168, + 3167, -1,3153, 3159, 3156, -1,3170, 3150, 3148, -1,3156, 3158, 3154, -1,3154, 3157, + 3155, -1,3157, 3158, 3167, -1,3146, 3171, 3146, -1,3172, 3172, 3172, -1,3173, 3150, + 3170, -1,3174, 3157, 3167, -1,3169, 3167, 3173, -1,3170, 3169, 3173, -1,3163, 3136, + 3162, -1,3168, 3175, 3167, -1,3178, 3177, 3176, -1,3180, 3178, 3179, -1,3179, 3181, + 3180, -1,3179, 3176, 3182, -1,3181, 3179, 3183, -1,3179, 3178, 3176, -1,3180, 3181, + 3184, -1,3186, 3184, 3185, -1,3188, 3186, 3187, -1,3191, 3190, 3189, -1,3191, 3192, + 3190, -1,3194, 3190, 3193, -1,3188, 3195, 3193, -1,3181, 3185, 3184, -1,3187, 3185, + 3196, -1,3183, 3179, 3182, -1,3181, 3183, 3197, -1,3185, 3187, 3186, -1,3197, 3185, + 3181, -1,3196, 3198, 3187, -1,3197, 3196, 3185, -1,3187, 3198, 3199, -1,3195, 3194, + 3193, -1,3194, 3195, 3199, -1,3189, 3194, 3200, -1,3194, 3189, 3190, -1,3199, 3200, + 3194, -1,3202, 3201, 3189, -1,3200, 3202, 3189, -1,3195, 3187, 3199, -1,3189, 3201, + 3191, -1,3187, 3195, 3188, -1,3203, 3192, 3191, -1,3205, 3203, 3204, -1,3204, 3206, + 3205, -1,3204, 3191, 3201, -1,3206, 3204, 3207, -1,3204, 3203, 3191, -1,3205, 3206, + 3208, -1,3210, 3208, 3209, -1,3212, 3210, 3211, -1,3176, 3214, 3213, -1,3176, 3177, + 3214, -1,3216, 3214, 3215, -1,3212, 3217, 3215, -1,3206, 3209, 3208, -1,3211, 3209, + 3218, -1,3207, 3204, 3201, -1,3206, 3207, 3219, -1,3209, 3211, 3210, -1,3219, 3209, + 3206, -1,3218, 3220, 3211, -1,3219, 3218, 3209, -1,3211, 3220, 3221, -1,3217, 3216, + 3215, -1,3216, 3217, 3221, -1,3213, 3216, 3222, -1,3216, 3213, 3214, -1,3221, 3222, + 3216, -1,3223, 3182, 3213, -1,3222, 3223, 3213, -1,3217, 3211, 3221, -1,3213, 3182, + 3176, -1,3211, 3217, 3212, -1,3226, 3225, 3224, -1,3224, 3225, 3227, -1,3225, 3226, + 3228, -1,3227, 3229, 3224, -1,3229, 3227, 3230, -1,3233, 3232, 3231, -1,3228, 3232, + 3225, -1,3234, 3232, 3228, -1,3235, 3233, 3231, -1,3236, 3233, 3235, -1,3237, 3236, + 3235, -1,3231, 3232, 3234, -1,3229, 3230, 3238, -1,3238, 3230, 3239, -1,3241, 3239, + 3240, -1,3243, 3242, 3241, -1,3245, 3244, 3242, -1,3242, 3243, 3245, -1,3243, 3241, + 3240, -1,3230, 3240, 3239, -1,3248, 3247, 3246, -1,3248, 3246, 3236, -1,3250, 3245, + 3249, -1,3245, 3250, 3244, -1,3246, 3247, 3249, -1,3249, 3247, 3250, -1,3248, 3236, + 3237, -1,3253, 3252, 3251, -1,3255, 3253, 3254, -1,3256, 3254, 3253, -1,3259, 3258, + 3257, -1,3260, 3258, 3255, -1,3256, 3261, 3254, -1,3253, 3251, 3256, -1,3263, 3259, + 3262, -1,3266, 3265, 3264, -1,3268, 3265, 3267, -1,3270, 3269, 3267, -1,3270, 3267, + 3265, -1,3264, 3263, 3271, -1,3255, 3254, 3260, -1,3260, 3257, 3258, -1,3257, 3260, + 3272, -1,3262, 3257, 3273, -1,3257, 3262, 3259, -1,3274, 3272, 3260, -1,3273, 3257, + 3272, -1,3260, 3275, 3274, -1,3260, 3254, 3275, -1,3262, 3273, 3276, -1,3271, 3266, + 3264, -1,3266, 3271, 3277, -1,3279, 3266, 3278, -1,3266, 3279, 3265, -1,3278, 3266, + 3277, -1,3270, 3279, 3278, -1,3277, 3271, 3276, -1,3271, 3262, 3276, -1,3279, 3270, + 3265, -1,3262, 3271, 3263, -1,3269, 3280, 3268, -1,3256, 3252, 13, -1,3283, 3282, + 3281, -1,3284, 3283, 3281, -1,3284, 3286, 3285, -1,3286, 3284, 3281, -1,3286, 3281, + 3287, -1,3285, 3286, 3288, -1,3282, 3289, 3281, -1,3292, 3291, 3290, -1,3294, 3293, + 3292, -1,3293, 3296, 3295, -1,3290, 3288, 3297, -1,3299, 3298, 3295, -1,3290, 3294, + 3292, -1,3290, 3291, 3288, -1,3291, 3285, 3288, -1,3286, 3300, 3288, -1,3288, 3300, + 3297, -1,3281, 3289, 3287, -1,3287, 3289, 3301, -1,3300, 3286, 3287, -1,3302, 3294, + 3290, -1,3302, 3290, 3297, -1,3294, 3302, 3303, -1,3299, 3305, 3304, -1,3306, 3299, + 3296, -1,3299, 3304, 3298, -1,3296, 3299, 3295, -1,3303, 3306, 3296, -1,3305, 3307, + 3304, -1,3306, 3305, 3299, -1,3296, 3294, 3303, -1,3294, 3296, 3293, -1,3309, 3298, + 3308, -1,3310, 3309, 3308, -1,3310, 3312, 3311, -1,3312, 3310, 3308, -1,3312, 3308, + 3313, -1,3311, 3312, 3314, -1,3298, 3304, 3308, -1,3317, 3316, 3315, -1,3319, 3318, + 3317, -1,3318, 3321, 3320, -1,3315, 3314, 3322, -1,3323, 3282, 3320, -1,3315, 3319, + 3317, -1,3315, 3316, 3314, -1,3316, 3311, 3314, -1,3312, 3324, 3314, -1,3314, 3324, + 3322, -1,3308, 3304, 3313, -1,3313, 3304, 3307, -1,3324, 3312, 3313, -1,3325, 3319, + 3315, -1,3325, 3315, 3322, -1,3319, 3325, 3326, -1,3323, 3327, 3289, -1,3328, 3323, + 3321, -1,3323, 3289, 3282, -1,3321, 3323, 3320, -1,3326, 3328, 3321, -1,3327, 3301, + 3289, -1,3328, 3327, 3323, -1,3321, 3319, 3326, -1,3319, 3321, 3318, -1,3331, 3330, + 3329, -1,3329, 3330, 3332, -1,3330, 3331, 3333, -1,3336, 3335, 3334, -1,3335, 3336, + 3337, -1,3329, 3332, 3334, -1,3334, 3332, 3336, -1,3339, 3333, 3338, -1,3333, 3339, + 3330, -1,3341, 3338, 3340, -1,3338, 3341, 3339, -1,3340, 3343, 3342, -1,3342, 3345, + 3344, -1,3345, 3342, 3343, -1,3340, 3342, 3341, -1,3347, 3337, 3346, -1,3337, 3347, + 3335, -1,3346, 3337, 3348, -1,3350, 3348, 3349, -1,3348, 3350, 3346, -1,3352, 3349, + 3351, -1,3349, 3352, 3350, -1,3344, 3354, 3353, -1,3355, 3344, 3345, -1,3344, 3355, + 3354, -1,3354, 3351, 3356, -1,3357, 3344, 3353, -1,3358, 3344, 3357, -1,3353, 3354, + 3356, -1,3351, 3349, 3356, -1,3361, 3360, 3359, -1,3362, 3359, 3360, -1,3364, 3363, + 3361, -1,3364, 3359, 3365, -1,3363, 3367, 3366, -1,3367, 3363, 3364, -1,3364, 3368, + 3367, -1,3364, 3361, 3359, -1,3360, 3369, 3362, -1,3371, 3366, 3370, -1,3373, 3371, + 3372, -1,3375, 3374, 3373, -1,3372, 3370, 3376, -1,3378, 3374, 3377, -1,3378, 3373, + 3374, -1,3373, 3372, 3379, -1,3372, 3371, 3370, -1,3366, 3367, 3370, -1,3367, 3380, + 3370, -1,3362, 3381, 3365, -1,3365, 3368, 3364, -1,3380, 3367, 3368, -1,3376, 3379, + 3372, -1,3376, 3370, 3380, -1,3379, 3375, 3373, -1,3383, 3377, 3382, -1,3382, 3384, + 3383, -1,3385, 3384, 3382, -1,3382, 3377, 3375, -1,3374, 3375, 3377, -1,3365, 3359, + 3362, -1,3388, 3387, 3386, -1,3362, 3369, 3389, -1,3390, 3388, 3389, -1,3388, 3390, + 3387, -1,3362, 3389, 3388, -1,3393, 3392, 3391, -1,3394, 3392, 3393, -1,3394, 3393, + 3395, -1,3388, 3381, 3362, -1,3381, 3388, 3386, -1,3395, 3381, 3386, -1,3394, 3395, + 3396, -1,3397, 3393, 3391, -1,3386, 3396, 3395, -1,3400, 3399, 3398, -1,3402, 3400, + 3401, -1,3401, 3403, 3402, -1,3401, 3398, 3404, -1,3403, 3401, 3405, -1,3401, 3400, + 3398, -1,3402, 3403, 3406, -1,3408, 3406, 3407, -1,3410, 3408, 3409, -1,3413, 3412, + 3411, -1,3413, 3414, 3412, -1,3416, 3412, 3415, -1,3410, 3417, 3415, -1,3403, 3407, + 3406, -1,3409, 3407, 3418, -1,3405, 3401, 3404, -1,3403, 3405, 3419, -1,3407, 3409, + 3408, -1,3419, 3407, 3403, -1,3418, 3420, 3409, -1,3419, 3418, 3407, -1,3409, 3420, + 3421, -1,3417, 3416, 3415, -1,3416, 3417, 3421, -1,3411, 3416, 3422, -1,3416, 3411, + 3412, -1,3421, 3422, 3416, -1,3424, 3423, 3411, -1,3422, 3424, 3411, -1,3417, 3409, + 3421, -1,3411, 3423, 3413, -1,3409, 3417, 3410, -1,3425, 3414, 3413, -1,3427, 3425, + 3426, -1,3426, 3428, 3427, -1,3426, 3413, 3423, -1,3428, 3426, 3429, -1,3426, 3425, + 3413, -1,3427, 3428, 3430, -1,3432, 3430, 3431, -1,3434, 3432, 3433, -1,3398, 3436, + 3435, -1,3398, 3399, 3436, -1,3438, 3436, 3437, -1,3434, 3439, 3437, -1,3428, 3431, + 3430, -1,3433, 3431, 3440, -1,3429, 3426, 3423, -1,3428, 3429, 3441, -1,3431, 3433, + 3432, -1,3441, 3431, 3428, -1,3440, 3442, 3433, -1,3441, 3440, 3431, -1,3433, 3442, + 3443, -1,3439, 3438, 3437, -1,3438, 3439, 3443, -1,3435, 3438, 3444, -1,3438, 3435, + 3436, -1,3443, 3444, 3438, -1,3445, 3404, 3435, -1,3444, 3445, 3435, -1,3439, 3433, + 3443, -1,3435, 3404, 3398, -1,3433, 3439, 3434, -1,3448, 3447, 3446, -1,3446, 3449, + 3448, -1,3452, 3451, 3450, -1,3450, 3451, 3453, -1,3456, 3455, 3454, -1,3456, 3454, + 3457, -1,3455, 3458, 3453, -1,3458, 3455, 3456, -1,3459, 3450, 3458, -1,3460, 3458, + 3456, -1,3456, 3457, 3461, -1,3463, 3461, 3462, -1,3461, 3457, 3462, -1,3464, 3461, + 3463, -1,3465, 3463, 3462, -1,3461, 3466, 3456, -1,3450, 3453, 3458, -1,3468, 3467, + 3451, -1,3470, 3465, 3469, -1,3470, 3469, 3471, -1,3474, 3473, 3472, -1,3473, 3476, + 3475, -1,3474, 3477, 3471, -1,3479, 3476, 3478, -1,3470, 3471, 3477, -1,3480, 3470, + 3477, -1,3479, 3478, 3481, -1,3481, 3483, 3482, -1,3486, 3485, 3484, -1,3487, 3483, + 3486, -1,3472, 3477, 3474, -1,3470, 3463, 3465, -1,3470, 3488, 3463, -1,3451, 3452, + 3489, -1,3450, 3459, 3452, -1,3459, 3458, 3460, -1,3460, 3456, 3490, -1,3456, 3466, + 3490, -1,3461, 3464, 3466, -1,3463, 3488, 3464, -1,3470, 3480, 3491, -1,3477, 3492, + 3480, -1,3470, 3491, 3488, -1,3472, 3492, 3477, -1,3473, 3475, 3472, -1,3493, 3472, + 3475, -1,3494, 3475, 3479, -1,3476, 3479, 3475, -1,3483, 3487, 3482, -1,3495, 3482, + 3487, -1,3496, 3487, 3484, -1,3486, 3484, 3487, -1,3482, 3497, 3479, -1,3481, 3482, + 3479, -1,3475, 3498, 3493, -1,3475, 3494, 3498, -1,3482, 3495, 3497, -1,3484, 3499, + 3496, -1,3487, 3496, 3495, -1,3479, 3497, 3494, -1,3493, 3492, 3472, -1,3489, 3468, + 3451, -1,2686, 2686, 2686, -1,2686, 2686, 2686, -1,3501, 3485, 3500, -1,3502, 3501, + 3500, -1,3504, 3500, 3503, -1,3506, 3505, 3503, -1,3504, 3503, 3505, -1,3507, 3504, + 3505, -1,3508, 3505, 3506, -1,3510, 3508, 3509, -1,3512, 3509, 3511, -1,3514, 3511, + 3513, -1,3509, 3512, 3515, -1,3510, 3509, 3515, -1,3512, 3511, 3514, -1,3510, 3505, + 3508, -1,3510, 3516, 3505, -1,3507, 3505, 3517, -1,3516, 3510, 3515, -1,3518, 3517, + 3505, -1,3505, 3516, 3518, -1,3519, 3514, 3513, -1,3514, 3515, 3512, -1,3520, 3514, + 3519, -1,3519, 3522, 3521, -1,3519, 3521, 3520, -1,3507, 3502, 3504, -1,3525, 3524, + 3523, -1,3527, 3526, 3523, -1,3523, 3524, 3527, -1,3530, 3529, 3528, -1,3528, 3527, + 3530, -1,3530, 3527, 3524, -1,3533, 3532, 3531, -1,3489, 3531, 3534, -1,3535, 3532, + 3533, -1,3534, 3531, 3532, -1,3536, 3534, 3532, -1,3537, 3532, 3535, -1,3537, 3539, + 3538, -1,3540, 3538, 3525, -1,3538, 3540, 3537, -1,3541, 3537, 3540, -1,3526, 3540, + 3523, -1,3525, 3523, 3540, -1,3537, 3535, 3539, -1,3537, 3542, 3532, -1,3543, 3536, + 2596, -1,3467, 3534, 3543, -1,3543, 3534, 3536, -1,3543, 2596, 2596, -1,3545, 3532, + 3544, -1,3547, 3532, 3546, -1,3547, 3544, 3532, -1,3537, 3541, 3548, -1,3541, 3540, + 3526, -1,3537, 3548, 3542, -1,3546, 3532, 3542, -1,3549, 3550, 3549, -1,2600, 3552, + 3551, -1,3552, 2600, 3553, -1,2604, 3554, 3553, -1,3553, 2600, 2604, -1,3556, 3551, + 3555, -1,3551, 3556, 2600, -1,3555, 3557, 3556, -1,3556, 3557, 3558, -1,2604, 3559, + 3554, -1,3559, 3560, 3554, -1,3558, 3562, 3561, -1,3561, 3513, 3558, -1,3561, 3562, + 3522, -1,3513, 3556, 3558, -1,3558, 3557, 3563, -1,13, 13, 13, -1,13, 3564, 13, -1, + 3564, 3565, 13, -1,3564, 13, 13, -1,3564, 13, 3566, -1,3564, 13, 13, -1,3564, 3566, + 3567, -1,13, 13, 13, -1,3570, 3569, 3568, -1,13, 3571, 13, -1,3571, 13, 13, -1,3572, + 3565, 3564, -1,3571, 13, 13, -1,3571, 13, 13, -1,3565, 3572, 3573, -1,13, 13, 3571, -1, + 3568, 13, 3571, -1,13, 13, 3571, -1,3570, 3568, 3571, -1,3574, 3571, 13, -1,3570, + 3576, 3575, -1,3578, 3577, 13, -1,3577, 3580, 3579, -1,13, 3581, 3578, -1,3579, 13, + 3577, -1,3580, 3582, 3579, -1,3578, 3581, 3583, -1,3584, 3575, 3576, -1,3586, 3584, + 3585, -1,3586, 3585, 3587, -1,3575, 3583, 3570, -1,3581, 3569, 3583, -1,3579, 3582, + 3588, -1,3591, 3590, 3589, -1,3592, 13, 13, -1,3593, 3589, 3590, -1,3592, 3591, 13, -1, + 3591, 3592, 3590, -1,13, 13, 3582, -1,3593, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,3588, 3582, 13, -1,13, 13, 13, -1,3583, 3569, 3570, -1,3576, 3585, + 3584, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 3582, 13, 13, -1,13, 3572, 13, -1,3572, 13, 3573, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 3594, -1,3596, 3594, 3595, -1,3595, 3594, 13, -1,3596, 3595, + 3597, -1,3596, 3599, 3598, -1,3599, 3596, 3597, -1,3598, 3599, 3598, -1,13, 13, 13, -1, + 3601, 3598, 3600, -1,3598, 3601, 3598, -1,3601, 3600, 3602, -1,3602, 3602, 3603, -1, + 3602, 3602, 3600, -1,3603, 3602, 3604, -1,13, 13, 3574, -1,13, 13, 3574, -1,3606, + 3605, 3574, -1,3607, 3574, 13, -1,3608, 3574, 3607, -1,13, 13, 13, -1,3605, 13, 13, -1, + 3608, 13, 13, -1,13, 13, 13, -1,3574, 3608, 3606, -1,13, 13, 13, -1,13, 13, 3574, -1, + 3611, 3610, 3609, -1,3609, 3610, 3612, -1,3611, 3609, 3613, -1,3604, 3613, 3614, -1, + 3613, 3604, 3611, -1,3604, 3614, 3603, -1,3617, 3616, 3615, -1,3618, 3616, 3617, -1, + 3619, 3617, 3612, -1,3617, 3619, 3618, -1,3619, 3612, 3610, -1,3616, 3621, 3620, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 3623, 3622, 3585, -1,3624, 3623, 3585, -1,13, 3625, 13, -1,3626, 13, 3625, -1,3625, + 3624, 3585, -1,13, 13, 13, -1,13, 13, 13, -1,13, 3626, 13, -1,3627, 3626, 3585, -1, + 3585, 3628, 3627, -1,3585, 3626, 3625, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 3605, -1, + 3605, 3606, 13, -1,13, 3606, 13, -1,3630, 3629, 3628, -1,3632, 3631, 3629, -1,13, + 13, 13, -1,13, 3631, 13, -1,13, 3605, 13, -1,3585, 3630, 3628, -1,3608, 13, 3606, -1, + 3587, 3585, 3622, -1,13, 3605, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 3605, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, + 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 3605, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,3633, 13, 13, -1,3616, 3620, 3615, -1,3620, 3621, 3633, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,3633, 3634, 3620, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 3605, -1,13, 13, 13, -1,13, 13, 13, -1,13, 3631, 3635, -1, + 3637, 3636, 3635, -1,3632, 3637, 3635, -1,13, 13, 13, -1,13, 3630, 3585, -1,13, 13, + 3585, -1,3638, 13, 3620, -1,3640, 3638, 3639, -1,13, 3585, 13, -1,3631, 3632, 3635, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,3642, 3640, 3641, -1, + 3640, 3639, 3641, -1,3634, 3643, 3620, -1,13, 3634, 3633, -1,3638, 3643, 3639, -1, + 3641, 3644, 3642, -1,13, 13, 13, -1,3638, 3620, 3643, -1,3629, 3630, 3632, -1,3620, + 13, 3585, -1,3593, 3590, 13, -1,3647, 3646, 3645, -1,3645, 3646, 3648, -1,3647, 3645, + 3649, -1,3652, 3651, 3650, -1,3651, 3648, 3653, -1,3654, 3653, 3646, -1,3646, 3653, + 3648, -1,3566, 3655, 3567, -1,3567, 3655, 3649, -1,3649, 3655, 3647, -1,3657, 3576, + 3656, -1,3656, 3652, 3658, -1,3449, 3659, 3654, -1,3659, 3653, 3654, -1,3653, 3650, + 3651, -1,3661, 3446, 3660, -1,3661, 3659, 3449, -1,3662, 3660, 3446, -1,3446, 3585, + 3662, -1,3449, 3446, 3661, -1,3657, 3663, 3576, -1,3658, 3657, 3656, -1,3665, 3664, + 3585, -1,3666, 3585, 3576, -1,3585, 3666, 3665, -1,3664, 3662, 3585, -1,3663, 3666, + 3576, -1,3650, 3658, 3652, -1,3669, 3668, 3667, -1,3669, 3670, 3668, -1,3667, 3671, + 3669, -1,3673, 3672, 3669, -1,3675, 3669, 3674, -1,3675, 3670, 3669, -1,3674, 3669, + 3672, -1,2685, 2685, 2685, -1,2685, 3550, 2685, -1,2685, 2685, 2685, -1,2686, 2686, + 2686, -1,2686, 2686, 2686, -1,2686, 2686, 2686, -1,3676, 3676, 3676, -1,2686, 2686, + 2686, -1,3679, 3678, 3677, -1,3680, 3677, 3678, -1,3678, 3682, 3681, -1,3684, 3680, + 3683, -1,3681, 3683, 3680, -1,3680, 3678, 3681, -1,3680, 3679, 3677, -1,3687, 3686, + 3685, -1,3685, 3686, 3679, -1,3685, 3448, 3688, -1,3689, 3685, 3688, -1,3690, 3680, + 3684, -1,3690, 3679, 3680, -1,3686, 3678, 3679, -1,3449, 3689, 3688, -1,3687, 3685, + 3689, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,361, 361, 361, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 3691, -1,13, 13, 13, -1,13, 13, 13, -1,13, + 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,2686, 2686, + 2686, -1,2686, 2686, 2686, -1,13, 13, 13, -1,13, 13, 3692, -1,3693, 13, 3692, -1, + 3693, 3692, 3692, -1,13, 3692, 13, -1,13, 13, 13, -1,3692, 3692, 3691, -1,13, 13, + 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 3691, 13, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,3691, 13, 3692, -1,3696, 3695, 3694, -1,3695, 3696, 3695, -1, + 3698, 3698, 3697, -1,3697, 3697, 3698, -1,3701, 3700, 3699, -1,3703, 3701, 3702, -1, + 3699, 3702, 3701, -1,3702, 3699, 3700, -1,3705, 3702, 3704, -1,3702, 3705, 3703, -1, + 3703, 3705, 3706, -1,3708, 3707, 3706, -1,2686, 3709, 2686, -1,2686, 3711, 3710, -1, + 3709, 3710, 3711, -1,3713, 3698, 3712, -1,3708, 3706, 3708, -1,3707, 3703, 3706, -1, + 3705, 3714, 3706, -1,3710, 2686, 2686, -1,3704, 3702, 3700, -1,3705, 3704, 3714, -1, + 2686, 3710, 3709, -1,3715, 3706, 3714, -1,3715, 3708, 3708, -1,3715, 3708, 3706, -1, + 3710, 2686, 3711, -1,3710, 2686, 2686, -1,2686, 3710, 3709, -1,3713, 3713, 3712, -1, + 3713, 3713, 3698, -1,3711, 3709, 3710, -1,3712, 3698, 3713, -1,3709, 2686, 2686, -1, + 3710, 3710, 3711, -1,3710, 3710, 3711, -1,3716, 3716, 3700, -1,3700, 3700, 3716, -1, + 3717, 3718, 3717, -1,3718, 3717, 3719, -1,2685, 3720, 2685, -1,2685, 2685, 2685, -1, + 2685, 2685, 2685, -1,2685, 2685, 3721, -1,2685, 2685, 2685, -1,2685, 2685, 2685, -1, + 2685, 2685, 2685, -1,3724, 3723, 3722, -1,3726, 3725, 3724, -1,3729, 3728, 3727, -1, + 3725, 3730, 3728, -1,3731, 3719, 3729, -1,3724, 3722, 3726, -1,2685, 2685, 2685, -1, + 2685, 2685, 2685, -1,3730, 3726, 3732, -1,2685, 2685, 3721, -1,2685, 2685, 2685, -1, + 3726, 3730, 3725, -1,2685, 2685, 2685, -1,3733, 3732, 3726, -1,3733, 3726, 3722, -1, + 3730, 3732, 3734, -1,3727, 3731, 3729, -1,3731, 3727, 3735, -1,3737, 3731, 3736, -1, + 3731, 3737, 3719, -1,3734, 3735, 3727, -1,3736, 3718, 3737, -1,3735, 3736, 3731, -1, + 3727, 3730, 3734, -1,3730, 3727, 3728, -1,3739, 3738, 3721, -1,3721, 3720, 3739, -1, + 3741, 3741, 3740, -1,3740, 3740, 3741, -1,3744, 3743, 3742, -1,3746, 3744, 3745, -1, + 3742, 3745, 3744, -1,3745, 3742, 3747, -1,3749, 3745, 3748, -1,3745, 3749, 3746, -1, + 3746, 3749, 3750, -1,3752, 3751, 3750, -1,3754, 3753, 3752, -1,3757, 3756, 3755, -1, + 3753, 3758, 3756, -1,3759, 3741, 3757, -1,3752, 3750, 3754, -1,3751, 3746, 3750, -1, + 3749, 3760, 3750, -1,3758, 3754, 3761, -1,3748, 3745, 3747, -1,3749, 3748, 3760, -1, + 3754, 3758, 3753, -1,3762, 3750, 3760, -1,3762, 3761, 3754, -1,3762, 3754, 3750, -1, + 3758, 3761, 3763, -1,3755, 3759, 3757, -1,3759, 3755, 3764, -1,3766, 3759, 3765, -1, + 3759, 3766, 3741, -1,3763, 3764, 3755, -1,3765, 3741, 3766, -1,3764, 3765, 3759, -1, + 3755, 3758, 3763, -1,3758, 3755, 3756, -1,3743, 3767, 3747, -1,3767, 3743, 3767, -1, + 3769, 3769, 3768, -1,3768, 3768, 3769, -1,3771, 3696, 3770, -1,3773, 3771, 3772, -1, + 3770, 3772, 3771, -1,3772, 3770, 3694, -1,3775, 3772, 3774, -1,3772, 3775, 3773, -1, + 3773, 3775, 3776, -1,3778, 3777, 3776, -1,3780, 3779, 3778, -1,3783, 3782, 3781, -1, + 3779, 3784, 3782, -1,3785, 3769, 3783, -1,3778, 3776, 3780, -1,3777, 3773, 3776, -1, + 3775, 3786, 3776, -1,3784, 3780, 3787, -1,3774, 3772, 3694, -1,3775, 3774, 3786, -1, + 3780, 3784, 3779, -1,3788, 3776, 3786, -1,3788, 3787, 3780, -1,3788, 3780, 3776, -1, + 3784, 3787, 3789, -1,3781, 3785, 3783, -1,3785, 3781, 3790, -1,3792, 3785, 3791, -1, + 3785, 3792, 3769, -1,3789, 3790, 3781, -1,3791, 3769, 3792, -1,3790, 3791, 3785, -1, + 3781, 3784, 3789, -1,3784, 3781, 3782, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,3795, 3794, 3793, -1,3793, 3795, 3795, -1,3793, 3797, 3796, -1,3796, 3797, + 3798, -1,2686, 2686, 2686, -1,3798, 2686, 2686, -1,3800, 3800, 3799, -1,2686, 3796, + 3798, -1,3797, 3794, 3798, -1,3798, 3801, 2686, -1,3801, 3798, 3794, -1,3801, 2686, + 2686, -1,2686, 2686, 2686, -1,3800, 3800, 3799, -1,3800, 3800, 3800, -1,3800, 3802, + 3800, -1,2686, 2686, 2686, -1,2686, 2686, 2686, -1,3804, 3802, 3803, -1,3802, 3804, + 3799, -1,3806, 3804, 3805, -1,3808, 3806, 3807, -1,3805, 3807, 3806, -1,3807, 3805, + 3803, -1,3810, 3807, 3809, -1,3807, 3810, 3808, -1,3808, 3810, 3811, -1,3813, 3812, + 3811, -1,3815, 3814, 3813, -1,2685, 2685, 2685, -1,3814, 3817, 3816, -1,3818, 3819, + 3818, -1,3813, 3811, 3815, -1,3812, 3808, 3811, -1,3810, 3820, 3811, -1,3817, 3815, + 3821, -1,3809, 3807, 3803, -1,3810, 3809, 3820, -1,3815, 3817, 3814, -1,3822, 3811, + 3820, -1,3822, 3821, 3815, -1,3822, 3815, 3811, -1,3817, 3821, 3823, -1,2685, 2685, + 2685, -1,2685, 2685, 2685, -1,3818, 3818, 3818, -1,3818, 3818, 3819, -1,3823, 3816, + 3816, -1,3818, 3819, 3818, -1,2685, 2685, 2685, -1,3816, 3817, 3823, -1,3817, 3816, + 3816, -1,3819, 3824, 3819, -1,3824, 3819, 3824, -1,3824, 3826, 3825, -1,3825, 3826, + 3827, -1,3828, 3829, 3828, -1,3827, 3830, 3830, -1,3829, 3832, 3831, -1,3830, 3825, + 3827, -1,3826, 3824, 3827, -1,3827, 3833, 3830, -1,3833, 3827, 3824, -1,3833, 3830, + 3830, -1,3828, 3828, 3834, -1,3832, 3835, 3831, -1,3835, 3832, 3834, -1,3834, 3831, + 3835, -1,3832, 3828, 3834, -1,3828, 3832, 3829, -1,3831, 3836, 3831, -1,3836, 3831, + 3836, -1,3839, 3838, 3837, -1,3839, 3841, 3840, -1,3840, 3838, 3839, -1,3842, 3837, + 3840, -1,3838, 3840, 3837, -1,3841, 3842, 3841, -1,3840, 3841, 3842, -1,3841, 3841, + 3840, -1,3843, 3837, 3838, -1,3845, 3843, 3844, -1,3838, 3844, 3843, -1,3844, 3838, + 3837, -1,3847, 3844, 3846, -1,3844, 3847, 3845, -1,3845, 3847, 3848, -1,3850, 3849, + 3848, -1,3852, 3851, 3850, -1,3855, 3854, 3853, -1,3851, 3856, 3854, -1,3858, 3857, + 3855, -1,3850, 3848, 3852, -1,3849, 3845, 3848, -1,3847, 3859, 3848, -1,3856, 3852, + 3860, -1,3846, 3844, 3837, -1,3847, 3846, 3859, -1,3852, 3856, 3851, -1,3861, 3848, + 3859, -1,3861, 3860, 3852, -1,3861, 3852, 3848, -1,3856, 3860, 3862, -1,3853, 3858, + 3855, -1,3858, 3853, 3863, -1,3865, 3858, 3864, -1,3858, 3865, 3857, -1,3862, 3863, + 3853, -1,3864, 3866, 3865, -1,3863, 3864, 3858, -1,3853, 3856, 3862, -1,3856, 3853, + 3854, -1,3857, 3865, 3867, -1,3869, 3868, 3867, -1,3867, 3865, 3869, -1,3869, 3866, + 3870, -1,3866, 3869, 3865, -1,3868, 3870, 3868, -1,3870, 3868, 3869, -1,3869, 3868, + 3868, -1,361, 361, 361, -1,13, 3871, 13, -1,13, 13, 3872, -1,13, 3872, 13, -1,3872, + 13, 3871, -1,3872, 3874, 3873, -1,3872, 3871, 3874, -1,3876, 13, 3875, -1,3878, 3877, + 3876, -1,3878, 3876, 3875, -1,3874, 13, 3879, -1,3879, 3880, 3873, -1,3874, 3879, + 3873, -1,13, 13, 3876, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 3876, -1,13, 13, 13, -1,13, 13, 13, -1,13, 3882, 3881, -1, + 13, 13, 3882, -1,3882, 13, 13, -1,2686, 2686, 2686, -1,2686, 2686, 2686, -1,3882, + 3883, 3881, -1,3882, 3884, 3883, -1,13, 13, 13, -1,3885, 3876, 3877, -1,13, 13, 13, -1, + 13, 3876, 3885, -1,3873, 3880, 3886, -1,3886, 3880, 13, -1,13, 3880, 13, -1,13, 13, + 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 3886, -1,13, 13, 13, -1, + 13, 13, 13, -1,13, 13, 13, -1,3886, 13, 13, -1,3887, 2686, 2686, -1,3884, 13, 13, -1, + 13, 3883, 13, -1,13, 3884, 13, -1,13, 3883, 13, -1,3883, 13, 13, -1,13, 3883, 3884, -1, + 13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, 13, -1,13, 13, + 13, -1,13, 13, 3885, -1,3889, 3888, 3888, -1,3888, 3888, 3888, -1,3892, 3891, 3890, -1, + 2686, 3891, 2686, -1,2686, 3891, 2686, -1,3888, 3893, 3888, -1,2686, 2686, 2686, -1, + 3888, 3888, 3893, -1,2686, 2686, 3894, -1,3890, 2686, 3892, -1,2686, 3890, 3895, -1, + 3894, 3895, 3890, -1,3890, 3896, 3894, -1,3896, 3890, 3891, -1,3889, 3897, 3893, -1, + 3897, 3889, 3898, -1,3900, 3899, 3899, -1,3899, 3899, 3899, -1,3898, 3902, 3901, -1, + 2685, 2685, 2685, -1,2685, 2685, 2685, -1,3899, 3903, 3899, -1,2685, 2685, 2685, -1, + 3899, 3899, 3903, -1,2685, 2685, 2685, -1,3901, 3904, 3898, -1,3904, 3901, 3897, -1, + 3905, 3897, 3901, -1,3901, 3906, 3905, -1,3906, 3901, 3902, -1,3900, 3907, 3903, -1, + 3907, 3900, 3908, -1,3909, 2685, 2685, -1,2685, 2685, 2685, -1,3908, 3911, 3910, -1, + 3912, 3911, 3912, -1,3912, 3911, 3912, -1,2685, 3913, 2685, -1,3912, 3912, 3912, -1, + 2685, 2685, 3913, -1,3912, 3912, 3914, -1,3910, 3915, 3908, -1,3915, 3910, 3907, -1, + 3914, 3907, 3910, -1,2685, 2685, 2685, -1,2685, 2685, 2685, -1,3913, 3916, 3913, -1, + 3913, 3909, 3913, -1,3917, 2685, 2685, -1,2685, 2685, 2685, -1,3913, 2685, 2685, -1, + 2685, 2685, 2685, -1,2685, 2685, 2685, -1,2685, 3918, 2685, -1,2685, 2685, 2685, -1, + 2685, 2685, 3918, -1,2685, 2685, 2685, -1,2685, 2685, 3913, -1,2685, 2685, 3916, -1, + 2685, 3916, 2685, -1,2685, 2685, 2685, -1,2685, 2685, 2685, -1,3920, 3919, 3918, -1, + 3918, 3917, 3920, -1,2686, 3887, 2686, -1,2686, 2686, 2686, -1,2686, 2686, 2686, -1, + 2686, 2686, 3921, -1,2686, 2686, 2686, -1,2686, 2686, 2686, -1,3923, 3923, 3922, -1, + 3925, 3924, 3922, -1,3927, 3926, 3925, -1,3930, 3929, 3928, -1,3926, 3931, 3929, -1, + 3932, 3920, 3930, -1,3925, 3922, 3927, -1,3924, 3923, 3922, -1,3923, 3923, 3922, -1, + 3931, 3927, 3933, -1,2686, 2686, 3921, -1,2686, 2686, 2686, -1,3927, 3931, 3926, -1, + 3934, 3922, 3923, -1,3934, 3933, 3927, -1,3934, 3927, 3922, -1,3931, 3933, 3935, -1, + 3928, 3932, 3930, -1,3932, 3928, 3936, -1,3938, 3932, 3937, -1,3932, 3938, 3920, -1, + 3935, 3936, 3928, -1,3937, 3919, 3938, -1,3936, 3937, 3932, -1,3928, 3931, 3935, -1, + 3931, 3928, 3929, -1,3887, 3939, 3921, -1,3939, 3887, 3939, -1,3940, 3940, 3940, -1, + 3940, 3940, 3940, -1,3941, 3941, 3941, -1,3941, 3941, 3941, -1,3942, 3942, 3942, -1, + 3942, 3942, 3942, -1,2685, 3943, 2685, -1,3943, 2685, 3943, -1,3944, 3944, 3943, -1, + 3943, 3943, 3944, -1,3944, 3945, 3944, -1,3945, 3944, 3946, -1,3947, 3948, 3947, -1, + 2685, 2685, 2685, -1,3947, 3947, 3947, -1,3947, 3947, 3948, -1,2685, 2685, 2685, -1, + 2685, 2685, 2685, -1,3946, 3949, 3949, -1,2685, 2685, 2685, -1,3950, 3950, 3950, -1, + 3950, 3950, 3950, -1,2685, 2685, 2685, -1,2685, 2685, 2685, -1,3947, 3947, 3948, -1, + 3950, 3950, 3950, -1,3950, 3950, 3950, -1,2685, 2685, 2685, -1,2685, 2685, 2685, -1, + 2685, 2685, 2685, -1,3949, 3949, 3949, -1,3949, 3949, 3946, -1,2685, 2685, 2685, -1, + 3949, 3945, 3949, -1,2685, 2685, 2685, -1,2685, 2685, 2685, -1,3951, 3951, 3948, -1, + 3948, 3948, 3951, -1,3954, 3953, 3952, -1,3952, 3953, 3955, -1,3958, 3957, 3956, -1, + 3955, 3958, 3956, -1,3957, 3959, 3951, -1,3956, 3952, 3955, -1,3953, 3960, 3955, -1, + 3955, 3961, 3958, -1,3961, 3955, 3960, -1,3961, 3962, 3958, -1,3958, 3962, 3963, -1, + 3959, 3964, 3951, -1,3964, 3959, 3963, -1,3963, 3951, 3964, -1,3959, 3958, 3963, -1, + 3958, 3959, 3957, -1,3954, 3965, 3960, -1,3965, 3954, 3966, -1,3969, 3968, 3967, -1, + 3971, 3969, 3970, -1,3967, 3970, 3969, -1,3970, 3967, 3968, -1,3973, 3970, 3972, -1, + 3970, 3973, 3971, -1,3971, 3973, 3974, -1,3976, 3975, 3974, -1,3978, 3977, 3976, -1, + 3979, 2686, 2686, -1,3977, 3981, 3980, -1,3982, 3966, 3979, -1,3976, 3974, 3978, -1, + 3975, 3971, 3974, -1,3973, 3983, 3974, -1,3981, 3978, 3984, -1,3972, 3970, 3968, -1, + 3973, 3972, 3983, -1,3978, 3981, 3977, -1,3985, 3974, 3983, -1,3985, 3984, 3978, -1, + 3985, 3978, 3974, -1,3981, 3984, 3986, -1,2686, 3982, 3979, -1,3982, 2686, 2686, -1, + 3988, 3982, 3987, -1,3982, 3988, 3966, -1,3986, 3980, 3980, -1,3987, 3965, 3988, -1, + 2686, 3987, 3982, -1,3980, 3981, 3986, -1,3981, 3980, 3980, -1,3989, 3989, 3968, -1, + 3968, 3968, 3989, -1,3990, 3990, 3990, -1,3990, 3990, 3990, -1,3992, 3992, 3991, -1, + 3991, 3991, 3992, -1,3995, 3994, 3993, -1,3996, 3992, 3993, -1,3993, 3994, 3996, -1, + 3996, 3998, 3997, -1,3998, 3996, 3994, -1,3999, 3997, 3992, -1,3997, 3999, 3996, -1, + 3996, 3999, 3992, -1,3995, 4000, 3998, -1,4000, 3995, 4001, -1,4002, 2686, 2686, -1, + 4003, 4001, 4003, -1,2686, 2686, 2686, -1,2686, 4004, 2686, -1,4004, 2686, 2686, -1, + 4003, 4003, 4000, -1,4003, 4003, 4003, -1,4003, 4003, 4001, -1,4002, 3895, 4004, -1, + 3895, 4002, 3892, -1,4007, 4006, 4005, -1,4010, 4009, 4008, -1,4009, 4010, 4006, -1, + 4008, 4011, 4010, -1,4010, 4005, 4006, -1,4012, 4013, 4012, -1,4012, 4014, 4012, -1, + 4017, 4016, 4015, -1,4016, 4017, 4018, -1,4020, 4015, 4019, -1,4015, 4020, 4017, -1, + 4020, 4019, 4021, -1,4022, 4009, 4007, -1,4022, 4007, 4023, -1,4024, 4023, 4018, -1, + 4023, 4024, 4022, -1,4024, 4018, 4017, -1,4007, 4025, 4023, -1,4021, 4027, 4026, -1, + 4026, 4027, 4028, -1,4028, 4030, 4029, -1,4029, 4030, 4031, -1,4028, 4029, 4026, -1, + 4021, 4019, 4027, -1,4031, 4033, 4032, -1,4031, 4030, 4033, -1,4032, 4033, 4034, -1, + 4034, 4036, 4035, -1,4035, 4036, 4037, -1,4034, 4035, 4032, -1,4038, 4025, 4007, -1, + 361, 361, 361, -1,4039, 361, 361, -1,361, 361, 361, -1,4042, 4041, 4040, -1,4042, + 4040, 4043, -1,4039, 4043, 4043, -1,4043, 4043, 4040, -1,4039, 4043, 361, -1,4037, + 4036, 4037, -1,4037, 4037, 4044, -1,4044, 4045, 4045, -1,4045, 4044, 4037, -1,4045, + 4045, 4046, -1,4046, 361, 4045, -1,361, 361, 361, -1,361, 361, 361, -1,361, 361, + 361, -1,361, 361, 361, -1,361, 4046, 361, -1,361, 361, 361, -1,4049, 4048, 4047, -1, + 4052, 4051, 4050, -1,4051, 4052, 4053, -1,4047, 4053, 4049, -1,4050, 4054, 4011, -1, + 4056, 4048, 4055, -1,4058, 4055, 4057, -1,4055, 4058, 4056, -1,4055, 4048, 4049, -1, + 4053, 4052, 4049, -1,4038, 4011, 4054, -1,4038, 4059, 4011, -1,4010, 4011, 4059, -1, + 4007, 4010, 4059, -1,4055, 4061, 4060, -1,4062, 4052, 4050, -1,4049, 4052, 4062, -1, + 4055, 4049, 4063, -1,4061, 4055, 4063, -1,4062, 4063, 4049, -1,4050, 4011, 4062, -1, + 4065, 2775, 4064, -1,4067, 4064, 4066, -1,4064, 4068, 4065, -1,4066, 4070, 4069, -1, + 4073, 4072, 4071, -1,4071, 4072, 4074, -1,4075, 4072, 4073, -1,4070, 4071, 4074, -1, + 4065, 4068, 4076, -1,4067, 4066, 4077, -1,4069, 4077, 4066, -1,4069, 4078, 4077, -1, + 4068, 4067, 4077, -1,4068, 4064, 4067, -1,4074, 4078, 4069, -1,4081, 4080, 4079, -1, + 4074, 4079, 4080, -1,4072, 4079, 4074, -1,4074, 4080, 4082, -1,4081, 4083, 4080, -1, + 4082, 4078, 4074, -1,4070, 4074, 4069, -1,2785, 4085, 4084, -1,4086, 4085, 2785, -1, + 4089, 4088, 4087, -1,4087, 4086, 4089, -1,4085, 4086, 4087, -1,4092, 4091, 4090, -1, + 4094, 4090, 4093, -1,4042, 4096, 4095, -1,4085, 4097, 4084, -1,4093, 4090, 4091, -1, + 4091, 4098, 4093, -1,4098, 4091, 4099, -1,4093, 4098, 4100, -1,4101, 4096, 4094, -1, + 4096, 4101, 4100, -1,4102, 4102, 4102, -1,4101, 4093, 4100, -1,4096, 4041, 4095, -1, + 4093, 4101, 4094, -1,4072, 4075, 4103, -1,4105, 4103, 4104, -1,4108, 4107, 4106, -1, + 4110, 4106, 4109, -1,4107, 4111, 4104, -1,4103, 4105, 4072, -1,4079, 4072, 4105, -1, + 4112, 4105, 4111, -1,4104, 4111, 4105, -1,4106, 4110, 4108, -1,4113, 4108, 4110, -1, + 4115, 4110, 4114, -1,4109, 4114, 4110, -1,4108, 4116, 4111, -1,4107, 4108, 4111, -1, + 4117, 4114, 4109, -1,4117, 4119, 4118, -1,4121, 4118, 4120, -1,4124, 4123, 4122, -1, + 4123, 4126, 4125, -1,4127, 4120, 4124, -1,4129, 4126, 4128, -1,4117, 4118, 4121, -1, + 4130, 4117, 4121, -1,4132, 4128, 4131, -1,4131, 4133, 2811, -1,4135, 4089, 4134, -1, + 2814, 4133, 4135, -1,4121, 4120, 4127, -1,4117, 4109, 4119, -1,4117, 2849, 4114, -1, + 4112, 4111, 4116, -1,4116, 4108, 4113, -1,4124, 4122, 4127, -1,4127, 4122, 4136, -1, + 4122, 4125, 4137, -1,4123, 4125, 4122, -1,4115, 4113, 4110, -1,4079, 4105, 4112, -1, + 4115, 4114, 2849, -1,2849, 4117, 4130, -1,4121, 4127, 4138, -1,4122, 4137, 4136, -1, + 4127, 4136, 4138, -1,4130, 4121, 4138, -1,4139, 4137, 4125, -1,4128, 4132, 4129, -1, + 2899, 4129, 4132, -1,4140, 4132, 2811, -1,4131, 2811, 4132, -1,4135, 4134, 2814, -1, + 4141, 2814, 4134, -1,4143, 4134, 4142, -1,4089, 4142, 4134, -1,2814, 4144, 2811, -1, + 4133, 2814, 2811, -1,4129, 2899, 4139, -1,4132, 4140, 2899, -1,2814, 4141, 4144, -1, + 4142, 4086, 4143, -1,4134, 4143, 4141, -1,2811, 4144, 4140, -1,4139, 4125, 4129, -1, + 4126, 4129, 4125, -1,4147, 4146, 4145, -1,4146, 361, 4148, -1,4150, 4147, 4149, -1, + 4151, 361, 361, -1,4153, 4150, 4152, -1,4151, 4154, 361, -1,4153, 4156, 4155, -1, + 4145, 4146, 4148, -1,4157, 4147, 4145, -1,4147, 4157, 4149, -1,4149, 4158, 4150, -1, + 4158, 4152, 4150, -1,4153, 4152, 4159, -1,4159, 4156, 4153, -1,4160, 4151, 4153, -1, + 4151, 4160, 4161, -1,4155, 4160, 4153, -1,4160, 4163, 4162, -1,4166, 4165, 4164, -1, + 361, 361, 4166, -1,4167, 4165, 4162, -1,361, 361, 361, -1,4160, 4168, 4163, -1,4160, + 4169, 4168, -1,4160, 4155, 4169, -1,4165, 4170, 4164, -1,4170, 4165, 4167, -1,4162, + 4163, 4167, -1,361, 4166, 4164, -1,4161, 4154, 4151, -1,2908, 4084, 4171, -1,2815, + 4171, 4172, -1,4174, 4173, 2809, -1,4175, 2809, 2899, -1,4173, 4176, 4172, -1,4171, + 2815, 2785, -1,2910, 2785, 2815, -1,4172, 4176, 2815, -1,4176, 4173, 4174, -1,4141, + 4176, 4174, -1,4175, 2899, 4177, -1,4140, 4175, 4177, -1,4175, 4144, 4174, -1,4174, + 2809, 4175, -1,4176, 4143, 2815, -1,2785, 2908, 4171, -1,4178, 4177, 2899, -1,4178, + 4139, 4179, -1,4181, 4179, 4180, -1,4184, 4183, 4182, -1,4183, 4186, 4185, -1,4187, + 4180, 4184, -1,4189, 4186, 4188, -1,4178, 4179, 4181, -1,4139, 4178, 4181, -1,4191, + 4188, 4190, -1,4190, 2836, 2835, -1,4193, 4083, 4192, -1,4194, 2836, 4193, -1,4181, + 4180, 4187, -1,4178, 2899, 4139, -1,4178, 2899, 4177, -1,4143, 4086, 2910, -1,4176, + 4141, 4143, -1,4136, 4187, 4182, -1,4140, 4177, 2899, -1,4141, 4174, 4144, -1,4184, + 4182, 4187, -1,2910, 2815, 4143, -1,4144, 4175, 4140, -1,2899, 4178, 4139, -1,4181, + 4187, 4137, -1,4182, 4138, 4136, -1,4187, 4136, 4137, -1,4139, 4181, 4137, -1,4130, + 4138, 4182, -1,4186, 4189, 4185, -1,4130, 4185, 4189, -1,4115, 4189, 4191, -1,4188, + 4191, 4189, -1,2836, 4194, 2835, -1,4113, 2835, 4194, -1,4083, 4081, 4192, -1,4112, + 4192, 4081, -1,4192, 4116, 4194, -1,4193, 4192, 4194, -1,2835, 4113, 4191, -1,4190, + 2835, 4191, -1,4189, 2849, 4130, -1,4189, 4115, 2849, -1,4194, 4116, 4113, -1,4081, + 4079, 4112, -1,4192, 4112, 4116, -1,4191, 4113, 4115, -1,4130, 4182, 4185, -1,4183, + 4185, 4182, -1,4197, 4196, 4195, -1,4199, 4195, 4198, -1,4196, 4198, 4195, -1,4057, + 4200, 4196, -1,4195, 4201, 4197, -1,4204, 4203, 4202, -1,2918, 2917, 4203, -1,4207, + 4206, 4205, -1,4208, 4204, 4202, -1,4204, 4208, 4209, -1,4200, 4057, 4206, -1,4197, + 4056, 4058, -1,4197, 4058, 4057, -1,4205, 4057, 4055, -1,4060, 4210, 4055, -1,4205, + 4055, 4210, -1,4057, 4205, 4206, -1,4207, 4212, 4211, -1,4207, 4205, 4212, -1,4205, + 4210, 4212, -1,4212, 4204, 4209, -1,4204, 4213, 2931, -1,4213, 4204, 4212, -1,2931, + 2918, 4204, -1,2918, 4203, 4204, -1,4210, 4213, 4212, -1,4209, 4211, 4212, -1,4196, + 4197, 4057, -1,4216, 4215, 4214, -1,4218, 4215, 4217, -1,4221, 4220, 4219, -1,4223, + 4221, 4222, -1,4219, 4222, 4221, -1,4221, 4224, 4220, -1,4218, 4222, 4219, -1,4222, + 4218, 4225, -1,4228, 4227, 4226, -1,4226, 4229, 4228, -1,4228, 4216, 4227, -1,4228, + 4217, 4216, -1,4217, 4215, 4216, -1,4225, 4218, 4217, -1,4225, 4223, 4222, -1,4214, + 4215, 4218, -1,4223, 4230, 4221, -1,4232, 4231, 4224, -1,4220, 4224, 4231, -1,4233, + 4231, 4232, -1,2953, 2954, 4234, -1,4235, 4233, 4232, -1,4233, 4235, 4234, -1,4231, + 4233, 4234, -1,4234, 4236, 2953, -1,4223, 4237, 4230, -1,4239, 4236, 4238, -1,2953, + 4236, 4239, -1,4239, 2961, 2953, -1,4240, 4239, 4238, -1,4236, 4234, 4235, -1,4221, + 4230, 4224, -1,4243, 4242, 4241, -1,4241, 4229, 4243, -1,4229, 4244, 4228, -1,4217, + 4228, 4245, -1,4244, 4241, 4041, -1,4229, 4241, 4244, -1,4100, 4244, 4041, -1,4098, + 4245, 4100, -1,4244, 4100, 4245, -1,4245, 4098, 4246, -1,4245, 4228, 4244, -1,4246, + 4217, 4245, -1,4225, 4246, 4247, -1,4217, 4246, 4225, -1,4248, 4237, 4223, -1,4225, + 4248, 4223, -1,4248, 4225, 4247, -1,4099, 4249, 4246, -1,4250, 4246, 4249, -1,4247, + 4251, 4248, -1,4246, 4250, 4247, -1,4098, 4099, 4246, -1,4254, 4253, 4252, -1,4253, + 4255, 4252, -1,4254, 4240, 4253, -1,2978, 2961, 4239, -1,2979, 2978, 4254, -1,4239, + 4254, 2978, -1,4252, 2979, 4254, -1,4240, 4254, 4239, -1,4258, 4257, 4256, -1,4259, + 4257, 4258, -1,4261, 4260, 4259, -1,4260, 4261, 4262, -1,4258, 4261, 4259, -1,4017, + 4020, 4263, -1,4265, 4263, 4264, -1,4020, 4267, 4266, -1,4264, 4263, 4266, -1,4020, + 4266, 4263, -1,4269, 4267, 4268, -1,4271, 4270, 4269, -1,2686, 2686, 2686, -1,4273, + 4272, 4271, -1,4272, 4270, 4271, -1,4272, 4275, 4274, -1,4276, 4274, 4275, -1,4272, + 4274, 4270, -1,4277, 4275, 4272, -1,4269, 4268, 4271, -1,4279, 4276, 4278, -1,4281, + 4279, 4280, -1,4281, 4283, 4282, -1,4280, 4278, 4284, -1,4279, 4278, 4280, -1,4281, + 4280, 4285, -1,4285, 4283, 4281, -1,4287, 4281, 4286, -1,4275, 4278, 4276, -1,4288, + 4278, 4275, -1,4268, 4020, 4289, -1,4271, 4289, 4273, -1,4278, 4290, 4284, -1,4290, + 4278, 4288, -1,4271, 4268, 4289, -1,4288, 4275, 4277, -1,4273, 4277, 4272, -1,4288, + 4291, 4290, -1,4282, 4293, 4292, -1,4286, 4282, 4294, -1,4287, 4286, 4295, -1,4286, + 4281, 4282, -1,4295, 4286, 4294, -1,4291, 4292, 4296, -1,4282, 4292, 4291, -1,4291, + 4294, 4282, -1,4290, 4291, 4296, -1,4294, 4297, 4295, -1,4283, 4293, 4282, -1,4295, + 4298, 4287, -1,4300, 4298, 4299, -1,4303, 4302, 4301, -1,4301, 4300, 4299, -1,4304, + 4303, 4299, -1,4303, 4301, 4299, -1,4307, 4306, 4305, -1,4302, 4303, 4306, -1,4302, + 4306, 4307, -1,4308, 4306, 4303, -1,4295, 4297, 4299, -1,4311, 4310, 4309, -1,4241, + 4242, 4312, -1,4315, 4314, 4313, -1,4317, 4316, 4314, -1,4310, 4318, 4313, -1,4241, + 4319, 4316, -1,4305, 4309, 4307, -1,4312, 4319, 4241, -1,4320, 4299, 4297, -1,4320, + 4304, 4299, -1,4309, 4305, 4311, -1,4305, 4306, 4308, -1,4311, 4305, 4321, -1,4308, + 4303, 4304, -1,4305, 4322, 4321, -1,4322, 4305, 4308, -1,4321, 4318, 4311, -1,4313, + 4324, 4323, -1,4315, 4313, 4323, -1,4316, 4325, 4041, -1,4241, 4316, 4041, -1,4325, + 4317, 4314, -1,4314, 4323, 4325, -1,4313, 4318, 4324, -1,4316, 4317, 4325, -1,4323, + 4314, 4315, -1,4321, 4324, 4318, -1,4318, 4310, 4311, -1,4298, 4295, 4299, -1,4326, + 4326, 4326, -1,4326, 4326, 4326, -1,4327, 4328, 4327, -1,4327, 4329, 4327, -1,4332, + 4331, 4330, -1,4334, 4333, 4332, -1,4330, 4334, 4332, -1,4337, 4336, 4335, -1,4335, + 4339, 4338, -1,4335, 4338, 4337, -1,4009, 4340, 4008, -1,4008, 4340, 4011, -1,4343, + 4342, 4341, -1,4011, 4341, 4342, -1,4344, 4342, 4343, -1,4345, 4343, 4341, -1,4011, + 4340, 4341, -1,4260, 4346, 4340, -1,4346, 4341, 4340, -1,4347, 4344, 4345, -1,4341, + 4346, 4345, -1,4348, 4344, 4347, -1,4343, 4345, 4344, -1,4344, 4349, 4342, -1,4344, + 4348, 4350, -1,4350, 4351, 4344, -1,4353, 3060, 4352, -1,4348, 4352, 4354, -1,4348, + 4354, 4350, -1,4355, 4353, 4348, -1,4352, 4348, 4353, -1,4356, 4353, 4355, -1,4348, + 4347, 4355, -1,3065, 3066, 4356, -1,4353, 4356, 3066, -1,3066, 3060, 4353, -1,4349, + 4344, 4351, -1,4357, 4346, 4260, -1,4358, 4346, 4357, -1,4359, 4347, 4345, -1,4360, + 4359, 4358, -1,4345, 4358, 4359, -1,4359, 4361, 4347, -1,4346, 4358, 4345, -1,4362, + 4358, 4357, -1,4363, 4362, 4357, -1,4357, 4262, 4363, -1,4360, 4364, 4359, -1,4358, + 4362, 4360, -1,4361, 4364, 4365, -1,4366, 4361, 4365, -1,4364, 4361, 4359, -1,4355, + 4347, 4361, -1,4368, 4366, 4367, -1,4355, 4366, 4356, -1,4369, 4367, 4366, -1,4361, + 4366, 4355, -1,3081, 3065, 4356, -1,4370, 4366, 4368, -1,4356, 4370, 3081, -1,4366, + 4370, 4356, -1,3081, 4370, 4371, -1,4372, 4370, 4368, -1,4374, 4370, 4373, -1,4370, + 4372, 4373, -1,4371, 4370, 4374, -1,3081, 4371, 3086, -1,4365, 4369, 4366, -1,4340, + 4259, 4260, -1,4375, 4257, 4259, -1,4022, 4340, 4009, -1,4375, 4022, 4024, -1,4340, + 4022, 4375, -1,4375, 4259, 4340, -1,4376, 4257, 4375, -1,4256, 4376, 4377, -1,4257, + 4376, 4256, -1,4378, 4256, 4377, -1,4265, 4378, 4379, -1,4017, 4377, 4024, -1,4376, + 4024, 4377, -1,4377, 4017, 4379, -1,4379, 4378, 4377, -1,4375, 4024, 4376, -1,4382, + 4381, 4380, -1,4382, 4380, 4383, -1,4384, 4383, 4380, -1,4382, 4385, 4381, -1,4388, + 4387, 4386, -1,4386, 4385, 4388, -1,4381, 4385, 4386, -1,4390, 4389, 4383, -1,4389, + 4390, 4391, -1,4391, 4392, 4389, -1,4384, 4390, 4383, -1,4394, 4393, 4392, -1,4393, + 4394, 4395, -1,4396, 4393, 4395, -1,4391, 4394, 4392, -1,4397, 4387, 4388, -1,4399, + 4398, 4397, -1,4387, 4397, 4398, -1,4399, 4401, 4400, -1,4400, 4398, 4399, -1,4401, + 4403, 4402, -1,4405, 4404, 4403, -1,4402, 4403, 4404, -1,4400, 4401, 4402, -1,4408, + 4407, 4406, -1,4395, 4406, 4396, -1,4407, 4396, 4406, -1,4408, 4409, 4407, -1,4411, + 4405, 4410, -1,4409, 4408, 4412, -1,4411, 4410, 4412, -1,4411, 4404, 4405, -1,4410, + 4409, 4412, -1,4415, 4414, 4413, -1,4418, 4417, 4416, -1,4420, 4413, 4419, -1,4423, + 4422, 4421, -1,4422, 4424, 4419, -1,4422, 4423, 4425, -1,4420, 4415, 4413, -1,4415, + 4420, 4426, -1,4428, 4415, 4427, -1,4415, 4428, 4414, -1,4424, 4425, 4420, -1,4424, + 4420, 4419, -1,4423, 4430, 4429, -1,4414, 4428, 4431, -1,4434, 4433, 4432, -1,4434, + 4436, 4435, -1,4438, 4435, 4437, -1,4439, 4439, 4439, -1,4431, 4432, 4433, -1,4442, + 4441, 4440, -1,4437, 4435, 4436, -1,4436, 4432, 4443, -1,4437, 4436, 4444, -1,4445, + 4438, 4437, -1,4447, 4445, 4446, -1,4447, 4438, 4445, -1,4446, 4445, 4448, -1,4446, + 4450, 4449, -1,4437, 4451, 4445, -1,4436, 4434, 4432, -1,4431, 4428, 4432, -1,4428, + 4452, 4432, -1,4453, 4453, 4453, -1,4455, 4454, 4417, -1,4456, 4456, 4456, -1,4424, + 4422, 4425, -1,4454, 4416, 4417, -1,4426, 4420, 4425, -1,4457, 4457, 4457, -1,4427, + 4415, 4426, -1,4443, 4432, 4452, -1,4455, 4423, 4429, -1,4458, 4430, 4423, -1,4443, + 4444, 4436, -1,4452, 4428, 4427, -1,4444, 4451, 4437, -1,4461, 4460, 4459, -1,4445, + 4451, 4448, -1,4462, 4442, 4440, -1,4448, 4450, 4446, -1,4446, 4449, 4447, -1,4449, + 4450, 4459, -1,4463, 4463, 4463, -1,4464, 4464, 4464, -1,4465, 4442, 4462, -1,4466, + 4449, 4459, -1,4461, 4459, 4465, -1,4462, 4461, 4465, -1,4455, 4429, 4454, -1,4460, + 4467, 4459, -1,4470, 4469, 4468, -1,4472, 4470, 4471, -1,4471, 4473, 4472, -1,4471, + 4468, 4474, -1,4473, 4471, 4475, -1,4471, 4470, 4468, -1,4472, 4473, 4476, -1,4478, + 4476, 4477, -1,4480, 4478, 4479, -1,4483, 4482, 4481, -1,4483, 4484, 4482, -1,4486, + 4482, 4485, -1,4480, 4487, 4485, -1,4473, 4477, 4476, -1,4479, 4477, 4488, -1,4475, + 4471, 4474, -1,4473, 4475, 4489, -1,4477, 4479, 4478, -1,4489, 4477, 4473, -1,4488, + 4490, 4479, -1,4489, 4488, 4477, -1,4479, 4490, 4491, -1,4487, 4486, 4485, -1,4486, + 4487, 4491, -1,4481, 4486, 4492, -1,4486, 4481, 4482, -1,4491, 4492, 4486, -1,4494, + 4493, 4481, -1,4492, 4494, 4481, -1,4487, 4479, 4491, -1,4481, 4493, 4483, -1,4479, + 4487, 4480, -1,4495, 4484, 4483, -1,4497, 4495, 4496, -1,4496, 4498, 4497, -1,4496, + 4483, 4493, -1,4498, 4496, 4499, -1,4496, 4495, 4483, -1,4497, 4498, 4500, -1,4502, + 4500, 4501, -1,4504, 4502, 4503, -1,4468, 4506, 4505, -1,4468, 4469, 4506, -1,4508, + 4506, 4507, -1,4504, 4509, 4507, -1,4498, 4501, 4500, -1,4503, 4501, 4510, -1,4499, + 4496, 4493, -1,4498, 4499, 4511, -1,4501, 4503, 4502, -1,4511, 4501, 4498, -1,4510, + 4512, 4503, -1,4511, 4510, 4501, -1,4503, 4512, 4513, -1,4509, 4508, 4507, -1,4508, + 4509, 4513, -1,4505, 4508, 4514, -1,4508, 4505, 4506, -1,4513, 4514, 4508, -1,4515, + 4474, 4505, -1,4514, 4515, 4505, -1,4509, 4503, 4513, -1,4505, 4474, 4468, -1,4503, + 4509, 4504, -1,4518, 4517, 4516, -1,4519, 4517, 4518, -1,4520, 4516, 4517, -1,4518, + 4521, 4519, -1,4522, 4519, 4521, -1,4525, 4524, 4523, -1,4517, 4524, 4520, -1,4520, + 4524, 4526, -1,4525, 4523, 4527, -1,4527, 4523, 4528, -1,4527, 4528, 4529, -1,4526, + 4524, 4525, -1,4530, 4522, 4521, -1,4531, 4522, 4530, -1,4533, 4531, 4532, -1,4532, + 4535, 4534, -1,4535, 4537, 4536, -1,4536, 4534, 4535, -1,4533, 4532, 4534, -1,4531, + 4533, 4522, -1,4540, 4539, 4538, -1,4528, 4540, 4538, -1,4542, 4536, 4541, -1,4537, + 4541, 4536, -1,4542, 4539, 4540, -1,4541, 4539, 4542, -1,4529, 4528, 4538, -1,4545, + 4544, 4543, -1,4547, 4545, 4546, -1,4545, 4548, 4546, -1,4551, 4550, 4549, -1,4552, + 4550, 4547, -1,4548, 4543, 4553, -1,4548, 4545, 4543, -1,4555, 4551, 4554, -1,4558, + 4557, 4556, -1,4560, 4557, 4559, -1,4561, 4559, 4557, -1,4561, 4557, 4562, -1,4556, + 4555, 4563, -1,4547, 4546, 4552, -1,4552, 4549, 4550, -1,4549, 4552, 4564, -1,4554, + 4549, 4565, -1,4549, 4554, 4551, -1,4566, 4564, 4552, -1,4565, 4549, 4564, -1,4546, + 4566, 4552, -1,4546, 4548, 4566, -1,4554, 4565, 4567, -1,4563, 4558, 4556, -1,4558, + 4563, 4568, -1,4562, 4558, 4569, -1,4558, 4562, 4557, -1,4570, 4558, 4568, -1,4569, + 4558, 4570, -1,4568, 4563, 4567, -1,4563, 4554, 4567, -1,4562, 4571, 4561, -1,4554, + 4563, 4555, -1,4544, 4572, 4553, -1,361, 4560, 4561, -1,4575, 4574, 4573, -1,4576, + 4575, 4573, -1,4576, 4578, 4577, -1,4578, 4576, 4573, -1,4578, 4573, 4579, -1,4577, + 4578, 4580, -1,4574, 4581, 4573, -1,4584, 4583, 4582, -1,4586, 4585, 4584, -1,4585, + 4587, 3320, -1,4582, 4580, 4588, -1,4590, 4589, 3320, -1,4582, 4586, 4584, -1,4582, + 4583, 4580, -1,4583, 4577, 4580, -1,4578, 4591, 4580, -1,4580, 4591, 4588, -1,4573, + 4581, 4579, -1,4579, 4581, 4592, -1,4591, 4578, 4579, -1,4593, 4586, 4582, -1,4593, + 4582, 4588, -1,4586, 4593, 4594, -1,4590, 4596, 4595, -1,4597, 4590, 4587, -1,4590, + 4595, 4589, -1,4587, 4590, 3320, -1,4594, 4597, 4587, -1,4596, 4598, 4595, -1,4597, + 4596, 4590, -1,4587, 4586, 4594, -1,4586, 4587, 4585, -1,3283, 4589, 3281, -1,3284, + 3283, 3281, -1,3284, 3286, 4599, -1,3286, 3284, 3281, -1,3286, 3281, 4600, -1,4599, + 3286, 4601, -1,4589, 4595, 3281, -1,4604, 4603, 4602, -1,4606, 4605, 4604, -1,4605, + 4608, 4607, -1,4602, 4601, 4609, -1,4610, 4574, 4607, -1,4602, 4606, 4604, -1,4602, + 4603, 4601, -1,4603, 4599, 4601, -1,3286, 3300, 4601, -1,4601, 3300, 4609, -1,3281, + 4595, 4600, -1,4600, 4595, 4598, -1,3300, 3286, 4600, -1,4611, 4606, 4602, -1,4611, + 4602, 4609, -1,4606, 4611, 4612, -1,4610, 4613, 4581, -1,4614, 4610, 4608, -1,4610, + 4581, 4574, -1,4608, 4610, 4607, -1,4612, 4614, 4608, -1,4613, 4592, 4581, -1,4614, + 4613, 4610, -1,4608, 4606, 4612, -1,4606, 4608, 4605, -1,4617, 4616, 4615, -1,4618, + 4616, 4617, -1,4619, 4615, 4616, -1,4622, 4621, 4620, -1,4623, 4620, 4621, -1,4622, + 4618, 4617, -1,4620, 4618, 4622, -1,4625, 4619, 4624, -1,4616, 4624, 4619, -1,4627, + 4625, 4626, -1,4624, 4626, 4625, -1,4629, 4628, 4627, -1,4631, 4630, 4629, -1,4628, + 4629, 4630, -1,4626, 4629, 4627, -1,4633, 4623, 4632, -1,4621, 4632, 4623, -1,4634, + 4623, 4633, -1,4636, 4634, 4635, -1,4633, 4635, 4634, -1,4638, 4636, 4637, -1,4635, + 4637, 4636, -1,4640, 4639, 4631, -1,4630, 4631, 4641, -1,4639, 4641, 4631, -1,4642, + 4638, 4639, -1,4643, 4639, 4640, -1,4640, 4631, 4644, -1,4642, 4639, 4643, -1,4642, + 4636, 4638, -1,4647, 4646, 4645, -1,4645, 4646, 4648, -1,4651, 4650, 4649, -1,4653, + 4652, 4648, -1,4654, 4653, 4648, -1,4652, 4645, 4648, -1,4646, 4655, 4648, -1,4648, + 4656, 4654, -1,4656, 4648, 4655, -1,4654, 4656, 4651, -1,4651, 4657, 4650, -1,4654, + 4651, 4649, -1,4660, 4659, 4658, -1,4661, 4660, 4658, -1,4660, 4662, 4659, -1,4662, + 4660, 4663, -1,4665, 4662, 4664, -1,4659, 4662, 4666, -1,4666, 4662, 4665, -1,4646, + 4647, 4667, -1,4669, 4668, 4667, -1,4666, 4671, 4670, -1,4671, 4666, 4665, -1,4670, + 4672, 4669, -1,4672, 4670, 4671, -1,4671, 4673, 4672, -1,4672, 4668, 4669, -1,4665, + 4674, 4671, -1,4677, 4676, 4675, -1,4661, 4677, 4675, -1,4678, 4675, 4676, -1,4664, + 4662, 4663, -1,4675, 4663, 4661, -1,4664, 4674, 4665, -1,4646, 4668, 4679, -1,4671, + 4674, 4673, -1,4672, 4673, 4680, -1,4668, 4646, 4667, -1,4680, 4668, 4672, -1,4679, + 4655, 4646, -1,4680, 4679, 4668, -1,4661, 4663, 4660, -1,4683, 4682, 4681, -1,4685, + 4683, 4684, -1,4684, 4686, 4685, -1,4684, 4681, 4687, -1,4686, 4684, 4688, -1,4684, + 4683, 4681, -1,4685, 4686, 4689, -1,4691, 4689, 4690, -1,4693, 4691, 4692, -1,4696, + 4695, 4694, -1,4696, 4697, 4695, -1,4699, 4695, 4698, -1,4693, 4700, 4698, -1,4686, + 4690, 4689, -1,4692, 4690, 3440, -1,4688, 4684, 4687, -1,4686, 4688, 4701, -1,4690, + 4692, 4691, -1,4701, 4690, 4686, -1,3440, 4702, 4692, -1,4701, 3440, 4690, -1,4692, + 4702, 4703, -1,4700, 4699, 4698, -1,4699, 4700, 4703, -1,4694, 4699, 4704, -1,4699, + 4694, 4695, -1,4703, 4704, 4699, -1,4706, 4705, 4694, -1,4704, 4706, 4694, -1,4700, + 4692, 4703, -1,4694, 4705, 4696, -1,4692, 4700, 4693, -1,4707, 4697, 4696, -1,4709, + 4707, 4708, -1,4708, 4710, 4709, -1,4708, 4696, 4705, -1,4710, 4708, 4711, -1,4708, + 4707, 4696, -1,4709, 4710, 4712, -1,4714, 4712, 4713, -1,3410, 4714, 4715, -1,4681, + 4717, 4716, -1,4681, 4682, 4717, -1,3416, 4717, 3415, -1,3410, 3417, 3415, -1,4710, + 4713, 4712, -1,4715, 4713, 4718, -1,4711, 4708, 4705, -1,4710, 4711, 4719, -1,4713, + 4715, 4714, -1,4719, 4713, 4710, -1,4718, 4720, 4715, -1,4719, 4718, 4713, -1,4715, + 4720, 4721, -1,3417, 3416, 3415, -1,3416, 3417, 4721, -1,4716, 3416, 4722, -1,3416, + 4716, 4717, -1,4721, 4722, 3416, -1,4723, 4687, 4716, -1,4722, 4723, 4716, -1,3417, + 4715, 4721, -1,4716, 4687, 4681, -1,4715, 3417, 3410, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/link5.wrl b/examples/rlsg/staeubli-tx60l/link5.wrl new file mode 100644 index 00000000..8ef97ae8 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link5.wrl @@ -0,0 +1,558 @@ +#VRML V2.0 utf8 + +DEF link5a Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 1.000000 1.000000 1.000000 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 130 + -0.036999 0.0215 -2.40803e-005, -0.036289 0.0215 -0.00722706, -0.034184 0.0215 -0.0141851, -0.030764 0.0215 -0.020532, + -0.026163 0.0215 -0.026147, -0.020555 0.0215 -0.030786, -0.014159 0.0215 -0.034204, -0.007218 0.0215 -0.0362791, + 0 0.0215 -0.037012, 0.007218 0.0215 -0.0362791, 0.014159 0.0215 -0.034204, 0.020555 0.0215 -0.030786, + 0.026163 0.0215 -0.026147, 0.030764 0.0215 -0.020532, 0.034184 0.0215 -0.0141851, 0.036289 0.0215 -0.00722706, + 0.036999 0.0215 -2.40803e-005, 0.036289 0.0215 0.00717795, 0.034184 0.0215 0.014136, 0.030764 0.0215 0.020605, + 0.026163 0.0215 0.0262209, 0.020555 0.0215 0.0307369, 0.014159 0.0215 0.034155, 0.007218 0.0215 0.03623, 0 0.0215 0.036963, + -0.007218 0.0215 0.03623, -0.014159 0.0215 0.034155, -0.020555 0.0215 0.0307369, -0.026163 0.0215 0.0262209, + -0.030764 0.0215 0.020605, -0.034184 0.0215 0.014136, -0.036289 0.0215 0.00717795, -0.036999 -0.0215 -2.40803e-005, + -0.036289 -0.0215 -0.00722706, -0.034184 -0.0215 -0.0141851, -0.030764 -0.0215 -0.020532, -0.026163 -0.0215 -0.026147, + -0.020555 -0.0215 -0.030786, -0.014159 -0.0215 -0.034204, -0.007218 -0.0215 -0.0362791, 0 -0.0215 -0.037012, + 0.007218 -0.0215 -0.0362791, 0.014159 -0.0215 -0.034204, 0.020555 -0.0215 -0.030786, 0.026163 -0.0215 -0.026147, + 0.030764 -0.0215 -0.020532, 0.034184 -0.0215 -0.0141851, 0.036289 -0.0215 -0.00722706, 0.036999 -0.0215 -2.40803e-005, + 0.036289 -0.0215 0.00717795, 0.034184 -0.0215 0.014136, 0.030764 -0.0215 0.020605, 0.026163 -0.0215 0.0262209, + 0.020555 -0.0215 0.0307369, 0.014159 -0.0215 0.034155, 0.007218 -0.0215 0.03623, 0 -0.0215 0.036963, + -0.007218 -0.0215 0.03623, -0.014159 -0.0215 0.034155, -0.020555 -0.0215 0.0307369, -0.026163 -0.0215 0.0262209, + -0.030764 -0.0215 0.020605, -0.034184 -0.0215 0.014136, -0.036289 -0.0215 0.00717795, 0.02 0 0.063452, + 0.018478 -0.007654 0.063452, 0.014142 -0.014142 0.063452, 0.007654 -0.018478 0.063452, 0 -0.02 0.063452, + -0.007654 -0.018478 0.063452, -0.014142 -0.014142 0.063452, -0.018478 -0.007654 0.063452, -0.02 0 0.063452, + -0.018478 0.007655 0.063452, -0.014142 0.014142 0.063452, -0.007654 0.018479 0.063452, 0 0.020001 0.063452, + 0.007654 0.018479 0.063452, 0.014142 0.014142 0.063452, 0.018478 0.007655 0.063452, -0.02 0 0.031958, -0.02 0 0.0477049, + 0.02 0 0.0477049, 0.02 0 0.031958, 0.019865 -0.002321 0.031958, 0.019461 -0.00461 0.031958, 0.019461 -0.00461 0.031714, + 0.019461 -0.00461 0.0314699, 0.017029 -0.010491 0.032813, 0.013615 -0.014651 0.034399, 0.009189 -0.017765 0.035864, + 0.004951 -0.019377 0.036719, 0.0004 -0.019996 0.036963, -0.007704 -0.018456 0.03623, -0.013123 -0.015093 0.034644, + -0.017178 -0.010244 0.032813, -0.019461 -0.00461 0.0314699, -0.019461 -0.00461 0.031714, -0.019461 -0.00461 0.031958, + -0.019865 -0.002321 0.031958, -0.019461 0.004611 0.031958, -0.019461 0.004611 0.031714, -0.019461 0.004611 0.0314699, + -0.017029 0.010491 0.032813, -0.013615 0.014653 0.034399, -0.009189 0.017766 0.035864, -0.004951 0.019379 0.036719, + -0.0004 0.019997 0.036963, 0.007704 0.018456 0.03623, 0.013123 0.015091 0.034644, 0.017178 0.010243 0.032813, + 0.019461 0.004611 0.0314699, 0.019461 0.004611 0.031714, 0.019461 0.004611 0.031958, 0.019865 0.00232 0.031958, + -0.019865 0.00232 0.031958, 0.018478 -0.007654 0.047461, 0.014142 -0.014142 0.047461, 0.007654 -0.018478 0.047461, + 0 -0.02 0.047461, -0.007654 -0.018478 0.047461, -0.014142 -0.014142 0.047461, -0.018478 -0.007654 0.047461, + -0.018478 0.007655 0.047461, -0.014142 0.014142 0.047461, -0.007654 0.018479 0.047461, 0 0.020001 0.047461, + 0.007654 0.018479 0.047461, 0.014142 0.014142 0.047461, 0.018478 0.007655 0.047461] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 65 + 0 1 0, 0 -1 0, 0 0 1, 0.947177 -0.320712 0, 1 -1.25113e-005 0, 0.999966 -1.98673e-005 0.00830354, 0.443005 -0.896519 0, + 0.752318 -0.6588 0, 0.679047 -0.734059 0.00725003, 0.910543 -0.413379 0.00545063, 0.958349 -0.285535 0.00603465, + 0.347002 -0.937834 0.00756936, 0.0661383 -0.99781 0, 0.498751 -0.866719 0.00679452, -0.0357706 -0.999351 0.00424936, + 0.881779 -0.471662 0.000422572, -0.6588 -0.752318 0, -0.320713 -0.947177 0, -0.43793 -0.899004 0.00290482, -1 -1.25113e-005 0, + -0.923873 -0.382698 0, -0.999966 -1.98661e-005 0.00830354, -0.739828 -0.672778 0.00490642, -0.307347 -0.951594 -0.00264937, + -0.924228 -0.381784 0.00665687, -0.882774 -0.469797 -0.000796955, -0.959365 -0.282095 0.00640574, + -0.622119 -0.78292 0.00175502, 0.228933 -0.9734 0.00906133, 0.680587 -0.732666 0.00109154, 0.993197 -0.116127 0.00860163, + 0.924101 -0.382148 0, 1 1.24728e-005 0, -0.0258405 -0.999665 -0.00136539, -0.9268 -0.375556 0, -1 1.24728e-005 0, + -0.993197 -0.116127 0.00860163, -0.947174 0.320719 0, -0.44307 0.896487 0, -0.75231 0.65881 0, -0.679081 0.734028 0.00728004, + -0.910527 0.413414 0.00544557, -0.958353 0.285523 0.0060245, -0.347069 0.937809 0.00759261, -0.0661383 0.99781 0, + -0.498809 0.866685 0.00685393, 0.0358188 0.999349 0.00424802, -0.88178 0.471661 0.000432156, 0.658836 0.752286 0, + 0.320746 0.947165 0, 0.438016 0.898963 0.00285355, 0.923865 0.382719 0, 0.739813 0.672795 0.00485733, + 0.307462 0.951557 -0.00270571, 0.924211 0.381825 0.00664005, 0.88272 0.469898 -0.000832241, 0.95936 0.282114 0.00639221, + 0.62218 0.782873 0.00165325, -0.228932 0.9734 0.00909949, -0.680641 0.732617 0.00119972, -0.993205 0.116065 0.00858511, + -0.924078 0.382204 0, 0.026008 0.999661 -0.00137195, 0.926753 0.375671 0, 0.993205 0.116065 0.00858511] + } + coordIndex [ + 14, 11, 9, -1,11, 10, 9, -1,14, 12, 11, -1,18, 15, 14, -1,1, 14, 9, -1,14, 13, 12, -1, + 14, 1, 18, -1,1, 7, 5, -1,7, 6, 5, -1,7, 9, 8, -1,3, 5, 4, -1,3, 2, 1, -1,3, 1, 5, -1, + 7, 1, 9, -1,16, 15, 18, -1,31, 18, 1, -1,18, 20, 19, -1,20, 18, 21, -1,23, 22, 21, -1, + 18, 25, 23, -1,21, 18, 23, -1,23, 25, 24, -1,31, 30, 29, -1,27, 31, 29, -1,31, 1, + 0, -1,27, 26, 25, -1,27, 29, 28, -1,25, 31, 27, -1,31, 25, 18, -1,17, 16, 18, -1, + 43, 44, 41, -1,41, 42, 43, -1,41, 44, 36, -1,52, 36, 44, -1,45, 46, 47, -1,44, 45, + 47, -1,47, 49, 44, -1,37, 39, 36, -1,37, 38, 39, -1,40, 41, 39, -1,35, 36, 33, -1, + 33, 34, 35, -1,39, 41, 36, -1,60, 33, 36, -1,47, 48, 49, -1,49, 50, 51, -1,51, 52, + 49, -1,36, 52, 60, -1,53, 54, 55, -1,52, 55, 57, -1,55, 52, 53, -1,57, 55, 56, -1, + 61, 62, 63, -1,61, 63, 60, -1,32, 33, 63, -1,57, 58, 59, -1,59, 60, 57, -1,63, 33, + 60, -1,57, 60, 52, -1,49, 52, 44, -1,74, 73, 72, -1,70, 74, 72, -1,70, 78, 74, -1, + 70, 72, 71, -1,70, 69, 68, -1,68, 66, 70, -1,76, 75, 74, -1,78, 77, 76, -1,70, 66, + 78, -1,79, 78, 64, -1,67, 66, 68, -1,66, 65, 64, -1,66, 64, 78, -1,78, 76, 74, -1, + 82, 64, 65, -1,117, 66, 67, -1,66, 116, 65, -1,116, 66, 117, -1,85, 82, 116, -1,68, + 118, 67, -1,118, 117, 67, -1,90, 117, 118, -1,119, 118, 68, -1,117, 88, 116, -1,82, + 65, 116, -1,120, 69, 70, -1,81, 71, 72, -1,71, 121, 70, -1,120, 70, 121, -1,93, 119, + 120, -1,81, 122, 71, -1,122, 121, 71, -1,95, 121, 122, -1,98, 122, 81, -1,121, 94, + 120, -1,119, 69, 120, -1,119, 68, 69, -1,119, 91, 118, -1,88, 117, 89, -1,90, 118, + 91, -1,89, 117, 90, -1,85, 84, 82, -1,88, 86, 85, -1,88, 87, 86, -1,116, 88, 85, -1, + 83, 82, 84, -1,119, 93, 92, -1,95, 122, 98, -1,95, 94, 121, -1,95, 98, 97, -1,99, + 81, 80, -1,96, 95, 97, -1,98, 81, 99, -1,93, 120, 94, -1,119, 92, 91, -1,81, 72, + 73, -1,124, 74, 75, -1,74, 123, 73, -1,123, 74, 124, -1,100, 81, 123, -1,76, 125, + 75, -1,125, 124, 75, -1,105, 124, 125, -1,126, 125, 76, -1,124, 103, 123, -1,81, + 73, 123, -1,127, 77, 78, -1,82, 79, 64, -1,79, 128, 78, -1,127, 78, 128, -1,108, + 126, 127, -1,82, 129, 79, -1,129, 128, 79, -1,110, 128, 129, -1,113, 129, 82, -1, + 128, 109, 127, -1,126, 77, 127, -1,126, 76, 77, -1,126, 106, 125, -1,103, 124, 104, -1, + 105, 125, 106, -1,104, 124, 105, -1,100, 115, 81, -1,103, 101, 100, -1,103, 102, + 101, -1,123, 103, 100, -1,80, 81, 115, -1,126, 108, 107, -1,110, 129, 113, -1,110, + 109, 128, -1,110, 113, 112, -1,114, 82, 83, -1,111, 110, 112, -1,113, 82, 114, -1, + 108, 127, 109, -1,126, 107, 106, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1,0, 0, 0, -1, + 0, 0, 0, -1,0, 0, 0, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1, + 1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1, + 1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1, + 1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1, + 1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,1, 1, 1, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1, + 2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1, + 2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,5, 4, 3, -1,8, 7, 6, -1,7, 9, 3, -1, + 9, 7, 8, -1,10, 5, 9, -1,12, 11, 6, -1,11, 8, 6, -1,13, 8, 11, -1,14, 11, 12, -1, + 8, 15, 9, -1,5, 3, 9, -1,18, 17, 16, -1,21, 20, 19, -1,20, 22, 16, -1,18, 16, 22, -1, + 23, 14, 18, -1,21, 24, 20, -1,24, 22, 20, -1,25, 22, 24, -1,26, 24, 21, -1,22, 27, + 18, -1,14, 17, 18, -1,14, 12, 17, -1,14, 28, 11, -1,15, 8, 29, -1,13, 11, 28, -1, + 29, 8, 13, -1,10, 30, 5, -1,15, 31, 10, -1,15, 31, 31, -1,9, 15, 10, -1,32, 5, 30, -1, + 14, 23, 33, -1,25, 24, 26, -1,25, 27, 22, -1,25, 26, 34, -1,36, 21, 35, -1,34, 25, + 34, -1,26, 21, 36, -1,23, 18, 27, -1,14, 33, 28, -1,21, 19, 37, -1,40, 39, 38, -1, + 39, 41, 37, -1,41, 39, 40, -1,42, 21, 41, -1,44, 43, 38, -1,43, 40, 38, -1,45, 40, + 43, -1,46, 43, 44, -1,40, 47, 41, -1,21, 37, 41, -1,50, 49, 48, -1,5, 51, 4, -1,51, + 52, 48, -1,50, 48, 52, -1,53, 46, 50, -1,5, 54, 51, -1,54, 52, 51, -1,55, 52, 54, -1, + 56, 54, 5, -1,52, 57, 50, -1,46, 49, 50, -1,46, 44, 49, -1,46, 58, 43, -1,47, 40, + 59, -1,45, 43, 58, -1,59, 40, 45, -1,42, 60, 21, -1,47, 61, 42, -1,47, 61, 61, -1, + 41, 47, 42, -1,35, 21, 60, -1,46, 53, 62, -1,55, 54, 56, -1,55, 57, 52, -1,55, 56, + 63, -1,64, 5, 32, -1,63, 55, 63, -1,56, 5, 64, -1,53, 50, 57, -1,46, 62, 58, -1 + ] + } + } + ] +} +DEF link5b Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.733333 0.866667 0.733333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 351 + -0.036999 -0.0215 -2.40803e-005, -0.036999 -0.018544 -2.40803e-005, -0.036999 -0.015588 -2.40803e-005, + -0.036266 -0.015164 0.00730002, -0.03421 -0.013978 0.014136, -0.031437 -0.012377 0.0195069, -0.028067 -0.010431 0.024146, + -0.021999 -0.006928 0.029761, -0.020346 -0.005661 0.030859, -0.019461 -0.00461 0.0314699, -0.017607 -0.009486 0.032568, + -0.014567 -0.013704 0.0340329, -0.010532 -0.017002 0.035498, -0.005218 -0.019307 0.036597, 0.000636 -0.01999 0.036963, + 0.006264 -0.018994 0.0364749, 0.011289 -0.016509 0.035254, 0.014871 -0.013374 0.033911, 0.017612 -0.009478 0.032568, + 0.019461 -0.00461 0.0314699, 0.020346 -0.005661 0.030859, 0.021999 -0.006928 0.029761, 0.024199 -0.008198 0.02793, + 0.029669 -0.011356 0.0220699, 0.034054 -0.013887 0.0145019, 0.036221 -0.015139 0.00754392, 0.036999 -0.015588 -2.40803e-005, + 0.036999 -0.018544 -2.40803e-005, 0.036999 -0.0215 -2.40803e-005, 0.036289 -0.0215 0.00717795, 0.034184 -0.0215 0.014136, + 0.030764 -0.0215 0.020605, 0.026163 -0.0215 0.0262209, 0.020555 -0.0215 0.0307369, 0.014159 -0.0215 0.034155, + 0.007218 -0.0215 0.03623, 0 -0.0215 0.036963, -0.007218 -0.0215 0.03623, -0.014159 -0.0215 0.034155, + -0.020555 -0.0215 0.0307369, -0.026163 -0.0215 0.0262209, -0.030764 -0.0215 0.020605, -0.034184 -0.0215 0.014136, + -0.036289 -0.0215 0.00717795, 0.036289 -0.015588 -0.00722706, 0.034184 -0.015588 -0.0141851, 0.030764 -0.015588 -0.020532, + 0.026163 -0.015588 -0.026147, 0.020555 -0.015588 -0.030786, 0.014159 -0.015588 -0.034204, 0.007218 -0.015588 -0.0362791, + 0 -0.015588 -0.037012, -0.007218 -0.015588 -0.0362791, -0.014159 -0.015588 -0.034204, -0.020555 -0.015588 -0.030786, + -0.026163 -0.015588 -0.026147, -0.030764 -0.015588 -0.020532, -0.034184 -0.015588 -0.0141851, -0.036289 -0.015588 -0.00722706, + -0.036289 -0.0215 -0.00722706, -0.034184 -0.0215 -0.0141851, -0.030764 -0.0215 -0.020532, -0.026163 -0.0215 -0.026147, + -0.020555 -0.0215 -0.030786, -0.014159 -0.0215 -0.034204, -0.007218 -0.0215 -0.0362791, 0 -0.0215 -0.037012, + 0.007218 -0.0215 -0.0362791, 0.014159 -0.0215 -0.034204, 0.020555 -0.0215 -0.030786, 0.026163 -0.0215 -0.026147, + 0.030764 -0.0215 -0.020532, 0.034184 -0.0215 -0.0141851, 0.036289 -0.0215 -0.00722706, 0.036999 0.0215 -2.40803e-005, + 0.036999 0.018544 -2.40803e-005, 0.036999 0.015587 -2.40803e-005, 0.036221 0.015137 0.00754392, 0.034054 0.013886 0.0145019, + 0.029669 0.011355 0.0220699, 0.024199 0.008198 0.02793, 0.021999 0.006928 0.029761, 0.020346 0.00566 0.030859, + 0.019461 0.004611 0.0314699, 0.017607 0.009486 0.032568, 0.014567 0.013703 0.0340329, 0.010532 0.017003 0.035498, + 0.005218 0.019307 0.036597, -0.000636 0.019989 0.036963, -0.006264 0.018994 0.0364749, -0.011289 0.01651 0.035254, + -0.014871 0.013375 0.033911, -0.017612 0.009478 0.032568, -0.019461 0.004611 0.0314699, -0.020346 0.00566 0.030859, + -0.021999 0.006928 0.029761, -0.028067 0.010432 0.024146, -0.031437 0.012375 0.0195069, -0.03421 0.013978 0.014136, + -0.036266 0.015164 0.00730002, -0.036999 0.015587 -2.40803e-005, -0.036999 0.018544 -2.40803e-005, + -0.036999 0.0215 -2.40803e-005, -0.036289 0.0215 0.00717795, -0.034184 0.0215 0.014136, -0.030764 0.0215 0.020605, + -0.026163 0.0215 0.0262209, -0.020555 0.0215 0.0307369, -0.014159 0.0215 0.034155, -0.007218 0.0215 0.03623, + 0 0.0215 0.036963, 0.007218 0.0215 0.03623, 0.014159 0.0215 0.034155, 0.020555 0.0215 0.0307369, 0.026163 0.0215 0.0262209, + 0.030764 0.0215 0.020605, 0.034184 0.0215 0.014136, 0.036289 0.0215 0.00717795, -0.036289 0.015587 -0.00722706, + -0.034184 0.015587 -0.0141851, -0.030764 0.015587 -0.020532, -0.026163 0.015587 -0.026147, -0.020555 0.015587 -0.030786, + -0.014159 0.015587 -0.034204, -0.007218 0.015587 -0.0362791, 0 0.015587 -0.037012, 0.007218 0.015587 -0.0362791, + 0.014159 0.015587 -0.034204, 0.020555 0.015587 -0.030786, 0.026163 0.015587 -0.026147, 0.030764 0.015587 -0.020532, + 0.034184 0.015587 -0.0141851, 0.036289 0.015587 -0.00722706, 0.036289 0.0215 -0.00722706, 0.034184 0.0215 -0.0141851, + 0.030764 0.0215 -0.020532, 0.026163 0.0215 -0.026147, 0.020555 0.0215 -0.030786, 0.014159 0.0215 -0.034204, + 0.007218 0.0215 -0.0362791, 0 0.0215 -0.037012, -0.007218 0.0215 -0.0362791, -0.014159 0.0215 -0.034204, + -0.020555 0.0215 -0.030786, -0.026163 0.0215 -0.026147, -0.030764 0.0215 -0.020532, -0.034184 0.0215 -0.0141851, + -0.036289 0.0215 -0.00722706, -0.019461 -0.00461 0.031958, -0.019865 -0.002321 0.031958, -0.02 0 0.031958, + -0.019865 0.00232 0.031958, -0.019461 0.004611 0.031958, -0.018373 0.002417 0.031958, -0.018 0 0.031958, + -0.018373 -0.002418 0.031958, -0.021999 0.006928 -2.40803e-005, -0.035995 0.015007 0.00852096, -0.033039 0.013302 0.016699, + -0.028286 0.010558 0.023901, -0.021999 -0.006928 -2.40803e-005, -0.028286 -0.010558 0.023901, -0.033039 -0.013301 0.016699, + -0.035995 -0.015008 0.00852096, -0.019461 -0.00461 0.031714, -0.019461 0.004611 0.031714, -0.020641 0.00594 0.0307369, + -0.021999 0.006928 0.014868, -0.019072 0.004 -2.40803e-005, -0.018 0 -2.40803e-005, -0.018272 -0.002071 -2.40803e-005, + -0.019072 -0.004 -2.40803e-005, -0.020344 -0.005657 -2.40803e-005, -0.021999 -0.006928 0.014868, + -0.020641 -0.005939 0.0307369, 0.02 0 0.031958, 0.019865 -0.002321 0.031958, 0.019461 -0.00461 0.031958, + 0.018373 -0.002418 0.031958, 0.018 0 0.031958, 0.018373 0.002417 0.031958, 0.019461 0.004611 0.031958, + 0.019865 0.00232 0.031958, 0.021999 0.006928 -2.40803e-005, 0.028286 0.010558 0.023901, 0.033039 0.013302 0.016699, + 0.035995 0.015007 0.00852096, 0.021999 -0.006928 -2.40803e-005, 0.035995 -0.015008 0.00852096, 0.033039 -0.013301 0.016699, + 0.028286 -0.010558 0.023901, 0.019461 -0.00461 0.031714, 0.020641 -0.005939 0.0307369, 0.021999 -0.006928 0.014868, + 0.020344 -0.005657 -2.40803e-005, 0.019072 -0.004 -2.40803e-005, 0.018272 -0.002071 -2.40803e-005, 0.018 0 -2.40803e-005, + 0.019072 0.004 -2.40803e-005, 0.021999 0.006928 0.014868, 0.020641 0.00594 0.0307369, 0.019461 0.004611 0.031714, + -0.029499 0.011258 -2.40803e-005, -0.020325 0.006928 -0.00844705, -0.015556 0.006928 -0.015527, -0.008419 0.006928 -0.020288, + 0 0.006928 -0.021997, 0.008419 0.006928 -0.020288, 0.015556 0.006928 -0.015527, 0.020325 0.006928 -0.00844705, + 0.029499 0.011258 -2.40803e-005, 0.029499 -0.011259 -2.40803e-005, 0.020325 -0.006928 -0.00844705, + 0.015556 -0.006928 -0.015527, 0.008419 -0.006928 -0.020288, 0 -0.006928 -0.021997, -0.008419 -0.006928 -0.020288, + -0.015556 -0.006928 -0.015527, -0.020325 -0.006928 -0.00844705, -0.029499 -0.011259 -2.40803e-005, + -0.030764 -0.013055 0.020605, -0.026163 -0.013055 0.0262209, -0.020555 -0.013055 0.0307369, 0.020555 -0.013055 0.0307369, + 0.026163 -0.013055 0.0262209, 0.030764 -0.013055 0.020605, 0.036289 -0.018544 -0.00722706, 0.034184 -0.018544 -0.0141851, + 0.030764 -0.018544 -0.020532, 0.026163 -0.018544 -0.026147, 0.020555 -0.018544 -0.030786, 0.014159 -0.018544 -0.034204, + 0.007218 -0.018544 -0.0362791, 0 -0.018544 -0.037012, -0.007218 -0.018544 -0.0362791, -0.014159 -0.018544 -0.034204, + -0.020555 -0.018544 -0.030786, -0.026163 -0.018544 -0.026147, -0.030764 -0.018544 -0.020532, -0.034184 -0.018544 -0.0141851, + -0.036289 -0.018544 -0.00722706, -0.030764 0.013054 0.020605, -0.026163 0.013054 0.0262209, -0.020555 0.013054 0.0307369, + 0.020555 0.013054 0.0307369, 0.026163 0.013054 0.0262209, 0.030764 0.013054 0.020605, 0.036289 0.018544 -0.00722706, + 0.034184 0.018544 -0.0141851, 0.030764 0.018544 -0.020532, 0.026163 0.018544 -0.026147, 0.020555 0.018544 -0.030786, + 0.014159 0.018544 -0.034204, 0.007218 0.018544 -0.0362791, 0 0.018544 -0.037012, -0.007218 0.018544 -0.0362791, + -0.014159 0.018544 -0.034204, -0.020555 0.018544 -0.030786, -0.026163 0.018544 -0.026147, -0.030764 0.018544 -0.020532, + -0.034184 0.018544 -0.0141851, -0.036289 0.018544 -0.00722706, -0.019072 0.004 0.015967, -0.018 0 0.015967, + -0.018272 -0.002071 0.015967, -0.019072 -0.004 0.015967, -0.020344 -0.005657 0.015967, 0.019072 0.004 0.015967, + 0.018 0 0.015967, 0.018272 -0.002071 0.015967, 0.019072 -0.004 0.015967, 0.020344 -0.005657 0.015967, + 0.028933 0.011258 -0.00576198, 0.027254 0.011258 -0.011255, 0.024529 0.011258 -0.016382, 0.020859 0.011258 -0.020898, + 0.01639 0.011258 -0.024561, 0.01129 0.011258 -0.027246, 0.005755 0.011258 -0.028955, 0 0.011258 -0.029443, + -0.005755 0.011258 -0.028955, -0.01129 0.011258 -0.027246, -0.01639 0.011258 -0.024561, -0.020859 0.011258 -0.020898, + -0.024529 0.011258 -0.016382, -0.027254 0.011258 -0.011255, -0.028933 0.011258 -0.00576198, 0.028933 -0.011259 -0.00576198, + 0.027254 -0.011259 -0.011255, 0.024529 -0.011259 -0.016382, 0.020859 -0.011259 -0.020898, 0.01639 -0.011259 -0.024561, + 0.01129 -0.011259 -0.027246, 0.005755 -0.011259 -0.028955, 0 -0.011259 -0.029443, -0.005755 -0.011259 -0.028955, + -0.01129 -0.011259 -0.027246, -0.01639 -0.011259 -0.024561, -0.020859 -0.011259 -0.020898, -0.024529 -0.011259 -0.016382, + -0.027254 -0.011259 -0.011255, -0.028933 -0.011259 -0.00576198, 0.01762 0.004 -0.00734901, 0.01663 0 -0.00686002, + 0.016882 -0.002071 -0.00698197, 0.01762 -0.004 -0.00734901, 0.018795 -0.005657 -0.00783706, 0.013486 0.004 -0.0134521, + 0.012728 0 -0.01272, 0.01292 -0.002071 -0.012964, 0.013486 -0.004 -0.0134521, 0.014385 -0.005657 -0.014429, + 0.007298 0.004 -0.017603, 0.006888 0 -0.016626, 0.006993 -0.002071 -0.01687, 0.007298 -0.004 -0.017603, + 0.007785 -0.005657 -0.018823, 0 0.004 -0.019067, 0 0 -0.017969, 0 -0.002071 -0.018213, 0 -0.004 -0.019067, + 0 -0.005657 -0.020288, -0.007298 0.004 -0.017603, -0.006888 0 -0.016626, -0.006993 -0.002071 -0.01687, + -0.007298 -0.004 -0.017603, -0.007785 -0.005657 -0.018823, -0.013486 0.004 -0.0134521, -0.012728 0 -0.01272, + -0.01292 -0.002071 -0.012964, -0.013486 -0.004 -0.0134521, -0.014385 -0.005657 -0.014429, -0.01762 0.004 -0.00734901, + -0.01663 0 -0.00686002, -0.016882 -0.002071 -0.00698197, -0.01762 -0.004 -0.00734901, -0.018795 -0.005657 -0.00783706, + -0.01255 -0.015353 0.034766, -0.007875 -0.018155 0.036108, -0.00229 -0.019649 0.036841, 0.008777 -0.017751 0.035864, + 0.01308 -0.014942 0.034521, 0.03186 -0.012621 0.018286, 0.035137 -0.014513 0.010962, 0.035137 0.014512 0.010962, + 0.03186 0.012619 0.018286, 0.01255 0.015355 0.034766, 0.007875 0.018155 0.036108, 0.00229 0.01965 0.036841, + -0.008777 0.01775 0.035864, -0.01308 0.014943 0.034521] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 338 + -0.986651 -0.000132423 0.162848, -0.999461 0 -0.0328347, -1 0.000286181 0.000369851, -0.925828 -0.00438107 0.37792, + -0.980795 -0.000930603 0.19504, -0.286098 -0.0225847 0.957934, -0.362242 -0.0182074 0.931906, -0.343718 -0.00336387 0.939067, + -0.767628 0.0272947 0.640314, -0.715221 -0.0047708 0.698882, -0.82904 -0.00582364 0.559159, -0.425708 -0.0122861 0.904777, + -0.544628 -0.00672331 0.838651, -0.664489 0.00729513 0.747263, -0.8638 0.0195689 0.503454, -1 0 0.000747762, + -0.926772 -0.00320326 0.375612, -0.136819 -0.0408779 0.989752, -0.0777054 -0.0415745 0.996109, -0.178096 -0.041172 0.983151, + -0.204259 -0.00443038 0.978907, -0.0132561 -0.0284985 0.999506, 0.181268 -0.0332771 0.982871, 0.0528309 -0.0287639 0.998189, + 0.262852 -0.0300838 0.964367, 0.344234 -0.018306 0.938706, 0.590116 -0.00611394 0.807296, 0.701453 -0.00201558 0.712713, + 0.524334 -0.00904594 0.851465, 0.980034 -0.00035458 0.198832, 0.955468 -0.00133451 0.295093, 0.985543 -0.000803442 0.169425, + 0.920599 0.00169405 0.390506, 0.916179 -0.00362012 0.400753, 0.845111 0.00123622 0.534589, 0.885095 0.0457233 0.46316, + 0.420404 -0.011994 0.907258, 0.866886 0.0600434 0.494877, 0.797736 0.0484805 0.601056, 0.168014 -0.0323533 0.985254, + 0.34712 0.00477745 0.937809, 0.318396 -0.0255703 0.947613, 1 0 6.46102e-006, 0.999999 0.000816939 0.00103412, + 0.999505 0 -0.0314498, -0.82528 0.0301025 0.563921, -0.57384 -0.00418611 0.818957, -0.516934 -0.0107967 0.855957, + -0.628099 0.0128172 0.778028, -0.544543 -0.00619794 0.83871, -0.550613 -0.0214402 0.834485, 0.518496 -0.0103539 0.855018, + 0.694757 0.012457 0.719136, 0.671292 0.00817938 0.741148, 0.593333 -0.0116278 0.804873, 0.544866 -0.00606578 0.838501, + 0.55092 -0.0210697 0.834292, 0.986691 0 -0.162609, 0.935722 0 -0.352738, 0.980851 0 -0.194761, 0.731156 0 -0.68221, + 0.848197 0 -0.529682, 0.830745 0 -0.556653, 0.557149 0 -0.830412, 0.708749 0 -0.70546, 0.923379 0 -0.38389, + 0.973963 0 -0.226705, 0.812436 0 -0.58305, 0.573726 0 -0.819048, 0.685603 0 -0.727975, 0.909998 0 -0.414612, + 0.394013 0 -0.919105, 0.225525 0 -0.974237, 0.380781 0 -0.924665, 0.0338265 0 -0.999428, 0.194597 0 -0.980883, + -0.194597 0 -0.980883, -0.349617 0 -0.936893, -0.163473 0 -0.986548, -0.380781 0 -0.924665, -0.529033 0 -0.848602, 0 0 -1, + -0.685603 0 -0.727975, -0.557149 0 -0.830412, 0.349617 0 -0.936893, -0.812436 0 -0.58305, -0.708749 0 -0.705461, + -0.830745 0 -0.556653, -0.909998 0 -0.414612, -0.980851 0 -0.194761, -0.973963 0 -0.226705, -0.923379 0 -0.38389, + 0.529033 0 -0.848602, -0.0338265 0 -0.999428, -0.225525 0 -0.974237, 0.163473 0 -0.986548, -0.411519 0 -0.911401, + -0.584642 0 -0.811292, -0.731156 0 -0.68221, -0.935722 0 -0.352738, -0.986691 0 -0.162609, -0.848197 0 -0.529682, + -0.673584 -0.00912634 0.739054, -0.628104 -0.0128246 0.778024, -0.767623 -0.0272944 0.64032, -0.55094 0.0210848 0.834278, + -0.544873 0.00607081 0.838496, -0.518502 0.0103573 0.855014, -0.583137 0.00348484 0.812367, -0.863793 -0.0195629 0.503467, + -0.825269 -0.0300937 0.563937, -0.82904 0.00582347 0.559159, -0.694077 0.00357977 0.719892, -0.524335 0.00904602 0.851464, + -0.420405 0.0119941 0.907257, -0.344228 0.018311 0.938708, -0.34712 -0.00477809 0.937809, 0.544551 0.00620306 0.838705, + 0.516939 0.0108009 0.855954, 0.583587 0.00713908 0.812019, 0.550634 0.0214555 0.834471, 0.593333 0.0116296 0.804873, + 0.681647 -0.00996443 0.731613, 0.797729 -0.0484707 0.601066, 0.67129 -0.00818087 0.741149, 0.544627 0.00672332 0.838651, + 0.845111 -0.00123568 0.534589, 0.866877 -0.0600228 0.494895, 0.724764 0.0026857 0.688992, 0.885088 -0.0457074 0.463174, + 0.425708 0.0122861 0.904777, 0.980034 0.000354382 0.198832, 0.955468 0.00133385 0.295092, 0.920599 -0.0016935 0.390506, + -0.980795 0.000930603 0.19504, -0.999477 0 -0.0323429, -1 -0.000286181 0.000369851, -0.926771 0.00320326 0.375612, + -0.925828 0.00438058 0.37792, -0.16801 0.032355 0.985254, -0.262842 0.0300918 0.96437, -0.181266 0.0332692 0.982871, + -0.0528236 0.0287578 0.99819, 0.0132601 0.0285018 0.999506, 0.0777178 0.0415794 0.996108, -0.986651 0.000132423 0.162848, + -1 0 6.46102e-006, -0.31838 0.0255854 0.947618, 0.204258 0.00443002 0.978907, 0.136832 0.0408663 0.989751, + 0.1781 0.041176 0.983151, 0.286096 0.022589 0.957935, 0.999999 -0.000816688 0.00103402, 0.985543 0.000803131 0.169424, + 0.999998 0 0.0020941, 0.916179 0.00361969 0.400754, 0.362243 0.0182104 0.931906, 0.34372 0.00336442 0.939066, + 0.999461 0 -0.0328347, -0.499773 -0.865806 -0.0246369, -0.49991 -0.866077 3.53145e-005, -0.569715 -0.820485 -0.0472098, + -0.499933 -0.866064 6.19172e-005, -0.500006 -0.866022 5.00613e-006, -0.544923 -0.838486 0, -0.524464 0.850794 -0.0329699, + -0.49999 0.866031 -3.88593e-005, -0.499655 0.865602 -0.0328427, -0.499943 0.866058 1.43392e-006, + -0.499957 0.86605 2.2178e-005, -0.545124 0.838355 0, -0.936025 -0.351926 0.00235341, -0.895892 -0.444271 0, + -0.853548 -0.521013 0.000786308, -0.993569 -0.113197 0.00280927, -0.999039 0.04381 -0.000987544, + -0.854553 -0.519327 0.00614393, -0.68574 -0.727801 0.00811448, -0.895731 0.444597 0, -0.926328 0.376716 -0.00108602, + -0.838644 0.54468 -0.000809074, -0.881582 0.47203 0.000268226, -0.651663 0.758508 0.000174116, -0.729355 0.684135 0.000767887, + -0.604326 0.796737 0.000713411, -0.975538 0.21983 -7.64456e-005, -0.679879 -0.733312 0.00425338, + -0.864487 -0.499462 -0.0565708, -0.992999 -0.0369795 -0.112182, -0.949125 0.300634 -0.0937057, -0.674119 0.735616 -0.0665822, + -0.840175 0.535972 -0.0827041, 0.569715 -0.820485 -0.0472098, 0.544923 -0.838486 0, 0.500006 -0.866022 5.00613e-006, + 0.499933 -0.866064 6.19172e-005, 0.49991 -0.866077 3.53145e-005, 0.499773 -0.865806 -0.0246369, 0.499957 0.86605 2.2178e-005, + 0.533979 0.844418 -0.0427094, 0.499943 0.866058 1.43392e-006, 0.545124 0.838355 0, 0.49999 0.866031 -3.88593e-005, + 0.499794 0.865794 -0.0246335, 0.679879 -0.733312 0.00425338, 0.835746 -0.544914 -0.0678001, 0.875217 -0.483701 0.00527276, + 0.993006 -0.0655183 -0.0982116, 0.99652 -0.0832858 0.0033727, 0.68574 -0.727801 0.00811448, 0.936025 -0.351926 0.00235341, + 0.96984 0.243741 -6.55741e-005, 0.961504 0.257783 -0.0951753, 0.870651 0.482216 -0.0971283, 0.860076 0.510165 0.000268348, + 0.706342 0.706351 -0.0463675, 0.604326 0.796737 0.000713411, 0.715631 0.698478 0.00092165, 0.926328 0.376716 -0.00108602, + 0.999039 0.04381 -0.000987544, 0.853548 -0.521013 0.000786308, 0.895892 -0.444271 0, 0.651663 0.758508 0.000174116, + 0.838644 0.54468 -0.000809074, 0.895731 0.444597 0, 0.521849 -0.824987 -0.216955, 0.486445 -0.868285 -0.0972242, + 0.41764 -0.868059 -0.268423, 0.427446 -0.810608 -0.400256, 0.275105 -0.868173 -0.413028, 0.243358 -0.810257 -0.533161, + 0.499316 -0.865019 -0.0492417, 0.465702 -0.866001 -0.18211, 0.490041 -0.866212 -0.0976581, 0.361006 -0.866094 -0.345769, + 0.407425 -0.865434 -0.291596, 0.343368 -0.865093 -0.365668, 0.454826 -0.866381 -0.206197, 0.190507 -0.866823 -0.460787, + -0.206056 -0.810195 -0.548749, 0.0204252 -0.809827 -0.586313, -0.0953744 -0.868248 -0.486876, -0.413723 -0.867638 -0.27575, + -0.533598 -0.809697 -0.244262, -0.39936 -0.810612 -0.428275, -0.485309 -0.867991 -0.105204, -0.267334 -0.868686 -0.417033, + 0.103361 -0.868035 -0.485625, 0.190576 -0.866203 -0.461923, 0 -0.8657 -0.500563, 0.0790966 -0.865942 -0.493851, + -0.1813 -0.866409 -0.465259, -0.0963248 -0.866246 -0.490244, -0.20459 -0.86639 -0.455535, -0.347333 -0.866088 -0.359516, + 0 -0.868051 -0.496475, 0.278808 -0.865788 -0.415545, -0.292352 -0.865414 -0.406926, -0.367174 -0.865112 -0.341708, + -0.461916 -0.866054 -0.191271, -0.461214 -0.866408 -0.191361, -0.499316 -0.865019 -0.0492417, -0.493435 -0.865972 -0.0813292, + -0.415709 -0.865787 -0.278565, 0.493435 0.865972 -0.0813291, 0.499345 0.865003 -0.0492445, 0.424611 0.866005 -0.264084, + 0.467014 0.866451 -0.176522, 0.45812 0.865926 -0.200746, 0.367174 0.865112 -0.341708, 0.409265 0.867694 -0.282151, + 0.485351 0.867966 -0.105212, 0.292352 0.865414 -0.406926, 0.347357 0.866068 -0.35954, 0.494152 0.839912 -0.224412, + 0.20459 0.86639 -0.455534, 0.267357 0.868662 -0.417069, 0.181313 0.866389 -0.465291, 0.114358 0.865561 -0.487572, + -0.0101809 0.86586 -0.500183, -0.0790965 0.865942 -0.49385, 0.0141985 0.867046 -0.498025, -0.103369 0.868011 -0.485667, + -0.176034 0.866232 -0.467605, 0.0878791 0.868252 -0.488279, -0.281647 0.868309 -0.408307, -0.343368 0.865093 -0.365668, + -0.263688 0.866006 -0.424856, -0.36103 0.866074 -0.345793, -0.407425 0.865435 -0.291596, -0.465734 0.865981 -0.182123, + -0.48669 0.866136 -0.113758, -0.454826 0.866381 -0.206197, -0.488716 0.867867 -0.0892398, -0.417676 0.868034 -0.268447, + -0.199851 0.8665 -0.457424, 0.372246 0.838418 -0.398105, 0.19101 0.840395 -0.5072, -0.01682 0.842239 -0.538842, + -0.225336 0.837837 -0.497245, -0.39616 0.839336 -0.372253, -0.506306 0.840803 -0.191583, -0.499382 0.86498 -0.0492602, + 0.790218 -0.535016 -0.298853, 0.894603 -0.0637556 -0.442291, 0.609591 -0.466888 -0.640636, 0.914254 0.262728 -0.308405, + 0.295541 -0.544323 -0.785091, 0.00747201 -0.501896 -0.864896, 0.378933 -0.131751 -0.915998, 0.677683 -0.0179141 -0.735136, + 0.392883 0.235942 -0.888805, -0.000562285 -0.0720772 -0.997399, -0.358084 -0.466131 -0.80901, 0.725379 0.259461 -0.637577, + 0.796369 0.477384 -0.371349, 0.670598 0.695037 -0.25927, 0.502382 0.726237 -0.469246, 0.584928 0.516793 -0.625127, + 0.30035 0.485896 -0.82079, -0.0278528 0.278399 -0.960062, 0.289989 0.692109 -0.660978, -0.00509482 0.705516 -0.708676, + 0.0296782 0.527071 -0.849303, -0.342579 -0.028694 -0.939051, -0.611973 -0.544471 -0.57362, -0.682908 -0.0893975 -0.725013, + -0.42502 0.255095 -0.868495, -0.725379 0.259461 -0.637577, -0.299848 0.523084 -0.797793, -0.823515 -0.468424 -0.320004, + -0.907917 -0.0245292 -0.418431, -0.912069 0.238409 -0.333602, -0.797908 0.486369 -0.356073, -0.593354 0.475262 -0.649659, + -0.237728 0.727118 -0.644038, -0.495278 0.694714 -0.521606, -0.656953 0.705333 -0.266305] + } + coordIndex [ + 1, 0, 43, -1,3, 43, 42, -1,337, 38, 12, -1,41, 40, 6, -1,337, 11, 38, -1,221, 40, + 39, -1,5, 42, 41, -1,3, 2, 1, -1,42, 4, 3, -1,37, 339, 13, -1,338, 37, 13, -1,338, + 12, 37, -1,38, 37, 12, -1,11, 39, 38, -1,339, 37, 36, -1,3, 1, 43, -1,14, 36, 35, -1, + 34, 340, 35, -1,33, 32, 223, -1,25, 343, 29, -1,343, 24, 30, -1,30, 342, 31, -1,17, + 34, 33, -1,342, 23, 225, -1,35, 340, 15, -1,31, 23, 32, -1,16, 34, 341, -1,29, 343, + 30, -1,27, 29, 28, -1,25, 29, 27, -1,27, 26, 25, -1,14, 35, 15, -1,14, 339, 36, -1, + 42, 5, 4, -1,16, 340, 34, -1,220, 5, 41, -1,6, 220, 41, -1,39, 10, 222, -1,222, 221, + 39, -1,10, 39, 11, -1,222, 7, 221, -1,40, 221, 6, -1,7, 6, 221, -1,222, 10, 8, -1, + 7, 222, 8, -1,8, 10, 9, -1,5, 220, 6, -1,34, 17, 341, -1,223, 18, 33, -1,23, 224, + 32, -1,224, 223, 32, -1,225, 31, 342, -1,225, 23, 31, -1,224, 22, 223, -1,342, 30, + 24, -1,17, 33, 18, -1,223, 22, 21, -1,21, 20, 223, -1,18, 20, 19, -1,22, 224, 23, -1, + 18, 223, 20, -1,27, 28, 73, -1,226, 73, 72, -1,228, 71, 70, -1,229, 70, 69, -1,71, + 227, 72, -1,73, 226, 27, -1,26, 27, 226, -1,44, 226, 227, -1,72, 227, 226, -1,70, + 229, 228, -1,46, 228, 229, -1,47, 229, 230, -1,69, 230, 229, -1,228, 45, 227, -1, + 71, 228, 227, -1,231, 230, 69, -1,231, 68, 67, -1,232, 67, 66, -1,65, 64, 234, -1, + 64, 63, 235, -1,233, 66, 65, -1,236, 63, 62, -1,231, 67, 232, -1,49, 231, 232, -1, + 237, 62, 61, -1,61, 60, 238, -1,59, 0, 240, -1,239, 60, 59, -1,232, 66, 233, -1,231, + 69, 68, -1,231, 48, 230, -1,44, 227, 45, -1,45, 228, 46, -1,65, 234, 233, -1,233, + 234, 51, -1,234, 235, 52, -1,64, 235, 234, -1,47, 46, 229, -1,26, 226, 44, -1,47, + 230, 48, -1,48, 231, 49, -1,232, 233, 50, -1,234, 52, 51, -1,233, 51, 50, -1,49, + 232, 50, -1,53, 52, 235, -1,62, 237, 236, -1,54, 236, 237, -1,55, 237, 238, -1,61, + 238, 237, -1,59, 240, 239, -1,57, 239, 240, -1,58, 240, 1, -1,0, 1, 240, -1,239, + 56, 238, -1,60, 239, 238, -1,236, 54, 53, -1,237, 55, 54, -1,239, 57, 56, -1,1, 2, + 58, -1,240, 58, 57, -1,238, 56, 55, -1,53, 235, 236, -1,63, 236, 235, -1,96, 95, + 242, -1,92, 94, 93, -1,92, 243, 94, -1,94, 243, 95, -1,241, 97, 96, -1,241, 105, + 97, -1,96, 105, 241, -1,242, 243, 106, -1,242, 106, 96, -1,92, 91, 107, -1,243, 92, + 107, -1,95, 243, 242, -1,91, 350, 108, -1,244, 84, 82, -1,82, 84, 83, -1,82, 81, + 244, -1,80, 79, 245, -1,244, 81, 80, -1,113, 244, 245, -1,84, 244, 113, -1,246, 115, + 79, -1,79, 114, 245, -1,115, 246, 345, -1,85, 84, 113, -1,80, 245, 244, -1,116, 344, + 117, -1,101, 100, 99, -1,104, 99, 98, -1,109, 349, 89, -1,106, 243, 107, -1,88, 109, + 89, -1,348, 110, 88, -1,99, 103, 101, -1,101, 103, 102, -1,104, 97, 105, -1,99, 104, + 103, -1,107, 91, 108, -1,108, 349, 109, -1,350, 90, 108, -1,105, 96, 106, -1,110, + 109, 88, -1,111, 87, 347, -1,348, 111, 110, -1,111, 347, 86, -1,114, 113, 245, -1, + 117, 77, 75, -1,345, 246, 79, -1,77, 76, 75, -1,344, 116, 78, -1,87, 111, 348, -1, + 346, 85, 112, -1,86, 112, 111, -1,90, 349, 108, -1,114, 79, 115, -1,112, 85, 113, -1, + 345, 78, 116, -1,75, 74, 117, -1,346, 112, 86, -1,344, 77, 117, -1,116, 115, 345, -1, + 98, 97, 104, -1,75, 76, 132, -1,247, 132, 131, -1,249, 130, 129, -1,250, 129, 128, -1, + 130, 248, 131, -1,132, 247, 75, -1,74, 75, 247, -1,133, 247, 248, -1,131, 248, 247, -1, + 129, 250, 249, -1,135, 249, 250, -1,136, 250, 251, -1,128, 251, 250, -1,249, 134, + 248, -1,130, 249, 248, -1,252, 251, 128, -1,252, 127, 126, -1,253, 126, 125, -1,124, + 123, 255, -1,123, 122, 256, -1,254, 125, 124, -1,257, 122, 121, -1,252, 126, 253, -1, + 138, 252, 253, -1,258, 121, 120, -1,120, 119, 259, -1,118, 100, 261, -1,260, 119, + 118, -1,253, 125, 254, -1,252, 128, 127, -1,252, 137, 251, -1,133, 248, 134, -1,134, + 249, 135, -1,124, 255, 254, -1,254, 255, 140, -1,255, 256, 141, -1,123, 256, 255, -1, + 136, 135, 250, -1,74, 247, 133, -1,136, 251, 137, -1,137, 252, 138, -1,253, 254, + 139, -1,255, 141, 140, -1,254, 140, 139, -1,138, 253, 139, -1,142, 141, 256, -1,121, + 258, 257, -1,143, 257, 258, -1,144, 258, 259, -1,120, 259, 258, -1,118, 261, 260, -1, + 146, 260, 261, -1,147, 261, 101, -1,100, 101, 261, -1,260, 145, 259, -1,119, 260, + 259, -1,257, 143, 142, -1,258, 144, 143, -1,260, 146, 145, -1,101, 102, 147, -1,261, + 147, 146, -1,259, 145, 144, -1,142, 256, 257, -1,122, 257, 256, -1,153, 150, 151, -1, + 155, 149, 150, -1,151, 152, 153, -1,153, 154, 155, -1,148, 149, 155, -1,155, 150, + 153, -1,156, 157, 100, -1,158, 157, 156, -1,156, 95, 159, -1,158, 156, 159, -1,2, + 163, 160, -1,162, 160, 163, -1,162, 161, 160, -1,7, 160, 161, -1,152, 165, 153, -1, + 153, 165, 93, -1,154, 153, 263, -1,93, 262, 153, -1,93, 166, 262, -1,155, 164, 148, -1, + 155, 265, 9, -1,9, 164, 155, -1,266, 174, 9, -1,174, 173, 7, -1,154, 264, 155, -1, + 167, 166, 95, -1,262, 263, 153, -1,263, 262, 168, -1,264, 263, 169, -1,263, 264, + 154, -1,167, 156, 168, -1,169, 263, 168, -1,168, 262, 167, -1,262, 166, 167, -1,264, + 169, 170, -1,266, 172, 173, -1,171, 266, 265, -1,266, 173, 174, -1,265, 266, 9, -1, + 170, 171, 265, -1,172, 160, 173, -1,171, 172, 266, -1,265, 264, 170, -1,264, 265, + 155, -1,178, 180, 175, -1,178, 179, 180, -1,180, 181, 182, -1,175, 176, 178, -1,177, + 178, 176, -1,180, 182, 175, -1,184, 81, 183, -1,185, 184, 183, -1,183, 76, 186, -1, + 185, 183, 186, -1,189, 187, 190, -1,21, 190, 187, -1,26, 187, 188, -1,189, 188, 187, -1, + 198, 183, 199, -1,197, 198, 267, -1,267, 268, 197, -1,267, 199, 200, -1,268, 267, + 180, -1,267, 198, 199, -1,197, 268, 269, -1,195, 196, 269, -1,194, 195, 270, -1,271, + 193, 194, -1,270, 269, 178, -1,187, 194, 193, -1,194, 270, 271, -1,270, 195, 269, -1, + 196, 197, 269, -1,268, 179, 269, -1,267, 200, 83, -1,267, 83, 180, -1,201, 181, 180, -1, + 179, 268, 180, -1,180, 83, 201, -1,269, 179, 178, -1,192, 21, 193, -1,192, 271, 19, -1, + 192, 193, 271, -1,19, 178, 191, -1,19, 271, 270, -1,177, 191, 178, -1,178, 19, 270, -1, + 200, 199, 81, -1,272, 183, 209, -1,209, 208, 274, -1,208, 207, 276, -1,183, 272, + 210, -1,209, 273, 272, -1,132, 272, 273, -1,208, 275, 274, -1,130, 274, 275, -1,129, + 275, 276, -1,208, 276, 275, -1,274, 131, 273, -1,209, 274, 273, -1,272, 132, 210, -1, + 277, 276, 207, -1,280, 206, 205, -1,204, 203, 284, -1,203, 156, 286, -1,204, 282, + 205, -1,207, 206, 278, -1,127, 277, 278, -1,126, 278, 279, -1,206, 279, 278, -1,205, + 281, 280, -1,124, 280, 281, -1,123, 281, 282, -1,205, 282, 281, -1,280, 124, 279, -1, + 206, 280, 279, -1,278, 277, 207, -1,204, 283, 282, -1,277, 127, 276, -1,131, 274, + 130, -1,126, 279, 125, -1,124, 125, 279, -1,281, 123, 124, -1,128, 129, 276, -1,126, + 127, 278, -1,129, 130, 275, -1,128, 276, 127, -1,131, 132, 273, -1,123, 282, 122, -1, + 204, 284, 283, -1,121, 283, 284, -1,203, 286, 285, -1,119, 285, 286, -1,118, 286, + 202, -1,156, 202, 286, -1,285, 119, 284, -1,203, 285, 284, -1,121, 284, 120, -1,284, + 119, 120, -1,202, 100, 118, -1,286, 118, 119, -1,122, 283, 121, -1,283, 122, 282, -1, + 76, 210, 132, -1,211, 26, 44, -1,288, 45, 46, -1,289, 46, 47, -1,45, 287, 44, -1, + 287, 45, 288, -1,187, 211, 287, -1,290, 47, 48, -1,289, 288, 46, -1,212, 288, 289, -1, + 291, 48, 49, -1,288, 212, 287, -1,211, 44, 287, -1,49, 50, 292, -1,51, 52, 294, -1, + 52, 53, 295, -1,293, 50, 51, -1,54, 55, 297, -1,55, 56, 298, -1,57, 58, 300, -1,58, + 2, 301, -1,299, 56, 57, -1,296, 53, 54, -1,47, 290, 289, -1,48, 291, 290, -1,213, + 290, 291, -1,50, 293, 292, -1,214, 292, 293, -1,215, 293, 294, -1,51, 294, 293, -1, + 292, 214, 291, -1,49, 292, 291, -1,213, 289, 290, -1,213, 291, 214, -1,295, 215, + 294, -1,215, 214, 293, -1,216, 215, 295, -1,213, 212, 289, -1,212, 187, 287, -1,52, + 295, 294, -1,54, 297, 296, -1,216, 296, 297, -1,56, 299, 298, -1,217, 298, 299, -1, + 218, 299, 300, -1,57, 300, 299, -1,298, 217, 297, -1,55, 298, 297, -1,217, 299, 218, -1, + 300, 301, 218, -1,219, 160, 301, -1,218, 301, 160, -1,2, 219, 301, -1,216, 297, 217, -1, + 216, 295, 296, -1,58, 301, 300, -1,53, 296, 295, -1,302, 209, 183, -1,302, 208, 209, -1, + 302, 198, 197, -1,197, 303, 302, -1,302, 303, 307, -1,302, 183, 198, -1,304, 303, + 197, -1,307, 208, 302, -1,312, 207, 307, -1,208, 307, 207, -1,317, 206, 312, -1,207, + 312, 206, -1,313, 312, 307, -1,314, 313, 308, -1,313, 307, 308, -1,313, 318, 317, -1, + 322, 317, 318, -1,313, 317, 312, -1,314, 318, 313, -1,317, 205, 206, -1,303, 308, + 307, -1,309, 308, 303, -1,304, 196, 195, -1,195, 305, 304, -1,309, 304, 305, -1,304, + 197, 196, -1,306, 305, 195, -1,306, 194, 187, -1,187, 212, 306, -1,311, 306, 212, -1, + 306, 195, 194, -1,306, 310, 305, -1,305, 310, 309, -1,314, 309, 310, -1,310, 315, + 314, -1,314, 315, 319, -1,314, 308, 309, -1,316, 315, 310, -1,212, 213, 311, -1,316, + 311, 213, -1,213, 214, 316, -1,316, 214, 321, -1,316, 310, 311, -1,320, 315, 316, -1, + 306, 311, 310, -1,309, 303, 304, -1,314, 319, 318, -1,322, 318, 323, -1,204, 205, + 322, -1,322, 327, 204, -1,203, 204, 327, -1,328, 327, 322, -1,324, 323, 319, -1,323, + 318, 319, -1,329, 328, 324, -1,323, 324, 328, -1,328, 322, 323, -1,325, 324, 319, -1, + 328, 332, 327, -1,205, 317, 322, -1,332, 328, 333, -1,156, 203, 332, -1,332, 168, + 156, -1,169, 168, 332, -1,334, 333, 329, -1,333, 328, 329, -1,170, 169, 334, -1,333, + 334, 169, -1,169, 332, 333, -1,335, 334, 329, -1,203, 327, 332, -1,330, 329, 324, -1, + 316, 321, 320, -1,325, 320, 321, -1,326, 325, 321, -1,330, 324, 325, -1,320, 325, + 319, -1,330, 325, 331, -1,216, 326, 215, -1,321, 215, 326, -1,217, 331, 216, -1,326, + 216, 331, -1,331, 325, 326, -1,331, 335, 330, -1,214, 215, 321, -1,331, 217, 336, -1, + 171, 335, 336, -1,335, 171, 170, -1,335, 329, 330, -1,172, 171, 336, -1,218, 336, + 217, -1,218, 160, 172, -1,218, 172, 336, -1,335, 331, 336, -1,170, 334, 335, -1,315, + 320, 319, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,4, 0, 3, -1,7, 6, 5, -1,10, 9, 8, -1,7, 11, 6, -1,13, 9, 12, -1,14, 3, + 10, -1,4, 15, 2, -1,3, 16, 4, -1,19, 18, 17, -1,20, 19, 17, -1,20, 5, 19, -1,6, 19, + 5, -1,11, 12, 6, -1,18, 19, 21, -1,4, 2, 0, -1,23, 21, 22, -1,25, 24, 22, -1,28, + 27, 26, -1,31, 30, 29, -1,30, 33, 32, -1,32, 35, 34, -1,36, 25, 28, -1,35, 38, 37, -1, + 22, 24, 39, -1,34, 38, 27, -1,41, 25, 40, -1,29, 30, 32, -1,43, 29, 42, -1,31, 29, + 43, -1,43, 44, 31, -1,23, 22, 39, -1,23, 18, 21, -1,3, 14, 16, -1,41, 24, 25, -1, + 45, 14, 10, -1,8, 45, 10, -1,12, 47, 46, -1,46, 13, 12, -1,47, 12, 11, -1,46, 48, + 13, -1,9, 13, 8, -1,48, 8, 13, -1,46, 47, 49, -1,48, 46, 49, -1,49, 47, 50, -1,14, + 45, 8, -1,25, 36, 40, -1,26, 51, 28, -1,38, 52, 27, -1,52, 26, 27, -1,37, 34, 35, -1, + 37, 38, 34, -1,52, 53, 26, -1,35, 32, 33, -1,36, 28, 51, -1,26, 53, 54, -1,54, 55, + 26, -1,51, 55, 56, -1,53, 52, 38, -1,51, 26, 55, -1,43, 42, 57, -1,59, 57, 58, -1, + 62, 61, 60, -1,64, 60, 63, -1,61, 65, 58, -1,57, 59, 43, -1,44, 43, 59, -1,66, 59, + 65, -1,58, 65, 59, -1,60, 64, 62, -1,67, 62, 64, -1,69, 64, 68, -1,63, 68, 64, -1, + 62, 70, 65, -1,61, 62, 65, -1,71, 68, 63, -1,71, 73, 72, -1,75, 72, 74, -1,78, 77, + 76, -1,77, 80, 79, -1,81, 74, 78, -1,83, 80, 82, -1,71, 72, 75, -1,84, 71, 75, -1, + 86, 82, 85, -1,85, 88, 87, -1,90, 1, 89, -1,91, 88, 90, -1,75, 74, 81, -1,71, 63, + 73, -1,71, 92, 68, -1,66, 65, 70, -1,70, 62, 67, -1,78, 76, 81, -1,81, 76, 93, -1, + 76, 79, 94, -1,77, 79, 76, -1,69, 67, 64, -1,44, 59, 66, -1,69, 68, 92, -1,92, 71, + 84, -1,75, 81, 95, -1,76, 94, 93, -1,81, 93, 95, -1,84, 75, 95, -1,96, 94, 79, -1, + 82, 86, 83, -1,97, 83, 86, -1,98, 86, 87, -1,85, 87, 86, -1,90, 89, 91, -1,99, 91, + 89, -1,100, 89, 2, -1,1, 2, 89, -1,91, 101, 87, -1,88, 91, 87, -1,83, 97, 96, -1, + 86, 98, 97, -1,91, 99, 101, -1,2, 15, 100, -1,89, 100, 99, -1,87, 101, 98, -1,96, + 79, 83, -1,80, 83, 79, -1,104, 103, 102, -1,107, 106, 105, -1,107, 108, 106, -1,106, + 108, 103, -1,110, 109, 104, -1,110, 111, 109, -1,104, 111, 110, -1,102, 108, 112, -1, + 102, 112, 104, -1,107, 114, 113, -1,108, 107, 113, -1,103, 108, 102, -1,114, 116, + 115, -1,119, 118, 117, -1,117, 118, 120, -1,117, 121, 119, -1,124, 123, 122, -1,119, + 121, 124, -1,125, 119, 122, -1,118, 119, 125, -1,127, 126, 123, -1,123, 128, 122, -1, + 126, 127, 129, -1,130, 118, 125, -1,124, 122, 119, -1,133, 132, 131, -1,136, 135, + 134, -1,138, 134, 137, -1,141, 140, 139, -1,112, 108, 113, -1,142, 141, 139, -1,144, + 143, 142, -1,134, 145, 136, -1,136, 145, 146, -1,138, 109, 111, -1,134, 138, 145, -1, + 113, 114, 115, -1,115, 140, 141, -1,116, 147, 115, -1,111, 104, 112, -1,143, 141, + 142, -1,150, 149, 148, -1,144, 150, 143, -1,150, 148, 151, -1,128, 125, 122, -1,131, + 153, 152, -1,129, 127, 123, -1,153, 154, 152, -1,132, 133, 155, -1,149, 150, 144, -1, + 157, 130, 156, -1,151, 156, 150, -1,147, 140, 115, -1,128, 123, 126, -1,156, 130, + 125, -1,129, 155, 133, -1,152, 158, 131, -1,157, 156, 151, -1,132, 153, 131, -1,133, + 126, 129, -1,137, 109, 138, -1,152, 154, 57, -1,59, 57, 58, -1,62, 61, 60, -1,64, + 60, 63, -1,61, 65, 58, -1,57, 59, 152, -1,158, 152, 59, -1,66, 59, 65, -1,58, 65, + 59, -1,60, 64, 62, -1,67, 62, 64, -1,69, 64, 68, -1,63, 68, 64, -1,62, 70, 65, -1, + 61, 62, 65, -1,71, 68, 63, -1,71, 73, 72, -1,75, 72, 74, -1,78, 77, 76, -1,77, 80, + 79, -1,81, 74, 78, -1,83, 80, 82, -1,71, 72, 75, -1,84, 71, 75, -1,86, 82, 85, -1, + 85, 88, 87, -1,90, 135, 89, -1,91, 88, 90, -1,75, 74, 81, -1,71, 63, 73, -1,71, 92, + 68, -1,66, 65, 70, -1,70, 62, 67, -1,78, 76, 81, -1,81, 76, 93, -1,76, 79, 94, -1, + 77, 79, 76, -1,69, 67, 64, -1,158, 59, 66, -1,69, 68, 92, -1,92, 71, 84, -1,75, 81, + 95, -1,76, 94, 93, -1,81, 93, 95, -1,84, 75, 95, -1,96, 94, 79, -1,82, 86, 83, -1, + 97, 83, 86, -1,98, 86, 87, -1,85, 87, 86, -1,90, 89, 91, -1,99, 91, 89, -1,100, 89, + 136, -1,135, 136, 89, -1,91, 101, 87, -1,88, 91, 87, -1,83, 97, 96, -1,86, 98, 97, -1, + 91, 99, 101, -1,136, 146, 100, -1,89, 100, 99, -1,87, 101, 98, -1,96, 79, 83, -1, + 80, 83, 79, -1,81, 81, 81, -1,81, 81, 81, -1,81, 81, 81, -1,81, 81, 81, -1,81, 81, + 81, -1,81, 81, 81, -1,161, 160, 159, -1,162, 160, 161, -1,161, 164, 163, -1,162, + 161, 163, -1,167, 166, 165, -1,168, 165, 166, -1,168, 169, 165, -1,170, 165, 169, -1, + 172, 172, 171, -1,171, 172, 173, -1,175, 171, 174, -1,173, 176, 171, -1,173, 177, + 176, -1,179, 178, 178, -1,179, 181, 180, -1,180, 178, 179, -1,183, 182, 180, -1,182, + 184, 170, -1,175, 185, 179, -1,186, 177, 164, -1,176, 174, 171, -1,174, 176, 187, -1, + 185, 174, 188, -1,174, 185, 175, -1,186, 161, 187, -1,188, 174, 187, -1,187, 176, + 186, -1,176, 177, 186, -1,185, 188, 189, -1,183, 190, 184, -1,191, 183, 181, -1,183, + 184, 182, -1,181, 183, 180, -1,189, 191, 181, -1,190, 165, 184, -1,191, 190, 183, -1, + 181, 185, 189, -1,185, 181, 179, -1,81, 81, 81, -1,81, 81, 81, -1,81, 81, 81, -1, + 81, 81, 81, -1,81, 81, 81, -1,81, 81, 81, -1,194, 193, 192, -1,195, 194, 192, -1, + 192, 197, 196, -1,195, 192, 196, -1,200, 199, 198, -1,201, 198, 199, -1,203, 199, + 202, -1,200, 202, 199, -1,205, 192, 204, -1,207, 205, 206, -1,206, 208, 207, -1,206, + 204, 209, -1,208, 206, 210, -1,206, 205, 204, -1,207, 208, 211, -1,213, 212, 211, -1, + 215, 213, 214, -1,217, 216, 215, -1,214, 211, 218, -1,199, 215, 216, -1,215, 214, + 217, -1,214, 213, 211, -1,212, 207, 211, -1,208, 219, 211, -1,206, 209, 220, -1,206, + 220, 210, -1,221, 221, 210, -1,219, 208, 210, -1,210, 220, 221, -1,211, 219, 218, -1, + 222, 201, 216, -1,222, 217, 223, -1,222, 216, 217, -1,223, 218, 224, -1,223, 217, + 214, -1,224, 224, 218, -1,218, 223, 214, -1,209, 204, 193, -1,226, 192, 225, -1,225, + 228, 227, -1,228, 230, 229, -1,192, 226, 231, -1,225, 232, 226, -1,233, 226, 232, -1, + 228, 234, 227, -1,235, 227, 234, -1,236, 234, 229, -1,228, 229, 234, -1,227, 237, + 232, -1,225, 227, 232, -1,226, 233, 231, -1,238, 229, 230, -1,241, 240, 239, -1,244, + 243, 242, -1,243, 161, 245, -1,244, 246, 239, -1,230, 240, 247, -1,248, 238, 247, -1, + 250, 247, 249, -1,240, 249, 247, -1,239, 251, 241, -1,252, 241, 251, -1,253, 251, + 246, -1,239, 246, 251, -1,241, 252, 249, -1,240, 241, 249, -1,247, 238, 230, -1,244, + 254, 246, -1,238, 248, 229, -1,237, 227, 235, -1,250, 249, 255, -1,252, 255, 249, -1, + 251, 253, 252, -1,256, 236, 229, -1,250, 248, 247, -1,236, 235, 234, -1,256, 229, + 248, -1,237, 233, 232, -1,253, 246, 257, -1,244, 242, 254, -1,258, 254, 242, -1,243, + 245, 259, -1,260, 259, 245, -1,262, 245, 261, -1,161, 261, 245, -1,259, 260, 242, -1, + 243, 259, 242, -1,258, 242, 263, -1,242, 260, 263, -1,261, 159, 262, -1,245, 262, + 260, -1,257, 254, 258, -1,254, 257, 246, -1,197, 231, 233, -1,265, 203, 264, -1,268, + 267, 266, -1,270, 266, 269, -1,267, 271, 264, -1,271, 267, 268, -1,199, 265, 271, -1, + 273, 269, 272, -1,270, 268, 266, -1,274, 268, 270, -1,276, 272, 275, -1,268, 274, + 271, -1,265, 264, 271, -1,275, 278, 277, -1,281, 280, 279, -1,280, 283, 282, -1,284, + 278, 281, -1,287, 286, 285, -1,286, 289, 288, -1,292, 291, 290, -1,291, 167, 293, -1, + 294, 289, 292, -1,295, 283, 287, -1,269, 273, 270, -1,272, 276, 273, -1,296, 273, + 276, -1,278, 284, 277, -1,297, 277, 284, -1,298, 284, 279, -1,281, 279, 284, -1,277, + 297, 276, -1,275, 277, 276, -1,296, 270, 273, -1,296, 276, 297, -1,282, 298, 279, -1, + 298, 297, 284, -1,299, 298, 282, -1,296, 274, 270, -1,274, 199, 271, -1,280, 282, + 279, -1,287, 285, 295, -1,299, 295, 285, -1,289, 294, 288, -1,300, 288, 294, -1,301, + 294, 290, -1,292, 290, 294, -1,288, 300, 285, -1,286, 288, 285, -1,300, 294, 301, -1, + 290, 293, 301, -1,302, 165, 293, -1,301, 293, 165, -1,167, 302, 293, -1,299, 285, + 300, -1,299, 282, 295, -1,291, 293, 290, -1,283, 295, 282, -1,303, 225, 192, -1,303, + 228, 225, -1,303, 205, 207, -1,207, 304, 303, -1,303, 304, 305, -1,303, 192, 205, -1, + 306, 304, 207, -1,305, 228, 303, -1,307, 230, 305, -1,228, 305, 230, -1,308, 240, + 307, -1,230, 307, 240, -1,309, 307, 305, -1,311, 309, 310, -1,309, 305, 310, -1,309, + 312, 308, -1,313, 308, 312, -1,309, 308, 307, -1,311, 312, 309, -1,308, 239, 240, -1, + 304, 310, 305, -1,314, 310, 304, -1,306, 212, 213, -1,213, 315, 306, -1,314, 306, + 315, -1,306, 207, 212, -1,316, 315, 213, -1,316, 215, 199, -1,199, 274, 316, -1,317, + 316, 274, -1,316, 213, 215, -1,316, 318, 315, -1,315, 318, 314, -1,311, 314, 318, -1, + 318, 319, 311, -1,311, 319, 320, -1,311, 310, 314, -1,321, 319, 318, -1,274, 296, + 317, -1,321, 317, 296, -1,296, 297, 321, -1,321, 297, 322, -1,321, 318, 317, -1,323, + 319, 321, -1,316, 317, 318, -1,314, 304, 306, -1,311, 320, 312, -1,313, 312, 324, -1, + 244, 239, 313, -1,313, 325, 244, -1,243, 244, 325, -1,326, 325, 313, -1,327, 324, + 320, -1,324, 312, 320, -1,328, 326, 327, -1,324, 327, 326, -1,326, 313, 324, -1,329, + 327, 320, -1,326, 330, 325, -1,239, 308, 313, -1,330, 326, 331, -1,161, 243, 330, -1, + 330, 187, 161, -1,188, 187, 330, -1,332, 331, 328, -1,331, 326, 328, -1,189, 188, + 332, -1,331, 332, 188, -1,188, 330, 331, -1,333, 332, 328, -1,243, 325, 330, -1,334, + 328, 327, -1,321, 322, 323, -1,329, 323, 322, -1,335, 329, 322, -1,334, 327, 329, -1, + 323, 329, 320, -1,334, 329, 336, -1,299, 335, 298, -1,322, 298, 335, -1,300, 336, + 299, -1,335, 299, 336, -1,336, 329, 335, -1,336, 333, 334, -1,297, 298, 322, -1,336, + 300, 337, -1,191, 333, 337, -1,333, 191, 189, -1,333, 328, 334, -1,190, 191, 337, -1, + 301, 337, 300, -1,301, 165, 190, -1,301, 190, 337, -1,333, 336, 337, -1,189, 332, + 333, -1,319, 323, 320, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/link6.wrl b/examples/rlsg/staeubli-tx60l/link6.wrl new file mode 100644 index 00000000..251424ef --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/link6.wrl @@ -0,0 +1,635 @@ +#VRML V2.0 utf8 + +DEF link6 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.533333 0.533333 0.533333 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.376471 0.376471 0.376471 + ambientIntensity 0.200000 + shininess 1.000000 + } + } + geometry IndexedFaceSet { + coord Coordinate { point [ + # points 480 + -0.011 0 -0.0165579, -0.010162 0.00421 -0.0165579, -0.007778 0.007779 -0.0165579, -0.00421 0.010163 -0.0165579, + 0 0.011 -0.0165579, 0.00421 0.010163 -0.0165579, 0.007778 0.007779 -0.0165579, 0.010162 0.00421 -0.0165579, + 0.011 0 -0.0165579, 0.011 0 -0.0113089, 0.011 0 -0.00606, 0.010162 0.00421 -0.00606, 0.007778 0.007779 -0.00606, + 0.00421 0.010163 -0.00606, 0 0.011 -0.00606, -0.00421 0.010163 -0.00606, -0.007778 0.007779 -0.00606, + -0.010162 0.00421 -0.00606, -0.011 0 -0.00606, -0.011 0 -0.0113089, 0.010162 -0.004209 -0.0165579, + 0.007778 -0.007779 -0.0165579, 0.00421 -0.010163 -0.0165579, 0 -0.011 -0.0165579, -0.00421 -0.010163 -0.0165579, + -0.007778 -0.007779 -0.0165579, -0.010162 -0.004209 -0.0165579, -0.010162 -0.004209 -0.00606, -0.007778 -0.007779 -0.00606, + -0.00421 -0.010163 -0.00606, 0 -0.011 -0.00606, 0.00421 -0.010163 -0.00606, 0.007778 -0.007779 -0.00606, + 0.010162 -0.004209 -0.00606, 0.02 0 -0.00606, 0.018478 0.007655 -0.00606, 0.014142 0.014142 -0.00606, + 0.007654 0.018479 -0.00606, 0 0.020001 -0.00606, -0.007654 0.018479 -0.00606, -0.014142 0.014142 -0.00606, + -0.018478 0.007655 -0.00606, -0.02 0 -0.00606, -0.018478 -0.007654 -0.00606, -0.014142 -0.014142 -0.00606, + -0.007654 -0.018478 -0.00606, 0 -0.02 -0.00606, 0.007654 -0.018478 -0.00606, 0.014142 -0.014142 -0.00606, + 0.018478 -0.007654 -0.00606, 0.012598 0.0126 -0.00606, 0.013046 0.011927 -0.00606, 0.013204 0.011137 -0.00606, + 0.013046 0.010346 -0.00606, 0.012598 0.009675 -0.00606, 0.011928 0.009228 -0.00606, 0.011137 0.00907 -0.00606, + 0.010345 0.009228 -0.00606, 0.009675 0.009675 -0.00606, 0.009227 0.010346 -0.00606, 0.00907 0.011137 -0.00606, + 0.009227 0.011927 -0.00606, 0.009675 0.0126 -0.00606, 0.010345 0.013047 -0.00606, 0.011137 0.013203 -0.00606, + 0.011928 0.013047 -0.00606, -0.012598 0.0126 -0.00606, -0.011928 0.013047 -0.00606, -0.011137 0.013203 -0.00606, + -0.010345 0.013047 -0.00606, -0.009675 0.0126 -0.00606, -0.009227 0.011927 -0.00606, -0.00907 0.011137 -0.00606, + -0.009227 0.010346 -0.00606, -0.009675 0.009675 -0.00606, -0.010345 0.009228 -0.00606, -0.011137 0.00907 -0.00606, + -0.011928 0.009228 -0.00606, -0.012598 0.009675 -0.00606, -0.013046 0.010346 -0.00606, -0.013204 0.011137 -0.00606, + -0.013046 0.011927 -0.00606, -0.012598 -0.012599 -0.00606, -0.013046 -0.011928 -0.00606, -0.013204 -0.011137 -0.00606, + -0.013046 -0.010346 -0.00606, -0.012598 -0.009676 -0.00606, -0.011928 -0.009227 -0.00606, -0.011137 -0.00907 -0.00606, + -0.010345 -0.009227 -0.00606, -0.009675 -0.009676 -0.00606, -0.009227 -0.010346 -0.00606, -0.00907 -0.011137 -0.00606, + -0.009227 -0.011928 -0.00606, -0.009675 -0.012599 -0.00606, -0.010345 -0.013047 -0.00606, -0.011137 -0.013204 -0.00606, + -0.011928 -0.013047 -0.00606, 0.012598 -0.012599 -0.00606, 0.011928 -0.013047 -0.00606, 0.011137 -0.013204 -0.00606, + 0.010345 -0.013047 -0.00606, 0.009675 -0.012599 -0.00606, 0.009227 -0.011928 -0.00606, 0.00907 -0.011137 -0.00606, + 0.009227 -0.010346 -0.00606, 0.009675 -0.009676 -0.00606, 0.010345 -0.009227 -0.00606, 0.011137 -0.00907 -0.00606, + 0.011928 -0.009227 -0.00606, 0.012598 -0.009676 -0.00606, 0.013046 -0.010346 -0.00606, 0.013204 -0.011137 -0.00606, + 0.013046 -0.011928 -0.00606, 0 -0.01825 -0.00606, -0.000957 -0.01806 -0.00606, -0.001768 -0.017518 -0.00606, + -0.00231 -0.016707 -0.00606, -0.0025 -0.01575 -0.00606, -0.00231 -0.014793 -0.00606, -0.001768 -0.013982 -0.00606, + -0.000957 -0.01344 -0.00606, 0 -0.01325 -0.00606, 0.000957 -0.01344 -0.00606, 0.001768 -0.013982 -0.00606, + 0.00231 -0.014793 -0.00606, 0.0025 -0.01575 -0.00606, 0.00231 -0.016707 -0.00606, 0.001768 -0.017518 -0.00606, + 0.000957 -0.01806 -0.00606, 0.02 0 -0.00300801, 0.02 0 4.39882e-005, 0.018478 0.007655 4.39882e-005, + 0.014142 0.014142 4.39882e-005, 0.007654 0.018479 4.39882e-005, 0 0.020001 4.39882e-005, -0.007654 0.018479 4.39882e-005, + -0.014142 0.014142 4.39882e-005, -0.018478 0.007655 4.39882e-005, -0.02 0 4.39882e-005, -0.02 0 -0.00300801, + -0.018478 -0.007654 4.39882e-005, -0.014142 -0.014142 4.39882e-005, -0.007654 -0.018478 4.39882e-005, 0 -0.02 4.39882e-005, + 0.007654 -0.018478 4.39882e-005, 0.014142 -0.014142 4.39882e-005, 0.018478 -0.007654 4.39882e-005, + 0.012598 0.0126 4.39882e-005, 0.013046 0.011927 4.39882e-005, 0.013204 0.011137 4.39882e-005, 0.013046 0.010346 4.39882e-005, + 0.012598 0.009675 4.39882e-005, 0.011928 0.009228 4.39882e-005, 0.011137 0.00907 4.39882e-005, 0.010345 0.009228 4.39882e-005, + 0.009675 0.009675 4.39882e-005, 0.009227 0.010346 4.39882e-005, 0.00907 0.011137 4.39882e-005, 0.009227 0.011927 4.39882e-005, + 0.009675 0.0126 4.39882e-005, 0.010345 0.013047 4.39882e-005, 0.011137 0.013203 4.39882e-005, 0.011928 0.013047 4.39882e-005, + -0.012598 0.0126 4.39882e-005, -0.011928 0.013047 4.39882e-005, -0.011137 0.013203 4.39882e-005, + -0.010345 0.013047 4.39882e-005, -0.009675 0.0126 4.39882e-005, -0.009227 0.011927 4.39882e-005, + -0.00907 0.011137 4.39882e-005, -0.009227 0.010346 4.39882e-005, -0.009675 0.009675 4.39882e-005, + -0.010345 0.009228 4.39882e-005, -0.011137 0.00907 4.39882e-005, -0.011928 0.009228 4.39882e-005, + -0.012598 0.009675 4.39882e-005, -0.013046 0.010346 4.39882e-005, -0.013204 0.011137 4.39882e-005, + -0.013046 0.011927 4.39882e-005, -0.012598 -0.012599 4.39882e-005, -0.013046 -0.011928 4.39882e-005, + -0.013204 -0.011137 4.39882e-005, -0.013046 -0.010346 4.39882e-005, -0.012598 -0.009676 4.39882e-005, + -0.011928 -0.009227 4.39882e-005, -0.011137 -0.00907 4.39882e-005, -0.010345 -0.009227 4.39882e-005, + -0.009675 -0.009676 4.39882e-005, -0.009227 -0.010346 4.39882e-005, -0.00907 -0.011137 4.39882e-005, + -0.009227 -0.011928 4.39882e-005, -0.009675 -0.012599 4.39882e-005, -0.010345 -0.013047 4.39882e-005, + -0.011137 -0.013204 4.39882e-005, -0.011928 -0.013047 4.39882e-005, 0.012598 -0.012599 4.39882e-005, + 0.011928 -0.013047 4.39882e-005, 0.011137 -0.013204 4.39882e-005, 0.010345 -0.013047 4.39882e-005, + 0.009675 -0.012599 4.39882e-005, 0.009227 -0.011928 4.39882e-005, 0.00907 -0.011137 4.39882e-005, + 0.009227 -0.010346 4.39882e-005, 0.009675 -0.009676 4.39882e-005, 0.010345 -0.009227 4.39882e-005, + 0.011137 -0.00907 4.39882e-005, 0.011928 -0.009227 4.39882e-005, 0.012598 -0.009676 4.39882e-005, + 0.013046 -0.010346 4.39882e-005, 0.013204 -0.011137 4.39882e-005, 0.013046 -0.011928 4.39882e-005, 0 -0.01825 4.39882e-005, + -0.000957 -0.01806 4.39882e-005, -0.001768 -0.017518 4.39882e-005, -0.00231 -0.016707 4.39882e-005, + -0.0025 -0.01575 4.39882e-005, -0.00231 -0.014793 4.39882e-005, -0.001768 -0.013982 4.39882e-005, + -0.000957 -0.01344 4.39882e-005, 0 -0.01325 4.39882e-005, 0.000957 -0.01344 4.39882e-005, 0.001768 -0.013982 4.39882e-005, + 0.00231 -0.014793 4.39882e-005, 0.0025 -0.01575 4.39882e-005, 0.00231 -0.016707 4.39882e-005, 0.001768 -0.017518 4.39882e-005, + 0.000957 -0.01806 4.39882e-005, 0.01 0 4.39882e-005, 0.009239 -0.003828 4.39882e-005, 0.007071 -0.007071 4.39882e-005, + 0.003827 -0.009239 4.39882e-005, 0 -0.01 4.39882e-005, -0.003827 -0.009239 4.39882e-005, -0.007071 -0.007071 4.39882e-005, + -0.009239 -0.003828 4.39882e-005, -0.01 0 4.39882e-005, -0.009239 0.003827 4.39882e-005, -0.007071 0.007071 4.39882e-005, + -0.003827 0.00924 4.39882e-005, 0 0.010001 4.39882e-005, 0.003827 0.00924 4.39882e-005, 0.007071 0.007071 4.39882e-005, + 0.009239 0.003827 4.39882e-005, -0.01 0 -0.00447297, -0.009239 0.003827 -0.00447297, -0.007071 0.007071 -0.00447297, + -0.003827 0.00924 -0.00447297, 0 0.010001 -0.00447297, 0.003827 0.00924 -0.00447297, 0.007071 0.007071 -0.00447297, + 0.009239 0.003827 -0.00447297, 0.01 0 -0.00447297, 0.01 0 -0.00227499, -0.01 0 -0.00227499, 0.009239 -0.003828 -0.00447297, + 0.007071 -0.007071 -0.00447297, 0.003827 -0.009239 -0.00447297, 0 -0.01 -0.00447297, -0.003827 -0.009239 -0.00447297, + -0.007071 -0.007071 -0.00447297, -0.009239 -0.003828 -0.00447297, 0.007 0 -0.00447297, 0.006467 -0.002679 -0.00447297, + 0.00495 -0.00495 -0.00447297, 0.002679 -0.006467 -0.00447297, 0 -0.007 -0.00447297, -0.002679 -0.006467 -0.00447297, + -0.00495 -0.00495 -0.00447297, -0.006467 -0.002679 -0.00447297, -0.007 0 -0.00447297, -0.006467 0.002678 -0.00447297, + -0.00495 0.00495 -0.00447297, -0.002679 0.006466 -0.00447297, 0 0.007 -0.00447297, 0.002679 0.006466 -0.00447297, + 0.00495 0.00495 -0.00447297, 0.006467 0.002678 -0.00447297, -0.007 0 -0.012651, -0.006467 0.002678 -0.012651, + -0.00495 0.00495 -0.012651, -0.002679 0.006466 -0.012651, 0 0.007 -0.012651, 0.002679 0.006466 -0.012651, + 0.00495 0.00495 -0.012651, 0.006467 0.002678 -0.012651, 0.007 0 -0.012651, 0.007 0 -0.008623, -0.007 0 -0.008623, + 0.006467 -0.002679 -0.012651, 0.00495 -0.00495 -0.012651, 0.002679 -0.006467 -0.012651, 0 -0.007 -0.012651, + -0.002679 -0.006467 -0.012651, -0.00495 -0.00495 -0.012651, -0.006467 -0.002679 -0.012651, -0.00425 0 -0.012651, + -0.003927 0.001626 -0.012651, -0.003005 0.003005 -0.012651, -0.001626 0.003926 -0.012651, 0 0.00425 -0.012651, + 0.001626 0.003926 -0.012651, 0.003005 0.003005 -0.012651, 0.003927 0.001626 -0.012651, 0.00425 0 -0.012651, + 0.003927 -0.001627 -0.012651, 0.003005 -0.003006 -0.012651, 0.001626 -0.003927 -0.012651, 0 -0.00425 -0.012651, + -0.001626 -0.003927 -0.012651, -0.003005 -0.003006 -0.012651, -0.003927 -0.001627 -0.012651, -0.00425 0 -0.0165579, + -0.003927 0.001626 -0.0165579, -0.003005 0.003005 -0.0165579, -0.001626 0.003926 -0.0165579, 0 0.00425 -0.0165579, + 0.001626 0.003926 -0.0165579, 0.003005 0.003005 -0.0165579, 0.003927 0.001626 -0.0165579, 0.00425 0 -0.0165579, + 0.00425 0 -0.014604, -0.00425 0 -0.014604, 0.003927 -0.001627 -0.0165579, 0.003005 -0.003006 -0.0165579, + 0.001626 -0.003927 -0.0165579, 0 -0.00425 -0.0165579, -0.001626 -0.003927 -0.0165579, -0.003005 -0.003006 -0.0165579, + -0.003927 -0.001627 -0.0165579, 0 -0.01825 -0.00300801, 0 -0.01325 -0.00300801, 0.012598 0.0126 -0.00300801, + 0.009675 0.009675 -0.00300801, -0.012598 0.0126 -0.00300801, -0.009675 0.009675 -0.00300801, -0.012598 -0.012599 -0.00300801, + -0.009675 -0.009676 -0.00300801, 0.012598 -0.012599 -0.00300801, 0.009675 -0.009676 -0.00300801, 0.010162 0.00421 -0.0113089, + 0.007778 0.007779 -0.0113089, 0.00421 0.010163 -0.0113089, 0 0.011 -0.0113089, -0.00421 0.010163 -0.0113089, + -0.007778 0.007779 -0.0113089, -0.010162 0.00421 -0.0113089, -0.010162 -0.004209 -0.0113089, -0.007778 -0.007779 -0.0113089, + -0.00421 -0.010163 -0.0113089, 0 -0.011 -0.0113089, 0.00421 -0.010163 -0.0113089, 0.007778 -0.007779 -0.0113089, + 0.010162 -0.004209 -0.0113089, 0.018478 0.007655 -0.00300801, 0.014142 0.014142 -0.00300801, 0.007654 0.018479 -0.00300801, + 0 0.020001 -0.00300801, -0.007654 0.018479 -0.00300801, -0.014142 0.014142 -0.00300801, -0.018478 0.007655 -0.00300801, + -0.018478 -0.007654 -0.00300801, -0.014142 -0.014142 -0.00300801, -0.007654 -0.018478 -0.00300801, 0 -0.02 -0.00300801, + 0.007654 -0.018478 -0.00300801, 0.014142 -0.014142 -0.00300801, 0.018478 -0.007654 -0.00300801, 0.009239 0.003827 -0.00227499, + 0.007071 0.007071 -0.00227499, 0.003827 0.00924 -0.00227499, 0 0.010001 -0.00227499, -0.003827 0.00924 -0.00227499, + -0.007071 0.007071 -0.00227499, -0.009239 0.003827 -0.00227499, -0.009239 -0.003828 -0.00227499, + -0.007071 -0.007071 -0.00227499, -0.003827 -0.009239 -0.00227499, 0 -0.01 -0.00227499, 0.003827 -0.009239 -0.00227499, + 0.007071 -0.007071 -0.00227499, 0.009239 -0.003828 -0.00227499, 0.006467 0.002678 -0.008623, 0.00495 0.00495 -0.008623, + 0.002679 0.006466 -0.008623, 0 0.007 -0.008623, -0.002679 0.006466 -0.008623, -0.00495 0.00495 -0.008623, + -0.006467 0.002678 -0.008623, -0.006467 -0.002679 -0.008623, -0.00495 -0.00495 -0.008623, -0.002679 -0.006467 -0.008623, + 0 -0.007 -0.008623, 0.002679 -0.006467 -0.008623, 0.00495 -0.00495 -0.008623, 0.006467 -0.002679 -0.008623, + 0.003927 0.001626 -0.014604, 0.003005 0.003005 -0.014604, 0.001626 0.003926 -0.014604, 0 0.00425 -0.014604, + -0.001626 0.003926 -0.014604, -0.003005 0.003005 -0.014604, -0.003927 0.001626 -0.014604, -0.003927 -0.001627 -0.014604, + -0.003005 -0.003006 -0.014604, -0.001626 -0.003927 -0.014604, 0 -0.00425 -0.014604, 0.001626 -0.003927 -0.014604, + 0.003005 -0.003006 -0.014604, 0.003927 -0.001627 -0.014604, 0.000957 -0.01806 -0.00300801, 0.001768 -0.017518 -0.00300801, + 0.00231 -0.016707 -0.00300801, 0.0025 -0.01575 -0.00300801, 0.00231 -0.014793 -0.00300801, 0.001768 -0.013982 -0.00300801, + 0.000957 -0.01344 -0.00300801, -0.000957 -0.01344 -0.00300801, -0.001768 -0.013982 -0.00300801, + -0.00231 -0.014793 -0.00300801, -0.0025 -0.01575 -0.00300801, -0.00231 -0.016707 -0.00300801, -0.001768 -0.017518 -0.00300801, + -0.000957 -0.01806 -0.00300801, 0.011928 0.013047 -0.00300801, 0.011137 0.013203 -0.00300801, 0.010345 0.013047 -0.00300801, + 0.009675 0.0126 -0.00300801, 0.009227 0.011927 -0.00300801, 0.00907 0.011137 -0.00300801, 0.009227 0.010346 -0.00300801, + 0.010345 0.009228 -0.00300801, 0.011137 0.00907 -0.00300801, 0.011928 0.009228 -0.00300801, 0.012598 0.009675 -0.00300801, + 0.013046 0.010346 -0.00300801, 0.013204 0.011137 -0.00300801, 0.013046 0.011927 -0.00300801, -0.013046 0.011927 -0.00300801, + -0.013204 0.011137 -0.00300801, -0.013046 0.010346 -0.00300801, -0.012598 0.009675 -0.00300801, + -0.011928 0.009228 -0.00300801, -0.011137 0.00907 -0.00300801, -0.010345 0.009228 -0.00300801, -0.009227 0.010346 -0.00300801, + -0.00907 0.011137 -0.00300801, -0.009227 0.011927 -0.00300801, -0.009675 0.0126 -0.00300801, -0.010345 0.013047 -0.00300801, + -0.011137 0.013203 -0.00300801, -0.011928 0.013047 -0.00300801, -0.011928 -0.013047 -0.00300801, + -0.011137 -0.013204 -0.00300801, -0.010345 -0.013047 -0.00300801, -0.009675 -0.012599 -0.00300801, + -0.009227 -0.011928 -0.00300801, -0.00907 -0.011137 -0.00300801, -0.009227 -0.010346 -0.00300801, + -0.010345 -0.009227 -0.00300801, -0.011137 -0.00907 -0.00300801, -0.011928 -0.009227 -0.00300801, + -0.012598 -0.009676 -0.00300801, -0.013046 -0.010346 -0.00300801, -0.013204 -0.011137 -0.00300801, + -0.013046 -0.011928 -0.00300801, 0.013046 -0.011928 -0.00300801, 0.013204 -0.011137 -0.00300801, + 0.013046 -0.010346 -0.00300801, 0.012598 -0.009676 -0.00300801, 0.011928 -0.009227 -0.00300801, 0.011137 -0.00907 -0.00300801, + 0.010345 -0.009227 -0.00300801, 0.009227 -0.010346 -0.00300801, 0.00907 -0.011137 -0.00300801, 0.009227 -0.011928 -0.00300801, + 0.009675 -0.012599 -0.00300801, 0.010345 -0.013047 -0.00300801, 0.011137 -0.013204 -0.00300801, 0.011928 -0.013047 -0.00300801] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 434 + 0.94716 0.320763 0, 0.997804 -0.066235 0, 1 -2.28055e-005 0, 0.707152 0.707061 0, 0.923881 0.382679 0, 0.997807 0.0661895 0, + 0.734711 0.67838 0, 0.896561 0.442921 0, 0.408728 0.912656 0, 0.0661257 0.997811 0, 0.382633 0.9239 0, 0 1 0, + -0.320657 0.947195 0, -0.896561 0.442921 0, -0.658805 0.752314 0, -0.707152 0.707061 0, -0.382633 0.9239 0, + -0.923881 0.382679 0, -0.997807 0.0661895 0, 0.658805 0.752314 0, -0.0661257 0.997811 0, 0.320657 0.947195 0, + -0.442932 0.896555 0, -0.752399 0.658708 0, -1 -2.28055e-005 0, -0.94716 0.320763 0, -0.997804 -0.066235 0, + -0.947164 -0.320751 0, -0.707198 -0.707015 0, -0.923897 -0.38264 0, -0.734764 -0.678323 0, -0.896592 -0.442857 0, + -0.408728 -0.912656 0, -0.0661257 -0.997811 0, -0.382634 -0.9239 0, 0 -1 0, 0.320657 -0.947195 0, 0.896592 -0.442857 0, + 0.658837 -0.752286 0, 0.707198 -0.707015 0, 0.382634 -0.9239 0, 0.923897 -0.38264 0, -0.658837 -0.752286 0, + 0.0661257 -0.997811 0, -0.320657 -0.947195 0, 0.442932 -0.896555 0, 0.752456 -0.658642 0, 0.947164 -0.320751 0, 0 0 -1, + 0.947174 0.320719 0, 0.99781 -0.0661464 0, 1 -1.25088e-005 0, 0.707119 0.707094 0, 0.923865 0.382719 0, 0.997812 0.0661215 0, + 0.734643 0.678454 0, 0.896501 0.443041 0, 0.408852 0.912601 0, 0.0661383 0.99781 0, 0.382747 0.923853 0, -0.320746 0.947165 0, + -0.896501 0.443041 0, -0.658836 0.752286 0, -0.707119 0.707094 0, -0.382747 0.923853 0, -0.923865 0.382719 0, + -0.997812 0.0661215 0, 0.658836 0.752286 0, -0.0661383 0.99781 0, 0.320746 0.947165 0, -0.44307 0.896487 0, + -0.75231 0.65881 0, -1 -1.25088e-005 0, -0.947174 0.320719 0, -0.99781 -0.0661464 0, -0.947177 -0.320712 0, + -0.707107 -0.707107 0, -0.923874 -0.382698 0, -0.734643 -0.678454 0, -0.896519 -0.443005 0, -0.408796 -0.912626 0, + -0.0661383 -0.99781 0, -0.382698 -0.923873 0, 0.320713 -0.947177 0, 0.896519 -0.443005 0, 0.6588 -0.752318 0, + 0.707107 -0.707107 0, 0.382698 -0.923873 0, 0.923874 -0.382698 0, -0.6588 -0.752318 0, 0.0661383 -0.99781 0, + -0.320713 -0.947177 0, 0.443005 -0.896519 0, 0.752318 -0.6588 0, 0.947177 -0.320712 0, 0 0 1, -1 -2.49872e-005 0, + -0.997813 0.0661047 0, -0.707182 -0.707032 0, -0.997809 -0.0661546 0, -0.7347 -0.678392 0, -0.408908 -0.912576 0, + -0.382796 -0.923833 0, 0.320779 -0.947154 0, 0.707182 -0.707031 0, 0.658908 -0.752224 0, 0.382796 -0.923833 0, + 0.997809 -0.0661546 0, -0.658908 -0.752224 0, -0.320779 -0.947154 0, 0.443134 -0.896455 0, 0.752364 -0.658747 0, + 1 -2.49872e-005 0, 0.997813 0.0661047 0, 0.947172 0.320725 0, 0.923856 0.382741 0, 0.707056 0.707157 0, 0.896484 0.443077 0, + 0.734585 0.678517 0, 0.408796 0.912626 0, 0.382698 0.923873 0, -0.320713 0.947177 0, -0.707056 0.707157 0, + -0.658765 0.752349 0, -0.896484 0.443077 0, -0.382698 0.923873 0, -0.923856 0.382741 0, 0.658765 0.752349 0, + 0.320713 0.947177 0, -0.443005 0.896519 0, -0.752255 0.658872 0, -0.947172 0.320725 0, -1 -3.56689e-005 0, + -0.99781 0.0661496 0, -0.947184 -0.32069 0, -0.923922 -0.38258 0, -0.707071 -0.707142 0, -0.997805 -0.0662208 0, + -0.896621 -0.442799 0, -0.734676 -0.678418 0, -0.408698 -0.91267 0, -0.382667 -0.923886 0, -0.0662965 -0.9978 0, + 0.320842 -0.947133 0, 0.707071 -0.707143 0, 0.658638 -0.75246 0, 0.896621 -0.442799 0, 0.382667 -0.923886 0, + 0.997805 -0.0662208 0, 0.923922 -0.382581 0, -0.658638 -0.75246 0, 0.0662965 -0.9978 0, -0.320842 -0.947133 0, + 0.442822 -0.896609 0, 0.752393 -0.658714 0, 0.947184 -0.32069 0, 1 -3.56689e-005 0, 0.99781 0.0661496 0, 0.947178 0.320707 0, + 0.923897 0.382641 0, 0.707107 0.707107 0, 0.896571 0.4429 0, 0.734675 0.67842 0, 0.408718 0.912661 0, 0.382641 0.923897 0, + 0.0661729 0.997808 0, -0.320707 0.947178 0, -0.707107 0.707107 0, -0.658742 0.752369 0, -0.896571 0.4429 0, + -0.382641 0.923897 0, -0.923897 0.382641 0, 0.658742 0.752369 0, -0.0661729 0.997808 0, 0.320707 0.947178 0, + -0.4429 0.896571 0, -0.752369 0.658742 0, -0.947178 0.320707 0, -1 -5.8743e-005 0, -0.99782 0.0659922 0, -0.947198 -0.32065 0, + -0.923873 -0.3827 0, -0.70693 -0.707284 0, -0.997812 -0.0661094 0, -0.896488 -0.443069 0, -0.73448 -0.67863 0, + -0.408792 -0.912628 0, -0.382742 -0.923855 0, -0.0662749 -0.997801 0, 0.320872 -0.947123 0, 0.70693 -0.707284 0, + 0.658598 -0.752495 0, 0.896488 -0.443069 0, 0.382742 -0.923855 0, 0.997812 -0.0661094 0, 0.923873 -0.3827 0, + -0.658598 -0.752495 0, 0.0662749 -0.997801 0, -0.320872 -0.947123 0, 0.44294 -0.896551 0, 0.752165 -0.658975 0, + 0.947198 -0.32065 0, 1 -5.8743e-005 0, 0.99782 0.0659922 0, 0.947223 0.320575 0, 0.923895 0.382646 0, 0.70693 0.707284 0, + 0.896505 0.443034 0, 0.73448 0.67863 0, 0.408562 0.912731 0, 0.382468 0.923969 0, 0.0660709 0.997815 0, -0.320494 0.947251 0, + -0.70693 0.707284 0, -0.658598 0.752495 0, -0.896505 0.443034 0, -0.382468 0.923969 0, -0.923895 0.382646 0, + 0.658598 0.752495 0, -0.0660709 0.997815 0, 0.320494 0.947251 0, -0.442766 0.896637 0, -0.752165 0.658975 0, + -0.947223 0.320575 0, 0.0660349 0.997817 0, -0.320521 0.947241 0, -0.382559 0.923931 0, -0.0660349 0.997817 0, + -0.442917 0.896563 0, -0.678454 0.734643 0, -0.912678 0.408679 0, -0.923931 0.382559 0, -0.997817 0.0660344 0, + -0.947241 -0.320521 0, -1 -1.87368e-007 0, -0.752318 -0.6588 0, -0.442917 -0.896563 0, -0.923931 -0.382559 0, + -0.0660349 -0.997817 0, -0.382559 -0.923931 0, -0.752318 0.6588 0, -0.997817 -0.0660348 0, -0.947242 0.32052 0, + -0.896563 -0.442917 0, -0.320521 -0.947241 0, 0.0660349 -0.997817 0, 0.320521 -0.947241 0, 0.382559 -0.923931 0, + 0.442917 -0.896563 0, 0.678454 -0.734643 0, 0.912678 -0.408679 0, 0.923931 -0.382559 0, 0.997817 -0.0660348 0, + 0.947242 0.32052 0, 1 -1.92432e-007 0, 0.752318 0.6588 0, 0.442917 0.896563 0, 0.923931 0.382559 0, 0.382559 0.923931 0, + 0.997817 0.0660344 0, 0.947241 -0.320521 0, 0.896563 0.442917 0, 0.6588 0.752318 0, 0.320521 0.947241 0, + -0.707471 -0.706742 0, -0.752955 -0.658072 0, -0.442066 -0.896983 0, -0.381605 -0.924326 0, -0.000119991 -1 0, + -0.658848 -0.752276 0, -0.319464 -0.947598 0, -0.0395073 -0.999219 0, 0.355002 -0.934866 0, 0.381494 -0.924371 0, + 0.658849 -0.752276 0, 0.897078 -0.441873 0, 0.707471 -0.706742 0, 1 -0.000120889 0, 0.997808 -0.0661791 0, 0.9473 0.320348 0, + 0.924243 -0.381804 0, 0.752347 0.658767 0, 0.924027 0.382327 0, 0.0654356 -0.997857 0, 0.752955 -0.658072 0, + 0.441995 -0.897017 0, 0.947392 -0.320076 0, 0.997824 0.0659378 0, 0.896704 0.44263 0, 0.706986 0.707228 0, + 0.658509 0.752573 0, 0.442709 0.896665 0, 0.382618 0.923907 0, -0.000121417 1 0, 0.320862 0.947126 0, 0.0397713 0.999209 0, + -0.356439 0.934319 0, -0.38273 0.92386 0, -0.658509 0.752573 0, -0.896528 0.442987 0, -0.706985 0.707228 0, -1 -0.000121598 0, + -0.997796 0.0663557 0, -0.94713 -0.320851 0, -0.923794 0.382889 0, -0.924011 -0.382367 0, -0.066515 0.997785 0, + -0.752346 0.658768 0, -0.442781 0.89663 0, -0.947038 0.321122 0, -0.99778 -0.0665984 0, -0.896901 -0.442231 0, + 0.658848 -0.752276 0, 0.896901 -0.442231 0, 0.924011 -0.382367 0, 1 -0.000121598 0, 0.94713 -0.320851 0, + 0.999197 -0.0400643 0, 0.934267 0.356574 0, 0.923794 0.382889 0, 0.752346 0.658768 0, 0.442781 0.89663 0, 0.706985 0.707228 0, + 0.000121414 1 0, 0.066515 0.997785 0, -0.320862 0.947126 0, 0.38273 0.92386 0, -0.382618 0.923907 0, 0.997796 0.0663557 0, + 0.896528 0.442987 0, 0.321016 0.947074 0, -0.0662727 0.997802 0, -0.442709 0.896665 0, -0.706986 0.707228 0, + -0.752347 0.658767 0, -0.896704 0.44263 0, -0.924027 0.382327 0, -1 -0.000120884 0, -0.9473 0.320348 0, -0.999217 0.0395697 0, + -0.934674 -0.355506 0, -0.924243 -0.381804 0, -0.441995 -0.897017 0, -0.707472 -0.706742 0, 0.000119989 -1 0, + -0.0654356 -0.997857 0, 0.319464 -0.947598 0, -0.381494 -0.924371 0, 0.381605 -0.924326 0, -0.997808 -0.0661791 0, + -0.658849 -0.752276 0, -0.897078 -0.441873 0, -0.319311 -0.94765 0, 0.065675 -0.997841 0, 0.442066 -0.896983 0, + 0.70735 0.706863 0, 0.752569 0.658514 0, 0.443046 0.896499 0, 0.382645 0.923895 0, 0.000120704 1 0, 0.659031 0.752115 0, + 0.320561 0.947228 0, 0.0397609 0.999209 0, -0.356067 0.934461 0, -0.382533 0.923942 0, -0.659032 0.752115 0, + -0.70735 0.706863 0, -1 5.06395e-009 0, -0.997819 0.0660168 0, -0.947228 -0.320562 0, -0.752486 -0.658608 0, + -0.923895 -0.382645 0, -0.0658545 0.997829 0, -0.752569 0.658513 0, -0.442975 0.896534 0, -0.997819 -0.0660168 0, + -0.896499 -0.443046 0, -0.659383 -0.751807 0, -0.443596 -0.896227 0, -0.38301 -0.923744 0, 0.000120704 -1 0, + -0.320727 -0.947172 0, -0.0395196 -0.999219 0, 0.356606 -0.934255 0, 0.383121 -0.923698 0, 0.659383 -0.751807 0, + 0.896322 -0.443403 0, 0.707471 -0.706743 0, 1 0 0, 0.997791 -0.0664352 0, 0.947038 0.321122 0, 0.923662 -0.383207 0, + 0.0660954 -0.997813 0, 0.752486 -0.658608 0, 0.443667 -0.896192 0, 0.946965 -0.321336 0, 0.997791 0.0664352 0, + 0.896528 0.442988 0, -0.659031 0.752115 0, -0.896528 0.442988 0, -1 0 0, -0.752569 0.658514 0, -0.999203 0.0399175 0, + -0.934162 -0.356849 0, -0.923662 -0.383207 0, -0.443667 -0.896192 0, -0.707471 -0.706743 0, -0.000120706 -1 0, + -0.0660954 -0.997813 0, 0.320727 -0.947172 0, -0.383121 -0.923698 0, 0.38301 -0.923744 0, -0.997791 -0.0664352 0, + -0.896322 -0.443403 0, -0.320881 -0.94712 0, 0.0658545 -0.997829 0, 0.443596 -0.896227 0, 0.896499 -0.443046 0, + 0.923895 -0.382645 0, 0.947228 -0.320562 0, 0.999213 -0.0396655 0, 0.934516 0.355922 0, 0.752569 0.658513 0, + 0.442975 0.896534 0, -0.000120706 1 0, 0.0658545 0.997829 0, -0.320561 0.947228 0, 0.382533 0.923942 0, -0.382645 0.923895 0, + 0.997819 0.0660168 0, 0.659032 0.752115 0, 0.320407 0.94728 0, -0.0660954 0.997813 0, -0.443046 0.896499 0] + } + coordIndex [ + 9, 8, 7, -1,340, 7, 6, -1,7, 340, 9, -1,10, 9, 340, -1,11, 340, 341, -1,6, 341, 340, -1, + 342, 341, 6, -1,342, 5, 4, -1,4, 3, 343, -1,345, 2, 1, -1,2, 344, 3, -1,1, 0, 346, -1, + 343, 342, 4, -1,342, 6, 5, -1,342, 12, 341, -1,14, 343, 344, -1,10, 340, 11, -1,12, + 11, 341, -1,3, 344, 343, -1,12, 342, 13, -1,343, 14, 13, -1,342, 343, 13, -1,15, + 14, 344, -1,1, 346, 345, -1,16, 345, 346, -1,17, 346, 19, -1,0, 19, 346, -1,345, + 16, 15, -1,19, 18, 17, -1,346, 17, 16, -1,15, 344, 345, -1,2, 345, 344, -1,19, 0, + 26, -1,347, 26, 25, -1,26, 347, 19, -1,18, 19, 347, -1,27, 347, 348, -1,25, 348, + 347, -1,349, 348, 25, -1,349, 24, 23, -1,23, 22, 350, -1,352, 21, 20, -1,21, 351, + 22, -1,20, 8, 353, -1,350, 349, 23, -1,349, 25, 24, -1,349, 28, 348, -1,30, 350, + 351, -1,18, 347, 27, -1,28, 27, 348, -1,22, 351, 350, -1,28, 349, 29, -1,350, 30, + 29, -1,349, 350, 29, -1,31, 30, 351, -1,20, 353, 352, -1,32, 352, 353, -1,33, 353, + 9, -1,8, 9, 353, -1,352, 32, 31, -1,9, 10, 33, -1,353, 33, 32, -1,31, 351, 352, -1, + 21, 352, 351, -1,83, 82, 44, -1,97, 44, 82, -1,84, 83, 44, -1,44, 97, 96, -1,45, + 95, 94, -1,45, 96, 95, -1,45, 44, 96, -1,43, 86, 85, -1,43, 84, 44, -1,89, 88, 27, -1, + 28, 90, 89, -1,27, 88, 87, -1,43, 87, 86, -1,85, 84, 43, -1,118, 117, 45, -1,116, + 45, 117, -1,94, 119, 118, -1,115, 114, 46, -1,116, 115, 46, -1,45, 116, 46, -1,93, + 119, 94, -1,29, 93, 92, -1,29, 92, 91, -1,29, 121, 120, -1,29, 30, 121, -1,119, 93, + 29, -1,29, 120, 119, -1,28, 91, 90, -1,121, 30, 122, -1,45, 94, 118, -1,28, 29, 91, -1, + 42, 41, 17, -1,42, 18, 27, -1,76, 17, 77, -1,77, 41, 78, -1,41, 77, 17, -1,27, 43, + 42, -1,79, 78, 41, -1,40, 80, 41, -1,79, 41, 80, -1,81, 80, 40, -1,40, 66, 81, -1, + 40, 68, 67, -1,40, 67, 66, -1,39, 68, 40, -1,17, 18, 42, -1,75, 17, 76, -1,16, 17, + 75, -1,75, 74, 16, -1,15, 16, 73, -1,74, 73, 16, -1,27, 87, 43, -1,39, 70, 69, -1, + 71, 15, 72, -1,15, 71, 39, -1,72, 15, 73, -1,70, 39, 71, -1,38, 15, 39, -1,68, 39, + 69, -1,38, 14, 15, -1,27, 28, 89, -1,129, 128, 46, -1,47, 46, 128, -1,126, 47, 127, -1, + 128, 127, 47, -1,125, 103, 102, -1,126, 125, 102, -1,123, 30, 31, -1,123, 122, 30, -1, + 124, 123, 31, -1,31, 104, 103, -1,105, 31, 32, -1,104, 31, 105, -1,125, 124, 31, -1, + 31, 103, 125, -1,102, 47, 126, -1,129, 46, 114, -1,47, 102, 101, -1,100, 47, 101, -1, + 98, 48, 99, -1,100, 99, 48, -1,48, 98, 113, -1,113, 112, 48, -1,100, 48, 47, -1,107, + 106, 32, -1,106, 105, 32, -1,112, 111, 49, -1,49, 110, 109, -1,110, 49, 111, -1,33, + 109, 108, -1,49, 48, 112, -1,108, 107, 33, -1,12, 13, 59, -1,11, 12, 57, -1,56, 11, + 57, -1,57, 12, 58, -1,32, 33, 107, -1,58, 12, 59, -1,38, 37, 13, -1,61, 60, 13, -1, + 37, 61, 13, -1,14, 38, 13, -1,37, 63, 62, -1,37, 62, 61, -1,60, 59, 13, -1,64, 63, + 37, -1,11, 56, 55, -1,55, 35, 11, -1,35, 34, 11, -1,53, 35, 54, -1,35, 55, 54, -1, + 34, 33, 10, -1,34, 49, 33, -1,36, 50, 65, -1,36, 65, 64, -1,52, 35, 53, -1,50, 36, + 51, -1,52, 51, 36, -1,52, 36, 35, -1,37, 36, 64, -1,10, 11, 34, -1,33, 49, 109, -1, + 130, 34, 35, -1,354, 35, 36, -1,35, 354, 130, -1,131, 130, 354, -1,132, 354, 355, -1, + 36, 355, 354, -1,356, 355, 36, -1,356, 37, 38, -1,38, 39, 357, -1,359, 40, 41, -1, + 40, 358, 39, -1,41, 42, 360, -1,357, 356, 38, -1,356, 36, 37, -1,356, 133, 355, -1, + 135, 357, 358, -1,131, 354, 132, -1,133, 132, 355, -1,39, 358, 357, -1,133, 356, + 134, -1,357, 135, 134, -1,356, 357, 134, -1,136, 135, 358, -1,41, 360, 359, -1,137, + 359, 360, -1,138, 360, 140, -1,42, 140, 360, -1,359, 137, 136, -1,140, 139, 138, -1, + 360, 138, 137, -1,136, 358, 359, -1,40, 359, 358, -1,140, 42, 43, -1,361, 43, 44, -1, + 43, 361, 140, -1,139, 140, 361, -1,141, 361, 362, -1,44, 362, 361, -1,363, 362, 44, -1, + 363, 45, 46, -1,46, 47, 364, -1,366, 48, 49, -1,48, 365, 47, -1,49, 34, 367, -1,364, + 363, 46, -1,363, 44, 45, -1,363, 142, 362, -1,144, 364, 365, -1,139, 361, 141, -1, + 142, 141, 362, -1,47, 365, 364, -1,142, 363, 143, -1,364, 144, 143, -1,363, 364, + 143, -1,145, 144, 365, -1,49, 367, 366, -1,146, 366, 367, -1,147, 367, 130, -1,34, + 130, 367, -1,366, 146, 145, -1,130, 131, 147, -1,367, 147, 146, -1,145, 365, 366, -1, + 48, 366, 365, -1,142, 180, 181, -1,180, 142, 195, -1,142, 181, 182, -1,194, 195, + 142, -1,192, 193, 143, -1,193, 194, 143, -1,194, 142, 143, -1,183, 184, 141, -1,142, + 182, 141, -1,235, 186, 187, -1,187, 188, 234, -1,185, 186, 235, -1,184, 185, 141, -1, + 141, 182, 183, -1,143, 215, 216, -1,215, 143, 214, -1,216, 217, 192, -1,144, 212, + 213, -1,144, 213, 214, -1,144, 214, 143, -1,192, 217, 191, -1,190, 191, 233, -1,189, + 190, 233, -1,218, 219, 233, -1,219, 232, 233, -1,233, 191, 217, -1,217, 218, 233, -1, + 188, 189, 234, -1,220, 232, 219, -1,216, 192, 143, -1,189, 233, 234, -1,175, 138, + 237, -1,138, 139, 237, -1,237, 174, 175, -1,173, 174, 237, -1,175, 176, 138, -1,235, + 139, 141, -1,138, 176, 177, -1,138, 178, 137, -1,178, 138, 177, -1,137, 178, 179, -1, + 179, 164, 137, -1,165, 166, 137, -1,164, 165, 137, -1,137, 166, 136, -1,237, 238, + 173, -1,235, 236, 139, -1,172, 238, 171, -1,238, 172, 173, -1,141, 185, 235, -1,171, + 238, 239, -1,167, 168, 136, -1,170, 239, 169, -1,136, 169, 239, -1,171, 239, 170, -1, + 169, 136, 168, -1,136, 239, 135, -1,167, 136, 166, -1,239, 240, 135, -1,139, 236, + 237, -1,187, 234, 235, -1,144, 226, 227, -1,226, 144, 145, -1,225, 145, 224, -1,145, + 225, 226, -1,200, 201, 223, -1,200, 223, 224, -1,231, 232, 221, -1,232, 220, 221, -1, + 231, 221, 222, -1,201, 202, 231, -1,230, 231, 203, -1,203, 231, 202, -1,231, 222, + 223, -1,223, 201, 231, -1,224, 145, 200, -1,199, 200, 145, -1,199, 145, 198, -1,197, + 146, 196, -1,146, 197, 198, -1,211, 196, 146, -1,146, 210, 211, -1,145, 146, 198, -1, + 230, 204, 205, -1,230, 203, 204, -1,147, 209, 210, -1,207, 208, 147, -1,209, 147, + 208, -1,206, 207, 229, -1,210, 146, 147, -1,229, 205, 206, -1,157, 241, 242, -1,228, + 229, 131, -1,243, 155, 242, -1,154, 155, 243, -1,243, 228, 131, -1,205, 229, 230, -1, + 156, 242, 155, -1,241, 134, 135, -1,241, 158, 159, -1,241, 159, 134, -1,241, 135, + 240, -1,158, 241, 157, -1,159, 160, 134, -1,242, 156, 157, -1,134, 160, 161, -1,154, + 243, 153, -1,152, 153, 132, -1,153, 243, 132, -1,151, 132, 150, -1,151, 152, 132, -1, + 131, 132, 243, -1,229, 147, 131, -1,162, 163, 133, -1,162, 133, 134, -1,149, 150, + 133, -1,148, 133, 163, -1,133, 148, 149, -1,150, 132, 133, -1,162, 134, 161, -1,207, + 147, 229, -1,144, 227, 212, -1,251, 252, 253, -1,250, 251, 368, -1,253, 368, 251, -1, + 368, 253, 228, -1,369, 368, 243, -1,368, 369, 250, -1,250, 369, 370, -1,248, 249, + 370, -1,371, 247, 248, -1,245, 246, 373, -1,247, 372, 246, -1,374, 244, 245, -1,248, + 370, 371, -1,249, 250, 370, -1,369, 242, 370, -1,372, 371, 240, -1,243, 368, 228, -1, + 369, 243, 242, -1,371, 372, 247, -1,241, 370, 242, -1,241, 240, 371, -1,241, 371, + 370, -1,372, 240, 239, -1,373, 374, 245, -1,374, 373, 238, -1,254, 374, 237, -1,374, + 254, 244, -1,239, 238, 373, -1,237, 236, 254, -1,238, 237, 374, -1,373, 372, 239, -1, + 372, 373, 246, -1,261, 244, 254, -1,260, 261, 375, -1,254, 375, 261, -1,375, 254, + 236, -1,376, 375, 235, -1,375, 376, 260, -1,260, 376, 377, -1,258, 259, 377, -1,378, + 257, 258, -1,255, 256, 380, -1,257, 379, 256, -1,381, 252, 255, -1,258, 377, 378, -1, + 259, 260, 377, -1,376, 234, 377, -1,379, 378, 232, -1,235, 375, 236, -1,376, 235, + 234, -1,378, 379, 257, -1,233, 377, 234, -1,233, 232, 378, -1,233, 378, 377, -1,379, + 232, 231, -1,380, 381, 255, -1,381, 380, 230, -1,253, 381, 229, -1,381, 253, 252, -1, + 231, 230, 380, -1,229, 228, 253, -1,230, 229, 381, -1,380, 379, 231, -1,379, 380, + 256, -1,269, 244, 261, -1,244, 270, 271, -1,269, 270, 244, -1,261, 260, 269, -1,267, + 268, 260, -1,267, 259, 258, -1,269, 260, 268, -1,260, 259, 267, -1,245, 271, 246, -1, + 271, 245, 244, -1,246, 272, 273, -1,272, 246, 271, -1,273, 274, 248, -1,248, 247, + 273, -1,274, 275, 248, -1,273, 247, 246, -1,258, 257, 265, -1,265, 266, 258, -1,257, + 256, 265, -1,258, 266, 267, -1,264, 256, 263, -1,256, 264, 265, -1,263, 255, 252, -1, + 255, 263, 256, -1,250, 275, 276, -1,275, 249, 248, -1,250, 249, 275, -1,276, 277, + 250, -1,252, 251, 277, -1,252, 262, 263, -1,250, 277, 251, -1,277, 262, 252, -1,285, + 286, 287, -1,284, 285, 382, -1,287, 382, 285, -1,382, 287, 262, -1,383, 382, 277, -1, + 382, 383, 284, -1,284, 383, 384, -1,282, 283, 384, -1,385, 281, 282, -1,279, 280, + 387, -1,281, 386, 280, -1,388, 278, 279, -1,282, 384, 385, -1,283, 284, 384, -1,383, + 276, 384, -1,386, 385, 274, -1,277, 382, 262, -1,383, 277, 276, -1,385, 386, 281, -1, + 275, 384, 276, -1,275, 274, 385, -1,275, 385, 384, -1,386, 274, 273, -1,387, 388, + 279, -1,388, 387, 272, -1,288, 388, 271, -1,388, 288, 278, -1,273, 272, 387, -1,271, + 270, 288, -1,272, 271, 388, -1,387, 386, 273, -1,386, 387, 280, -1,295, 278, 288, -1, + 294, 295, 389, -1,288, 389, 295, -1,389, 288, 270, -1,390, 389, 269, -1,389, 390, + 294, -1,294, 390, 391, -1,292, 293, 391, -1,392, 291, 292, -1,289, 290, 394, -1,291, + 393, 290, -1,395, 286, 289, -1,292, 391, 392, -1,293, 294, 391, -1,390, 268, 391, -1, + 393, 392, 266, -1,269, 389, 270, -1,390, 269, 268, -1,392, 393, 291, -1,267, 391, + 268, -1,267, 266, 392, -1,267, 392, 391, -1,393, 266, 265, -1,394, 395, 289, -1,395, + 394, 264, -1,287, 395, 263, -1,395, 287, 286, -1,265, 264, 394, -1,263, 262, 287, -1, + 264, 263, 395, -1,394, 393, 265, -1,393, 394, 290, -1,296, 295, 311, -1,278, 296, + 279, -1,296, 278, 295, -1,295, 294, 311, -1,309, 310, 294, -1,309, 293, 308, -1,311, + 294, 310, -1,294, 293, 309, -1,279, 297, 280, -1,297, 279, 296, -1,280, 298, 299, -1, + 298, 280, 297, -1,299, 300, 281, -1,282, 281, 300, -1,300, 283, 282, -1,299, 281, + 280, -1,292, 291, 308, -1,307, 308, 291, -1,291, 290, 307, -1,292, 308, 293, -1,306, + 290, 305, -1,290, 306, 307, -1,305, 289, 304, -1,289, 305, 290, -1,284, 301, 302, -1, + 301, 283, 300, -1,284, 283, 301, -1,302, 303, 284, -1,304, 286, 285, -1,286, 304, + 289, -1,284, 303, 285, -1,285, 303, 304, -1,319, 320, 321, -1,318, 319, 396, -1,321, + 396, 319, -1,396, 321, 304, -1,397, 396, 303, -1,396, 397, 318, -1,318, 397, 398, -1, + 316, 317, 398, -1,399, 315, 316, -1,313, 314, 401, -1,315, 400, 314, -1,402, 312, + 313, -1,316, 398, 399, -1,317, 318, 398, -1,397, 302, 398, -1,400, 399, 300, -1,303, + 396, 304, -1,397, 303, 302, -1,399, 400, 315, -1,301, 398, 302, -1,301, 300, 399, -1, + 301, 399, 398, -1,400, 300, 299, -1,401, 402, 313, -1,402, 401, 298, -1,322, 402, + 297, -1,402, 322, 312, -1,299, 298, 401, -1,297, 296, 322, -1,298, 297, 402, -1,401, + 400, 299, -1,400, 401, 314, -1,329, 312, 322, -1,328, 329, 403, -1,322, 403, 329, -1, + 403, 322, 296, -1,404, 403, 311, -1,403, 404, 328, -1,328, 404, 405, -1,326, 327, + 405, -1,406, 325, 326, -1,323, 324, 408, -1,325, 407, 324, -1,409, 320, 323, -1,326, + 405, 406, -1,327, 328, 405, -1,404, 310, 405, -1,407, 406, 308, -1,311, 403, 296, -1, + 404, 311, 310, -1,406, 407, 325, -1,309, 405, 310, -1,309, 308, 406, -1,309, 406, + 405, -1,407, 308, 307, -1,408, 409, 323, -1,409, 408, 306, -1,321, 409, 305, -1,409, + 321, 320, -1,307, 306, 408, -1,305, 304, 321, -1,306, 305, 409, -1,408, 407, 307, -1, + 407, 408, 324, -1,329, 26, 312, -1,1, 312, 0, -1,26, 0, 312, -1,329, 25, 26, -1,25, + 328, 327, -1,326, 24, 327, -1,328, 25, 329, -1,327, 24, 25, -1,2, 313, 1, -1,312, + 1, 313, -1,2, 3, 315, -1,314, 313, 2, -1,315, 3, 316, -1,5, 316, 4, -1,316, 3, 4, -1, + 314, 2, 315, -1,24, 326, 23, -1,22, 326, 325, -1,325, 324, 21, -1,23, 326, 22, -1, + 324, 323, 21, -1,320, 20, 323, -1,21, 323, 20, -1,22, 325, 21, -1,318, 317, 6, -1, + 316, 5, 317, -1,317, 5, 6, -1,6, 319, 318, -1,7, 8, 320, -1,20, 320, 8, -1,7, 319, + 6, -1,320, 319, 7, -1,129, 114, 330, -1,128, 129, 410, -1,330, 410, 129, -1,410, + 330, 212, -1,411, 410, 227, -1,410, 411, 128, -1,128, 411, 412, -1,126, 127, 412, -1, + 413, 125, 126, -1,123, 124, 415, -1,125, 414, 124, -1,416, 122, 123, -1,126, 412, + 413, -1,127, 128, 412, -1,411, 226, 412, -1,414, 413, 224, -1,227, 410, 212, -1,411, + 227, 226, -1,413, 414, 125, -1,225, 412, 226, -1,225, 224, 413, -1,225, 413, 412, -1, + 414, 224, 223, -1,415, 416, 123, -1,416, 415, 222, -1,331, 416, 221, -1,416, 331, + 122, -1,223, 222, 415, -1,221, 220, 331, -1,222, 221, 416, -1,415, 414, 223, -1,414, + 415, 124, -1,121, 122, 331, -1,120, 121, 417, -1,331, 417, 121, -1,417, 331, 220, -1, + 418, 417, 219, -1,417, 418, 120, -1,120, 418, 419, -1,118, 119, 419, -1,420, 117, + 118, -1,115, 116, 422, -1,117, 421, 116, -1,423, 114, 115, -1,118, 419, 420, -1,119, + 120, 419, -1,418, 218, 419, -1,421, 420, 216, -1,219, 417, 220, -1,418, 219, 218, -1, + 420, 421, 117, -1,217, 419, 218, -1,217, 216, 420, -1,217, 420, 419, -1,421, 216, + 215, -1,422, 423, 115, -1,423, 422, 214, -1,330, 423, 213, -1,423, 330, 114, -1,215, + 214, 422, -1,213, 212, 330, -1,214, 213, 423, -1,422, 421, 215, -1,421, 422, 116, -1, + 65, 50, 332, -1,64, 65, 424, -1,332, 424, 65, -1,424, 332, 148, -1,425, 424, 163, -1, + 424, 425, 64, -1,64, 425, 426, -1,62, 63, 426, -1,427, 61, 62, -1,59, 60, 429, -1, + 61, 428, 60, -1,430, 58, 59, -1,62, 426, 427, -1,63, 64, 426, -1,425, 162, 426, -1, + 428, 427, 160, -1,163, 424, 148, -1,425, 163, 162, -1,427, 428, 61, -1,161, 426, + 162, -1,161, 160, 427, -1,161, 427, 426, -1,428, 160, 159, -1,429, 430, 59, -1,430, + 429, 158, -1,333, 430, 157, -1,430, 333, 58, -1,159, 158, 429, -1,157, 156, 333, -1, + 158, 157, 430, -1,429, 428, 159, -1,428, 429, 60, -1,57, 58, 333, -1,56, 57, 431, -1, + 333, 431, 57, -1,431, 333, 156, -1,432, 431, 155, -1,431, 432, 56, -1,56, 432, 433, -1, + 54, 55, 433, -1,434, 53, 54, -1,51, 52, 436, -1,53, 435, 52, -1,437, 50, 51, -1,54, + 433, 434, -1,55, 56, 433, -1,432, 154, 433, -1,435, 434, 152, -1,155, 431, 156, -1, + 432, 155, 154, -1,434, 435, 53, -1,153, 433, 154, -1,153, 152, 434, -1,153, 434, + 433, -1,435, 152, 151, -1,436, 437, 51, -1,437, 436, 150, -1,332, 437, 149, -1,437, + 332, 50, -1,151, 150, 436, -1,149, 148, 332, -1,150, 149, 437, -1,436, 435, 151, -1, + 435, 436, 52, -1,81, 66, 334, -1,80, 81, 438, -1,334, 438, 81, -1,438, 334, 164, -1, + 439, 438, 179, -1,438, 439, 80, -1,80, 439, 440, -1,78, 79, 440, -1,441, 77, 78, -1, + 75, 76, 443, -1,77, 442, 76, -1,444, 74, 75, -1,78, 440, 441, -1,79, 80, 440, -1, + 439, 178, 440, -1,442, 441, 176, -1,179, 438, 164, -1,439, 179, 178, -1,441, 442, + 77, -1,177, 440, 178, -1,177, 176, 441, -1,177, 441, 440, -1,442, 176, 175, -1,443, + 444, 75, -1,444, 443, 174, -1,335, 444, 173, -1,444, 335, 74, -1,175, 174, 443, -1, + 173, 172, 335, -1,174, 173, 444, -1,443, 442, 175, -1,442, 443, 76, -1,73, 74, 335, -1, + 72, 73, 445, -1,335, 445, 73, -1,445, 335, 172, -1,446, 445, 171, -1,445, 446, 72, -1, + 72, 446, 447, -1,70, 71, 447, -1,448, 69, 70, -1,67, 68, 450, -1,69, 449, 68, -1, + 451, 66, 67, -1,70, 447, 448, -1,71, 72, 447, -1,446, 170, 447, -1,449, 448, 168, -1, + 171, 445, 172, -1,446, 171, 170, -1,448, 449, 69, -1,169, 447, 170, -1,169, 168, + 448, -1,169, 448, 447, -1,449, 168, 167, -1,450, 451, 67, -1,451, 450, 166, -1,334, + 451, 165, -1,451, 334, 66, -1,167, 166, 450, -1,165, 164, 334, -1,166, 165, 451, -1, + 450, 449, 167, -1,449, 450, 68, -1,97, 82, 336, -1,96, 97, 452, -1,336, 452, 97, -1, + 452, 336, 180, -1,453, 452, 195, -1,452, 453, 96, -1,96, 453, 454, -1,94, 95, 454, -1, + 455, 93, 94, -1,91, 92, 457, -1,93, 456, 92, -1,458, 90, 91, -1,94, 454, 455, -1, + 95, 96, 454, -1,453, 194, 454, -1,456, 455, 192, -1,195, 452, 180, -1,453, 195, 194, -1, + 455, 456, 93, -1,193, 454, 194, -1,193, 192, 455, -1,193, 455, 454, -1,456, 192, + 191, -1,457, 458, 91, -1,458, 457, 190, -1,337, 458, 189, -1,458, 337, 90, -1,191, + 190, 457, -1,189, 188, 337, -1,190, 189, 458, -1,457, 456, 191, -1,456, 457, 92, -1, + 89, 90, 337, -1,88, 89, 459, -1,337, 459, 89, -1,459, 337, 188, -1,460, 459, 187, -1, + 459, 460, 88, -1,88, 460, 461, -1,86, 87, 461, -1,462, 85, 86, -1,83, 84, 464, -1, + 85, 463, 84, -1,465, 82, 83, -1,86, 461, 462, -1,87, 88, 461, -1,460, 186, 461, -1, + 463, 462, 184, -1,187, 459, 188, -1,460, 187, 186, -1,462, 463, 85, -1,185, 461, + 186, -1,185, 184, 462, -1,185, 462, 461, -1,463, 184, 183, -1,464, 465, 83, -1,465, + 464, 182, -1,336, 465, 181, -1,465, 336, 82, -1,183, 182, 464, -1,181, 180, 336, -1, + 182, 181, 465, -1,464, 463, 183, -1,463, 464, 84, -1,113, 98, 338, -1,112, 113, 466, -1, + 338, 466, 113, -1,466, 338, 196, -1,467, 466, 211, -1,466, 467, 112, -1,112, 467, + 468, -1,110, 111, 468, -1,469, 109, 110, -1,107, 108, 471, -1,109, 470, 108, -1,472, + 106, 107, -1,110, 468, 469, -1,111, 112, 468, -1,467, 210, 468, -1,470, 469, 208, -1, + 211, 466, 196, -1,467, 211, 210, -1,469, 470, 109, -1,209, 468, 210, -1,209, 208, + 469, -1,209, 469, 468, -1,470, 208, 207, -1,471, 472, 107, -1,472, 471, 206, -1,339, + 472, 205, -1,472, 339, 106, -1,207, 206, 471, -1,205, 204, 339, -1,206, 205, 472, -1, + 471, 470, 207, -1,470, 471, 108, -1,105, 106, 339, -1,104, 105, 473, -1,339, 473, + 105, -1,473, 339, 204, -1,474, 473, 203, -1,473, 474, 104, -1,104, 474, 475, -1,102, + 103, 475, -1,476, 101, 102, -1,99, 100, 478, -1,101, 477, 100, -1,479, 98, 99, -1, + 102, 475, 476, -1,103, 104, 475, -1,474, 202, 475, -1,477, 476, 200, -1,203, 473, + 204, -1,474, 203, 202, -1,476, 477, 101, -1,201, 475, 202, -1,201, 200, 476, -1,201, + 476, 475, -1,477, 200, 199, -1,478, 479, 99, -1,479, 478, 198, -1,338, 479, 197, -1, + 479, 338, 98, -1,199, 198, 478, -1,197, 196, 338, -1,198, 197, 479, -1,478, 477, + 199, -1,477, 478, 100, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,4, 0, 3, -1,0, 4, 2, -1,5, 2, 4, -1,7, 4, 6, -1,3, 6, 4, -1,8, 6, 3, -1, + 8, 10, 9, -1,9, 12, 11, -1,15, 14, 13, -1,14, 16, 12, -1,13, 18, 17, -1,11, 8, 9, -1, + 8, 3, 10, -1,8, 19, 6, -1,20, 11, 16, -1,5, 4, 7, -1,19, 7, 6, -1,12, 16, 11, -1, + 19, 8, 21, -1,11, 20, 21, -1,8, 11, 21, -1,22, 20, 16, -1,13, 17, 15, -1,23, 15, + 17, -1,25, 17, 24, -1,18, 24, 17, -1,15, 23, 22, -1,24, 26, 25, -1,17, 25, 23, -1, + 22, 16, 15, -1,14, 15, 16, -1,24, 18, 27, -1,29, 27, 28, -1,27, 29, 24, -1,26, 24, + 29, -1,31, 29, 30, -1,28, 30, 29, -1,32, 30, 28, -1,32, 34, 33, -1,33, 36, 35, -1, + 39, 38, 37, -1,38, 40, 36, -1,37, 1, 41, -1,35, 32, 33, -1,32, 28, 34, -1,32, 42, + 30, -1,43, 35, 40, -1,26, 29, 31, -1,42, 31, 30, -1,36, 40, 35, -1,42, 32, 44, -1, + 35, 43, 44, -1,32, 35, 44, -1,45, 43, 40, -1,37, 41, 39, -1,46, 39, 41, -1,47, 41, + 2, -1,1, 2, 41, -1,39, 46, 45, -1,2, 5, 47, -1,41, 47, 46, -1,45, 40, 39, -1,38, + 39, 40, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,51, 50, 49, -1,53, 49, 52, -1,49, 53, 51, -1,54, 51, 53, -1, + 56, 53, 55, -1,52, 55, 53, -1,57, 55, 52, -1,57, 59, 58, -1,58, 60, 11, -1,63, 62, + 61, -1,62, 64, 60, -1,61, 66, 65, -1,11, 57, 58, -1,57, 52, 59, -1,57, 67, 55, -1, + 68, 11, 64, -1,54, 53, 56, -1,67, 56, 55, -1,60, 64, 11, -1,67, 57, 69, -1,11, 68, + 69, -1,57, 11, 69, -1,70, 68, 64, -1,61, 65, 63, -1,71, 63, 65, -1,73, 65, 72, -1, + 66, 72, 65, -1,63, 71, 70, -1,72, 74, 73, -1,65, 73, 71, -1,70, 64, 63, -1,62, 63, + 64, -1,72, 66, 75, -1,77, 75, 76, -1,75, 77, 72, -1,74, 72, 77, -1,79, 77, 78, -1, + 76, 78, 77, -1,80, 78, 76, -1,80, 82, 81, -1,81, 83, 35, -1,86, 85, 84, -1,85, 87, + 83, -1,84, 50, 88, -1,35, 80, 81, -1,80, 76, 82, -1,80, 89, 78, -1,90, 35, 87, -1, + 74, 77, 79, -1,89, 79, 78, -1,83, 87, 35, -1,89, 80, 91, -1,35, 90, 91, -1,80, 35, + 91, -1,92, 90, 87, -1,84, 88, 86, -1,93, 86, 88, -1,94, 88, 51, -1,50, 51, 88, -1, + 86, 93, 92, -1,51, 54, 94, -1,88, 94, 93, -1,92, 87, 86, -1,85, 86, 87, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,75, 97, 96, -1,98, 75, 77, -1,96, 77, 75, -1,77, 96, 99, -1,100, 77, 79, -1, + 77, 100, 98, -1,98, 100, 101, -1,81, 102, 101, -1,35, 103, 81, -1,84, 105, 104, -1, + 103, 106, 105, -1,88, 107, 84, -1,81, 101, 35, -1,102, 98, 101, -1,100, 108, 101, -1, + 106, 35, 90, -1,79, 77, 99, -1,100, 79, 108, -1,35, 106, 103, -1,109, 101, 108, -1, + 109, 90, 35, -1,109, 35, 101, -1,106, 90, 110, -1,104, 88, 84, -1,88, 104, 111, -1, + 112, 88, 94, -1,88, 112, 107, -1,110, 111, 104, -1,94, 113, 112, -1,111, 94, 88, -1, + 104, 106, 110, -1,106, 104, 105, -1,114, 107, 112, -1,116, 114, 115, -1,112, 115, + 114, -1,115, 112, 113, -1,118, 115, 117, -1,115, 118, 116, -1,116, 118, 119, -1,58, + 120, 119, -1,11, 121, 58, -1,124, 123, 122, -1,121, 125, 123, -1,126, 97, 124, -1, + 58, 119, 11, -1,120, 116, 119, -1,118, 127, 119, -1,125, 11, 68, -1,117, 115, 113, -1, + 118, 117, 127, -1,11, 125, 121, -1,128, 119, 127, -1,128, 68, 11, -1,128, 11, 119, -1, + 125, 68, 129, -1,122, 126, 124, -1,126, 122, 130, -1,96, 126, 131, -1,126, 96, 97, -1, + 129, 130, 122, -1,131, 99, 96, -1,130, 131, 126, -1,122, 125, 129, -1,125, 122, 123, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,134, 133, 132, -1, + 136, 134, 135, -1,132, 135, 134, -1,135, 132, 137, -1,139, 135, 138, -1,135, 139, + 136, -1,136, 139, 140, -1,142, 141, 140, -1,35, 143, 142, -1,146, 145, 144, -1,143, + 147, 145, -1,149, 148, 146, -1,142, 140, 35, -1,141, 136, 140, -1,139, 150, 140, -1, + 147, 35, 151, -1,138, 135, 137, -1,139, 138, 150, -1,35, 147, 143, -1,152, 140, 150, -1, + 152, 151, 35, -1,152, 35, 140, -1,147, 151, 153, -1,144, 149, 146, -1,149, 144, 154, -1, + 156, 149, 155, -1,149, 156, 148, -1,153, 154, 144, -1,155, 157, 156, -1,154, 155, + 149, -1,144, 147, 153, -1,147, 144, 145, -1,158, 148, 156, -1,160, 158, 159, -1,156, + 159, 158, -1,159, 156, 157, -1,162, 159, 161, -1,159, 162, 160, -1,160, 162, 163, -1, + 165, 164, 163, -1,11, 166, 165, -1,169, 168, 167, -1,166, 170, 168, -1,171, 133, + 169, -1,165, 163, 11, -1,164, 160, 163, -1,162, 172, 163, -1,170, 11, 173, -1,161, + 159, 157, -1,162, 161, 172, -1,11, 170, 166, -1,174, 163, 172, -1,174, 173, 11, -1, + 174, 11, 163, -1,170, 173, 175, -1,167, 171, 169, -1,171, 167, 176, -1,132, 171, + 177, -1,171, 132, 133, -1,175, 176, 167, -1,177, 137, 132, -1,176, 177, 171, -1,167, + 170, 175, -1,170, 167, 168, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, + 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1,95, 95, 95, -1, + 95, 95, 95, -1,180, 179, 178, -1,182, 180, 181, -1,178, 181, 180, -1,181, 178, 183, -1, + 185, 181, 184, -1,181, 185, 182, -1,182, 185, 186, -1,188, 187, 186, -1,35, 189, + 188, -1,192, 191, 190, -1,189, 193, 191, -1,195, 194, 192, -1,188, 186, 35, -1,187, + 182, 186, -1,185, 196, 186, -1,193, 35, 197, -1,184, 181, 183, -1,185, 184, 196, -1, + 35, 193, 189, -1,198, 186, 196, -1,198, 197, 35, -1,198, 35, 186, -1,193, 197, 199, -1, + 190, 195, 192, -1,195, 190, 200, -1,202, 195, 201, -1,195, 202, 194, -1,199, 200, + 190, -1,201, 203, 202, -1,200, 201, 195, -1,190, 193, 199, -1,193, 190, 191, -1,204, + 194, 202, -1,206, 204, 205, -1,202, 205, 204, -1,205, 202, 203, -1,208, 205, 207, -1, + 205, 208, 206, -1,206, 208, 209, -1,211, 210, 209, -1,11, 212, 211, -1,215, 214, + 213, -1,212, 216, 214, -1,217, 179, 215, -1,211, 209, 11, -1,210, 206, 209, -1,208, + 218, 209, -1,216, 11, 219, -1,207, 205, 203, -1,208, 207, 218, -1,11, 216, 212, -1, + 220, 209, 218, -1,220, 219, 11, -1,220, 11, 209, -1,216, 219, 221, -1,213, 217, 215, -1, + 217, 213, 222, -1,178, 217, 223, -1,217, 178, 179, -1,221, 222, 213, -1,223, 183, + 178, -1,222, 223, 217, -1,213, 216, 221, -1,216, 213, 214, -1,48, 48, 48, -1,48, + 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, + 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1, + 48, 48, 48, -1,48, 48, 48, -1,48, 48, 48, -1,225, 224, 11, -1,167, 225, 226, -1,11, + 226, 225, -1,226, 11, 227, -1,229, 226, 228, -1,226, 229, 167, -1,167, 229, 230, -1, + 232, 231, 230, -1,234, 233, 232, -1,236, 235, 76, -1,233, 237, 235, -1,239, 238, + 236, -1,232, 230, 234, -1,231, 167, 230, -1,229, 240, 230, -1,237, 234, 241, -1,228, + 226, 227, -1,229, 228, 240, -1,234, 237, 233, -1,242, 230, 240, -1,242, 241, 234, -1, + 242, 234, 230, -1,237, 241, 243, -1,76, 239, 236, -1,239, 76, 89, -1,35, 239, 244, -1, + 239, 35, 238, -1,243, 89, 76, -1,244, 245, 35, -1,89, 244, 239, -1,76, 237, 243, -1, + 237, 76, 235, -1,246, 238, 35, -1,86, 246, 247, -1,35, 247, 246, -1,247, 35, 245, -1, + 249, 247, 248, -1,247, 249, 86, -1,86, 249, 250, -1,252, 251, 250, -1,254, 253, 252, -1, + 256, 255, 160, -1,253, 257, 255, -1,258, 224, 256, -1,252, 250, 254, -1,251, 86, + 250, -1,249, 93, 250, -1,257, 254, 259, -1,248, 247, 245, -1,249, 248, 93, -1,254, + 257, 253, -1,260, 250, 93, -1,260, 259, 254, -1,260, 254, 250, -1,257, 259, 261, -1, + 160, 258, 256, -1,258, 160, 262, -1,11, 258, 263, -1,258, 11, 224, -1,261, 262, 160, -1, + 263, 227, 11, -1,262, 263, 258, -1,160, 257, 261, -1,257, 160, 255, -1,266, 265, + 264, -1,268, 266, 267, -1,264, 267, 266, -1,267, 264, 269, -1,271, 267, 270, -1,267, + 271, 268, -1,268, 271, 272, -1,274, 273, 272, -1,276, 275, 274, -1,279, 278, 277, -1, + 275, 280, 278, -1,282, 281, 279, -1,274, 272, 276, -1,273, 268, 272, -1,271, 283, + 272, -1,280, 276, 284, -1,270, 267, 269, -1,271, 270, 283, -1,276, 280, 275, -1,285, + 272, 283, -1,285, 284, 276, -1,285, 276, 272, -1,280, 284, 286, -1,277, 282, 279, -1, + 282, 277, 287, -1,289, 282, 288, -1,282, 289, 281, -1,286, 287, 277, -1,288, 290, + 289, -1,287, 288, 282, -1,277, 280, 286, -1,280, 277, 278, -1,291, 281, 289, -1,293, + 291, 292, -1,289, 292, 291, -1,292, 289, 290, -1,295, 292, 294, -1,292, 295, 293, -1, + 293, 295, 296, -1,298, 297, 296, -1,300, 299, 298, -1,303, 302, 301, -1,299, 304, + 302, -1,305, 265, 303, -1,298, 296, 300, -1,297, 293, 296, -1,295, 306, 296, -1,304, + 300, 307, -1,294, 292, 290, -1,295, 294, 306, -1,300, 304, 299, -1,308, 296, 306, -1, + 308, 307, 300, -1,308, 300, 296, -1,304, 307, 309, -1,301, 305, 303, -1,305, 301, + 310, -1,264, 305, 311, -1,305, 264, 265, -1,309, 310, 301, -1,311, 269, 264, -1,310, + 311, 305, -1,301, 304, 309, -1,304, 301, 302, -1,313, 312, 276, -1,315, 313, 314, -1, + 276, 314, 313, -1,314, 276, 284, -1,317, 314, 316, -1,314, 317, 315, -1,315, 317, + 318, -1,320, 319, 318, -1,322, 321, 320, -1,325, 324, 323, -1,321, 326, 324, -1,327, + 298, 325, -1,320, 318, 322, -1,319, 315, 318, -1,317, 328, 318, -1,326, 322, 290, -1, + 316, 314, 284, -1,317, 316, 328, -1,322, 326, 321, -1,329, 318, 328, -1,329, 290, + 322, -1,329, 322, 318, -1,326, 290, 330, -1,323, 327, 325, -1,327, 323, 331, -1,333, + 327, 332, -1,327, 333, 298, -1,330, 331, 323, -1,332, 334, 333, -1,331, 332, 327, -1, + 323, 326, 330, -1,326, 323, 324, -1,335, 298, 333, -1,337, 335, 336, -1,333, 336, + 335, -1,336, 333, 334, -1,339, 336, 338, -1,336, 339, 337, -1,337, 339, 340, -1,265, + 341, 340, -1,343, 342, 265, -1,346, 345, 344, -1,342, 347, 345, -1,348, 312, 346, -1, + 265, 340, 343, -1,341, 337, 340, -1,339, 349, 340, -1,347, 343, 350, -1,338, 336, + 334, -1,339, 338, 349, -1,343, 347, 342, -1,351, 340, 349, -1,351, 350, 343, -1,351, + 343, 340, -1,347, 350, 352, -1,344, 348, 346, -1,348, 344, 353, -1,276, 348, 354, -1, + 348, 276, 312, -1,352, 353, 344, -1,354, 284, 276, -1,353, 354, 348, -1,344, 347, + 352, -1,347, 344, 345, -1,357, 356, 355, -1,359, 357, 358, -1,355, 358, 357, -1,358, + 355, 360, -1,362, 358, 361, -1,358, 362, 359, -1,359, 362, 363, -1,365, 364, 363, -1, + 366, 335, 365, -1,369, 368, 367, -1,335, 336, 368, -1,371, 370, 369, -1,365, 363, + 366, -1,364, 359, 363, -1,362, 372, 363, -1,336, 366, 373, -1,361, 358, 360, -1,362, + 361, 372, -1,366, 336, 335, -1,374, 363, 372, -1,374, 373, 366, -1,374, 366, 363, -1, + 336, 373, 338, -1,367, 371, 369, -1,371, 367, 375, -1,264, 371, 376, -1,371, 264, + 370, -1,338, 375, 367, -1,376, 377, 264, -1,375, 376, 371, -1,367, 336, 338, -1,336, + 367, 368, -1,378, 370, 264, -1,380, 378, 379, -1,264, 379, 378, -1,379, 264, 377, -1, + 382, 379, 381, -1,379, 382, 380, -1,380, 382, 383, -1,385, 384, 383, -1,387, 386, + 385, -1,390, 389, 388, -1,386, 391, 389, -1,319, 356, 390, -1,385, 383, 387, -1,384, + 380, 383, -1,382, 392, 383, -1,391, 387, 393, -1,381, 379, 377, -1,382, 381, 392, -1, + 387, 391, 386, -1,394, 383, 392, -1,394, 393, 387, -1,394, 387, 383, -1,391, 393, + 395, -1,388, 319, 390, -1,319, 388, 396, -1,355, 319, 397, -1,319, 355, 356, -1,395, + 396, 388, -1,397, 360, 355, -1,396, 397, 319, -1,388, 391, 395, -1,391, 388, 389, -1, + 399, 398, 366, -1,400, 399, 304, -1,366, 304, 399, -1,304, 366, 401, -1,402, 304, + 309, -1,304, 402, 400, -1,400, 402, 403, -1,370, 404, 403, -1,406, 405, 370, -1,409, + 408, 407, -1,405, 410, 408, -1,411, 385, 409, -1,370, 403, 406, -1,404, 400, 403, -1, + 402, 412, 403, -1,410, 406, 377, -1,309, 304, 401, -1,402, 309, 412, -1,406, 410, + 405, -1,413, 403, 412, -1,413, 377, 406, -1,413, 406, 403, -1,410, 377, 414, -1,407, + 411, 409, -1,411, 407, 415, -1,276, 411, 416, -1,411, 276, 385, -1,414, 415, 407, -1, + 416, 393, 276, -1,415, 416, 411, -1,407, 410, 414, -1,410, 407, 408, -1,417, 385, + 276, -1,388, 417, 418, -1,276, 418, 417, -1,418, 276, 393, -1,420, 418, 419, -1,418, + 420, 388, -1,388, 420, 421, -1,422, 282, 421, -1,355, 423, 422, -1,426, 425, 424, -1, + 423, 427, 425, -1,428, 398, 426, -1,422, 421, 355, -1,282, 388, 421, -1,420, 429, + 421, -1,427, 355, 430, -1,419, 418, 393, -1,420, 419, 429, -1,355, 427, 423, -1,288, + 421, 429, -1,288, 430, 355, -1,288, 355, 421, -1,427, 430, 431, -1,424, 428, 426, -1, + 428, 424, 432, -1,366, 428, 433, -1,428, 366, 398, -1,431, 432, 424, -1,433, 401, + 366, -1,432, 433, 428, -1,424, 427, 431, -1,427, 424, 425, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/staeubli-tx60l/staeubli-tx60l.wrl b/examples/rlsg/staeubli-tx60l/staeubli-tx60l.wrl new file mode 100644 index 00000000..15f80a6e --- /dev/null +++ b/examples/rlsg/staeubli-tx60l/staeubli-tx60l.wrl @@ -0,0 +1,63 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF link0 Transform { + children [ + Inline { + url "link0.wrl" + } + ] + } + DEF link1 Transform { + rotation 1 0 0 -1.570796 + translation 0 0 0.375 + children [ + Inline { + url "link1.wrl" + } + ] + } + DEF link2 Transform { + rotation 0.577350 0.577350 0.577350 -2.094395 + translation 0 0 0.775 + children [ + Inline { + url "link2.wrl" + } + ] + } + DEF link3 Transform { + rotation 0 0 1 3.141593 + translation 0 0.02 0.775 + children [ + Inline { + url "link3.wrl" + } + ] + } + DEF link4 Transform { + rotation 0 0.70710677 0.70710677 3.1415927 + translation 0 0.02 1.225 + children [ + Inline { + url "link4.wrl" + } + ] + } + DEF link5 Transform { + translation 0 0.02 1.225 + children [ + Inline { + url "link5.wrl" + } + ] + } + DEF link6 Transform { + translation 0 0.02 1.295 + children [ + Inline { + url "link6.wrl" + } + ] + } ] +} diff --git a/examples/rlsg/staeubli-tx60l_wall.convex.wrl b/examples/rlsg/staeubli-tx60l_wall.convex.wrl new file mode 100644 index 00000000..253475fa --- /dev/null +++ b/examples/rlsg/staeubli-tx60l_wall.convex.wrl @@ -0,0 +1,15 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF staeubli-tx60l Transform { + translation -0.625 0 0 + children [ + Inline { + url "staeubli-tx60l.convex/staeubli-tx60l.wrl" + } ] + } + DEF wall Inline { + url "wall.wrl" + } ] +} + diff --git a/examples/rlsg/staeubli-tx60l_wall.convex.xml b/examples/rlsg/staeubli-tx60l_wall.convex.xml new file mode 100644 index 00000000..93c3d5ac --- /dev/null +++ b/examples/rlsg/staeubli-tx60l_wall.convex.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/staeubli-tx60l_wall.wrl b/examples/rlsg/staeubli-tx60l_wall.wrl new file mode 100644 index 00000000..cd582c96 --- /dev/null +++ b/examples/rlsg/staeubli-tx60l_wall.wrl @@ -0,0 +1,15 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF staeubli-tx60l Transform { + translation -0.625 0 0 + children [ + Inline { + url "staeubli-tx60l/staeubli-tx60l.wrl" + } ] + } + DEF wall Inline { + url "wall.wrl" + } ] +} + diff --git a/examples/rlsg/staeubli-tx60l_wall.xml b/examples/rlsg/staeubli-tx60l_wall.xml new file mode 100644 index 00000000..2c94e82c --- /dev/null +++ b/examples/rlsg/staeubli-tx60l_wall.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/unimation-puma560.convex.wrl b/examples/rlsg/unimation-puma560.convex.wrl new file mode 100644 index 00000000..27b32c9f --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex.wrl @@ -0,0 +1,11 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF unimation-puma560 Transform { + children [ + Inline { + url "unimation-puma560.convex/unimation-puma560.wrl" + } ] + } + ] +} diff --git a/examples/rlsg/unimation-puma560.convex.xml b/examples/rlsg/unimation-puma560.convex.xml new file mode 100644 index 00000000..ac73c106 --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/examples/rlsg/unimation-puma560.convex/link0.wrl b/examples/rlsg/unimation-puma560.convex/link0.wrl new file mode 100644 index 00000000..a9d4772e --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link0.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 + + +DEF link0 Transform { + rotation 0.70710683 -0.70710683 0 3.1415901 + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.15480199 0.089373998 0.00038700004, + -0.15480199 0.089530997 -0.035861999, + -0.17874999 -1.1181414e-012 -5.2512461e-012, + -0.051624998 0.23249801 0.001008, + 0.15480199 -0.089373998 -0.00038700001, + -0.042188 -0.070583999 -0.57406098, + -0.089374997 -0.154801 -0.00067099999, + 0.089374997 -0.154801 -0.00067099999, + 2.1875647e-011 -0.178748 -0.00077500002, + -0.15480199 -0.089373998 -0.00038700001, + -0.089374997 -0.154643 -0.036920998, + -0.15480199 -0.089217 -0.036637001, + -0.042188 0.075557001 -0.57342798, + 0.042188 -0.070583999 -0.57406098, + 1.3433581e-011 -0.081886999 -0.57410997, + -1.8646285e-012 -0.178591 -0.037023999, + 0.089374997 -0.154643 -0.036920998, + 0.15480199 0.089373998 0.00038700004, + 0.051624998 0.23249801 0.001008, + 0.17874999 -1.6692677e-011 2.2929349e-011, + 0.15480199 -0.089217 -0.036637001, + -0.084375001 0.0024870001 -0.57374501, + -0.17874999 0.00015700002 -0.036249999, + -0.073071003 -0.039700001 -0.573928, + 0.15480199 0.089530997 -0.035861999, + -0.042219002 0.18931501 -0.27418199, + -0.073071003 0.044674002 -0.57356203, + -0.051624998 0.232931 -0.098990999, + -0.024374999 0.207159 -0.27410501, + -3.9852262e-012 0.21369 -0.27407601, + 2.1414138e-011 0.086860999 -0.57337898, + 0.042188 0.075557001 -0.57342798, + 0.084375001 0.0024870001 -0.57374501, + 0.17874999 0.000157 -0.036249999, + 0.073071003 -0.039700001 -0.573928, + 0.042219002 0.18931501 -0.27418199, + 0.073071003 0.044674002 -0.57356203, + 0.051624998 0.232931 -0.098990999, + 0.024374999 0.207159 -0.27410501 ] + + } + coordIndex [ 1, 3, 27, -1, 1, 26, 22, -1, + 1, 27, 26, -1, 18, 27, 3, -1, + 2, 1, 22, -1, 11, 2, 22, -1, + 4, 20, 19, -1, 4, 19, 18, -1, + 4, 18, 3, -1, 0, 3, 1, -1, + 0, 2, 3, -1, 0, 1, 2, -1, + 5, 10, 11, -1, 9, 2, 11, -1, + 9, 3, 2, -1, 9, 4, 3, -1, + 15, 5, 14, -1, 15, 10, 5, -1, + 7, 4, 9, -1, 7, 8, 15, -1, + 7, 15, 16, -1, 7, 20, 4, -1, + 7, 16, 20, -1, 23, 11, 22, -1, + 23, 5, 11, -1, 23, 26, 34, -1, + 23, 14, 5, -1, 23, 34, 14, -1, + 6, 8, 7, -1, 6, 7, 9, -1, + 6, 15, 8, -1, 6, 10, 15, -1, + 6, 11, 10, -1, 6, 9, 11, -1, + 30, 26, 12, -1, 28, 27, 29, -1, + 28, 12, 26, -1, 28, 30, 12, -1, + 28, 29, 30, -1, 13, 14, 34, -1, + 13, 15, 14, -1, 13, 16, 15, -1, + 13, 20, 16, -1, 13, 34, 20, -1, + 17, 18, 19, -1, 17, 19, 24, -1, + 17, 24, 18, -1, 37, 18, 24, -1, + 37, 27, 18, -1, 37, 29, 27, -1, + 33, 24, 19, -1, 33, 19, 20, -1, + 33, 20, 34, -1, 21, 22, 26, -1, + 21, 23, 22, -1, 21, 26, 23, -1, + 36, 30, 31, -1, 36, 34, 26, -1, + 36, 26, 30, -1, 36, 24, 33, -1, + 36, 37, 24, -1, 25, 26, 27, -1, + 25, 27, 28, -1, 25, 28, 26, -1, + 38, 29, 37, -1, 38, 31, 30, -1, + 38, 30, 29, -1, 38, 36, 31, -1, + 32, 33, 34, -1, 32, 34, 36, -1, + 32, 36, 33, -1, 35, 37, 36, -1, + 35, 38, 37, -1, 35, 36, 38, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/link1.wrl b/examples/rlsg/unimation-puma560.convex/link1.wrl new file mode 100644 index 00000000..df89b4fc --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link1.wrl @@ -0,0 +1,100 @@ +#VRML V2.0 utf8 + + +DEF link1 Transform { + rotation 1 0 0 3.1415901 + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.039062999 0.065257996 -0.124876, + -1.5520641e-012 -0.080525003 -0.124992, + -0.042188 -0.089942001 -0.073071003, + -0.067658 0.036479 0.105101, + -0.067658 0.036662001 -0.124899, + -0.078125 -0.0024999999 7.0000002e-005, + 0.073071003 -0.089965999 -0.042187002, + 0.067658 -0.041462999 -0.124961, + 0.039062999 -0.070059001 -0.124984, + -0.067658 -0.041462999 -0.124961, + -0.039062999 -0.070059001 -0.124984, + -0.078125 -0.0024000001 -0.12493, + -0.073071003 -0.089965999 -0.042187002, + -0.084375001 -0.090000004 -4.0000377e-012, + 0.039062999 0.065257996 -0.124876, + -6.3032739e-012 0.075540997 0.105132, + -1.1191134e-012 0.075723998 -0.124868, + -0.039062999 0.065075003 0.105124, + -0.078125 -0.0025839999 0.10507, + 0.073071003 -0.090034001 0.042187002, + 0.067658 -0.041646 0.105039, + 0.042188 -0.090057999 0.073071003, + 0.084375001 -0.090000004 -1.495799e-012, + 0.042188 -0.089942001 -0.073071003, + -3.3594225e-012 -0.090066999 0.084375001, + 7.4801683e-013 -0.089933001 -0.084375001, + 0.067658 0.036479 0.105101, + 0.039062999 0.065075003 0.105124, + 0.078125 -0.0025839999 0.10507, + 0.067658 0.036662001 -0.124899, + 0.078125 -0.0024999999 7.0000002e-005, + 0.078125 -0.0024000001 -0.12493, + -0.039062999 -0.070242003 0.105016, + 0.039062999 -0.070242003 0.105016, + 3.5998476e-012 -0.080709003 0.105007, + -0.067658 -0.041646 0.105039, + -0.042188 -0.090057999 0.073071003, + -0.073071003 -0.090034001 0.042187002 ] + + } + coordIndex [ 11, 13, 5, -1, 31, 30, 22, -1, + 18, 5, 13, -1, 28, 22, 30, -1, + 2, 1, 25, -1, 36, 24, 34, -1, + 17, 15, 16, -1, 17, 16, 0, -1, + 37, 2, 25, -1, 37, 13, 2, -1, + 37, 24, 36, -1, 37, 18, 13, -1, + 12, 2, 13, -1, 4, 0, 16, -1, + 4, 17, 0, -1, 23, 1, 8, -1, + 23, 25, 1, -1, 7, 31, 22, -1, + 7, 8, 31, -1, 10, 8, 1, -1, + 10, 11, 4, -1, 10, 1, 2, -1, + 10, 2, 12, -1, 10, 16, 8, -1, + 10, 4, 16, -1, 29, 16, 14, -1, + 29, 8, 16, -1, 29, 31, 8, -1, + 21, 34, 24, -1, 21, 33, 34, -1, + 3, 18, 17, -1, 3, 17, 4, -1, + 3, 5, 18, -1, 3, 11, 5, -1, + 3, 4, 11, -1, 6, 7, 22, -1, + 6, 8, 7, -1, 6, 22, 23, -1, + 6, 23, 8, -1, 9, 11, 10, -1, + 9, 10, 12, -1, 9, 13, 11, -1, + 9, 12, 13, -1, 27, 29, 14, -1, + 27, 15, 17, -1, 27, 16, 15, -1, + 27, 14, 16, -1, 27, 20, 28, -1, + 35, 33, 20, -1, 35, 17, 18, -1, + 35, 27, 17, -1, 35, 20, 27, -1, + 35, 18, 37, -1, 19, 20, 33, -1, + 19, 33, 21, -1, 19, 22, 28, -1, + 19, 28, 20, -1, 19, 23, 22, -1, + 19, 24, 37, -1, 19, 21, 24, -1, + 19, 37, 25, -1, 19, 25, 23, -1, + 26, 27, 28, -1, 26, 29, 27, -1, + 26, 28, 30, -1, 26, 30, 31, -1, + 26, 31, 29, -1, 32, 34, 33, -1, + 32, 33, 35, -1, 32, 36, 34, -1, + 32, 37, 36, -1, 32, 35, 37, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/link2.wrl b/examples/rlsg/unimation-puma560.convex/link2.wrl new file mode 100644 index 00000000..7fb396fe --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link2.wrl @@ -0,0 +1,122 @@ +#VRML V2.0 utf8 + + +DEF link2 Transform { + rotation 1 0 0 3.1415901 + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ -0.65111101 0.111112 -0.13875, + -0.62543303 0.147029 -0.13875, + -0.49078101 0.102346 -0.00875, + -0.62543303 0.147029 -0.03875, + -0.62565899 -0.13643301 -0.13875, + -0.45691699 -0.146855 -0.03875, + -0.0093599996 -0.075336002 -0.03875, + -0.45691699 -0.146855 -0.13875, + -0.68092501 0.00019799999 -0.13875, + -0.62566698 -0.14672101 -0.13875, + 0.055622999 -0.037888002 -0.03875, + -0.33867499 -7.3999981e-005 1.6649024e-011, + -0.37281901 -0.102346 -0.00875, + 0.065700002 -0.00039599999 -0.03875, + 0.028147999 -0.065318003 -0.13875, + -0.0093599996 -0.075336002 -0.13875, + 0.028147999 -0.065318003 -0.03875, + 0.055622999 -0.037888002 -0.13875, + -0.65111101 0.111112 -0.03875, + -0.512411 0.046627 -1.1247367e-011, + -0.43172601 0.093125001 -1.9887371e-012, + -0.47829801 0.080686003 -1.0721334e-011, + 0.065700002 -0.00039599999 -0.13875, + -0.0093670003 -0.075333998 -0.13875, + 0.055682 0.037112001 -0.13875, + -0.65128797 -0.110763 -0.13875, + -0.65128797 -0.110763 -0.03875, + -0.68092501 0.00019799999 -0.03875, + -0.35118899 -0.046627 1.9734532e-011, + -0.38530201 -0.080686003 6.3793012e-012, + -0.52492499 7.3999981e-005 1.9461941e-011, + -0.431894 -0.118125 -0.00875, + 0.028252 0.064585999 -0.03875, + -0.37265599 0.102252 -0.00875, + -0.38517299 0.080610998 1.5917901e-011, + -0.43170601 0.118125 -0.00875, + 0.055682 0.037112001 -0.03875, + -0.351114 0.046498001 -5.6071675e-012, + -0.0092399996 0.074663997 -0.13875, + -0.0092479996 0.074662 -0.13875, + -0.45668301 0.14689501 -0.13875, + -0.45668301 0.14689501 -0.03875, + -0.0092399996 0.074663997 -0.03875, + 0.028252 0.064585999 -0.13875, + -0.47842699 -0.080610998 -1.0931599e-011, + -0.62566698 -0.14672101 -0.03875, + -0.490944 -0.102252 -0.00875, + -0.51248598 -0.046498001 -6.7687028e-012, + -0.43187401 -0.093125001 1.0708935e-011 ] + + } + coordIndex [ 4, 25, 7, -1, 10, 13, 11, -1, + 6, 7, 15, -1, 23, 7, 25, -1, + 23, 15, 7, -1, 40, 25, 1, -1, + 41, 3, 35, -1, 41, 35, 42, -1, + 41, 1, 3, -1, 41, 40, 1, -1, + 0, 1, 25, -1, 0, 25, 8, -1, + 0, 3, 1, -1, 0, 18, 3, -1, + 0, 8, 27, -1, 0, 27, 18, -1, + 45, 31, 46, -1, 16, 6, 15, -1, + 16, 10, 29, -1, 16, 31, 6, -1, + 17, 13, 10, -1, 17, 10, 16, -1, + 2, 35, 3, -1, 2, 21, 35, -1, + 2, 3, 21, -1, 19, 3, 18, -1, + 19, 21, 3, -1, 36, 11, 13, -1, + 36, 37, 11, -1, 36, 13, 24, -1, + 36, 24, 43, -1, 34, 11, 37, -1, + 9, 4, 7, -1, 9, 7, 45, -1, + 9, 25, 4, -1, 5, 6, 31, -1, + 5, 31, 45, -1, 5, 7, 6, -1, + 5, 45, 7, -1, 26, 27, 8, -1, + 26, 8, 25, -1, 26, 25, 9, -1, + 26, 9, 45, -1, 28, 10, 11, -1, + 28, 29, 10, -1, 28, 11, 34, -1, + 12, 29, 31, -1, 12, 31, 16, -1, + 12, 16, 29, -1, 22, 24, 13, -1, + 22, 13, 17, -1, 14, 15, 23, -1, + 14, 16, 15, -1, 14, 17, 16, -1, + 14, 23, 22, -1, 14, 22, 17, -1, + 30, 18, 27, -1, 30, 19, 18, -1, + 30, 28, 34, -1, 30, 21, 19, -1, + 20, 35, 21, -1, 20, 33, 35, -1, + 20, 34, 33, -1, 20, 21, 30, -1, + 20, 30, 34, -1, 39, 22, 23, -1, + 39, 43, 24, -1, 39, 24, 22, -1, + 39, 23, 25, -1, 39, 25, 40, -1, + 47, 27, 26, -1, 47, 30, 27, -1, + 47, 26, 45, -1, 48, 29, 28, -1, + 48, 28, 30, -1, 48, 30, 47, -1, + 48, 46, 31, -1, 48, 31, 29, -1, + 32, 33, 34, -1, 32, 42, 35, -1, + 32, 35, 33, -1, 32, 43, 42, -1, + 32, 36, 43, -1, 32, 37, 36, -1, + 32, 34, 37, -1, 38, 39, 40, -1, + 38, 41, 42, -1, 38, 40, 41, -1, + 38, 42, 43, -1, 38, 43, 39, -1, + 44, 45, 46, -1, 44, 47, 45, -1, + 44, 46, 48, -1, 44, 48, 47, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/link3.wrl b/examples/rlsg/unimation-puma560.convex/link3.wrl new file mode 100644 index 00000000..934b14f4 --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link3.wrl @@ -0,0 +1,55 @@ +#VRML V2.0 utf8 + + +DEF link3 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.042098999 -0.042346999 0.35124999, + 0.12568299 -0.042137999 -0.078749999, + -0.041816998 -0.042213 0.35124999, + -0.041816998 -0.041871 -0.078749999, + 0.099569 0.043171 -0.099524997, + 0.041933 -0.041974999 -0.115, + 0.099432997 -0.042079002 -0.099592999, + 0.125819 0.043111999 -0.078681998, + 0.120412 0.043120999 -0.078681998, + -0.041682001 0.043037001 0.351318, + 0.042234998 0.042902999 0.351318, + -0.015431 0.043354001 -0.099524997, + -0.036274001 0.043370999 -0.078681998, + -0.041680999 0.043379001 -0.078681998, + 0.042068999 0.043274999 -0.114932, + -0.015567 -0.041896001 -0.099592999 ] + + } + coordIndex [ 3, 2, 9, -1, 3, 9, 13, -1, + 10, 9, 2, -1, 6, 7, 1, -1, + 6, 1, 5, -1, 12, 13, 9, -1, + 12, 9, 14, -1, 15, 14, 5, -1, + 15, 5, 1, -1, 15, 1, 3, -1, + 15, 3, 13, -1, 0, 1, 7, -1, + 0, 7, 10, -1, 0, 10, 2, -1, + 0, 2, 3, -1, 0, 3, 1, -1, + 8, 10, 7, -1, 4, 5, 14, -1, + 4, 6, 5, -1, 4, 7, 6, -1, + 4, 8, 7, -1, 4, 14, 9, -1, + 4, 9, 10, -1, 4, 10, 8, -1, + 11, 13, 12, -1, 11, 12, 14, -1, + 11, 15, 13, -1, 11, 14, 15, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/link4.wrl b/examples/rlsg/unimation-puma560.convex/link4.wrl new file mode 100644 index 00000000..bfff240a --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link4.wrl @@ -0,0 +1,97 @@ +#VRML V2.0 utf8 + + +DEF link4 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.040658999 0.081032 -0.042592999, + -0.032419998 0.022719 -0.042651001, + -0.035100002 0.020035001 -0.042653002, + -0.032435998 0.043474 -0.042651001, + 0.035197001 0.020090999 0.042653002, + 0.032496002 0.043526001 0.042651001, + -0.040628999 0.043467999 0.042592999, + 0.00013099999 -0.040874999 -0.042624999, + 0.040621001 0.043531999 0.042656999, + 0.040591002 0.081032 0.042656999, + -0.035066999 -0.02059 -0.042653002, + 0.040656 -0.000218 0.042656999, + -0.020186 -0.035448 -0.042640999, + 8.5e-005 -0.040874999 0.0145, + 0.035229001 -0.020533999 0.042653002, + 0.032512002 0.022771001 0.042651001, + -0.040561002 0.043467999 -0.042656999, + -0.040525999 -0.00028199999 -0.042656999, + -0.040591002 0.080968 -0.042656999, + -0.040658999 0.080968 0.042592999, + -0.040548999 -0.00028199999 -0.014532, + 0.035296999 -0.020533999 -0.042597, + 0.040724002 -0.000218 -0.042592999, + 0.020370999 -0.035416 0.042640999, + 6.2999999e-005 -0.040874999 0.042624999, + -0.035112999 -0.02059 0.014472, + -0.020253999 -0.035448 0.042608999, + -0.035135001 -0.02059 0.042597, + -0.035089999 -0.02059 -0.014528, + -0.040571999 -0.00028199999 0.014468, + -0.040594 -0.00028199999 0.042592999, + 0.020416999 -0.035416 -0.014484, + 0.000109 -0.040874999 -0.0145, + 0.020439001 -0.035416 -0.042608999, + 0.020393999 -0.035416 0.014516, + 0.035275001 -0.020533999 -0.014472, + 0.035252001 -0.020533999 0.014528 ] + + } + coordIndex [ 0, 19, 9, -1, 0, 9, 22, -1, + 18, 19, 0, -1, 3, 0, 22, -1, + 3, 18, 0, -1, 5, 9, 19, -1, + 5, 19, 15, -1, 33, 7, 10, -1, + 1, 3, 22, -1, 1, 10, 3, -1, + 1, 22, 33, -1, 1, 33, 10, -1, + 2, 10, 18, -1, 2, 3, 10, -1, + 2, 18, 3, -1, 11, 9, 14, -1, + 4, 5, 15, -1, 4, 15, 14, -1, + 4, 9, 5, -1, 4, 14, 9, -1, + 6, 15, 19, -1, 6, 19, 30, -1, + 6, 30, 15, -1, 17, 18, 10, -1, + 21, 33, 22, -1, 32, 24, 7, -1, + 32, 7, 33, -1, 23, 14, 24, -1, + 13, 7, 24, -1, 12, 10, 7, -1, + 12, 28, 10, -1, 12, 7, 13, -1, + 8, 22, 9, -1, 8, 11, 22, -1, + 8, 9, 11, -1, 20, 19, 18, -1, + 20, 17, 10, -1, 20, 10, 28, -1, + 36, 14, 23, -1, 36, 22, 11, -1, + 36, 11, 14, -1, 26, 28, 12, -1, + 26, 12, 13, -1, 26, 30, 27, -1, + 26, 13, 24, -1, 26, 24, 14, -1, + 26, 14, 15, -1, 26, 15, 30, -1, + 16, 18, 17, -1, 16, 20, 18, -1, + 16, 17, 20, -1, 29, 30, 19, -1, + 29, 19, 20, -1, 29, 20, 28, -1, + 35, 33, 21, -1, 35, 21, 22, -1, + 35, 22, 36, -1, 34, 36, 23, -1, + 34, 24, 32, -1, 34, 23, 24, -1, + 25, 26, 27, -1, 25, 28, 26, -1, + 25, 29, 28, -1, 25, 27, 30, -1, + 25, 30, 29, -1, 31, 32, 33, -1, + 31, 34, 32, -1, 31, 33, 35, -1, + 31, 35, 36, -1, 31, 36, 34, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/link5.wrl b/examples/rlsg/unimation-puma560.convex/link5.wrl new file mode 100644 index 00000000..22504f13 --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link5.wrl @@ -0,0 +1,71 @@ +#VRML V2.0 utf8 + + +DEF link5 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 1.7537267e-012 0.013782 0.040614001, + -1.1191134e-012 -0.013782 -0.040614001, + 0.035181999 -0.013734 0.020323001, + 0.040624999 -0.01375 1.0999999e-005, + 0.035181999 0.013766 0.020302, + 0.020313 -0.013722 0.035193, + 0.020313 -0.013778 -0.035170998, + -0.035181999 -0.013734 0.020323001, + -0.035181999 0.013766 0.020302, + -0.040624999 -0.01375 1.1000003e-005, + -0.020313 -0.013722 0.035193, + -1.5520641e-012 -0.013718 0.040635999, + -0.020313 -0.013778 -0.035170998, + -0.035181999 0.013734 -0.020323001, + -0.040624999 0.01375 -1.0999995e-005, + -0.020313 0.013778 0.035170998, + -0.020313 0.013722 -0.035193, + -0.035181999 -0.013766 -0.020302, + 0.035181999 0.013734 -0.020323001, + 0.020313 0.013778 0.035170998, + 0.040624999 0.01375 -1.1000002e-005, + 6.4833755e-012 0.013718 -0.040635999, + 0.020313 0.013722 -0.035193, + 0.035181999 -0.013766 -0.020302 ] + + } + coordIndex [ 10, 11, 0, -1, 15, 10, 0, -1, + 12, 6, 11, -1, 19, 15, 0, -1, + 19, 4, 20, -1, 3, 20, 4, -1, + 17, 12, 9, -1, 17, 16, 12, -1, + 17, 9, 14, -1, 1, 6, 12, -1, + 1, 12, 16, -1, 1, 22, 6, -1, + 5, 4, 19, -1, 5, 0, 11, -1, + 5, 19, 0, -1, 23, 6, 22, -1, + 23, 3, 6, -1, 23, 20, 3, -1, + 8, 14, 9, -1, 8, 10, 15, -1, + 8, 15, 14, -1, 21, 15, 19, -1, + 21, 1, 16, -1, 21, 22, 1, -1, + 2, 3, 4, -1, 2, 4, 5, -1, + 2, 5, 11, -1, 2, 11, 6, -1, + 2, 6, 3, -1, 7, 8, 9, -1, + 7, 10, 8, -1, 7, 11, 10, -1, + 7, 9, 12, -1, 7, 12, 11, -1, + 13, 14, 15, -1, 13, 15, 21, -1, + 13, 21, 16, -1, 13, 16, 17, -1, + 13, 17, 14, -1, 18, 19, 20, -1, + 18, 21, 19, -1, 18, 22, 21, -1, + 18, 20, 23, -1, 18, 23, 22, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/link6.wrl b/examples/rlsg/unimation-puma560.convex/link6.wrl new file mode 100644 index 00000000..bde61a30 --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/link6.wrl @@ -0,0 +1,77 @@ +#VRML V2.0 utf8 + + +DEF link6 Transform { + children + Shape { + appearance + Appearance { + material + Material { + } + + } + geometry + IndexedFaceSet { + coord + Coordinate { + point [ 0.016238 0.0093750004 0.0099999998, + -0.016238 -0.0093750004 0.0049999999, + -0.0093750004 -0.016238 0.0099999998, + -0.016238 -0.0093750004 0.0099999998, + -0.016238 -0.0093750004 -2.969867e-012, + -0.0093750004 -0.016238 -4.7367676e-013, + -0.018750001 2.6803971e-012 0.0049999999, + 0.016238 0.0093750004 -2.9667249e-013, + -0.016238 0.0093750004 0.0049999999, + -0.016238 0.0093750004 -3.1155809e-012, + -0.016238 0.0093750004 0.0099999998, + -0.018750001 5.9654183e-012 -5.6788029e-012, + 0.0093750004 -0.016238 0.0099999998, + 3.1452425e-012 -0.018750001 0.0099999998, + 5.8750331e-012 -0.018750001 3.4840698e-012, + 0.016238 -0.0093750004 0.0049999999, + 0.0093750004 -0.016238 -4.991136e-012, + 0.016238 -0.0093750004 4.9060374e-012, + 0.016238 -0.0093750004 0.0099999998, + 0.018750001 -5.4361199e-012 0.0049999999, + 0.018750001 -2.9988434e-012 -1.8749672e-012, + -0.0093750004 0.016238 0.0099999998, + 0.0093750004 0.016238 0.0099999998, + 5.4517471e-012 0.018750001 5.3910622e-012, + 0.0093750004 0.016238 5.2978459e-012, + -0.0093750004 0.016238 -2.4109655e-012, + 3.3753779e-012 0.018750001 0.0099999998 ] + + } + coordIndex [ 6, 10, 11, -1, 6, 3, 10, -1, + 13, 10, 3, -1, 2, 14, 13, -1, + 2, 13, 3, -1, 16, 4, 11, -1, + 9, 25, 11, -1, 0, 19, 7, -1, + 0, 7, 22, -1, 18, 10, 13, -1, + 18, 22, 10, -1, 18, 0, 22, -1, + 18, 19, 0, -1, 21, 10, 22, -1, + 24, 7, 25, -1, 24, 22, 7, -1, + 5, 14, 2, -1, 5, 16, 14, -1, + 5, 4, 16, -1, 1, 2, 3, -1, + 1, 11, 4, -1, 1, 4, 5, -1, + 1, 5, 2, -1, 1, 6, 11, -1, + 1, 3, 6, -1, 20, 17, 16, -1, + 20, 7, 19, -1, 20, 25, 7, -1, + 20, 11, 25, -1, 20, 16, 11, -1, + 8, 25, 9, -1, 8, 10, 21, -1, + 8, 21, 25, -1, 8, 11, 10, -1, + 8, 9, 11, -1, 12, 18, 13, -1, + 12, 16, 18, -1, 12, 13, 14, -1, + 12, 14, 16, -1, 15, 16, 17, -1, + 15, 18, 16, -1, 15, 19, 18, -1, + 15, 20, 19, -1, 15, 17, 20, -1, + 26, 25, 21, -1, 26, 21, 22, -1, + 26, 22, 24, -1, 23, 24, 25, -1, + 23, 25, 26, -1, 23, 26, 24, -1 ] + + } + + } + +} diff --git a/examples/rlsg/unimation-puma560.convex/unimation-puma560.wrl b/examples/rlsg/unimation-puma560.convex/unimation-puma560.wrl new file mode 100644 index 00000000..9478b1d6 --- /dev/null +++ b/examples/rlsg/unimation-puma560.convex/unimation-puma560.wrl @@ -0,0 +1,63 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF link0 Transform { + children [ + Inline { + url "link0.wrl" + } + ] + } + DEF link1 Transform { + rotation 1 0 0 -1.570796 + translation 0 0 0.6604 + children [ + Inline { + url "link1.wrl" + } + ] + } + DEF link2 Transform { + rotation 1 0 0 -1.570796 + translation 0.4318 0.1291 0.6604 + children [ + Inline { + url "link2.wrl" + } + ] + } + DEF link3 Transform { + translation 0.4115 0.1291 0.6604 + children [ + Inline { + url "link3.wrl" + } + ] + } + DEF link4 Transform { + rotation 1 0 0 -1.570796 + translation 0.4115 0.1291 1.0935 + children [ + Inline { + url "link4.wrl" + } + ] + } + DEF link5 Transform { + translation 0.4115 0.1291 1.0935 + children [ + Inline { + url "link5.wrl" + } + ] + } + DEF link6 Transform { + translation 0.4115 0.1291 1.13475 + children [ + Inline { + url "link6.wrl" + } + ] + } + ] +} diff --git a/examples/rlsg/unimation-puma560.wrl b/examples/rlsg/unimation-puma560.wrl new file mode 100644 index 00000000..50500de0 --- /dev/null +++ b/examples/rlsg/unimation-puma560.wrl @@ -0,0 +1,11 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF unimation-puma560 Transform { + children [ + Inline { + url "unimation-puma560/unimation-puma560.wrl" + } ] + } + ] +} diff --git a/examples/rlsg/unimation-puma560.xml b/examples/rlsg/unimation-puma560.xml new file mode 100644 index 00000000..bf67c2f7 --- /dev/null +++ b/examples/rlsg/unimation-puma560.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/examples/rlsg/unimation-puma560/link0.wrl b/examples/rlsg/unimation-puma560/link0.wrl new file mode 100644 index 00000000..db8d30c7 --- /dev/null +++ b/examples/rlsg/unimation-puma560/link0.wrl @@ -0,0 +1,227 @@ +#VRML V2.0 utf8 + +DEF link0 Transform { + rotation 0.707107 -0.707107 0 3.14159 + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.501961 0.501961 0.501961 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.752941 0.752941 0.752941 + ambientIntensity 0.137255 + shininess 0.088388 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 121 + 0.04875 0.16494 -0.274288, 0.042219 0.140566 -0.274393, 0.024375 0.122722 -0.274471, 0 0.116191 -0.274499, + -0.024375 0.122722 -0.274471, -0.042219 0.140566 -0.274393, -0.04875 0.16494 -0.274288, -0.042219 0.189315 -0.274182, + -0.024375 0.207159 -0.274105, 0 0.21369 -0.274076, 0.024375 0.207159 -0.274105, 0.042219 0.189315 -0.274182, + 0.042219 0.139807 -0.099395, 0.04875 0.164182 -0.099289, 0.024375 0.121964 -0.099472, 0 0.115432 -0.099501, + -0.024375 0.121964 -0.099472, -0.042219 0.139807 -0.099395, -0.04875 0.164182 -0.099289, -0.042219 0.188557 -0.099184, + -0.024375 0.2064 -0.099106, 0 0.212931 -0.099078, 0.024375 0.2064 -0.099106, 0.042219 0.188557 -0.099184, + -0.042188 0.073504 -0.099682, -0.051625 0.064066 -0.099723, -0.051625 0.232931 -0.098991, 0.051625 0.232931 -0.098991, + 0.051625 0.064066 -0.099723, 0.042188 0.073504 -0.099682, 0 0.084808 -0.099633, -0.051625 0.063898 -0.060974, + -0.051625 0.232498 0.001008, -0.051625 0.164915 0.000715, -0.051625 0.165073 -0.035535, -0.051625 0.160073 -0.035557, + -0.051625 0.160116 -0.045556, -0.051625 0.09583 -0.060835, 0.051625 0.232498 0.001008, 0.051625 0.063898 -0.060974, + 0.051625 0.09583 -0.060835, 0.051625 0.160116 -0.045556, 0.051625 0.160073 -0.035557, 0.051625 0.165073 -0.035535, + 0.051625 0.164915 0.000715, 0.089375 0.154801 0.000671, 0.154802 0.089374 0.000387, 0.17875 0 0, 0.154802 -0.089374 -0.000387, + 0.089375 -0.154801 -0.000671, 0 -0.178748 -0.000775, -0.089375 -0.154801 -0.000671, -0.154802 -0.089374 -0.000387, + -0.17875 0 0, -0.154802 0.089374 0.000387, -0.089375 0.154801 0.000671, 0.084375 0.002487 -0.573745, + 0.073071 -0.0397 -0.573928, 0.042188 -0.070584 -0.574061, 0 -0.081887 -0.57411, -0.042188 -0.070584 -0.574061, + -0.073071 -0.0397 -0.573928, -0.084375 0.002487 -0.573745, -0.073071 0.044674 -0.573562, -0.042188 0.075557 -0.573428, + 0 0.086861 -0.573379, 0.042188 0.075557 -0.573428, 0.073071 0.044674 -0.573562, 0.073071 -0.041922 -0.061432, + 0.084375 0.000265 -0.061249, 0.042188 -0.072805 -0.061566, 0 -0.084109 -0.061615, -0.042188 -0.072805 -0.061566, + -0.073071 -0.041922 -0.061432, -0.084375 0.000265 -0.061249, -0.073071 0.042453 -0.061067, 0.073071 0.042453 -0.061067, + 0.054699 0.095006 -0.060839, 0.094742 0.054964 -0.061012, 0.109398 0.000265 -0.061249, 0.094742 -0.054433 -0.061487, + 0.054699 -0.094475 -0.06166, 0 -0.109132 -0.061724, -0.054699 -0.094475 -0.06166, -0.094742 -0.054433 -0.061487, + -0.109398 0.000265 -0.061249, -0.094742 0.054964 -0.061012, -0.054699 0.095006 -0.060839, 0.150472 -0.086674 -0.046626, + 0.17375 0.0002 -0.04625, 0.086875 -0.15027 -0.046902, 0 -0.173548 -0.047003, -0.086875 -0.15027 -0.046902, + -0.150472 -0.086674 -0.046626, -0.17375 0.0002 -0.04625, -0.150472 0.087075 -0.045873, -0.086875 0.150671 -0.045597, + 0.086875 0.150671 -0.045597, 0.150472 0.087075 -0.045873, 0.150472 -0.086717 -0.036626, 0.17375 0.000157 -0.03625, + 0.086875 -0.150313 -0.036902, 0 -0.173591 -0.037003, -0.086875 -0.150313 -0.036902, -0.150472 -0.086717 -0.036626, + -0.17375 0.000157 -0.03625, -0.150472 0.087031 -0.035873, -0.086875 0.150628 -0.035597, 0.086875 0.150628 -0.035597, + 0.150472 0.087031 -0.035873, 0.089375 0.154958 -0.035579, 0.154802 0.089531 -0.035862, 0.17875 0.000157 -0.03625, + 0.154802 -0.089217 -0.036637, 0.089375 -0.154643 -0.036921, 0 -0.178591 -0.037024, -0.089375 -0.154643 -0.036921, + -0.154802 -0.089217 -0.036637, -0.17875 0.000157 -0.03625, -0.154802 0.089531 -0.035862, -0.089375 0.154958 -0.035579] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 239 + -7.23933e-006 0.00433037 -0.999991, -1.6533e-005 0.00432826 -0.999991, -7.72381e-005 0.00432826 -0.999991, + 1.41067e-005 0.00433632 -0.999991, -2.13803e-006 0.0043364 -0.999991, -2.24256e-006 0.00434234 -0.999991, + -2.91005e-006 0.0043333 -0.999991, 5.17386e-006 0.00432965 -0.999991, 0 0.00433147 -0.999991, + 8.43881e-006 0.00434548 -0.999991, -1.46156e-005 0.00432242 -0.999991, -4.61087e-005 0.00426788 -0.999991, + -0.907075 0.420964 0.0018253, -0.996035 0.0889604 0.000385841, -0.818109 0.575058 0.00249275, + -0.996036 -0.0889537 -0.000385305, -0.575054 0.818108 0.003545, -0.420974 0.907064 0.00393081, -0.0889725 0.996025 0.00431804, + 0.0889601 0.996026 0.00431804, 0.420982 0.90706 0.00393079, 0.575064 0.818101 0.00354497, 0.818107 0.57506 0.00249276, + 0.907072 0.420972 0.00182533, 0.996035 0.0889605 0.000385842, 0.996035 -0.0889571 -0.000385319, + 0.907077 -0.420961 -0.00182339, 0.818109 -0.575058 -0.00249223, 0.575054 -0.818108 -0.00354687, 0.420962 -0.90707 -0.00393407, + 0.0889595 -0.996026 -0.00431989, -0.0889596 -0.996026 -0.00431989, -0.42097 -0.907066 -0.00393406, + -0.575054 -0.818108 -0.00354687, -0.818109 -0.575058 -0.00249223, -0.907073 -0.420969 -0.00182343, + 9.52962e-006 0.0043074 -0.999991, 1.1738e-005 0.00431802 -0.999991, 4.48715e-005 0.00427184 -0.999991, + -6.32628e-006 0.0043358 -0.999991, -8.21016e-006 0.00432863 -0.999991, 9.98569e-006 0.00433116 -0.999991, + -1.68717e-006 0.00432863 -0.999991, -6.16153e-006 0.00433117 -0.999991, -9.06937e-006 0.00433321 -0.999991, + 9.06937e-006 0.00433321 -0.999991, 4.29118e-005 0.00433398 -0.999991, 1.60357e-005 0.00433836 -0.999991, + 3.42894e-005 0.00434208 -0.999991, 1.21411e-005 0.00439291 -0.99999, -3.24411e-006 0.00436145 -0.999991, + 2.2339e-005 0.00440764 -0.99999, 4.1273e-006 0.00433874 -0.999991, -3.42894e-005 0.00434208 -0.999991, + -4.29118e-005 0.00433398 -0.999991, 1 0 0, 0 -0.999991 -0.00432998, -1 0 0, 5.69878e-007 0.0043344 -0.999991, + 0 0.00433537 -0.999991, -3.59484e-006 0.0043338 -0.999991, -7.18967e-006 0.00433215 -0.999991, + -3.54582e-006 0.00433713 -0.999991, -4.70198e-006 0.00433122 -0.999991, 3.13118e-007 0.00433387 -0.999991, + 2.88719e-006 0.00433633 -0.999991, -7.86642e-008 0.00433559 -0.999991, -3.52889e-006 0.00433547 -0.999991, + 1.0997e-007 0.00433357 -0.999991, 8.24338e-006 0.00432978 -0.999991, 9.74275e-006 0.00432893 -0.999991, + 1.44756e-005 0.0043262 -0.999991, -1.82465e-006 0.00433467 -0.999991, -1.58901e-005 0.00433746 -0.999991, + 0 0.00433746 -0.999991, -1.5067e-005 0.00433298 -0.999991, 2.20542e-007 0.00432933 -0.999991, + 5.21343e-006 0.00432373 -0.999991, 5.81603e-006 0.00432739 -0.999991, 0 0.00433901 -0.999991, + -4.21647e-007 0.00433899 -0.999991, 7.30304e-007 0.00434014 -0.999991, 2.3039e-006 0.00434287 -0.999991, + -0.907076 0.420963 0.00182514, -0.996035 0.0889627 0.00038571, -0.818116 0.575048 0.00249273, + -0.996035 -0.0889588 -0.000385521, -0.575062 0.818102 0.00354589, -0.420967 0.907068 0.00393161, + -0.0889609 0.996026 0.00431778, 0.0889537 0.996026 0.00431778, 0.420971 0.907066 0.0039316, 0.575067 0.818098 0.00354587, + 0.818116 0.575048 0.00249273, 0.907074 0.420968 0.00182516, 0.996035 0.0889608 0.000385702, 0.996035 -0.0889588 -0.000385521, + 0.866025 -0.499996 -0.00216732, 0.818105 -0.575064 -0.00249264, 0.575078 -0.818091 -0.00354575, + 0.707112 -0.707095 -0.00306501, 0.420989 -0.907057 -0.00393077, 0.707094 -0.707113 -0.00306582, + 0.0889612 -0.996026 -0.00431632, -0.0889612 -0.996026 -0.00431632, -0.500012 -0.86601 -0.00375328, + -0.500024 -0.866004 -0.00375287, -0.707123 -0.707084 -0.00306518, -0.791961 -0.610566 -0.00264673, + -0.707102 -0.707105 -0.00306508, -0.907071 -0.420973 -0.00182454, 5.86249e-005 0.00434538 -0.999991, + 3.18385e-005 0.00434974 -0.999991, 0.000134716 0.0043529 -0.999991, -2.00678e-005 0.00433851 -0.999991, + -3.14024e-005 0.00434171 -0.999991, -3.18385e-005 0.00434974 -0.999991, -5.86249e-005 0.00434538 -0.999991, + -0.000134716 0.0043529 -0.999991, 2.36258e-005 0.00434585 -0.999991, 1.78037e-005 0.00433788 -0.999991, + 1.05589e-005 0.00433545 -0.999991, -9.71431e-006 0.00433691 -0.999991, -1.89515e-005 0.00434829 -0.999991, + -1.87174e-005 0.00434397 -0.999991, -6.77983e-006 0.00434263 -0.999991, 5.85744e-007 0.00434522 -0.999991, + -5.97356e-007 0.00435113 -0.999991, -2.60107e-006 0.00434972 -0.999991, 2.942e-006 0.00434156 -0.999991, + 1.08735e-005 0.00434287 -0.999991, 1.81463e-005 0.00434947 -0.999991, 1.44749e-005 0.0043516 -0.999991, + 7.49239e-006 0.00434258 -0.999991, -1.36901e-005 0.00433184 -0.999991, -0.226955 0.016046 0.973773, + -0.206688 0.0917049 0.9741, -0.226952 -0.0244973 0.973598, -0.186421 0.126821 0.97425, -0.131039 0.182197 0.974491, + -0.0959282 0.202463 0.97458, -0.020271 0.222737 0.974668, 0.0202745 0.222738 0.974667, 0.0959243 0.202467 0.97458, + 0.131034 0.182197 0.974492, 0.186423 0.126812 0.974251, 0.206695 0.0917016 0.974099, 0.226959 0.0160499 0.973772, + 0.226951 -0.0244889 0.973598, 0.206684 -0.100139 0.97327, 0.186417 -0.135255 0.973116, 0.113477 -0.200817 0.973034, + 0.113505 -0.200823 0.97303, 0.0606597 -0.230808 0.971107, 0.060605 -0.230806 0.971111, -0.0606597 -0.230808 0.971107, + -0.095893 -0.210914 0.97279, -0.060605 -0.230806 0.971111, -0.131038 -0.190641 0.972875, -0.18642 -0.135254 0.973116, + -0.206683 -0.100143 0.97327, -0.907072 0.420971 0.00181033, -0.996035 0.0889613 0.000382576, -0.818109 0.575057 0.00247302, + -0.996035 -0.0889603 -0.000391453, -0.57506 0.818104 0.00351823, -0.420974 0.907064 0.00390081, + -0.0889628 0.996026 0.00428338, 0.0889628 0.996026 0.00428338, 0.420974 0.907064 0.00390081, 0.57506 0.818104 0.00351823, + 0.818109 0.575057 0.00247302, 0.907072 0.420971 0.00181033, 0.996035 0.0889622 0.00038258, 0.996035 -0.0889603 -0.000391453, + 0.907073 -0.42097 -0.00184347, 0.818111 -0.575055 -0.00250616, 0.499999 -0.866018 -0.00374267, 0.500001 -0.866017 -0.00372429, + 0.258816 -0.965918 -0.00415411, 0.258816 -0.965918 -0.00415432, -0.499999 -0.866018 -0.00374267, + -0.258816 -0.965918 -0.00415411, -0.258816 -0.965918 -0.00415432, -0.499997 -0.866019 -0.00372429, + -0.818111 -0.575054 -0.00250615, -0.907074 -0.420967 -0.00184346, 2.32224e-005 0.00428615 -0.999991, + 2.26279e-006 0.00428391 -0.999991, -1.35026e-005 0.00440026 -0.99999, 6.69036e-005 0.00419578 -0.999991, + -2.26279e-006 0.00428391 -0.999991, -3.70589e-005 0.00426218 -0.999991, 1.35026e-005 0.00440026 -0.99999, + -3.41781e-005 0.0042494 -0.999991, -1.8334e-005 0.00430994 -0.999991, 1.72165e-005 0.00435022 -0.999991, + 9.83478e-006 0.00433961 -0.999991, -1.20332e-005 0.00433581 -0.999991, -1.93017e-005 0.00434345 -0.999991, + -2.94189e-005 0.00435682 -0.999991, -2.40959e-005 0.0043696 -0.99999, -4.41549e-006 0.00431538 -0.999991, + -3.32922e-006 0.0042586 -0.999991, 7.16315e-006 0.0042603 -0.999991, 4.6868e-006 0.00431718 -0.999991, + 2.1091e-005 0.00437121 -0.99999, 2.90056e-005 0.00435732 -0.999991, 1.90699e-005 0.00434318 -0.999991, + 1.16966e-005 0.00433628 -0.999991, -1.01178e-005 0.00433902 -0.999991, -1.92562e-005 0.00434725 -0.999991, + 1.93369e-005 0.00430817 -0.999991, -0.907073 0.420969 0.00182322, -0.996035 0.0889617 0.000385293, + -0.996035 -0.0889617 -0.000385304, -0.818111 0.575055 0.00249726, -0.57506 0.818104 0.00355904, -0.420972 0.907065 0.00394437, + -0.0889631 0.996026 0.00432301, 0.0889597 0.996026 0.00432301, 0.420974 0.907064 0.00394437, 0.575062 0.818102 0.00355903, + 0.818111 0.575055 0.00249726, 0.907072 0.420971 0.00182323, 0.996035 0.0889617 0.000385293, 0.996035 -0.0889617 -0.000385304, + 0.907073 -0.420969 -0.00182326, 0.818112 -0.575053 -0.00249059, 0.575057 -0.818105 -0.00354324, + 0.420968 -0.907067 -0.00393778, 0.258808 -0.96592 -0.0041969, 0.25882 -0.965916 -0.00421038, -0.420968 -0.907067 -0.00393778, + -0.258808 -0.96592 -0.0041969, -0.258796 -0.965923 -0.00421041, -0.575064 -0.818101 -0.00354322, + -0.818112 -0.575053 -0.00249059, -0.907073 -0.420969 -0.00182326] + } + coordIndex [ + 0, 1, 11, -1,1, 2, 11, -1,2, 3, 11, -1,3, 4, 11, -1,4, 5, 11, -1,5, 6, 11, -1,6, + 7, 11, -1,7, 8, 11, -1,8, 9, 11, -1,9, 10, 11, -1,12, 13, 1, -1,1, 13, 0, -1,14, + 12, 2, -1,2, 12, 1, -1,15, 14, 3, -1,3, 14, 2, -1,16, 15, 4, -1,4, 15, 3, -1,17, + 16, 5, -1,5, 16, 4, -1,18, 17, 6, -1,6, 17, 5, -1,19, 18, 7, -1,7, 18, 6, -1,20, + 19, 8, -1,8, 19, 7, -1,21, 20, 9, -1,9, 20, 8, -1,22, 21, 10, -1,10, 21, 9, -1,23, + 22, 11, -1,11, 22, 10, -1,13, 23, 0, -1,0, 23, 11, -1,14, 24, 15, -1,15, 24, 16, -1, + 30, 12, 29, -1,16, 24, 17, -1,24, 25, 17, -1,29, 12, 28, -1,12, 13, 28, -1,28, 13, + 27, -1,13, 23, 27, -1,23, 22, 27, -1,27, 22, 26, -1,22, 21, 26, -1,21, 20, 26, -1, + 20, 19, 26, -1,19, 18, 26, -1,26, 18, 25, -1,18, 17, 25, -1,31, 25, 37, -1,25, 26, + 37, -1,37, 26, 36, -1,26, 32, 36, -1,33, 34, 32, -1,35, 36, 34, -1,32, 34, 36, -1, + 32, 26, 38, -1,38, 26, 27, -1,28, 39, 27, -1,39, 40, 27, -1,40, 41, 27, -1,27, 41, + 38, -1,42, 43, 41, -1,41, 43, 38, -1,43, 44, 38, -1,32, 38, 33, -1,38, 44, 33, -1, + 45, 46, 44, -1,46, 47, 44, -1,44, 47, 33, -1,47, 48, 33, -1,48, 49, 33, -1,49, 50, + 33, -1,50, 51, 33, -1,51, 52, 33, -1,52, 53, 33, -1,33, 53, 55, -1,53, 54, 55, -1, + 56, 57, 67, -1,57, 58, 67, -1,58, 59, 67, -1,59, 60, 67, -1,60, 61, 67, -1,61, 62, + 67, -1,62, 63, 67, -1,63, 64, 67, -1,64, 65, 67, -1,65, 66, 67, -1,68, 69, 57, -1, + 57, 69, 56, -1,70, 68, 58, -1,58, 68, 57, -1,71, 70, 59, -1,59, 70, 58, -1,72, 71, + 60, -1,60, 71, 59, -1,73, 72, 61, -1,61, 72, 60, -1,74, 73, 62, -1,62, 73, 61, -1, + 75, 74, 63, -1,63, 74, 62, -1,24, 25, 64, -1,31, 75, 25, -1,75, 63, 25, -1,25, 63, + 64, -1,30, 24, 65, -1,65, 24, 64, -1,29, 30, 66, -1,66, 30, 65, -1,29, 66, 28, -1, + 66, 67, 28, -1,76, 39, 67, -1,28, 67, 39, -1,69, 76, 56, -1,56, 76, 67, -1,37, 31, + 87, -1,87, 31, 86, -1,31, 75, 86, -1,40, 77, 39, -1,77, 78, 39, -1,39, 78, 76, -1, + 78, 79, 76, -1,76, 79, 69, -1,79, 80, 69, -1,69, 80, 68, -1,80, 81, 68, -1,68, 81, + 70, -1,81, 82, 70, -1,70, 82, 71, -1,82, 83, 71, -1,71, 83, 72, -1,83, 84, 72, -1, + 72, 84, 73, -1,84, 85, 73, -1,73, 85, 74, -1,85, 86, 74, -1,75, 74, 86, -1,79, 80, + 89, -1,89, 80, 88, -1,80, 81, 88, -1,88, 81, 90, -1,81, 82, 90, -1,90, 82, 91, -1, + 82, 83, 91, -1,91, 83, 92, -1,83, 84, 92, -1,92, 84, 93, -1,84, 85, 93, -1,93, 85, + 94, -1,85, 86, 94, -1,94, 86, 95, -1,86, 87, 95, -1,95, 87, 96, -1,37, 36, 87, -1, + 36, 96, 87, -1,40, 77, 41, -1,41, 77, 97, -1,77, 78, 97, -1,97, 78, 98, -1,78, 79, + 98, -1,98, 79, 89, -1,99, 100, 88, -1,88, 100, 89, -1,101, 99, 90, -1,90, 99, 88, -1, + 102, 101, 91, -1,91, 101, 90, -1,103, 102, 92, -1,92, 102, 91, -1,104, 103, 93, -1, + 93, 103, 92, -1,105, 104, 94, -1,94, 104, 93, -1,106, 105, 95, -1,95, 105, 94, -1, + 107, 106, 96, -1,96, 106, 95, -1,36, 35, 96, -1,96, 35, 107, -1,42, 41, 108, -1,108, + 41, 97, -1,109, 108, 98, -1,98, 108, 97, -1,100, 109, 89, -1,89, 109, 98, -1,34, + 35, 120, -1,35, 107, 120, -1,43, 110, 42, -1,42, 110, 108, -1,110, 111, 108, -1,108, + 111, 109, -1,111, 112, 109, -1,109, 112, 100, -1,112, 113, 100, -1,100, 113, 99, -1, + 113, 114, 99, -1,99, 114, 101, -1,114, 115, 101, -1,101, 115, 102, -1,115, 116, 102, -1, + 102, 116, 103, -1,116, 117, 103, -1,103, 117, 104, -1,117, 118, 104, -1,104, 118, + 105, -1,118, 119, 105, -1,105, 119, 106, -1,119, 120, 106, -1,107, 106, 120, -1,47, + 112, 48, -1,48, 112, 113, -1,48, 113, 49, -1,49, 113, 114, -1,49, 114, 50, -1,50, + 114, 115, -1,50, 115, 51, -1,51, 115, 116, -1,51, 116, 52, -1,52, 116, 117, -1,52, + 117, 53, -1,53, 117, 118, -1,53, 118, 54, -1,54, 118, 119, -1,54, 119, 55, -1,55, + 119, 120, -1,34, 33, 120, -1,120, 33, 55, -1,44, 43, 45, -1,45, 43, 110, -1,45, 110, + 46, -1,46, 110, 111, -1,46, 111, 47, -1,47, 111, 112, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,1, 3, 0, -1,3, 4, 0, -1,4, 5, 0, -1,5, 6, 0, -1,6, 7, 0, -1,7, 8, 0, -1, + 8, 9, 0, -1,9, 10, 0, -1,10, 11, 0, -1,14, 13, 12, -1,12, 13, 15, -1,17, 14, 16, -1, + 16, 14, 12, -1,19, 17, 18, -1,18, 17, 16, -1,21, 19, 20, -1,20, 19, 18, -1,23, 21, + 22, -1,22, 21, 20, -1,25, 23, 24, -1,24, 23, 22, -1,27, 25, 26, -1,26, 25, 24, -1, + 29, 27, 28, -1,28, 27, 26, -1,31, 29, 30, -1,30, 29, 28, -1,33, 31, 32, -1,32, 31, + 30, -1,35, 33, 34, -1,34, 33, 32, -1,13, 35, 15, -1,15, 35, 34, -1,38, 37, 36, -1, + 36, 37, 39, -1,42, 41, 40, -1,39, 37, 43, -1,37, 44, 43, -1,40, 41, 45, -1,41, 46, + 45, -1,45, 46, 47, -1,46, 48, 47, -1,48, 49, 47, -1,47, 49, 50, -1,49, 51, 50, -1, + 51, 52, 50, -1,52, 53, 50, -1,53, 54, 50, -1,50, 54, 44, -1,54, 43, 44, -1,55, 55, + 55, -1,55, 55, 55, -1,55, 55, 55, -1,55, 55, 55, -1,55, 55, 55, -1,55, 55, 55, -1, + 55, 55, 55, -1,56, 56, 56, -1,56, 56, 56, -1,57, 57, 57, -1,57, 57, 57, -1,57, 57, + 57, -1,57, 57, 57, -1,57, 57, 57, -1,57, 57, 57, -1,57, 57, 57, -1,59, 59, 58, -1, + 59, 60, 58, -1,62, 61, 60, -1,61, 63, 60, -1,60, 63, 58, -1,63, 64, 58, -1,64, 65, + 58, -1,65, 66, 58, -1,66, 67, 58, -1,67, 68, 58, -1,68, 69, 58, -1,58, 69, 70, -1, + 69, 71, 70, -1,74, 73, 72, -1,73, 75, 72, -1,75, 76, 72, -1,76, 77, 72, -1,77, 78, + 72, -1,78, 74, 72, -1,74, 79, 72, -1,79, 80, 72, -1,80, 81, 72, -1,81, 82, 72, -1, + 85, 84, 83, -1,83, 84, 86, -1,88, 85, 87, -1,87, 85, 83, -1,90, 88, 89, -1,89, 88, + 87, -1,92, 90, 91, -1,91, 90, 89, -1,94, 92, 93, -1,93, 92, 91, -1,96, 94, 95, -1, + 95, 94, 93, -1,98, 96, 97, -1,97, 96, 95, -1,101, 100, 99, -1,102, 98, 100, -1,98, + 97, 100, -1,100, 97, 99, -1,104, 101, 103, -1,103, 101, 99, -1,106, 104, 105, -1, + 105, 104, 103, -1,106, 105, 107, -1,105, 108, 107, -1,110, 109, 108, -1,107, 108, + 109, -1,84, 110, 86, -1,86, 110, 108, -1,113, 112, 111, -1,111, 112, 114, -1,112, + 115, 114, -1,118, 117, 116, -1,117, 119, 116, -1,116, 119, 120, -1,119, 121, 120, -1, + 120, 121, 122, -1,121, 123, 122, -1,122, 123, 124, -1,123, 125, 124, -1,124, 125, + 126, -1,125, 127, 126, -1,126, 127, 128, -1,127, 129, 128, -1,128, 129, 130, -1,129, + 131, 130, -1,130, 131, 132, -1,131, 133, 132, -1,132, 133, 134, -1,133, 114, 134, -1, + 115, 134, 114, -1,137, 136, 135, -1,135, 136, 138, -1,136, 139, 138, -1,138, 139, + 140, -1,139, 141, 140, -1,140, 141, 142, -1,141, 143, 142, -1,142, 143, 144, -1,143, + 145, 144, -1,144, 145, 146, -1,145, 147, 146, -1,146, 147, 148, -1,147, 149, 148, -1, + 148, 149, 150, -1,149, 151, 150, -1,150, 151, 152, -1,154, 153, 151, -1,153, 152, + 151, -1,157, 156, 155, -1,155, 156, 158, -1,156, 159, 158, -1,158, 159, 160, -1,159, + 137, 160, -1,160, 137, 135, -1,163, 162, 161, -1,161, 162, 164, -1,166, 163, 165, -1, + 165, 163, 161, -1,168, 166, 167, -1,167, 166, 165, -1,170, 168, 169, -1,169, 168, + 167, -1,172, 170, 171, -1,171, 170, 169, -1,174, 172, 173, -1,173, 172, 171, -1,176, + 174, 175, -1,175, 174, 173, -1,178, 176, 177, -1,177, 176, 175, -1,180, 179, 177, -1, + 177, 179, 178, -1,183, 182, 181, -1,181, 182, 184, -1,186, 181, 185, -1,185, 181, + 184, -1,162, 186, 164, -1,164, 186, 185, -1,189, 188, 187, -1,188, 190, 187, -1,193, + 192, 191, -1,191, 192, 194, -1,192, 195, 194, -1,194, 195, 196, -1,195, 197, 196, -1, + 196, 197, 198, -1,197, 199, 198, -1,198, 199, 200, -1,199, 201, 200, -1,200, 201, + 202, -1,201, 203, 202, -1,202, 203, 204, -1,203, 205, 204, -1,204, 205, 206, -1,205, + 207, 206, -1,206, 207, 208, -1,207, 209, 208, -1,208, 209, 210, -1,209, 211, 210, -1, + 210, 211, 212, -1,211, 187, 212, -1,190, 212, 187, -1,215, 214, 213, -1,213, 214, + 216, -1,213, 216, 217, -1,217, 216, 218, -1,217, 218, 219, -1,219, 218, 220, -1,219, + 220, 221, -1,221, 220, 222, -1,221, 222, 223, -1,223, 222, 224, -1,223, 224, 225, -1, + 225, 224, 226, -1,225, 226, 227, -1,227, 226, 228, -1,227, 228, 229, -1,229, 228, + 230, -1,232, 231, 230, -1,230, 231, 229, -1,235, 234, 233, -1,233, 234, 236, -1,233, + 236, 237, -1,237, 236, 238, -1,237, 238, 215, -1,215, 238, 214, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/link1.wrl b/examples/rlsg/unimation-puma560/link1.wrl new file mode 100644 index 00000000..7ed4f95b --- /dev/null +++ b/examples/rlsg/unimation-puma560/link1.wrl @@ -0,0 +1,114 @@ +#VRML V2.0 utf8 + +DEF link1 Transform { + rotation 1 0 0 3.14159 + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.929412 0.921569 0.921569 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 1.000000 1.000000 1.000000 + ambientIntensity 0.752941 + shininess 0.041235 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 56 + 0.078125 -0.0024 -0.12493, 0.067658 -0.041463 -0.124961, 0.039063 -0.070059 -0.124984, 0 -0.080525 -0.124992, + -0.039063 -0.070059 -0.124984, -0.067658 -0.041463 -0.124961, -0.078125 -0.0024 -0.12493, -0.067658 0.036662 -0.124899, + -0.039063 0.065258 -0.124876, 0 0.075724 -0.124868, 0.039063 0.065258 -0.124876, 0.067658 0.036662 -0.124899, + 0.069621 -0.034204 -0.040152, 0.078125 -0.0025 7e-005, 0.067658 -0.041528 -0.042835, 0.069621 -0.034268 0.04024, + 0.067658 -0.041597 0.042913, 0.067658 -0.041646 0.105039, 0.078125 -0.002584 0.10507, 0.041396 -0.067768 -0.071682, + 0.039063 -0.070101 -0.072475, 0.041396 -0.067882 0.071717, 0.039063 -0.070216 0.072507, 0.039063 -0.070242 0.105016, + 0 -0.080558 -0.083698, 0 -0.080692 0.083713, 0 -0.080709 0.105007, -0.039063 -0.070101 -0.072475, + -0.039063 -0.070216 0.072507, -0.039063 -0.070242 0.105016, -0.041396 -0.067768 -0.071682, -0.067658 -0.041528 -0.042835, + -0.041396 -0.067882 0.071717, -0.067658 -0.041597 0.042913, -0.067658 -0.041646 0.105039, -0.069621 -0.034204 -0.040152, + -0.078125 -0.0025 7e-005, -0.069621 -0.034268 0.04024, -0.078125 -0.002584 0.10507, -0.067658 0.036479 0.105101, + -0.039063 0.065075 0.105124, 0 0.075541 0.105132, 0.039063 0.065075 0.105124, 0.067658 0.036479 0.105101, 0.084375 -0.09 0, + 0.073071 -0.089966 -0.042187, 0.042188 -0.089942 -0.073071, 0 -0.089933 -0.084375, -0.042188 -0.089942 -0.073071, + -0.073071 -0.089966 -0.042187, -0.084375 -0.09 0, -0.073071 -0.090034 0.042187, -0.042188 -0.090058 0.073071, + 0 -0.090067 0.084375, 0.042188 -0.090058 0.073071, 0.073071 -0.090034 0.042187] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 106 + 1.34202e-006 0.000797122 -1, 5.3105e-006 0.000793648 -1, -3.78151e-008 0.000793648 -1, 6.16934e-007 0.000796338 -1, + -1.26261e-006 0.000794316 -1, 1.4992e-006 0.000795004 -1, -1.94812e-006 0.000797022 -1, 2.53316e-009 0.000793648 -1, + 0 0.000798982 -1, -2.66216e-006 0.000794371 -1, 4.61034e-006 0.000801643 -1, 1.4545e-005 0.000818851 -1, + -0.963897 0.0655021 0.258093, -0.991144 0.132788 0.000104411, -0.999718 -0.0237645 -2.01886e-005, + -0.907075 0.420969 0.000332271, -0.791985 0.61054 0.000466577, -0.998567 0.0535104 4.60987e-005, + -0.963913 0.0659041 -0.257932, -0.907075 0.420968 0.000339111, -0.791974 0.610554 0.000500506, -0.707154 0.70706 0.000524205, + -0.575093 0.818088 0.000627956, -0.420966 0.907076 0.000725276, -0.707131 0.707082 0.000590692, + -0.575085 0.818094 0.000674343, -0.420981 0.907069 0.000725059, 7.71336e-009 1 0.000799478, 0 1 0.000799114, 0 1 0.000799154, + 0 1 0.000798451, 0.420966 0.907076 0.000725276, 0.575093 0.818088 0.000627956, 0.420981 0.907069 0.000725059, + 0.575085 0.818094 0.000674343, 0.791985 0.61054 0.000466577, 0.707154 0.70706 0.000524205, 0.907075 0.420969 0.000332271, + 0.707131 0.707082 0.000590692, 0.791974 0.610554 0.000500506, 0.907075 0.420968 0.000339111, 0.991144 0.132788 0.000104411, + 0.963897 0.0655021 0.258093, 0.998283 -0.0585766 -4.7703e-005, 0.963913 0.0659041 -0.257932, 0.991145 0.132787 0.000110024, + 0.907074 -0.420971 -0.000335335, 0.866028 -0.499995 -0.00039811, 0.575065 -0.818107 -0.000650914, + 0.420966 -0.907076 -0.000721703, 0.0889547 -0.996035 -0.000792492, -0.0889546 -0.996035 -0.000792492, + -0.420966 -0.907076 -0.000721703, -0.575065 -0.818107 -0.000650914, -0.818117 -0.575052 -0.000457536, + -0.92475 -0.380575 -0.000303384, 2.12866e-006 0.000798352 -1, 5.57399e-006 0.000793552 -1, 3.93807e-007 0.000793552 -1, + 1.4534e-005 0.000792539 -1, 2.45358e-006 0.000800684 -1, -8.6714e-006 0.000805105 -1, -1.99449e-006 0.000797007 -1, + -2.63809e-008 0.000793545 -1, 0 0.000798876 -1, -2.66211e-006 0.000794371 -1, 4.61025e-006 0.000801643 -1, + 1.45447e-005 0.00081885 -1, -2.26412e-006 1 0.000794128, -1.42885e-005 1 0.000805952, 3.29555e-007 1 0.000805952, + -1.47423e-005 1 0.000802157, -7.74283e-008 1 0.000798073, 5.50166e-006 1 0.000792705, 5.26804e-006 1 0.000796828, + -2.20758e-008 1 0.000805946, 0 1 0.000791455, 1.28335e-006 1 0.000781836, -2.22269e-006 1 0.00077833, + -7.01207e-006 1 0.000770035, -0.997459 -0.0712501 -5.89359e-005, -0.789972 -0.0711022 0.609007, -0.705394 -0.0693917 0.70541, + -0.573558 -0.0716089 0.816029, -0.419841 -0.0716813 0.904763, -0.258128 -0.0695912 0.963601, 0 -0.0720407 0.997402, + 0 -0.0720263 0.997403, 0.258128 -0.0695912 0.963601, 0.419841 -0.0716813 0.904763, 0.573558 -0.0716089 0.816029, + 0.705394 -0.0693917 0.70541, 0.789972 -0.0711022 0.609007, 0.997459 -0.0712501 -5.89359e-005, 0.790018 -0.0701352 -0.609059, + 0.7055 -0.0682689 -0.705414, 0.573627 -0.0703125 -0.816093, 0.419924 -0.0702426 -0.904837, 0.258212 -0.0680564 -0.963688, + -7.71209e-009 -0.0704421 -0.997516, 0 -0.0704378 -0.997516, -0.258212 -0.0680564 -0.963688, -0.419924 -0.0702426 -0.904837, + -0.573627 -0.0703125 -0.816093, -0.7055 -0.0682689 -0.705414, -0.790018 -0.0701352 -0.609059] + } + coordIndex [ + 0, 1, 11, -1,1, 2, 11, -1,2, 3, 11, -1,3, 4, 11, -1,4, 5, 11, -1,5, 6, 11, -1,6, + 7, 11, -1,7, 8, 11, -1,8, 9, 11, -1,9, 10, 11, -1,13, 0, 12, -1,1, 14, 0, -1,12, + 0, 14, -1,13, 15, 18, -1,17, 18, 16, -1,15, 16, 18, -1,14, 1, 19, -1,2, 20, 1, -1, + 19, 1, 20, -1,16, 21, 17, -1,23, 17, 22, -1,21, 22, 17, -1,20, 2, 24, -1,24, 2, 3, -1, + 22, 25, 23, -1,23, 25, 26, -1,27, 24, 4, -1,4, 24, 3, -1,28, 29, 25, -1,25, 29, 26, -1, + 31, 30, 5, -1,4, 5, 27, -1,30, 27, 5, -1,33, 34, 32, -1,29, 28, 34, -1,32, 34, 28, -1, + 36, 35, 6, -1,5, 6, 31, -1,35, 31, 6, -1,36, 38, 37, -1,34, 33, 38, -1,37, 38, 33, -1, + 38, 36, 39, -1,39, 36, 7, -1,36, 6, 7, -1,39, 7, 40, -1,40, 7, 8, -1,40, 8, 41, -1, + 41, 8, 9, -1,41, 9, 42, -1,42, 9, 10, -1,42, 10, 43, -1,43, 10, 11, -1,43, 11, 18, -1, + 18, 11, 13, -1,11, 0, 13, -1,18, 17, 43, -1,17, 23, 43, -1,23, 26, 43, -1,26, 29, + 43, -1,29, 34, 43, -1,34, 38, 43, -1,38, 39, 43, -1,39, 40, 43, -1,40, 41, 43, -1, + 41, 42, 43, -1,44, 45, 55, -1,45, 46, 55, -1,46, 47, 55, -1,47, 48, 55, -1,48, 49, + 55, -1,49, 50, 55, -1,50, 51, 55, -1,51, 52, 55, -1,52, 53, 55, -1,53, 54, 55, -1, + 13, 12, 44, -1,44, 12, 45, -1,12, 14, 45, -1,14, 19, 45, -1,19, 46, 45, -1,19, 20, + 46, -1,46, 20, 47, -1,20, 24, 47, -1,30, 48, 27, -1,48, 47, 27, -1,24, 27, 47, -1, + 35, 49, 31, -1,31, 49, 30, -1,30, 49, 48, -1,36, 50, 35, -1,35, 50, 49, -1,36, 37, + 50, -1,50, 37, 51, -1,37, 33, 51, -1,33, 32, 51, -1,32, 52, 51, -1,32, 28, 52, -1, + 52, 28, 53, -1,28, 25, 53, -1,21, 54, 22, -1,54, 53, 22, -1,22, 53, 25, -1,15, 55, + 16, -1,16, 55, 21, -1,55, 54, 21, -1,13, 44, 15, -1,15, 44, 55, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,1, 3, 0, -1,3, 4, 0, -1,4, 5, 0, -1,5, 6, 0, -1,6, 7, 0, -1,7, 8, 0, -1, + 8, 9, 0, -1,9, 10, 0, -1,10, 11, 0, -1,14, 13, 12, -1,16, 15, 13, -1,12, 13, 15, -1, + 14, 18, 17, -1,20, 17, 19, -1,18, 19, 17, -1,15, 16, 21, -1,23, 22, 16, -1,21, 16, + 22, -1,19, 24, 20, -1,26, 20, 25, -1,24, 25, 20, -1,22, 23, 27, -1,27, 23, 28, -1, + 25, 29, 26, -1,26, 29, 30, -1,32, 27, 31, -1,31, 27, 28, -1,34, 33, 29, -1,29, 33, + 30, -1,37, 36, 35, -1,31, 35, 32, -1,36, 32, 35, -1,40, 39, 38, -1,33, 34, 39, -1, + 38, 39, 34, -1,43, 42, 41, -1,35, 41, 37, -1,42, 37, 41, -1,43, 45, 44, -1,39, 40, + 45, -1,44, 45, 40, -1,45, 43, 46, -1,46, 43, 47, -1,43, 41, 47, -1,46, 47, 48, -1, + 48, 47, 49, -1,48, 49, 50, -1,50, 49, 51, -1,50, 51, 52, -1,52, 51, 53, -1,52, 53, + 54, -1,54, 53, 55, -1,54, 55, 17, -1,17, 55, 14, -1,55, 13, 14, -1,58, 57, 56, -1, + 57, 59, 56, -1,59, 60, 56, -1,60, 61, 56, -1,61, 62, 56, -1,62, 63, 56, -1,63, 64, + 56, -1,64, 65, 56, -1,65, 66, 56, -1,66, 67, 56, -1,70, 69, 68, -1,69, 71, 68, -1, + 71, 72, 68, -1,72, 73, 68, -1,73, 74, 68, -1,74, 75, 68, -1,75, 76, 68, -1,76, 77, + 68, -1,77, 78, 68, -1,78, 79, 68, -1,14, 12, 80, -1,80, 12, 81, -1,12, 82, 81, -1, + 82, 83, 81, -1,83, 84, 81, -1,83, 85, 84, -1,84, 85, 86, -1,85, 87, 86, -1,90, 89, + 88, -1,89, 86, 88, -1,87, 88, 86, -1,42, 92, 91, -1,91, 92, 90, -1,90, 92, 89, -1, + 43, 93, 42, -1,42, 93, 92, -1,43, 44, 93, -1,93, 44, 94, -1,44, 95, 94, -1,95, 96, + 94, -1,96, 97, 94, -1,96, 98, 97, -1,97, 98, 99, -1,98, 100, 99, -1,103, 102, 101, -1, + 102, 99, 101, -1,101, 99, 100, -1,18, 105, 104, -1,104, 105, 103, -1,105, 102, 103, -1, + 14, 80, 18, -1,18, 80, 105, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/link2.wrl b/examples/rlsg/unimation-puma560/link2.wrl new file mode 100644 index 00000000..fbbdb97b --- /dev/null +++ b/examples/rlsg/unimation-puma560/link2.wrl @@ -0,0 +1,174 @@ +#VRML V2.0 utf8 + +DEF link2 Transform { + rotation 1 0 0 3.14159 + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.929412 0.921569 0.921569 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 1.000000 1.000000 1.000000 + ambientIntensity 0.752941 + shininess 0.041235 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 84 + -0.431726 0.093125 0, -0.431726 0.093125 -0.00875, -0.385173 0.080611 -0.00875, -0.385173 0.080611 0, + -0.351114 0.046498 -0.00875, -0.351114 0.046498 0, -0.338675 -7.4e-005 -0.00875, -0.338675 -7.4e-005 0, + -0.351189 -0.046627 -0.00875, -0.351189 -0.046627 0, -0.385302 -0.080686 -0.00875, -0.385302 -0.080686 0, + -0.431874 -0.093125 -0.00875, -0.431874 -0.093125 0, -0.478427 -0.080611 -0.00875, -0.478427 -0.080611 0, + -0.512486 -0.046498 -0.00875, -0.512486 -0.046498 0, -0.524925 7.4e-005 -0.00875, -0.524925 7.4e-005 0, + -0.512411 0.046627 -0.00875, -0.512411 0.046627 0, -0.478298 0.080686 -0.00875, -0.478298 0.080686 0, + -0.431706 0.118125 -0.00875, -0.431706 0.118125 -0.03875, -0.372656 0.102252 -0.03875, -0.372656 0.102252 -0.00875, + -0.329454 0.058981 -0.03875, -0.329454 0.058981 -0.00875, -0.313675 -9.4e-005 -0.03875, -0.313675 -9.4e-005 -0.00875, + -0.329548 -0.059144 -0.03875, -0.329548 -0.059144 -0.00875, -0.372819 -0.102346 -0.03875, -0.372819 -0.102346 -0.00875, + -0.431894 -0.118125 -0.03875, -0.431894 -0.118125 -0.00875, -0.490944 -0.102252 -0.03875, -0.490944 -0.102252 -0.00875, + -0.534146 -0.058981 -0.03875, -0.534146 -0.058981 -0.00875, -0.549925 9.4e-005 -0.03875, -0.549925 9.4e-005 -0.00875, + -0.534052 0.059144 -0.03875, -0.534052 0.059144 -0.00875, -0.490781 0.102346 -0.03875, -0.490781 0.102346 -0.00875, + -0.625659 -0.136433 -0.03875, -0.625659 -0.136433 -0.13875, -0.651288 -0.110763 -0.13875, -0.651288 -0.110763 -0.03875, + -0.680925 0.000198 -0.13875, -0.680925 0.000198 -0.03875, -0.651111 0.111112 -0.13875, -0.651111 0.111112 -0.03875, + -0.625441 0.136741 -0.13875, -0.625441 0.136741 -0.03875, -0.00924 0.074664 -0.03875, -0.00924 0.074664 -0.13875, + 0.028252 0.064586 -0.13875, 0.028252 0.064586 -0.03875, 0.055682 0.037112 -0.13875, 0.055682 0.037112 -0.03875, + 0.0657 -0.000396 -0.13875, 0.0657 -0.000396 -0.03875, 0.055623 -0.037888 -0.13875, 0.055623 -0.037888 -0.03875, + 0.028148 -0.065318 -0.13875, 0.028148 -0.065318 -0.03875, -0.00936 -0.075336 -0.13875, -0.00936 -0.075336 -0.03875, + -0.009367 -0.075334 -0.13875, -0.009367 -0.075334 -0.03875, -0.009248 0.074662 -0.03875, -0.009248 0.074662 -0.13875, + -0.456917 -0.146855 -0.03875, -0.456917 -0.146855 -0.13875, -0.456683 0.146895 -0.13875, -0.456683 0.146895 -0.03875, + -0.625433 0.147029 -0.13875, -0.625667 -0.146721 -0.13875, -0.625667 -0.146721 -0.03875, -0.625433 0.147029 -0.03875] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 120 + -0.4217 -0.906735 0, -0.0897623 -0.995963 0, 0.0881638 -0.996106 0, -0.575712 -0.817652 0, -0.818567 -0.574411 0, + -0.907408 -0.420251 0, -0.996106 -0.088164 0, -0.995963 0.0897621 0, -0.906735 0.4217 0, -0.817652 0.575712 0, + -0.574411 0.818567 0, -0.42025 0.907408 0, -0.0881637 0.996106 0, 0.0897624 0.995963 0, 0.4217 0.906735 0, + 0.575712 0.817652 0, 0.818567 0.574411 0, 0.907408 0.420251 0, 0.996106 0.088164 0, 0.995963 -0.0897621 0, 0.906735 -0.4217 0, + 0.817652 -0.575712 0, 0.574411 -0.818567 0, 0.42025 -0.907408 0, -0.421698 -0.906736 0, -0.0897558 -0.995964 0, + 0.0881714 -0.996105 0, -0.575714 -0.817651 0, -0.818568 -0.57441 0, -0.907406 -0.420254 0, -0.996105 -0.0881715 0, + -0.995964 0.0897559 0, -0.906736 0.421699 0, -0.817651 0.575714 0, -0.57441 0.818568 0, -0.420254 0.907407 0, + -0.0881714 0.996105 0, 0.0897559 0.995964 0, 0.421698 0.906736 0, 0.575714 0.817651 0, 0.818568 0.57441 0, + 0.907406 0.420254 0, 0.996105 0.0881715 0, 0.995964 -0.0897559 0, 0.906736 -0.421699 0, 0.817651 -0.575714 0, + 0.57441 -0.818568 0, 0.420254 -0.907407 0, 0.81857 0.574407 0, 0.707672 0.706541 0, 0.907408 0.42025 0, 0.996106 0.088168 0, + 0.906737 -0.421697 0, 0.706542 -0.707672 0, -0.0950351 -0.995474 0, 0.0771006 -0.997023 0, -0.575715 -0.81765 0, + -0.818571 -0.574405 0, -0.90741 -0.420246 0, -0.996105 -0.0881728 0, -0.995965 0.0897412 0, -0.906741 0.421688 0, + -0.817648 0.575719 0, -0.574395 0.818578 0, -0.420241 0.907413 0, -0.0829509 0.996554 0, 0.100705 0.994916 0, + 0.13371 0.991021 0, -0.0137502 0.999905 0, 0.110315 -0.993897 0, -0.0259994 -0.999662 0, 0.105234 -0.994448 0, + 0.0137502 -0.999905 0, -0.13371 -0.991021 0, 0.0522188 -0.998636 0, 0.106815 0.994279 0, 0.0259994 0.999662 0, + -0.110315 0.993897 0, 0.0538057 0.998551 0, 0 0 1, 0 0 -1, 0.000794022 1 0, -0.0522188 0.998636 0, -0.105234 0.994448 0, + 1 -0.000776343 0, -0.000794022 -1 0, -0.0538057 -0.998551 0, -0.106815 -0.994279 0, -3.15421e-018 0 1, -6.12807e-018 0 1, + 9.7126e-019 0 1, -1.06142e-017 0 1, 0.0897623 0.995963 0, -0.0881638 0.996106 0, 0.0881637 -0.996106 0, + -0.0897624 -0.995963 0, 0.0897558 0.995964 0, -0.0897559 -0.995964 0, -0.81857 -0.574407 0, -0.707672 -0.706541 0, + -0.907408 -0.42025 0, -0.996106 -0.088168 0, -0.906737 0.421697 0, -0.706542 0.707672 0, 0.0950351 0.995474 0, + -0.0771006 0.997023 0, 0.575715 0.81765 0, 0.818571 0.574405 0, 0.90741 0.420246 0, 0.996105 0.0881728 0, + 0.995965 -0.0897412 0, 0.906741 -0.421688 0, 0.817648 -0.575719 0, 0.574395 -0.818578 0, 0.420241 -0.907413 0, + 0.0829509 -0.996554 0, -0.100705 -0.994916 0, -1 0.000776343 0, -2.12284e-018 0 -1, -1.06142e-017 0 -1] + } + coordIndex [ + 0, 1, 3, -1,3, 1, 2, -1,3, 2, 5, -1,5, 2, 4, -1,5, 4, 7, -1,7, 4, 6, -1,7, 6, 9, -1, + 9, 6, 8, -1,9, 8, 11, -1,11, 8, 10, -1,11, 10, 13, -1,13, 10, 12, -1,13, 12, 15, -1, + 15, 12, 14, -1,15, 14, 17, -1,17, 14, 16, -1,17, 16, 19, -1,19, 16, 18, -1,19, 18, + 21, -1,21, 18, 20, -1,21, 20, 23, -1,23, 20, 22, -1,23, 22, 0, -1,0, 22, 1, -1,24, + 25, 27, -1,27, 25, 26, -1,27, 26, 29, -1,29, 26, 28, -1,29, 28, 31, -1,31, 28, 30, -1, + 31, 30, 33, -1,33, 30, 32, -1,33, 32, 35, -1,35, 32, 34, -1,35, 34, 37, -1,37, 34, + 36, -1,37, 36, 39, -1,39, 36, 38, -1,39, 38, 41, -1,41, 38, 40, -1,41, 40, 43, -1, + 43, 40, 42, -1,43, 42, 45, -1,45, 42, 44, -1,45, 44, 47, -1,47, 44, 46, -1,47, 46, + 24, -1,24, 46, 25, -1,48, 49, 51, -1,51, 49, 50, -1,51, 50, 53, -1,53, 50, 52, -1, + 53, 52, 55, -1,55, 52, 54, -1,56, 57, 54, -1,54, 57, 55, -1,58, 59, 61, -1,61, 59, + 60, -1,61, 60, 63, -1,63, 60, 62, -1,63, 62, 65, -1,65, 62, 64, -1,65, 64, 67, -1, + 67, 64, 66, -1,67, 66, 69, -1,69, 66, 68, -1,69, 68, 71, -1,71, 68, 70, -1,72, 73, + 70, -1,70, 73, 71, -1,74, 75, 58, -1,58, 75, 59, -1,72, 73, 77, -1,77, 73, 76, -1, + 74, 75, 79, -1,79, 75, 78, -1,72, 77, 70, -1,59, 60, 75, -1,80, 78, 56, -1,81, 49, + 77, -1,49, 50, 77, -1,50, 52, 77, -1,52, 54, 77, -1,54, 56, 77, -1,56, 78, 77, -1, + 78, 75, 77, -1,60, 62, 75, -1,75, 62, 77, -1,62, 64, 77, -1,64, 66, 77, -1,68, 70, + 66, -1,66, 70, 77, -1,76, 77, 82, -1,82, 77, 81, -1,49, 48, 81, -1,81, 48, 82, -1, + 57, 56, 83, -1,83, 56, 80, -1,78, 79, 80, -1,80, 79, 83, -1,83, 57, 79, -1,82, 76, + 48, -1,57, 55, 79, -1,55, 53, 79, -1,53, 51, 79, -1,51, 48, 79, -1,48, 76, 79, -1, + 79, 76, 58, -1,69, 67, 71, -1,67, 65, 71, -1,65, 63, 71, -1,63, 61, 71, -1,61, 58, + 71, -1,76, 71, 58, -1,41, 39, 43, -1,39, 37, 43, -1,37, 35, 43, -1,35, 33, 43, -1, + 33, 31, 43, -1,31, 29, 43, -1,29, 27, 43, -1,27, 24, 43, -1,24, 47, 43, -1,47, 45, + 43, -1,17, 15, 19, -1,15, 13, 19, -1,13, 11, 19, -1,11, 9, 19, -1,9, 7, 19, -1,7, + 5, 19, -1,5, 3, 19, -1,3, 0, 19, -1,0, 23, 19, -1,23, 21, 19, -1,1, 0, 2, -1,2, 0, + 3, -1,2, 3, 4, -1,4, 3, 5, -1,4, 5, 6, -1,6, 5, 7, -1,6, 7, 8, -1,8, 7, 9, -1,8, + 9, 10, -1,10, 9, 11, -1,10, 11, 12, -1,12, 11, 13, -1,12, 13, 14, -1,14, 13, 15, -1, + 14, 15, 16, -1,16, 15, 17, -1,16, 17, 18, -1,18, 17, 19, -1,18, 19, 20, -1,20, 19, + 21, -1,20, 21, 22, -1,22, 21, 23, -1,22, 23, 1, -1,1, 23, 0, -1,25, 24, 26, -1,26, + 24, 27, -1,26, 27, 28, -1,28, 27, 29, -1,28, 29, 30, -1,30, 29, 31, -1,30, 31, 32, -1, + 32, 31, 33, -1,32, 33, 34, -1,34, 33, 35, -1,34, 35, 36, -1,36, 35, 37, -1,36, 37, + 38, -1,38, 37, 39, -1,38, 39, 40, -1,40, 39, 41, -1,40, 41, 42, -1,42, 41, 43, -1, + 42, 43, 44, -1,44, 43, 45, -1,44, 45, 46, -1,46, 45, 47, -1,46, 47, 25, -1,25, 47, + 24, -1,49, 48, 50, -1,50, 48, 51, -1,50, 51, 52, -1,52, 51, 53, -1,52, 53, 54, -1, + 54, 53, 55, -1,57, 56, 55, -1,55, 56, 54, -1,59, 58, 60, -1,60, 58, 61, -1,60, 61, + 62, -1,62, 61, 63, -1,62, 63, 64, -1,64, 63, 65, -1,64, 65, 66, -1,66, 65, 67, -1, + 66, 67, 68, -1,68, 67, 69, -1,68, 69, 70, -1,70, 69, 71, -1,73, 72, 71, -1,71, 72, + 70, -1,75, 74, 59, -1,59, 74, 58, -1,73, 72, 76, -1,76, 72, 77, -1,75, 74, 78, -1, + 78, 74, 79, -1,75, 78, 59, -1,70, 68, 72, -1,80, 56, 78, -1,81, 77, 49, -1,49, 77, + 50, -1,50, 77, 52, -1,52, 77, 54, -1,54, 77, 56, -1,56, 77, 78, -1,77, 72, 78, -1, + 68, 66, 72, -1,72, 66, 78, -1,66, 64, 78, -1,64, 62, 78, -1,60, 59, 62, -1,62, 59, + 78, -1,77, 76, 81, -1,81, 76, 82, -1,48, 49, 82, -1,82, 49, 81, -1,56, 57, 80, -1, + 80, 57, 83, -1,79, 78, 83, -1,83, 78, 80, -1,83, 79, 57, -1,82, 48, 76, -1,48, 51, + 76, -1,51, 53, 76, -1,53, 55, 76, -1,55, 57, 76, -1,57, 79, 76, -1,79, 58, 76, -1, + 61, 63, 58, -1,58, 63, 76, -1,63, 65, 76, -1,65, 67, 76, -1,69, 71, 67, -1,67, 71, + 76, -1,39, 41, 37, -1,41, 43, 37, -1,43, 45, 37, -1,45, 47, 37, -1,47, 24, 37, -1, + 24, 27, 37, -1,27, 29, 37, -1,29, 31, 37, -1,31, 33, 37, -1,33, 35, 37, -1,15, 17, + 13, -1,17, 19, 13, -1,19, 21, 13, -1,21, 23, 13, -1,23, 0, 13, -1,0, 3, 13, -1,3, + 5, 13, -1,5, 7, 13, -1,7, 9, 13, -1,9, 11, 13, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,0, 1, 3, -1,0, 3, 4, -1,4, 3, 5, -1,4, 5, 6, -1,6, 5, 7, -1,6, 7, 8, -1, + 8, 7, 9, -1,8, 9, 10, -1,10, 9, 11, -1,10, 11, 12, -1,12, 11, 13, -1,12, 13, 14, -1, + 14, 13, 15, -1,14, 15, 16, -1,16, 15, 17, -1,16, 17, 18, -1,18, 17, 19, -1,18, 19, + 20, -1,20, 19, 21, -1,20, 21, 22, -1,22, 21, 23, -1,22, 23, 2, -1,2, 23, 1, -1,26, + 25, 24, -1,24, 25, 27, -1,24, 27, 28, -1,28, 27, 29, -1,28, 29, 30, -1,30, 29, 31, -1, + 30, 31, 32, -1,32, 31, 33, -1,32, 33, 34, -1,34, 33, 35, -1,34, 35, 36, -1,36, 35, + 37, -1,36, 37, 38, -1,38, 37, 39, -1,38, 39, 40, -1,40, 39, 41, -1,40, 41, 42, -1, + 42, 41, 43, -1,42, 43, 44, -1,44, 43, 45, -1,44, 45, 46, -1,46, 45, 47, -1,46, 47, + 26, -1,26, 47, 25, -1,49, 49, 48, -1,48, 49, 50, -1,48, 50, 51, -1,51, 50, 43, -1, + 51, 43, 52, -1,52, 43, 45, -1,53, 53, 45, -1,45, 53, 52, -1,55, 54, 24, -1,24, 54, + 56, -1,24, 56, 57, -1,57, 56, 58, -1,57, 58, 59, -1,59, 58, 60, -1,59, 60, 61, -1, + 61, 60, 62, -1,61, 62, 63, -1,63, 62, 64, -1,63, 64, 65, -1,65, 64, 66, -1,68, 67, + 66, -1,66, 67, 65, -1,70, 69, 55, -1,55, 69, 54, -1,73, 72, 71, -1,71, 72, 74, -1, + 77, 76, 75, -1,75, 76, 78, -1,79, 79, 79, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, + 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1, + 80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, + 80, -1,80, 80, 80, -1,83, 82, 81, -1,81, 82, 81, -1,84, 84, 84, -1,84, 84, 84, -1, + 84, 84, 84, -1,84, 84, 84, -1,87, 86, 85, -1,85, 86, 85, -1,79, 79, 79, -1,79, 79, + 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1, + 79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, + 79, -1,79, 79, 79, -1,79, 79, 88, -1,79, 89, 88, -1,89, 89, 88, -1,89, 90, 88, -1, + 90, 90, 88, -1,90, 79, 88, -1,79, 79, 88, -1,79, 91, 88, -1,91, 91, 88, -1,91, 79, + 88, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1, + 79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,93, 92, + 14, -1,14, 92, 15, -1,14, 15, 16, -1,16, 15, 17, -1,16, 17, 18, -1,18, 17, 19, -1, + 18, 19, 20, -1,20, 19, 21, -1,20, 21, 22, -1,22, 21, 23, -1,22, 23, 94, -1,94, 23, + 95, -1,94, 95, 0, -1,0, 95, 3, -1,0, 3, 4, -1,4, 3, 5, -1,4, 5, 6, -1,6, 5, 7, -1, + 6, 7, 8, -1,8, 7, 9, -1,8, 9, 10, -1,10, 9, 11, -1,10, 11, 93, -1,93, 11, 92, -1, + 36, 96, 38, -1,38, 96, 39, -1,38, 39, 40, -1,40, 39, 41, -1,40, 41, 42, -1,42, 41, + 43, -1,42, 43, 44, -1,44, 43, 45, -1,44, 45, 46, -1,46, 45, 47, -1,46, 47, 26, -1, + 26, 47, 97, -1,26, 97, 24, -1,24, 97, 27, -1,24, 27, 28, -1,28, 27, 29, -1,28, 29, + 30, -1,30, 29, 31, -1,30, 31, 32, -1,32, 31, 33, -1,32, 33, 34, -1,34, 33, 35, -1, + 34, 35, 36, -1,36, 35, 96, -1,99, 99, 98, -1,98, 99, 100, -1,98, 100, 101, -1,101, + 100, 31, -1,101, 31, 102, -1,102, 31, 33, -1,103, 103, 33, -1,33, 103, 102, -1,105, + 104, 38, -1,38, 104, 106, -1,38, 106, 107, -1,107, 106, 108, -1,107, 108, 109, -1, + 109, 108, 110, -1,109, 110, 111, -1,111, 110, 112, -1,111, 112, 113, -1,113, 112, + 114, -1,113, 114, 115, -1,115, 114, 116, -1,72, 73, 116, -1,116, 73, 115, -1,76, + 77, 105, -1,105, 77, 104, -1,67, 68, 83, -1,83, 68, 82, -1,69, 70, 87, -1,87, 70, + 86, -1,80, 80, 80, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1, + 79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, + 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1,79, 79, 79, -1, + 71, 74, 85, -1,85, 74, 85, -1,117, 117, 117, -1,117, 117, 117, -1,117, 117, 117, -1, + 117, 117, 117, -1,75, 78, 81, -1,81, 78, 81, -1,80, 80, 80, -1,80, 80, 80, -1,80, + 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1, + 80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, + 80, -1,80, 80, 118, -1,80, 80, 118, -1,80, 80, 118, -1,80, 80, 118, -1,80, 80, 118, -1, + 80, 80, 118, -1,80, 80, 118, -1,80, 119, 118, -1,119, 119, 118, -1,119, 80, 118, -1, + 80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, + 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1,80, 80, 80, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/link3.wrl b/examples/rlsg/unimation-puma560/link3.wrl new file mode 100644 index 00000000..f48551b6 --- /dev/null +++ b/examples/rlsg/unimation-puma560/link3.wrl @@ -0,0 +1,61 @@ +#VRML V2.0 utf8 + +DEF link3 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.929412 0.921569 0.921569 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 1.000000 1.000000 1.000000 + ambientIntensity 0.752941 + shininess 0.041235 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 18 + 0.120276 -0.042129 -0.07875, 0.120412 0.043121 -0.078682, 0.099569 0.043171 -0.099525, 0.099433 -0.042079 -0.099593, + 0.042069 0.043275 -0.114932, 0.041933 -0.041975 -0.115, -0.015431 0.043354 -0.099525, -0.015567 -0.041896 -0.099593, + -0.036274 0.043371 -0.078682, -0.03641 -0.041879 -0.07875, -0.041817 -0.041871 -0.07875, -0.041817 -0.042213 0.35125, + 0.042099 -0.042347 0.35125, 0.125683 -0.042138 -0.07875, 0.042235 0.042903 0.351318, 0.125819 0.043112 -0.078682, + -0.041681 0.043379 -0.078682, -0.041682 0.043037 0.351318] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 39 + -0.57506 0.000264835 0.818111, -0.707106 0.000564037 0.707107, -0.420973 -5.19534e-005 0.907073, + -0.0889628 -0.000652582 0.996035, 0.0889605 -0.000936427 0.996035, 0.420971 -0.00139512 0.907073, + 0.575059 -0.00156998 0.81811, 0.707105 -0.00169209 0.707107, 0.707105 -0.00169208 0.707107, 0.00161898 0.999998 0.000801164, + 0.00161174 0.999998 0.00079848, 0.00166456 0.999998 0.000809606, 0.00156679 0.999998 0.000792264, + 0.00153802 0.999999 0.000796088, 0.00147923 0.999999 0.000795348, 0.00159272 0.999998 0.000799569, + 0.00159131 0.999998 0.000809443, 0.00159131 0.999998 0.000811453, 0.981626 -0.00171822 0.190809, + 0.981626 -0.00171821 0.190809, 0.981626 -0.00171823 0.190809, 0.00161898 0.999998 0.000801162, + 0.00161855 0.999998 0.000803346, 0.00157183 0.999998 0.000793674, 0.00153838 0.999999 0.000796087, + 0.00147992 0.999999 0.000795352, 0.00159272 0.999998 0.000796783, 0.00159131 0.999998 0.000793487, + 0.00159131 0.999998 0.000811211, 1.27388e-006 0.000797756 -1, 1.27389e-006 0.000797756 -1, 1.27387e-006 0.000797756 -1, + -1.32777e-006 -0.000797669 1, -1.18021e-006 -0.000797669 1, -1.17994e-006 -0.000797669 1, -1.18049e-006 -0.000797669 1, + 0.999999 -0.00158942 -9.89086e-008, 0.999999 -0.0015953 -1.26882e-006, 0.999999 -0.00158354 1.071e-006] + } + coordIndex [ + 0, 1, 3, -1,3, 1, 2, -1,3, 2, 5, -1,5, 2, 4, -1,5, 4, 7, -1,7, 4, 6, -1,8, 9, 6, -1, + 6, 9, 7, -1,13, 0, 12, -1,10, 11, 9, -1,11, 12, 9, -1,12, 0, 9, -1,9, 0, 7, -1,0, + 3, 7, -1,3, 5, 7, -1,14, 12, 15, -1,15, 12, 13, -1,15, 1, 14, -1,16, 17, 8, -1,17, + 14, 8, -1,14, 1, 8, -1,1, 2, 8, -1,8, 2, 6, -1,2, 4, 6, -1,14, 12, 17, -1,17, 12, + 11, -1,1, 0, 15, -1,15, 0, 13, -1,9, 8, 10, -1,10, 8, 16, -1,10, 16, 11, -1,11, 16, + 17, -1 + ] + normalPerVertex TRUE + normalIndex [ + 1, 1, 0, -1,0, 1, 2, -1,0, 2, 3, -1,3, 2, 4, -1,3, 4, 5, -1,5, 4, 6, -1,8, 7, 6, -1, + 6, 7, 5, -1,11, 10, 9, -1,14, 13, 12, -1,13, 9, 12, -1,9, 10, 12, -1,12, 10, 15, -1, + 10, 16, 15, -1,16, 17, 15, -1,19, 18, 18, -1,18, 18, 20, -1,11, 22, 21, -1,25, 24, + 23, -1,24, 21, 23, -1,21, 22, 23, -1,22, 26, 23, -1,23, 26, 27, -1,26, 28, 27, -1, + 30, 29, 29, -1,29, 29, 31, -1,32, 32, 32, -1,32, 32, 32, -1,34, 33, 33, -1,33, 33, + 35, -1,37, 36, 36, -1,36, 36, 38, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/link4.wrl b/examples/rlsg/unimation-puma560/link4.wrl new file mode 100644 index 00000000..f58ae0e5 --- /dev/null +++ b/examples/rlsg/unimation-puma560/link4.wrl @@ -0,0 +1,128 @@ +#VRML V2.0 utf8 + +DEF link4 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.266667 0.266667 0.266667 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.752941 0.752941 0.752941 + ambientIntensity 0.000000 + shininess 0.071794 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 62 + 4.4e-005 0.040375 -0.0145, 0.020361 0.034948 -0.014484, 0.032558 0.022771 -0.014474, 0.035242 0.020091 -0.014472, + 0.040701 -0.000218 -0.014468, 0.035275 -0.020534 -0.014472, 0.020417 -0.035416 -0.014484, 0.000109 -0.040875 -0.0145, + -0.020208 -0.035448 -0.014516, -0.03509 -0.02059 -0.014528, -0.040549 -0.000282 -0.014532, -0.035122 0.020035 -0.014528, + -0.032442 0.022719 -0.014526, -0.020264 0.034916 -0.014516, 2.1e-005 0.040375 0.0145, 0.020338 0.034948 0.014516, + 0.032535 0.022771 0.014526, -0.032465 0.022719 0.014474, -0.020287 0.034916 0.014484, 0.035219 0.020091 0.014528, + 0.040678 -0.000218 0.014532, 0.035252 -0.020534 0.014528, 0.020394 -0.035416 0.014516, 8.5e-005 -0.040875 0.0145, + -0.020231 -0.035448 0.014484, -0.035113 -0.02059 0.014472, -0.040572 -0.000282 0.014468, -0.035145 0.020035 0.014472, + 0.035197 0.020091 0.042653, 0.032512 0.022771 0.042651, 0.03258 0.022771 -0.042599, 0.035265 0.020091 -0.042597, + 0.040724 -0.000218 -0.042593, 0.040656 -0.000218 0.042657, 0.035297 -0.020534 -0.042597, 0.035229 -0.020534 0.042653, + 0.020439 -0.035416 -0.042609, 0.020371 -0.035416 0.042641, 0.000131 -0.040875 -0.042625, 6.3e-005 -0.040875 0.042625, + -0.020186 -0.035448 -0.042641, -0.020254 -0.035448 0.042609, -0.035067 -0.02059 -0.042653, -0.035135 -0.02059 0.042597, + -0.040526 -0.000282 -0.042657, -0.040594 -0.000282 0.042593, -0.0351 0.020035 -0.042653, -0.035168 0.020035 0.042597, + -0.03242 0.022719 -0.042651, -0.032488 0.022719 0.042599, 0.032496 0.043526 0.042651, 0.032564 0.043526 -0.042599, + -0.032436 0.043474 -0.042651, -0.032504 0.043474 0.042599, -0.040629 0.043468 0.042593, -0.040561 0.043468 -0.042657, + 0.040689 0.043532 -0.042593, 0.040621 0.043532 0.042657, 0.040659 0.081032 -0.042593, 0.040591 0.081032 0.042657, + -0.040659 0.080968 0.042593, -0.040591 0.080968 -0.042657] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 126 + 0.000791788 -3.45273e-006 -1, 0.000787688 -1.57667e-005 -1, 0.000787675 7.36832e-007 -1, 0.000795884 1.46532e-005 -1, + 0.00079026 8.04879e-006 -1, 0.000799236 3.63667e-005 -1, 0.000793584 1.9675e-006 -1, 0.000795035 -3.75789e-006 -1, + 0.000795282 6.52831e-007 -1, 0.000787446 -5.79435e-006 -1, 0.000794572 -4.80927e-006 -1, 0.000761269 -5.95374e-007 -1, + 0.000740203 5.83057e-007 -1, 0.000734894 5.78875e-007 -1, -0.420256 -0.907406 -0.000333306, + -0.0881796 -0.996105 -6.99354e-005, 0.089754 -0.995964 7.1184e-005, -0.574401 -0.818574 -0.000455558, + -0.706544 -0.707669 -0.000566172, -0.706518 -0.707695 -0.000563572, 0.575705 -0.817658 0.000456592, + 0.707649 -0.706564 0.000558685, 0.707641 -0.706572 0.000572872, 0.421695 -0.906738 0.000334447, 0.000791788 -3.50976e-006 -1, + 0.000787688 -1.58522e-005 -1, 0.000787675 5.65736e-007 -1, 0.00079026 8.04918e-006 -1, 0.000795285 6.55388e-007 -1, + 0.000787445 -5.7926e-006 -1, 0.000794569 -4.81007e-006 -1, -0.706514 -0.707699 -0.000565184, -0.817637 -0.575734 -0.000648164, + -0.90672 -0.421732 -0.000709187, -0.817637 -0.575734 -0.000659991, -0.906745 -0.421678 -0.000741558, + -0.706447 -0.707765 -0.000552545, -0.995965 -0.0897417 -0.000814564, -0.996105 0.0881765 -0.000802846, + -0.995963 -0.0897565 -0.000778988, -0.996105 0.0881764 -0.000790931, -0.907406 0.420254 -0.0007216, + -0.818575 0.5744 -0.000640277, -0.907406 0.420254 -0.000730223, -0.818566 0.574412 -0.000669404, + -0.57572 0.817647 -0.000450341, -0.421703 0.906734 -0.000329884, -0.575716 0.817649 -0.000470807, + -0.421699 0.906736 -0.000341683, -0.0897539 0.995964 -7.02125e-005, 0.0881796 0.996105 6.89751e-005, + -0.0897458 0.995965 -7.33734e-005, 0.0881837 0.996104 7.2133e-005, 0.42027 0.907399 0.000328741, + 0.574418 0.818562 0.000457953, 0.420264 0.907402 0.000340527, 0.574418 0.818562 0.000461124, 0.817653 0.575711 0.00066002, + 0.906733 0.421704 0.000741505, 0.817653 0.575711 0.000648253, 0.906738 0.421694 0.000709321, 0.995962 0.0897688 0.000814474, + 0.996106 -0.0881641 0.000802759, 0.995964 0.089754 0.00077912, 0.996106 -0.0881642 0.00079102, 0.907402 -0.420264 0.000721552, + 0.818544 -0.574443 0.000640253, 0.907402 -0.420264 0.000730263, 0.818553 -0.574431 0.000669393, 0.707633 -0.70658 0.000553519, + 0.707633 -0.70658 0.000578685, -0.999999 -0.000784954 -0.000802834, -0.999999 -0.000784556 -0.000807701, + -0.999999 -0.000770904 -0.000817775, -0.999999 -0.000784954 -0.000790958, -0.999999 -0.000778327 -0.000787623, + -0.999999 -0.000770904 -0.000782145, 0.999999 0.000789002 0.000791016, 0.999999 0.000781334 0.000789974, + 0.999999 0.000770904 0.000782277, 0.999999 0.000789002 0.000802849, 0.999999 0.000787622 0.000805438, + 0.999999 0.000770904 0.000817775, 0.000738638 -1 5.89174e-007, 0.000738638 -1 5.8919e-007, 0.000738639 -1 5.89158e-007, + 0.00073818 -1 5.88793e-007, -0.999999 -0.000799993 -0.000797627, 0.000779874 3.27542e-006 -1, 0.000763164 5.92521e-006 -1, + 0.000738639 5.90906e-007 -1, 0.000790419 5.94701e-006 -1, 0.000793149 6.34514e-007 -1, 0 -0.707107 0.707107, + 0.000800034 -1.74339e-005 -1, 0.00080002 6.16739e-007 -1, 0.000790325 -4.46877e-006 -1, 0.000799311 -3.49387e-005 -1, + 0.000793619 -6.75575e-007 -1, 0.000795058 5.0396e-006 -1, 0.000795308 6.42843e-007 -1, 0.000787457 7.07554e-006 -1, + 0.000794672 6.08884e-006 -1, 0.000761211 1.79663e-006 -1, 0.000740013 5.82907e-007 -1, 0.000734381 5.7847e-007 -1, + 0.999999 0.000799993 0.000797627, -0.000779878 2.03932e-006 1, -0.000763172 4.70426e-006 1, -0.000738639 -5.90906e-007 1, + -0.000790427 4.68246e-006 1, -0.000793149 -6.34514e-007 1, 4.20981e-006 -0.709733 0.704471, -0.000791272 3.99188e-006 1, + -0.00080002 -6.16739e-007 1, -0.000800041 2.64598e-005 1, -0.000799315 3.50319e-005 1, -0.000793573 6.89937e-007 1, + -0.000795057 -5.04148e-006 1, -0.00079535 -5.40736e-007 1, -0.000787459 -7.01591e-006 1, -0.000794563 -6.04756e-006 1, + -0.000761361 -1.79188e-006 1, -0.000740355 -5.83176e-007 1, -0.000735065 -5.79009e-007 1, 0.000787698 -1 6.28289e-007] + } + coordIndex [ + 0, 1, 13, -1,1, 2, 13, -1,13, 2, 12, -1,2, 3, 12, -1,3, 4, 12, -1,4, 5, 12, -1,5, + 6, 12, -1,6, 7, 12, -1,7, 8, 12, -1,8, 9, 12, -1,12, 9, 11, -1,9, 10, 11, -1,14, + 0, 15, -1,15, 0, 1, -1,2, 16, 1, -1,1, 16, 15, -1,17, 12, 18, -1,18, 12, 13, -1,18, + 13, 14, -1,14, 13, 0, -1,14, 15, 18, -1,15, 16, 18, -1,18, 16, 17, -1,16, 19, 17, -1, + 19, 20, 17, -1,20, 21, 17, -1,21, 22, 17, -1,22, 23, 17, -1,23, 24, 17, -1,24, 25, + 17, -1,17, 25, 27, -1,25, 26, 27, -1,16, 19, 29, -1,29, 19, 28, -1,3, 2, 31, -1,31, + 2, 30, -1,4, 3, 32, -1,32, 3, 31, -1,19, 20, 28, -1,28, 20, 33, -1,5, 4, 34, -1,34, + 4, 32, -1,20, 21, 33, -1,33, 21, 35, -1,6, 5, 36, -1,36, 5, 34, -1,21, 22, 35, -1, + 35, 22, 37, -1,7, 6, 38, -1,38, 6, 36, -1,22, 23, 37, -1,37, 23, 39, -1,8, 7, 40, -1, + 40, 7, 38, -1,23, 24, 39, -1,39, 24, 41, -1,9, 8, 42, -1,42, 8, 40, -1,24, 25, 41, -1, + 41, 25, 43, -1,10, 9, 44, -1,44, 9, 42, -1,25, 26, 43, -1,43, 26, 45, -1,11, 10, + 46, -1,46, 10, 44, -1,26, 27, 45, -1,45, 27, 47, -1,12, 11, 48, -1,48, 11, 46, -1, + 27, 17, 47, -1,47, 17, 49, -1,29, 50, 16, -1,50, 51, 16, -1,16, 51, 2, -1,51, 30, + 2, -1,48, 52, 12, -1,52, 53, 12, -1,12, 53, 17, -1,53, 49, 17, -1,52, 53, 55, -1, + 55, 53, 54, -1,50, 51, 57, -1,57, 51, 56, -1,58, 56, 59, -1,59, 56, 57, -1,54, 60, + 53, -1,60, 59, 53, -1,59, 57, 53, -1,57, 50, 53, -1,53, 50, 49, -1,50, 29, 49, -1, + 49, 29, 47, -1,47, 29, 45, -1,45, 29, 43, -1,43, 29, 41, -1,41, 29, 39, -1,39, 29, + 37, -1,37, 29, 35, -1,29, 28, 35, -1,28, 33, 35, -1,60, 54, 61, -1,61, 54, 55, -1, + 56, 58, 51, -1,58, 61, 51, -1,61, 55, 51, -1,55, 52, 51, -1,51, 52, 30, -1,52, 48, + 30, -1,48, 46, 30, -1,46, 44, 30, -1,44, 42, 30, -1,42, 40, 30, -1,40, 38, 30, -1, + 38, 36, 30, -1,36, 34, 30, -1,30, 34, 31, -1,34, 32, 31, -1,61, 58, 60, -1,60, 58, + 59, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,1, 3, 0, -1,0, 3, 4, -1,3, 5, 4, -1,5, 6, 4, -1,6, 7, 4, -1,7, 8, 4, -1, + 8, 9, 4, -1,9, 10, 4, -1,10, 11, 4, -1,4, 11, 12, -1,11, 13, 12, -1,16, 15, 14, -1, + 14, 15, 17, -1,19, 18, 17, -1,17, 18, 14, -1,22, 21, 20, -1,20, 21, 23, -1,20, 23, + 16, -1,16, 23, 15, -1,26, 25, 24, -1,25, 3, 24, -1,24, 3, 27, -1,3, 5, 27, -1,5, + 6, 27, -1,6, 7, 27, -1,7, 28, 27, -1,28, 29, 27, -1,29, 30, 27, -1,30, 11, 27, -1, + 27, 11, 12, -1,11, 13, 12, -1,18, 32, 31, -1,31, 32, 33, -1,35, 19, 34, -1,34, 19, + 36, -1,38, 35, 37, -1,37, 35, 34, -1,32, 39, 33, -1,33, 39, 40, -1,42, 38, 41, -1, + 41, 38, 37, -1,39, 43, 40, -1,40, 43, 44, -1,46, 42, 45, -1,45, 42, 41, -1,43, 47, + 44, -1,44, 47, 48, -1,50, 46, 49, -1,49, 46, 45, -1,47, 51, 48, -1,48, 51, 52, -1, + 54, 50, 53, -1,53, 50, 49, -1,51, 55, 52, -1,52, 55, 56, -1,58, 54, 57, -1,57, 54, + 53, -1,55, 59, 56, -1,56, 59, 60, -1,62, 58, 61, -1,61, 58, 57, -1,59, 63, 60, -1, + 60, 63, 64, -1,66, 62, 65, -1,65, 62, 61, -1,63, 67, 64, -1,64, 67, 68, -1,21, 66, + 69, -1,69, 66, 65, -1,67, 22, 68, -1,68, 22, 70, -1,73, 72, 71, -1,72, 74, 71, -1, + 71, 74, 75, -1,74, 76, 75, -1,79, 78, 77, -1,78, 80, 77, -1,77, 80, 81, -1,80, 82, + 81, -1,84, 83, 83, -1,83, 83, 85, -1,86, 86, 86, -1,86, 86, 86, -1,87, 87, 87, -1, + 87, 87, 87, -1,90, 89, 88, -1,89, 91, 88, -1,91, 92, 88, -1,93, 93, 93, -1,88, 95, + 94, -1,95, 96, 94, -1,94, 96, 97, -1,97, 96, 98, -1,98, 96, 99, -1,99, 96, 100, -1, + 100, 96, 101, -1,101, 96, 102, -1,102, 96, 103, -1,96, 104, 103, -1,104, 105, 103, -1, + 106, 106, 106, -1,106, 106, 106, -1,109, 108, 107, -1,108, 110, 107, -1,110, 111, + 107, -1,112, 112, 112, -1,107, 114, 113, -1,114, 115, 113, -1,115, 116, 113, -1,116, + 117, 113, -1,117, 118, 113, -1,118, 119, 113, -1,119, 120, 113, -1,120, 121, 113, -1, + 121, 122, 113, -1,113, 122, 123, -1,122, 124, 123, -1,125, 125, 125, -1,125, 125, + 125, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/link5.wrl b/examples/rlsg/unimation-puma560/link5.wrl new file mode 100644 index 00000000..b62152e7 --- /dev/null +++ b/examples/rlsg/unimation-puma560/link5.wrl @@ -0,0 +1,68 @@ +#VRML V2.0 utf8 + +DEF link5 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.266667 0.266667 0.266667 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.752941 0.752941 0.752941 + ambientIntensity 0.000000 + shininess 0.071794 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 24 + 0.040625 -0.01375 1.1e-005, 0.035182 -0.013734 0.020323, 0.020313 -0.013722 0.035193, 0 -0.013718 0.040636, + -0.020313 -0.013722 0.035193, -0.035182 -0.013734 0.020323, -0.040625 -0.01375 1.1e-005, -0.035182 -0.013766 -0.020302, + -0.020313 -0.013778 -0.035171, 0 -0.013782 -0.040614, 0.020313 -0.013778 -0.035171, 0.035182 -0.013766 -0.020302, + 0.040625 0.01375 -1.1e-005, 0.035182 0.013766 0.020302, 0.020313 0.013778 0.035171, 0 0.013782 0.040614, + -0.020313 0.013778 0.035171, -0.035182 0.013766 0.020302, -0.040625 0.01375 -1.1e-005, -0.035182 0.013734 -0.020323, + -0.020313 0.013722 -0.035193, 0 0.013718 -0.040636, 0.020313 0.013722 -0.035193, 0.035182 0.013734 -0.020323] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 48 + -2.4562e-006 -1 0.000794019, -9.6877e-006 -1 0.000787698, -7.2263e-008 -1 0.000787698, -1.28329e-006 -1 0.000792526, + 2.24229e-006 -1 0.000788986, -2.5934e-006 -1 0.000790277, 3.53743e-006 -1 0.000793825, 4.84106e-009 -1 0.000787697, + 0 -1 0.000797366, 4.83376e-006 -1 0.000789013, -8.37301e-006 -1 0.00080222, -2.64135e-005 -1 0.000833468, + -0.907069 -0.000324728 -0.420982, -0.996035 -6.7944e-005 -0.0889688, -0.996035 6.7944e-005 0.0889687, + -0.818114 -0.000448002 -0.575056, -0.575072 -0.000645688 -0.818102, -0.420988 -0.000725659 -0.907066, + -0.0889647 -0.000796794 -0.996035, 0.0889647 -0.000796794 -0.996035, 0.420978 -0.000725663 -0.907071, + 0.575072 -0.000645688 -0.818102, 0.818116 -0.000448 -0.575053, 0.907074 -0.000324721 -0.420972, + 0.996035 -6.7941e-005 -0.0889648, 0.996035 6.7941e-005 0.0889648, 0.907074 0.000324721 0.420972, 0.818116 0.000448 0.575053, + 0.575072 0.000645688 0.818102, 0.420978 0.000725663 0.907071, 0.0889647 0.000796794 0.996035, -0.0889647 0.000796794 0.996035, + -0.420988 0.000725659 0.907066, -0.575072 0.000645688 0.818102, -0.818114 0.000448002 0.575056, + -0.907069 0.000324728 0.420982, -2.44552e-006 -1 0.00079401, -9.64193e-006 -1 0.000787698, 7.2263e-008 -1 0.000787698, + -1.30763e-006 -1 0.000792534, 2.2429e-006 -1 0.000788999, -2.58509e-006 -1 0.000790299, 3.53759e-006 -1 0.000793825, + -4.84085e-009 -1 0.000787699, 0 -1 0.000797359, 4.83025e-006 -1 0.000788973, -8.36615e-006 -1 0.000802169, + -2.63928e-005 -1 0.000833391] + } + coordIndex [ + 0, 1, 11, -1,1, 2, 11, -1,2, 3, 11, -1,3, 4, 11, -1,4, 5, 11, -1,5, 6, 11, -1,6, + 7, 11, -1,7, 8, 11, -1,8, 9, 11, -1,9, 10, 11, -1,12, 0, 13, -1,13, 0, 1, -1,13, + 1, 14, -1,14, 1, 2, -1,14, 2, 15, -1,15, 2, 3, -1,15, 3, 16, -1,16, 3, 4, -1,16, + 4, 17, -1,17, 4, 5, -1,17, 5, 18, -1,18, 5, 6, -1,18, 6, 19, -1,19, 6, 7, -1,19, + 7, 20, -1,20, 7, 8, -1,20, 8, 21, -1,21, 8, 9, -1,21, 9, 22, -1,22, 9, 10, -1,22, + 10, 23, -1,23, 10, 11, -1,23, 11, 12, -1,12, 11, 0, -1,12, 13, 23, -1,13, 14, 23, -1, + 14, 15, 23, -1,15, 16, 23, -1,16, 17, 23, -1,17, 18, 23, -1,18, 19, 23, -1,19, 20, + 23, -1,20, 21, 23, -1,21, 22, 23, -1 + ] + normalPerVertex TRUE + normalIndex [ + 2, 1, 0, -1,1, 3, 0, -1,3, 4, 0, -1,4, 5, 0, -1,5, 6, 0, -1,6, 7, 0, -1,7, 8, 0, -1, + 8, 9, 0, -1,9, 10, 0, -1,10, 11, 0, -1,14, 13, 12, -1,12, 13, 15, -1,12, 15, 16, -1, + 16, 15, 17, -1,16, 17, 18, -1,18, 17, 19, -1,18, 19, 20, -1,20, 19, 21, -1,20, 21, + 22, -1,22, 21, 23, -1,22, 23, 24, -1,24, 23, 25, -1,24, 25, 26, -1,26, 25, 27, -1, + 26, 27, 28, -1,28, 27, 29, -1,28, 29, 30, -1,30, 29, 31, -1,30, 31, 32, -1,32, 31, + 33, -1,32, 33, 34, -1,34, 33, 35, -1,34, 35, 14, -1,14, 35, 13, -1,38, 37, 36, -1, + 37, 39, 36, -1,39, 40, 36, -1,40, 41, 36, -1,41, 42, 36, -1,42, 43, 36, -1,43, 44, + 36, -1,44, 45, 36, -1,45, 46, 36, -1,46, 47, 36, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/link6.wrl b/examples/rlsg/unimation-puma560/link6.wrl new file mode 100644 index 00000000..266f04c3 --- /dev/null +++ b/examples/rlsg/unimation-puma560/link6.wrl @@ -0,0 +1,62 @@ +#VRML V2.0 utf8 + +DEF link6 Transform { + children [ + Shape { + appearance Appearance { + material Material { + diffuseColor 0.266667 0.266667 0.266667 + emissiveColor 0.000000 0.000000 0.000000 + specularColor 0.752941 0.752941 0.752941 + ambientIntensity 0.000000 + shininess 0.071794 + } + } + geometry IndexedFaceSet { + solid FALSE + coord Coordinate { point [ + # points 28 + 0.016238 0.009375 0.005, 0.016238 0.009375 0.01, -0.016238 0.009375 0.01, -0.016238 0.009375 0.005, -0.016238 -0.009375 0.005, + -0.016238 -0.009375 0.01, 0.016238 -0.009375 0.01, 0.016238 -0.009375 0.005, 0.01875 0 0.005, -0.01875 0 0.005, + -0.009375 -0.016238 0.01, 0 -0.01875 0.01, 0.009375 -0.016238 0.01, 0.009375 0.016238 0.01, 0 0.01875 0.01, + -0.009375 0.016238 0.01, 0.016238 0.009375 0, 0.01875 0 0, 0.009375 0.016238 0, 0 0.01875 0, -0.009375 0.016238 0, + -0.016238 0.009375 0, -0.01875 0 0, -0.016238 -0.009375 0, -0.009375 -0.016238 0, 0 -0.01875 0, 0.009375 -0.016238 0, + 0.016238 -0.009375 0] + } + creaseAngle 0.610865 + normal Normal { vector [ + # normals 31 + 0 -1 0, 0 1 0, 0 0 1, -0.996035 -0.0889614 0, -0.838028 -0.545627 0, -0.996035 0.0889614 0, -0.866026 -0.499999 0, + -0.57506 -0.818111 0, -0.499999 -0.866026 0, -0.707107 -0.707107 0, -0.0889614 -0.996035 0, 0.0889614 -0.996035 0, + 0.420972 -0.907074 0, 0.61057 -0.791963 0, 0.866026 -0.499999 0, 0.818111 -0.57506 0, 0.707107 -0.707107 0, + 0.996035 -0.0889614 0, 0.996035 0.0889614 0, 0.838028 0.545627 0, 0.866026 0.499999 0, 0.57506 0.818111 0, + 0.499999 0.866026 0, 0.707107 0.707107 0, 0.0889614 0.996035 0, -0.0889614 0.996035 0, -0.420972 0.907074 0, + -0.61057 0.791963 0, -0.866026 0.499999 0, -0.818111 0.57506 0, -0.707107 0.707107 0] + } + coordIndex [ + 0, 1, 3, -1,3, 1, 2, -1,4, 5, 7, -1,7, 5, 6, -1,0, 3, 8, -1,8, 3, 7, -1,3, 9, 7, -1, + 9, 4, 7, -1,6, 5, 12, -1,5, 10, 12, -1,10, 11, 12, -1,2, 1, 15, -1,1, 13, 15, -1, + 13, 14, 15, -1,8, 0, 17, -1,17, 0, 16, -1,16, 0, 18, -1,18, 0, 13, -1,0, 1, 13, -1, + 18, 13, 19, -1,19, 13, 14, -1,19, 14, 20, -1,20, 14, 15, -1,20, 15, 21, -1,21, 15, + 3, -1,15, 2, 3, -1,3, 9, 21, -1,21, 9, 22, -1,9, 4, 22, -1,22, 4, 23, -1,23, 4, 24, -1, + 24, 4, 10, -1,4, 5, 10, -1,24, 10, 25, -1,25, 10, 11, -1,25, 11, 26, -1,26, 11, 12, -1, + 26, 12, 27, -1,27, 12, 7, -1,12, 6, 7, -1,7, 8, 27, -1,27, 8, 17, -1,17, 16, 27, -1, + 16, 18, 27, -1,18, 19, 27, -1,19, 20, 27, -1,20, 21, 27, -1,21, 22, 27, -1,22, 23, + 27, -1,23, 24, 27, -1,24, 25, 27, -1,25, 26, 27, -1 + ] + normalPerVertex TRUE + normalIndex [ + 0, 0, 0, -1,0, 0, 0, -1,1, 1, 1, -1,1, 1, 1, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1, + 2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1, + 5, 4, 3, -1,3, 4, 6, -1,6, 4, 7, -1,7, 4, 8, -1,4, 9, 8, -1,7, 8, 10, -1,10, 8, 11, -1, + 10, 11, 12, -1,12, 11, 13, -1,12, 13, 14, -1,14, 13, 15, -1,13, 16, 15, -1,15, 17, + 14, -1,14, 17, 18, -1,17, 19, 18, -1,18, 19, 20, -1,20, 19, 21, -1,21, 19, 22, -1, + 19, 23, 22, -1,21, 22, 24, -1,24, 22, 25, -1,24, 25, 26, -1,26, 25, 27, -1,26, 27, + 28, -1,28, 27, 29, -1,27, 30, 29, -1,29, 5, 28, -1,28, 5, 3, -1,2, 2, 2, -1,2, 2, + 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, 2, 2, -1,2, + 2, 2, -1,2, 2, 2, -1 + ] + } + } + ] +} diff --git a/examples/rlsg/unimation-puma560/unimation-puma560.wrl b/examples/rlsg/unimation-puma560/unimation-puma560.wrl new file mode 100644 index 00000000..98b52d83 --- /dev/null +++ b/examples/rlsg/unimation-puma560/unimation-puma560.wrl @@ -0,0 +1,62 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF link0 Transform { + children [ + Inline { + url "link0.wrl" + } + ] + } + DEF link1 Transform { + rotation 1 0 0 -1.570796 + translation 0 0 0.6604 + children [ + Inline { + url "link1.wrl" + } + ] + } + DEF link2 Transform { + rotation 1 0 0 -1.570796 + translation 0.4318 0.1291 0.6604 + children [ + Inline { + url "link2.wrl" + } + ] + } + DEF link3 Transform { + translation 0.4115 0.1291 0.6604 + children [ + Inline { + url "link3.wrl" + } + ] + } + DEF link4 Transform { + rotation 1 0 0 -1.570796 + translation 0.4115 0.1291 1.0935 + children [ + Inline { + url "link4.wrl" + } + ] + } + DEF link5 Transform { + translation 0.4115 0.1291 1.0935 + children [ + Inline { + url "link5.wrl" + } + ] + } + DEF link6 Transform { + translation 0.4115 0.1291 1.13475 + children [ + Inline { + url "link6.wrl" + } + ] + } ] +} diff --git a/examples/rlsg/unimation-puma560_boxes.convex.wrl b/examples/rlsg/unimation-puma560_boxes.convex.wrl new file mode 100644 index 00000000..02694efb --- /dev/null +++ b/examples/rlsg/unimation-puma560_boxes.convex.wrl @@ -0,0 +1,13 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF unimation-puma560 Transform { + children [ + Inline { + url "unimation-puma560.convex/unimation-puma560.wrl" + } ] + } + DEF boxes Inline { + url "boxes.wrl" + } ] +} diff --git a/examples/rlsg/unimation-puma560_boxes.convex.xml b/examples/rlsg/unimation-puma560_boxes.convex.xml new file mode 100644 index 00000000..605de067 --- /dev/null +++ b/examples/rlsg/unimation-puma560_boxes.convex.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/unimation-puma560_boxes.wrl b/examples/rlsg/unimation-puma560_boxes.wrl new file mode 100644 index 00000000..b60d04fa --- /dev/null +++ b/examples/rlsg/unimation-puma560_boxes.wrl @@ -0,0 +1,13 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF unimation-puma560 Transform { + children [ + Inline { + url "unimation-puma560/unimation-puma560.wrl" + } ] + } + DEF boxes Inline { + url "boxes.wrl" + } ] +} diff --git a/examples/rlsg/unimation-puma560_boxes.xml b/examples/rlsg/unimation-puma560_boxes.xml new file mode 100644 index 00000000..51a92e3e --- /dev/null +++ b/examples/rlsg/unimation-puma560_boxes.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/examples/rlsg/wall.wrl b/examples/rlsg/wall.wrl new file mode 100644 index 00000000..2fba23e3 --- /dev/null +++ b/examples/rlsg/wall.wrl @@ -0,0 +1,733 @@ +#VRML V2.0 utf8 +Transform { + children [ + DEF floor Transform { + translation 0 0 -0.025 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.9 + } + } + geometry Box { + size 5 5 0.05 + } + } + ] + } + DEF ceiling Transform { + translation 0 0 2.525 + children [ + Shape { + appearance Appearance { + material Material { + transparency 1 + } + } + geometry Box { + size 5 5 0.05 + } + } + ] + } + DEF south Transform { + translation 0 -2.525 1.25 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.9 + } + } + geometry Box { + size 5 0.05 2.5 + } + } + ] + } + DEF north Transform { + translation 0 2.525 1.25 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.9 + } + } + geometry Box { + size 5 0.05 2.5 + } + } + ] + } + DEF west Transform { + translation -2.525 0 1.25 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.9 + } + } + geometry Box { + size 0.05 5 2.5 + } + } + ] + } + DEF east Transform { + translation 2.525 0 1.25 + children [ + Shape { + appearance Appearance { + material Material { + transparency 0.9 + } + } + geometry Box { + size 0.05 5 2.5 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 0 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0 0.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0 0.875 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 0.25 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# Transform { +# translation 0 0.25 0.375 +# children [ +# Shape { +# appearance Appearance { +# material Material { +# +# } +# } +# geometry Box { +# size 0.05 0.25 0.25 +# } +# } +# ] +# } + Transform { + translation 0 0.25 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# Transform { +# translation 0 0.25 0.875 +# children [ +# Shape { +# appearance Appearance { +# material Material { +# +# } +# } +# geometry Box { +# size 0.05 0.25 0.25 +# } +# } +# ] +# } + Transform { + translation 0 0.25 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.25 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 0.5 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.5 0.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.5 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.5 0.875 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.5 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.5 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 0.75 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.75 0.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.75 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.75 0.875 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.75 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 0.75 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 -0.25 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# Transform { +# translation 0 -0.25 0.375 +# children [ +# Shape { +# appearance Appearance { +# material Material { +# +# } +# } +# geometry Box { +# size 0.05 0.25 0.25 +# } +# } +# ] +# } + Transform { + translation 0 -0.25 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# Transform { +# translation 0 -0.25 0.875 +# children [ +# Shape { +# appearance Appearance { +# material Material { +# +# } +# } +# geometry Box { +# size 0.05 0.25 0.25 +# } +# } +# ] +# } + Transform { + translation 0 -0.25 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.25 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 -0.5 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.5 0.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.5 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.5 0.875 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.5 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.5 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } +# ----------------------------------------------------------------------------- + Transform { + translation 0 -0.75 0.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.75 0.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.75 0.625 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.75 0.875 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.75 1.125 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + Transform { + translation 0 -0.75 1.375 + children [ + Shape { + appearance Appearance { + material Material { + + } + } + geometry Box { + size 0.05 0.25 0.25 + } + } + ] + } + ] +} + diff --git a/extras/3rdpartylicenses/LICENSE.BSL.txt b/extras/3rdpartylicenses/LICENSE.BSL.txt new file mode 100644 index 00000000..36b7cd93 --- /dev/null +++ b/extras/3rdpartylicenses/LICENSE.BSL.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/extras/3rdpartylicenses/LICENSE.FREE_USE.txt b/extras/3rdpartylicenses/LICENSE.FREE_USE.txt new file mode 100644 index 00000000..dfcafa74 --- /dev/null +++ b/extras/3rdpartylicenses/LICENSE.FREE_USE.txt @@ -0,0 +1,22 @@ +Copyright (c) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007 +Utrecht University (The Netherlands), +ETH Zurich (Switzerland), +INRIA Sophia-Antipolis (France), +Max-Planck-Institute Saarbruecken (Germany), +and Tel-Aviv University (Israel). All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extras/3rdpartylicenses/LICENSE.GPL.txt b/extras/3rdpartylicenses/LICENSE.GPL.txt new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/extras/3rdpartylicenses/LICENSE.GPL.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/extras/3rdpartylicenses/LICENSE.LGPL.txt b/extras/3rdpartylicenses/LICENSE.LGPL.txt new file mode 100644 index 00000000..65c5ca88 --- /dev/null +++ b/extras/3rdpartylicenses/LICENSE.LGPL.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/extras/3rdpartylicenses/LICENSE_QPL.txt b/extras/3rdpartylicenses/LICENSE_QPL.txt new file mode 100644 index 00000000..3fca0046 --- /dev/null +++ b/extras/3rdpartylicenses/LICENSE_QPL.txt @@ -0,0 +1,110 @@ + + The SOLID library is Copyright (C) 2001-2003 Dtecta. + + You may use, distribute and copy the SOLID library under the terms of + the Q Public License, which is displayed below. + +------------------------------------------------------------------------- + THE Q PUBLIC LICENSE + version 1.0 + + Copyright (C) 1999-2000 Trolltech AS, Norway. + Everyone is permitted to copy and + distribute this license document. + +The intent of this license is to establish freedom to share and change the +software regulated by this license under the open source model. + +This license applies to any software containing a notice placed by the +copyright holder saying that it may be distributed under the terms of +the Q Public License version 1.0. Such software is herein referred to as +the Software. This license covers modification and distribution of the +Software, use of third-party application programs based on the Software, +and development of free software which uses the Software. + + Granted Rights + +1. You are granted the non-exclusive rights set forth in this license + provided you agree to and comply with any and all conditions in this + license. Whole or partial distribution of the Software, or software + items that link with the Software, in any form signifies acceptance of + this license. + +2. You may copy and distribute the Software in unmodified form provided + that the entire package, including - but not restricted to - copyright, + trademark notices and disclaimers, as released by the initial developer + of the Software, is distributed. + +3. You may make modifications to the Software and distribute your + modifications, in a form that is separate from the Software, such as + patches. The following restrictions apply to modifications: + + a. Modifications must not alter or remove any copyright notices in + the Software. + + b. When modifications to the Software are released under this + license, a non-exclusive royalty-free right is granted to the + initial developer of the Software to distribute your modification + in future versions of the Software provided such versions remain + available under these terms in addition to any other license(s) of + the initial developer. + +4. You may distribute machine-executable forms of the Software or + machine-executable forms of modified versions of the Software, provided + that you meet these restrictions: + + a. You must include this license document in the distribution. + + b. You must ensure that all recipients of the machine-executable forms + are also able to receive the complete machine-readable source code + to the distributed Software, including all modifications, without + any charge beyond the costs of data transfer, and place prominent + notices in the distribution explaining this. + + c. You must ensure that all modifications included in the + machine-executable forms are available under the terms of this + license. + +5. You may use the original or modified versions of the Software to + compile, link and run application programs legally developed by you + or by others. + +6. You may develop application programs, reusable components and other + software items that link with the original or modified versions of the + Software. These items, when distributed, are subject to the following + requirements: + + a. You must ensure that all recipients of machine-executable forms of + these items are also able to receive and use the complete + machine-readable source code to the items without any charge + beyond the costs of data transfer. + + b. You must explicitly license all recipients of your items to use + and re-distribute original and modified versions of the items in + both machine-executable and source code forms. The recipients must + be able to do so without any charges whatsoever, and they must be + able to re-distribute to anyone they choose. + + + c. If the items are not available to the general public, and the + initial developer of the Software requests a copy of the items, + then you must supply one. + + Limitations of Liability + +In no event shall the initial developers or copyright holders be liable +for any damages whatsoever, including - but not restricted to - lost +revenue or profits or other direct, indirect, special, incidental or +consequential damages, even if they have been advised of the possibility +of such damages, except to the extent invariable law, if any, provides +otherwise. + + No Warranty + +The Software and this license document are provided AS IS with NO WARRANTY +OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE. + Choice of Law + +This license is governed by the Laws of Norway. Disputes shall be settled +by Oslo City Court. diff --git a/extras/3rdpartylicenses/all_sources.txt b/extras/3rdpartylicenses/all_sources.txt new file mode 100644 index 00000000..f501caa9 --- /dev/null +++ b/extras/3rdpartylicenses/all_sources.txt @@ -0,0 +1,31 @@ + +All third party libraries are open source. +You can get the binaries and source files of the versions we use from here: + +http://download.fortiss.org/public/rl/boost-1.52.0-msvc10-x86.zip + http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.tar.bz2/download +http://download.fortiss.org/public/rl/bullet-2.78-msvc10-x86.zip + http://bullet.googlecode.com/files/bullet-2.78.zip +http://download.fortiss.org/public/rl/CGAL-4.1-boost-1.52-msvc10-x86.zip + https://gforge.inria.fr/frs/download.php/31640/CGAL-4.1.tar.bz2 +http://download.fortiss.org/public/rl/Coin-3.1.3-msvc10-x86.zip + https://bitbucket.org/Coin3D/coin/downloads/Coin-3.1.3.tar.gz +http://download.fortiss.org/public/rl/eigen-3.1.2.zip + https://bitbucket.org/eigen/eigen/get/3.1.2.tar.bz2 +http://download.fortiss.org/public/rl/libxml2-2.7.8-msvc10-x86.zip + http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz +http://download.fortiss.org/public/rl/ode-0.11.1-msvc10-x86.zip + http://sourceforge.net/projects/opende/files/ODE/0.11.1/ode-0.11.1.tar.bz2/download +http://download.fortiss.org/public/rl/pqp-1.3-msvc10-x86.zip + http://gamma.cs.unc.edu/software/downloads/SSV/pqp-1.3.tar.gz +http://download.fortiss.org/public/rl/Qt-4.7.3-dev-msvc2010-rdh.7z + http://download.qt-project.org/archive/qt/4.7/qt-everywhere-opensource-src-4.7.3.tar.gz +http://download.fortiss.org/public/rl/simage-1.7.0-msvc10-x86.zip + https://bitbucket.org/Coin3D/coin/downloads/simage-1.7.0.tar.gz +http://download.fortiss.org/public/rl/solid-3.5.6-msvc10-x86.zip + http://www.dtecta.com/files/solid-3.5.7.zip +http://download.fortiss.org/public/rl/SoQt-1.5.0-Coin-3.1.3-Qt-4.7.3-msvc10-x86.zip + http://ftp.coin3d.org/coin/src/all/SoQt-1.5.0.tar.gz +http://download.fortiss.org/public/rl/zlib-1.2.5-msvc10-x86.zip + http://sourceforge.net/projects/libpng/files/zlib/1.2.5/zlib-1.2.5.tar.bz2/download + \ No newline at end of file diff --git a/extras/3rdpartylicenses/boost.txt b/extras/3rdpartylicenses/boost.txt new file mode 100644 index 00000000..36b7cd93 --- /dev/null +++ b/extras/3rdpartylicenses/boost.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/extras/3rdpartylicenses/bullet.txt b/extras/3rdpartylicenses/bullet.txt new file mode 100644 index 00000000..ba24a53c --- /dev/null +++ b/extras/3rdpartylicenses/bullet.txt @@ -0,0 +1,19 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +All files in the Bullet/src folder are under this Zlib license. +Optional Extras/GIMPACT and Extras/GIMPACTBullet is also under ZLib license. Other optional external libraries in Extras/Demos have own license,see respective files. + +This means Bullet can freely be used in any software, including commercial and console software. A Playstation 3 optimized version is available through Sony. diff --git a/extras/3rdpartylicenses/cgal.txt b/extras/3rdpartylicenses/cgal.txt new file mode 100644 index 00000000..948be6d1 --- /dev/null +++ b/extras/3rdpartylicenses/cgal.txt @@ -0,0 +1,42 @@ +LICENSE +---------------------------------------------------------------------------- + +The CGAL software consists of several parts, each of which is licensed under +an open source license. It is also possible to obtain commercial licenses +from GeometryFactory (www.geometryfactory.com) for all or parts of CGAL. + +The source code of the CGAL library can be found in the directories +"src/CGAL", "src/CGALQt", "src/CGALQt4" and "include/CGAL" (with the +exception of "include/CGAL/CORE", "include/CGAL/OpenNL"). +It is specified in each file of the CGAL library which +license applies to it. This is either the GNU General Public License +or the GNU Lesser General Public License (as published by the Free Software +Foundation; either version 3 of the License or (at your option) any later +version). The texts of both licenses can be found in the files LICENSE.GPL +and LICENSE.LGPL. + +The following files are modified versions taken from Boost and are licensed +under the Boost Software License (see LICENSE.BSL). +- include/CGAL/auto_link/auto_link.h +- include/CGAL/internal/container_fwd_fixed.hpp +- include/CGAL/internal/boost/array_binary_tree.hpp +- include/CGAL/internal/boost/mutable_heap.hpp +- include/CGAL/internal/boost/mutable_queue.hpp + +Distributed along with CGAL (for the users' convenience), but not part of +CGAL, are the following third-party libraries, available under their own +licenses: + +- CORE, in the directories "include/CGAL/CORE" and "src/CGALCore", is + licensed under the LGPL (see LICENSE.LGPL). +- ImageIO, in the directory "src/CGALimageIO", is licensed under the LGPL + (see LICENSE.LGPL). +- OpenNL, in the directory "include/CGAL/OpenNL", is licensed under the LGPL + (see LICENSE.LGPL). + +All other files that do not have an explicit copyright notice (e.g., all +examples and some demos) are licensed under a very permissive license. The +exact license text can be found in the file LICENSE.FREE_USE. + +More information on the CGAL license can be found at +http://www.cgal.org/license.html diff --git a/extras/3rdpartylicenses/coin.txt b/extras/3rdpartylicenses/coin.txt new file mode 100644 index 00000000..aca3fe3e --- /dev/null +++ b/extras/3rdpartylicenses/coin.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/extras/3rdpartylicenses/eigen.txt b/extras/3rdpartylicenses/eigen.txt new file mode 100644 index 00000000..14e2f777 --- /dev/null +++ b/extras/3rdpartylicenses/eigen.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/extras/3rdpartylicenses/ode.txt b/extras/3rdpartylicenses/ode.txt new file mode 100644 index 00000000..cfe59bca --- /dev/null +++ b/extras/3rdpartylicenses/ode.txt @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/extras/3rdpartylicenses/pqp.txt b/extras/3rdpartylicenses/pqp.txt new file mode 100644 index 00000000..74eaae4e --- /dev/null +++ b/extras/3rdpartylicenses/pqp.txt @@ -0,0 +1,33 @@ + Copyright 1999 University of North Carolina at Chapel Hill. + All rights reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation for educational, research, and non-profit purposes, without fee, + and without a written agreement is hereby granted, provided that the above + copyright notice and the following three paragraphs appear in all copies. + + IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL BE LIABLE TO + ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + DOCUMENTATION, EVEN IF THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL HAS + BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL SPECIFICALLY DISCLAIMS ANY + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED + HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF NORTH CAROLINA AT + CHAPEL HILL HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, + ENHANCEMENTS, OR MODIFICATIONS. + + The authors may be contacted via: + + US Mail: Eric Larsen, Stefan Gottschalk + Department of Computer Science + Sitterson Hall, CB #3175 + University of North Carolina + Chapel Hill, NC 27599-3175 + + Phone: (919) 962-1749 + + Email: geom@cs.unc.edu + diff --git a/extras/3rdpartylicenses/qt.txt b/extras/3rdpartylicenses/qt.txt new file mode 100644 index 00000000..0559729d --- /dev/null +++ b/extras/3rdpartylicenses/qt.txt @@ -0,0 +1,377 @@ +For individuals and/or legal entities resident in the American +Continent (including those resident in Canada, South America, and +the United States of America), the applicable licensing terms are +specified under the heading "Technology Preview License Agreement: +American Continent". + +For individuals and/or legal entities not resident in the American +Continent, the applicable licensing terms are specified under the +heading "Technology Preview License Agreement: Norway". + + + Technology Preview License Agreement: American Continent + Agreement version 1.0 + + IMPORTANT READ CAREFULLY: + 1. This Trolltech End-User License Agreement ("Agreement") is a + legal agreement between you (either an individual or a single entity) + ("Licensee") and Trolltech Inc. for the Trolltech software product(s) + accompanying this Agreement, which include(s) computer software and may + include "online" or electronic documentation, associated media, and + printed materials, including the source code, example programs and the + documentation ("Licensed Software"). + + 2. By installing, copying, or otherwise using the Licensed + Software, Licensee agrees to be bound by the terms of this Agreement. If + Licensee does not agree to the terms of this Agreement, Licensee may not + install, copy, or otherwise use the Licensed Software. In addition, by + installing, copying, or otherwise using any updates or other components + of the Licensed Software that Licensee receives separately as part of + the Licensed Software ("Updates"), Licensee agrees to be bound by any + additional license terms that accompany such Updates. If Licensee does + not agree to the additional license terms that accompany such Updates, + Licensee may not install, copy, or otherwise use such Updates. + + 3. The Licensed Software is protected by copyright laws and + international copyright treaties, as well as other intellectual property + laws and treaties. The Licensed Software is licensed, not sold. + + 4. Upon Licensee's acceptance of the terms and conditions of this + Agreement, Trolltech grants Licensee the right to use the Licensed + Software in the manner provided below. + + 5. Trolltech grants to Licensee as an individual a personal, + nonexclusive, non-transferable, license for the sole purposes of + evaluating and testing the Licensed Software and/or providing feedback + to Trolltech. + + 6. This Licensed Software is time-limited. All rights granted to + Licensee in this Agreement will be void three (3) months after + Trolltech's official release of its product "Qt 4". + + 7. Licensee may install copies of the Licensed Software on an + unlimited number of computers provided that Licensee is the only + individual using the Licensed Software. If Licensee is an entity, + Trolltech grants Licensee the right to designate one, and only one, + individual within Licensee's organization who shall have the sole right + to use the Licensed Software in the manner provided above. Licensee may + at any time, but not more frequently that once every six (6) months, + designate another individual to replace the current designated user by + notifying Trolltech, so long as there is no more than one designated + user at any given time. + + 8. Licensee may not loan, rent, lease, or license the Licensed + Software or any copy of it. Licensee may not alter or remove any details + of ownership, copyright, trademark or other property right connected + with the Licensed Software. Licensee may not modify or distribute the + Licensed Software. Licensee may not distribute any software statically + or dynamically linked with the Licensed Software. + + 9. The Licensed Software may provide links to third party libraries + or code (collectively "Third Party Libraries") to implement various + functions. Third Party Libraries do not comprise part of the Licensed + Software. In some cases, access to Third Party Libraries may be included + along with the Licensed Software delivery as a convenience for + development and testing only. Such source code and libraries as are or + may be listed in the ".../src/3rdparty" source tree delivered with the + Licensed Software, as may be amended from time to time, do not comprise + the Licensed Software. Licensee acknowledges (1) that some Third Party + Libraries may require additional licensing of copyright and patents from + the owners of such, and (2) that distribution of any of the Licensed + Software referencing any portion of a Third Party Library may require + appropriate licensing from such third parties. + + 10. Pre-Release Code, Non-Commercial Use: The Licensed Software + contains Pre-release Code that is not at the level of performance and + compatibility of a final, generally available, product offering. The + Licensed Software may not operate correctly and may be substantially + modified prior to first commercial shipment, if any. Trolltech is not + obligated to make this or any later version of the Licensed Software + commercially available. The Licensed Software is "Not for Commercial + Use" and may only be used for the purposes described in section 5. You + may not use the Licensed Software in a live operating environment where + it may be relied upon to perform in the same manner as a commercially + released product or with data that has not been sufficiently backed up. + + 11. WARRANTY DISCLAIMER: THE LICENSED SOFTWARE IS LICENSED TO + LICENSEE "AS IS". TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, + TROLLTECH ON BEHALF OF ITSELF AND ITS SUPPLIERS, DISCLAIMS ALL + WARRANTIES AND CONDITIONS, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT + LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT WITH REGARD TO THE + LICENSED SOFTWARE. + + 12. LIMITATION OF LIABILITY: IF, TROLLTECH'S WARRANTY DISCLAIMER + NOTWITHSTANDING, TROLLTECH IS HELD LIABLE TO LICENSEE,WHETHER IN + CONTRACT, TORT OR ANY OTHER LEGAL THEORY, BASED ON THE LICENSED + SOFTWARE, TROLLTECH'S ENTIRE LIABILITY TO LICENSEE AND LICENSEE'S + EXCLUSIVE REMEDY SHALL BE, AT TROLLTECH'S OPTION, EITHER (A) RETURN OF + THE PRICE LICENSEE PAID FOR THE LICENSED SOFTWARE, OR (B) REPAIR OR + REPLACEMENT OF THE LICENSED SOFTWARE, PROVIDED LICENSEE RETURNS TO + TROLLTECH ALL COPIES OF THE LICENSED SOFTWARE AS ORIGINALLY DELIVERED TO + LICENSEE. TROLLTECH SHALL NOT UNDER ANY CIRCUMSTANCES BE LIABLE TO + LICENSEE BASED ON FAILURE OF THE LICENSED SOFTWARE IF THE FAILURE + RESULTED FROM ACCIDENT, ABUSE OR MISAPPLICATION, NOR SHALL TROLLTECH + UNDER ANY CIRCUMSTANCES BE LIABLE FOR SPECIAL DAMAGES, PUNITIVE OR + EXEMPLARY DAMAGES, DAMAGES FOR LOSS OF PROFITS OR INTERRUPTION OF + BUSINESS OR FOR LOSS OR CORRUPTION OF DATA. ANY AWARD OF DAMAGES FROM + TROLLTECH TO LICENSEE SHALL NOT EXCEED THE TOTAL AMOUNT LICENSEE HAS + PAID TO TROLLTECH IN CONNECTION WITH THIS AGREEMENT. + + 13. Termination: Without prejudice to any other rights, Trolltech + may terminate this Agreement if Licensee fails to comply with the terms + and conditions of this Agreement. In such event, Licensee must destroy + all copies of the Licensed Software and all of its component parts. + + 14. EXPORT RESTRICTIONS. Licensee agrees not to export or re-export + the Licensed Software, any part thereof, or any process or service that + is the direct product of the Licensed Software. Licensee may not sell, + resell, or otherwise transfer for value, the Licensed Software (the + foregoing collectively referred to as the "Restricted Components"), to + any country, person, entity or end user subject to U.S. export + restrictions. Licensee specifically agrees not to export or re-export + any of the Restricted Components (i) to any country to which the U.S. + has embargoed or restricted the export of goods or services, which + currently include, but are not necessarily limited to Cuba, Iran, Iraq, + Libya, North Korea, Sudan and Syria, or to any national of any such + country, wherever located, who intends to transmit or transport the + Restricted Components back to such country; (ii) to any end-user who + Licensee knows or has reason to know will utilize the Restricted + Components in the design, development or production of nuclear, chemical + or biological weapons; or (iii) to any end-user who has been prohibited + from participating in U.S. export transactions by any federal agency of + the U.S. government. Licensee warrants and represents that neither the + U.S. Commerce Department, Bureau of Export Administration nor any other + U.S. federal agency has suspended, revoked or denied Licensee's export + privileges. + + 15. Government End Users: A "U.S. Government End User" shall mean + any agency or entity of the government of the United States. The + following shall apply if Licensee is a U.S. Government End User. The + Licensed Software is a "commercial item," as that term is defined in 48 + C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" + and "commercial computer software documentation," as such terms are used + in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and + 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government + End Users acquire the Licensed Software with only those rights set forth + herein. The Licensed Software (including related documentation) is + provided to U.S. Government End Users: (a) only as a commercial end + item; and (b) only pursuant to this Agreement. + + 16. Compliance with local laws: Licensee shall comply with all + applicable laws and regulations relating to the Licensed Software in the + United States and in other countries in which Licensee uses or modifies + the Licensed Software. Without limiting the generality of the foregoing, + Licensee shall not export, reexport, disclose or distribute any of the + Licensed Software in violation of any applicable laws or regulations, + including the export laws and regulations of the United States, and + shall comply with all such laws and regulations. + + 17. Entire Agreement: This Agreement constitutes the complete + agreement between the parties and supersedes all prior or + contemporaneous discussions, representations, and proposals, written or + oral, with respect to the subject matters discussed herein. No + modification of this Agreement will be effective unless contained in a + writing executed by an authorized representative of each party. No term + or condition contained in Licensee's purchase order will apply unless + expressly accepted by Trolltech in writing. If any provision of the + Agreement is found void or unenforceable, the remainder will remain + valid and enforceable according to its terms. If any remedy provided is + determined to have failed for its essential purpose, all limitations of + liability and exclusions of damages set forth in this Agreement shall + remain in effect. + + 18. Governing law, legal venue: This Agreement shall be construed, + interpreted and governed by the laws of the State of California, USA. + Any action or proceeding arising from or relating to this Agreement + shall be brought in a federal court in the Northern District of + California or in the State Court in Santa Clara County, California, and + each party irrevocably submits to the personal jurisdiction of any such + court in any such action or proceeding. The Agreement gives Licensee + specific legal rights; Licensee may have others, which vary from state + to state and from country to country. Trolltech reserves all rights not + specifically granted in this Agreement. + + + + +For legal entities and/or individuals residing in any country +other than Canada, the United States of America or +South America: + + Technology Preview License Agreement: Norway + Agreement version 1.0 + + IMPORTANT READ CAREFULLY: + 1. This Trolltech End-User License Agreement ("Agreement") is a + legal agreement between you (either an individual or a single entity) + ("Licensee") and Trolltech AS for the Trolltech software product(s) + accompanying this Agreement, which include(s) computer software and may + include "online" or electronic documentation, associated media, and + printed materials, including the source code, example programs and the + documentation ("Licensed Software"). + + 2. By installing, copying, or otherwise using the Licensed + Software, Licensee agrees to be bound by the terms of this Agreement. If + Licensee does not agree to the terms of this Agreement, Licensee may not + install, copy, or otherwise use the Licensed Software. In addition, by + installing, copying, or otherwise using any updates or other components + of the Licensed Software that Licensee receives separately as part of + the Licensed Software ("Updates"), Licensee agrees to be bound by any + additional license terms that accompany such Updates. If Licensee does + not agree to the additional license terms that accompany such Updates, + Licensee may not install, copy, or otherwise use such Updates. + + 3. The Licensed Software is protected by copyright laws and + international copyright treaties, as well as other intellectual property + laws and treaties. The Licensed Software is licensed, not sold. + + 4. Upon Licensee's acceptance of the terms and conditions of this + Agreement, Trolltech grants Licensee the right to use the Licensed + Software in the manner provided below. + + 5. Trolltech grants to Licensee as an individual a personal, + nonexclusive, non-transferable, license for the sole purposes of + evaluating and testing the Licensed Software and/or providing feedback + to Trolltech. + + 6. This Licensed Software is time-limited. All rights granted to + Licensee in this Agreement will be void three (3) months after + Trolltech's official release of its product "Qt 4". + + 7. Licensee may install copies of the Licensed Software on an + unlimited number of computers provided that Licensee is the only + individual using the Licensed Software. If Licensee is an entity, + Trolltech grants Licensee the right to designate one, and only one, + individual within Licensee's organization who shall have the sole right + to use the Licensed Software in the manner provided above. Licensee may + at any time, but not more frequently that once every six (6) months, + designate another individual to replace the current designated user by + notifying Trolltech, so long as there is no more than one designated + user at any given time. + + 8. Licensee may not loan, rent, lease, or license the Licensed + Software or any copy of it. Licensee may not alter or remove any details + of ownership, copyright, trademark or other property right connected + with the Licensed Software. Licensee may not modify or distribute the + Licensed Software. Licensee may not distribute any software statically + or dynamically linked with the Licensed Software. + + 9. The Licensed Software may provide links to third party libraries + or code (collectively "Third Party Libraries") to implement various + functions. Third Party Libraries do not comprise part of the Licensed + Software. In some cases, access to Third Party Libraries may be included + along with the Licensed Software delivery as a convenience for + development and testing only. Such source code and libraries as are or + may be listed in the ".../src/3rdparty" source tree delivered with the + Licensed Software, as may be amended from time to time, do not comprise + the Licensed Software. Licensee acknowledges (1) that some Third Party + Libraries may require additional licensing of copyright and patents from + the owners of such, and (2) that distribution of any of the Licensed + Software referencing any portion of a Third Party Library may require + appropriate licensing from such third parties. + + 10. Pre-Release Code, Non-Commercial Use: The Licensed Software + contains Pre-release Code that is not at the level of performance and + compatibility of a final, generally available, product offering. The + Licensed Software may not operate correctly and may be substantially + modified prior to first commercial shipment, if any. Trolltech is not + obligated to make this or any later version of the Licensed Software + commercially available. The Licensed Software is "Not for Commercial + Use" and may only be used for the purposes described in section 5. You + may not use the Licensed Software in a live operating environment where + it may be relied upon to perform in the same manner as a commercially + released product or with data that has not been sufficiently backed up. + + 11. Warranty Disclaimer: The Licensed Software is licensed to + Licensee "as is". To the maximum extent permitted by applicable law, + Trolltech on behalf of itself and its suppliers, disclaims all + warranties and conditions, either express or implied, including, but not + limited to, implied warranties of merchantability, fitness for a + particular purpose, title and non-infringement with regard to the + Licensed Software. + + 12. Limitation of Liability: If, Trolltech's warranty disclaimer + notwithstanding, Trolltech is held liable to Licensee, whether in + contract, tort or any other legal theory, based on the Licensed + Software, Trolltech's entire liability to Licensee and Licensee's + exclusive remedy shall be, at Trolltech's option, either (A) return of + the price Licensee paid for the Licensed Software, or (B) repair or + replacement of the Licensed Software, provided Licensee returns to + Trolltech all copies of the Licensed Software as originally delivered to + Licensee. Trolltech shall not under any circumstances be liable to + Licensee based on failure of the Licensed Software if the failure + resulted from accident, abuse or misapplication, nor shall Trolltech + under any circumstances be liable for special damages, punitive or + exemplary damages, damages for loss of profits or interruption of + business or for loss or corruption of data. Any award of damages from + Trolltech to Licensee shall not exceed the total amount Licensee has + paid to Trolltech in connection with this Agreement. + + 13. Termination: Without prejudice to any other rights, Trolltech + may terminate this Agreement if Licensee fails to comply with the terms + and conditions of this Agreement. In such event, Licensee must destroy + all copies of the Licensed Software and all of its component parts. + + 14. EXPORT RESTRICTIONS. Licensee agrees not to export or re-export + the Licensed Software, any part thereof, or any process or service that + is the direct product of the Licensed Software. Licensee may not sell, + resell, or otherwise transfer for value, the Licensed Software (the + foregoing collectively referred to as the "Restricted Components"), to + any country, person, entity or end user subject to U.S. export + restrictions. Licensee specifically agrees not to export or re-export + any of the Restricted Components (i) to any country to which the U.S. + has embargoed or restricted the export of goods or services, which + currently include, but are not necessarily limited to Cuba, Iran, Iraq, + Libya, North Korea, Sudan and Syria, or to any national of any such + country, wherever located, who intends to transmit or transport the + Restricted Components back to such country; (ii) to any end-user who + Licensee knows or has reason to know will utilize the Restricted + Components in the design, development or production of nuclear, chemical + or biological weapons; or (iii) to any end-user who has been prohibited + from participating in U.S. export transactions by any federal agency of + the U.S. government. Licensee warrants and represents that neither the + U.S. Commerce Department, Bureau of Export Administration nor any other + U.S. federal agency has suspended, revoked or denied Licensee's export + privileges. + + 15. Government End Users: A "U.S. Government End User" shall mean + any agency or entity of the government of the United States. The + following shall apply if Licensee is a U.S. Government End User. The + Licensed Software is a "commercial item," as that term is defined in 48 + C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" + and "commercial computer software documentation," as such terms are used + in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and + 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government + End Users acquire the Licensed Software with only those rights set forth + herein. The Licensed Software (including related documentation) is + provided to U.S. Government End Users: (a) only as a commercial end + item; and (b) only pursuant to this Agreement. + + 16. Compliance with local laws: Licensee shall comply with all + applicable laws and regulations relating to the Licensed Software in the + United States and in other countries in which Licensee uses or modifies + the Licensed Software. Without limiting the generality of the foregoing, + Licensee shall not export, reexport, disclose or distribute any of the + Licensed Software in violation of any applicable laws or regulations, + including the export laws and regulations of the United States, and + shall comply with all such laws and regulations. + + 17. Entire Agreement: This Agreement constitutes the complete + agreement between the parties and supersedes all prior or + contemporaneous discussions, representations, and proposals, written or + oral, with respect to the subject matters discussed herein. No + modification of this Agreement will be effective unless contained in a + writing executed by an authorized representative of each party. No term + or condition contained in Licensee's purchase order will apply unless + expressly accepted by Trolltech in writing. If any provision of the + Agreement is found void or unenforceable, the remainder will remain + valid and enforceable according to its terms. If any remedy provided is + determined to have failed for its essential purpose, all limitations of + liability and exclusions of damages set forth in this Agreement shall + remain in effect. + + 18. Governing law, legal venue: This Agreement shall be construed, + interpreted and governed by the laws of Norway, the legal venue to be + Oslo City Court. Trolltech reserves all rights not specifically granted + in this Agreement. diff --git a/extras/3rdpartylicenses/simage.txt b/extras/3rdpartylicenses/simage.txt new file mode 100644 index 00000000..5e748dfb --- /dev/null +++ b/extras/3rdpartylicenses/simage.txt @@ -0,0 +1,8 @@ +All files in this library are public domain, except the files in the +mpeg2enc directory. + +The license for the files in the mpeg2enc directory can be found +in the file mpeg2enc/mpeg2enc.h. + +Please send patches for bugs and new features to: Peder Blekken, +. diff --git a/extras/3rdpartylicenses/solid.txt b/extras/3rdpartylicenses/solid.txt new file mode 100644 index 00000000..7f752169 --- /dev/null +++ b/extras/3rdpartylicenses/solid.txt @@ -0,0 +1,62 @@ + + SOLID - Software Library for Interference Detection + +SOLID is a software library containing functions for performing +intersection tests and proximity queries that are useful in the context +of collision detection. Collision detection is the process of detecting +pairs of geometric objects that are intersecting or are within a given +proximity of each other. In particular, SOLID is useful for detecting +collisions between objects that are moving relatively of each other over +time. The motions of objects are controlled by the client application, +and are not determined or affected by SOLID. + +This open-source edition of SOLID version 3 is released under the terms of +either the GNU Public License (GPL) or the Q Public License (QPL). This means +that for software created with SOLID version 3 you must comply with the terms +of one of these licenses. You may choose which of these licenses best suits +your purpose. See the following files contained in this distribution for a +complete list of terms and conditions of these licenses: + + LICENSE_QPL.txt The Q Public License + LICENSE_GPL.txt The GNU General Public License + +These licenses do not permit the use of SOLID 3 in closed-source software +products. For enquiries about commercial use of SOLID, please contact +info@dtecta.com. + +SOLID 3 uses Qhull from The Geometry Center of the University of Minnesota. +Qhull is copyrighted as noted below. Qhull is free software and may be +obtained via anonymous ftp from geom.umn.edu. + + Qhull, Copyright (c) 1993-2002 + + The National Science and Technology Research Center for + Computation and Visualization of Geometric Structures + (The Geometry Center) + University of Minnesota + 400 Lind Hall + 207 Church Street S.E. + Minneapolis, MN 55455 USA + + email: qhull@geom.umn.edu + +Installation + +For details on how to install SOLID see the documentation in the 'doc' +directory. + +Platforms + +SOLID 3 has been tested on the following platforms: + + Linux x86, x86_64 gcc 2.95, gcc 3.3, gcc 3.4 + Win32 MSVC++ 6.0 SP4, MSVC++ 7.1 + + +Some of the example applications use GLUT. GLUT is a utility toolkit for +creating OpenGL applications. The original source code for GLUT is Copyright +1997 by Mark J. Kilgard. GLUT for Win32 is Copyright 1997 by Nate Robins. You +need to install the GLUT run-time library on Win32 if you want to build the +demos in the SOLID distribution that utilize OpenGL. GLUT for Win32 can be +downloaded from http://www.xmission.com/~nate/glut.html. + diff --git a/extras/3rdpartylicenses/soqt.txt b/extras/3rdpartylicenses/soqt.txt new file mode 100644 index 00000000..40a557b0 --- /dev/null +++ b/extras/3rdpartylicenses/soqt.txt @@ -0,0 +1,11 @@ +SoQt is released publicly under the GNU General Public License, +version 2. See the file LICENSE.GPL for all the details. + +A Professional Edition License can also be purchased for the SoQt +library from Kongsberg Oil & Gas Technologies. The benefits of this +includes first-tier support access to our developers, and the +permission to use SoQt in any product for any purpose (except +constructing a directly competing product with SoQt itself). + +See for more information, or mail us at +. diff --git a/extras/3rdpartylicenses/xml2.txt b/extras/3rdpartylicenses/xml2.txt new file mode 100644 index 00000000..417e9553 --- /dev/null +++ b/extras/3rdpartylicenses/xml2.txt @@ -0,0 +1,27 @@ +Except where otherwise noted in the source code (e.g. the files hash.c, +list.c and the trio files, which are covered by a similar licence but +with different Copyright notices) all the files are: + + Copyright (C) 1998-2003 Daniel Veillard. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is fur- +nished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- +NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON- +NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Daniel Veillard shall not +be used in advertising or otherwise to promote the sale, use or other deal- +ings in this Software without prior written authorization from him. + diff --git a/extras/3rdpartylicenses/zlib.txt b/extras/3rdpartylicenses/zlib.txt new file mode 100644 index 00000000..d4219bf8 --- /dev/null +++ b/extras/3rdpartylicenses/zlib.txt @@ -0,0 +1,115 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.5 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file example.c which also tests that the library +is working correctly. Another example is given in the file minigzip.c. The +compression library itself is composed of all source files except example.c and +minigzip.c. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use one +of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +http://marknelson.us/1997/01/01/zlib-engine/ . + +The changes made in version 1.2.5 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory contrib/ . + +zlib is available in Java using the java.util.zip package, documented at +http://java.sun.com/developer/technicalArticles/Programming/compression/ . + +A Perl interface to zlib written by Paul Marquess is available +at CPAN (Comprehensive Perl Archive Network) sites, including +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://www.python.org/doc/lib/module-zlib.html . + +zlib is built into tcl: http://wiki.tcl.tk/4610 . + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS or BEOS. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. + +Copyright notice: + + (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/extras/debian/README.txt b/extras/debian/README.txt new file mode 100644 index 00000000..6b42597d --- /dev/null +++ b/extras/debian/README.txt @@ -0,0 +1,35 @@ + +How to maintain RL for Launchpad release + +https://launchpad.net/~roblib/+archive/ppa + + +1. Build binary Debian package locally and +resolve any errors. +# export MAKEFLAGS+='-j8' + dpkg-buildpackage -rfakeroot + +2. Build source package for Launchpad + +2.1. Make sure you have an OpenPGP key signing with +your name and email address +that is exported to your Launchpad account + export DEBFULLNAME='Andre Gaschler' + export DEBEMAIL='gaschler@cs.tum.edu' + +2.2. Build source package + dpkg-buildpackage -rfakeroot -S + + +3. Launchpad Build + +https://help.launchpad.net/Packaging/PPA/Uploading + + +3.1. Upload changes files to Launchpad + + dput ppa:roblib/ppa ../librl_0.6.1*.changes + +3.2. Review error logs and retry + + diff --git a/extras/debian/changelog b/extras/debian/changelog new file mode 100644 index 00000000..976fc668 --- /dev/null +++ b/extras/debian/changelog @@ -0,0 +1,29 @@ +librl (0.6.2-ubuntu1~precise6) precise; urgency=medium + + * Precise + * Almost all build-time deps also for librl-dev + * Parallel build + * Export from svn rev 483 + https://svnknoll.informatik.tu-muenchen.de/rl/rl/branches/0.6.2/ + + -- Andre Gaschler Thu, 06 Mar 2014 15:27:42 +0100 + +librl (0.6-234-1ubuntu1~lucid1) lucid; urgency=low + + * Exported sources from svn rev 234 + https://svnknoll.informatik.tu-muenchen.de/rl/rl/branches/0.6/ + * All componentes (shared objects) are now in one package, librl + * Examples are not added anymore, the is now one example included + from upstream + + -- Andre Gaschler Fri, 06 Jul 2012 17:47:24 +0200 + +librl (0.5.1-98~lucid1) lucid; urgency=low + + * Got sources from svn rev 98 + https://svnknoll.informatik.tu-muenchen.de/rl/rl/branches/0.5.1/ + * Got *-examples.tar.gz from http://sourceforge.net/projects/roblib/files/rl/0.5/ + moved into examples/examples + * Added example shell scripts and menu item + + -- Andre Gaschler Thu, 30 Jun 2011 17:12:12 +0200 diff --git a/extras/debian/compat b/extras/debian/compat new file mode 100644 index 00000000..7f8f011e --- /dev/null +++ b/extras/debian/compat @@ -0,0 +1 @@ +7 diff --git a/extras/debian/control b/extras/debian/control new file mode 100644 index 00000000..25dc6a8b --- /dev/null +++ b/extras/debian/control @@ -0,0 +1,58 @@ +Source: librl +Priority: extra +Maintainer: Andre Gaschler +Build-Depends: debhelper (>= 7.0.50~), + cmake (>=2.8.11), quilt, doxygen, graphviz, + libxml2-dev (>=2.7), libboost-all-dev (>=1.46), libsimage-dev, + libsoqt4-dev, libqt4-dev, libqt4-opengl-dev, + libbullet-dev, libcoin60-dev | libcoin80-dev, + libode-sp-dev (>=2:0.11), libcgal-dev (>=4.0), + libeigen3-dev, libsolid-dev (>=3.5.6), + libdc1394-22-dev (>=2.1), libcomedi-dev +Standards-Version: 3.9.1 +Section: libs +Homepage: http://www.roboticslibrary.org/ + + +Package: librl-dev +Section: libdevel +Architecture: any +Depends: librl (= ${binary:Version}), + libxml2-dev (>=2.7), libboost-all-dev (>=1.46), libsimage-dev, + libsoqt4-dev, libqt4-dev, libqt4-opengl-dev, + libbullet-dev, libcoin60-dev | libcoin80-dev, + libode-sp-dev (>=2:0.11), libcgal-dev (>=4.0), + libeigen3-dev, libsolid-dev (>=3.5.6), + libdc1394-22-dev (>=2.1), libcomedi-dev +Description: Development files for the Robotics Library RL + This package includes all development files for + the Robotics Library RL, which is an open source software + library for various robotics tasks. + It covers mathematics, kinematics, dynamics, hardware abstraction, + visualization, collision detection and motion planning. + . + The main author is Markus Rickert at fortiss An-Institut + Technische Universität München. + . + In contrast to other robotics frameworks, it is + a self-contained library with a focus on robot motion planning. + +Package: librl +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Robotics Library RL + The Robotics Library RL is an open source software + library for various robotics tasks. + It covers mathematics, kinematics, dynamics, hardware abstraction, + visualization, collision detection and motion planning. + . + The main author is Markus Rickert at fortiss An-Institut + Technische Universität München. + . + In contrast to other robotics frameworks, it is + a self-contained library with a focus on robot motion planning. + + + + diff --git a/extras/debian/copyright b/extras/debian/copyright new file mode 100644 index 00000000..7e6659dc --- /dev/null +++ b/extras/debian/copyright @@ -0,0 +1,58 @@ +Format: http://dep.debian.net/deps/dep5 +Upstream-Name: rl +Source: http://www.roboticslibrary.org/ + +Files: * +Copyright: 2009 Markus Rickert +License: BSD + Copyright (c) 2009, Markus Rickert + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +Files: debian/* +Copyright: 2011 Andre Gaschler +License: BSD + Copyright (c) 2011, Andre Gaschler + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + diff --git a/extras/debian/librl-dev.install b/extras/debian/librl-dev.install new file mode 100644 index 00000000..78e8b2f8 --- /dev/null +++ b/extras/debian/librl-dev.install @@ -0,0 +1,4 @@ +usr/include/* +usr/lib/*/lib*.so +usr/lib/*/*.a +usr/lib/*/rl/* diff --git a/extras/debian/librl.install b/extras/debian/librl.install new file mode 100644 index 00000000..e59c89a0 --- /dev/null +++ b/extras/debian/librl.install @@ -0,0 +1,3 @@ +usr/bin/* +usr/lib/*/lib*.so.* +usr/share/* diff --git a/extras/debian/rules b/extras/debian/rules new file mode 100644 index 00000000..1555c13f --- /dev/null +++ b/extras/debian/rules @@ -0,0 +1,18 @@ +#!/usr/bin/make -f + +export DH_VERBOSE=1 +export DEB_BUILD_OPTIONS=parallel=4 + +CMAKE_FLAGS = \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_VERBOSE_MAKEFILE=ON + +override_dh_auto_configure: + dh_auto_configure -- $(CMAKE_FLAGS) + +override_dh_auto_test: + dh_auto_test -- ARGS+=-V + +%: + dh $@ --buildsystem=cmake --parallel + diff --git a/extras/w32installer/CMakeLists.txt b/extras/w32installer/CMakeLists.txt new file mode 100644 index 00000000..356c96aa --- /dev/null +++ b/extras/w32installer/CMakeLists.txt @@ -0,0 +1,386 @@ +cmake_minimum_required(VERSION 2.8.11) + +set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE) +project(w32installercomplete) + +include(ExternalProject) + +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install CACHE PATH "FOO install prefix" FORCE) +endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) +set(EXTERNAL_BINARIES_DIR ${CMAKE_CURRENT_BINARY_DIR}/3rdparty) + +option(make_thirdparty "Download and install third party dependencies (needs to be done in the first run)" OFF) +option(make_rl "Compile and install RL (needs to be added in the second run)" OFF) + +if(${make_thirdparty}) +externalproject_add( + boost + URL http://download.fortiss.org/public/rl/boost-1.52.0-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/boost + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/boost/include + DESTINATION . + COMPONENT boost +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/boost/lib + DESTINATION . + COMPONENT boost +# FILES_MATCHING +# PATTERN "*libboost_chrono*" +# PATTERN "*libboost_date_time*" +# PATTERN "*libboost_system*" +# PATTERN "*libboost_thread*" +) +#TODO: install some needed static libs! + +externalproject_add( + bullet + URL http://download.fortiss.org/public/rl/bullet-2.78-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/bullet + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/bullet/include + DESTINATION . + COMPONENT bullet +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/bullet/lib + DESTINATION . + COMPONENT bullet +) + +externalproject_add( + cgal + URL http://download.fortiss.org/public/rl/CGAL-4.1-boost-1.52-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/cgal + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/cgal/bin + DESTINATION . + COMPONENT cgal +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/cgal/include + DESTINATION . + COMPONENT cgal +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/cgal/lib + DESTINATION . + COMPONENT cgal +) + +externalproject_add( + coin + URL http://download.fortiss.org/public/rl/Coin-3.1.3-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/coin + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/coin/bin + DESTINATION . + COMPONENT coin +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/coin/include + DESTINATION . + COMPONENT coin +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/coin/lib + DESTINATION . + COMPONENT coin +) + +externalproject_add( + eigen + URL http://download.fortiss.org/public/rl/eigen-3.1.2.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/eigen + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/eigen/eigen3/Eigen + DESTINATION include + COMPONENT eigen +) + +externalproject_add( + xml2 + URL http://download.fortiss.org/public/rl/libxml2-2.7.8-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/xml2 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/xml2/bin + DESTINATION . + COMPONENT xml2 + PATTERN "*.exe" EXCLUDE +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/xml2/include + DESTINATION . + COMPONENT xml2 +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/xml2/lib + DESTINATION . + COMPONENT xml2 +) + +externalproject_add( + ode + URL http://download.fortiss.org/public/rl/ode-0.11.1-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/ode + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/ode/include + DESTINATION . + COMPONENT ode +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/ode/lib + DESTINATION . + COMPONENT ode +) +install(FILES ${EXTERNAL_BINARIES_DIR}/ode/lib/ReleaseSingleDLL/ode_single.dll + DESTINATION bin + COMPONENT ode +) +install(FILES ${EXTERNAL_BINARIES_DIR}/ode/lib/ReleaseSingleDLL/ode_single.lib + DESTINATION lib + COMPONENT ode +) +#TODO: install some needed dlls to bin + +externalproject_add( + pqp + URL http://download.fortiss.org/public/rl/pqp-1.3-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/pqp + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/pqp/include + DESTINATION . + COMPONENT pqp +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/pqp/lib + DESTINATION . + COMPONENT pqp +) + +externalproject_add( + simage + URL http://download.fortiss.org/public/rl/simage-1.7.0-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/simage + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/simage/bin + DESTINATION . + COMPONENT simage +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/simage/include + DESTINATION . + COMPONENT simage +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/simage/lib + DESTINATION . + COMPONENT simage +) + +externalproject_add( + solid + URL http://download.fortiss.org/public/rl/solid-3.5.6-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/solid + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/solid/bin + DESTINATION . + COMPONENT solid +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/solid/include + DESTINATION . + COMPONENT solid +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/solid/lib + DESTINATION . + COMPONENT solid +) + +externalproject_add( + soqt + URL http://download.fortiss.org/public/rl/SoQt-1.5.0-Coin-3.1.3-Qt-4.7.3-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/soqt + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/soqt/bin + DESTINATION . + COMPONENT soqt +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/soqt/include + DESTINATION . + COMPONENT soqt +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/soqt/lib + DESTINATION . + COMPONENT soqt +) + +externalproject_add( + zlib + URL http://download.fortiss.org/public/rl/zlib-1.2.5-msvc10-x86.zip + SOURCE_DIR ${EXTERNAL_BINARIES_DIR}/zlib + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/zlib/bin + DESTINATION . + COMPONENT zlib +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/zlib/include + DESTINATION . + COMPONENT zlib +) +install(DIRECTORY ${EXTERNAL_BINARIES_DIR}/zlib/lib + DESTINATION . + COMPONENT zlib +) +endif(${make_thirdparty}) + +set(VERSION_MAJOR 0) +set(VERSION_MINOR 6) +set(VERSION_PATCH 2) +set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) + +find_path( + RL_SOURCE_DIR + src/rl/plan/Rrt.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../ + ${CMAKE_CURRENT_SOURCE_DIR}/../../ +) +if(${make_rl}) +set(RL_MAIN_DIR "$ENV{ProgramFiles}/rl-${VERSION}") +set(ENV{HOME} ${RL_MAIN_DIR}) +set(ENV{Boost_DIR} ${RL_MAIN_DIR}) +set(ENV{BOOST_ROOT} ${RL_MAIN_DIR}) +set(USE_STATIC_BOOST TRUE) +set(Boost_USE_STATIC_LIBS TRUE) +message(STATUS "Set ENV{HOME} to $ENV{HOME} in order to link correct dependencies") + + +set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "") +message(STATUS "CPACK_NSIS_EXTRA_INSTALL_COMMANDS ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}") +add_subdirectory(${RL_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/rl) +#FIXME: Hack to overwrite wrong rl-config-version.cmake +# Update: should be ok in CMake 2.8.11 +#add_custom_command(TARGET MyTarget POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E copy +# ${CMAKE_SOURCE_DIR}/rl-config-version.cmake +# ${CMAKE_CURRENT_BINARY_DIR}/rl/rl-config-version.cmake) +#add_custom_target(MyTarget) +#set(CPACK_PACKAGE_EXECUTABLES +# "rlCoachKin" "RLCoachKin Denavit-Hartenberg Kinematics Viewer" +# "rlCoachMdl" "RLCoachMdl Kinematics Viewer" +# "rlPlanDemo" "Robotics Library Path Planning Demo" +# "rlCollisionDemo" "Robotics Library Collision Detection Demo" +#) +message(STATUS "CPACK_NSIS_EXTRA_INSTALL_COMMANDS ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}") +endif(${make_rl}) + +#set(CPACK_PACKAGE_CONTACT "Robotics Library Team ") +#set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The Robotics Library is a self-contained C++ library for robot kinematics, motion planning, and control.") +#set(CPACK_PACKAGE_DISPLAY_NAME "Robotics Library ${VERSION}") +if(${make_rl}) + set(CPACK_PACKAGE_NAME "rl") +else(${make_rl}) + set(CPACK_PACKAGE_NAME "rl-3rdparty-dependencies") +endif(${make_rl}) +set(CPACK_PACKAGE_VENDOR "http://www.roboticslibrary.org/") +set(CPACK_PACKAGE_VERSION ${VERSION}) +set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) +set(CPACK_PACKAGE_INSTALL_DIRECTORY "rl-${VERSION}") +set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") +set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_BINARY_DIR}/LICENSES.txt) +#set(CPACK_NSIS_MENU_LINKS +# "http://www.roboticslibrary.org/" "Robotics Library Website" +# "http://sourceforge.net/projects/roblib/" "Robotics Library Sourceforge Project" +#) + +include(CPack) +if(${make_rl}) +cpack_add_component(libraries + DISPLAY_NAME "Libraries" GROUP "RL" + DESCRIPTION "RL Libraries, all components" + INSTALL_TYPES "dev" +) +cpack_add_component(headers + DISPLAY_NAME "Headers" GROUP "RL" + DESCRIPTION "Headers, needed for developers using RL" + #DEPENDS libraries + INSTALL_TYPES "dev" +) +cpack_add_component(demos + DISPLAY_NAME "Demos" GROUP "RL" + DESCRIPTION "Demo programs and tools, including the robot simulator Coach" + #DEPENDS libraries + INSTALL_TYPES "dev" +) +cpack_add_component(examples + DISPLAY_NAME "Examples" GROUP "RL" + DESCRIPTION "Example robot kinematics and geometry files" + #DEPENDS LIBRARIES + INSTALL_TYPES "dev" +) +cpack_add_component(extras + DISPLAY_NAME "VRML Viewer" GROUP "RL" + DESCRIPTION "Viewer for VRML and Open Inventor files" + #DEPENDS LIBRARIES + INSTALL_TYPES "dev" +) +cpack_add_component_group("RL" DISPLAY_NAME "Robotics Library" EXPANDED) +endif(${make_rl}) +if(${make_thirdparty}) +cpack_add_component(boost DISPLAY_NAME "Boost" GROUP "THIRDPARTY" DESCRIPTION "Boost C++ Libraries 1.52 msvc10-x86" INSTALL_TYPES "dev") +cpack_add_component(bullet DISPLAY_NAME "Bullet Physics Library" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(cgal DISPLAY_NAME "CGAL" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(coin DISPLAY_NAME "COIN" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(eigen DISPLAY_NAME "Eigen" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(xml2 DISPLAY_NAME "LibXML2" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(ode DISPLAY_NAME "ODE" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(pqp DISPLAY_NAME "PQP" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(simage DISPLAY_NAME "Coin 3D simage" GROUP "THIRDPARTY" DESCRIPTION "Coin 3D simage https://bitbucket.org/Coin3D/simage" INSTALL_TYPES "dev") +cpack_add_component(solid DISPLAY_NAME "SOLID" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(soqt DISPLAY_NAME "SoQT" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component(zlib DISPLAY_NAME "ZLib" GROUP "THIRDPARTY" INSTALL_TYPES "dev") +cpack_add_component_group("THIRDPARTY" DISPLAY_NAME "Third Party Dependency Libraries" EXPANDED) + +cpack_add_install_type("dev" DISPLAY_NAME "Libraries for development (recommended)") + +endif(${make_thirdparty}) + +file(GLOB LICENSE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/../3rdpartylicenses/*.txt +) +message(STATUS "License files: ${LICENSE_FILES}") +message(STATUS "RL_SOURCE_DIR: ${RL_SOURCE_DIR}") +file(READ ${RL_SOURCE_DIR}/LICENSE RL_LIC_TEXT) +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/LICENSES.txt "All licenses:\n\n\nRobotics Library License:\n\n${RL_LIC_TEXT}\n\n\n") +foreach(LIC ${LICENSE_FILES}) + file(READ ${LIC} LIC_TEXT) + get_filename_component(LIC_NAME ${LIC} NAME) + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/LICENSES.txt "Licence for ${LIC_NAME}:\n\n${LIC_TEXT}\n\n") +endforeach(LIC ${LICENSE_FILES}) diff --git a/extras/w32installer/README.txt b/extras/w32installer/README.txt new file mode 100644 index 00000000..12fe22cd --- /dev/null +++ b/extras/w32installer/README.txt @@ -0,0 +1,48 @@ + +All-in-one Windows installer for the Robotics Library + +Please find (or update!) current installation instructions in + http://www.roboticslibrary.org/install-windows.html + http://sourceforge.net/apps/mediawiki/roblib/index.php?title=Windows_Installer + http://www6.in.tum.de/~rickert/rl/install-windows.html + + +* How to generate the all-in-one Windows installer (for maintainers) + +0. Correct all information in extras/w32installer/CMakeLists.txt, +Especially, make sure all the version numbers are accurate, +they are spread over +[- rl\extras\w32installer\rl-config-version.cmake] +- rl\extras\w32installer\CMakeLists.txt +- rl\CMakeLists.txt +1. Start from a rather default Windows, uninstall previous RL, +remove PATH variables. Rename libraries that may be falsely found and linked, +like iconv. +2. (First run: Install Dependencies) +CMake into an empty directory with the generator VS2010 +- enable option make_thirdparty, *disable* make_rl in the first run +3. CMake Generate, MSBuild ALL_BUILD and PACKAGE in VS2010 (~40 min) + install the generated exe to get dependecies installed +at exactly the right place +4. Actually set PATH C:\Program Files (x86)\rl-0.6.1\bin (adapt!) +5. (Second run: Compile and package RL) +Now enable make_rl in CMake, set +CMAKE_INSTALL_PREFIX = C:/Program Files (x86)/rl-0.6.1 (adapt!) +configure and verify advanced options +that all include and libraries paths are *exactly* those that are written +by the depedency installer +6. Verify that all PARENT_SCOPE patches are inside the top CMakeLists.txt (as in rev 474) +6.1. CMake Configure and Generate +6.2. Verify that CPACK_NSIS_EXTRA_INSTALL_COMMANDS is printed correctly +((7. Set C:/Program Files (x86)/rl-?.?.? "Full Control" for Users)) +8. In VS2010, reload, choose build type "Release", +build project PACKAGE (~90 min) +9. (You can inspect the exe installer with 7zip and make sure it looks ok) +10. Test install and verify that a sample program +correctly cmakes, links, and runs (important), even check +with Dependency walker that the exact version is linked +11. Distribute and announce + + + + diff --git a/extras/wrlview/CMakeLists.txt b/extras/wrlview/CMakeLists.txt new file mode 100644 index 00000000..96495d51 --- /dev/null +++ b/extras/wrlview/CMakeLists.txt @@ -0,0 +1,84 @@ +project(wrlview) + +find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL) +set(QT_USE_QTMAIN TRUE) +include(${QT_USE_FILE}) + +find_package(Coin) +find_package(OpenGL) +find_package(SoQt) + +if(COIN_FOUND AND OPENGL_FOUND AND QT_FOUND AND SOQT_FOUND) + qt4_wrap_cpp( + MOC_SRCS + MainWindow.h + ) + + add_executable( + wrlview + WIN32 + ${MOC_SRCS} + MainWindow.h + MainWindow.cpp + wrlview.cpp + wrlview.rc + ) + + target_compile_definitions( + wrlview + PRIVATE + ${COIN_DEFINITIONS} + ${QT_DEFINITIONS} + ${SOQT_DEFINITIONS} + ) + + target_include_directories( + wrlview + PRIVATE + ${COIN_INCLUDE_DIRS} + ${OPENGL_INCLUDE_DIR} + ${QT_INCLUDES} + ${SOQT_INCLUDE_DIRS} + ) + + target_link_libraries( + wrlview + ${COIN_LIBRARIES} + ${OPENGL_LIBRARIES} + ${QT_LIBRARIES} + ${SOQT_LIBRARIES} + ) + + set_target_properties( + wrlview + PROPERTIES + VERSION 0.1.9 + ) + + install( + TARGETS + wrlview + COMPONENT extras + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + + if(UNIX) + install(FILES wrlview.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT extras) + install(FILES wrlview.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps COMPONENT extras) + endif(UNIX) + + set( + CPACK_NSIS_EXTRA_INSTALL_COMMANDS + ${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} + "CreateShortCut \\\\ + \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\wrlview.lnk\\\" \\\\ + \\\"$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\wrlview.exe\\\" \\\\ + \\\"\\\" \\\\ + \\\"\\\" \\\"\\\" \\\"\\\" \\\"\\\" \\\\ + \\\"Viewer for VRML and Open Inventor files\\\"" + PARENT_SCOPE + ) + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS ${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} "Delete \\\"$SMPROGRAMS\\\\$START_MENU\\\\wrlview.lnk\\\"" PARENT_SCOPE) +endif(COIN_FOUND AND OPENGL_FOUND AND QT_FOUND AND SOQT_FOUND) diff --git a/extras/wrlview/MainWindow.cpp b/extras/wrlview/MainWindow.cpp new file mode 100644 index 00000000..99889af8 --- /dev/null +++ b/extras/wrlview/MainWindow.cpp @@ -0,0 +1,639 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MainWindow.h" + +MainWindow::MainWindow(QWidget* parent, Qt::WFlags f) : + QMainWindow(parent, f), + displayMenu(NULL), + fileMenu(NULL), + filename(), + offscreenRenderer(NULL), + offscreenRoot(NULL), + root(NULL), + viewer(NULL), + widget(new QWidget(this)) +{ + SoQt::init(this); + SoDB::init(); + + QGLFormat format; + format.setAlpha(true); + format.setSampleBuffers(true); + QGLFormat::setDefaultFormat(format); + + this->setAcceptDrops(true); + + this->viewer = new SoQtExaminerViewer(this->widget); + this->viewer->setDecoration(false); + this->viewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); + + this->offscreenRenderer = new SoOffscreenRenderer(this->viewer->getViewportRegion()); + + this->setCentralWidget(this->widget); + this->setFocusProxy(this->viewer->getWidget()); + + this->init(); + + this->resize(800, 600); + + this->offscreenRoot = new SoSeparator(); + this->offscreenRoot->ref(); + + if (QCoreApplication::arguments().size() > 1) + { + this->filename = QCoreApplication::arguments()[1]; + } + + if (!this->filename.isEmpty()) + { + this->load(this->filename); + } + + this->viewer->viewAll(); +} + +MainWindow::~MainWindow() +{ + if (NULL != this->root) + { + this->root->unref(); + } + + if (NULL != this->offscreenRoot) + { + this->offscreenRoot->unref(); + } + + if (NULL != this->offscreenRenderer) + { + delete this->offscreenRenderer; + } +} + +void +MainWindow::dragEnterEvent(QDragEnterEvent* event) +{ + event->acceptProposedAction(); +} + +void +MainWindow::dropEvent(QDropEvent* event) +{ + if (event->mimeData()->hasUrls()) + { + if (event->mimeData()->urls().size() > 0) + { + QString filename = event->mimeData()->urls()[0].toLocalFile(); + this->load(filename); + event->acceptProposedAction(); + } + } +} + +void +MainWindow::init() +{ + this->fileMenu = this->menuBar()->addMenu("File"); + + QAction* openAction = new QAction("Open...", this); + openAction->setShortcut(QKeySequence::Open); + QObject::connect(openAction, SIGNAL(triggered()), this, SLOT(open())); + this->fileMenu->addAction(openAction); + + this->fileMenu->addSeparator(); + + QAction* reloadAction = new QAction("Reload", this); + reloadAction->setShortcut(QKeySequence(QKeySequence::Refresh)); + QObject::connect(reloadAction, SIGNAL(triggered()), this, SLOT(reload())); + this->addAction(reloadAction); + this->fileMenu->addAction(reloadAction); + + this->fileMenu->addSeparator(); + + QAction* saveImageWithoutAlphaAction = new QAction("Save Image w/o Alpha", this); + saveImageWithoutAlphaAction->setShortcut(QKeySequence("Return")); + QObject::connect(saveImageWithoutAlphaAction, SIGNAL(triggered()), this, SLOT(saveImageWithoutAlpha())); + this->addAction(saveImageWithoutAlphaAction); + this->fileMenu->addAction(saveImageWithoutAlphaAction); + + QAction* saveImageWithAlphaAction = new QAction("Save Image w/ Alpha", this); + saveImageWithAlphaAction->setShortcut(QKeySequence("Shift+Return")); + QObject::connect(saveImageWithAlphaAction, SIGNAL(triggered()), this, SLOT(saveImageWithAlpha())); + this->addAction(saveImageWithAlphaAction); + this->fileMenu->addAction(saveImageWithAlphaAction); + + QAction* saveImageOffscreenAction = new QAction("Save Image Offscreen", this); + saveImageOffscreenAction->setShortcut(QKeySequence("Backspace")); + QObject::connect(saveImageOffscreenAction, SIGNAL(triggered()), this, SLOT(saveImageOffscreen())); + this->addAction(saveImageOffscreenAction); + this->fileMenu->addAction(saveImageOffscreenAction); + + this->fileMenu->addSeparator(); + + QAction* exitAction = new QAction("Exit", this); + QObject::connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + this->fileMenu->addAction(exitAction); + + this->viewMenu = this->menuBar()->addMenu("View"); + + QActionGroup* viewActionGroup = new QActionGroup(this); + QObject::connect(viewActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(selectView(QAction*))); + + QAction* viewTopAction = new QAction("Top", this); + viewTopAction->setData(VIEW_TOP); + viewActionGroup->addAction(viewTopAction); + this->viewMenu->addAction(viewTopAction); + + QAction* viewBottomAction = new QAction("Bottom", this); + viewBottomAction->setData(VIEW_BOTTOM); + viewActionGroup->addAction(viewBottomAction); + this->viewMenu->addAction(viewBottomAction); + + QAction* viewFrontAction = new QAction("Front", this); + viewFrontAction->setData(VIEW_FRONT); + viewActionGroup->addAction(viewFrontAction); + this->viewMenu->addAction(viewFrontAction); + + QAction* viewBackAction = new QAction("Back", this); + viewBackAction->setData(VIEW_BACK); + viewActionGroup->addAction(viewBackAction); + this->viewMenu->addAction(viewBackAction); + + QAction* viewLeftAction = new QAction("Left", this); + viewLeftAction->setData(VIEW_LEFT); + viewActionGroup->addAction(viewLeftAction); + this->viewMenu->addAction(viewLeftAction); + + QAction* viewRightAction = new QAction("Right", this); + viewRightAction->setData(VIEW_RIGHT); + viewActionGroup->addAction(viewRightAction); + this->viewMenu->addAction(viewRightAction); + + QAction* viewTopBackLeftAction = new QAction("Top Back Left", this); + viewTopBackLeftAction->setData(VIEW_TOP_BACK_LEFT); + viewActionGroup->addAction(viewTopBackLeftAction); + this->viewMenu->addAction(viewTopBackLeftAction); + + QAction* viewTopBackRightAction = new QAction("Top Back Right", this); + viewTopBackRightAction->setData(VIEW_TOP_BACK_RIGHT); + viewActionGroup->addAction(viewTopBackRightAction); + this->viewMenu->addAction(viewTopBackRightAction); + + QAction* viewTopFrontLeftAction = new QAction("Top Front Left", this); + viewTopFrontLeftAction->setData(VIEW_TOP_FRONT_LEFT); + viewActionGroup->addAction(viewTopFrontLeftAction); + this->viewMenu->addAction(viewTopFrontLeftAction); + + QAction* viewTopFrontRightAction = new QAction("Top Front Right", this); + viewTopFrontRightAction->setData(VIEW_TOP_FRONT_RIGHT); + viewActionGroup->addAction(viewTopFrontRightAction); + this->viewMenu->addAction(viewTopFrontRightAction); + + this->displayMenu = this->menuBar()->addMenu("Display"); + + QAction* toggleAxisCrossAction = new QAction("Axis Cross", this); + toggleAxisCrossAction->setCheckable(true); + toggleAxisCrossAction->setShortcut(QKeySequence("Space")); + QObject::connect(toggleAxisCrossAction, SIGNAL(triggered()), this, SLOT(toggleAxisCross())); + this->addAction(toggleAxisCrossAction); + this->displayMenu->addAction(toggleAxisCrossAction); + + this->displayMenu->addSeparator(); + + QAction* toggleFullScreenAction = new QAction("Full Screen", this); + toggleFullScreenAction->setShortcut(QKeySequence("Alt+Return")); + QObject::connect(toggleFullScreenAction, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); + this->displayMenu->addAction(toggleFullScreenAction); + this->addAction(toggleFullScreenAction); + + this->displayMenu->addSeparator(); + + QActionGroup* cameraActionGroup = new QActionGroup(this); + cameraActionGroup->setExclusive(true); + QObject::connect(cameraActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(selectCamera(QAction*))); + + QAction* cameraOrthogonalAction = new QAction("Orthogonal Camera", this); + cameraOrthogonalAction->setData(CAMERA_ORTHOGONAL); + cameraActionGroup->addAction(cameraOrthogonalAction); + this->displayMenu->addAction(cameraOrthogonalAction); + + QAction* cameraPerspectiveAction = new QAction("Perspective Camera", this); + cameraPerspectiveAction->setData(CAMERA_PERSPECTIVE); + cameraActionGroup->addAction(cameraPerspectiveAction); + this->displayMenu->addAction(cameraPerspectiveAction); + + this->displayMenu->addSeparator(); + + QActionGroup* backgroundActionGroup = new QActionGroup(this); + backgroundActionGroup->setExclusive(true); + QObject::connect(backgroundActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(selectBackground(QAction*))); + + QAction* backgroundBlackAction = new QAction("Black Background", this); + backgroundBlackAction->setData(BACKGROUND_BLACK); + backgroundActionGroup->addAction(backgroundBlackAction); + this->displayMenu->addAction(backgroundBlackAction); + + QAction* backgroundWhiteAction = new QAction("White Background", this); + backgroundWhiteAction->setData(BACKGROUND_WHITE); + backgroundActionGroup->addAction(backgroundWhiteAction); + this->displayMenu->addAction(backgroundWhiteAction); + + this->displayMenu->addSeparator(); + + QActionGroup* sizeActionGroup = new QActionGroup(this); + sizeActionGroup->setExclusive(true); + QObject::connect(sizeActionGroup, SIGNAL(triggered(QAction*)), this, SLOT(selectSize(QAction*))); + + QAction* size640x480Action = new QAction("640x480", this); + size640x480Action->setData(SIZE_640x480); + sizeActionGroup->addAction(size640x480Action); + this->displayMenu->addAction(size640x480Action); + + QAction* size800x600Action = new QAction("800x600", this); + size800x600Action->setData(SIZE_800x600); + sizeActionGroup->addAction(size800x600Action); + this->displayMenu->addAction(size800x600Action); + + QAction* size1024x768Action = new QAction("1024x768", this); + size1024x768Action->setData(SIZE_1024x768); + sizeActionGroup->addAction(size1024x768Action); + this->displayMenu->addAction(size1024x768Action); + + QAction* size1024x1024Action = new QAction("1024x1024", this); + size1024x1024Action->setData(SIZE_1024x1024); + sizeActionGroup->addAction(size1024x1024Action); + this->displayMenu->addAction(size1024x1024Action); + + QAction* size1280x720Action = new QAction("1280x720", this); + size1280x720Action->setData(SIZE_1280x720); + sizeActionGroup->addAction(size1280x720Action); + this->displayMenu->addAction(size1280x720Action); + + QAction* size1280x960Action = new QAction("1280x960", this); + size1280x960Action->setData(SIZE_1280x960); + sizeActionGroup->addAction(size1280x960Action); + this->displayMenu->addAction(size1280x960Action); + + QAction* size1200x1200Action = new QAction("1200x1200", this); + size1200x1200Action->setData(SIZE_1200x1200); + sizeActionGroup->addAction(size1200x1200Action); + this->displayMenu->addAction(size1200x1200Action); + + QAction* size1600x1200Action = new QAction("1600x1200", this); + size1600x1200Action->setData(SIZE_1600x1200); + sizeActionGroup->addAction(size1600x1200Action); + this->displayMenu->addAction(size1600x1200Action); + + QAction* size1920x1080Action = new QAction("1920x1080", this); + size1920x1080Action->setData(SIZE_1920x1080); + sizeActionGroup->addAction(size1920x1080Action); + this->displayMenu->addAction(size1920x1080Action); + + QAction* size2400x2400Action = new QAction("2400x2400", this); + size2400x2400Action->setData(SIZE_2400x2400); + sizeActionGroup->addAction(size2400x2400Action); + this->displayMenu->addAction(size2400x2400Action); +} + +void +MainWindow::load(const QString filename) +{ + if (!(filename.endsWith(".iv") || filename.endsWith(".wrl") || filename.endsWith(".wrl.gz") || filename.endsWith(".wrz"))) + { + QMessageBox::critical(this, "Error", "File format not supported."); + return; + } + + SoInput input; + + if (!input.openFile(filename.toStdString().c_str(), true)) + { + QMessageBox::critical(this, "Error", "File not found."); + return; + } + + if (NULL != this->root) + { + this->root->unref(); + this->root = NULL; + this->viewer->setSceneGraph(NULL); + this->filename.clear(); + this->setWindowTitle("wrlview"); + } + + this->root = SoDB::readAll(&input); + + input.closeFile(); + + if (NULL == this->root) + { + QMessageBox::critical(this, "Error", "Error reading file."); + return; + } + + this->root->ref(); + this->viewer->setSceneGraph(this->root); + this->filename = filename; + this->setWindowTitle(filename + " - wrlview"); +} + +void +MainWindow::open() +{ + QString filename = QFileDialog::getOpenFileName(this, "", this->filename, "All Formats (*.iv *.wrl *.wrl.gz *.wrz)"); + + if (!filename.isEmpty()) + { + this->load(filename); + } + + this->viewer->viewAll(); +} + +void +MainWindow::reload() +{ + if (!this->filename.isEmpty()) + { + this->load(this->filename); + } +} + +void +MainWindow::saveImage(bool withAlpha) +{ + QString filename = "wrlview-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".png"; + + glReadBuffer(GL_FRONT); + QImage image = static_cast< QGLWidget* >(this->viewer->getGLWidget())->grabFrameBuffer(withAlpha); + + QString format = filename.right(filename.length() - filename.lastIndexOf('.') - 1).toUpper(); + + if (("JFIF" == format) || ("JPE" == format) || ("JPG" == format)) + { + format = "JPEG"; + } + + if (!image.save(filename, format.toStdString().c_str())) + { + QMessageBox::critical(this, "Error", "Error writing " + filename + "."); + } +} + +void +MainWindow::saveImageOffscreen() +{ + QString filename = "wrlview-" + QDateTime::currentDateTime().toString("yyyyMMdd-HHmmsszzz") + ".png"; + + this->offscreenRoot->removeAllChildren(); + + if (-1 == this->root->findChild(this->viewer->getCamera())) + { + this->offscreenRoot->addChild(this->viewer->getCamera()); + } + + if (this->viewer->isHeadlight()) + { + this->offscreenRoot->addChild(this->viewer->getHeadlight()); + } + + this->offscreenRoot->addChild(this->root); + + this->offscreenRenderer->setBackgroundColor(this->viewer->getBackgroundColor()); + + SbViewportRegion viewportRegion(this->viewer->getViewportRegion()); + viewportRegion.setWindowSize(viewportRegion.getWindowSize()[0] * 300.0f / 72.0f, viewportRegion.getWindowSize()[1] * 300.0f / 72.0f); + this->offscreenRenderer->setViewportRegion(viewportRegion); + + this->offscreenRenderer->getGLRenderAction()->setNumPasses(8); + + if (!this->offscreenRenderer->render(this->offscreenRoot)) + { + QMessageBox::critical(this, "Error", "Error rendering " + filename + "."); + return; + } + + if (!this->offscreenRenderer->isWriteSupported("png")) + { + QMessageBox::critical(this, "Error", "Filetype PNG not supported."); + return; + } + + if (!this->offscreenRenderer->writeToFile(filename.toStdString().c_str(), "png")) + { + QMessageBox::critical(this, "Error", "Error writing " + filename + "."); + return; + } +} + +void +MainWindow::saveImageWithAlpha() +{ + this->saveImage(true); +} + +void +MainWindow::saveImageWithoutAlpha() +{ + this->saveImage(false); +} + +void +MainWindow::selectBackground(QAction* action) +{ + switch (action->data().toInt()) + { + case BACKGROUND_BLACK: + this->viewer->setBackgroundColor(SbColor(0, 0, 0)); + break; + case BACKGROUND_WHITE: + this->viewer->setBackgroundColor(SbColor(255, 255, 255)); + break; + default: + break; + } +} + +void +MainWindow::selectCamera(QAction* action) +{ + switch (action->data().toInt()) + { + case CAMERA_ORTHOGONAL: + this->viewer->setCameraType(SoOrthographicCamera::getClassTypeId()); + break; + case CAMERA_PERSPECTIVE: + this->viewer->setCameraType(SoPerspectiveCamera::getClassTypeId()); + break; + default: + break; + } + + this->viewer->getCamera()->setToDefaults(); + this->viewer->viewAll(); +} + +void +MainWindow::selectSize(QAction* action) +{ + switch (action->data().toInt()) + { + case SIZE_640x480: + this->widget->setFixedSize(640, 480); + break; + case SIZE_800x600: + this->widget->setFixedSize(800, 600); + break; + case SIZE_1024x768: + this->widget->setFixedSize(1024, 768); + break; + case SIZE_1024x1024: + this->widget->setFixedSize(1024, 1024); + break; + case SIZE_1280x720: + this->widget->setFixedSize(1280, 720); + break; + case SIZE_1280x960: + this->widget->setFixedSize(1280, 960); + break; + case SIZE_1200x1200: + this->widget->setFixedSize(1200, 1200); + break; + case SIZE_1600x1200: + this->widget->setFixedSize(1600, 1200); + break; + case SIZE_1920x1080: + this->widget->setFixedSize(1920, 1080); + break; + case SIZE_2400x2400: + this->widget->setFixedSize(2400, 2400); + break; + default: + break; + } + + this->setFixedSize(this->widget->sizeHint().width(), this->widget->sizeHint().height()); + this->widget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + this->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); +} + +void +MainWindow::selectView(QAction* action) +{ + this->viewer->getCamera()->setToDefaults(); + + SbVec3f position; + SbVec3f upvector(0, 0, 1); + + switch (action->data().toInt()) + { + case VIEW_BACK: + position.setValue(0, -1, 0); + break; + case VIEW_BOTTOM: + position.setValue(0, 0, -1); + upvector.setValue(0, -1, 0); + break; + case VIEW_FRONT: + position.setValue(0, 1, 0); + break; + case VIEW_LEFT: + position.setValue(-1, 0, 0); + break; + case VIEW_RIGHT: + position.setValue(1, 0, 0); + break; + case VIEW_TOP: + position.setValue(0, 0, 1); + upvector.setValue(0, 1, 0); + break; + case VIEW_TOP_BACK_LEFT: + position.setValue(-1, -1, 1); + break; + case VIEW_TOP_BACK_RIGHT: + position.setValue(1, -1, 1); + break; + case VIEW_TOP_FRONT_LEFT: + position.setValue(-1, 1, 1); + break; + case VIEW_TOP_FRONT_RIGHT: + position.setValue(1, 1, 1); + break; + default: + break; + } + + this->viewer->getCamera()->position.setValue(position); + this->viewer->getCamera()->pointAt(SbVec3f(0, 0, 0), upvector); + this->viewer->getCamera()->scaleHeight(1); + this->viewer->viewAll(); +} + +void +MainWindow::toggleAxisCross() +{ + if (this->viewer->isFeedbackVisible()) + { + this->viewer->setFeedbackVisibility(false); + } + else + { + this->viewer->setFeedbackVisibility(true); + } +} + +void +MainWindow::toggleFullScreen() +{ + if (this->isFullScreen()) + { + this->showNormal(); + this->menuBar()->show(); + } + else + { + this->showFullScreen(); + this->menuBar()->hide(); + } +} diff --git a/extras/wrlview/MainWindow.h b/extras/wrlview/MainWindow.h new file mode 100644 index 00000000..c08f87d8 --- /dev/null +++ b/extras/wrlview/MainWindow.h @@ -0,0 +1,142 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _MAINWINDOW_H_ +#define _MAINWINDOW_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget* parent = NULL, Qt::WFlags f = 0); + + virtual ~MainWindow(); + +protected: + void dragEnterEvent(QDragEnterEvent* event); + + void dropEvent(QDropEvent* event); + +private: + enum BACKGROUND + { + BACKGROUND_BLACK, + BACKGROUND_WHITE + }; + + enum CAMERA + { + CAMERA_ORTHOGONAL, + CAMERA_PERSPECTIVE + }; + + enum SIZE + { + SIZE_640x480, + SIZE_800x600, + SIZE_1024x768, + SIZE_1024x1024, + SIZE_1280x720, + SIZE_1280x960, + SIZE_1200x1200, + SIZE_1600x1200, + SIZE_1920x1080, + SIZE_2400x2400 + }; + + enum VIEW + { + VIEW_BACK, + VIEW_BOTTOM, + VIEW_FRONT, + VIEW_LEFT, + VIEW_RIGHT, + VIEW_TOP, + VIEW_TOP_BACK_LEFT, + VIEW_TOP_BACK_RIGHT, + VIEW_TOP_FRONT_LEFT, + VIEW_TOP_FRONT_RIGHT + }; + + void init(); + + void load(const QString filename); + + void saveImage(bool withAlpha); + + QMenu* displayMenu; + + QMenu* fileMenu; + + QString filename; + + SoOffscreenRenderer* offscreenRenderer; + + SoSeparator* offscreenRoot; + + SoSeparator* root; + + SoQtExaminerViewer* viewer; + + QMenu* viewMenu; + + QWidget* widget; + +private slots: + void open(); + + void reload(); + + void saveImageOffscreen(); + + void saveImageWithAlpha(); + + void saveImageWithoutAlpha(); + + void selectBackground(QAction* action); + + void selectCamera(QAction* action); + + void selectSize(QAction* action); + + void selectView(QAction* action); + + void toggleAxisCross(); + + void toggleFullScreen(); +}; + +#endif // _MAINWINDOW_H_ diff --git a/extras/wrlview/wrlview.cpp b/extras/wrlview/wrlview.cpp new file mode 100644 index 00000000..6db4cc07 --- /dev/null +++ b/extras/wrlview/wrlview.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "MainWindow.h" + +int +main(int argc, char** argv) +{ + QApplication application(argc, argv); + + QObject::connect(&application, SIGNAL(lastWindowClosed()), &application, SLOT(quit())); + + MainWindow mainWindow; + mainWindow.show(); + + return application.exec(); +} diff --git a/extras/wrlview/wrlview.desktop b/extras/wrlview/wrlview.desktop new file mode 100644 index 00000000..b6422b31 --- /dev/null +++ b/extras/wrlview/wrlview.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Categories=Graphics;3DGraphics; +Comment=Viewer for VRML and Open Inventor files +Exec=wrlview %f +Icon=wrlview +MimeType=graphics/x-inventor;model/vrml;object/x-inventor;x-world/x-vrml; +Name=wrlview +Type=Application diff --git a/extras/wrlview/wrlview.ico b/extras/wrlview/wrlview.ico new file mode 100644 index 0000000000000000000000000000000000000000..9aa5cbc21a08e987835fb26a83d87c582b85f3bc GIT binary patch literal 3247 zcmeHJX;f2J9=|UM32PDsod5~M7KzFXMnH@jAP9_7qu_=S0mBkSr4HbfH8nvLlnI*< z>w*nPtyI9Gv^^*;h?0O*z)?gN6;04lWC^ImF+%Ts&YbCop89Rhe3+a=-uwN3%l+Sf z?s*RYFhBuvIe=F-_=*5P5&%FT_<)5N09Hf*xZDqT3UZrB0I=B~@Og+uCIB!PA8-T2 z=41fq^bhzT#5W;EACw;kwd*JV91LE)+{)a}9G0yDSNN}mS2_AKMcV7$k*xp_A_Dz= z*Qb;W_10J0`_fHrA1W274n^9%;KddmZ7H0sP4Kx>tJQG5AbD*S)6ufuHOESuiS_xO zOOSHql`csN8aZCl)TX}%&Yoc)(~KFJYG^tZ)elV@*IGJ2)4ZH4Bq)uwgWzS38iKZ} zSj1H2n8CP`H4C=GxZ1hSc`(koNrwa{d16>|pF_3Vf)0w4npb?FkRzDYpLCvHWT!b+3SKvQq1-cMH4jO>wC^y0fsITQUF5 zrO+fo>V|qOTG$%aCgta8iU06+A9(lb%XY5i{I;$h)%)*^y_e?+W~Nq{76dv_$<59* z3L&OAyAf;}C}Rt@rrtLz2zT%#{J^HUV4;QC`@x@Dh<#79w;#Lcp1J3iZ7NScvw1JE zf>MzHUW0|yQioDCc9(dUCr^{xQG#i~TJQqf!4!B2az7>twV;ptt;7g*?fKOt)0w)m zTyQOiucOi9n*D~swLHGgif+^F*9Lsc_&N(ZvmiSR+nYI7z!3z`qAeznlw)efI7wF> zqcyK|T@PpVd$WWO5x~V~xsmWT8v-?&Wo*V!XRB2smmYB2;$%mMqF4N)dET&s<+jHA zC(~oL&mWwq_D|a;34U>U*Qbv2TgM3BP6?k^7B}+SRSzZ}IudiIE)Ej>Su~csS^Jno z|B}xHZi;M{;IO_1YxZymk;iEfioyBUE|C5E-L! z^W88-XG$}X>#6pm%FnqwJRvGF^>ll2i6XlWlt=S#kQgVl%8R9o8ea=FpE*^zG(l@opV-lwoSn8za<2RXDy7O&b$BfXV!$Zg;N%fD%my@9u1HF zur>cwu>~(=d9*@TLTq?yBOCFPZ;+bSD3ZZo3UTxR@nw72y^DORP|JO55@Ia?7>N$Q zE`b*70{I<_jvLijc;9rcVl(EgwQI1-(RozPt}h7vNXPK04j6dH{mEVi2(nSfD-I5I z)=!hO;SW|BjUA4%ND|Mw>+7XADGr4JHLW1lla!ZmOt%v3Nhx11wNKwxWhTsY(5$QYkPi7MS(T$I3Ub zF)!|BQj(!7!#5Rncg5iC>E7Xc<)cRuFY(oZ0I7+ zo<8TkicH=k;p_`$<_Cd@Gr!*me2c=@AKpkY*IA})tOhWAio(4nb-pOD zKHAvgM-Ur@NnM5_3Ley^=UgYE%7mfl8q)Me8e2M$YshUf2G2>dlezs7CD-Tr*xI1A zSQ?e38Cw0UHi(R3;-2X_$0_J$LeH_sZyF6nt5C3~#MqLBf{%Ml#?+$VRra#;__mz$ ze7c=b@H&kuj*fy`v_ZS5DEO70vk0Gs8LXJ2$~v{G57%&VeJ=2jE684!7>PFeHE&XP z5+!?mVQeu$Yo(7Fii*(cZ(tAy1y#Xq1tMyvtt@dFavf8vnE2#=(sL-dB*EB%k7*}M zmMFj_8kN)4OKJV%amDE(r3Fq$4LreV(FNT7AY>P!<4-H? z5#1*lc#7y`Q8(`H4Dqx@^eJU7Y9&k}sYUcgQFlBF?+)=~A^KZoE^?PhB;$zQCbH#D z`h)&h7eC};ZkOO2D6g`#N9ujb477oWAKm_nLR><~`99Nt;f(SzDqo2jz|eKi-J7`E zctAL_N6~y_wPT}b^{JRsc<+y@ixtRMsXU3wve3E6 jUQnC|i=w$KpI<%Q&~44>N0{tn*0L^Afg{5I{txXJ73`}* literal 0 HcmV?d00001 diff --git a/extras/wrlview/wrlview.rc b/extras/wrlview/wrlview.rc new file mode 100644 index 00000000..cac2854f --- /dev/null +++ b/extras/wrlview/wrlview.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "wrlview.ico" diff --git a/extras/wrlview/wrlview.svg b/extras/wrlview/wrlview.svg new file mode 100644 index 00000000..b7c5c6c8 --- /dev/null +++ b/extras/wrlview/wrlview.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/rl-config.cmake.in b/rl-config.cmake.in new file mode 100644 index 00000000..7e0c044d --- /dev/null +++ b/rl-config.cmake.in @@ -0,0 +1,34 @@ +set(RL_VERSION "@VERSION@") +set(RL_VERSION_MAJOR "@VERSION_MAJOR@") +set(RL_VERSION_MINOR "@VERSION_MINOR@") +set(RL_VERSION_PATCH "@VERSION_PATCH@") + +set(RL_HAL_FOUND "@RL_HAL_FOUND@") +set(RL_KIN_FOUND "@RL_KIN_FOUND@") +set(RL_MATH_FOUND "@RL_MATH_FOUND@") +set(RL_MDL_FOUND "@RL_MDL_FOUND@") +set(RL_PLAN_FOUND "@RL_PLAN_FOUND@") +set(RL_SG_FOUND "@RL_SG_FOUND@") +set(RL_UTIL_FOUND "@RL_UTIL_FOUND@") +set(RL_XML_FOUND "@RL_XML_FOUND@") + +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/rl-export.cmake") + +set(RL_DEFINITIONS "@RL_DEFINITIONS@") +set(RL_INCLUDE_DIRS "@RL_INCLUDE_DIRS@") +set(RL_LIBRARY_DIRS "@RL_LIBRARY_DIRS@") +set(RL_LIBRARIES "@RL_LIBRARIES@") + +foreach(TARGET @TARGETS@) + get_target_property(INTERFACE_INCLUDE_DIRECTORIES ${TARGET} INTERFACE_INCLUDE_DIRECTORIES) + if(INTERFACE_INCLUDE_DIRECTORIES) + list(APPEND INTERFACE_INCLUDE_DIRECTORIES "@INTERFACE_INCLUDE_DIRECTORIES@") + else(INTERFACE_INCLUDE_DIRECTORIES) + set(INTERFACE_INCLUDE_DIRECTORIES "@INTERFACE_INCLUDE_DIRECTORIES@") + endif(INTERFACE_INCLUDE_DIRECTORIES) + set_target_properties(${TARGET} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${INTERFACE_INCLUDE_DIRECTORIES}") +endforeach(TARGET) + +check_required_components(RL) diff --git a/robotics-library.ico b/robotics-library.ico new file mode 100644 index 0000000000000000000000000000000000000000..0ae2ca265ad63b5bed30087677992aaab5089f97 GIT binary patch literal 10620 zcmb_?WmH^E6Xs!+?ruAI zzuo<{XTSZi_sqS0x~r>hb#+xe-M0q-kN`9Q4hIk=4e$jG06YNzfI|OM=Kuo$Ejj>j zbN{CvhoGxs0{{)pf9iA~09Ymj08-Nb)a{WG%p?GSkN=-K4-x>_lOfs=*I)U+aRDHM z8~`HKRpoIo$uSYlI4}hnO+*R*d!wTwp4||$Apk&o3zL!5_Wpd3DfW6nkq91mi1`it zOT8PD-4n_>h?OatQvhO3VagO+Y{3+RzDAmKJ|_5vykagF$@OZ&mY+*x>#5xjR`pNf za2ns12&yDL_`m;-dqZy=yZnfJDZ~3Es?o-Ng!-T^?wSN!Bs>RJWuF50%pfr$ancNS zNU7X`;2*b@^sBVp9ekt-YD7`VD(x4B{Z$ivr=o2gM0c?K4MaI?5m zXQZ!~aML3jg9@ez*qUtoArYk$K^pra=FsdI8fnn<8B+7v_?&v`cS6#$61@wtK=voW z7^PE>gW{o`R}x3aO`E6fkMkW#ll+|=n~8W%24U&P+04X`FNak%^w^MDCO(Dmsk3sF?VN~GBtNSQ zpq%OzeYKF2=dV)IspfWElEzkc{T+_cg5v$=Zr+xYn$HVs;Z=T3^u>{4 z(inNC;PT3r|ApTu;ViFQbF_=J8%2m65bJD0F~fM1cM`R6p7}W5Zg?B%y-akOP!p?lcf=+7w^EKt`U|T zSZGV_{T$AcNoadC3aAJ34s1xqkAU5IVlr^ z@0|3jvaQkj@T;jmBRJUjM~%Hb9Cagvvo+A>=soxm_}(6_E#{-r66H4!x@(f!cpkif zW(@AELI^l8k{#qQ1d|SNw%To(E-C+P1U?*Qy-M{Y?yWJy1QlfZ+rshZAkXVA2+Mic zsLy2O;B~cHNLBlXk+Rd(Uzkbsys_C@r-9sBe}A4GR?Ocd4b=-H>%4XwhCo2xWkoLc zGz#m5;c`d9&yLd0YPnMaw6TF~vhFGrLFSMu2&hDN$+zm6e=)Qd19JxN@(=26%|2g} zMCLoyMFzF8X`S^C0%a51i+c6(SHbvBq!9JMO*Pi0UDmg~gh=n6N$G;EN|HAxBU}|U z60(Jib1|X*^1>mWY-mSVV;WtP2{ObLtx+xbh15LW`c0}ml!TCF=U~|HC?^R?DvC)+ zAW43iu&38C=|y(d1k4!H8r4qF=FMM7C}phB?X;MK-Q{sW%&In4+|^7IuQil_567fR zg3+coF%M+uJiHanzk7D+K;S?FQv_DM1W$slSMXMAz9TPyKUNBN!JQ^|lAZmZR$606Z^pv7&9?c<1 zayIEj|8?NO8o9tp1%=8t{C8NwOBLQL6)mmm^8#W_j>-Waee^V@Y~Kkc4TPf`bb87X z!+cQ=V^mv;g)XizhSBxBW_2NgAUT#M52Hw0fGkjZ^9VT=LASy2cy)vHbot!@_Sk(U zmWSVqzF2Wh4l_VjlYg-^)#^#%a^gZwx$Z^WO91D&qqjq`H`sO*K|^N?Oj@_e%A$(4 zbzb$9)naf8A^>MN(RQ26H!pEelJcPBa3nM!1^knFYYyb|qG(f24ni}_4wgbX<9-REUov`aQe>tc||+iius!O|K7#@g=tIt(s&|)Gv5PzoozmF+lx-lJE-v7Kpjd_ZaJpAMUu7#TpU470N)S3lYtdD)(I% zsh$%*J+cPV8&0diFjuS+?5>KfvzJJH5GLvXJvNEFKWKNlx2e~K`;I9V5@Ma`c0F{J&N6)BlZ7+efaw~c>6WBC9i!# z77!o|z+_crDx^$<{|`_NMUbKYLUoy)>oNc!pZ`y&PUm@dDvbZ$893U@o1QF{1!=PpB;Nh(^$pTj zb2Z`&g7m96)yGlIYLuU&74leM>-zV~7UjZFPWOtYsgJ=R;W!zGgl#<{MT2K!B!@w2 zFC~mdKFP1@#5^%YZtnIyipdqBu7eu&-cts(emwTRRU@E+mwr@5F#hhVe_aNwj?QxSC>vgCpLqKkmsg)SVUD?CA_Fn=`rUL``P1kv-ImVW40a5`0+vT4ton=e%MG|F zRaJ}`nRL)W0J9?@F5ienyP>kBN%AN>%Q8|Gl>b&_%@#b;k z2pgJ5U5dupX0XgDM$zTZ(+yJ4xd(iSgVgTx8Kg*7eCG*D(`3*Rn72=JJ|P$Ed+?US zYO@^iWh=O}Wc;tkRIrxNuk(Ckc2@^HU*~XrXk>Or^GuK=!(iK&3n^uvhCL(D--e9A zPHPqb)G&LhgVAd*GHEj)T^cC6fnH|>1h7z^3-3a7Q zb8mlLN&C9I=k2nPYeGE?8g2KqFUea?XFr6CCH97d5$0m*Q!ihO?Cf;Y(Jy9Jgf<9K zC4#tyKbgGBNkJZ@bm7;S0h;x;TXZUz@k`aYB32?U8=>rra&?*88K5=Zt=3^KwtBx1 zFZaD8wwIi(BVlzOF1{zGaUd&IodQkM+$i)ph|3O>oxBW@;VcD+5ba}-OMuh^@$5&Y zlrW{~aE?DXdsRc|&;7TiQS#|tZSsGZeCAE2GHI0m5_^0}17aCkI&kmKElNVI!ujrs zr;5W3m*c`Lqy$e4=d1`34x~dlhTH8MmoMn(qBe1|y`x@PzUjShX2*pmLvn_jr(3gs z-Wu$7(|0{H9;)5C0}svKIv>COE}D6fa%1I?@hrePG}%$`dD*S*0IMz~jr6^)(k@b9 z<5GG3RO^qgQ*javRnwSkmes0?N|iZM)dv-xxzp8~06_NVBEJ??eOwnSKBrrWKh77y z{@Me8rny0tul@PWoa`$b4j$#FqgGVX)&|_GqSW>uvI7FP{w2t9$^qxjleUzesVe z{}C2$XJ}X(IuWtK!+sAp{9JUNd-HPsDf{7J`|9aw^y%I#j9B*-;?Z8BUG3#7=-juJ zM(a=-#@YVz}3{Wa}rT#2ds}-ABmJS6+`AaG=_!@Xh4uCqT(Y z_4g+`(wVXnnap@KE^9E8so+}+`}aHY8Ltj_*c~QB`n@rmXH`VRR&?`yCFLgIaOH_i zwWSRj`jnndxQx{e+rIq`5(kb2xLaBo4EeC%NdO-7X<9wPEaJa7@P}TXpS!0Wd|3AXSB<+sdwqsdFnptLZ{FNrAa#A%B)-| z6O%-Gql%9XNZ3sAg9&{wB{|JJ)Y@@bD}6qz7@f&hknI#bw%SYbAbaEchWNZT-aO|D z9!$HpZ<;tJ?_UtLy)kkhq_1;!<)JbPR|NFm%SHxl`k}JW7b4#Cj@#OO^3w1XmvqziITY{uMrA-gDq6t-Qjw zUlH+v(w}Y0>SC6|-mwUR`XfbcmB+YpCjQQChZf6=({e(TZK_uiRWz?w?*%s*lehg4 zYF9h~_&3A^si%(I-&0(rK2}SAla}j+LbcP!$8oh6tE;f`$wR{a*R5l-cbc^HB&9r| z-QH@2iG*6DIQEOZP7!toA>B_i(cTjgsy2R!=(g|$=`zWxoK~I7YTf;1_XtF^`+uzNd z^Qv!2kEoi{s-c)WZ&L#*$r>f2r}JrS7-$oJd~9V;Iej#}Ry1iTc1W0z!eR`|fGM3l zcbKGs1+H<0ujHQn5vhpn;U$USO-hAui9T-Z%|3I>WgB0JiES1cudTlAZ zyk_G$Er0j(MQY3|>iIBs;?$3sJ&7H^@z4T?S7Ng>+3tfuUJ*Q$3i#rLy$cRK@snot zD-hNG#jK_?7IfwUCE^~1i0WSnOeCH5B+Ly*Eej~JNcH5(KWK|Aj!q@}Mz^;g(4HWK zCd>6ahk6%b zM%c@p?}{urFNw6fKPSIH&l{R8y;QT7hYrAnTf zwskD>O6p0$RyoEU)}yw~({oPr%CbNz&O0?CG$JgDfN(<(l&f}ISn(6~`7!`E>s`16 zwRl%_^~YcvcGHpkFD%)O4H83M^BqAVUY|neMR}LSXT^z=^82Qkvn_Kq_E?zX;+3yH zpraQ=W(+rZ_x;Jd!@^iz8n9pTl8}kioUbv{7 zKcsYs!g3Q%a!>#_9cHRry&Sk$c1DLA#+lDknCHlw{~WQpK>>Ez$Qqa4X25<;@6 zC^`ml4bqd!dnMK>vM-}-?m*xxv67U!^$nK(2H% zF54PX^zc5Lu0E2-18bD6q^8?fvX0s|xvuGNnw7O2^iQqkN~-h#5;c|5VOPS<#nr38uh~(b ziVCOpn5`)~+_aBtYGR&`;rl^@Ig?m#)+4I8b>+WIeeOoO1){ENqK@7|pwKFjU= z#p73D2g%}|^H3tW%D3NuPu%?WIBcXoXor)3RE=`9QM6gVFS*BQ>dYdg6UU`9%?BkD z$C+p0zNassWy);FTvj-%Smrw4of^_2uf3(d3OI9b2a3oE#mQF(x|>1mLn}Dk45LKc zNYg!b7sNm|`fyOty)HQ)qpH#>nQ)v&OaLSnh`NDmEkF2DBjb5jiYs<9_5MA2+CH<#t z7^6=-xh;qzh|IOc0l6tT*e=`+u3%vt`HQ0hwW1K7y*`)qlEMdBVL@P{9d_~Nbwkjf z7ON?3YL#at@cI|ZfJj-{=mr6UyFPkB7C7};Q&^Zzx?xt zB$Q|(i*50rrcVw-VpAyGT_ebEWE-%h6r;&76x=TcGZ^O}*iah5&mD+0#49w~J1k>;{qtHF$*!`cr;zb}vtRa=f521t z)kfIftqI#O-w0Fit;4|eOgHFHZOFIB_wmpnIV36Z?okCbHUncmQwsZ{v-L&sHUciE z=qhiYC@ivzbl_m0p|j0bMp;@%_p7I&l;13|RnH~BdGy7xjU}W^Iq}xt0#1|PXwdwd zIP5Lqwz@{}p~%6oY;Ho%N*zV)i{Q%oaEcHN_D$^CGd;Xx-j6aXVxs4b!AyW{)j;y| zmnZPI5#Oiiuujoc_ei9I0$T1lh_GC(xriz;@i(ifND8)e%06A}k*CiXo7#VOdW;&m zmE=reP$Z@nbPGL%Qagte$MXL?H}r?Hc{R3R1eWxzA|JR=5O=mY9`&oq#1b3)7=5{&aqLuMnBlcFD=kEU9wDCN7Cb z8(JJv22v71%li#8p1t5!J8++NRL^ax8CEtYHu))+uLo^#2rRmv%9BD~G7^;D-VbIA zB#&*ON>d@lUahiv#X_~Y`keaYVI4cML+25xpHS~p+D8c?!i)n#bFME24DxlCm7% zJO}2iZ~uPgY9ly7WkkH%BOo#nYt;fEEkt&WzlkUAg(B;*#=^zK?r;_SC*J)IkX$F%84cX=4*Ww0_nikx@nmI3`z) zUf^=pv(*N6E<1iJp1bZGs8=t~MA#rWm&t2BU?VW`Ax!R43~aOJ3sXx__3+cxH^J+r zMYiRhT$gb+2^cWS?tGDEb5}NZtys&G{d^XatP}O(>b9+=^4{gtEO*>y@5}Iy#)O#N zrwfLi#F){d=^5E){ea-YIarL^Rri`PRwQ!$^<$B7-}JJzTX1Vv_QE=%0oG^SkhLk@p9s@N#)lSmT%rK9EmZv4G?>58BIhY$XK2a?+phr*6yIr!cy3Fl19 z9TmT6e}+LuzbaY@HdBtbo_mhn*~??%?<%0Poj9L@vLKwIPc7`~tpe6`1WJnUK8FUx z;P_o&xJxd$GDSUrBT5kL?`up6=VJ(UEK$c?Thy22Fqq-d#wBK36prQq(a-)HLc3o!3VgNtW90c!1jBJ0fcRuU} zwr?K3DrhSfqs@~IU?e}JH+^O$D!cIFEFzQ5jlj++{%eED7h_XFsn$ec`+V^Jt2?i$ zKJ8rfVb$I>zB?3E$FHH-tNEwzZVJ8cz%ASk6xRN$G{?0>FZKZSln1|0-~7m!7ZFO4 z_196YOnC0AO(Q|=4z3q;SG2;U%+llK=TL!I#K0n(4aQLBW5oMCpK*7(XRDiwLdv=D zcv~^Ha;X`F^sRvl9uvlI_X#VdQn~w)c5-d~oXGuk2zySib>Es6k-4&`5sFv?EJs&I zti?5^iBk=0pJ%+k^|Jyp+)FQ#jG9@nI0IXXOlgY9^oMo{Y4RT)jSAoRy)r4vJMeax zvjpN*t}qzGAwd!4XLO-ORtB5owyIKabRe0aM4|8f^RnT`A~yJ5!qLT zTS9n^Nq)jmuu7_RK`0-*=P!NYCDMwmm~I{!^ugb^@;-p|;=7JM_j|AWckFS+L?&SX z*xi8?KIFPZLxK)*Eg@LWZ&@jro&mc@GoNFxFE?^<3p|xmmL_jS?L;-?7NQc-fk8Kf z)N_p4A?tLFb0nHIgyUc*tsoo)Rq@+_@GU^2`2<-P)nQITW)wXT-UZbEPVzR%eqYVO zHN$yG9kB;loJIS)z7w+tn0dNJ9T~LkwK)1cX>&gNZ1x6!{=yhu4Xh3+C(B*yRIwJ% zH)b#xkF}A#X}~Z(kWTgigXWzt6v zFAkF{PPnw9V_jr*EmJr7^daw#<=ed`h^$k|WAGj4G@9YsHMf`+twbI9 zTY)M>&qd}ZmvM+87k`b(FrWAti;!Dd&GJc_zZ_AiBXXzalDd07uacIaVKR!AIHWux zC=bR3YN#HwZ6DjtRQ6%rdrFN-7F9Fltc~B&I^^omhN4!L8B+`E1$@x*zo{DAuD#Hi zNM+R?NV?d6@*&jJ240mFW12)>1TpDkiqG*BZ}`=>t4a)$Y_8RQ7{epzQp=^L33a(W z%|_faK>?4A1rn^W$-9uhF!)o*Kh3~sfZ;-8p7(=(x#PJPI>REjUehynN43Md0UIY-12lkRXTu*o)jdx~ zvD%a9TZ!K+k7_PB^@;#`)_o9|2RW_r7iyhSPmw?%d-Cs z0x91{P-}32g!B6n!UxZqk@|w6%&SK=6mt8w3}@lKt9Q#;OB0=nn@l&T)~$7 z*DTl-!_KdtzE4JhYzt9tj$)ouFREVHr5vA7FTj_#s}2{>h_ZSn@0E}zl2CBPO=+;cS!yCrKilz}+o zWRwhLE0E;W%-Od>W9lZ&bV3h?UmX20ZD1l|fMMrGV}U>WCG6H?tBv!WZw?N@vMxes z#BwqzfLr&F=ANuv-+AXb8Cp!%oW>ezO#J*`9;4BMj3F@SXvZnosV@nIP~9FN?LSm* zDOIL1H8`<$z6FnE&>_Po%MefqvySIhSQ3l3lXH&2lXi&`$1gCR{ld;!&9<|9qhYe= zfl|4fU4BG##h<@%i$bU4h)Uxx!M8d+zOk8iaLsX!Ayc*u&^Q^9IMSat{2?tS(;)ds zgtV&R%ZnAvIqrF%p0U=ws(pe4tzpFy%ssdkN;Xs`4%X`B1hpT-b{VZ!65X%vOBPzr zw^jUKpOpSdv*uTSmyuQ@kE-q)Fge7xV|WM2YdLPP5b6v6j=>9mZ8Tc>?ptpSgQtlQ zqfb5W$o9llo5?m`zqyhnz$SW$;Vz)p{CCv!l7M$^I0FAlyPVh{aXVb3-t8CNQu+R) zS3Trl`19A4)YIVv3o$HMa&VyPeFy^YSd)Kw4xgAkGkx}^&EZ0e#F017{qDY`^<7AU z5LR>+3Aukl9hZ-ON{$*0$P#dwJ-x1KPvRbls4<0t;W)<1#F&g%4Hmax5Mt51+RQ#% zkgy~8`L4Y>+zz1+GA+PA%Z*6;l*MGOey?c2a8%qFygemnr#?z*5&$VD430puv&<{Z z(}zXr1s<#K0AjKI%PYIHAHN9o=IRF;W@b*zzEm)_Dcx+Ov{Ng2GP|+s*Y`eo(8S=K z1tYS-KSRN8DCy$c-JhKL5buR!=OCkLg&CJI_?L8?)%x8q+U1Vd&#Up}8H^$G!eb~^ zh%w*cD<~K!^W~}K$RoBdpRB%@4%3-z?D}X<<{hNgn8u<5B%-Rs>1<}J~|5!F01*~oyRXiT9%(xg-?U2ZPMx>wP`;w>k qq<1=q4M|8YQ=`WW?fM=75w|J*#Gs{ivIz0>uCo7 literal 0 HcmV?d00001 diff --git a/robotics-library.rc b/robotics-library.rc new file mode 100644 index 00000000..0bc97ba1 --- /dev/null +++ b/robotics-library.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "robotics-library.ico" diff --git a/robotics-library.svg b/robotics-library.svg new file mode 100644 index 00000000..98612633 --- /dev/null +++ b/robotics-library.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/rl/hal/Ati.cpp b/src/rl/hal/Ati.cpp new file mode 100644 index 00000000..351eddf2 --- /dev/null +++ b/src/rl/hal/Ati.cpp @@ -0,0 +1,208 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "Ati.h" +#include "Comedi.h" +#include "DeviceException.h" + +namespace rl +{ + namespace hal + { + Ati::Ati(const ::std::string& calFilePath, const unsigned short int& index, const ::std::string& filename) : + SixAxisForceTorqueSensor(), + cal(NULL), + calFilePath(calFilePath), + comedi(new Comedi(filename)), + index(index), + values(), + voltages() + { + this->cal = createCalibration(const_cast< char* >(this->calFilePath.c_str()), this->index + 1); + + if (NULL == this->cal) + { + throw DeviceException("Could not load the desired calibration"); + } + + for (::std::size_t i = 0; i < 6; ++i) + { + this->values[i] = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + this->voltages[i] = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + } + } + + Ati::~Ati() + { + if (NULL != this->cal) + { + destroyCalibration(this->cal); + } + + delete this->comedi; + } + + void + Ati::bias() + { + Bias(this->cal, this->voltages); + } + + void + Ati::close() + { + this->comedi->close(); + this->setConnected(false); + } + + ::std::string + Ati::getAxisName(const ::std::size_t& i) const + { + assert(i < 7); + + return this->cal->AxisNames[i]; + } + + void + Ati::getForces(::rl::math::Vector& forces) const + { + assert(forces.size() >= 3); + + for (::std::size_t i = 0; i < 3; ++i) + { + forces(i) = this->values[i]; + } + } + + ::rl::math::Real + Ati::getForcesMaximum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->cal->MaxLoads[i]; + } + + ::rl::math::Real + Ati::getForcesMinimum(const ::std::size_t& i) const + { + assert(i < 4); + + return -this->cal->MaxLoads[i]; + } + + void + Ati::getForcesTorques(::rl::math::Vector& forcesTorques) const + { + assert(forcesTorques.size() >= 6); + + for (::std::size_t i = 0; i < 6; ++i) + { + forcesTorques(i) = this->values[i]; + } + } + + ::rl::math::Real + Ati::getForcesTorquesMaximum(const ::std::size_t& i) const + { + assert(i < 7); + + return this->cal->MaxLoads[i]; + } + + ::rl::math::Real + Ati::getForcesTorquesMinimum(const ::std::size_t& i) const + { + assert(i < 7); + + return -this->cal->MaxLoads[i]; + } + + void + Ati::getTorques(::rl::math::Vector& torques) const + { + assert(torques.size() >= 3); + + for (::std::size_t i = 3; i < 6; ++i) + { + torques(i) = this->values[i]; + } + } + + ::rl::math::Real + Ati::getTorquesMaximum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->cal->MaxLoads[3 + i]; + } + + ::rl::math::Real + Ati::getTorquesMinimum(const ::std::size_t& i) const + { + assert(i < 4); + + return -this->cal->MaxLoads[3 + i]; + } + + void + Ati::open() + { + this->comedi->open(); + this->setConnected(true); + } + + void + Ati::resetBias() + { + float voltages[6] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; + Bias(this->cal, voltages); + } + + void + Ati::start() + { + } + + void + Ati::step() + { + for (::std::size_t i = 0; i < 6; ++i) + { + this->comedi->read(0, i, this->voltages[i]); + } + + ConvertToFT(this->cal, this->voltages, this->values); + } + + void + Ati::stop() + { + } + } +} diff --git a/src/rl/hal/Ati.h b/src/rl/hal/Ati.h new file mode 100644 index 00000000..1ba5a505 --- /dev/null +++ b/src/rl/hal/Ati.h @@ -0,0 +1,102 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_ATI_H_ +#define _RL_HAL_ATI_H_ + +#include +#include + +#include "SixAxisForceTorqueSensor.h" + +namespace rl +{ + namespace hal + { + class Comedi; + + class Ati : public SixAxisForceTorqueSensor + { + public: + Ati(const ::std::string& calFilePath, const unsigned short int& index = 0, const ::std::string& filename = "/dev/comedi0"); + + virtual ~Ati(); + + void bias(); + + void close(); + + ::std::string getAxisName(const ::std::size_t& i) const; + + void getForces(::rl::math::Vector& forces) const; + + ::rl::math::Real getForcesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getForcesMinimum(const ::std::size_t& i) const; + + void getForcesTorques(::rl::math::Vector& forcesTorques) const; + + ::rl::math::Real getForcesTorquesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getForcesTorquesMinimum(const ::std::size_t& i) const; + + void getTorques(::rl::math::Vector& torques) const; + + ::rl::math::Real getTorquesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getTorquesMinimum(const ::std::size_t& i) const; + + void open(); + + void resetBias(); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + Calibration* cal; + + /** The name and path of the calibration file. */ + ::std::string calFilePath; + + Comedi* comedi; + + /** The number of the calibration within the file (usually 1). */ + unsigned short int index; + + float values[6]; + + float voltages[6]; + }; + } +} + +#endif // _RL_HAL_ATI_H_ diff --git a/src/rl/hal/AxisController.cpp b/src/rl/hal/AxisController.cpp new file mode 100644 index 00000000..d8991a43 --- /dev/null +++ b/src/rl/hal/AxisController.cpp @@ -0,0 +1,56 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + AxisController::AxisController(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + Device(), + dof(dof), + updateRate(updateRate) + { + } + + AxisController::~AxisController() + { + } + + ::std::size_t + AxisController::getDof() const + { + return this->dof; + } + + ::rl::math::Real + AxisController::getUpdateRate() const + { + return this->updateRate; + } + } +} diff --git a/src/rl/hal/AxisController.h b/src/rl/hal/AxisController.h new file mode 100644 index 00000000..108de5e6 --- /dev/null +++ b/src/rl/hal/AxisController.h @@ -0,0 +1,61 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_AXISCONTROLLER_H_ +#define _RL_HAL_AXISCONTROLLER_H_ + +#include + +#include "Device.h" + +namespace rl +{ + namespace hal + { + class AxisController : public virtual Device + { + public: + AxisController(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~AxisController(); + + ::std::size_t getDof() const; + + virtual ::rl::math::Real getUpdateRate() const; + + protected: + + private: + /** Degrees of freedom. */ + ::std::size_t dof; + + /** [s] */ + ::rl::math::Real updateRate; + }; + } +} + +#endif // _RL_HAL_AXISCONTROLLER_H_ diff --git a/src/rl/hal/CMakeLists.txt b/src/rl/hal/CMakeLists.txt new file mode 100644 index 00000000..a21695b9 --- /dev/null +++ b/src/rl/hal/CMakeLists.txt @@ -0,0 +1,180 @@ +project(rlhal) + +find_package(Atidaq) +find_package(Comedi) +find_package(Libdc1394) + +include(TestBigEndian) + +test_big_endian(BIG_ENDIAN) + +set( + HDRS + AxisController.h + Camera.h + CartesianPositionActuator.h + CartesianPositionSensor.h + Coach.h + ComException.h + Com.h + DeviceException.h + Device.h + endian.h + Exception.h + ForceSensor.h + Gnuplot.h + Gripper.h + JointPositionActuator.h + JointPositionSensor.h + JointTorqueActuator.h + JointTorqueSensor.h + JointVelocityActuator.h + JointVelocitySensor.h + LeuzeRs4.h + Lidar.h + MitsubishiH7Exception.h + MitsubishiH7.h + RangeSensor.h + SchmersalLss300.h + SchunkFpsF5.h + Serial.h + SickLms200.h + SickS300.h + SixAxisForceTorqueSensor.h + Socket.h + TcpSocket.h + TimeoutException.h + TorqueSensor.h + types.h + UdpSocket.h + WeissWsg50.h +) +set( + SRCS + AxisController.cpp + Camera.cpp + CartesianPositionActuator.cpp + CartesianPositionSensor.cpp + Coach.cpp + Com.cpp + ComException.cpp + Device.cpp + DeviceException.cpp + endian.cpp + Exception.cpp + ForceSensor.cpp + Gnuplot.cpp + Gripper.cpp + JointPositionActuator.cpp + JointPositionSensor.cpp + JointTorqueActuator.cpp + JointTorqueSensor.cpp + JointVelocityActuator.cpp + JointVelocitySensor.cpp + LeuzeRs4.cpp + Lidar.cpp + MitsubishiH7.cpp + MitsubishiH7Exception.cpp + RangeSensor.cpp + SchmersalLss300.cpp + SchunkFpsF5.cpp + Serial.cpp + SickLms200.cpp + SickS300.cpp + SixAxisForceTorqueSensor.cpp + Socket.cpp + TcpSocket.cpp + TimeoutException.cpp + TorqueSensor.cpp + UdpSocket.cpp + WeissWsg50.cpp +) + +if(ATIDAQ_FOUND AND COMEDI_FOUND) + set(HDRS ${HDRS} Ati.h) + set(SRCS ${SRCS} Ati.cpp) +endif(ATIDAQ_FOUND AND COMEDI_FOUND) + +if(COMEDI_FOUND) + set(HDRS ${HDRS} Comedi.h) + set(HDRS ${HDRS} Jr3.h) + set(SRCS ${SRCS} Comedi.cpp) + set(SRCS ${SRCS} Jr3.cpp) +endif(COMEDI_FOUND) + +if(LIBDC1394_FOUND) + set(HDRS ${HDRS} Dc1394Camera.h) + set(HDRS ${HDRS} Dc1394CameraException.h) + set(SRCS ${SRCS} Dc1394Camera.cpp) + set(SRCS ${SRCS} Dc1394CameraException.cpp) +endif(LIBDC1394_FOUND) + +if(WIN32) + add_library( + rlhal + STATIC + ${HDRS} + ${SRCS} + ) +else(WIN32) + add_library( + rlhal + SHARED + ${HDRS} + ${SRCS} + ) +endif(WIN32) + +if(BIG_ENDIAN) + target_compile_definitions(rlhal PRIVATE -DHAVE_BIG_ENDIAN) +else(BIG_ENDIAN) + target_compile_definitions(rlhal PRIVATE -DHAVE_LITTLE_ENDIAN) +endif(BIG_ENDIAN) + +target_link_libraries( + rlhal + rlmath + rlutil +) + +if(ATIDAQ_FOUND AND COMEDI_FOUND) + target_include_directories(rlhal PUBLIC ${ATIDAQ_INCLUDE_DIRS}) + target_link_libraries(rlhal ${ATIDAQ_LIBRARIES}) +endif(ATIDAQ_FOUND AND COMEDI_FOUND) + +if(COMEDI_FOUND) + target_include_directories(rlhal PUBLIC ${COMEDI_INCLUDE_DIRS}) + target_link_libraries(rlhal ${COMEDI_LIBRARIES}) +endif(COMEDI_FOUND) + +if(LIBDC1394_FOUND) + target_compile_definitions(rlhal PUBLIC ${LIBDC1394_DEFINITIONS}) + target_include_directories(rlhal PUBLIC ${LIBDC1394_INCLUDE_DIRS}) + target_link_libraries(rlhal ${LIBDC1394_LIBRARIES}) +endif(LIBDC1394_FOUND) + +if(QNXNTO) + target_link_libraries(rlhal socket) +endif(QNXNTO) + +if(WIN32) + target_link_libraries(rlhal ws2_32) +endif(WIN32) + +set_target_properties( + rlhal + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/hal COMPONENT headers) + +install( + TARGETS rlhal + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/hal/Camera.cpp b/src/rl/hal/Camera.cpp new file mode 100644 index 00000000..c5bc3ed5 --- /dev/null +++ b/src/rl/hal/Camera.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Camera.h" + +namespace rl +{ + namespace hal + { + Camera::Camera() : + Device() + { + } + + Camera::~Camera() + { + } + } +} diff --git a/src/rl/hal/Camera.h b/src/rl/hal/Camera.h new file mode 100644 index 00000000..7f7b84e5 --- /dev/null +++ b/src/rl/hal/Camera.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_CAMERA_H_ +#define _RL_HAL_CAMERA_H_ + +#include "Device.h" + +namespace rl +{ + namespace hal + { + class Camera : public virtual Device + { + public: + Camera(); + + virtual ~Camera(); + + virtual unsigned int getHeight() const = 0; + + virtual unsigned int getSize() const = 0; + + virtual unsigned int getWidth() const = 0; + + virtual void grab(unsigned char* image) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_CAMERA_H_ diff --git a/src/rl/hal/CartesianPositionActuator.cpp b/src/rl/hal/CartesianPositionActuator.cpp new file mode 100644 index 00000000..6a5e7db2 --- /dev/null +++ b/src/rl/hal/CartesianPositionActuator.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "CartesianPositionActuator.h" + +namespace rl +{ + namespace hal + { + CartesianPositionActuator::CartesianPositionActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + CartesianPositionActuator::~CartesianPositionActuator() + { + } + } +} diff --git a/src/rl/hal/CartesianPositionActuator.h b/src/rl/hal/CartesianPositionActuator.h new file mode 100644 index 00000000..286427a3 --- /dev/null +++ b/src/rl/hal/CartesianPositionActuator.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_CARTESIANPOSITIONACTUATOR_H_ +#define _RL_HAL_CARTESIANPOSITIONACTUATOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class CartesianPositionActuator : public virtual AxisController + { + public: + CartesianPositionActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~CartesianPositionActuator(); + + virtual void setCartesianPosition(const ::rl::math::Transform& x) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_CARTESIANPOSITIONACTUATOR_H_ diff --git a/src/rl/hal/CartesianPositionSensor.cpp b/src/rl/hal/CartesianPositionSensor.cpp new file mode 100644 index 00000000..52dc8c2b --- /dev/null +++ b/src/rl/hal/CartesianPositionSensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "CartesianPositionSensor.h" + +namespace rl +{ + namespace hal + { + CartesianPositionSensor::CartesianPositionSensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + CartesianPositionSensor::~CartesianPositionSensor() + { + } + } +} diff --git a/src/rl/hal/CartesianPositionSensor.h b/src/rl/hal/CartesianPositionSensor.h new file mode 100644 index 00000000..7b3ce693 --- /dev/null +++ b/src/rl/hal/CartesianPositionSensor.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_CARTESIANPOSITIONSENSOR_H_ +#define _RL_HAL_CARTESIANPOSITIONSENSOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class CartesianPositionSensor : public virtual AxisController + { + public: + CartesianPositionSensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~CartesianPositionSensor(); + + virtual void getCartesianPosition(::rl::math::Transform& x) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_CARTESIANPOSITIONSENSOR_H_ diff --git a/src/rl/hal/Coach.cpp b/src/rl/hal/Coach.cpp new file mode 100644 index 00000000..74ee765b --- /dev/null +++ b/src/rl/hal/Coach.cpp @@ -0,0 +1,110 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "Coach.h" +#include "TcpSocket.h" + +namespace rl +{ + namespace hal + { + Coach::Coach( + const ::std::size_t& dof, + const ::rl::math::Real& updateRate, + const ::std::size_t& i, + const ::std::string& host, + const unsigned short int& port + ) : + AxisController(dof, updateRate), + JointPositionActuator(dof, updateRate), + i(i), + tcp(new TcpSocket(host, port)), + text() + { + } + + Coach::~Coach() + { + delete this->tcp; + } + + void + Coach::close() + { + this->tcp->close(); + this->setConnected(false); + } + + void + Coach::open() + { + this->tcp->open(); + this->setConnected(true); + } + + void + Coach::setJointPosition(const ::rl::math::Vector& q) + { + assert(this->getDof() >= q.size()); + + this->text.clear(); + this->text.str(""); + + this->text << 2; + + this->text << " " << this->i; + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + this->text << " " << q(i); + } + + this->text << ::std::endl; + } + + void + Coach::start() + { + } + + void + Coach::step() + { + this->tcp->write(text.str().c_str(), text.str().length()); + + ::rl::util::Timer::sleep(this->getUpdateRate()); + } + + void + Coach::stop() + { + } + } +} diff --git a/src/rl/hal/Coach.h b/src/rl/hal/Coach.h new file mode 100644 index 00000000..6f01a09b --- /dev/null +++ b/src/rl/hal/Coach.h @@ -0,0 +1,78 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_COACH_H_ +#define _RL_HAL_COACH_H_ + +#include +#include + +#include "JointPositionActuator.h" + +namespace rl +{ + namespace hal + { + class TcpSocket; + + class Coach : public JointPositionActuator + { + public: + Coach( + const ::std::size_t& dof, + const ::rl::math::Real& updateRate, + const ::std::size_t& i = 0, + const ::std::string& host = "localhost", + const unsigned short int& port = 11235 + ); + + virtual ~Coach(); + + void close(); + + void open(); + + void setJointPosition(const ::rl::math::Vector& set); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + ::std::size_t i; + + TcpSocket* tcp; + + ::std::stringstream text; + }; + } +} + +#endif // _RL_HAL_COACH_H_ diff --git a/src/rl/hal/Com.cpp b/src/rl/hal/Com.cpp new file mode 100644 index 00000000..5506a4d1 --- /dev/null +++ b/src/rl/hal/Com.cpp @@ -0,0 +1,54 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Com.h" + +namespace rl +{ + namespace hal + { + Com::Com() : + connected(false) + { + } + + Com::~Com() + { + } + + bool + Com::isConnected() const + { + return this->connected; + } + + void + Com::setConnected(const bool& connected) + { + this->connected = connected; + } + } +} diff --git a/src/rl/hal/Com.h b/src/rl/hal/Com.h new file mode 100644 index 00000000..ed398ef6 --- /dev/null +++ b/src/rl/hal/Com.h @@ -0,0 +1,56 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_COM_H_ +#define _RL_HAL_COM_H_ + +namespace rl +{ + namespace hal + { + class Com + { + public: + Com(); + + virtual ~Com(); + + virtual void close() = 0; + + bool isConnected() const; + + virtual void open() = 0; + + protected: + void setConnected(const bool& connected); + + private: + bool connected; + }; + } +} + +#endif // _RL_HAL_COM_H_ diff --git a/src/rl/hal/ComException.cpp b/src/rl/hal/ComException.cpp new file mode 100644 index 00000000..9e0899d9 --- /dev/null +++ b/src/rl/hal/ComException.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "ComException.h" + +namespace rl +{ + namespace hal + { + ComException::ComException(const ::std::string& what_arg) : + Exception(what_arg) + { + } + + ComException::~ComException() throw() + { + } + } +} diff --git a/src/rl/hal/ComException.h b/src/rl/hal/ComException.h new file mode 100644 index 00000000..1650fb77 --- /dev/null +++ b/src/rl/hal/ComException.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_COMEXCEPTION_H_ +#define _RL_HAL_COMEXCEPTION_H_ + +#include "Exception.h" + +namespace rl +{ + namespace hal + { + class ComException : public Exception + { + public: + ComException(const ::std::string& what_arg); + + virtual ~ComException() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_COMEXCEPTION_H_ diff --git a/src/rl/hal/Comedi.cpp b/src/rl/hal/Comedi.cpp new file mode 100644 index 00000000..8e8d73ed --- /dev/null +++ b/src/rl/hal/Comedi.cpp @@ -0,0 +1,266 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Comedi.h" +#include "ComException.h" + +namespace rl +{ + namespace hal + { + Comedi::Comedi(const ::std::string& filename) : + Com(), + aref(AREF_GROUND), + device(NULL), + filename(filename), + range(0) + { + } + + Comedi::~Comedi() + { + if (this->isConnected()) + { + this->close(); + } + } + + void + Comedi::close() + { + if (NULL != this->device) + { + comedi_close(this->device); + } + + this->setConnected(false); + } + + unsigned int + Comedi::getAref() const + { + return this->aref; + } + + ::std::string + Comedi::getBoardName() const + { + const char* name = comedi_get_board_name(this->device); + + if (NULL == name) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return name; + } + + comedi_t* + Comedi::getDevice() const + { + return this->device; + } + + ::std::string + Comedi::getDriverName() const + { + const char* name = comedi_get_driver_name(this->device); + + if (NULL == name) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return name; + } + + int + Comedi::getFileno() const + { + int fileno = comedi_fileno(this->device); + + if (-1 == fileno) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return fileno; + } + + lsampl_t + Comedi::getMax(const ::std::size_t& subdevice, const ::std::size_t& channel) const + { + lsampl_t max = comedi_get_maxdata(this->device, subdevice, channel); + + if (0 == max) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return max; + } + + ::std::size_t + Comedi::getNumChannels(const ::std::size_t& subdevice) const + { + int numChannels = comedi_get_n_channels(this->device, subdevice); + + if (-1 == numChannels) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return numChannels; + } + + ::std::size_t + Comedi::getNumRanges(const ::std::size_t& subdevice, const ::std::size_t& channel) const + { + int numRanges = comedi_get_n_ranges(this->device, subdevice, channel); + + if (-1 == numRanges) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return numRanges; + } + + ::std::size_t + Comedi::getNumSubdevices() const + { + return comedi_get_n_subdevices(this->device); + } + + unsigned int + Comedi::getRange() const + { + return this->range; + } + + ::std::size_t + Comedi::getSubdeviceFlags(const ::std::size_t& subdevice) const + { + int subdeviceFlags = comedi_get_subdevice_flags(this->device, subdevice); + + if (-1 == subdeviceFlags) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + return subdeviceFlags; + } + + void + Comedi::open() + { + this->device = comedi_open(this->filename.c_str()); + + if (NULL == this->device) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + this->setConnected(true); + } + + void + Comedi::read(const ::std::size_t& subdevice, const ::std::size_t& channel, double& data) + { + lsampl_t maxdata = comedi_get_maxdata(this->device, subdevice, channel); + + if (0 == maxdata) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + lsampl_t sample; + + if (-1 == comedi_data_read(this->device, subdevice, channel, this->range, this->aref, &sample)) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + comedi_range* range = comedi_get_range(this->device, subdevice, channel, this->range); + + if (NULL == range) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + data = comedi_to_phys(sample, range, maxdata); + } + + void + Comedi::read(const ::std::size_t& subdevice, const ::std::size_t& channel, float& data) + { + lsampl_t maxdata = comedi_get_maxdata(this->device, subdevice, channel); + + if (0 == maxdata) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + lsampl_t sample; + + if (-1 == comedi_data_read(this->device, subdevice, channel, this->range, this->aref, &sample)) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + comedi_range* range = comedi_get_range(this->device, subdevice, channel, this->range); + + if (NULL == range) + { + throw ComException(comedi_strerror(comedi_errno())); + } + + data = comedi_to_phys(sample, range, maxdata); + } + + void + Comedi::setAref(const unsigned int& aref) + { + this->aref = aref; + } + + void + Comedi::setRange(const unsigned int& range) + { + this->range = range; + } + + void + Comedi::write(const ::std::size_t& subdevice, const ::std::size_t& channel, const double& data) + { + } + + void + Comedi::write(const ::std::size_t& subdevice, const ::std::size_t& channel, const float& data) + { + } + } +} diff --git a/src/rl/hal/Comedi.h b/src/rl/hal/Comedi.h new file mode 100644 index 00000000..b46aea24 --- /dev/null +++ b/src/rl/hal/Comedi.h @@ -0,0 +1,98 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_COMEDI_H_ +#define _RL_HAL_COMEDI_H_ + +#include "Com.h" + +#include +#include + +namespace rl +{ + namespace hal + { + class Comedi : public Com + { + public: + Comedi(const ::std::string& filename = "/dev/comedi0"); + + virtual ~Comedi(); + + void close(); + + unsigned int getAref() const; + + ::std::string getBoardName() const; + + comedi_t* getDevice() const; + + ::std::string getDriverName() const; + + int getFileno() const; + + lsampl_t getMax(const ::std::size_t& subdevice, const ::std::size_t& channel) const; + + ::std::size_t getNumChannels(const ::std::size_t& subdevice) const; + + ::std::size_t getNumRanges(const ::std::size_t& subdevice, const ::std::size_t& channel) const; + + ::std::size_t getNumSubdevices() const; + + unsigned int getRange() const; + + ::std::size_t getSubdeviceFlags(const ::std::size_t& subdevice) const; + + void open(); + + void read(const ::std::size_t& subdevice, const ::std::size_t& channel, double& data); + + void read(const ::std::size_t& subdevice, const ::std::size_t& channel, float& data); + + void setAref(const unsigned int& aref); + + void setRange(const unsigned int& range); + + void write(const ::std::size_t& subdevice, const ::std::size_t& channel, const double& data); + + void write(const ::std::size_t& subdevice, const ::std::size_t& channel, const float& data); + + protected: + + private: + unsigned int aref; + + comedi_t* device; + + ::std::string filename; + + unsigned int range; + }; + } +} + +#endif // _RL_HAL_COMEDI_H_ diff --git a/src/rl/hal/Dc1394Camera.cpp b/src/rl/hal/Dc1394Camera.cpp new file mode 100644 index 00000000..8f83ecd3 --- /dev/null +++ b/src/rl/hal/Dc1394Camera.cpp @@ -0,0 +1,1265 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Dc1394Camera.h" +#include "Dc1394CameraException.h" + +namespace rl +{ + namespace hal + { + Dc1394Camera::Dc1394Camera(const ::std::string& filename, const unsigned int& node) : + Camera(), +#if (LIBDC1394_VERSION_MAJOR > 10) + buffer(8), + camera(NULL), + cameras(0), + colorCoding(COLOR_CODING_RAW8), + dc1394(dc1394_new()), + filename(filename), + frame(), + framerate(static_cast< Framerate >(DC1394_FRAMERATE_MIN)), + height(DC1394_USE_MAX_AVAIL), + left(0), + node(node), + speed(ISO_SPEED_400), + top(0), + videoMode(VIDEO_MODE_640x480_RGB8), + width(DC1394_USE_MAX_AVAIL) +#else + buffer(8), + camera(), + cameras(0), + channel(0), + colorCoding(COLOR_CODING_RAW8), + drop(1), + filename(filename), + framerate(FRAMERATE_MIN), + handle(NULL), + height(USE_MAX_AVAIL), + info(), + left(0), + node(node), + nodes(NULL), + port(0), + speed(SPEED_400), + top(0), + videoMode(VIDEO_MODE_640x480_RGB8), + width(USE_MAX_AVAIL) +#endif + { + } + + Dc1394Camera::~Dc1394Camera() + { +#if (LIBDC1394_VERSION_MAJOR > 10) + if (NULL != this->dc1394) + { + dc1394_free(this->dc1394); + } +#else + if (NULL != this->nodes) + { + dc1394_free_camera_nodes(this->nodes); + this->nodes = NULL; + } + + if (NULL != this->handle) + { + dc1394_destroy_handle(this->handle); + this->handle = NULL; + } +#endif + } + + void + Dc1394Camera::close() + { +#if (LIBDC1394_VERSION_MAJOR > 10) + if (NULL != this->camera) + { + dc1394_camera_free(this->camera); + } +#else + if (NULL != this->nodes) + { + dc1394_free_camera_nodes(this->nodes); + this->nodes = NULL; + } + + if (NULL != this->handle) + { + dc1394_destroy_handle(this->handle); + this->handle = NULL; + } +#endif + } + + unsigned int + Dc1394Camera::getBitsPerPixel() const + { + switch (this->videoMode) + { + case VIDEO_MODE_640x480_MONO8: + case VIDEO_MODE_800x600_MONO8: + case VIDEO_MODE_1024x768_MONO8: + case VIDEO_MODE_1280x960_MONO8: + case VIDEO_MODE_1600x1200_MONO8: + return 8; + break; + case VIDEO_MODE_640x480_YUV411: + return 12; + break; + case VIDEO_MODE_640x480_MONO16: + case VIDEO_MODE_800x600_MONO16: + case VIDEO_MODE_1024x768_MONO16: + case VIDEO_MODE_1280x960_MONO16: + case VIDEO_MODE_1600x1200_MONO16: + case VIDEO_MODE_320x240_YUV422: + case VIDEO_MODE_640x480_YUV422: + case VIDEO_MODE_800x600_YUV422: + case VIDEO_MODE_1024x768_YUV422: + case VIDEO_MODE_1280x960_YUV422: + case VIDEO_MODE_1600x1200_YUV422: + return 16; + break; + case VIDEO_MODE_640x480_RGB8: + case VIDEO_MODE_800x600_RGB8: + case VIDEO_MODE_1024x768_RGB8: + case VIDEO_MODE_1280x960_RGB8: + case VIDEO_MODE_1600x1200_RGB8: + case VIDEO_MODE_160x120_YUV444: + return 24; + break; + case VIDEO_MODE_FORMAT7_0: + case VIDEO_MODE_FORMAT7_1: + case VIDEO_MODE_FORMAT7_2: + case VIDEO_MODE_FORMAT7_3: + case VIDEO_MODE_FORMAT7_4: + case VIDEO_MODE_FORMAT7_5: + case VIDEO_MODE_FORMAT7_6: + case VIDEO_MODE_FORMAT7_7: + switch (this->colorCoding) + { + case COLOR_CODING_MONO8: + case COLOR_CODING_RAW8: + return 8; + break; + case COLOR_CODING_YUV411: + return 12; + break; + case COLOR_CODING_MONO16: + case COLOR_CODING_MONO16S: + case COLOR_CODING_RAW16: + case COLOR_CODING_YUV422: + return 16; + break; + case COLOR_CODING_RGB8: + case COLOR_CODING_YUV444: + return 24; + break; + case COLOR_CODING_RGB16: + case COLOR_CODING_RGB16S: + return 48; + break; + default: + break; + } + break; + default: + break; + } + + return 0; + } + + unsigned int + Dc1394Camera::getColorCodingDepth() const + { + switch (this->videoMode) + { + case VIDEO_MODE_640x480_MONO8: + case VIDEO_MODE_800x600_MONO8: + case VIDEO_MODE_1024x768_MONO8: + case VIDEO_MODE_1280x960_MONO8: + case VIDEO_MODE_1600x1200_MONO8: + case VIDEO_MODE_640x480_RGB8: + case VIDEO_MODE_800x600_RGB8: + case VIDEO_MODE_1024x768_RGB8: + case VIDEO_MODE_1280x960_RGB8: + case VIDEO_MODE_1600x1200_RGB8: + case VIDEO_MODE_640x480_YUV411: + case VIDEO_MODE_320x240_YUV422: + case VIDEO_MODE_640x480_YUV422: + case VIDEO_MODE_800x600_YUV422: + case VIDEO_MODE_1024x768_YUV422: + case VIDEO_MODE_1280x960_YUV422: + case VIDEO_MODE_1600x1200_YUV422: + case VIDEO_MODE_160x120_YUV444: + return 8; + break; + case VIDEO_MODE_640x480_MONO16: + case VIDEO_MODE_800x600_MONO16: + case VIDEO_MODE_1024x768_MONO16: + case VIDEO_MODE_1280x960_MONO16: + case VIDEO_MODE_1600x1200_MONO16: + return 16; + break; + case VIDEO_MODE_FORMAT7_0: + case VIDEO_MODE_FORMAT7_1: + case VIDEO_MODE_FORMAT7_2: + case VIDEO_MODE_FORMAT7_3: + case VIDEO_MODE_FORMAT7_4: + case VIDEO_MODE_FORMAT7_5: + case VIDEO_MODE_FORMAT7_6: + case VIDEO_MODE_FORMAT7_7: + switch (this->colorCoding) + { + case COLOR_CODING_MONO8: + case COLOR_CODING_RAW8: + case COLOR_CODING_RGB8: + case COLOR_CODING_YUV411: + case COLOR_CODING_YUV422: + case COLOR_CODING_YUV444: + return 8; + break; + case COLOR_CODING_MONO16: + case COLOR_CODING_MONO16S: + case COLOR_CODING_RAW16: + case COLOR_CODING_RGB16: + case COLOR_CODING_RGB16S: + return 16; + break; + default: + break; + } + break; + default: + break; + } + + return 0; + } + + unsigned int + Dc1394Camera::getHeight() const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + unsigned int width; + unsigned int height; + + dc1394error_t error = dc1394_get_image_size_from_video_mode(this->camera, this->videoMode, &width, &height); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return height; +#else + return this->camera.frame_height; +#endif + } + + bool + Dc1394Camera::getFeatureAbsoluteControl(const Feature& feature) const + { + dc1394bool_t hasAbsoluteControl; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_has_absolute_control(this->camera, static_cast< dc1394feature_t >(feature), &hasAbsoluteControl); +#else + int error = dc1394_has_absolute_control(this->handle, this->nodes[this->node], feature, &hasAbsoluteControl); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return hasAbsoluteControl; + } + + void + Dc1394Camera::getFeatureBoundaries(const Feature& feature, unsigned int& min, unsigned int& max) const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_get_boundaries(this->camera, static_cast< dc1394feature_t >(feature), &min, &max); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#else + int error = dc1394_get_min_value(this->handle, this->nodes[this->node], feature, &min); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_get_max_value(this->handle, this->nodes[this->node], feature, &max); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + + void + Dc1394Camera::getFeatureBoundariesAbsolute(const Feature& feature, float& min, float& max) const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_get_absolute_boundaries(this->camera, static_cast< dc1394feature_t >(feature), &min, &max); +#else + int error = dc1394_query_absolute_feature_min_max(this->handle, this->nodes[this->node], feature, &min, &max); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + Dc1394Camera::FeatureMode + Dc1394Camera::getFeatureMode(const Feature& feature) const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394feature_mode_t mode; + + dc1394error_t error = dc1394_feature_get_mode(this->camera, static_cast< dc1394feature_t >(feature), &mode); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return static_cast< FeatureMode >(mode); +#else + dc1394bool_t isOnePushInOperation; + + int error = dc1394_is_one_push_in_operation(this->handle, this->nodes[this->node], feature, &isOnePushInOperation); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + if (isOnePushInOperation) + { + return FEATURE_MODE_ONE_PUSH_AUTO; + } + + dc1394bool_t isFeatureAuto; + + error = dc1394_is_feature_auto(this->handle, this->nodes[this->node], feature, &isFeatureAuto); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + if (isFeatureAuto) + { + return FEATURE_MODE_AUTO; + } + + return FEATURE_MODE_MANUAL; +#endif + } + + void + Dc1394Camera::getFeatureModes(const Feature& feature, bool& hasManual, bool& hasAuto, bool& hasOnePushAuto) const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394feature_modes_t modes; + + dc1394error_t error = dc1394_feature_get_modes(this->camera, static_cast< dc1394feature_t >(feature), &modes); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + hasManual = false; + hasAuto = false; + hasOnePushAuto = false; + + for (::std::size_t i = 0; i < modes.num; ++i) + { + if (DC1394_FEATURE_MODE_MANUAL == modes.modes[i]) + { + hasManual = true; + } + else if (DC1394_FEATURE_MODE_AUTO == modes.modes[i]) + { + hasAuto = true; + } + else if (DC1394_FEATURE_MODE_ONE_PUSH_AUTO == modes.modes[i]) + { + hasOnePushAuto = true; + } + } +#else + int error = dc1394_has_manual_mode(this->handle, this->nodes[this->node], feature, reinterpret_cast< dc1394bool_t* >(&hasManual)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_has_auto_mode(this->handle, this->nodes[this->node], feature, reinterpret_cast< dc1394bool_t* >(&hasAuto)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_has_one_push_auto(this->handle, this->nodes[this->node], feature, reinterpret_cast< dc1394bool_t* >(&hasOnePushAuto)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + + unsigned int + Dc1394Camera::getFeatureValue(const Feature& feature) const + { + unsigned int value; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_get_value(this->camera, static_cast< dc1394feature_t >(feature), &value); +#else + int error = dc1394_get_feature_value(this->handle, this->nodes[this->node], feature, &value); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return value; + } + + float + Dc1394Camera::getFeatureValueAbsolute(const Feature& feature) const + { + float value; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_get_absolute_value(this->camera, static_cast< dc1394feature_t >(feature), &value); +#else + int error = dc1394_query_absolute_feature_value(this->handle, this->nodes[this->node], feature, &value); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return value; + } + + ::std::string + Dc1394Camera::getFilename() const + { + return this->filename; + } + + void + Dc1394Camera::getFormat7(VideoMode& videoMode, ColorCoding& colorCoding, unsigned int& left, unsigned int& top, unsigned int& width, unsigned int& height) const + { + colorCoding = this->colorCoding; + height = this->height; + left = this->left; + top = this->top; + videoMode = this->videoMode; + width = this->width; + } + + void + Dc1394Camera::getFormat7MaximumImageSize(const unsigned int& mode, unsigned int& width, unsigned& height) const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_format7_get_max_image_size(this->camera, static_cast< dc1394video_mode_t >(mode), &width, &height); +#else + int error = dc1394_query_format7_max_image_size(this->handle, this->nodes[this->node], mode, &width, &height); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + Dc1394Camera::Framerate + Dc1394Camera::getFramerate() const + { + Framerate framerate; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_get_framerate(this->camera, reinterpret_cast< dc1394framerate_t* >(&framerate)); +#else + int error = dc1394_get_video_framerate(this->handle, this->nodes[this->node], reinterpret_cast< unsigned int* >(&framerate)); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return framerate; + } + + unsigned int + Dc1394Camera::getNode() const + { + return this->node; + } + + int + Dc1394Camera::getNumCameras() const + { + return this->cameras; + } + + Dc1394Camera::OperationMode + Dc1394Camera::getOperationMode() const + { + OperationMode operationMode; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_get_operation_mode(this->camera, reinterpret_cast< dc1394operation_mode_t* >(&operationMode)); +#else + int error = dc1394_get_operation_mode(this->handle, this->nodes[this->node], reinterpret_cast< unsigned int* >(&operationMode)); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return operationMode; + } + + unsigned int + Dc1394Camera::getSize() const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + unsigned int width; + unsigned int height; + + dc1394error_t error = dc1394_get_image_size_from_video_mode(this->camera, this->videoMode, &width, &height); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return width * height * this->getBitsPerPixel() / 8; +#else + return this->getWidth() * this->getHeight() * this->getBitsPerPixel() / 8; +#endif + } + + Dc1394Camera::IsoSpeed + Dc1394Camera::getSpeed() const + { + IsoSpeed speed; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_get_iso_speed(this->camera, reinterpret_cast< dc1394speed_t* >(&speed)); +#else + unsigned int channel; + + int error = dc1394_get_iso_channel_and_speed(this->handle, this->nodes[this->node], &channel, reinterpret_cast< unsigned int* >(&speed)); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return speed; + } + + Dc1394Camera::VideoMode + Dc1394Camera::getVideoMode() const + { + VideoMode videoMode; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_get_mode(this->camera, reinterpret_cast< dc1394video_mode_t* >(&videoMode)); +#else + int error = dc1394_get_video_mode(this->handle, this->nodes[this->node], reinterpret_cast< unsigned int* >(&videoMode)); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return videoMode; + } + + unsigned int + Dc1394Camera::getWidth() const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + unsigned int width; + unsigned int height; + + dc1394error_t error = dc1394_get_image_size_from_video_mode(this->camera, this->videoMode, &width, &height); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return width; +#else + return this->camera.frame_width; +#endif + } + + void + Dc1394Camera::grab(unsigned char* image) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_capture_dequeue(this->camera, DC1394_CAPTURE_POLICY_WAIT, &this->frame); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + memcpy(image, this->frame->image, this->getSize()); + + error = dc1394_capture_enqueue(this->camera, this->frame); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#else + int error = dc1394_dma_multi_capture(&(this->camera), 1); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + memcpy(image, this->camera.capture_buffer, this->getSize()); + + error = dc1394_dma_done_with_buffer(&(this->camera)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + + bool + Dc1394Camera::hasFeatureAbsoluteControl(const Feature& feature) const + { + dc1394bool_t hasAbsoluteControl; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_has_absolute_control(this->camera, static_cast< dc1394feature_t >(feature), &hasAbsoluteControl); +#else + int error = dc1394_has_absolute_control(this->handle, this->nodes[this->node], feature, &hasAbsoluteControl); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return hasAbsoluteControl; + } + + bool + Dc1394Camera::isFeatureEnabled(const Feature& feature) const + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394switch_t isFeatureOn; + + dc1394error_t error = dc1394_feature_get_power(this->camera, static_cast< dc1394feature_t >(feature), &isFeatureOn); +#else + dc1394bool_t isFeatureOn; + + int error = dc1394_is_feature_on(this->handle, this->nodes[this->node], feature, &isFeatureOn); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return isFeatureOn; + } + + bool + Dc1394Camera::isFeaturePresent(const Feature& feature) const + { + dc1394bool_t isFeaturePresent; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_is_present(this->camera, static_cast< dc1394feature_t >(feature), &isFeaturePresent); +#else + int error = dc1394_is_feature_present(this->handle, this->nodes[this->node], feature, &isFeaturePresent); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return isFeaturePresent; + } + + bool + Dc1394Camera::isFeatureReadable(const Feature& feature) const + { + dc1394bool_t canReadOut; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_is_readable(this->camera, static_cast< dc1394feature_t >(feature), &canReadOut); +#else + int error = dc1394_can_read_out(this->handle, this->nodes[this->node], feature, &canReadOut); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return canReadOut; + } + + bool + Dc1394Camera::isFeatureSwitchable(const Feature& feature) const + { + dc1394bool_t canTurnOnOff; + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_is_switchable(this->camera, static_cast< dc1394feature_t >(feature), &canTurnOnOff); +#else + int error = dc1394_can_turn_on_off(this->handle, this->nodes[this->node], feature, &canTurnOnOff); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + return canTurnOnOff; + } + + void + Dc1394Camera::open() + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394camera_list_t* list; + + dc1394error_t error = dc1394_camera_enumerate(this->dc1394, &list); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + this->cameras = list->num; + + this->camera = dc1394_camera_new(this->dc1394, list->ids[this->node].guid); + + dc1394_camera_free_list(list); +#else + this->handle = dc1394_create_handle(0); + + if (NULL == this->handle) + { + throw Exception("Handle creation failure."); + } + + this->nodes = dc1394_get_camera_nodes(handle, &(this->cameras), this->port); + + if (NULL == this->nodes || 1 > this->cameras) + { + throw Exception("No cameras found."); + } + + int error = dc1394_get_camera_info(this->handle, this->nodes[this->node], &(this->info)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_get_iso_channel_and_speed(this->handle, this->nodes[this->node], &(this->channel), &this->speed); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_get_video_framerate(this->handle, this->nodes[this->node], reinterpret_cast< unsigned int* >(&this->framerate)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_get_video_mode(this->handle, this->nodes[this->node], reinterpret_cast< unsigned int* >(&this->videoMode)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + + void + Dc1394Camera::reset() + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_camera_reset(this->camera); +#else + int error = dc1394_init_camera(this->handle, this->nodes[this->node]); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + void + Dc1394Camera::setFeatureAbsoluteControl(const Feature& feature, const bool& doOn) + { +#if (LIBDC1394_VERSION_MAJOR > 10) +#else + int error = dc1394_absolute_setting_on_off(this->handle, this->nodes[this->node], feature, doOn); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + + void + Dc1394Camera::setFeatureEnabled(const Feature& feature, const bool& doOn) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_set_power(this->camera, static_cast< dc1394feature_t >(feature), static_cast< dc1394switch_t >(doOn)); +#else + int error = dc1394_feature_on_off(this->handle, this->nodes[this->node], feature, doOn); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + void + Dc1394Camera::setFeatureMode(const Feature& feature, const FeatureMode& mode) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_set_mode(this->camera, static_cast< dc1394feature_t >(feature), static_cast< dc1394feature_mode_t >(mode)); +#else + int error; + + switch (mode) + { + case FEATURE_MODE_MANUAL: + error = dc1394_auto_on_off(this->handle, this->nodes[this->node], feature, false); + break; + case FEATURE_MODE_AUTO: + error = dc1394_auto_on_off(this->handle, this->nodes[this->node], feature, true); + break; + case FEATURE_MODE_ONE_PUSH_AUTO: + error = dc1394_start_one_push_operation(this->handle, this->nodes[this->node], feature); + break; + default: + break; + } +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + void + Dc1394Camera::setFeatureValue(const Feature& feature, const unsigned int& value) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_set_value(this->camera, static_cast< dc1394feature_t >(feature), value); +#else + int error = dc1394_set_feature_value(this->handle, this->nodes[this->node], feature, value); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + void + Dc1394Camera::setFeatureValueAbsolute(const Feature& feature, const float& value) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_feature_set_absolute_value(this->camera, static_cast< dc1394feature_t >(feature), value); +#else + int error = dc1394_set_absolute_feature_value(this->handle, this->nodes[this->node], feature, value); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + void + Dc1394Camera::setFilename(const ::std::string& filename) + { + this->filename = filename; + } + + void + Dc1394Camera::setFormat7(const VideoMode& videoMode, const ColorCoding& colorCoding, const unsigned int& left, const unsigned int& top, const unsigned int& width, const unsigned int& height) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_format7_set_roi( + this->camera, + static_cast< dc1394video_mode_t >(videoMode), + static_cast< dc1394color_coding_t >(colorCoding), + DC1394_QUERY_FROM_CAMERA, + left, + top, + width, + height + ); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + + this->colorCoding = colorCoding; + this->height = height; + this->left = left; + this->top = top; + this->videoMode = videoMode; + this->width = width; + } + + void + Dc1394Camera::setFramerate(const Framerate& framerate) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_set_framerate(this->camera, static_cast< dc1394framerate_t >(framerate)); +#else + int error = dc1394_set_video_framerate(this->handle, this->nodes[node], framerate); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + this->framerate = framerate; + } + + void + Dc1394Camera::setNode(const unsigned int& node) + { + this->node = node; + } + + void + Dc1394Camera::setOperationMode(const OperationMode& mode) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_set_operation_mode(this->camera, static_cast< dc1394operation_mode_t >(mode)); +#else + int error = dc1394_set_operation_mode(this->handle, this->nodes[this->node], mode); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + } + + void + Dc1394Camera::setSpeed(const IsoSpeed& speed) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_set_iso_speed(this->camera, static_cast< dc1394speed_t >(speed)); +#else + int error = dc1394_set_iso_channel_and_speed(this->handle, this->nodes[node], this->channel, speed); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + this->speed = speed; + } + + void + Dc1394Camera::setVideoMode(const VideoMode& videoMode) + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_set_mode(this->camera, static_cast< dc1394video_mode_t >(videoMode)); +#else + unsigned int format; + + if (static_cast< VideoMode >(MODE_FORMAT0_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT0_MAX) >= this->videoMode) + { + format = FORMAT_VGA_NONCOMPRESSED; + } + else if (static_cast< VideoMode >(MODE_FORMAT1_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT1_MAX) >= this->videoMode) + { + format = FORMAT_SVGA_NONCOMPRESSED_1; + } + else if (static_cast< VideoMode >(MODE_FORMAT2_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT2_MAX) >= this->videoMode) + { + format = FORMAT_SVGA_NONCOMPRESSED_2; + } + else if (static_cast< VideoMode >(MODE_FORMAT6_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT6_MAX) >= this->videoMode) + { + format = FORMAT_STILL_IMAGE; + } + + int error = dc1394_set_video_format(this->handle, this->nodes[this->node], format); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_set_video_mode(this->handle, this->nodes[this->node], videoMode); +#endif + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + this->videoMode = videoMode; + } + + void + Dc1394Camera::start() + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = DC1394_SUCCESS;// = dc1394_capture_set_device_filename(this->camera, this->filename.c_str()); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_capture_setup(this->camera, this->buffer, 0); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_camera_set_power(this->camera, DC1394_ON); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_video_set_transmission(this->camera, DC1394_ON); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#else + int error; + + if (static_cast< VideoMode >(MODE_FORMAT7_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT7_MAX) >= this->videoMode) + { + error = dc1394_set_format7_color_coding_id(this->handle, this->nodes[this->node], this->videoMode, this->colorCoding); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_dma_setup_format7_capture( + this->handle, + this->nodes[this->node], + this->channel, + this->videoMode, + this->speed, + QUERY_FROM_CAMERA, + this->left, + this->top, + this->width, + this->height, + this->buffer, + this->drop, + this->filename.c_str(), + &(this->camera) + ); + } + else + { + unsigned int format; + + if (static_cast< VideoMode >(MODE_FORMAT0_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT0_MAX) >= this->videoMode) + { + format = FORMAT_VGA_NONCOMPRESSED; + } + else if (static_cast< VideoMode >(MODE_FORMAT1_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT1_MAX) >= this->videoMode) + { + format = FORMAT_SVGA_NONCOMPRESSED_1; + } + else if (static_cast< VideoMode >(MODE_FORMAT2_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT2_MAX) >= this->videoMode) + { + format = FORMAT_SVGA_NONCOMPRESSED_2; + } + else if (static_cast< VideoMode >(MODE_FORMAT6_MIN) <= this->videoMode && static_cast< VideoMode >(MODE_FORMAT6_MAX) >= this->videoMode) + { + format = FORMAT_STILL_IMAGE; + } + + error = dc1394_dma_setup_capture( + this->handle, + this->nodes[this->node], + this->channel, + format, + this->videoMode, + this->speed, + this->framerate, + this->buffer, + this->drop, + this->filename.c_str(), + &(this->camera) + ); + } + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_camera_on(this->handle, this->nodes[this->node]); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_start_iso_transmission(this->handle, this->nodes[this->node]); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + + void + Dc1394Camera::step() + { + } + + void + Dc1394Camera::stop() + { +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error = dc1394_video_set_transmission(this->camera, DC1394_OFF); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_camera_set_power(this->camera, DC1394_OFF); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_capture_stop(this->camera); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#else + int error = dc1394_stop_iso_transmission(this->handle, this->nodes[this->node]); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_camera_off(this->handle, this->nodes[this->node]); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_dma_unlisten(this->handle, &(this->camera)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } + + error = dc1394_dma_release_camera(this->handle, &(this->camera)); + + if (DC1394_SUCCESS != error) + { + throw Dc1394CameraException(error); + } +#endif + } + } +} diff --git a/src/rl/hal/Dc1394Camera.h b/src/rl/hal/Dc1394Camera.h new file mode 100644 index 00000000..68fce51a --- /dev/null +++ b/src/rl/hal/Dc1394Camera.h @@ -0,0 +1,378 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_DC1394CAMERA_H_ +#define _RL_HAL_DC1394CAMERA_H_ + +#include + +#if (LIBDC1394_VERSION_MAJOR > 10) +#include +#else +#include +#include +#endif + +#include "Camera.h" + +namespace rl +{ + namespace hal + { + class Dc1394Camera : public Camera + { + public: + enum ColorCoding + { +#if (LIBDC1394_VERSION_MAJOR > 10) + COLOR_CODING_MONO8 = ::DC1394_COLOR_CODING_MONO8, +#else + COLOR_CODING_MONO8 = ::COLOR_FORMAT7_MONO8, +#endif + COLOR_CODING_YUV411, + COLOR_CODING_YUV422, + COLOR_CODING_YUV444, + COLOR_CODING_RGB8, + COLOR_CODING_MONO16, + COLOR_CODING_RGB16, + COLOR_CODING_MONO16S, + COLOR_CODING_RGB16S, + COLOR_CODING_RAW8, + COLOR_CODING_RAW16 + }; + + enum Feature + { +#if (LIBDC1394_VERSION_MAJOR > 10) + FEATURE_BRIGHTNESS = ::DC1394_FEATURE_BRIGHTNESS, +#else + FEATURE_BRIGHTNESS = ::FEATURE_BRIGHTNESS, +#endif + FEATURE_EXPOSURE, + FEATURE_SHARPNESS, + FEATURE_WHITE_BALANCE, + FEATURE_HUE, + FEATURE_SATURATION, + FEATURE_GAMMA, + FEATURE_SHUTTER, + FEATURE_GAIN, + FEATURE_IRIS, + FEATURE_FOCUS, + FEATURE_TEMPERATURE, + FEATURE_TRIGGER, + FEATURE_TRIGGER_DELAY, + FEATURE_WHITE_SHADING, + FEATURE_FRAME_RATE, + FEATURE_ZOOM, + FEATURE_PAN, + FEATURE_TILT, + FEATURE_OPTICAL_FILTER, + FEATURE_CAPTURE_SIZE, + FEATURE_CAPTURE_QUALITY + }; + + enum FeatureMode + { +#if (LIBDC1394_VERSION_MAJOR > 10) + FEATURE_MODE_MANUAL = ::DC1394_FEATURE_MODE_MANUAL, +#else + FEATURE_MODE_MANUAL, +#endif + FEATURE_MODE_AUTO, + FEATURE_MODE_ONE_PUSH_AUTO + }; + + enum Framerate + { +#if (LIBDC1394_VERSION_MAJOR > 10) + FRAMERATE_1_875 = ::DC1394_FRAMERATE_1_875, +#else + FRAMERATE_1_875 = ::FRAMERATE_1_875, +#endif + FRAMERATE_3_75, + FRAMERATE_7_5, + FRAMERATE_15, + FRAMERATE_30, + FRAMERATE_60, + FRAMERATE_120, + FRAMERATE_240 + }; + + enum IsoSpeed + { +#if (LIBDC1394_VERSION_MAJOR > 10) + ISO_SPEED_100 = ::DC1394_ISO_SPEED_100, +#else + ISO_SPEED_100 = ::SPEED_100, +#endif + ISO_SPEED_200, + ISO_SPEED_400, + ISO_SPEED_800, + ISO_SPEED_1600, + ISO_SPEED_3200 + }; + + enum OperationMode + { +#if (LIBDC1394_VERSION_MAJOR > 10) + OPERATION_MODE_LEGACY = ::DC1394_OPERATION_MODE_LEGACY, +#else + OPERATION_MODE_LEGACY = ::OPERATION_MODE_LEGACY, +#endif + OPERATION_MODE_1394B + }; + + enum VideoMode + { +#if (LIBDC1394_VERSION_MAJOR > 10) + VIDEO_MODE_160x120_YUV444 = ::DC1394_VIDEO_MODE_160x120_YUV444, +#else + VIDEO_MODE_160x120_YUV444 = ::MODE_160x120_YUV444, +#endif + VIDEO_MODE_320x240_YUV422, + VIDEO_MODE_640x480_YUV411, + VIDEO_MODE_640x480_YUV422, + VIDEO_MODE_640x480_RGB8, + VIDEO_MODE_640x480_MONO8, + VIDEO_MODE_640x480_MONO16, +#if (LIBDC1394_VERSION_MAJOR > 10) + VIDEO_MODE_800x600_YUV422, +#else + VIDEO_MODE_800x600_YUV422 = ::MODE_800x600_YUV422, +#endif + VIDEO_MODE_800x600_RGB8, + VIDEO_MODE_800x600_MONO8, + VIDEO_MODE_1024x768_YUV422, + VIDEO_MODE_1024x768_RGB8, + VIDEO_MODE_1024x768_MONO8, + VIDEO_MODE_800x600_MONO16, + VIDEO_MODE_1024x768_MONO16, +#if (LIBDC1394_VERSION_MAJOR > 10) + VIDEO_MODE_1280x960_YUV422, +#else + VIDEO_MODE_1280x960_YUV422 = ::MODE_1280x960_YUV422, +#endif + VIDEO_MODE_1280x960_RGB8, + VIDEO_MODE_1280x960_MONO8, + VIDEO_MODE_1600x1200_YUV422, + VIDEO_MODE_1600x1200_RGB8, + VIDEO_MODE_1600x1200_MONO8, + VIDEO_MODE_1280x960_MONO16, + VIDEO_MODE_1600x1200_MONO16, +#if (LIBDC1394_VERSION_MAJOR > 10) + VIDEO_MODE_EXIF, +#else + VIDEO_MODE_EXIF = ::MODE_EXIF, +#endif +#if (LIBDC1394_VERSION_MAJOR > 10) + VIDEO_MODE_FORMAT7_0, +#else + VIDEO_MODE_FORMAT7_0 = ::MODE_FORMAT7_0, +#endif + VIDEO_MODE_FORMAT7_1, + VIDEO_MODE_FORMAT7_2, + VIDEO_MODE_FORMAT7_3, + VIDEO_MODE_FORMAT7_4, + VIDEO_MODE_FORMAT7_5, + VIDEO_MODE_FORMAT7_6, + VIDEO_MODE_FORMAT7_7 + }; + + Dc1394Camera(const ::std::string& filename = "", const unsigned int& node = 0); + + virtual ~Dc1394Camera(); + + void close(); + + unsigned int getBitsPerPixel() const; + + unsigned int getColorCodingDepth() const; + + unsigned int getHeight() const; + + bool getFeatureAbsoluteControl(const Feature& feature) const; + + void getFeatureBoundaries(const Feature& feature, unsigned int& min, unsigned int& max) const; + + void getFeatureBoundariesAbsolute(const Feature& feature, float& min, float& max) const; + + FeatureMode getFeatureMode(const Feature& feature) const; + + void getFeatureModes(const Feature& feature, bool& hasManual, bool& hasAuto, bool& hasOnePushAuto) const; + + unsigned int getFeatureValue(const Feature& feature) const; + + float getFeatureValueAbsolute(const Feature& feature) const; + + ::std::string getFilename() const; + + void getFormat7(VideoMode& videoMode, ColorCoding& colorCoding, unsigned int& left, unsigned int& top, unsigned int& width, unsigned int& height) const; + + void getFormat7MaximumImageSize(const unsigned int& mode, unsigned int& width, unsigned& height) const; + + Framerate getFramerate() const; + + unsigned int getNode() const; + + int getNumCameras() const; + + OperationMode getOperationMode() const; + + unsigned int getPort() const; + + unsigned int getSize() const; + + IsoSpeed getSpeed() const; + + VideoMode getVideoMode() const; + + unsigned int getWidth() const; + + void grab(unsigned char* image); + + bool hasFeatureAbsoluteControl(const Feature& feature) const; + + bool isFeatureEnabled(const Feature& feature) const; + + bool isFeaturePresent(const Feature& feature) const; + + bool isFeatureReadable(const Feature& feature) const; + + bool isFeatureSwitchable(const Feature& feature) const; + + void open(); + + void reset(); + + void setFeatureAbsoluteControl(const Feature& feature, const bool& doOn); + + void setFeatureEnabled(const Feature& feature, const bool& doOn); + + void setFeatureMode(const Feature& feature, const FeatureMode& mode); + + void setFeatureValue(const Feature& feature, const unsigned int& value); + + void setFeatureValueAbsolute(const Feature& feature, const float& value); + + void setFilename(const ::std::string& filename); + + void setFormat7(const VideoMode& videoMode, const ColorCoding& colorCoding, const unsigned int& left, const unsigned int& top, const unsigned int& width, const unsigned int& height); + + void setFramerate(const Framerate& framerate); + + void setNode(const unsigned int& node); + + void setOperationMode(const OperationMode& mode); + + void setPort(const unsigned int& port); + + void setSpeed(const IsoSpeed& speed); + + void setVideoMode(const VideoMode& mode); + + void start(); + + void step(); + + void stop(); + + protected: + + private: +#if (LIBDC1394_VERSION_MAJOR > 10) + unsigned int buffer; + + dc1394camera_t* camera; + + int cameras; + + ColorCoding colorCoding; + + dc1394_t* dc1394; + + ::std::string filename; + + dc1394video_frame_t* frame; + + Framerate framerate; + + unsigned int height; + + unsigned int left; + + unsigned int node; + + unsigned int speed; + + unsigned int top; + + VideoMode videoMode; + + unsigned int width; +#else + unsigned int buffer; + + dc1394_cameracapture camera; + + int cameras; + + unsigned int channel; + + ColorCoding colorCoding; + + unsigned int drop; + + ::std::string filename; + + Framerate framerate; + + raw1394handle_t handle; + + unsigned int height; + + dc1394_camerainfo info; + + unsigned int left; + + unsigned int node; + + nodeid_t* nodes; + + unsigned int port; + + unsigned int speed; + + unsigned int top; + + VideoMode videoMode; + + unsigned int width; +#endif + }; + } +} + +#endif // _RL_HAL_DC1394CAMERA_H_ diff --git a/src/rl/hal/Dc1394CameraException.cpp b/src/rl/hal/Dc1394CameraException.cpp new file mode 100644 index 00000000..3f836002 --- /dev/null +++ b/src/rl/hal/Dc1394CameraException.cpp @@ -0,0 +1,84 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Dc1394CameraException.h" + +namespace rl +{ + namespace hal + { +#if (LIBDC1394_VERSION_MAJOR > 10) + Dc1394CameraException::Dc1394CameraException(const dc1394error_t& error) : +#else + Dc1394CameraException::Dc1394CameraException(const int& error) : +#endif + DeviceException(""), + error(error) + { + } + + Dc1394CameraException::~Dc1394CameraException() throw() + { + } + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t +#else + int +#endif + Dc1394CameraException::getError() const + { + return this->error; + } + + const char* + Dc1394CameraException::what() const throw() + { + switch (this->error) + { + case DC1394_FAILURE: + return "Failure."; + break; +#if (LIBDC1394_VERSION_MAJOR > 10) + default: + return dc1394_error_get_string(this->error); + break; + } +#else + case DC1394_NO_FRAME: + return "No frame."; + break; + case DC1394_NO_CAMERA: + return "No camera."; + break; + default: + return "Unknown error."; + break; + } +#endif + } + } +} diff --git a/src/rl/hal/Dc1394CameraException.h b/src/rl/hal/Dc1394CameraException.h new file mode 100644 index 00000000..0a740a3b --- /dev/null +++ b/src/rl/hal/Dc1394CameraException.h @@ -0,0 +1,73 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_DC1394CAMERAEXCEPTION_H_ +#define _RL_HAL_DC1394CAMERAEXCEPTION_H_ + +#if (LIBDC1394_VERSION_MAJOR > 10) +#include +#else +#include +#endif + +#include "DeviceException.h" + +namespace rl +{ + namespace hal + { + class Dc1394CameraException : public DeviceException + { + public: +#if (LIBDC1394_VERSION_MAJOR > 10) + Dc1394CameraException(const dc1394error_t& error); +#else + Dc1394CameraException(const int& error); +#endif + + virtual ~Dc1394CameraException() throw(); + +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t getError() const; +#else + int getError() const; +#endif + + virtual const char* what() const throw(); + + protected: + + private: +#if (LIBDC1394_VERSION_MAJOR > 10) + dc1394error_t error; +#else + int error; +#endif + }; + } +} + +#endif // _RL_HAL_DC1394CAMERAEXCEPTION_H_ diff --git a/src/rl/hal/Device.cpp b/src/rl/hal/Device.cpp new file mode 100644 index 00000000..ffa2fc4d --- /dev/null +++ b/src/rl/hal/Device.cpp @@ -0,0 +1,67 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Device.h" + +namespace rl +{ + namespace hal + { + Device::Device() : + connected(false), + running(false) + { + } + + Device::~Device() + { + } + + bool + Device::isConnected() const + { + return this->connected; + } + + bool + Device::isRunning() const + { + return this->running; + } + + void + Device::setConnected(const bool& connected) + { + this->connected = connected; + } + + void + Device::setRunning(const bool& running) + { + this->running = running; + } + } +} diff --git a/src/rl/hal/Device.h b/src/rl/hal/Device.h new file mode 100644 index 00000000..263a1574 --- /dev/null +++ b/src/rl/hal/Device.h @@ -0,0 +1,83 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_DEVICE_H_ +#define _RL_HAL_DEVICE_H_ + +#include +#include + +namespace rl +{ + namespace hal + { + class Device + { + public: + Device(); + + virtual ~Device(); + + /** + * @pre stop() + */ + virtual void close() = 0; + + bool isConnected() const; + + bool isRunning() const; + + virtual void open() = 0; + + /** + * @pre open() + */ + virtual void start() = 0; + + /** + * @pre start() + */ + virtual void step() = 0; + + /** + * @pre open() + */ + virtual void stop() = 0; + + protected: + void setConnected(const bool& connected); + + void setRunning(const bool& running); + + private: + bool connected; + + bool running; + }; + } +} + +#endif // _RL_HAL_DEVICE_H_ diff --git a/src/rl/hal/DeviceException.cpp b/src/rl/hal/DeviceException.cpp new file mode 100644 index 00000000..3e59e00b --- /dev/null +++ b/src/rl/hal/DeviceException.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "DeviceException.h" + +namespace rl +{ + namespace hal + { + DeviceException::DeviceException(const ::std::string& what_arg) : + Exception(what_arg) + { + } + + DeviceException::~DeviceException() throw() + { + } + } +} diff --git a/src/rl/hal/DeviceException.h b/src/rl/hal/DeviceException.h new file mode 100644 index 00000000..c28ef208 --- /dev/null +++ b/src/rl/hal/DeviceException.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_DEVICEEXCEPTION_H_ +#define _RL_HAL_DEVICEEXCEPTION_H_ + +#include "Exception.h" + +namespace rl +{ + namespace hal + { + class DeviceException : public Exception + { + public: + DeviceException(const ::std::string& what_arg); + + virtual ~DeviceException() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_DEVICEEXCEPTION_H_ diff --git a/src/rl/hal/Exception.cpp b/src/rl/hal/Exception.cpp new file mode 100644 index 00000000..6aa53fcb --- /dev/null +++ b/src/rl/hal/Exception.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Exception.h" + +namespace rl +{ + namespace hal + { + Exception::Exception(const ::std::string& what_arg) : + ::std::runtime_error(what_arg) + { + } + + Exception::~Exception() throw() + { + } + } +} diff --git a/src/rl/hal/Exception.h b/src/rl/hal/Exception.h new file mode 100644 index 00000000..839d28ba --- /dev/null +++ b/src/rl/hal/Exception.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_EXCEPTION_H_ +#define _RL_HAL_EXCEPTION_H_ + +#include + +namespace rl +{ + namespace hal + { + class Exception : public ::std::runtime_error + { + public: + Exception(const ::std::string& what_arg); + + virtual ~Exception() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_EXCEPTION_H_ diff --git a/src/rl/hal/ForceSensor.cpp b/src/rl/hal/ForceSensor.cpp new file mode 100644 index 00000000..d28bfa9c --- /dev/null +++ b/src/rl/hal/ForceSensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "ForceSensor.h" + +namespace rl +{ + namespace hal + { + ForceSensor::ForceSensor() : + Device() + { + } + + ForceSensor::~ForceSensor() + { + } + } +} diff --git a/src/rl/hal/ForceSensor.h b/src/rl/hal/ForceSensor.h new file mode 100644 index 00000000..accf0425 --- /dev/null +++ b/src/rl/hal/ForceSensor.h @@ -0,0 +1,70 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_FORCESENSOR_H_ +#define _RL_HAL_FORCESENSOR_H_ + +#include + +#include "Device.h" + +namespace rl +{ + namespace hal + { + class ForceSensor : public virtual Device + { + public: + ForceSensor(); + + virtual ~ForceSensor(); + + /** + * @param forces [N] + */ + virtual void getForces(::rl::math::Vector& forces) const = 0; + + virtual ::std::size_t getForcesCount() const = 0; + + /** + * @return [N] + */ + virtual ::rl::math::Real getForcesMaximum(const ::std::size_t& i) const = 0; + + /** + * @return [N] + */ + virtual ::rl::math::Real getForcesMinimum(const ::std::size_t& i) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_FORCESENSOR_H_ diff --git a/src/rl/hal/Gnuplot.cpp b/src/rl/hal/Gnuplot.cpp new file mode 100644 index 00000000..06baf7ea --- /dev/null +++ b/src/rl/hal/Gnuplot.cpp @@ -0,0 +1,170 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +#include "ComException.h" +#include "Gnuplot.h" + +#ifdef WIN32 +#ifndef popen +#define popen _popen +#endif // popen +#ifndef pclose +#define pclose _pclose +#endif // pclose +#define GNUPLOT "pgnuplot.exe" +#else // WIN32 +#define GNUPLOT "gnuplot" +#endif // WIN32 + +namespace rl +{ + namespace hal + { + Gnuplot::Gnuplot( + const ::std::size_t& dof, + const ::rl::math::Real& updateRate, + const ::rl::math::Real& ymin, + const ::rl::math::Real& ymax, + const ::std::size_t& max + ) : + AxisController(dof, updateRate), + JointPositionActuator(dof, updateRate), + fp(NULL), + history(), + max(max), + ymax(ymax), + ymin(ymin) + { + } + + Gnuplot::~Gnuplot() + { + } + + void + Gnuplot::close() + { + if (-1 == pclose(this->fp)) + { + throw ComException(strerror(errno)); + } + + this->setConnected(false); + } + + void + Gnuplot::open() + { + this->fp = popen(GNUPLOT, "w"); + + if (NULL == this->fp) + { + throw ComException(strerror(errno)); + } + + fprintf(this->fp, "set xrange [0:%zi]\n", this->max); + + this->setRange(this->ymin, this->ymax); + + this->setConnected(true); + } + + void + Gnuplot::setJointPosition(const ::rl::math::Vector& q) + { + assert(this->getDof() == q.size()); + + this->history.push_back(q); + + if (this->history.size() > this->max) + { + this->history.pop_front(); + } + } + + void + Gnuplot::setRange(const ::rl::math::Real& ymin, const ::rl::math::Real& ymax) + { + this->ymin = ymin; + this->ymax = ymax; + + fprintf(this->fp, "set yrange [%f:%f]\n", this->ymin * ::rl::math::RAD2DEG, this->ymax * ::rl::math::RAD2DEG); + } + + void + Gnuplot::start() + { + this->history.clear(); + } + + void + Gnuplot::step() + { + if (!this->history.empty()) + { + fprintf(this->fp, "plot"); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + if (i > 0) + { + fprintf(this->fp, ","); + } + + fprintf(this->fp, " '-' with lines"); + } + + fprintf(this->fp, "\n"); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + ::std::size_t t = this->max - this->history.size(); + + for (::std::list< ::rl::math::Vector >::iterator j = this->history.begin(); j != this->history.end(); ++j) + { + fprintf(this->fp, "%zi %f\n", t, (*j)(i) * ::rl::math::RAD2DEG); + ++t; + } + + fprintf(this->fp, "e\n"); + } + + fflush(this->fp); + } + } + + void + Gnuplot::stop() + { + } + } +} diff --git a/src/rl/hal/Gnuplot.h b/src/rl/hal/Gnuplot.h new file mode 100644 index 00000000..6989de21 --- /dev/null +++ b/src/rl/hal/Gnuplot.h @@ -0,0 +1,81 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_GNUPLOT_H_ +#define _RL_HAL_GNUPLOT_H_ + +#include + +#include "JointPositionActuator.h" + +namespace rl +{ + namespace hal + { + class Gnuplot : public JointPositionActuator + { + public: + Gnuplot( + const ::std::size_t& dof, + const ::rl::math::Real& updateRate, + const ::rl::math::Real& ymin, + const ::rl::math::Real& ymax, + const ::std::size_t& max = 200 + ); + + virtual ~Gnuplot(); + + void close(); + + void open(); + + void setJointPosition(const ::rl::math::Vector& q); + + void setRange(const ::rl::math::Real& ymin, const ::rl::math::Real& ymax); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + FILE* fp; + + ::std::list< ::rl::math::Vector > history; + + ::std::size_t max; + + ::rl::math::Real ymax; + + ::rl::math::Real ymin; + }; + } +} + +#endif // _RL_HAL_GNUPLOT_H_ diff --git a/src/rl/hal/Gripper.cpp b/src/rl/hal/Gripper.cpp new file mode 100644 index 00000000..34aaa022 --- /dev/null +++ b/src/rl/hal/Gripper.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Gripper.h" + +namespace rl +{ + namespace hal + { + Gripper::Gripper() : + Device() + { + } + + Gripper::~Gripper() + { + } + } +} diff --git a/src/rl/hal/Gripper.h b/src/rl/hal/Gripper.h new file mode 100644 index 00000000..80dd3473 --- /dev/null +++ b/src/rl/hal/Gripper.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_GRIPPER_H_ +#define _RL_HAL_GRIPPER_H_ + +#include "Device.h" + +namespace rl +{ + namespace hal + { + class Gripper : public virtual Device + { + public: + Gripper(); + + virtual ~Gripper(); + + virtual void halt() = 0; + + virtual void release() = 0; + + virtual void shut() = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_GRIPPER_H_ diff --git a/src/rl/hal/JointPositionActuator.cpp b/src/rl/hal/JointPositionActuator.cpp new file mode 100644 index 00000000..62dc4fbc --- /dev/null +++ b/src/rl/hal/JointPositionActuator.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "JointPositionActuator.h" + +namespace rl +{ + namespace hal + { + JointPositionActuator::JointPositionActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + JointPositionActuator::~JointPositionActuator() + { + } + } +} diff --git a/src/rl/hal/JointPositionActuator.h b/src/rl/hal/JointPositionActuator.h new file mode 100644 index 00000000..2d2536d7 --- /dev/null +++ b/src/rl/hal/JointPositionActuator.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JOINTPOSITIONACTUATOR_H_ +#define _RL_HAL_JOINTPOSITIONACTUATOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class JointPositionActuator : public virtual AxisController + { + public: + JointPositionActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~JointPositionActuator(); + + virtual void setJointPosition(const ::rl::math::Vector& q) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_JOINTPOSITIONACTUATOR_H_ diff --git a/src/rl/hal/JointPositionSensor.cpp b/src/rl/hal/JointPositionSensor.cpp new file mode 100644 index 00000000..bfc957a1 --- /dev/null +++ b/src/rl/hal/JointPositionSensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "JointPositionSensor.h" + +namespace rl +{ + namespace hal + { + JointPositionSensor::JointPositionSensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + JointPositionSensor::~JointPositionSensor() + { + } + } +} diff --git a/src/rl/hal/JointPositionSensor.h b/src/rl/hal/JointPositionSensor.h new file mode 100644 index 00000000..eedbe895 --- /dev/null +++ b/src/rl/hal/JointPositionSensor.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JOINTPOSITIONSENSOR_H_ +#define _RL_HAL_JOINTPOSITIONSENSOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class JointPositionSensor : public virtual AxisController + { + public: + JointPositionSensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~JointPositionSensor(); + + virtual void getJointPosition(::rl::math::Vector& q) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_JOINTPOSITIONSENSOR_H_ diff --git a/src/rl/hal/JointTorqueActuator.cpp b/src/rl/hal/JointTorqueActuator.cpp new file mode 100644 index 00000000..31666e2a --- /dev/null +++ b/src/rl/hal/JointTorqueActuator.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "JointTorqueActuator.h" + +namespace rl +{ + namespace hal + { + JointTorqueActuator::JointTorqueActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + JointTorqueActuator::~JointTorqueActuator() + { + } + } +} diff --git a/src/rl/hal/JointTorqueActuator.h b/src/rl/hal/JointTorqueActuator.h new file mode 100644 index 00000000..7a45ccb2 --- /dev/null +++ b/src/rl/hal/JointTorqueActuator.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JOINTTORQUEACTUATOR_H_ +#define _RL_HAL_JOINTTORQUEACTUATOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class JointTorqueActuator : public virtual AxisController + { + public: + JointTorqueActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~JointTorqueActuator(); + + virtual void setJointTorque(const ::rl::math::Vector& tau) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_JOINTTORQUEACTUATOR_H_ diff --git a/src/rl/hal/JointTorqueSensor.cpp b/src/rl/hal/JointTorqueSensor.cpp new file mode 100644 index 00000000..069cb4cf --- /dev/null +++ b/src/rl/hal/JointTorqueSensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "JointTorqueSensor.h" + +namespace rl +{ + namespace hal + { + JointTorqueSensor::JointTorqueSensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + JointTorqueSensor::~JointTorqueSensor() + { + } + } +} diff --git a/src/rl/hal/JointTorqueSensor.h b/src/rl/hal/JointTorqueSensor.h new file mode 100644 index 00000000..d22a51a7 --- /dev/null +++ b/src/rl/hal/JointTorqueSensor.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JOINTTORQUESENSOR_H_ +#define _RL_HAL_JOINTTORQUESENSOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class JointTorqueSensor : public virtual AxisController + { + public: + JointTorqueSensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~JointTorqueSensor(); + + virtual void getJointTorque(::rl::math::Vector& tau) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_JOINTTORQUESENSOR_H_ diff --git a/src/rl/hal/JointVelocityActuator.cpp b/src/rl/hal/JointVelocityActuator.cpp new file mode 100644 index 00000000..e6639911 --- /dev/null +++ b/src/rl/hal/JointVelocityActuator.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "JointVelocityActuator.h" + +namespace rl +{ + namespace hal + { + JointVelocityActuator::JointVelocityActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + JointVelocityActuator::~JointVelocityActuator() + { + } + } +} diff --git a/src/rl/hal/JointVelocityActuator.h b/src/rl/hal/JointVelocityActuator.h new file mode 100644 index 00000000..76134e87 --- /dev/null +++ b/src/rl/hal/JointVelocityActuator.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JOINTVELOCITYACTUATOR_H_ +#define _RL_HAL_JOINTVELOCITYACTUATOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class JointVelocityActuator : public virtual AxisController + { + public: + JointVelocityActuator(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~JointVelocityActuator(); + + virtual void setJointVelocity(const ::rl::math::Vector& qd) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_JOINTVELOCITYACTUATOR_H_ diff --git a/src/rl/hal/JointVelocitySensor.cpp b/src/rl/hal/JointVelocitySensor.cpp new file mode 100644 index 00000000..7be9875d --- /dev/null +++ b/src/rl/hal/JointVelocitySensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "JointVelocitySensor.h" + +namespace rl +{ + namespace hal + { + JointVelocitySensor::JointVelocitySensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate) : + AxisController(dof, updateRate) + { + } + + JointVelocitySensor::~JointVelocitySensor() + { + } + } +} diff --git a/src/rl/hal/JointVelocitySensor.h b/src/rl/hal/JointVelocitySensor.h new file mode 100644 index 00000000..d0690639 --- /dev/null +++ b/src/rl/hal/JointVelocitySensor.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JOINTVELOCITYSENSOR_H_ +#define _RL_HAL_JOINTVELOCITYSENSOR_H_ + +#include + +#include "AxisController.h" + +namespace rl +{ + namespace hal + { + class JointVelocitySensor : public virtual AxisController + { + public: + JointVelocitySensor(const ::std::size_t& dof, const ::rl::math::Real& updateRate); + + virtual ~JointVelocitySensor(); + + virtual void getJointVelocity(::rl::math::Vector& qd) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_JOINTVELOCITYSENSOR_H_ diff --git a/src/rl/hal/Jr3.cpp b/src/rl/hal/Jr3.cpp new file mode 100644 index 00000000..c482d05f --- /dev/null +++ b/src/rl/hal/Jr3.cpp @@ -0,0 +1,188 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "Comedi.h" +#include "DeviceException.h" +#include "Jr3.h" + +namespace rl +{ + namespace hal + { + Jr3::Jr3(const ::std::string& filename) : + SixAxisForceTorqueSensor(), + comedi(new Comedi(filename)), + values(), + zeroes() + { + for (::std::size_t i = 0; i < 6; ++i) + { + this->values[i] = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + this->zeroes[i] = 0; + } + } + + Jr3::~Jr3() + { + delete this->comedi; + } + + void + Jr3::bias() + { + for (::std::size_t i = 0; i < 6; ++i) + { + this->zeroes[i] = this->values[i]; + } + } + + void + Jr3::close() + { + this->comedi->close(); + this->setConnected(false); + } + + void + Jr3::getForces(::rl::math::Vector& forces) const + { + assert(forces.size() >= 3); + + for (::std::size_t i = 0; i < 3; ++i) + { + forces(i) = (this->values[i] - this->zeroes[i]) * 1000; + } + } + + ::rl::math::Real + Jr3::getForcesMaximum(const ::std::size_t& i) const + { + assert(i < 4); + + return -this->comedi->getMax(0, i); + } + + ::rl::math::Real + Jr3::getForcesMinimum(const ::std::size_t& i) const + { + assert(i < 4); + + return -this->comedi->getMax(0, i); + } + + void + Jr3::getForcesTorques(::rl::math::Vector& forcesTorques) const + { + assert(forcesTorques.size() >= 6); + + for (::std::size_t i = 0; i < 6; ++i) + { + forcesTorques(i) = (this->values[i] - this->zeroes[i]) * 1000; + } + } + + ::rl::math::Real + Jr3::getForcesTorquesMaximum(const ::std::size_t& i) const + { + assert(i < 7); + + return this->comedi->getMax(0, i); + } + + ::rl::math::Real + Jr3::getForcesTorquesMinimum(const ::std::size_t& i) const + { + assert(i < 7); + + return -this->comedi->getMax(0, i); + } + + void + Jr3::getTorques(::rl::math::Vector& torques) const + { + assert(torques.size() >= 3); + + for (::std::size_t i = 3; i < 6; ++i) + { + torques(i) = (this->values[i] - this->zeroes[i]) * 1000; + } + } + + ::rl::math::Real + Jr3::getTorquesMaximum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->comedi->getMax(0, 3 + i); + } + + ::rl::math::Real + Jr3::getTorquesMinimum(const ::std::size_t& i) const + { + assert(i < 4); + + return -this->comedi->getMax(0, 3 + i); + } + + void + Jr3::open() + { + this->comedi->open(); + this->setConnected(true); + } + + void + Jr3::resetBias() + { + for (::std::size_t i = 0; i < 6; ++i) + { + this->zeroes[i] = 0; + } + } + + void + Jr3::start() + { + } + + void + Jr3::step() + { + for (::std::size_t i = 0; i < 6; ++i) + { + this->comedi->read(0, i, this->values[i]); + } + } + + void + Jr3::stop() + { + } + } +} diff --git a/src/rl/hal/Jr3.h b/src/rl/hal/Jr3.h new file mode 100644 index 00000000..f5404f0a --- /dev/null +++ b/src/rl/hal/Jr3.h @@ -0,0 +1,91 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_JR3_H_ +#define _RL_HAL_JR3_H_ + +#include + +#include "SixAxisForceTorqueSensor.h" + +namespace rl +{ + namespace hal + { + class Comedi; + + class Jr3 : public SixAxisForceTorqueSensor + { + public: + Jr3(const ::std::string& filename = "/dev/comedi0"); + + virtual ~Jr3(); + + void bias(); + + void close(); + + void getForces(::rl::math::Vector& forces) const; + + ::rl::math::Real getForcesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getForcesMinimum(const ::std::size_t& i) const; + + void getForcesTorques(::rl::math::Vector& forcesTorques) const; + + ::rl::math::Real getForcesTorquesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getForcesTorquesMinimum(const ::std::size_t& i) const; + + void getTorques(::rl::math::Vector& torques) const; + + ::rl::math::Real getTorquesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getTorquesMinimum(const ::std::size_t& i) const; + + void open(); + + void resetBias(); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + Comedi* comedi; + + float values[6]; + + float zeroes[6]; + }; + } +} + +#endif // _RL_HAL_JR3_H_ diff --git a/src/rl/hal/LeuzeRs4.cpp b/src/rl/hal/LeuzeRs4.cpp new file mode 100644 index 00000000..b1d207c0 --- /dev/null +++ b/src/rl/hal/LeuzeRs4.cpp @@ -0,0 +1,729 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "ComException.h" +#include "endian.h" +#include "DeviceException.h" +#include "LeuzeRs4.h" +#include "Serial.h" +#include "TimeoutException.h" + +namespace rl +{ + namespace hal + { + inline + const uint8_t& + get(const uint8_t*& ptr) + { + if (0x00 == ptr[-1] && 0x00 == ptr[0]) + { + ++ptr; + ++ptr; + return ptr[-2]; + } + else + { + ++ptr; + return ptr[-1]; + } + + } + + inline + void + set(const uint8_t& value, uint8_t*& ptr, ::std::size_t& len) + { + ptr[0] = value; + ++ptr; + ++len; + + if (0x00 == ptr[-2] && 0x00 == ptr[-1]) + { + ptr[0] = 0xFF; + ++ptr; + ++len; + } + } + + LeuzeRs4::LeuzeRs4( + const ::std::string& filename, + const BaudRate& baudRate, + const ::std::string& password + ) : + Lidar(), + baudRate(BAUDRATE_57600BPS), + data(), + desired(baudRate), + far1(false), + far2(false), + fn1Fn2(false), + near1(false), + near2(false), + password(password), + serial( + new Serial( + filename, + Serial::BAUDRATE_57600BPS, + Serial::DATABITS_8BITS, + Serial::FLOWCONTROL_OFF, + Serial::PARITY_NOPARITY, + Serial::STOPBITS_1BIT + ) + ), + startIndex(0xFFFF), + stepSize(0xFFFF), + stopIndex(0xFFFF), + timer(), + type(0) + { + assert(password.length() < 9); + } + + LeuzeRs4::~LeuzeRs4() + { + delete this->serial; + } + + void + LeuzeRs4::close() + { + assert(this->isConnected()); + +// if (MONITORING_SINGLE != this->monitoring) +// { +// this->setMonitoring(MONITORING_SINGLE); +// } +// +// if (BAUDRATE_57600BPS != this->baudRate) +// { +// this->setBaudRate(BAUDRATE_57600BPS); +// } + + this->serial->close(); + + this->setConnected(false); + } + + uint8_t + LeuzeRs4::crc(const uint8_t* buf, const ::std::size_t& len) const + { + uint8_t checksum = buf[0]; + + for (::std::size_t i = 1; i < len; ++i) + { + checksum ^= buf[i]; + } + + if (0x00 == checksum) + { + checksum = 0xFF; + } + + return checksum; + } + + LeuzeRs4::BaudRate + LeuzeRs4::getBaudRate() const + { + return this->baudRate; + } + + void + LeuzeRs4::getDistances(::rl::math::Vector& distances) const + { + assert(this->isConnected()); + assert(distances.size() >= this->getDistancesCount()); + + const uint8_t* ptr; + + if (this->data[3] & 2) + { + ptr = this->data + 5; + + if ((this->data[3] & 3) && (this->data[4] & 128)) + { + ptr = this->data + 6; + } + } + else + { + ptr = this->data + 4; + } + + const uint8_t& number1 = get(ptr); + get(ptr);//bool motion = get(ptr) & 64 ? true : false; + const uint8_t& number2 = get(ptr); + get(ptr); + const uint8_t& number3 = get(ptr); + get(ptr); + const uint8_t& number4 = get(ptr); + get(ptr); + + /*int number = */hostEndianDoubleWord(hostEndianWord(number1, number2), hostEndianWord(number3, number4)); + + int step = get(ptr); + + const uint8_t& startHigh = get(ptr); + const uint8_t& startLow = get(ptr); + int start = hostEndianWord(startHigh, startLow); + + const uint8_t& stopHigh = get(ptr); + const uint8_t& stopLow = get(ptr); + int stop = hostEndianWord(stopHigh, stopLow); + + for (int i = 0; i < (stop - start) / step + 1; ++i) + { + const uint8_t& dataHigh = get(ptr); + const uint8_t& dataLow = get(ptr); + distances(distances.size() - 1 - i) = hostEndianWord(dataHigh, dataLow & 254) / 1000.0f; + } + } + + ::std::size_t + LeuzeRs4::getDistancesCount() const + { + assert(this->isConnected()); + + return (this->stopIndex - this->startIndex) / this->stepSize + 1; + } + + ::rl::math::Real + LeuzeRs4::getDistancesMaximum(const ::std::size_t& i) const + { + assert(i < this->getDistancesCount()); + + return 4.0f; + } + + ::rl::math::Real + LeuzeRs4::getDistancesMinimum(const ::std::size_t& i) const + { + assert(i < this->getDistancesCount()); + + return 0.0f; + } + + ::rl::math::Real + LeuzeRs4::getResolution() const + { + assert(this->isConnected()); + + return this->stepSize * 0.36f * ::rl::math::DEG2RAD; + } + + ::rl::math::Real + LeuzeRs4::getStartAngle() const + { + assert(this->isConnected()); + + return (-5 + this->startIndex * 0.36f) * ::rl::math::DEG2RAD; + } + + ::rl::math::Real + LeuzeRs4::getStopAngle() const + { + assert(this->isConnected()); + + return (185 - (528 - this->stopIndex) * 0.36f) * ::rl::math::DEG2RAD; + } + + void + LeuzeRs4::open() + { + this->serial->open(); + + this->setConnected(true); + +#if 0 + uint8_t buf[1099]; + + // synchronize baud rates + + buf[4] = 0x20; + buf[5] = 0x42; + + Serial::BaudRate baudRates[6] = { +// Serial::BAUDRATE_625000BPS, +// Serial::BAUDRATE_345600BPS, + Serial::BAUDRATE_115200BPS, + Serial::BAUDRATE_57600BPS, + Serial::BAUDRATE_38400BPS, + Serial::BAUDRATE_19200BPS, + Serial::BAUDRATE_9600BPS, + Serial::BAUDRATE_4800BPS + }; + + for (::std::size_t i = 0; i < 6; ++i) + { + this->serial->setBaudRate(baudRates[i]); + this->serial->changeParameters(); + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + + if (this->waitAck()) + { + break; + } + + if (5 == i) + { + throw DeviceException("could not sync baud rate."); + } + } + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 1 + 2, 0xA0); + + switch (buf[5]) + { + case 0x01: + throw DeviceException("mode switchover not possible due to incorrect password"); + break; + case 0x02: + throw DeviceException("mode switchover not possible due to a fault in the LMS2xx"); + break; + default: + break; + } + + // status + + buf[4] = 0x31; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 152 + 1 + 2, 0xB1); + + // baud rate + + switch (buf[120]) + { +#ifndef WIN32 + case 0x01: + this->baudRate = BAUDRATE_500000BPS; + break; +#endif // WIN32 + case 0x19: + this->baudRate = BAUDRATE_38400BPS; + break; + case 0x33: + this->baudRate = BAUDRATE_19200BPS; + break; + case 0x67: + this->baudRate = BAUDRATE_9600BPS; + break; + default: + break; + } + + if (this->desired != this->baudRate) + { + this->setBaudRate(this->desired); + } + + // monitoring + + if (0x25 != buf[12]) + { + this->setMonitoring(MONITORING_SINGLE); + } +#endif + } + + ::std::size_t + LeuzeRs4::recv(uint8_t* buf, const ::std::size_t& len) + { + assert(this->isConnected()); + assert(len > 7); + + uint8_t* ptr; + ::std::size_t sumbytes; + ::std::size_t numbytes; + + do + { + do + { + ptr = buf; + sumbytes = 0; + + do + { + numbytes = this->serial->read(ptr, 1); + } + while (buf[0] != 0x00); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->serial->read(ptr, 1); + } + while (buf[1] != 0x00); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->serial->read(ptr, 1); + } + while (buf[2] == 0x00 || buf[2] == 0xFF); + + ptr += numbytes; + sumbytes += numbytes; + + do + { + numbytes = this->serial->read(ptr, 1); + + ptr += numbytes; + sumbytes += numbytes; + + if (sumbytes > 1099 - 1) + { + throw DeviceException("invalid data length"); + return -1; + } + } + while (*(ptr - 1) != 0x00 || *(ptr - 2) != 0x00 || *(ptr - 3) != 0x00); + + if (this->crc(buf, sumbytes - 4) != buf[sumbytes - 4]) + { + throw DeviceException("checksum error"); + } + + switch (buf[2]) + { + case 0x17: + throw DeviceException("not acknowledged"); + break; + case 0x53: + throw DeviceException("error"); + break; + case 0x54: + throw DeviceException("warning"); + break; + default: + break; + } + + // Option 1 + + if (buf[3] & 16) + { + throw DeviceException("error / malfunction"); + } + + if (buf[3] & 2) + { + // Option 2 + + this->near1 = (buf[4] & 1) ? true : false; + + this->far1 = (buf[4] & 2) ? true : false; + + if (buf[4] & 8) + { + throw DeviceException("malfunction"); + } + + if (buf[4] & 16) + { + throw DeviceException("restart inhibit"); + } + + this->near2 = (buf[4] & 32) ? true : false; + + this->far2 = (buf[4] & 64) ? true : false; + + if ((buf[3] & 3) && (buf[4] & 128)) + { + // Option 3 + + this->fn1Fn2 = (buf[5] & 64) ? true : false; + } + } + + return sumbytes; + } + + void + LeuzeRs4::reset() + { + assert(this->isConnected()); + + uint8_t buf[1099]; + + buf[2] = 0x10; + buf[3] = 0x21; + + for (::std::size_t i = 0; i < this->password.length(); ++i) + { + buf[4 + i] = this->password[i]; + } + + for (::std::size_t i = this->password.length(); i < 8; ++i) + { + buf[4 + i] = 0xFF; + } + + uint8_t buf2[1099]; + + this->send(buf, 2 + 1 + 1 + 8 + 1 + 3); + + do + { + try + { + this->recv(buf2, 1099);//2 + 1 + 1 + 1 + 3); + } + catch (const DeviceException&) + { + } + } + while (0x23 != buf2[2]); + } + + void + LeuzeRs4::send(uint8_t* buf, const ::std::size_t& len) + { + assert(this->isConnected()); + assert(len > 7); + + buf[0] = 0x00; + buf[1] = 0x00; + + buf[len - 4] = this->crc(buf, len - 4); + + buf[len - 3] = 0x00; + buf[len - 2] = 0x00; + buf[len - 1] = 0x00; + + ::std::size_t numbytes; + + for (::std::size_t i = 0; i < len; ++i) + { + if (i > 0) + { + ::rl::util::Timer::sleep(40.0f / 1000.0f); + } + + do + { + numbytes = this->serial->write(&buf[i], 1); + } + while (numbytes < 1); + } + + this->serial->flush(true, false); + } + +#if 0 + void + LeuzeRs4::setBaudRate(const BaudRate& baudRate) + { + assert(this->isConnected()); + + uint8_t buf[1099]; + + buf[2] = 0x19; + buf[3] = 0x41; + + uint8_t* ptr = buf + 4; + ::std::size_t len = 0; + + switch (baudRate) + { + case BAUDRATE_4800BPS: +::std::cout << "setting to 4,800 baud" << ::std::endl; + set(0x00, ptr, len); + set(0x00, ptr, len); + break; + case BAUDRATE_9600BPS: +::std::cout << "setting to 9,600 baud" << ::std::endl; + set(0x00, ptr, len); + set(0x01, ptr, len); + break; + case BAUDRATE_19200BPS: +::std::cout << "setting to 19,200 baud" << ::std::endl; + set(0x00, ptr, len); + set(0x02, ptr, len); + break; + case BAUDRATE_38400BPS: +::std::cout << "setting to 38,400 baud" << ::std::endl; + set(0x00, ptr, len); + set(0x03, ptr, len); + break; + case BAUDRATE_57600BPS: +::std::cout << "setting to 57,600 baud" << ::std::endl; + set(0x00, ptr, len); + set(0x04, ptr, len); + break; + case BAUDRATE_115200BPS: +::std::cout << "setting to 115,200 baud" << ::std::endl; + set(0x00, ptr, len); + set(0x05, ptr, len); + break; +// case BAUDRATE_345600BPS: +//::std::cout << "setting to 345,600 baud" << ::std::endl; +// set(0x00, ptr, len); +// set(0x06, ptr, len); +// break; +// case BAUDRATE_625000BPS: +//::std::cout << "setting to 625,000 baud" << ::std::endl; +// set(0x00, ptr, len); +// set(0xFF, ptr, len); +// break; + default: + break; + } + + uint8_t buf2[1099]; + + do + { + this->send(buf, 2 + 1 + 1 + len + 1 + 3); + this->recv(buf2, 1099);//2 + 1 + 1 + 1 + 3); + } + while (0x16 != buf2[2]); + + switch (baudRate) + { + case BAUDRATE_4800BPS: + this->serial->setBaudRate(Serial::BAUDRATE_4800BPS); + break; + case BAUDRATE_9600BPS: + this->serial->setBaudRate(Serial::BAUDRATE_9600BPS); + break; + case BAUDRATE_19200BPS: + this->serial->setBaudRate(Serial::BAUDRATE_19200BPS); + break; + case BAUDRATE_38400BPS: + this->serial->setBaudRate(Serial::BAUDRATE_38400BPS); + break; + case BAUDRATE_57600BPS: + this->serial->setBaudRate(Serial::BAUDRATE_57600BPS); + break; + case BAUDRATE_115200BPS: + this->serial->setBaudRate(Serial::BAUDRATE_115200BPS); + break; +// case BAUDRATE_345600BPS: +// this->serial->setBaudRate(Serial::BAUDRATE_345600BPS); +// break; +// case BAUDRATE_625000BPS: +// this->serial->setBaudRate(Serial::BAUDRATE_625000BPS); +// break; + default: + break; + } + + this->serial->changeParameters(); + + this->baudRate = baudRate; + } + + void + LeuzeRs4::setOutputParameters(const uint16_t& startIndex, const uint16_t& stopIndex, const uint16_t& stepSize, const uint16_t& type) + { + assert(this->isConnected()); + + uint8_t buf[1099]; + + buf[2] = 0x1A; + buf[3] = 0x41; + + uint8_t* ptr = buf + 4; + ::std::size_t len = 0; + + set(highByteFromHostEndian(startIndex), ptr, len); + set(lowByteFromHostEndian(startIndex), ptr, len); + + set(highByteFromHostEndian(stopIndex), ptr, len); + set(lowByteFromHostEndian(stopIndex), ptr, len); + + set(highByteFromHostEndian(stepSize), ptr, len); + set(lowByteFromHostEndian(stepSize), ptr, len); + + set(highByteFromHostEndian(type), ptr, len); + set(lowByteFromHostEndian(type), ptr, len); + + uint8_t buf2[1099]; + + do + { + this->send(buf, 2 + 1 + 1 + len + 1 + 3); + this->recv(buf2, 1099);//2 + 1 + 1 + 1 + 3); + } + while (0x16 != buf2[2]); + + this->startIndex = startIndex; + this->stepSize = stepSize; + this->stopIndex = stopIndex; + this->type = type; + } +#endif + + void + LeuzeRs4::start() + { + assert(this->isConnected()); + } + + void + LeuzeRs4::step() + { + assert(this->isConnected()); + + if (2 == this->type) + { + uint8_t buf[1099]; + + buf[2] = 0x24; + buf[3] = 0x01; + + this->send(buf, 2 + 1 + 1 + 1 + 3); + } + + this->recv(this->data, 1099); + + if (0x23 != this->data[2]) + { + throw DeviceException("incorrect reply"); + } + } + + void + LeuzeRs4::stop() + { + assert(this->isConnected()); + } + } +} diff --git a/src/rl/hal/LeuzeRs4.h b/src/rl/hal/LeuzeRs4.h new file mode 100644 index 00000000..133536c9 --- /dev/null +++ b/src/rl/hal/LeuzeRs4.h @@ -0,0 +1,152 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_LEUZERS4_H_ +#define _RL_HAL_LEUZERS4_H_ + +#include + +#include "Device.h" +#include "Lidar.h" +#include "types.h" + +namespace rl +{ + namespace hal + { + class Serial; + + class LeuzeRs4 : public Lidar + { + public: + enum BaudRate + { + /** 4,800 bps. */ + BAUDRATE_4800BPS, + /** 9,600 bps. */ + BAUDRATE_9600BPS, + /** 19,200 bps. */ + BAUDRATE_19200BPS, + /** 38,400 bps. */ + BAUDRATE_38400BPS, + /** 57,600 bps. */ + BAUDRATE_57600BPS, + /** 115,200 bps. */ + BAUDRATE_115200BPS, + /** 345,600 bps. */ + BAUDRATE_345600BPS, + /** 625,000 bps. */ + BAUDRATE_625000BPS + }; + + /** + * @param password String with 8 characters. + */ + LeuzeRs4( + const ::std::string& device = "/dev/ttyS0", + const BaudRate& baudRate = BAUDRATE_57600BPS, + const ::std::string& password = "ROD4LE" + ); + + virtual ~LeuzeRs4(); + + void close(); + + BaudRate getBaudRate() const; + + void getDistances(::rl::math::Vector& distances) const; + + ::std::size_t getDistancesCount() const; + + ::rl::math::Real getDistancesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getDistancesMinimum(const ::std::size_t& i) const; + + ::rl::math::Real getResolution() const; + + ::rl::math::Real getStartAngle() const; + + ::rl::math::Real getStopAngle() const; + + void open(); + + void reset(); + +#if 0 + void setBaudRate(const BaudRate& baudRate); + + void setOutputParameters(const uint16_t& startIndex, const uint16_t& stopIndex, const uint16_t& step, const uint16_t& type); +#endif + + void start(); + + void step(); + + void stop(); + + protected: + + private: + uint8_t crc(const uint8_t* buf, const ::std::size_t& len) const; + + ::std::size_t recv(uint8_t* buf, const ::std::size_t& len); + + void send(uint8_t* buf, const ::std::size_t& len); + + BaudRate baudRate; + + uint8_t data[1099]; + + BaudRate desired; + + bool far1; + + bool far2; + + bool fn1Fn2; + + bool near1; + + bool near2; + + ::std::string password; + + Serial* serial; + + uint16_t startIndex; + + uint16_t stepSize; + + uint16_t stopIndex; + + ::rl::util::Timer timer; + + uint16_t type; + }; + } +} + +#endif // _RL_HAL_LEUZERS4_H_ diff --git a/src/rl/hal/Lidar.cpp b/src/rl/hal/Lidar.cpp new file mode 100644 index 00000000..97be134a --- /dev/null +++ b/src/rl/hal/Lidar.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Lidar.h" + +namespace rl +{ + namespace hal + { + Lidar::Lidar() : + RangeSensor() + { + } + + Lidar::~Lidar() + { + } + } +} diff --git a/src/rl/hal/Lidar.h b/src/rl/hal/Lidar.h new file mode 100644 index 00000000..ad5951cd --- /dev/null +++ b/src/rl/hal/Lidar.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_LIDAR_H_ +#define _RL_HAL_LIDAR_H_ + +#include "RangeSensor.h" + +namespace rl +{ + namespace hal + { + class Lidar : public RangeSensor + { + public: + Lidar(); + + virtual ~Lidar(); + + virtual ::rl::math::Real getResolution() const = 0; + + virtual ::rl::math::Real getStartAngle() const = 0; + + virtual ::rl::math::Real getStopAngle() const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_LIDAR_H_ diff --git a/src/rl/hal/MitsubishiH7.cpp b/src/rl/hal/MitsubishiH7.cpp new file mode 100644 index 00000000..b5b6326f --- /dev/null +++ b/src/rl/hal/MitsubishiH7.cpp @@ -0,0 +1,1414 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +#ifdef WIN32 +#include +#else // WIN32 +#include +#include +#include +#include +#endif // WIN32 + +#include "ComException.h" +#include "DeviceException.h" +#include "Exception.h" +#include "MitsubishiH7.h" +#include "MitsubishiH7Exception.h" +#include "TcpSocket.h" +#include "TimeoutException.h" +#include "UdpSocket.h" + +#ifdef WIN32 +#ifndef snprintf +#define snprintf _snprintf_s +#endif // snprintf +#ifndef strncpy_s +#define strncpy strncpy_s +#endif // strncpy_s +#endif // WIN32 + +/** Real-time external command invalid. */ +#define MXT_CMD_NULL 0 +/** Real-time external command valid. */ +#define MXT_CMD_MOVE 1 +/** Real-time external command end. */ +#define MXT_CMD_END 255 + +/** No data. */ +#define MXT_IO_NULL 0 +/** Output signal. */ +#define MXT_IO_OUT 1 +/** Input signal. */ +#define MXT_IO_IN 2 + +/** No data. */ +#define MXT_TYP_NULL 0 +/** XYZ data. */ +#define MXT_TYP_POSE 1 +/** Joint data. */ +#define MXT_TYP_JOINT 2 +/** Motor pulse data. */ +#define MXT_TYP_PULSE 3 +/** XYZ data (position after filter process). */ +#define MXT_TYP_FPOSE 4 +/** Joint data (position after filter process). */ +#define MXT_TYP_FJOINT 5 +/** Motor pulse data (position after filter process). */ +#define MXT_TYP_FPULSE 6 +/** XYZ data (encoder feedback value). */ +#define MXT_TYP_FBPOSE 7 +/** Joint data (encoder feedback value). */ +#define MXT_TYP_FBJOINT 8 +/** Motor pulse data (encoder feedback value). */ +#define MXT_TYP_FBPULSE 9 +/** Current command [\%]. */ +#define MXT_TYP_CMDCUR 10 +/** Current feedback [\%]. */ +#define MXT_TYP_FBKCUR 11 + +namespace rl +{ + namespace hal + { + MitsubishiH7::MitsubishiH7( + const ::std::size_t& dof, + const ::std::string& server, + const ::std::string& client, + const unsigned short int& tcp, + const unsigned short int& udp, + const Mode& mode, + const uint16_t& haltIoData, + const uint16_t& releaseIoData, + const uint16_t& shutIoData + ) : + AxisController(dof, 0.00711f), + CartesianPositionActuator(dof, 0.00711f), + CartesianPositionSensor(dof, 0.00711f), + Gripper(), + JointPositionActuator(dof, 0.00711f), + JointPositionSensor(dof, 0.00711f), + client(client), + filter(0), + haltIoData(haltIoData), + in(), + mode(mode), + out(), + releaseIoData(releaseIoData), + server(server), + shutIoData(shutIoData), + tcp(new TcpSocket(server, tcp)), + udp(new UdpSocket(server, udp)) + { + assert(dof < 9); + + this->out.cCount = 0; + } + + MitsubishiH7::~MitsubishiH7() + { + delete this->tcp; + delete this->udp; + } + + void + MitsubishiH7::calibCmd(CalibState& state) const + { + char buf[256] = "1;1;CALIB"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'o' == buf[1] && 'K' == buf[2]) + { + if ('N' == buf[3]) + { + state.isDefined = true; + } + else + { + state.isDefined = false; + } + + char hex[2] = {buf[4], '\0'}; + int dec = strtol(hex, NULL, 16); + // 00000001 + state.isAxis[0] = (dec & 1) ? true : false; + // 00000010 + state.isAxis[1] = (dec & 2) ? true : false; + // 00000100 + state.isAxis[2] = (dec & 4) ? true : false; + // 00001000 + state.isAxis[3] = (dec & 8) ? true : false; + hex[0] = buf[5]; + dec = strtol(hex, NULL, 16); + // 00010000 + state.isAxis[4] = (dec & 1) ? true : false; + // 00100000 + state.isAxis[5] = (dec & 2) ? true : false; + // 01000000 + state.isAxis[6] = (dec & 4) ? true : false; + // 10000000 + state.isAxis[7] = (dec & 8) ? true : false; + } + else if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::close() + { + this->tcp->close(); + this->udp->close(); + this->setConnected(false); + } + + void + MitsubishiH7::cntlCmd(const bool& doOn) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;CNTL%s", (doOn ? "ON" : "OFF")); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::datinstCmd(const ::std::string& j1, const ::std::string& j2, const ::std::string& j3, const ::std::string& j4, const ::std::string& j5, const ::std::string& j6, const ::std::string& checksum) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;DATINST%s;%s;%s;%s;%s;%s;%s", j1.c_str(), j2.c_str(), j3.c_str(), j4.c_str(), j5.c_str(), j6.c_str(), checksum.c_str()); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::datinstCmd(const ::std::string& j1, const ::std::string& j2, const ::std::string& j3, const ::std::string& j4, const ::std::string& j5, const ::std::string& j6, const ::std::string& j7, const ::std::string& j8, const ::std::string& checksum) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;DATINST%s;%s;%s;%s;%s;%s;%s;%s;%s", j1.c_str(), j2.c_str(), j3.c_str(), j4.c_str(), j5.c_str(), j6.c_str(), j7.c_str(), j8.c_str(), checksum.c_str()); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::dstateCmd(StopState& state) const + { + char buf[256] = "1;1;DSTATE"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'o' == buf[1] && 'K' == buf[2]) + { + char* elem = buf + 2; + char* semicolon = NULL; + int i = 0; + + while (NULL != elem) + { + ++elem; + semicolon = strchr(elem, ';'); + + if (NULL != semicolon) + { + buf[semicolon - buf] = '\0'; + } + + switch (i) + { + case 0: + // run status + { + char hex[2] = {elem[1], '\0'}; + int dec = strtol(hex, NULL, 16); + // 00000001 + state.runSts.isRepeat = (dec & 1) ? true : false; + // 00000010 + state.runSts.isCycleStopOff = (dec & 2) ? true : false; + // 00000100 + state.runSts.isMlockOn = (dec & 4) ? true : false; + // 00001000 + state.runSts.isTeach = (dec & 8) ? true : false; + hex[0] = elem[0]; + dec = strtol(hex, NULL, 16); + // 00010000 + state.runSts.isTeachRunning = (dec & 1) ? true : false; + // 00100000 + state.runSts.isServoOn = (dec & 2) ? true : false; + // 01000000 + state.runSts.isRun = (dec & 4) ? true : false; + // 10000000 + state.runSts.isOperationEnable = (dec & 8) ? true : false; + } + // stop status + { + char hex[2] = {elem[1], '\0'}; + int dec = strtol(hex, NULL, 16); + // 00000001 + state.stopSts.isEmgStop = (dec & 1) ? true : false; + // 00000010 + state.stopSts.isStop = (dec & 2) ? true : false; + // 00000100 + state.stopSts.isWait = (dec & 4) ? true : false; + // 00001000 + state.stopSts.isStopSignalOff = (dec & 8) ? true : false; + hex[0] = elem[0]; + dec = strtol(hex, NULL, 16); + // 00010000 + state.stopSts.isProgramSelectEnable = (dec & 1) ? true : false; + // 00100000 + state.stopSts.isReserve = (dec & 2) ? true : false; + // 01000000 + state.stopSts.isPseudoInput = (dec & 4) ? true : false; + } + // error number + { + elem += 4; + state.errorNo = atoi(elem); + } + break; + case 1: + // execution step number + state.stepNo = atoi(elem); + break; + case 2: + // mech number under use + state.mechNo = atoi(elem); + break; + default: + break; + } + + elem = semicolon; + ++i; + } + } + else if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::eclrCmd() const + { + char buf[256] = "1;9;ECLR"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::emdatCmd(const ::std::string& program) const + { + // max. 256 - 9 (strlen("1;9;EMDAT")) - 1 = 246 chars + + ::std::size_t begin = 0; + char buf[256]; + ::std::size_t end = 0; + ::std::string lines; + + while (begin < program.length()) + { + lines = program.substr(begin, 246); + + if (lines.length() < 246) + { + if ("\v" == lines.substr(lines.length() - 1)) + { + lines = lines.substr(0, lines.length() - 1); + } + + end = program.length(); + } + else + { + end = lines.find_last_of('\v'); + lines = lines.substr(0, end); + } + + lines = "1;9;EMDAT" + lines; + + this->tcp->write(lines.c_str(), lines.length()); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = NULL; + char* errorLine = NULL; + char* charPos = NULL; + + char* elem = buf + 2; + char* semicolon = NULL; + int i = 0; + + while (NULL != elem) + { + ++elem; + semicolon = strchr(elem, ';'); + + if (NULL != semicolon) + { + buf[semicolon - buf] = '\0'; + } + + switch (i) + { + case 0: + // error number + errorNo = elem; + break; + case 1: + // error line + errorLine = elem; + break; + case 2: + // character position + charPos = elem; + break; + default: + break; + } + + elem = semicolon; + ++i; + } + + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + + begin += end + 1; + } + } + + ::std::string + MitsubishiH7::errormesCmd(const int& errorNo) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;ERRORMES%i", errorNo); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + + return buf + 3; + } + + void + MitsubishiH7::execCmd(const ::std::string& instruction) const + { + char buf[256]; + + snprintf(buf, 255, "1;9;EXEC%s", instruction.c_str()); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::getCartesianPosition(::rl::math::Transform& x) const + { + x.setIdentity(); + + x = ::rl::math::AngleAxis(this->in.dat1.pos.w.c, ::rl::math::Vector3::UnitZ()) * + ::rl::math::AngleAxis(this->in.dat1.pos.w.b, ::rl::math::Vector3::UnitY()) * + ::rl::math::AngleAxis(this->in.dat1.pos.w.a, ::rl::math::Vector3::UnitX()); + + x.translation().x() = this->in.dat1.pos.w.x / 1000.0f; + x.translation().y() = this->in.dat1.pos.w.y / 1000.0f; + x.translation().z() = this->in.dat1.pos.w.z / 1000.0f; + } + + void + MitsubishiH7::getCurrentFeedback(::Eigen::Matrix< int32_t, ::Eigen::Dynamic, 1 >& c) const + { + assert(c.size() >= this->getDof()); + + switch (this->getDof()) + { + case 8: + c(7) = this->in.dat3.pls.p8; + case 7: + c(6) = this->in.dat3.pls.p7; + case 6: + c(5) = this->in.dat3.pls.p6; + case 5: + c(4) = this->in.dat3.pls.p5; + case 4: + c(3) = this->in.dat3.pls.p4; + case 3: + c(2) = this->in.dat3.pls.p3; + case 2: + c(1) = this->in.dat3.pls.p2; + case 1: + c(0) = this->in.dat3.pls.p1; + default: + break; + } + } + + ::std::size_t + MitsubishiH7::getFilter() const + { + return this->filter; + } + + uint16_t + MitsubishiH7::getIoData() const + { + return this->in.ioData; + } + + void + MitsubishiH7::getJointPosition(::rl::math::Vector& q) const + { + assert(q.size() >= this->getDof()); + + switch (this->getDof()) + { + case 8: + q(7) = this->in.dat.jnt.j8; + case 7: + q(6) = this->in.dat.jnt.j7; + case 6: + q(5) = this->in.dat.jnt.j6; + case 5: + q(4) = this->in.dat.jnt.j5; + case 4: + q(3) = this->in.dat.jnt.j4; + case 3: + q(2) = this->in.dat.jnt.j3; + case 2: + q(1) = this->in.dat.jnt.j2; + case 1: + q(0) = this->in.dat.jnt.j1; + default: + break; + } + } + + MitsubishiH7::Mode + MitsubishiH7::getMode() const + { + return this->mode; + } + + void + MitsubishiH7::getMotorPulse(::Eigen::Matrix< int32_t, ::Eigen::Dynamic, 1 >& p) const + { + assert(p.size() >= this->getDof()); + + switch (this->getDof()) + { + case 8: + p(7) = this->in.dat2.pls.p8; + case 7: + p(6) = this->in.dat2.pls.p7; + case 6: + p(5) = this->in.dat2.pls.p6; + case 5: + p(4) = this->in.dat2.pls.p5; + case 4: + p(3) = this->in.dat2.pls.p4; + case 3: + p(2) = this->in.dat2.pls.p3; + case 2: + p(1) = this->in.dat2.pls.p2; + case 1: + p(0) = this->in.dat2.pls.p1; + default: + break; + } + } + + void + MitsubishiH7::halt() + { + this->setOutput(900, 0x00FF, this->haltIoData); + } + + void + MitsubishiH7::hndCmd(const bool& doOpen, const int& handNo) const + { + assert(0 < handNo && handNo < 9); + + char buf[256]; + + snprintf(buf, 255, "1;1;HND%s%i", (doOpen ? "ON" : "OFF"), handNo); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::hndstsCmd(HandState& state) const + { + char buf[256] = "1;1;HNDSTS"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'o' == buf[1] && 'K' == buf[2]) + { + char* elem = buf + 2; + char* semicolon = NULL; + int i = 0; + int j = 0; + + while (NULL != elem) + { + ++elem; + semicolon = strchr(elem, ';'); + + if (NULL != semicolon) + { + buf[semicolon - buf] = '\0'; + } + + switch (j) + { + case 0: + // signal number allocated in hand + state[i].outputNo = atoi(elem); + break; + case 1: + // hand output status + switch (atoi(elem)) + { + case -1: + state[i].handSts = HANDSTS_NOTUSED; + break; + case 1: + state[i].handSts = HANDSTS_OPEN; + break; + case 2: + state[i].handSts = HANDSTS_CLOSED; + break; + default: + break; + } + break; + case 2: + // hand type + switch (atoi(elem)) + { + case -1: + state[i].handType = HANDTYPE_NOTUSED; + break; + case 0: + state[i].handType = HANDTYPE_SINGLE; + break; + case 1: + state[i].handType = HANDTYPE_DOUBLE; + break; + default: + break; + } + + ++i; + + break; + default: + break; + } + + elem = semicolon; + ++j; + j %= 3; + } + } + else if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::inEqualsCmd(const ::std::size_t& inNo, const ::std::string& inVal) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;IN=%zi;%s", inNo, inVal.c_str()); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::loadCmd(const ::std::string& programName) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;LOAD=%s", programName.c_str()); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::loadProgram(const ::std::string& name, const ::std::string& program) const + { + this->newCmd(); + this->loadCmd(name); + this->eclrCmd(); + this->emdatCmd(program); + this->saveCmd(); + } + + void + MitsubishiH7::newCmd() const + { + char buf[256] = "1;1;NEW"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::open() + { + this->tcp->open(); + this->udp->open(); + this->setConnected(true); + } + + void + MitsubishiH7::outEqualsCmd(const ::std::size_t& outNo, const ::std::string& outVal) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;OUT=%zi;%s", outNo, outVal.c_str()); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::release() + { + this->setOutput(900, 0x00FF, this->releaseIoData); + } + + void + MitsubishiH7::rstalrmCmd() const + { + char buf[256] = "1;1;RSTALRM"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::rstpwrCmd() const + { + char buf[256] = "1;1;RSTPWR"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::runCmd(const ::std::string& programName, const bool& doModeCycle) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;RUN%s;%i", programName.c_str(), (doModeCycle ? 1 : 0)); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::saveCmd() const + { + char buf[256] = "1;1;SAVE"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::setCartesianPosition(const ::rl::math::Transform& x) + { + ::rl::math::Vector3 abc = x.rotation().eulerAngles(2, 1, 0).reverse(); + + this->out.dat.pos.w.a = static_cast< float >(abc(0)); + this->out.dat.pos.w.b = static_cast< float >(abc(1)); + this->out.dat.pos.w.c = static_cast< float >(abc(2)); + + this->out.dat.pos.w.x = static_cast< float >(x.translation().x() * 1000.0f); + this->out.dat.pos.w.y = static_cast< float >(x.translation().y() * 1000.0f); + this->out.dat.pos.w.z = static_cast< float >(x.translation().z() * 1000.0f); + + this->out.command = MXT_CMD_MOVE; + this->out.sendType = MXT_TYP_POSE; + } + + void + MitsubishiH7::setFilter(const ::std::size_t& filter) + { + this->filter = filter; + } + + void + MitsubishiH7::setInput(const uint16_t& bitTop) + { + this->out.bitTop = bitTop; + this->out.recvIoType = MXT_IO_IN; + this->out.sendIoType = MXT_IO_NULL; + } + + void + MitsubishiH7::setJointPosition(const ::rl::math::Vector& q) + { + assert(q.size() >= this->getDof()); + + this->out.dat.jnt.j1 = 0.0f; + this->out.dat.jnt.j2 = 0.0f; + this->out.dat.jnt.j3 = 0.0f; + this->out.dat.jnt.j4 = 0.0f; + this->out.dat.jnt.j5 = 0.0f; + this->out.dat.jnt.j6 = 0.0f; + this->out.dat.jnt.j7 = 0.0f; + this->out.dat.jnt.j8 = 0.0f; + + switch (this->getDof()) + { + case 8: + this->out.dat.jnt.j8 = static_cast< float >(q(7)); + case 7: + this->out.dat.jnt.j7 = static_cast< float >(q(6)); + case 6: + this->out.dat.jnt.j6 = static_cast< float >(q(5)); + case 5: + this->out.dat.jnt.j5 = static_cast< float >(q(4)); + case 4: + this->out.dat.jnt.j4 = static_cast< float >(q(3)); + case 3: + this->out.dat.jnt.j3 = static_cast< float >(q(2)); + case 2: + this->out.dat.jnt.j2 = static_cast< float >(q(1)); + case 1: + this->out.dat.jnt.j1 = static_cast< float >(q(0)); + default: + break; + } + + this->out.command = MXT_CMD_MOVE; + this->out.sendType = MXT_TYP_JOINT; + } + + void + MitsubishiH7::setMode(const Mode& mode) + { + this->mode = mode; + } + + void + MitsubishiH7::setMotorPulse(const ::Eigen::Matrix< int32_t, ::Eigen::Dynamic, 1 >& p) + { + assert(p.size() >= this->getDof()); + + this->out.dat2.pls.p1 = 0; + this->out.dat2.pls.p2 = 0; + this->out.dat2.pls.p3 = 0; + this->out.dat2.pls.p4 = 0; + this->out.dat2.pls.p5 = 0; + this->out.dat2.pls.p6 = 0; + this->out.dat2.pls.p7 = 0; + this->out.dat2.pls.p8 = 0; + + switch (this->getDof()) + { + case 8: + this->out.dat2.pls.p8 = p(7); + case 7: + this->out.dat2.pls.p7 = p(6); + case 6: + this->out.dat2.pls.p6 = p(5); + case 5: + this->out.dat2.pls.p5 = p(4); + case 4: + this->out.dat2.pls.p4 = p(3); + case 3: + this->out.dat2.pls.p3 = p(2); + case 2: + this->out.dat2.pls.p2 = p(1); + case 1: + this->out.dat2.pls.p1 = p(0); + default: + break; + } + + this->out.command = MXT_CMD_MOVE; + this->out.sendType = MXT_TYP_PULSE; + } + + void + MitsubishiH7::setOutput(const uint16_t& bitTop, const uint16_t& bitMask, const uint16_t& ioData) + { + this->out.bitMask = bitMask; + this->out.bitTop = bitTop; + this->out.ioData = ioData; + this->out.recvIoType = MXT_IO_NULL; + this->out.sendIoType = MXT_IO_OUT; + } + + void + MitsubishiH7::shut() + { + this->setOutput(900, 0x00FF, this->shutIoData); + } + + void + MitsubishiH7::slotinitCmd() const + { + char buf[256] = "1;1;SLOTINIT"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::srvCmd(const bool& doOn) const + { + char buf[256]; + + snprintf(buf, 255, "1;1;SRV%s", (doOn ? "ON" : "OFF")); + buf[255] = '\0'; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::start() + { + this->stopProgram(); + + struct hostent* client = gethostbyname(this->client.c_str()); + struct sockaddr_in clientAddr; + memset(&clientAddr, 0, sizeof(clientAddr)); + memcpy(&clientAddr.sin_addr, client->h_addr, sizeof(client->h_addr)); + + ::std::stringstream program; + + program << "10 OPEN \"ENET:" << inet_ntoa(clientAddr.sin_addr) << "\" AS #1" << "\v"; + program << "20 MXT 1," << this->mode << "," << this->filter << "\v"; + program << "30 HLT" << "\v"; + program << "40 END"; + + this->loadProgram("1432", program.str()); + + this->cntlCmd(true); + this->srvCmd(true); + this->cntlCmd(false); + + StopState state; + + state.runSts.isServoOn = false; + + while (!state.runSts.isServoOn) + { + this->dstateCmd(state); + } + + this->startProgram("1432"); + + this->setRunning(true); + } + + void + MitsubishiH7::startProgram(const ::std::string& name) const + { + this->cntlCmd(true); + this->slotinitCmd(); + this->runCmd(name, true); + this->cntlCmd(false); + } + + void + MitsubishiH7::stateCmd(RunState& state) const + { + char buf[256] = "1;1;STATE"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'o' == buf[1] && 'K' == buf[2]) + { + char* elem = buf + 2; + char* semicolon = NULL; + int i = 0; + + while (NULL != elem) + { + ++elem; + semicolon = strchr(elem, ';'); + + if (NULL != semicolon) + { + buf[semicolon - buf] = '\0'; + } + + switch (i) + { + case 0: + // program name loaded into task slot + strncpy(state.programName, elem, 255); + state.programName[255] = '\0'; + break; + case 1: + // execution line number + state.lineNo = atoi(elem); + break; + case 2: + // a present override value is read + state.override = atoi(elem); + break; + case 3: + // edit status + { + int dec = strtol(elem, NULL, 16); + // 00000001 + state.editSts.isEditing = (dec & 1) ? true : false; + // 00000010 + state.editSts.isRunning = (dec & 2) ? true : false; + // 00000100 + state.editSts.isChanged = (dec & 4) ? true : false; + } + break; + case 4: + // run status + { + char hex[2] = {elem[1], '\0'}; + int dec = strtol(hex, NULL, 16); + // 00000001 + state.runSts.isRepeat = (dec & 1) ? true : false; + // 00000010 + state.runSts.isCycleStopOff = (dec & 2) ? true : false; + // 00000100 + state.runSts.isMlockOn = (dec & 4) ? true : false; + // 00001000 + state.runSts.isTeach = (dec & 8) ? true : false; + hex[0] = elem[0]; + dec = strtol(hex, NULL, 16); + // 00010000 + state.runSts.isTeachRunning = (dec & 1) ? true : false; + // 00100000 + state.runSts.isServoOn = (dec & 2) ? true : false; + // 01000000 + state.runSts.isRun = (dec & 4) ? true : false; + // 10000000 + state.runSts.isOperationEnable = (dec & 8) ? true : false; + } + // stop status + { + char hex[2] = {elem[1], '\0'}; + int dec = strtol(hex, NULL, 16); + // 00000001 + state.stopSts.isEmgStop = (dec & 1) ? true : false; + // 00000010 + state.stopSts.isStop = (dec & 2) ? true : false; + // 00000100 + state.stopSts.isWait = (dec & 4) ? true : false; + // 00001000 + state.stopSts.isStopSignalOff = (dec & 8) ? true : false; + hex[0] = elem[0]; + dec = strtol(hex, NULL, 16); + // 00010000 + state.stopSts.isProgramSelectEnable = (dec & 1) ? true : false; + // 00100000 + state.stopSts.isReserve = (dec & 2) ? true : false; + // 01000000 + state.stopSts.isPseudoInput = (dec & 4) ? true : false; + } + // error number + { + elem += 4; + state.errorNo = atoi(elem); + } + break; + case 5: + // execution step number + state.stepNo = atoi(elem); + break; + case 6: + // mech info + { + int dec = strtol(elem, NULL, 16); + // 00000001 + state.mechInfo[0] = (dec & 1) ? true : false; + // 00000010 + state.mechInfo[1] = (dec & 2) ? true : false; + // 00000100 + state.mechInfo[2] = (dec & 4) ? true : false; + } + break; + case 14: + // program name of slot table + strncpy(state.taskPrgName, elem, 255); + state.taskPrgName[255] = '\0'; + break; + case 15: + // operation mode of slot table + if (0 == strcmp(elem, "CYC")) + { + state.isTaskModeCycle = true; + } + else + { + state.isTaskModeCycle = false; + } + break; + case 16: + // stating conditions of slot table + if (0 == strcmp(elem, "START")) + { + state.taskCond = TASKCOND_START; + } + else if (0 == strcmp(elem, "ALWAYS")) + { + state.taskCond = TASKCOND_ALWAYS; + } + else if (0 == strcmp(elem, "ERROR")) + { + state.taskCond = TASKCOND_ERROR; + } + break; + case 17: + // priority of slot table + state.taskPri = atoi(elem); + break; + case 18: + // mech number under use + state.mechNo = atoi(elem); + break; + default: + break; + } + + elem = semicolon; + ++i; + } + } + else if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::step() + { + this->out.recvType = MXT_TYP_JOINT; + this->out.recvType1 = MXT_TYP_POSE; + this->out.recvType2 = MXT_TYP_PULSE; + this->out.recvType3 = MXT_TYP_FBKCUR; + + this->udp->write(&out, sizeof(MxtCommand)); + + ++this->out.cCount; + + try + { + this->udp->select(true, false, this->filter * this->getUpdateRate() + 6 * this->getUpdateRate()); + } + catch (const TimeoutException& e) + { + throw e; + } + + this->udp->read(&this->in, sizeof(MxtCommand)); + + this->out.bitMask = 0; + this->out.bitTop = 0; + this->out.command = MXT_CMD_NULL; + this->out.ioData = 0; + this->out.recvType = MXT_TYP_NULL; + this->out.recvType1 = MXT_TYP_NULL; + this->out.recvType2 = MXT_TYP_NULL; + this->out.recvType3 = MXT_TYP_NULL; + this->out.recvIoType = MXT_IO_NULL; + this->out.sendType = MXT_TYP_NULL; + this->out.sendIoType = MXT_IO_NULL; + } + + void + MitsubishiH7::stop() + { + this->out.bitMask = 0; + this->out.bitTop = 0; + this->out.command = MXT_CMD_END; + this->out.ioData = 0; + this->out.recvType = MXT_TYP_NULL; + this->out.recvType1 = MXT_TYP_NULL; + this->out.recvType2 = MXT_TYP_NULL; + this->out.recvType3 = MXT_TYP_NULL; + this->out.recvIoType = MXT_IO_NULL; + this->out.sendType = MXT_TYP_NULL; + this->out.sendIoType = MXT_IO_NULL; + + this->udp->write(&out, sizeof(MxtCommand)); + + this->stopProgram(); + + StopState state; + + this->dstateCmd(state); + + if (state.runSts.isServoOn) + { + this->srvCmd(false); + + while (state.runSts.isServoOn) + { + this->dstateCmd(state); + } + } + + this->setRunning(false); + } + + void + MitsubishiH7::stopCmd() const + { + char buf[256] = "1;1;STOP"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + + void + MitsubishiH7::stopProgram() const + { + this->stopCmd(); + } + + void + MitsubishiH7::stpsigCmd(StopSignalState& state) const + { + char buf[256] = "1;1;STPSIG"; + + this->tcp->write(buf, strlen(buf)); + this->tcp->read(buf, 256); + + if ('Q' == buf[0] && 'o' == buf[1] && 'K' == buf[2]) + { + char* elem = buf + 2; + char* semicolon = NULL; + int i = 0; + + while (NULL != elem) + { + ++elem; + semicolon = strchr(elem, ';'); + + if (NULL != semicolon) + { + buf[semicolon - buf] = '\0'; + } + + switch (i) + { + case 0: + // the state of the stop signal + { + int dec = strtol(elem, NULL, 16); + // 00000001 + state.isTb = (dec & 1) ? true : false; + // 00000010 + state.isPc = (dec & 2) ? true : false; + // 00000100 + state.isIo = (dec & 4) ? true : false; + // 00001000 + state.isOp = (dec & 8) ? true : false; + } + break; + case 1: + // the state of the emg stop signal + { + int dec = strtol(elem, NULL, 16); + // 00000001 + state.isIoEmg = (dec & 1) ? true : false; + // 00000010 + state.isOpEmg = (dec & 2) ? true : false; + // 00000100 + state.isTbEmg = (dec & 4) ? true : false; + } + break; + default: + break; + } + + elem = semicolon; + ++i; + } + } + else if ('Q' == buf[0] && 'e' == buf[1] && 'R' == buf[2]) + { + char* errorNo = buf + 3; + throw MitsubishiH7Exception(atoi(errorNo), ::std::string(this->errormesCmd(atoi(errorNo)) + " (" + errorNo + ")")); + } + } + } +} diff --git a/src/rl/hal/MitsubishiH7.h b/src/rl/hal/MitsubishiH7.h new file mode 100644 index 00000000..0f57ba7a --- /dev/null +++ b/src/rl/hal/MitsubishiH7.h @@ -0,0 +1,600 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_MITSUBISHIH7_H_ +#define _RL_HAL_MITSUBISHIH7_H_ + +#include +#include + +#include "CartesianPositionActuator.h" +#include "CartesianPositionSensor.h" +#include "Gripper.h" +#include "JointPositionActuator.h" +#include "JointPositionSensor.h" +#include "types.h" + +namespace rl +{ + namespace hal + { + class TcpSocket; + class UdpSocket; + + class MitsubishiH7 : public CartesianPositionActuator, public CartesianPositionSensor, public Gripper, public JointPositionActuator, public JointPositionSensor + { + public: + enum Mode + { + MODE_JOINT = 1, + MODE_POSE = 0, + MODE_PULSE = 2 + }; + + enum HandSts + { + HANDSTS_NOTUSED = -1, + /** Hand open. */ + HANDSTS_OPEN = 1, + /** Hand closed. */ + HANDSTS_CLOSED = 2 + }; + + enum HandType + { + HANDTYPE_NOTUSED = -1, + /** Single-solenoid. */ + HANDTYPE_SINGLE = 0, + /** Double-solenoid. */ + HANDTYPE_DOUBLE = 1 + }; + + enum TaskCond + { + /** START. */ + TASKCOND_START, + /** ALWAYS. */ + TASKCOND_ALWAYS, + /** ERROR. */ + TASKCOND_ERROR + }; + + struct EditSts + { + /** Editing. */ + bool isEditing; + /** Running. */ + bool isRunning; + /** Changed. */ + bool isChanged; + }; + + struct Hand + { + /** Signal number allocated in hand (-1: not used). */ + int outputNo; + /** Hand output status. */ + HandSts handSts; + /** Hand type. */ + HandType handType; + }; + + /** Mech info (Mech 1, Mech 2, Mech 3). */ + typedef bool MechInfo[3]; + + struct RunSts + { + /** Cycle / Repeat. */ + bool isRepeat; + /** Cycle stop ON / Cycle stop OFF. */ + bool isCycleStopOff; + /** MLOCK OFF / MLOCK ON. */ + bool isMlockOn; + /** Auto / Teach. */ + bool isTeach; + /** Running of Teach mode. */ + bool isTeachRunning; + /** Servo OFF / Servo ON. */ + bool isServoOn; + /** STOP / RUN. */ + bool isRun; + /** Operation disable / Operation enable. */ + bool isOperationEnable; + }; + + struct StopSts + { + /** EMG STOP. */ + bool isEmgStop; + /** STOP. */ + bool isStop; + /** WAIT. */ + bool isWait; + /** STOP signal ON /OFF. */ + bool isStopSignalOff; + /** Program select enable. */ + bool isProgramSelectEnable; + /** (reserve). */ + bool isReserve; + /** Pseudo input. */ + bool isPseudoInput; + }; + + struct CalibState + { + /** Install status. */ + bool isDefined; + /** Completion axis pattern (J1, J2, J3, J4, J5, J6, J7, J8). */ + bool isAxis[8]; + }; + + typedef Hand HandState[8]; + + struct RunState + { + /** Program name loaded into task slot. */ + char programName[256]; + /** Execution line number. */ + int lineNo; + /** A present override value is read. */ + int override; + /** Edit status. */ + EditSts editSts; + /** Run status. */ + RunSts runSts; + /** Stop status. */ + StopSts stopSts; + /** Error number (0: no error). */ + int errorNo; + /** Execution step number. */ + int stepNo; + /** Mech info. */ + MechInfo mechInfo; + /** Program name of slot table. */ + char taskPrgName[256]; + /** Operation mode of slot table (REP / CYC). */ + bool isTaskModeCycle; + /** Stating conditions of slot table. */ + TaskCond taskCond; + /** Priority of slot table (1 - 31). */ + int taskPri; + /** Mech number under use. */ + int mechNo; + }; + + struct StopSignalState + { + /** T/B (RS-422). */ + bool isTb; + /** P/C (RS-232C). */ + bool isPc; + /** I/O. */ + bool isIo; + /** O/P. */ + bool isOp; + /** I/O EMG. */ + bool isIoEmg; + /** O/P EMG. */ + bool isOpEmg; + /** T/B EMG. */ + bool isTbEmg; + }; + + struct StopState + { + /** Run status. */ + RunSts runSts; + /** Stop status. */ + StopSts stopSts; + /** Error number (0: no error). */ + int errorNo; + /** Execution step number. */ + int stepNo; + /** Mech number under use. */ + int mechNo; + }; + + MitsubishiH7( + const ::std::size_t& dof, + const ::std::string& server, + const ::std::string& client, + const unsigned short int& tcp = 10001, + const unsigned short int& udp = 10000, + const Mode& mode = MODE_JOINT, + const uint16_t& haltIoData = 0x00AA, + const uint16_t& releaseIoData = 0x00A6, + const uint16_t& shutIoData = 0x000A9 + ); + + virtual ~MitsubishiH7(); + + /** + * The install status is read. + * @param state install state + */ + void calibCmd(CalibState& state) const; + + void close(); + + /** + * Operation enable or disable. + * When the command which needs the operation right such as program start, + * servo ON and more is used, the operation right should be made effective. + * @param doOn OFF / ON + */ + void cntlCmd(const bool& doOn) const; + + /** + * The origin is set by the data input. + * @param j1 j1 data + * @param j2 j2 data + * @param j3 j3 data + * @param j4 j4 data + * @param j5 j5 data + * @param j6 j6 data + * @param checksum checksum + */ + void datinstCmd(const ::std::string& j1, const ::std::string& j2, const ::std::string& j3, const ::std::string& j4, const ::std::string& j5, const ::std::string& j6, const ::std::string& checksum) const; + + /** + * The origin is set by the data input. + * @param j1 j1 data + * @param j2 j2 data + * @param j3 j3 data + * @param j4 j4 data + * @param j5 j5 data + * @param j6 j6 data + * @param j7 j7 data + * @param j8 j8 data + * @param checksum checksum + */ + void datinstCmd(const ::std::string& j1, const ::std::string& j2, const ::std::string& j3, const ::std::string& j4, const ::std::string& j5, const ::std::string& j6, const ::std::string& j7, const ::std::string& j8, const ::std::string& checksum) const; + + /** + * The stop state is read. + * @param state stop state + */ + void dstateCmd(StopState& state) const; + + /** + * Clear program contents. + * It is effective in the edit slot. + */ + void eclrCmd() const; + + /** + * More line and position are registered in the program. + * It is effective in the edit slot. + * @param program line data and positional data ([0b...]) + */ + void emdatCmd(const ::std::string& program) const; + + /** + * The content of the error is read. + * @param errorNo error number + * @return content of the error + */ + ::std::string errormesCmd(const int& errorNo) const; + + /** + * The instruction is executed directly. + * @param instruction instruction of MELFA-BASIC IV or MOVEMASTER commands + */ + void execCmd(const ::std::string& instruction) const; + + void getCartesianPosition(::rl::math::Transform& x) const; + + void getCurrentFeedback(::Eigen::Matrix< int32_t, ::Eigen::Dynamic, 1 >& c) const; + + ::std::size_t getFilter() const; + + uint16_t getIoData() const; + + void getJointPosition(::rl::math::Vector& q) const; + + Mode getMode() const; + + void getMotorPulse(::Eigen::Matrix< int32_t, ::Eigen::Dynamic, 1 >& p) const; + + void halt(); + + /** + * The hand is openend and closed. + * @param doOpen CLOSE / OPEN + * @param handNo hand number (1 - 8) is specified + */ + void hndCmd(const bool& doOpen, const int& handNo) const; + + /** + * The setting and the output of the hand are read. + * @param state hand state + */ + void hndstsCmd(HandState& state) const; + + /** + * The input signal is pseudo-input. + * @param inNo input signal number + * @param inVal pseudo-input signal value by 4 hex number fixation + */ + void inEqualsCmd(const ::std::size_t& inNo, const ::std::string& inVal) const; + + /** + * Open the program for edit. + * @param programName edit program name + */ + void loadCmd(const ::std::string& programName) const; + + void loadProgram(const ::std::string& name, const ::std::string& program) const; + + /** + * The program is closed annulling the content of the edit. + */ + void newCmd() const; + + void open(); + + /** + * The output signal is compelling output. + * @param outNo output signal number + * @param outVal output signal value by 4 hex number fixation + */ + void outEqualsCmd(const ::std::size_t& outNo, const ::std::string& outVal) const; + + void release(); + + /** + * The error is reset. + */ + void rstalrmCmd() const; + + /** + * Power supply reset (reboot) of the controller is executed. + */ + void rstpwrCmd() const; + + /** + * The program is started. + * @param programName program name + * @param doModeCycle repeat start / cycle start + */ + void runCmd(const ::std::string& programName, const bool& doModeCycle = false) const; + + /** + * The content of the edit is preserved and the program is closed. + */ + void saveCmd() const; + + void setCartesianPosition(const ::rl::math::Transform& x); + + void setFilter(const ::std::size_t& filter); + + void setInput(const uint16_t& bitTop); + + void setJointPosition(const ::rl::math::Vector& q); + + void setMode(const Mode& mode); + + void setMotorPulse(const ::Eigen::Matrix< int32_t, ::Eigen::Dynamic, 1 >& p); + + void setOutput(const uint16_t& bitTop, const uint16_t& bitMask, const uint16_t& ioData); + + void shut(); + + /** + * The program resets all slots. + */ + void slotinitCmd() const; + + /** + * The servo power supply is turned on and off. + * @param doOn OFF / ON + */ + void srvCmd(const bool& doOn) const; + + void start(); + + void startProgram(const ::std::string& name) const; + + /** + * The run state is read. + * @param state run state + */ + void stateCmd(RunState& state) const; + + void step(); + + /** + * The start is stopped. + */ + void stopCmd() const; + + void stop(); + + void stopProgram() const; + + /** + * The state of the stop signal is read. + * @param state stop signal state + */ + void stpsigCmd(StopSignalState& state) const; + + protected: + struct MxtWorld + { + /** X axis coordinate value [mm]. */ + float x; + /** Y axis coordinate value [mm]. */ + float y; + /** Z axis coordinate value [mm]. */ + float z; + /** A axis coordinate value [rad]. */ + float a; + /** B axis coordinate value [rad]. */ + float b; + /** C axis coordinate value [rad]. */ + float c; + /** Additional axis 1 [mm or rad]. */ + float l1; + /** Additional axis 2 [mm or rad]. */ + float l2; + }; + + struct MxtJoint + { + /** J1 axis angle [rad]. */ + float j1; + /** J2 axis angle [rad]. */ + float j2; + /** J3 axis angle [rad]. */ + float j3; + /** J4 axis angle [rad]. */ + float j4; + /** J5 axis angle [rad]. */ + float j5; + /** J6 axis angle [rad]. */ + float j6; + /** Additional axis 1 (J7 axis angle) [mm or rad]. */ + float j7; + /** Additional axis 2 (J8 axis angle) [mm or rad]. */ + float j8; + }; + + struct MxtPose + { + MxtWorld w; + /** Structural flag 1. */ + uint32_t sflg1; + /** Structural flag 2. */ + uint32_t sflg2; + }; + + struct MxtPulse + { + /** Motor 1 axis. */ + int32_t p1; + /** Motor 2 axis. */ + int32_t p2; + /** Motor 3 axis. */ + int32_t p3; + /** Motor 4 axis. */ + int32_t p4; + /** Motor 5 axis. */ + int32_t p5; + /** Motor 6 axis. */ + int32_t p6; + /** Additional axis 1 (Motor 7 axis). */ + int32_t p7; + /** Additional axis 2 (Motor 8 axis). */ + int32_t p8; + }; + + struct MxtCommand + { + union MxtData + { + /** XYZ type [mm or rad]. */ + MxtPose pos; + /** Joint type [rad]. */ + MxtJoint jnt; + /** Motor pulse type [the pulse] or current type [\%]. */ + MxtPulse pls; + /** Integer type [%% / non-unit]. */ + int32_t lng[8]; + }; + /** Command. */ + uint16_t command; + /** Transmission data type designation. */ + uint16_t sendType; + /** Reply data type designation. */ + uint16_t recvType; + /** Reservation. */ + uint16_t reserve; + /** Position data. */ + MxtData dat; + /** Transmission input/output signal data designation. */ + uint16_t sendIoType; + /** Reply input/output signal data designation. */ + uint16_t recvIoType; + /** Head bit no. of input or output signal. */ + uint16_t bitTop; + /** Bit mask pattern designation (valid only for commanding) [0x0000-0xFFFF]. */ + uint16_t bitMask; + /** Input or output signal data value (for monitoring) [0x0000-0xFFFF]. Output signal data value (for commanding) [0x0000-0xFFFF]. */ + uint16_t ioData; + /** Timeout time counter. */ + uint16_t tCount; + /** Counter for communication data. */ + uint32_t cCount; + /** Reply data type designation. */ + uint16_t recvType1; + /** Reservation. */ + uint16_t reserve1; + /** Position data. */ + MxtData dat1; + /** Reply data type designation. */ + uint16_t recvType2; + /** Reservation. */ + uint16_t reserve2; + /** Position data. */ + MxtData dat2; + /** Reply data type designation. */ + uint16_t recvType3; + /** Reservation. */ + uint16_t reserve3; + /** Position data. */ + MxtData dat3; + }; + + private: + /** Client ip address or hostname. */ + ::std::string client; + + /** Internal filter value. */ + ::std::size_t filter; + + uint16_t haltIoData; + + MxtCommand in; + + Mode mode; + + MxtCommand out; + + uint16_t releaseIoData; + + /** Server ip address or hostname. */ + ::std::string server; + + uint16_t shutIoData; + + TcpSocket* tcp; + + UdpSocket* udp; + }; + } +} + +#endif // _RL_HAL_MITSUBISHIH7_H_ diff --git a/src/rl/hal/MitsubishiH7Exception.cpp b/src/rl/hal/MitsubishiH7Exception.cpp new file mode 100644 index 00000000..ae2b091b --- /dev/null +++ b/src/rl/hal/MitsubishiH7Exception.cpp @@ -0,0 +1,49 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "MitsubishiH7Exception.h" + +namespace rl +{ + namespace hal + { + MitsubishiH7Exception::MitsubishiH7Exception(const int& errorNo, const ::std::string& what_arg) : + DeviceException(what_arg), + errorNo(errorNo) + { + } + + MitsubishiH7Exception::~MitsubishiH7Exception() throw() + { + } + + int + MitsubishiH7Exception::getErrorNo() const + { + return this->errorNo; + } + } +} diff --git a/src/rl/hal/MitsubishiH7Exception.h b/src/rl/hal/MitsubishiH7Exception.h new file mode 100644 index 00000000..eaeda026 --- /dev/null +++ b/src/rl/hal/MitsubishiH7Exception.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_MITSUBISHIH7EXCEPTION_H_ +#define _RL_HAL_MITSUBISHIH7EXCEPTION_H_ + +#include "DeviceException.h" + +namespace rl +{ + namespace hal + { + class MitsubishiH7Exception : public DeviceException + { + public: + MitsubishiH7Exception(const int& errorNo, const ::std::string& what_arg); + + virtual ~MitsubishiH7Exception() throw(); + + int getErrorNo() const; + + protected: + + private: + int errorNo; + }; + } +} + +#endif // _RL_HAL_MITSUBISHIH7EXCEPTION_H_ diff --git a/src/rl/hal/RangeSensor.cpp b/src/rl/hal/RangeSensor.cpp new file mode 100644 index 00000000..febc84d6 --- /dev/null +++ b/src/rl/hal/RangeSensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "RangeSensor.h" + +namespace rl +{ + namespace hal + { + RangeSensor::RangeSensor() : + Device() + { + } + + RangeSensor::~RangeSensor() + { + } + } +} diff --git a/src/rl/hal/RangeSensor.h b/src/rl/hal/RangeSensor.h new file mode 100644 index 00000000..e9c8e9f3 --- /dev/null +++ b/src/rl/hal/RangeSensor.h @@ -0,0 +1,70 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_RANGESENSOR_H_ +#define _RL_HAL_RANGESENSOR_H_ + +#include + +#include "Device.h" + +namespace rl +{ + namespace hal + { + class RangeSensor : public Device + { + public: + RangeSensor(); + + virtual ~RangeSensor(); + + /** + * @param distances [m] + */ + virtual void getDistances(::rl::math::Vector& distances) const = 0; + + virtual ::std::size_t getDistancesCount() const = 0; + + /** + * @return [m] + */ + virtual ::rl::math::Real getDistancesMaximum(const ::std::size_t& i) const = 0; + + /** + * @return [m] + */ + virtual ::rl::math::Real getDistancesMinimum(const ::std::size_t& i) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_RANGESENSOR_H_ diff --git a/src/rl/hal/SchmersalLss300.cpp b/src/rl/hal/SchmersalLss300.cpp new file mode 100644 index 00000000..fa2e1f75 --- /dev/null +++ b/src/rl/hal/SchmersalLss300.cpp @@ -0,0 +1,613 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "ComException.h" +#include "DeviceException.h" +#include "endian.h" +#include "SchmersalLss300.h" +#include "Serial.h" +#include "TimeoutException.h" + +namespace rl +{ + namespace hal + { + SchmersalLss300::SchmersalLss300( + const ::std::string& filename, + const BaudRate& baudRate, + const Monitoring& monitoring, + const ::std::string& password + ) : + Lidar(), + baudRate(BAUDRATE_9600BPS), + configuration(0x00), + data(), + desired(baudRate), + monitoring(monitoring), + password(password), + serial( + new Serial( + filename, + Serial::BAUDRATE_9600BPS, + Serial::DATABITS_8BITS, + Serial::FLOWCONTROL_OFF, + Serial::PARITY_NOPARITY, + Serial::STOPBITS_1BIT + ) + ), + timer() + { + assert(8 == password.length()); + } + + SchmersalLss300::~SchmersalLss300() + { + delete this->serial; + } + + void + SchmersalLss300::close() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE != this->monitoring) + { + this->setMonitoring(MONITORING_SINGLE); + } + + if (BAUDRATE_9600BPS != this->baudRate) + { + this->setBaudRate(BAUDRATE_9600BPS); + } + + this->serial->close(); + + this->setConnected(false); + } + + uint16_t + SchmersalLss300::crc(const uint8_t* buf, const ::std::size_t& len) const + { + uint16_t checksum = buf[0]; + + for (::std::size_t i = 1; i < len; ++i) + { + if (checksum & 0x8000) + { + checksum <<= 1; + checksum ^= 0x8005; + } + else + { + checksum <<= 1; + } + + checksum ^= (buf[i - 1] << 8) | buf[i]; + } + + return checksum; + } + + SchmersalLss300::BaudRate + SchmersalLss300::getBaudRate() const + { + return this->baudRate; + } + + void + SchmersalLss300::getDistances(::rl::math::Vector& distances) const + { + assert(this->isConnected()); + assert(distances.size() >= this->getDistancesCount()); + + ::rl::math::Real scale = 0.01f; + + uint16_t count = hostEndianWord(this->data[8], this->data[7]); + + uint8_t mask = 0x1F; + + for (::std::size_t i = 0; i < count; ++i) + { + if (this->data[10 + i * 2] & 32) + { + distances(i) = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + } + else + { + distances(i) = hostEndianWord(this->data[10 + i * 2] & mask, this->data[9 + i * 2]); + distances(i) *= scale; + } + } + } + + ::std::size_t + SchmersalLss300::getDistancesCount() const + { + return 501; + } + + ::rl::math::Real + SchmersalLss300::getDistancesMaximum(const ::std::size_t& i) const + { + assert(i < this->getDistancesCount()); + + return 60.0f; + } + + ::rl::math::Real + SchmersalLss300::getDistancesMinimum(const ::std::size_t& i) const + { + assert(i < this->getDistancesCount()); + + return 0.0f; + } + + SchmersalLss300::Monitoring + SchmersalLss300::getMonitoring() const + { + assert(this->isConnected()); + + return this->monitoring; + } + + ::rl::math::Real + SchmersalLss300::getResolution() const + { + assert(this->isConnected()); + + return 0.36f * ::rl::math::DEG2RAD; + } + + ::rl::math::Real + SchmersalLss300::getStartAngle() const + { + assert(this->isConnected()); + + return 0.0f; + } + + ::rl::math::Real + SchmersalLss300::getStopAngle() const + { + assert(this->isConnected()); + + return 180.0f * ::rl::math::DEG2RAD; + } + + ::std::string + SchmersalLss300::getType() + { + assert(this->isConnected()); + + uint8_t buf[1013]; + + buf[4] = 0x00; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 8 + 2, 0x80); + + switch (buf[5]) + { + case 0x01: + return "LSS 1;V" + ::std::string(reinterpret_cast< char* >(buf + 6), 8); + break; + case 0x02: + return "LSS 2;V" + ::std::string(reinterpret_cast< char* >(buf + 6), 8); + break; + default: + break; + } + + return ""; + } + + void + SchmersalLss300::open() + { + this->serial->open(); + + this->setConnected(true); + + uint8_t buf[1013]; + + // synchronize baud rates + + buf[4] = 0x66; + buf[5] = 0x00; + + Serial::BaudRate baudRates[4] = { + Serial::BAUDRATE_57600BPS, + Serial::BAUDRATE_38400BPS, + Serial::BAUDRATE_19200BPS, + Serial::BAUDRATE_9600BPS + }; + + for (::std::size_t i = 0; i < 4; ++i) + { + this->serial->setBaudRate(baudRates[i]); + this->serial->changeParameters(); + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + + if (this->waitAck()) + { + break; + } + + if (3 == i) + { + throw DeviceException("could not sync baud rate."); + } + } + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 2, 0xE6); + + if (0x81 == buf[5]) + { + throw DeviceException("mode switchover not possible due to internal processing error"); + } + + // status + + buf[4] = 0x31; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 1 + 9 + 17 + 17 + 17 + 17 + 1 + 1 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 4 + 50 + 2, 0xB1); + + // baud rate + + if (this->desired != this->baudRate) + { + this->setBaudRate(this->desired); + } + + // monitoring + + if (0x25 != buf[5]) + { + this->setMonitoring(MONITORING_SINGLE); + } + } + + ::std::size_t + SchmersalLss300::recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command) + { + assert(this->isConnected()); + assert(len > 6); + + uint8_t* ptr; + ::std::size_t sumbytes; + ::std::size_t numbytes; + + do + { + do + { + ptr = buf; + sumbytes = 0; + + do + { + numbytes = this->serial->read(ptr, 1); + } + while (0x02 != buf[0]); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->serial->read(ptr, 1); + } + while (0x80 != buf[1]); + + ptr += numbytes; + sumbytes += numbytes; + + for (::std::size_t i = 0; i < 4; ++i) + { + numbytes = this->serial->read(ptr, 1); + + ptr += numbytes; + sumbytes += numbytes; + } + } + while (command != buf[4]); + + uint16_t length = hostEndianWord(buf[3], buf[2]); + + if (len != static_cast< ::std::size_t >(length) + 6) + { + throw DeviceException("data length mismatch in command " + command); + } + + while (sumbytes < len) + { + numbytes = this->serial->read(ptr, len - sumbytes); + + ptr += numbytes; + sumbytes += numbytes; + } + + if (this->crc(buf, sumbytes - 2) != hostEndianWord(buf[sumbytes - 1], buf[sumbytes - 2])) + { + throw DeviceException("checksum error"); + } + + return sumbytes; + } + + void + SchmersalLss300::reset() + { + assert(this->isConnected()); + + uint8_t buf[1013]; + + buf[4] = 0x10; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 2, 0x90); + } + + void + SchmersalLss300::send(uint8_t* buf, const ::std::size_t& len) + { + assert(this->isConnected()); + assert(len > 6); + + buf[0] = 0x02; + buf[1] = 0x00; + + uint16_t length = len - 6; + + buf[2] = lowByteFromHostEndian(length); + buf[3] = highByteFromHostEndian(length); + + uint16_t checksum = this->crc(buf, len - 2); + + buf[len - 2] = lowByteFromHostEndian(checksum); + buf[len - 1] = highByteFromHostEndian(checksum); + + if (len != this->serial->write(buf, len)) + { + throw DeviceException("could not send complete data"); + } + + this->serial->flush(true, false); + } + + void + SchmersalLss300::setBaudRate(const BaudRate& baudRate) + { + assert(this->isConnected()); + + uint8_t buf[1013]; + + buf[4] = 0x66; + + switch (baudRate) + { + case BAUDRATE_9600BPS: + buf[5] = 0x00; + break; + case BAUDRATE_19200BPS: + buf[5] = 0x01; + break; + case BAUDRATE_38400BPS: + buf[5] = 0x02; + break; + case BAUDRATE_57600BPS: + buf[5] = 0x03; + break; + default: + break; + } + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 2, 0xE6); + + if (0x81 == buf[5]) + { + throw DeviceException("mode switchover not possible due to internal processing error"); + } + + switch (baudRate) + { + case BAUDRATE_9600BPS: + this->serial->setBaudRate(Serial::BAUDRATE_9600BPS); + break; + case BAUDRATE_19200BPS: + this->serial->setBaudRate(Serial::BAUDRATE_19200BPS); + break; + case BAUDRATE_38400BPS: + this->serial->setBaudRate(Serial::BAUDRATE_38400BPS); + break; + case BAUDRATE_57600BPS: + this->serial->setBaudRate(Serial::BAUDRATE_57600BPS); + break; + default: + break; + } + + this->serial->changeParameters(); + + this->baudRate = baudRate; + } + + void + SchmersalLss300::setMonitoring(const Monitoring& monitoring) + { + assert(this->isConnected()); + + uint8_t buf[1013]; + + buf[4] = 0x20; + + switch (monitoring) + { + case MONITORING_CONTINUOUS: + buf[5] = 0x24; + break; + case MONITORING_SINGLE: + buf[5] = 0x25; + break; + default: + break; + } + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 2, 0xA0); + + switch (buf[5]) + { + case 0x10: + throw DeviceException("mode switchover not possible due to incorrect operating mode"); + break; + case 0x12: + throw DeviceException("mode switchover not possible due to incorrect password"); + break; + case 0x13: + throw DeviceException("mode switchover not possible due to not rectangular field"); + break; + case 0x80: + throw DeviceException("mode switchover not possible due to a sensor fault"); + break; + default: + break; + } + + this->monitoring = monitoring; + } + + void + SchmersalLss300::start() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE != this->monitoring) + { + this->setMonitoring(this->monitoring); + } + } + + void + SchmersalLss300::step() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE == this->monitoring) + { + this->data[4] = 0x30; + this->data[5] = 0x01; + + do + { + this->send(this->data, 1 + 1 + 2 + 1 + 1 + 2); + } + while (!this->waitAck()); + } + + this->recv(this->data, 1 + 1 + 2 + 1 + 1 + 1 + 2 + 1002 + 2, 0xB0); + } + + void + SchmersalLss300::stop() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE != this->monitoring) + { + this->setMonitoring(MONITORING_SINGLE); + } + } + + bool + SchmersalLss300::waitAck() + { + assert(this->isConnected()); + + uint8_t ack; + + try + { + this->timer.start(); + + do + { + this->serial->select(true, false, 0.06f); + this->serial->read(&ack, 1); + + switch (ack) + { + case 0x06: + return true; + break; + case 0x15: + return false; + break; + default: + break; + } + + this->timer.stop(); + } + while (this->timer.elapsed() < 0.06f); + } + catch (const TimeoutException&) + { + } + + return false; + } + } +} diff --git a/src/rl/hal/SchmersalLss300.h b/src/rl/hal/SchmersalLss300.h new file mode 100644 index 00000000..4e298cb1 --- /dev/null +++ b/src/rl/hal/SchmersalLss300.h @@ -0,0 +1,149 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_SCHMERSALLSS300_H_ +#define _RL_HAL_SCHMERSALLSS300_H_ + +#include + +#include "Device.h" +#include "Lidar.h" +#include "types.h" + +namespace rl +{ + namespace hal + { + class Serial; + + class SchmersalLss300 : public Lidar + { + public: + enum BaudRate + { + /** 9,600 bps. */ + BAUDRATE_9600BPS, + /** 19,200 bps. */ + BAUDRATE_19200BPS, + /** 38,400 bps. */ + BAUDRATE_38400BPS, + /** 57,600 bps. */ + BAUDRATE_57600BPS +#if 0 + /** 125,000 bps. */ + BAUDRATE_125000BPS, + /** 208,333 bps. */ + BAUDRATE_208333BPS, + /** 312,500 bps. */ + BAUDRATE_312500BPS +#endif + }; + + enum Monitoring + { + MONITORING_CONTINUOUS, + MONITORING_SINGLE + }; + + /** + * @param password String with 8 characters comprising "0...9", "a...z", "A...Z", and "_". + */ + SchmersalLss300( + const ::std::string& device = "/dev/ttyS0", + const BaudRate& baudRate = BAUDRATE_9600BPS, + const Monitoring& monitoring = MONITORING_SINGLE, + const ::std::string& password = "PASS_LSS" + ); + + virtual ~SchmersalLss300(); + + void close(); + + BaudRate getBaudRate() const; + + void getDistances(::rl::math::Vector& distances) const; + + ::std::size_t getDistancesCount() const; + + ::rl::math::Real getDistancesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getDistancesMinimum(const ::std::size_t& i) const; + + Monitoring getMonitoring() const; + + ::rl::math::Real getResolution() const; + + ::rl::math::Real getStartAngle() const; + + ::rl::math::Real getStopAngle() const; + + ::std::string getType(); + + void open(); + + void reset(); + + void setBaudRate(const BaudRate& baudRate); + + void setMonitoring(const Monitoring& monitoring); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + uint16_t crc(const uint8_t* buf, const ::std::size_t& len) const; + + ::std::size_t recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command); + + void send(uint8_t* buf, const ::std::size_t& len); + + bool waitAck(); + + BaudRate baudRate; + + uint8_t configuration; + + uint8_t data[1013]; + + BaudRate desired; + + Monitoring monitoring; + + ::std::string password; + + Serial* serial; + + ::rl::util::Timer timer; + }; + } +} + +#endif // _RL_HAL_SCHMERSALLSS300_H_ diff --git a/src/rl/hal/SchunkFpsF5.cpp b/src/rl/hal/SchunkFpsF5.cpp new file mode 100644 index 00000000..5910f022 --- /dev/null +++ b/src/rl/hal/SchunkFpsF5.cpp @@ -0,0 +1,401 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "ComException.h" +#include "DeviceException.h" +#include "endian.h" +#include "SchunkFpsF5.h" +#include "Serial.h" +#include "TimeoutException.h" + +namespace rl +{ + namespace hal + { + SchunkFpsF5::SchunkFpsF5(const ::std::string& filename) : + RangeSensor(), + a(false), + area(false), + b(false), + c(false), + closed(false), + fulcrums(), + interpolated(0.0f), + opened(false), + reCalc(false), + record(false), + serial( + new Serial( + filename, + Serial::BAUDRATE_9600BPS, + Serial::DATABITS_8BITS, + Serial::FLOWCONTROL_OFF, + Serial::PARITY_NOPARITY, + Serial::STOPBITS_1BIT + ) + ), + temperature(0.0f), + update(false), + value(0.0f), + voltage(0.0f) + { + } + + SchunkFpsF5::~SchunkFpsF5() + { + delete this->serial; + } + + void + SchunkFpsF5::close() + { + assert(this->isConnected()); + + this->serial->close(); + + this->setConnected(false); + } + + uint16_t + SchunkFpsF5::crc(const uint8_t* buf, const ::std::size_t& len) const + { + uint16_t checksum = 0xFFFF; + + for (::std::size_t i = 0; i < len; ++i) + { + checksum ^= buf[i] << 8; + + for (::std::size_t j = 0; j < 8; ++j) + { + if (checksum & 0x8000) + { + checksum <<= 1; + checksum ^= 0x1021; + } + else + { + checksum <<= 1; + } + } + } + + return checksum; + } + + void + SchunkFpsF5::getDistances(::rl::math::Vector& distances) const + { + assert(this->isConnected()); + assert(distances.size() >= this->getDistancesCount()); + + distances(0) = this->interpolated; + } + + ::std::size_t + SchunkFpsF5::getDistancesCount() const + { + return 1; + } + + ::rl::math::Real + SchunkFpsF5::getDistancesMaximum(const ::std::size_t& i) const + { + assert(i < this->getDistancesCount()); + + return 0.06f; + } + + ::rl::math::Real + SchunkFpsF5::getDistancesMinimum(const ::std::size_t& i) const + { + assert(i < this->getDistancesCount()); + + return 0; + } + + ::rl::math::Real + SchunkFpsF5::getTemperature() const + { + return this->temperature; + } + + ::rl::math::Real + SchunkFpsF5::getVoltage() const + { + return this->voltage; + } + + bool + SchunkFpsF5::isA() const + { + return this->a; + } + + bool + SchunkFpsF5::isArea() const + { + return this->area; + } + + bool + SchunkFpsF5::isB() const + { + return this->b; + } + + bool + SchunkFpsF5::isC() const + { + return this->c; + } + + bool + SchunkFpsF5::isClosed() const + { + return this->closed; + } + + bool + SchunkFpsF5::isOpened() const + { + return this->opened; + } + + bool + SchunkFpsF5::isReCalc() const + { + return this->reCalc; + } + + bool + SchunkFpsF5::isRecord() const + { + return this->record; + } + + bool + SchunkFpsF5::isUpdate() const + { + return this->update; + } + + void + SchunkFpsF5::open() + { + this->serial->open(); + this->setConnected(true); + } + + ::std::size_t + SchunkFpsF5::recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command) + { + assert(this->isConnected()); + assert(len > 7); + assert(len < 264); + + uint8_t* ptr; + ::std::size_t sumbytes; + ::std::size_t numbytes; + + do + { + ptr = buf; + sumbytes = 0; + + do + { + this->serial->select(true, false, 1.0f); + numbytes = this->serial->read(ptr, 1); + } + while (0x02 != buf[0]); + + ptr += numbytes; + sumbytes += numbytes; + + this->serial->select(true, false, 1.0f); + numbytes = this->serial->read(ptr, 1); + + ptr += numbytes; + sumbytes += numbytes; + } + while (command != buf[1]); + + while (sumbytes < len) + { + this->serial->select(true, false, 1.0f); + numbytes = this->serial->read(ptr, len - sumbytes); + + ptr += numbytes; + sumbytes += numbytes; + } + + if (this->crc(buf, sumbytes - 2) != hostEndianWord(buf[sumbytes - 2], buf[sumbytes - 1])) + { + throw DeviceException("checksum error"); + } + + return sumbytes; + } + + void + SchunkFpsF5::send(uint8_t* buf, const ::std::size_t& len) + { + assert(this->isConnected()); + assert(len > 7); + assert(len < 264); + + buf[0] = 0x02; + buf[len - 3] = 0x03; + + uint16_t checksum = this->crc(buf, len - 2); + + buf[len - 2] = highByteFromHostEndian(checksum); + buf[len - 1] = lowByteFromHostEndian(checksum); + + if (len != this->serial->write(buf, len)) + { + throw DeviceException("could not send complete data"); + } + } + + void + SchunkFpsF5::start() + { + uint8_t buf[263]; + + // fulcrums + + buf[1] = 0x01; + buf[2] = 0x64; + buf[3] = 0x00; + buf[4] = 128; + + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + this->recv(buf, 1 + 1 + 2 + 1 + 128 + 1 + 2, 0x81); + + if (0x01 == buf[5] && 0x01 == buf[6]) + { + int size = buf[7]; + + for (int i = 0; i < ::std::min(size, 31); ++i) + { + this->fulcrums.insert(::std::make_pair( + 5.0f * (hostEndianWord(~buf[9 + i * 4], ~buf[9 + i * 4 + 1]) - 0x0000) / (0xFFF0 - 0x0000), + hostEndianWord(buf[11 + i * 4], buf[11 + i * 4 + 1]) / 1000.0f / 1000.0f + )); + } + + if (size > 31) + { + buf[1] = 0x01; + buf[2] = 0xE4; + buf[3] = 0x00; + buf[4] = 128; + + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + this->recv(buf, 1 + 1 + 2 + 1 + 128 + 1 + 2, 0x81); + + for (int i = 0; i < ::std::min(size - 31, 31); ++i) + { + this->fulcrums.insert(::std::make_pair( + 5.0f * (hostEndianWord(~buf[5 + i * 4], ~buf[5 + i * 4 + 1]) - 0x0000) / (0xFFF0 - 0x0000), + hostEndianWord(buf[7 + i * 4], buf[7 + i * 4 + 1]) / 1000.0f / 1000.0f + )); + } + } + } + } + + void + SchunkFpsF5::step() + { + uint8_t buf[263]; + + buf[1] = 0x03; + buf[2] = 0x06; + buf[3] = 0x00; + buf[4] = 32; + + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + + this->recv(buf, 1 + 1 + 2 + 1 + 32 + 1 + 2, 0x83); + + // 00001000 + this->opened = (buf[5] & 8) ? true : false; + // 00010000 + this->c = (buf[5] & 16) ? true : false; + // 00100000 + this->b = (buf[5] & 32) ? true : false; + // 01000000 + this->a = (buf[5] & 64) ? true : false; + // 10000000 + this->closed = (buf[5] & 128) ? true : false; + + this->value = 5.0f * (hostEndianWord(~buf[31], ~buf[32]) - 0x0000) / (0xFFF0 - 0x0000); + + ::std::set< ::std::pair< ::rl::math::Real, ::rl::math::Real > >::iterator lower = this->fulcrums.upper_bound(::std::make_pair(this->value, ::std::numeric_limits< ::rl::math::Real >::max())); + + if (!this->fulcrums.empty()) + { + if (this->value <= (*this->fulcrums.begin()).first) + { + this->interpolated = (*this->fulcrums.begin()).second; + } + else if (this->value >= (*this->fulcrums.rbegin()).first) + { + this->interpolated = (*this->fulcrums.rbegin()).second; + } + else + { + ::std::set< ::std::pair< ::rl::math::Real, ::rl::math::Real > >::iterator upper = lower--; + this->interpolated = (this->value - (*lower).first) / ((*upper).first - (*lower).first) * ((*upper).second - (*lower).second) + (*lower).second; + } + } + else + { + this->interpolated = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + } + + this->voltage = 23.0f * (hostEndianWord(buf[33], buf[34]) - 0x3D00) / (0xB700 - 0x3D00) + 12.0f; + + this->temperature = 90.0f * (hostEndianWord(buf[35], 0x0) - 0x0A00) / (0xC300 - 0x0A00) - 20.0f; + + // 00000001 + this->area = (buf[36] & 1) ? true : false; + // 00100000 + this->update = (buf[36] & 32) ? true : false; + // 01000000 + this->record = (buf[36] & 64) ? true : false; + // 10000000 + this->reCalc = (buf[36] & 128) ? true : false; + } + + void + SchunkFpsF5::stop() + { + } + } +} diff --git a/src/rl/hal/SchunkFpsF5.h b/src/rl/hal/SchunkFpsF5.h new file mode 100644 index 00000000..6d274c8c --- /dev/null +++ b/src/rl/hal/SchunkFpsF5.h @@ -0,0 +1,130 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_SCHUNKFPSF5_H_ +#define _RL_HAL_SCHUNKFPSF5_H_ + +#include "RangeSensor.h" +#include "types.h" + +#include + +namespace rl +{ + namespace hal + { + class Serial; + + class SchunkFpsF5 : public RangeSensor + { + public: + SchunkFpsF5(const ::std::string& device = "/dev/ttyS0"); + + virtual ~SchunkFpsF5(); + + void close(); + + void getDistances(::rl::math::Vector& distances) const; + + ::std::size_t getDistancesCount() const; + + ::rl::math::Real getDistancesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getDistancesMinimum(const ::std::size_t& i) const; + + ::rl::math::Real getTemperature() const; + + ::rl::math::Real getVoltage() const; + + bool isA() const; + + bool isArea() const; + + bool isB() const; + + bool isC() const; + + bool isClosed() const; + + bool isOpened() const; + + bool isReCalc() const; + + bool isRecord() const; + + bool isUpdate() const; + + void open(); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + uint16_t crc(const uint8_t* buf, const ::std::size_t& len) const; + + ::std::size_t recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command); + + void send(uint8_t* buf, const ::std::size_t& len); + + bool a; + + bool area; + + bool b; + + bool c; + + bool closed; + + ::std::set< ::std::pair< ::rl::math::Real, ::rl::math::Real > > fulcrums; + + ::rl::math::Real interpolated; + + bool opened; + + bool reCalc; + + bool record; + + Serial* serial; + + ::rl::math::Real temperature; + + bool update; + + ::rl::math::Real value; + + ::rl::math::Real voltage; + }; + } +} + +#endif // _RL_HAL_SCHUNKFPSF5_H_ diff --git a/src/rl/hal/Serial.cpp b/src/rl/hal/Serial.cpp new file mode 100644 index 00000000..f57ee31a --- /dev/null +++ b/src/rl/hal/Serial.cpp @@ -0,0 +1,882 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#ifndef WIN32 +#include +#include +#include +#include +#ifdef __QNX__ +#include +#endif // __QNX__ +#include +#ifdef __APPLE__ +#include +#endif // __APPLE__ +#include +#endif // WIN32 + +#include "ComException.h" +#include "Serial.h" +#include "TimeoutException.h" + +#ifdef __QNX__ +#define CRTSCTS (IHFLOW | OHFLOW) +#endif // __QNX__ + +namespace rl +{ + namespace hal + { + Serial::Serial( + const ::std::string& filename, + const BaudRate& baudRate, + const DataBits& dataBits, + const FlowControl& flowControl, + const Parity& parity, + const StopBits& stopBits + ) : + Com(), + baudRate(baudRate), + current(), + dataBits(dataBits), + fd(0), + filename(filename), + flowControl(flowControl), + parity(parity), + restore(), + stopBits(stopBits) + { +#ifndef WIN32 + cfmakeraw(&this->current); +#endif // WIN32 + this->setBaudRate(this->baudRate); + this->setDataBits(this->dataBits); + this->setFlowControl(this->flowControl); + this->setParity(this->parity); + this->setStopBits(this->stopBits); + } + + Serial::~Serial() + { + if (this->isConnected()) + { + this->close(); + } + } + + void + Serial::changeParameters() + { +#ifdef WIN32 + if (0 == SetCommState(this->fd, &this->current)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == tcsetattr(this->fd, TCSANOW, &this->current)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + } + + void + Serial::close() + { + assert(this->isConnected()); + +#ifdef WIN32 + if (0 == SetCommState(this->fd, &this->restore)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + + this->flush(true, true); + + if (0 == CloseHandle(this->fd)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == tcsetattr(this->fd, TCSANOW, &this->restore)) + { + throw ComException(strerror(errno)); + } + + this->flush(true, true); + + if (-1 == ::close(this->fd)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + this->setConnected(false); + } + + void + Serial::doBreak(const bool& doOn) + { +#ifdef WIN32 + if (0 == EscapeCommFunction(this->fd, doOn ? SETBREAK : CLRBREAK)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == ioctl(this->fd, doOn ? TIOCSBRK : TIOCCBRK)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + } + + void + Serial::doDtr(const bool& doOn) + { +#ifdef WIN32 + if (0 == EscapeCommFunction(this->fd, doOn ? SETDTR : CLRDTR)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == ioctl(this->fd, doOn ? TIOCMBIS : TIOCMBIC, TIOCM_DTR)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + } + + void + Serial::doModemStatus(bool& ctsOn, bool& dsrOn, bool& riOn, bool& dcdOn) + { +#ifdef WIN32 + DWORD status; + + if (0 == GetCommModemStatus(this->fd, &status)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + + ctsOn = status & MS_CTS_ON ? true : false; + dsrOn = status & MS_DSR_ON ? true : false; + riOn = status & MS_RING_ON ? true : false; + dcdOn = status & MS_RLSD_ON ? true : false; +#else // WIN32 + int status = 0; + + if (-1 == ioctl(this->fd, TIOCMGET, status)) + { + throw ComException(strerror(errno)); + } + + ctsOn = status & TIOCM_CTS; + dsrOn = status & TIOCM_DSR; + riOn = status & TIOCM_RI; + dcdOn = status & TIOCM_CD; +#endif // WIN32 + } + + void + Serial::doRts(const bool& doOn) + { +#ifdef WIN32 + if (0 == EscapeCommFunction(this->fd, doOn ? SETRTS : CLRRTS)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == ioctl(this->fd, doOn ? TIOCMBIS : TIOCMBIC, TIOCM_RTS)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + } + + void + Serial::flush(const bool& read, const bool& write) + { + assert(this->isConnected()); + +#ifdef WIN32 + if (read && write) + { + if (0 == PurgeComm(this->fd, PURGE_RXCLEAR | PURGE_TXCLEAR)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + } + else if (read) + { + if (0 == PurgeComm(this->fd, PURGE_RXCLEAR)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + } + else if (write) + { + if (0 == PurgeComm(this->fd, PURGE_TXCLEAR)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + } +#else // WIN32 + if (read && write) + { + if (-1 == tcflush(this->fd, TCIOFLUSH)) + { + throw ComException(strerror(errno)); + } + } + else if (read) + { + if (-1 == tcflush(this->fd, TCIFLUSH)) + { + throw ComException(strerror(errno)); + } + } + else if (write) + { + if (-1 == tcflush(this->fd, TCOFLUSH)) + { + throw ComException(strerror(errno)); + } + } +#endif // WIN32 + } + + Serial::BaudRate + Serial::getBaudRate() const + { + return this->baudRate; + } + + Serial::DataBits + Serial::getDataBits() const + { + return this->dataBits; + } + + ::std::string + Serial::getFilename() const + { + return this->filename; + } + + Serial::FlowControl + Serial::getFlowControl() const + { + return this->flowControl; + } + + Serial::Parity + Serial::getParity() const + { + return this->parity; + } + + Serial::StopBits + Serial::getStopBits() const + { + return this->stopBits; + } + + void + Serial::open() + { + assert(!this->isConnected()); + +#ifdef WIN32 + this->fd = ::CreateFile(this->filename.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + + if (INVALID_HANDLE_VALUE == this->fd) + { + this->fd = 0; + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + + this->setConnected(true); + + if (0 == GetCommState(this->fd, &this->restore)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } + + this->flush(true, true); + + if (0 == SetCommState(this->fd, &this->current)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + this->fd = ::open(this->filename.c_str(), O_RDWR | O_NONBLOCK | O_NOCTTY); + + if (-1 == this->fd) + { + throw ComException(strerror(errno)); + } + + this->setConnected(true); + + if (-1 == tcgetattr(this->fd, &this->restore)) + { + throw ComException(strerror(errno)); + } + + this->flush(true, true); + + this->current.c_cflag |= CREAD | CLOCAL; + + if (-1 == tcsetattr(this->fd, TCSANOW, &this->current)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + } + + ::std::size_t + Serial::read(void* buf, const ::std::size_t& count) + { + assert(this->isConnected()); + + memset(buf, 0, count); + +#ifdef WIN32 + DWORD numbytes; + + if (0 == ReadFile(this->fd, buf, count, &numbytes, NULL)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + ssize_t numbytes = ::read(this->fd, buf, count); + + if (-1 == numbytes) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + return numbytes; + } + + ::std::size_t + Serial::select(const bool& read, const bool& write, const ::rl::math::Real& timeout) + { +#ifdef WIN32 + assert(false); + return 0; +#else + ::rl::math::Real tmp = timeout; + + struct timeval tv; + + tv.tv_sec = static_cast< long int >(tmp); + tmp -= tv.tv_sec; + tv.tv_usec = static_cast< long int >(tmp * 1000000.0f); + + fd_set readfds; + FD_ZERO(&readfds); + FD_SET(this->fd, &readfds); + + fd_set writefds; + FD_ZERO(&writefds); + FD_SET(this->fd, &writefds); + + ssize_t numdescriptors; + + if (read && write) + { + numdescriptors = ::select(this->fd + 1, &readfds, &writefds, NULL, &tv); + } + else if (read) + { + numdescriptors = ::select(this->fd + 1, &readfds, NULL, NULL, &tv); + } + else if (write) + { + numdescriptors = ::select(this->fd + 1, NULL, &writefds, NULL, &tv); + } + else + { + numdescriptors = ::select(this->fd + 1, NULL, NULL, NULL, &tv); + } + + if (0 == numdescriptors) + { + throw TimeoutException(); + } + else if (-1 == numdescriptors) + { + throw ComException(strerror(errno)); + } + + return numdescriptors; +#endif // WIN32 + } + + void + Serial::setBaudRate(const BaudRate& baudRate) + { +#ifdef WIN32 + switch (baudRate) + { + case BAUDRATE_110BPS: + this->current.BaudRate = CBR_110; + break; + case BAUDRATE_300BPS: + this->current.BaudRate = CBR_300; + break; + case BAUDRATE_600BPS: + this->current.BaudRate = CBR_600; + break; + case BAUDRATE_1200BPS: + this->current.BaudRate = CBR_1200; + break; + case BAUDRATE_2400BPS: + this->current.BaudRate = CBR_2400; + break; + case BAUDRATE_4800BPS: + this->current.BaudRate = CBR_4800; + break; + case BAUDRATE_9600BPS: + this->current.BaudRate = CBR_9600; + break; + case BAUDRATE_14400BPS: + this->current.BaudRate = CBR_14400; + break; + case BAUDRATE_19200BPS: + this->current.BaudRate = CBR_19200; + break; + case BAUDRATE_38400BPS: + this->current.BaudRate = CBR_38400; + break; + case BAUDRATE_57600BPS: + this->current.BaudRate = CBR_57600; + break; + case BAUDRATE_115200BPS: + this->current.BaudRate = CBR_115200; + break; + case BAUDRATE_128000BPS: + this->current.BaudRate = CBR_128000; + break; + case BAUDRATE_256000BPS: + this->current.BaudRate = CBR_256000; + break; + default: + break; + } +#else // WIN32 + speed_t speed = B110; + + switch (baudRate) + { + case BAUDRATE_110BPS: + speed = B110; + break; + case BAUDRATE_300BPS: + speed = B300; + break; + case BAUDRATE_600BPS: + speed = B600; + break; + case BAUDRATE_1200BPS: + speed = B1200; + break; + case BAUDRATE_2400BPS: + speed = B2400; + break; + case BAUDRATE_4800BPS: + speed = B4800; + break; + case BAUDRATE_9600BPS: + speed = B9600; + break; + case BAUDRATE_19200BPS: + speed = B19200; + break; + case BAUDRATE_38400BPS: + speed = B38400; + break; + case BAUDRATE_57600BPS: + speed = B57600; + break; + case BAUDRATE_115200BPS: + speed = B115200; + break; +#ifndef __QNX__ + case BAUDRATE_230400BPS: + speed = B230400; + break; +#ifndef __APPLE__ + case BAUDRATE_460800BPS: + speed = B460800; + break; + case BAUDRATE_500000BPS: + speed = B500000; + break; + case BAUDRATE_576000BPS: + speed = B576000; + break; + case BAUDRATE_921600BPS: + speed = B921600; + break; + case BAUDRATE_1000000BPS: + speed = B1000000; + break; + case BAUDRATE_1152000BPS: + speed = B1152000; + break; + case BAUDRATE_1500000BPS: + speed = B1500000; + break; + case BAUDRATE_2000000BPS: + speed = B2000000; + break; + case BAUDRATE_2500000BPS: + speed = B2500000; + break; + case BAUDRATE_3000000BPS: + speed = B3000000; + break; + case BAUDRATE_3500000BPS: + speed = B3500000; + break; + case BAUDRATE_4000000BPS: + speed = B4000000; + break; +#endif // __APPLE__ +#endif // __QNX__ + default: + break; + } + + if (-1 == cfsetispeed(&this->current, speed)) + { + throw ComException(strerror(errno)); + } + + if (-1 == cfsetospeed(&this->current, speed)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + this->baudRate = baudRate; + } + + void + Serial::setDataBits(const DataBits& dataBits) + { +#ifdef WIN32 + switch (dataBits) + { + case DATABITS_5BITS: + this->current.ByteSize = 5; + break; + case DATABITS_6BITS: + this->current.ByteSize = 6; + break; + case DATABITS_7BITS: + this->current.ByteSize = 7; + break; + case DATABITS_8BITS: + this->current.ByteSize = 8; + break; + default: + break; + } +#else // WIN32 + switch (dataBits) + { + case DATABITS_5BITS: + this->current.c_cflag &= ~(CS6 | CS7 | CS8); + this->current.c_cflag |= CS5; + this->current.c_iflag |= ISTRIP; + break; + case DATABITS_6BITS: + this->current.c_cflag &= ~(CS5 | CS7 | CS8); + this->current.c_cflag |= CS6; + this->current.c_iflag |= ISTRIP; + break; + case DATABITS_7BITS: + this->current.c_cflag &= ~(CS5 | CS6 | CS8); + this->current.c_cflag |= CS7; + this->current.c_iflag |= ISTRIP; + break; + case DATABITS_8BITS: + this->current.c_cflag &= ~(CS5 | CS6 | CS7); + this->current.c_cflag |= CS8; + this->current.c_iflag &= ~ISTRIP; + break; + default: + break; + } +#endif // WIN32 + + this->dataBits = dataBits; + } + + void + Serial::setFilename(const ::std::string& filename) + { + this->filename = filename; + } + + void + Serial::setFlowControl(const FlowControl& flowControl) + { +#ifdef WIN32 + switch (flowControl) + { + case FLOWCONTROL_OFF: + this->current.fOutxCtsFlow = false; + this->current.fOutxDsrFlow = false; + this->current.fDtrControl = DTR_CONTROL_DISABLE; + this->current.fOutX = false; + this->current.fInX = false; + this->current.fRtsControl = RTS_CONTROL_DISABLE; + this->current.XoffChar = 0x00; + this->current.XonChar = 0x00; + break; + case FLOWCONTROL_RTSCTS: + this->current.fOutxCtsFlow = true; + this->current.fOutxDsrFlow = true; + this->current.fDtrControl = DTR_CONTROL_HANDSHAKE; + this->current.fOutX = false; + this->current.fInX = false; + this->current.fRtsControl = RTS_CONTROL_HANDSHAKE; + this->current.XoffChar = 0x00; + this->current.XonChar = 0x00; + break; + case FLOWCONTROL_XONXOFF: + this->current.fOutxCtsFlow = false; + this->current.fOutxDsrFlow = false; + this->current.fDtrControl = DTR_CONTROL_DISABLE; + this->current.fOutX = true; + this->current.fInX = true; + this->current.fRtsControl = RTS_CONTROL_DISABLE; + this->current.XoffChar = 0x13; + this->current.XonChar = 0x11; + break; + default: + break; + } +#else // WIN32 + switch (flowControl) + { + case FLOWCONTROL_OFF: + this->current.c_cflag &= ~CRTSCTS; + this->current.c_iflag &= ~(IXANY | IXOFF | IXON); + this->current.c_cc[VSTART] = 0x00; + this->current.c_cc[VSTOP] = 0x00; + break; + case FLOWCONTROL_RTSCTS: + this->current.c_cflag |= CRTSCTS; + this->current.c_iflag &= ~(IXANY | IXOFF | IXON); + this->current.c_cc[VSTART] = 0x00; + this->current.c_cc[VSTOP] = 0x00; + break; + case FLOWCONTROL_XONXOFF: + this->current.c_cflag &= ~CRTSCTS; + this->current.c_iflag |= IXANY | IXOFF | IXON; + this->current.c_cc[VSTART] = 0x11; + this->current.c_cc[VSTOP] = 0x13; + break; + default: + break; + } +#endif // WIN32 + + this->flowControl = flowControl; + } + + void + Serial::setParity(const Parity& parity) + { +#ifdef WIN32 + switch (parity) + { + case PARITY_EVENPARITY: + this->current.Parity = EVENPARITY; + break; + case PARITY_NOPARITY: + this->current.Parity = NOPARITY; + break; + case PARITY_ODDPARITY: + this->current.Parity = ODDPARITY; + break; + default: + break; + } +#else // WIN32 + switch (parity) + { + case PARITY_EVENPARITY: + this->current.c_cflag &= ~PARODD; + this->current.c_cflag |= PARENB; + this->current.c_iflag &= ~IGNPAR; + this->current.c_iflag |= INPCK; + break; + case PARITY_NOPARITY: + this->current.c_cflag &= ~(PARENB | PARODD); + this->current.c_iflag &= ~INPCK; + this->current.c_iflag |= IGNPAR; + break; + case PARITY_ODDPARITY: + this->current.c_cflag |= PARENB | PARODD; + this->current.c_iflag &= ~IGNPAR; + this->current.c_iflag |= INPCK; + break; + default: + break; + } +#endif // WIN32 + + this->parity = parity; + } + + void + Serial::setStopBits(const StopBits& stopBits) + { +#ifdef WIN32 + switch (stopBits) + { + case STOPBITS_1BIT: + this->current.StopBits = ONESTOPBIT; + break; + case STOPBITS_2BITS: + this->current.StopBits = TWOSTOPBITS; + break; + default: + break; + } +#else // WIN32 + switch (stopBits) + { + case STOPBITS_1BIT: + this->current.c_cflag &= ~CSTOPB; + break; + case STOPBITS_2BITS: + this->current.c_cflag |= CSTOPB; + break; + default: + break; + } +#endif // WIN32 + + this->stopBits = stopBits; + } + + ::std::size_t + Serial::write(const void* buf, const ::std::size_t& count) + { + assert(this->isConnected()); + +#ifdef WIN32 + DWORD numbytes; + + if (0 == WriteFile(this->fd, buf, count, &numbytes, NULL)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 0, NULL); + ComException e(NULL != buffer ? buffer : "ComException"); + LocalFree(buffer); + throw e; + } +#else // WIN32 + ssize_t numbytes = ::write(this->fd, buf, count); + + if (-1 == numbytes) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + return numbytes; + } + } +} diff --git a/src/rl/hal/Serial.h b/src/rl/hal/Serial.h new file mode 100644 index 00000000..458fddf5 --- /dev/null +++ b/src/rl/hal/Serial.h @@ -0,0 +1,250 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_SERIAL_H_ +#define _RL_HAL_SERIAL_H_ + +#include +#include + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include "Com.h" + +namespace rl +{ + namespace hal + { + class Serial : public Com + { + public: + enum BaudRate + { + /** 110 bps. */ + BAUDRATE_110BPS, + /** 300 bps. */ + BAUDRATE_300BPS, + /** 600 bps. */ + BAUDRATE_600BPS, + /** 1,200 bps. */ + BAUDRATE_1200BPS, + /** 2,400 bps. */ + BAUDRATE_2400BPS, + /** 4,800 bps. */ + BAUDRATE_4800BPS, + /** 9,600 bps. */ + BAUDRATE_9600BPS, +#ifdef WIN32 + /** 14,400 bps. */ + BAUDRATE_14400BPS, +#endif // WIN32 + /** 19,200 bps. */ + BAUDRATE_19200BPS, + /** 38,400 bps. */ + BAUDRATE_38400BPS, + /** 57,600 bps. */ + BAUDRATE_57600BPS, + /** 115,200 bps. */ +#ifdef __QNX__ + BAUDRATE_115200BPS +#else // __QNX__ + BAUDRATE_115200BPS, +#endif // __QNX__ +#ifdef WIN32 + /** 128,000 bps. */ + BAUDRATE_128000BPS, + /** 256,000 bps. */ + BAUDRATE_256000BPS +#else // WIN32 +#ifndef __QNX__ + /** 230,400 bps. */ + BAUDRATE_230400BPS, + /** 460,800 bps. */ + BAUDRATE_460800BPS, + /** 500,000 bps. */ + BAUDRATE_500000BPS, + /** 576,000 bps. */ + BAUDRATE_576000BPS, + /** 921,600 bps. */ + BAUDRATE_921600BPS, + /** 1,000,000 bps. */ + BAUDRATE_1000000BPS, + /** 1,152000 bps. */ + BAUDRATE_1152000BPS, + /** 1,500,000 bps. */ + BAUDRATE_1500000BPS, + /** 2,000,000 bps. */ + BAUDRATE_2000000BPS, + /** 2,500,000 bps. */ + BAUDRATE_2500000BPS, + /** 3,000,000 bps. */ + BAUDRATE_3000000BPS, + /** 3,500,000 bps. */ + BAUDRATE_3500000BPS, + /** 4,000,000 bps. */ + BAUDRATE_4000000BPS +#endif // __QNX__ +#endif // WIN32 + }; + + enum DataBits + { + /** 5 data bits. */ + DATABITS_5BITS, + /** 6 data bits. */ + DATABITS_6BITS, + /** 7 data bits. */ + DATABITS_7BITS, + /** 8 data bits. */ + DATABITS_8BITS + }; + + enum FlowControl + { + /** No flow control. */ + FLOWCONTROL_OFF, + /** Hardware flow control (RTS/CTS). */ + FLOWCONTROL_RTSCTS, + /** Software flow control (XON/XOFF). */ + FLOWCONTROL_XONXOFF + }; + + enum Parity + { + /** Even parity. */ + PARITY_EVENPARITY, + /** No parity. */ + PARITY_NOPARITY, + /** Odd parity. */ + PARITY_ODDPARITY + }; + + enum StopBits + { + /** 1 stop bit. */ + STOPBITS_1BIT, + /** 2 stop bits. */ + STOPBITS_2BITS + }; + + Serial( + const ::std::string& filename, + const BaudRate& baudRate = BAUDRATE_9600BPS, + const DataBits& dataBits = DATABITS_8BITS, + const FlowControl& flowControl = FLOWCONTROL_OFF, + const Parity& parity = PARITY_NOPARITY, + const StopBits& stopBits = STOPBITS_1BIT + ); + + virtual ~Serial(); + + void changeParameters(); + + void close(); + + void doBreak(const bool& doOn); + + void doDtr(const bool& doOn); + + void doModemStatus(bool& ctsOn, bool& dsrOn, bool& riOn, bool& dcdOn); + + void doRts(const bool& doOn); + + void flush(const bool& read, const bool& write); + + BaudRate getBaudRate() const; + + DataBits getDataBits() const; + + ::std::string getFilename() const; + + FlowControl getFlowControl() const; + + Parity getParity() const; + + StopBits getStopBits() const; + + void open(); + + ::std::size_t read(void* buf, const ::std::size_t& count); + + ::std::size_t select(const bool& read, const bool& write, const ::rl::math::Real& timeout); + + void setBaudRate(const BaudRate& baudRate); + + void setDataBits(const DataBits& dataBits); + + void setFilename(const ::std::string& filename); + + void setFlowControl(const FlowControl& flowControl); + + void setParity(const Parity& parity); + + void setStopBits(const StopBits& stopBits); + + ::std::size_t write(const void* buf, const ::std::size_t& count); + + protected: + + private: + BaudRate baudRate; + +#ifdef WIN32 + DCB current; +#else // WIN32 + struct termios current; +#endif // WIN32 + + DataBits dataBits; + +#ifdef WIN32 + HANDLE fd; +#else // WIN32 + int fd; +#endif // WIN32 + + ::std::string filename; + + FlowControl flowControl; + + Parity parity; + +#ifdef WIN32 + DCB restore; +#else // WIN32 + struct termios restore; +#endif // WIN32 + + StopBits stopBits; + }; + } +} + +#endif // _RL_HAL_SERIAL_H_ diff --git a/src/rl/hal/SickLms200.cpp b/src/rl/hal/SickLms200.cpp new file mode 100644 index 00000000..f5282724 --- /dev/null +++ b/src/rl/hal/SickLms200.cpp @@ -0,0 +1,1323 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "ComException.h" +#include "DeviceException.h" +#include "endian.h" +#include "SickLms200.h" +#include "Serial.h" +#include "TimeoutException.h" + +namespace rl +{ + namespace hal + { + SickLms200::SickLms200( + const ::std::string& filename, + const BaudRate& baudRate, + const Monitoring& monitoring, + const Variant& variant, + const Measuring& measuring, + const ::std::string& password + ) : + Lidar(), + baudRate(BAUDRATE_9600BPS), + configuration(0x00), + data(), + desired(baudRate), + measuring(measuring), + monitoring(monitoring), + password(password), + serial( + new Serial( + filename, + Serial::BAUDRATE_9600BPS, + Serial::DATABITS_8BITS, + Serial::FLOWCONTROL_OFF, + Serial::PARITY_NOPARITY, + Serial::STOPBITS_1BIT + ) + ), + timer(), + variant(variant) + { + assert(8 == password.length()); + } + + SickLms200::~SickLms200() + { + delete this->serial; + } + + void + SickLms200::close() + { + assert(this->isConnected()); + + if (MEASURING_8M != this->measuring) + { + this->setMeasuring(MEASURING_8M); + } + + if (VARIANT_180_50 != this->variant) + { + this->setVariant(VARIANT_180_50); + } + + if (MONITORING_SINGLE != this->monitoring) + { + this->setMonitoring(MONITORING_SINGLE); + } + + if (BAUDRATE_9600BPS != this->baudRate) + { + this->setBaudRate(BAUDRATE_9600BPS); + } + + this->serial->close(); + + this->setConnected(false); + } + + uint16_t + SickLms200::crc(const uint8_t* buf, const ::std::size_t& len) const + { + uint16_t checksum = buf[0]; + + for (::std::size_t i = 1; i < len; ++i) + { + if (checksum & 0x8000) + { + checksum <<= 1; + checksum ^= 0x8005; + } + else + { + checksum <<= 1; + } + + checksum ^= (buf[i - 1] << 8) | buf[i]; + } + + return checksum; + } + + void + SickLms200::dumpConfiguration() + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x74; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 32 + 1 + 2, 0xF4); + + printf("A: %i\n", hostEndianWord(buf[6], buf[5])); + printf("B: %02x %02x\n", buf[8], buf[7]); + printf("C: %02x\n", buf[9]); + + if (buf[9] & 1) + { + ::std::cout << "Availability level 3" << ::std::endl; + } + + if (buf[9] & 2) + { + ::std::cout << "Send real-time indices" << ::std::endl; + } + + if (buf[9] & 4) + { + ::std::cout << "Availability level 2" << ::std::endl; + } + + printf("D: %02x\n", buf[10]); + printf("E: %02x\n", buf[11]); + printf("F: %02x\n", buf[12]); + printf("G: %02x\n", buf[13]); + printf("H: %02x\n", buf[14]); + printf("I: %02x\n", buf[15]); + printf("J: %02x\n", buf[16]); + printf("K: %02x\n", buf[17]); + printf("L: %02x\n", buf[18]); + printf("M: %02x\n", buf[19]); + printf("N: %02x\n", buf[20]); + printf("O: %02x\n", buf[21]); + printf("P: %02x\n", buf[22]); + printf("Q: %02x\n", buf[23]); + printf("R: %02x\n", buf[24]); + printf("S: %02x\n", buf[25]); + printf("T: %02x\n", buf[26]); + printf("U: %02x\n", buf[27]); + printf("V: %02x\n", buf[28]); + printf("W: %02x\n", buf[29]); + printf("X: %02x\n", buf[30]); + printf("Y: %02x\n", buf[31]); + printf("Z: %02x\n", buf[32]); + printf("A1: %02x\n", buf[33]); + printf("A2: %02x\n", buf[34]); + printf("A3: %02x %02x\n", buf[36], buf[35]); + printf("A4: %02x %02x\n", buf[38], buf[37]); + } + + void + SickLms200::dumpStatus() + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x31; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 152 + 1 + 2, 0xB1); + + printf("A: %c %c %c %c %c %c %c\n", buf[5], buf[6], buf[7], buf[8], buf[9], buf[10], buf[11]); + printf("B: %02x\n", buf[12]); + printf("C: %02x\n", buf[13]); + printf("D: reserved\n"); + printf("?: %c %c %c %c %c %c\n", buf[16], buf[17], buf[18], buf[19], buf[20], buf[21]); + printf("E: %02x\n", buf[22]); + printf("F: %i %i %i %i %i %i %i %i\n", + hostEndianWord(buf[24], buf[23]), + hostEndianWord(buf[26], buf[25]), + hostEndianWord(buf[28], buf[27]), + hostEndianWord(buf[30], buf[29]), + hostEndianWord(buf[32], buf[31]), + hostEndianWord(buf[34], buf[33]), + hostEndianWord(buf[36], buf[35]), + hostEndianWord(buf[38], buf[37]) + ); + printf("G: %i %i %i %i\n", + hostEndianWord(buf[40], buf[39]), + hostEndianWord(buf[42], buf[41]), + hostEndianWord(buf[44], buf[43]), + hostEndianWord(buf[46], buf[45]) + ); + printf("H: %i %i %i %i %i %i %i %i\n", + hostEndianWord(buf[48], buf[47]), + hostEndianWord(buf[50], buf[49]), + hostEndianWord(buf[52], buf[51]), + hostEndianWord(buf[54], buf[53]), + hostEndianWord(buf[56], buf[55]), + hostEndianWord(buf[58], buf[57]), + hostEndianWord(buf[60], buf[59]), + hostEndianWord(buf[62], buf[61]) + ); + printf("I: %i %i %i %i\n", + hostEndianWord(buf[64], buf[63]), + hostEndianWord(buf[66], buf[65]), + hostEndianWord(buf[68], buf[67]), + hostEndianWord(buf[70], buf[69]) + ); + printf("J: %i\n", hostEndianWord(buf[72], buf[71])); + printf("K: reserved\n"); + printf("L: %i\n", hostEndianWord(buf[76], buf[75])); + printf("M: reserved\n"); + printf("N: %i\n", hostEndianWord(buf[80], buf[79])); + printf("O: %i\n", hostEndianWord(buf[82], buf[81])); + printf("P: reserved\n"); + printf("Q: %i\n", hostEndianWord(buf[86], buf[85])); + printf("R: %i\n", hostEndianWord(buf[88], buf[87])); + printf("S: %i\n", hostEndianWord(buf[90], buf[89])); + printf("T: %i\n", hostEndianWord(buf[92], buf[91])); + printf("U: %i\n", hostEndianWord(buf[94], buf[93])); + printf("V: %i\n", hostEndianWord(buf[96], buf[95])); + printf("W: %i\n", hostEndianWord(buf[98], buf[97])); + printf("X: %i\n", hostEndianWord(buf[100], buf[99])); + printf("Y: %i\n", hostEndianWord(buf[102], buf[101])); + printf("Z: %i\n", hostEndianWord(buf[104], buf[103])); + printf("A1: reserved\n"); + printf("A2: %02x\n", buf[106]); + printf("A3: H:%02x L:%02x\n", buf[108], buf[107]); + printf("A4: H:%02x L:%02x\n", buf[110], buf[109]); + printf("A5: %i\n", hostEndianWord(buf[112], buf[111])); + printf("A6: %i\n", hostEndianWord(buf[114], buf[113])); + printf("A7: %02x\n", buf[115]); + printf("A8: %i\n", hostEndianWord(buf[117], buf[116])); + printf("A9: %c\n", buf[118]); + printf("B1: reserved\n"); + printf("B2: %04x\n", hostEndianWord(buf[121], buf[120])); + printf("B3: %02x\n", buf[122]); + printf("B4: %02x\n", buf[123]); + printf("B5: %02x\n", buf[124]); + printf("B6: %02x\n", buf[125]); + printf("B7: %02x\n", buf[126]); + printf("B8: %02x\n", buf[127]); + printf("B9: %c %c %c %c %c %c %c\n", buf[128], buf[129], buf[130], buf[131], buf[132], buf[133], buf[134]); + printf("C1: %i\n", hostEndianDoubleWord(hostEndianWord(buf[138], buf[137]), hostEndianWord(buf[136], buf[135]))); + printf("C2: %i\n", hostEndianDoubleWord(hostEndianWord(buf[142], buf[141]), hostEndianWord(buf[140], buf[139]))); + printf("C3: %i\n", hostEndianDoubleWord(hostEndianWord(buf[146], buf[145]), hostEndianWord(buf[144], buf[143]))); + printf("C4: %i\n", hostEndianDoubleWord(hostEndianWord(buf[150], buf[149]), hostEndianWord(buf[148], buf[147]))); + printf("C5: %i\n", hostEndianWord(buf[152], buf[151])); + printf("C6: %i\n", hostEndianWord(buf[154], buf[153])); + printf("C7: %i\n", hostEndianWord(buf[156], buf[155])); + } + + SickLms200::BaudRate + SickLms200::getBaudRate() const + { + return this->baudRate; + } + + void + SickLms200::getDistances(::rl::math::Vector& distances) const + { + assert(this->isConnected()); + assert(distances.size() >= this->getDistancesCount()); + + if (this->data[6] & 32) + { + throw DeviceException("partial scan"); + } + + ::rl::math::Real scale; + + switch (this->data[6] & 192) + { + case 0: + scale = 0.01f; + break; + case 64: + scale = 0.001f; + break; + default: + throw DeviceException("unknown scale"); + break; + } + + uint16_t count = hostEndianWord(this->data[6] & 11, this->data[5]); + + uint8_t mask; + + switch (this->configuration) + { + case 0x00: + case 0x01: + case 0x02: + mask = 0x1F; + break; + case 0x03: + case 0x04: + case 0x05: + mask = 0x3F; + break; + case 0x06: + mask = 0x7F; + break; + default: + mask = 0x00; + break; + } + + uint16_t value; + + for (::std::size_t i = 0; i < count; ++i) + { + value = hostEndianWord(this->data[8 + i * 2] & mask, this->data[7 + i * 2]); + + switch (this->configuration) + { + case 0x00: + case 0x01: + case 0x02: + switch (value) + { + case 0x1FFF: +::std::cerr << "Measured value not valid" << ::std::endl; + case 0x1FFE: +::std::cerr << "Dazzling" << ::std::endl; + case 0x1FFD: +::std::cerr << "Operation overflow" << ::std::endl; + case 0x1FFB: +::std::cerr << "Signal-to-noise ratio too small" << ::std::endl; + case 0x1FFA: +::std::cerr << "Error when reading channel 1" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + break; + case 0x1FF7: +::std::cerr << "Measured value > Maximum value" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::infinity(); + break; + default: + distances(i) = value; + distances(i) *= scale; + break; + } + break; + case 0x03: + case 0x04: + case 0x05: + switch (value) + { + case 0x3FFF: +::std::cerr << "Measured value not valid" << ::std::endl; + case 0x3FFE: +::std::cerr << "Dazzling" << ::std::endl; + case 0x3FFD: +::std::cerr << "Operation overflow" << ::std::endl; + case 0x3FFB: +::std::cerr << "Signal-to-noise ratio too small" << ::std::endl; + case 0x3FFA: +::std::cerr << "Error when reading channel 1" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + break; + case 0x3FF7: +::std::cerr << "Measured value > Maximum value" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::infinity(); + break; + default: + distances(i) = value; + distances(i) *= scale; + break; + } + break; + case 0x06: + switch (value) + { + case 0x7FFF: +::std::cerr << "Measured value not valid" << ::std::endl; + case 0x7FFE: +::std::cerr << "Dazzling" << ::std::endl; + case 0x7FFD: +::std::cerr << "Operation overflow" << ::std::endl; + case 0x7FFB: +::std::cerr << "Signal-to-noise ratio too small" << ::std::endl; + case 0x7FFA: +::std::cerr << "Error when reading channel 1" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + break; + case 0x7FF7: +::std::cerr << "Measured value > Maximum value" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::infinity(); + break; + default: + distances(i) = value; + distances(i) *= scale; + break; + } + default: + distances(i) = value; + distances(i) *= scale; + break; + } + } + } + + ::std::size_t + SickLms200::getDistancesCount() const + { + assert(this->isConnected()); + + switch (this->variant) + { + case VARIANT_100_25: + return 401; + break; + case VARIANT_100_50: + return 201; + break; + case VARIANT_100_100: + return 101; + break; + case VARIANT_180_50: + return 361; + break; + case VARIANT_180_100: + return 181; + break; + default: + break; + } + + return 0; + } + + ::rl::math::Real + SickLms200::getDistancesMaximum(const ::std::size_t& i) const + { + assert(this->isConnected()); + assert(i < this->getDistancesCount()); + + switch (this->measuring) + { + case MEASURING_8M: + return 8.182f; + break; + case MEASURING_16M: + return 16.374f; + break; + case MEASURING_32M: + return 32.758f; + break; + case MEASURING_80M: + return 81.82f; + break; + case MEASURING_160M: + return 163.74f; + break; + case MEASURING_320M: + return 327.58f; + break; + default: + break; + } + + return 0.0f; + } + + ::rl::math::Real + SickLms200::getDistancesMinimum(const ::std::size_t& i) const + { + assert(this->isConnected()); + assert(i < this->getDistancesCount()); + + return 0.0f; + } + + SickLms200::Measuring + SickLms200::getMeasuring() const + { + assert(this->isConnected()); + + return this->measuring; + } + + SickLms200::Monitoring + SickLms200::getMonitoring() const + { + assert(this->isConnected()); + + return this->monitoring; + } + + ::rl::math::Real + SickLms200::getResolution() const + { + assert(this->isConnected()); + + switch (this->variant) + { + case VARIANT_100_25: + return 0.25f * ::rl::math::DEG2RAD; + break; + case VARIANT_100_50: + case VARIANT_180_50: + return 0.5f * ::rl::math::DEG2RAD; + break; + case VARIANT_100_100: + case VARIANT_180_100: + return 1.0f * ::rl::math::DEG2RAD; + break; + default: + break; + } + + return 0.0f; + } + + ::rl::math::Real + SickLms200::getStartAngle() const + { + assert(this->isConnected()); + + switch (this->variant) + { + case VARIANT_100_25: + case VARIANT_100_50: + case VARIANT_100_100: + return 40.0f * ::rl::math::DEG2RAD; + break; + case VARIANT_180_50: + case VARIANT_180_100: + return 0.0f; + break; + default: + break; + } + + return 0.0f; + } + + ::rl::math::Real + SickLms200::getStopAngle() const + { + assert(this->isConnected()); + + switch (this->variant) + { + case VARIANT_100_25: + case VARIANT_100_50: + case VARIANT_100_100: + return 140.0f * ::rl::math::DEG2RAD; + break; + case VARIANT_180_50: + case VARIANT_180_100: + return 180.0f * ::rl::math::DEG2RAD; + break; + default: + break; + } + + return 0.0f; + } + + ::std::string + SickLms200::getType() + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x3A; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 21 + 1 + 2, 0xBA); + + return ::std::string(reinterpret_cast< char* >(buf + 5), 20); + } + + SickLms200::Variant + SickLms200::getVariant() const + { + assert(this->isConnected()); + + return this->variant; + } + + void + SickLms200::open() + { + this->serial->open(); + + this->setConnected(true); + + uint8_t buf[812]; + + // synchronize baud rates + + buf[4] = 0x20; + buf[5] = 0x42; + +#if defined(WIN32) || defined(__QNX__) + Serial::BaudRate baudRates[3] = { +#else // defined(WIN32) || defined(__QNX__) + Serial::BaudRate baudRates[4] = { + Serial::BAUDRATE_500000BPS, +#endif // defined(WIN32) || defined(__QNX__) + Serial::BAUDRATE_38400BPS, + Serial::BAUDRATE_19200BPS, + Serial::BAUDRATE_9600BPS + }; + +#if defined(WIN32) || defined(__QNX__) + for (::std::size_t i = 0; i < 3; ++i) +#else // defined(WIN32) || defined(__QNX__) + for (::std::size_t i = 0; i < 4; ++i) +#endif // defined(WIN32) || defined(__QNX__) + { + this->serial->setBaudRate(baudRates[i]); + this->serial->changeParameters(); + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + + if (this->waitAck()) + { + break; + } + +#if defined(WIN32) || defined(__QNX__) + if (3 == i) +#else // defined(WIN32) || defined(__QNX__) + if (4 == i) +#endif // defined(WIN32) || defined(__QNX__) + { + throw DeviceException("could not sync baud rate."); + } + } + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 1 + 2, 0xA0); + + switch (buf[5]) + { + case 0x01: + throw DeviceException("mode switchover not possible due to incorrect password"); + break; + case 0x02: + throw DeviceException("mode switchover not possible due to a fault in the LMS2xx"); + break; + default: + break; + } + + // status + + buf[4] = 0x31; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 152 + 1 + 2, 0xB1); + + // baud rate + + switch (buf[120]) + { +#if !(defined(WIN32) || defined(__QNX__)) + case 0x01: + this->baudRate = BAUDRATE_500000BPS; + break; +#endif // !(defined(WIN32) || defined(__QNX__)) + case 0x19: + this->baudRate = BAUDRATE_38400BPS; + break; + case 0x33: + this->baudRate = BAUDRATE_19200BPS; + break; + case 0x67: + this->baudRate = BAUDRATE_9600BPS; + break; + default: + break; + } + + if (this->desired != this->baudRate) + { + this->setBaudRate(this->desired); + } + + // monitoring + + if (0x25 != buf[12]) + { + this->setMonitoring(MONITORING_SINGLE); + } + + // measuring + + this->setMeasuring(this->measuring); + + // variant + + uint16_t angle = hostEndianWord(buf[112], buf[111]); + uint16_t resolution = hostEndianWord(buf[114], buf[113]); + + Variant variant; + + switch (resolution) + { + case 25: + variant = VARIANT_100_25; + break; + case 50: + switch (angle) + { + case 100: + variant = VARIANT_100_50; + break; + case 180: + variant = VARIANT_180_50; + break; + default: + throw DeviceException("unknown variant"); + break; + } + break; + case 100: + switch (angle) + { + case 100: + variant = VARIANT_100_100; + break; + case 180: + variant = VARIANT_180_100; + break; + default: + throw DeviceException("unknown variant"); + break; + } + break; + default: + throw DeviceException("unknown variant"); + break; + } + + if (variant != this->variant) + { + this->setVariant(this->variant); + } + } + + ::std::size_t + SickLms200::recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command) + { + assert(this->isConnected()); + assert(len > 7); + + uint8_t* ptr; + ::std::size_t sumbytes; + ::std::size_t numbytes; + + do + { + do + { + ptr = buf; + sumbytes = 0; + + do + { + numbytes = this->serial->read(ptr, 1); + } + while (0x02 != buf[0]); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->serial->read(ptr, 1); + } + while (0x80 != buf[1]); + + ptr += numbytes; + sumbytes += numbytes; + + for (::std::size_t i = 0; i < 4; ++i) + { + numbytes = this->serial->read(ptr, 1); + + ptr += numbytes; + sumbytes += numbytes; + } + + if ((0x02 == buf[2]) && (0x00 == buf[3]) && (0x92 == buf[4])) + { + throw DeviceException("not acknowledge, incorrect command"); + } + } + while (command != buf[4]); + + uint16_t length = hostEndianWord(buf[3], buf[2]); + + if (len != static_cast< ::std::size_t >(length) + 6) + { + throw DeviceException("data length mismatch in command " + command); + } + + while (sumbytes < len) + { + numbytes = this->serial->read(ptr, len - sumbytes); + + ptr += numbytes; + sumbytes += numbytes; + } + + if (this->crc(buf, sumbytes - 2) != hostEndianWord(buf[sumbytes - 1], buf[sumbytes - 2])) + { + throw DeviceException("checksum error"); + } + + switch (buf[sumbytes - 3] & 7) + { + case 1: + throw DeviceException("info"); + break; + case 2: + throw DeviceException("warning"); + break; + case 3: + throw DeviceException("error"); + break; + case 4: + throw DeviceException("fatal error"); + break; + default: + break; + } + + if (buf[sumbytes - 3] & 64) + { + throw DeviceException("implausible measured values"); + } + + if (buf[sumbytes - 3] & 128) + { + throw DeviceException("pollution"); + } + + return sumbytes; + } + + void + SickLms200::reset() + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x10; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 2, 0x91); + + // message during power-on + + this->recv(buf, 1 + 1 + 2 + 1 + 21 + 1 + 2, 0x90); + } + + void + SickLms200::send(uint8_t* buf, const ::std::size_t& len) + { + assert(this->isConnected()); + assert(len > 6); + + buf[0] = 0x02; + buf[1] = 0x00; + + uint16_t length = len - 6; + + buf[2] = lowByteFromHostEndian(length); + buf[3] = highByteFromHostEndian(length); + + uint16_t checksum = this->crc(buf, len - 2); + + buf[len - 2] = lowByteFromHostEndian(checksum); + buf[len - 1] = highByteFromHostEndian(checksum); + + if (len != this->serial->write(buf, len)) + { + throw DeviceException("could not send complete data"); + } + + this->serial->flush(true, false); + } + + void + SickLms200::setBaudRate(const BaudRate& baudRate) + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x20; + + switch (baudRate) + { + case BAUDRATE_9600BPS: + buf[5] = 0x42; + break; + case BAUDRATE_19200BPS: + buf[5] = 0x41; + break; + case BAUDRATE_38400BPS: + buf[5] = 0x40; + break; +#if !(defined(WIN32) || defined(__QNX__)) + case BAUDRATE_500000BPS: + buf[5] = 0x48; + break; +#endif // !(defined(WIN32) || defined(__QNX__)) + default: + break; + } + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 1 + 2, 0xA0); + + switch (buf[5]) + { + case 0x01: + throw DeviceException("mode switchover not possible due to incorrect password"); + break; + case 0x02: + throw DeviceException("mode switchover not possible due to a fault in the LMS2xx"); + break; + default: + break; + } + + switch (baudRate) + { + case BAUDRATE_9600BPS: + this->serial->setBaudRate(Serial::BAUDRATE_9600BPS); + break; + case BAUDRATE_19200BPS: + this->serial->setBaudRate(Serial::BAUDRATE_19200BPS); + break; + case BAUDRATE_38400BPS: + this->serial->setBaudRate(Serial::BAUDRATE_38400BPS); + break; +#if !(defined(WIN32) || defined(__QNX__)) + case BAUDRATE_500000BPS: + this->serial->setBaudRate(Serial::BAUDRATE_500000BPS); + break; +#endif // !(defined(WIN32) || defined(__QNX__)) + default: + break; + } + + this->serial->changeParameters(); + + this->baudRate = baudRate; + } + + void + SickLms200::setMeasuring(const Measuring& measuring) + { + assert(this->isConnected()); + + uint8_t buf[812]; + + // transmit password + + buf[4] = 0x20; + buf[5] = 0x00; + + for (::std::size_t i = 0; i < 8; ++i) + { + buf[6 + i] = this->password[i]; + } + + do + { + this->send(buf, 16); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 1 + 2, 0xA0); + + if (0x00 != buf[5]) + { + throw DeviceException("could not switch mode"); + } + + // get current configuration + + buf[4] = 0x74; + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 32 + 1 + 2, 0xF4); + + this->configuration = buf[10]; + + // set new configuration + + buf[4] = 0x77; + + switch (measuring) + { + case MEASURING_8M: + buf[10] = 0x00; + buf[11] = 0x01; + break; + case MEASURING_16M: + buf[10] = 0x04; + buf[11] = 0x01; + break; + case MEASURING_32M: + buf[10] = 0x06; + buf[11] = 0x01; + break; + case MEASURING_80M: + buf[10] = 0x00; + buf[11] = 0x00; + break; + case MEASURING_160M: + buf[10] = 0x04; + buf[11] = 0x00; + break; + case MEASURING_320M: + buf[10] = 0x06; + buf[11] = 0x00; + break; + default: + break; + } + + uint8_t configuration = buf[10]; + + do + { + this->send(buf, 40); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 33 + 1 + 2, 0xF7); + + if (0x00 == buf[5]) + { + throw DeviceException("LMS configuration not accepted"); + } + + this->configuration = configuration; + + this->measuring = measuring; + } + + void + SickLms200::setMonitoring(const Monitoring& monitoring) + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x20; + + switch (monitoring) + { + case MONITORING_CONTINUOUS: + buf[5] = 0x24; + break; + case MONITORING_SINGLE: + buf[5] = 0x25; + break; + default: + break; + } + + do + { + this->send(buf, 1 + 1 + 2 + 1 + 1 + 2); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 1 + 1 + 2, 0xA0); + + switch (buf[5]) + { + case 0x01: + throw DeviceException("mode switchover not possible due to incorrect password"); + break; + case 0x02: + throw DeviceException("mode switchover not possible due to a fault in the LMS2xx"); + break; + default: + break; + } + + this->monitoring = monitoring; + } + + void + SickLms200::setVariant(const Variant& variant) + { + assert(this->isConnected()); + + uint8_t buf[812]; + + buf[4] = 0x3B; + + switch (variant) + { + case VARIANT_100_25: + buf[5] = 0x64; + buf[6] = 0x0; + buf[7] = 0x19; + buf[8] = 0x0; + break; + case VARIANT_100_50: + buf[5] = 0x64; + buf[6] = 0x0; + buf[7] = 0x32; + buf[8] = 0x0; + break; + case VARIANT_100_100: + buf[5] = 0x64; + buf[6] = 0x0; + buf[7] = 0x64; + buf[8] = 0x0; + break; + case VARIANT_180_50: + buf[5] = 0xB4; + buf[6] = 0x0; + buf[7] = 0x32; + buf[8] = 0x0; + break; + case VARIANT_180_100: + buf[5] = 0xB4; + buf[6] = 0x0; + buf[7] = 0x64; + buf[8] = 0x0; + break; + default: + break; + } + + do + { + this->send(buf, 11); + } + while (!this->waitAck()); + + this->recv(buf, 1 + 1 + 2 + 1 + 5 + 1 + 2, 0xBB); + + if (0x00 == buf[5]) + { + throw DeviceException("switchover aborted, previous variant still active"); + } + + this->variant = variant; + } + + void + SickLms200::start() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE != this->monitoring) + { + this->setMonitoring(this->monitoring); + } + } + + void + SickLms200::step() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE == this->monitoring) + { + this->data[4] = 0x30; + this->data[5] = 0x01; + + do + { + this->send(this->data, 1 + 1 + 2 + 1 + 1 + 2); + } + while (!this->waitAck()); + } + + switch (this->variant) + { + case VARIANT_100_25: + this->recv(this->data, 1 + 1 + 2 + 1 + 1 + 1 + 802 + 1 + 2, 0xB0); + break; + case VARIANT_100_50: + this->recv(this->data, 1 + 1 + 2 + 1 + 1 + 1 + 402 + 1 + 2, 0xB0); + break; + case VARIANT_100_100: + this->recv(this->data, 1 + 1 + 2 + 1 + 1 + 1 + 202 + 1 + 2, 0xB0); + break; + case VARIANT_180_50: + this->recv(this->data, 1 + 1 + 2 + 1 + 1 + 1 + 722 + 1 + 2, 0xB0); + break; + case VARIANT_180_100: + this->recv(this->data, 1 + 1 + 2 + 1 + 1 + 1 + 362 + 1 + 2, 0xB0); + break; + default: + break; + } + } + + void + SickLms200::stop() + { + assert(this->isConnected()); + + if (MONITORING_SINGLE != this->monitoring) + { + this->setMonitoring(MONITORING_SINGLE); + } + } + + bool + SickLms200::waitAck() + { + assert(this->isConnected()); + + uint8_t ack; + + try + { + this->timer.start(); + + do + { + this->serial->select(true, false, 0.06f); + this->serial->read(&ack, 1); + + switch (ack) + { + case 0x06: + return true; + break; + case 0x15: + return false; + break; + default: + break; + } + + this->timer.stop(); + } + while (this->timer.elapsed() < 0.06f); + } + catch (const TimeoutException&) + { + } + + return false; + } + } +} diff --git a/src/rl/hal/SickLms200.h b/src/rl/hal/SickLms200.h new file mode 100644 index 00000000..29fd4555 --- /dev/null +++ b/src/rl/hal/SickLms200.h @@ -0,0 +1,187 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_SICKLMS200_H_ +#define _RL_HAL_SICKLMS200_H_ + +#include + +#include "Device.h" +#include "Lidar.h" +#include "types.h" + +namespace rl +{ + namespace hal + { + class Serial; + + class SickLms200 : public Lidar + { + public: + enum BaudRate + { + /** 9,600 bps. */ + BAUDRATE_9600BPS, + /** 19,200 bps. */ + BAUDRATE_19200BPS, + /** 38,400 bps. */ +#if defined(WIN32) || defined(__QNX__) + BAUDRATE_38400BPS +#else // defined(WIN32) || defined(__QNX__) + BAUDRATE_38400BPS, + /** 500,000 bps. */ + BAUDRATE_500000BPS +#endif // defined(WIN32) || defined(__QNX__) + }; + + enum Measuring + { + MEASURING_8M, + MEASURING_16M, + MEASURING_32M, + MEASURING_80M, + MEASURING_160M, + MEASURING_320M + }; + + enum Monitoring + { + MONITORING_CONTINUOUS, + MONITORING_SINGLE + }; + + enum Variant + { + /** Angle = 100 degrees, resolution = 0.25 degrees. */ + VARIANT_100_25, + /** Angle = 100 degrees, resolution = 0.5 degrees. */ + VARIANT_100_50, + /** Angle = 100 degrees, resolution = 1 degree. */ + VARIANT_100_100, + /** Angle = 180 degrees, resolution = 0.5 degrees. */ + VARIANT_180_50, + /** Angle = 180 degrees, resolution = 1 degree. */ + VARIANT_180_100 + }; + + /** + * @param password String with 8 characters comprising "0...9", "a...z", "A...Z", and "_". + */ + SickLms200( + const ::std::string& device = "/dev/ttyS0", + const BaudRate& baudRate = BAUDRATE_9600BPS, + const Monitoring& monitoring = MONITORING_SINGLE, + const Variant& variant = VARIANT_180_50, + const Measuring& measuring = MEASURING_8M, + const ::std::string& password = "SICK_LMS" + ); + + virtual ~SickLms200(); + + void close(); + + void dumpConfiguration(); + + void dumpStatus(); + + BaudRate getBaudRate() const; + + void getDistances(::rl::math::Vector& distances) const; + + ::std::size_t getDistancesCount() const; + + ::rl::math::Real getDistancesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getDistancesMinimum(const ::std::size_t& i) const; + + Measuring getMeasuring() const; + + Monitoring getMonitoring() const; + + ::rl::math::Real getResolution() const; + + ::rl::math::Real getStartAngle() const; + + ::rl::math::Real getStopAngle() const; + + ::std::string getType(); + + Variant getVariant() const; + + void open(); + + void reset(); + + void setBaudRate(const BaudRate& baudRate); + + void setMeasuring(const Measuring& measuring); + + void setMonitoring(const Monitoring& monitoring); + + void setVariant(const Variant& variant); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + uint16_t crc(const uint8_t* buf, const ::std::size_t& len) const; + + ::std::size_t recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command); + + void send(uint8_t* buf, const ::std::size_t& len); + + bool waitAck(); + + BaudRate baudRate; + + uint8_t configuration; + + uint8_t data[812]; + + BaudRate desired; + + Measuring measuring; + + Monitoring monitoring; + + ::std::string password; + + Serial* serial; + + ::rl::util::Timer timer; + + Variant variant; + }; + } +} + +#endif // _RL_HAL_SICKLMS200_H_ diff --git a/src/rl/hal/SickS300.cpp b/src/rl/hal/SickS300.cpp new file mode 100644 index 00000000..9f91d925 --- /dev/null +++ b/src/rl/hal/SickS300.cpp @@ -0,0 +1,401 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "ComException.h" +#include "DeviceException.h" +#include "endian.h" +#include "SickS300.h" + +static const uint16_t crcTable[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +}; + +namespace rl +{ + namespace hal + { + SickS300::SickS300( + const ::std::string& filename, + const Serial::BaudRate& baudRate + ) : + Lidar(), + data(), + serial( + filename, + baudRate, + Serial::DATABITS_8BITS, + Serial::FLOWCONTROL_OFF, + Serial::PARITY_NOPARITY, + Serial::STOPBITS_1BIT + ) + { + } + + SickS300::~SickS300() + { + } + + void + SickS300::close() + { + assert(this->isConnected()); + + this->serial.close(); + + this->setConnected(false); + } + + uint16_t + SickS300::crc(const uint8_t* buf, const ::std::size_t& len) const + { + uint16_t checksum = 0xFFFF; + + for (::std::size_t i = 0; i < len; ++i) + { + checksum = (checksum << 8) ^ (crcTable[(checksum >> 8) ^ (buf[i])]); + } + + return checksum; + } + + void + SickS300::getDistances(::rl::math::Vector& distances) const + { + assert(this->isConnected()); + assert(distances.size() >= this->getDistancesCount()); + + ::rl::math::Real scale = 0.01f; + + for (::std::size_t i = 0; i < this->getDistancesCount(); ++i) + { + uint16_t value = hostEndianWord(this->data[24 + 1 + i * 2], this->data[24 + 0 + i * 2]) & 0x1FFF; + + switch (this->data[24 + 1 + i * 2] & 224) + { + case 128: +::std::cerr << "Measured value detected within warning field" << ::std::endl; + case 64: +::std::cerr << "Measured value detected within protective field" << ::std::endl; + case 32: +::std::cerr << "Glare (dazzling) detected" << ::std::endl; + distances(i) = ::std::numeric_limits< ::rl::math::Real >::quiet_NaN(); + break; + default: + distances(i) = value * scale; + break; + } + } + } + + ::std::size_t + SickS300::getDistancesCount() const + { + assert(this->isConnected()); + + return 541; + } + + ::rl::math::Real + SickS300::getDistancesMaximum(const ::std::size_t& i) const + { + assert(this->isConnected()); + assert(i < this->getDistancesCount()); + + return 10.0f; + } + + ::rl::math::Real + SickS300::getDistancesMinimum(const ::std::size_t& i) const + { + assert(this->isConnected()); + assert(i < this->getDistancesCount()); + + return 0.0f; + } + + ::rl::math::Real + SickS300::getResolution() const + { + assert(this->isConnected()); + + return std::abs(this->getStopAngle() - this->getStartAngle()) / (this->getDistancesCount() - 1.0f); + } + + ::std::size_t + SickS300::getScanNumber() const + { + return hostEndianDoubleWord( + hostEndianWord(this->data[17], this->data[16]), + hostEndianWord(this->data[15], this->data[14]) + ); + } + + ::rl::math::Real + SickS300::getStartAngle() const + { + assert(this->isConnected()); + + return -45.0f * ::rl::math::DEG2RAD; + } + + ::rl::math::Real + SickS300::getStopAngle() const + { + assert(this->isConnected()); + + return 225.0f * ::rl::math::DEG2RAD; + } + + ::std::size_t + SickS300::getTelegramNumber() const + { + return hostEndianWord(this->data[19], this->data[18]); + } + + void + SickS300::open() + { + this->serial.open(); + + this->setConnected(true); + } + + ::std::size_t + SickS300::recv(uint8_t* buf) + { + uint8_t* ptr; + ::std::size_t sumbytes; + ::std::size_t numbytes; + + do + { + do + { + ptr = buf; + sumbytes = 0; + + do + { + numbytes = serial.read(ptr, 1); +printf("buf[0] %02x\n", buf[0]); + } + while (0x00 != buf[0]); // 0x00 + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = serial.read(ptr, 1); +printf("buf[1] %02x\n", buf[1]); + } + while (0x00 != buf[1]); // 0x00 0x00 + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = serial.read(ptr, 1); +printf("buf[2] %02x\n", buf[2]); + } + while (0x00 != buf[2]); // 0x00 0x00 0x00 + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = serial.read(ptr, 1); +printf("buf[3] %02x\n", buf[3]); + ptr += numbytes; + sumbytes += numbytes; + + if (0x00 != buf[3]) + { + switch (buf[3]) + { + case 0x01: + throw DeviceException("The current device status does not permit access to the data block"); + break; + case 0x02: + throw DeviceException("Access to the data block by the current user group is not permitted"); + break; + case 0x03: + throw DeviceException("Incorrect password"); + break; + case 0x04: + throw DeviceException("System token is occupied"); + break; + case 0x05: + throw DeviceException("Incorrect parameter"); + break; + case 0x0A: + throw DeviceException("One of the communication monitoring processes failed (e.g. timeout of EFI-RK512 packages/EFI-RK512 acknowledgement or failed transmission of EFI-RK512 packages/EFI-RK512 acknowledgement)"); + break; + case 0x0C: + throw DeviceException("The data word number of the destination address or source address in command telegram (byte 6) is impermissible (not defined in interface register) | The co-ordination flag (byte number) in command telegram (byte 9) does not equal 0xFF | The device code in the command telegram (byte 10, bits 0 to 3) is invalid (i.e. equals 0) | The CPU number in the command telegram (byte 10, bits 5 to 7) is impermissible"); + break; + case 0x10: + throw DeviceException("The telegram identifier in the command telegram (byte 1) is not equal to 0x00 or 0xFF or is not followed by a further 0x00 byte (byte 2) | The command data type in the command telegram (byte 4) is impermissible"); + break; + case 0x14: + throw DeviceException("The data block number of the destination address or source address in the command telegram (byte 5) is impermissible (not defined in the interface register)"); + break; + case 0x16: + throw DeviceException("The command telegram type in the command telegram (byte 3) is impermissible"); + break; + case 0x34: + throw DeviceException("Telegram format error"); + break; + case 0x36: + throw DeviceException("A command telegram has been received though no reply telegram has been received yet"); + break; + default: + throw DeviceException("Unknown error"); + break; + } + } + + for (::std::size_t i = 0; i < 6; ++i) + { + numbytes = serial.read(ptr, 1); +printf("buf[%zi] %02x\n", i + 4, buf[i + 4]); + ptr += numbytes; + sumbytes += numbytes; + } + + uint16_t length = hostEndianWord(buf[6], buf[7]); +std::cout << "length " << length << std::endl; + + if (length != 552) + { + throw DeviceException("Data length mismatch"); + } +printf("coordinationFlag %02x\n", buf[8]); +printf("deviceAddress %02x\n", buf[9]); + + for (::std::size_t i = 0; i < 1094; ++i) + { + numbytes = serial.read(ptr, 1); + ptr += numbytes; + sumbytes += numbytes; + } +printf("version %02x%02x\n", buf[11], buf[10]); + + if (0x01 != buf[11] || 0x02 != buf[10]) + { + throw DeviceException("Protocol version mismatch"); + } + + if (0x00 != buf[13] || 0x00 != buf[12]) + { + throw DeviceException("Incorrect status"); + } + + uint32_t scanNumber = hostEndianDoubleWord( + hostEndianWord(buf[17], buf[16]), + hostEndianWord(buf[15], buf[14]) + ); +std::cout << "scanNumber " << scanNumber << std::endl; + + uint16_t telegramNumber = hostEndianWord(buf[19], buf[18]); +std::cout << "telegramNumber " << telegramNumber << std::endl; + + for (::std::size_t i = 0; i < 2; ++i) + { + numbytes = serial.read(ptr, 1); + ptr += numbytes; + sumbytes += numbytes; + } + + for (::std::size_t i = 0; i < 2; ++i) + { + numbytes = serial.read(ptr, 1); + ptr += numbytes; + sumbytes += numbytes; + } + + if (this->crc(buf + 4, sumbytes - 2 - 4) != hostEndianWord(buf[sumbytes - 1], buf[sumbytes - 2])) + { + throw DeviceException("Checksum error"); + } +for (::std::size_t i = 0; i < sumbytes; ++i) { printf("%02x ", buf[i]); } printf("\n"); + + return sumbytes; + } + + void + SickS300::start() + { + assert(this->isConnected()); + } + + void + SickS300::step() + { + assert(this->isConnected()); + + this->recv(this->data); + } + + void + SickS300::stop() + { + assert(this->isConnected()); + } + } +} diff --git a/src/rl/hal/SickS300.h b/src/rl/hal/SickS300.h new file mode 100644 index 00000000..c415d688 --- /dev/null +++ b/src/rl/hal/SickS300.h @@ -0,0 +1,93 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_SICKS300_H_ +#define _RL_HAL_SICKS300_H_ + +#include + +#include "Device.h" +#include "Lidar.h" +#include "Serial.h" +#include "types.h" + +namespace rl +{ + namespace hal + { + class SickS300 : public Lidar + { + public: + SickS300( + const ::std::string& device = "/dev/ttyS0", + const Serial::BaudRate& baudRate = Serial::BAUDRATE_9600BPS + ); + + virtual ~SickS300(); + + void close(); + + void getDistances(::rl::math::Vector& distances) const; + + ::std::size_t getDistancesCount() const; + + ::rl::math::Real getDistancesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getDistancesMinimum(const ::std::size_t& i) const; + + ::rl::math::Real getResolution() const; + + ::std::size_t getScanNumber() const; + + ::rl::math::Real getStartAngle() const; + + ::rl::math::Real getStopAngle() const; + + ::std::size_t getTelegramNumber() const; + + void open(); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + uint16_t crc(const uint8_t* buf, const ::std::size_t& len) const; + + ::std::size_t recv(uint8_t* buf); + + uint8_t data[2048]; + + Serial serial; + }; + } +} + +#endif // _RL_HAL_SICKS300_H_ diff --git a/src/rl/hal/SixAxisForceTorqueSensor.cpp b/src/rl/hal/SixAxisForceTorqueSensor.cpp new file mode 100644 index 00000000..9d985c71 --- /dev/null +++ b/src/rl/hal/SixAxisForceTorqueSensor.cpp @@ -0,0 +1,87 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "SixAxisForceTorqueSensor.h" + +namespace rl +{ + namespace hal + { + SixAxisForceTorqueSensor::SixAxisForceTorqueSensor() : + ForceSensor(), + TorqueSensor() + { + } + + SixAxisForceTorqueSensor::~SixAxisForceTorqueSensor() + { + } + + ::std::size_t + SixAxisForceTorqueSensor::getForcesCount() const + { + return 3; + } + + ::rl::math::Real + SixAxisForceTorqueSensor::getForcesMaximum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->getForcesTorquesMaximum(i); + } + + ::rl::math::Real + SixAxisForceTorqueSensor::getForcesMinimum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->getForcesTorquesMaximum(i); + } + + ::std::size_t + SixAxisForceTorqueSensor::getTorquesCount() const + { + return 3; + } + + ::rl::math::Real + SixAxisForceTorqueSensor::getTorquesMaximum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->getForcesTorquesMaximum(i + 3); + } + + ::rl::math::Real + SixAxisForceTorqueSensor::getTorquesMinimum(const ::std::size_t& i) const + { + assert(i < 4); + + return this->getForcesTorquesMaximum(i + 3); + } + } +} diff --git a/src/rl/hal/SixAxisForceTorqueSensor.h b/src/rl/hal/SixAxisForceTorqueSensor.h new file mode 100644 index 00000000..8e6a1303 --- /dev/null +++ b/src/rl/hal/SixAxisForceTorqueSensor.h @@ -0,0 +1,81 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_FORCETORQUESENSOR_H_ +#define _RL_HAL_FORCETORQUESENSOR_H_ + +#include + +#include "ForceSensor.h" +#include "TorqueSensor.h" + +namespace rl +{ + namespace hal + { + class SixAxisForceTorqueSensor : public virtual ForceSensor, public virtual TorqueSensor + { + public: + SixAxisForceTorqueSensor(); + + virtual ~SixAxisForceTorqueSensor(); + + ::std::size_t getForcesCount() const; + + ::rl::math::Real getForcesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getForcesMinimum(const ::std::size_t& i) const; + + /** + * @param forcesTorques [N],[N],[N],[Nm],[Nm],[Nm] + */ + virtual void getForcesTorques(::rl::math::Vector& forcesTorques) const = 0; + + /** + * @return [N],[N],[N],[Nm],[Nm],[Nm] + */ + virtual ::rl::math::Real getForcesTorquesMaximum(const ::std::size_t& i) const = 0; + + /** + * @return [N],[N],[N],[Nm],[Nm],[Nm] + */ + virtual ::rl::math::Real getForcesTorquesMinimum(const ::std::size_t& i) const = 0; + + ::std::size_t getTorquesCount() const; + + ::rl::math::Real getTorquesMaximum(const ::std::size_t& i) const; + + ::rl::math::Real getTorquesMinimum(const ::std::size_t& i) const; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_FORCETORQUESENSOR_H_ diff --git a/src/rl/hal/Socket.cpp b/src/rl/hal/Socket.cpp new file mode 100644 index 00000000..3357f523 --- /dev/null +++ b/src/rl/hal/Socket.cpp @@ -0,0 +1,301 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#ifdef WIN32 +#include +#else // WIN32 +#include +#include +#include +#include +#include +#ifdef __QNX__ +#include +#endif // __QNX__ +#include +#include +#endif // WIN32 + +#include "ComException.h" +#include "Socket.h" +#include "TimeoutException.h" + +namespace rl +{ + namespace hal + { + Socket::Socket(const ::std::string& host, const unsigned short int& port) : + Com(), + host(host), + port(port) + { + } + + Socket::~Socket() + { + if (this->isConnected()) + { + this->close(); + } + } + + void + Socket::close() + { +#ifdef WIN32 + if (SOCKET_ERROR == closesocket(this->sockfd)) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + throw e; + } + + WSACleanup(); +#else // WIN32 + if (-1 == ::close(this->sockfd)) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + this->setConnected(false); + } + + void + Socket::connect(const int& domain, const int& type, const int& protocol) + { + int err; + +#ifdef WIN32 + WSADATA wsaData; + + err = WSAStartup(MAKEWORD(1, 1), &wsaData); + + if (0 != err) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + throw e; + } + + if ((1 != LOBYTE(wsaData.wVersion)) || (1 != HIBYTE(wsaData.wVersion))) + { + WSACleanup(); + throw ComException("The Windows Sockets version requested is not supported."); + } +#endif // WIN32 + + this->sockfd = socket(domain, type, protocol); + +#ifdef WIN32 + if (SOCKET_ERROR == this->sockfd) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + WSACleanup(); + throw e; + } +#else // WIN32 + if (-1 == this->sockfd) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + struct hostent* server = gethostbyname(this->host.c_str()); + + struct sockaddr_in servAddr; + memset(&servAddr, 0, sizeof(servAddr)); + memcpy(&servAddr.sin_addr.s_addr, server->h_addr, server->h_length); + servAddr.sin_family = AF_INET; + servAddr.sin_port = htons(this->port); + + err = ::connect(this->sockfd, reinterpret_cast< const sockaddr* >(&servAddr), sizeof(servAddr)); + +#ifdef WIN32 + if (SOCKET_ERROR == err) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + WSACleanup(); + throw e; + } +#else // WIN32 + if (-1 == err) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + this->setConnected(true); + } + + ::std::string + Socket::getHost() const + { + return this->host; + } + + unsigned short int + Socket::getPort() const + { + return this->port; + } + + ::std::size_t + Socket::read(void* buf, const ::std::size_t& count) + { + memset(buf, 0, count); + +#ifdef WIN32 + int numbytes = recv(this->sockfd, static_cast< char* >(buf), count, 0); +#else // WIN32 + ssize_t numbytes = recv(this->sockfd, buf, count, 0); +#endif // WIN32 + +#ifdef WIN32 + if (SOCKET_ERROR == numbytes) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == numbytes) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + return numbytes; + } + + ::std::size_t + Socket::select(const bool& read, const bool& write, const ::rl::math::Real& timeout) + { + ::rl::math::Real tmp = timeout; + + struct timeval tv; + + tv.tv_sec = static_cast< long int >(tmp); + tmp -= tv.tv_sec; + tv.tv_usec = static_cast< long int >(tmp * 1000000.0f); + + fd_set readfds; + FD_ZERO(&readfds); + FD_SET(this->sockfd, &readfds); + + fd_set writefds; + FD_ZERO(&writefds); + FD_SET(this->sockfd, &writefds); + +#ifdef WIN32 + int numdescriptors; +#else // WIN32 + ssize_t numdescriptors; +#endif // WIN32 + + if (read && write) + { + numdescriptors = ::select(this->sockfd + 1, &readfds, &writefds, NULL, &tv); + } + else if (read) + { + numdescriptors = ::select(this->sockfd + 1, &readfds, NULL, NULL, &tv); + } + else if (write) + { + numdescriptors = ::select(this->sockfd + 1, NULL, &writefds, NULL, &tv); + } + else + { + numdescriptors = ::select(this->sockfd + 1, NULL, NULL, NULL, &tv); + } + + if (0 == numdescriptors) + { + throw TimeoutException(); + } +#ifdef WIN32 + else if (SOCKET_ERROR == numdescriptors) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + throw e; + } +#else // WIN32 + else if (-1 == numdescriptors) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + return numdescriptors; + } + + ::std::size_t + Socket::write(const void* buf, const ::std::size_t& count) + { +#ifdef WIN32 + int numbytes = send(this->sockfd, static_cast< const char* >(buf), count, 0); +#else // WIN32 + ssize_t numbytes = send(this->sockfd, buf, count, 0); +#endif // WIN32 + +#ifdef WIN32 + if (SOCKET_ERROR == numbytes) + { + LPTSTR buffer = NULL; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), 0, buffer, 0, NULL); + ComException e(buffer); + LocalFree(buffer); + throw e; + } +#else // WIN32 + if (-1 == numbytes) + { + throw ComException(strerror(errno)); + } +#endif // WIN32 + + return numbytes; + } + } +} diff --git a/src/rl/hal/Socket.h b/src/rl/hal/Socket.h new file mode 100644 index 00000000..f46f27fb --- /dev/null +++ b/src/rl/hal/Socket.h @@ -0,0 +1,73 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_SOCKET_H_ +#define _RL_HAL_SOCKET_H_ + +#include +#include + +#include "Com.h" + +namespace rl +{ + namespace hal + { + class Socket : public Com + { + public: + Socket(const ::std::string& host, const unsigned short int& port); + + virtual ~Socket(); + + void close(); + + ::std::string getHost() const; + + unsigned short int getPort() const; + + virtual void open() = 0; + + ::std::size_t read(void* buf, const ::std::size_t& count); + + ::std::size_t select(const bool& read, const bool& write, const ::rl::math::Real& timeout); + + ::std::size_t write(const void* buf, const ::std::size_t& count); + + protected: + void connect(const int& domain, const int& type, const int& protocol); + + private: + ::std::string host; + + unsigned short int port; + + int sockfd; + }; + } +} + +#endif // _RL_HAL_SOCKET_H_ diff --git a/src/rl/hal/TcpSocket.cpp b/src/rl/hal/TcpSocket.cpp new file mode 100644 index 00000000..3d659955 --- /dev/null +++ b/src/rl/hal/TcpSocket.cpp @@ -0,0 +1,54 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include "TcpSocket.h" + +namespace rl +{ + namespace hal + { + TcpSocket::TcpSocket(const ::std::string& host, const unsigned short int& port) : + Socket(host, port) + { + } + + TcpSocket::~TcpSocket() + { + } + + void + TcpSocket::open() + { + this->connect(AF_INET, SOCK_STREAM, 0); + } + } +} diff --git a/src/rl/hal/TcpSocket.h b/src/rl/hal/TcpSocket.h new file mode 100644 index 00000000..af85f032 --- /dev/null +++ b/src/rl/hal/TcpSocket.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_TCPSOCKET_H_ +#define _RL_HAL_TCPSOCKET_H_ + +#include "Socket.h" + +namespace rl +{ + namespace hal + { + class TcpSocket : public Socket + { + public: + TcpSocket(const ::std::string& host, const unsigned short int& port); + + virtual ~TcpSocket(); + + virtual void open(); + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_TCPSOCKET_H_ diff --git a/src/rl/hal/TimeoutException.cpp b/src/rl/hal/TimeoutException.cpp new file mode 100644 index 00000000..2636d7f6 --- /dev/null +++ b/src/rl/hal/TimeoutException.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "TimeoutException.h" + +namespace rl +{ + namespace hal + { + TimeoutException::TimeoutException() : + ComException("Timeout") + { + } + + TimeoutException::~TimeoutException() throw() + { + } + } +} diff --git a/src/rl/hal/TimeoutException.h b/src/rl/hal/TimeoutException.h new file mode 100644 index 00000000..c968866c --- /dev/null +++ b/src/rl/hal/TimeoutException.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_TIMEOUTEXCEPTION_H_ +#define _RL_HAL_TIMEOUTEXCEPTION_H_ + +#include "ComException.h" + +namespace rl +{ + namespace hal + { + class TimeoutException : public ComException + { + public: + TimeoutException(); + + virtual ~TimeoutException() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_TIMEOUTEXCEPTION_H_ diff --git a/src/rl/hal/TorqueSensor.cpp b/src/rl/hal/TorqueSensor.cpp new file mode 100644 index 00000000..0b818347 --- /dev/null +++ b/src/rl/hal/TorqueSensor.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "TorqueSensor.h" + +namespace rl +{ + namespace hal + { + TorqueSensor::TorqueSensor() : + Device() + { + } + + TorqueSensor::~TorqueSensor() + { + } + } +} diff --git a/src/rl/hal/TorqueSensor.h b/src/rl/hal/TorqueSensor.h new file mode 100644 index 00000000..e62fdfda --- /dev/null +++ b/src/rl/hal/TorqueSensor.h @@ -0,0 +1,70 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_TORQUESENSOR_H_ +#define _RL_HAL_TORQUESENSOR_H_ + +#include + +#include "Device.h" + +namespace rl +{ + namespace hal + { + class TorqueSensor : public virtual Device + { + public: + TorqueSensor(); + + virtual ~TorqueSensor(); + + /** + * @param torques [Nm] + */ + virtual void getTorques(::rl::math::Vector& torques) const = 0; + + virtual ::std::size_t getTorquesCount() const = 0; + + /** + * @return [Nm] + */ + virtual ::rl::math::Real getTorquesMaximum(const ::std::size_t& i) const = 0; + + /** + * @return [Nm] + */ + virtual ::rl::math::Real getTorquesMinimum(const ::std::size_t& i) const = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_TORQUESENSOR_H_ diff --git a/src/rl/hal/UdpSocket.cpp b/src/rl/hal/UdpSocket.cpp new file mode 100644 index 00000000..e7a58c64 --- /dev/null +++ b/src/rl/hal/UdpSocket.cpp @@ -0,0 +1,54 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include "UdpSocket.h" + +namespace rl +{ + namespace hal + { + UdpSocket::UdpSocket(const ::std::string& host, const unsigned short int& port) : + Socket(host, port) + { + } + + UdpSocket::~UdpSocket() + { + } + + void + UdpSocket::open() + { + this->connect(AF_INET, SOCK_DGRAM, 0); + } + } +} diff --git a/src/rl/hal/UdpSocket.h b/src/rl/hal/UdpSocket.h new file mode 100644 index 00000000..cd67696c --- /dev/null +++ b/src/rl/hal/UdpSocket.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_UDPSOCKET_H_ +#define _RL_HAL_UDPSOCKET_H_ + +#include "Socket.h" + +namespace rl +{ + namespace hal + { + class UdpSocket : public Socket + { + public: + UdpSocket(const ::std::string& host, const unsigned short int& port); + + virtual ~UdpSocket(); + + virtual void open(); + + protected: + + private: + + }; + } +} + +#endif // _RL_HAL_UDPSOCKET_H_ diff --git a/src/rl/hal/WeissWsg50.cpp b/src/rl/hal/WeissWsg50.cpp new file mode 100644 index 00000000..38d50b01 --- /dev/null +++ b/src/rl/hal/WeissWsg50.cpp @@ -0,0 +1,1006 @@ +// +// Copyright (c) 2013, Andre Gaschler, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +//#define DEBUG_TCP_DATA + +#ifdef DEBUG_TCP_DATA +#include +#endif + +#include "ComException.h" +#include "DeviceException.h" +#include "endian.h" +#include "WeissWsg50.h" + +static const uint16_t CRC_TABLE_CCITT16[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +}; + +namespace rl +{ + namespace hal + { + WeissWsg50::WeissWsg50( + const ::std::string& hostname, + const unsigned short int& port, + const float& acceleration, + const float& forceLimit, + const unsigned int& period + ) : + Gripper(), + acceleration(acceleration), + accelerationMaximum(0), + accelerationMinimum(0), + force(0), + forceLimit(forceLimit), + forceMinimum(0), + forceNominal(0), + forceOverdrive(0), + graspingState(GRASPING_STATE_IDLE), + limitMinus(0), + limitPlus(0), + openingWidth(0), + period(period), + speed(0), + speedMaximum(0), + speedMinimum(0), + stroke(0), + systemState(), + tcp(hostname, port) + { + + } + + WeissWsg50::~WeissWsg50() + { + if (this->isRunning()) + { + this->stop(); // TODO + } + } + + void + WeissWsg50::close() + { + assert(this->isConnected()); + this->doDisconnectAnnouncement(); + this->tcp.close(); + this->setConnected(false); + } + + uint16_t + WeissWsg50::crc(const uint8_t* buf, const ::std::size_t& len) const + { + uint16_t checksum = 0xFFFF; + + for (::std::size_t i = 0; i < len; ++i) + { + uint8_t index = checksum ^ buf[i]; + checksum = CRC_TABLE_CCITT16[index] ^ (checksum >> 8); + } + + return checksum; + } + + void + WeissWsg50::doAcknowledgeFaults() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x24; + buf[this->HEADER_SIZE] = 0x61; + buf[this->HEADER_SIZE + 1] = 0x63; + buf[this->HEADER_SIZE + 2] = 0x6B; + + this->send(buf, this->HEADER_SIZE + 3 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x24); + } + + void + WeissWsg50::doClearSoftLimits() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x36; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x36); + + this->limitMinus = 0; + this->limitPlus = 0; + } + + void + WeissWsg50::doDisconnectAnnouncement() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x07; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x07); + } + + void + WeissWsg50::doFastStop() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x23; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x23); + } + + void + WeissWsg50::doGetAcceleration() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x31; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 4 + 2, 0x31); + + this->acceleration = *reinterpret_cast< float* >(&buf[this->HEADER_SIZE + 2]) / 1000.0f; + } + + void + WeissWsg50::doGetForce(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x45; + + buf[this->HEADER_SIZE] = 0x00 | (doAutomaticUpdate << 0) | (doAutomaticUpdate << 1); + buf[this->HEADER_SIZE + 1] = lowByteFromHostEndian(period); + buf[this->HEADER_SIZE + 2] = highByteFromHostEndian(period); + + this->send(buf, this->HEADER_SIZE + 3 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 4 + 2, 0x45); + } + + void + WeissWsg50::doGetForceLimit() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x33; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 4 + 2, 0x33); + + this->forceLimit = *reinterpret_cast< float* >(&buf[this->HEADER_SIZE + 2]); + } + + void + WeissWsg50::doGetGraspingState(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x41; + + buf[this->HEADER_SIZE] = 0x00 | (doAutomaticUpdate << 0) | (doUpdateOnChange << 1); + buf[this->HEADER_SIZE + 1] = lowByteFromHostEndian(period); + buf[this->HEADER_SIZE + 2] = highByteFromHostEndian(period); + + this->send(buf, this->HEADER_SIZE + 3 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 1 + 2, 0x41); + } + + void + WeissWsg50::doGetGraspingStatistics(const bool& doReset, int& numberGraspsTotal, int& numberGraspsNoPart, int& numberGraspsLostPart) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x42; + buf[this->HEADER_SIZE] = 0x00 | doReset; + + this->send(buf, this->HEADER_SIZE + 1 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 8 + 2, 0x42); + + numberGraspsTotal = hostEndianDoubleWord(hostEndianWord(buf[11], buf[10]), hostEndianWord(buf[9], buf[8])); + numberGraspsNoPart = hostEndianWord(buf[13], buf[12]); + numberGraspsLostPart = hostEndianWord(buf[15], buf[14]); + } + + void + WeissWsg50::doGetOpeningWidth(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x43; + buf[this->HEADER_SIZE] = 0x00 | (doAutomaticUpdate << 0) | (doUpdateOnChange << 1); + buf[this->HEADER_SIZE + 1] = lowByteFromHostEndian(period); + buf[this->HEADER_SIZE + 2] = highByteFromHostEndian(period); + + this->send(buf, this->HEADER_SIZE + 3 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 4 + 2, 0x43); + } + + void + WeissWsg50::doGetSoftLimits() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x35; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 8 + 2, 0x35); + + this->limitMinus = *reinterpret_cast< float* >(&buf[this->HEADER_SIZE + 2]); + this->limitPlus = *reinterpret_cast< float* >(&buf[this->HEADER_SIZE + 2 + 4]); + } + + void + WeissWsg50::doGetSpeed(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x44; + buf[this->HEADER_SIZE] = 0x00 | (doAutomaticUpdate << 0) | (doUpdateOnChange << 1); + buf[this->HEADER_SIZE + 1] = lowByteFromHostEndian(period); + buf[this->HEADER_SIZE + 2] = highByteFromHostEndian(period); + + this->send(buf, this->HEADER_SIZE + 3 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 4 + 2, 0x44); + } + + void + WeissWsg50::doGetSystemInformation(bool& isWsg50, int& hardwareRevision, int& firmwareRevision, int& serialNumber) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x50; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 8 + 2, 0x50); + + isWsg50 = (1 == buf[8]) ? true : false; + hardwareRevision = buf[9]; + firmwareRevision = hostEndianWord(buf[11], buf[10]); + serialNumber = hostEndianDoubleWord(hostEndianWord(buf[15], buf[14]), hostEndianWord(buf[13], buf[12])); + } + + void + WeissWsg50::doGetSystemLimits() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x53; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 32 + 2, 0x53); + + this->stroke = *reinterpret_cast< float* >(&buf[8]) / 1000.0f; + this->speedMinimum = *reinterpret_cast< float* >(&buf[12]) / 1000.0f; + this->speedMaximum = *reinterpret_cast< float* >(&buf[16]) / 1000.0f; + this->accelerationMinimum = *reinterpret_cast< float* >(&buf[20]) / 1000.0f; + this->accelerationMaximum = *reinterpret_cast< float* >(&buf[24]) / 1000.0f; + this->forceMinimum = *reinterpret_cast< float* >(&buf[28]); + this->forceNominal = *reinterpret_cast< float* >(&buf[32]); + this->forceOverdrive = *reinterpret_cast< float* >(&buf[36]); + } + + void + WeissWsg50::doGetSystemState(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x40; + buf[this->HEADER_SIZE] = 0x00 | (doAutomaticUpdate << 0) | (doUpdateOnChange << 1); + buf[this->HEADER_SIZE + 1] = lowByteFromHostEndian(period); + buf[this->HEADER_SIZE + 2] = highByteFromHostEndian(period); + + this->send(buf, this->HEADER_SIZE + 3 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 4 + 2, 0x40); + + this->systemState = static_cast< SystemState >(buf[this->HEADER_SIZE + 2]); + } + + float + WeissWsg50::doGetTemperature() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x46; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 2 + 2, 0x46); + + int16_t temperature = hostEndianWord(buf[9], buf[8]); + + return temperature / 10.0f; + } + + void + WeissWsg50::doGraspPart(const float& width, const float& speed) + { + assert(this->isConnected()); + assert(width >= 0.0f && width <= 0.11f); + assert(speed >= 0.0f && speed <= 0.4f); + + uint8_t buf[64]; + + buf[3] = 0x25; + + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE]) = width * 1000.0f; + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE + 4]) = speed * 1000.0f; + + this->send(buf, this->HEADER_SIZE + 8 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x25); + } + + // Perform necessary homing motion for calibration. + // This function call is blocking until the calibration is complete. + void + WeissWsg50::doHomingMotion(const unsigned int& direction) + { + assert(this->isConnected()); + assert(direction < 3); + + uint8_t buf[64]; + + buf[3] = 0x20; + buf[this->HEADER_SIZE] = direction; + + this->send(buf, this->HEADER_SIZE + 1 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x20); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x20); // wait for completion message + } + + void + WeissWsg50::doOverdriveMode(const bool& doOverdriveMode) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x37; + buf[4] = 0x00; + + if (doOverdriveMode) + { + buf[4] |= 1; + } + + this->send(buf, this->HEADER_SIZE + 1 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x37); + } + + void + WeissWsg50::doPrePositionFingers(const float& width, const float& speed, const bool& doRelativeMovement, const bool& doStopOnBlock) + { + assert(this->isConnected()); + assert(width >= 0.0f && width <= 0.11f); + assert(speed >= 0.0f && speed <= 0.4f); + + uint8_t buf[64]; + + buf[3] = 0x21; + buf[this->HEADER_SIZE] = 0x00; + + if (doRelativeMovement) + { + buf[this->HEADER_SIZE] |= 1; + } + + if (doStopOnBlock) + { + buf[this->HEADER_SIZE] |= 2; + } + + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE + 1]) = width * 1000.0f; + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE + 4 + 1]) = speed * 1000.0f; + + this->send(buf, this->HEADER_SIZE + 9 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x21); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x21); // wait for completion + } + + void + WeissWsg50::doReleasePart(const float& width, const float& speed) + { + assert(this->isConnected()); + assert(width >= 0.0f && width <= 0.11f); + assert(speed >= 0.005f && speed <= 0.4f); + + uint8_t buf[64]; + + buf[3] = 0x26; + + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE]) = width * 1000.0f; + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE + 4]) = speed * 1000.0f; + + this->send(buf, this->HEADER_SIZE + 8 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x26); + } + + void + WeissWsg50::doSetAcceleration(const float& acceleration) + { + assert(this->isConnected()); + assert(acceleration >= 0.1f && acceleration <= 5.0f); + + uint8_t buf[64]; + + buf[3] = 0x30; + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE]) = acceleration * 1000.0f; + + this->send(buf, this->HEADER_SIZE + 4 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x30); + + this->acceleration = acceleration; + } + + void + WeissWsg50::doSetForceLimit(const float& force) + { + assert(this->isConnected()); + assert(force >= 5.0f && force <= 80.0f); + + uint8_t buf[64]; + + buf[3] = 0x32; + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE]) = force; + + this->send(buf, this->HEADER_SIZE + 4 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x32); + + this->forceLimit = force; + } + + void + WeissWsg50::doSetSoftLimits(const float& limitMinus, const float& limitPlus) + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x34; + + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE]) = limitMinus / 1000.0f; + *reinterpret_cast< float * >(&buf[this->HEADER_SIZE + 4]) = limitPlus / 1000.0f; + + this->send(buf, this->HEADER_SIZE + 8 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x34); + + this->limitMinus = limitMinus; + this->limitPlus = limitPlus; + } + + void + WeissWsg50::doStop() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x22; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x22); + } + + void + WeissWsg50::doTareForceSensor() + { + assert(this->isConnected()); + + uint8_t buf[64]; + + buf[3] = 0x38; + + this->send(buf, this->HEADER_SIZE + 0 + 2); + this->recv(buf, this->HEADER_SIZE + 2 + 0 + 2, 0x38); + } + + float + WeissWsg50::getAcceleration() const + { + return this->acceleration; + } + + float + WeissWsg50::getForce() const + { + return this->force; + } + + float + WeissWsg50::getForceLimit() const + { + return this->forceLimit; + } + + WeissWsg50::GraspingState + WeissWsg50::getGraspingState() const + { + return this->graspingState; + } + + float + WeissWsg50::getOpeningWidth() const + { + return this->openingWidth; + } + + float + WeissWsg50::getSpeed() const + { + return this->speed; + } + + WeissWsg50::SystemState + WeissWsg50::getSystemState() const + { + return this->systemState; + } + + void + WeissWsg50::halt() + { + assert(this->isConnected()); + // TODO + } + + void + WeissWsg50::open() + { + assert(!this->isConnected()); + this->tcp.open(); + this->setConnected(true); + this->doAcknowledgeFaults(); + } + + ::std::size_t + WeissWsg50::recv(uint8_t* buf) + { + assert(this->isConnected()); + + uint8_t* ptr; + ::std::size_t sumbytes; + ::std::size_t numbytes; + + do + { + do + { + ptr = buf; + sumbytes = 0; + + do + { + numbytes = this->tcp.read(ptr, 1); + } + while (0xAA != buf[0]); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->tcp.read(ptr, 1); + } + while (0xAA != buf[1]); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->tcp.read(ptr, 1); + } + while (0xAA != buf[2]); + + ptr += numbytes; + sumbytes += numbytes; + + numbytes = this->tcp.read(ptr, 1); + ptr += numbytes; + sumbytes += numbytes; + + for (::std::size_t i = 0; i < 2 + 2; ++i) + { + numbytes = this->tcp.read(ptr, 1); + ptr += numbytes; + sumbytes += numbytes; + } + +#ifdef DEBUG_TCP_DATA + printf("Debug: recv header buf:"); + for (::std::size_t i = 0; i < sumbytes; ++i) + { + printf(" %02X", buf[i]); + } + fflush(stdout); +#endif + + uint16_t length = hostEndianWord(buf[5], buf[4]); + + Exception::Error errorCode = static_cast< Exception::Error >(hostEndianWord(buf[7], buf[6])); + + switch (errorCode) + { + case Exception::ERROR_SUCCESS: + break; + case Exception::ERROR_CMD_PENDING: + break; + case Exception::ERROR_AXIS_BLOCKED: + break; + default: +// ::std::cerr << "Debug: errorCode: " << errorCode << ::std::endl; + throw Exception(errorCode); + break; + } + + ::std::size_t len = length + 8; + + while (sumbytes < len) + { + numbytes = this->tcp.read(ptr, len - sumbytes); + + ptr += numbytes; + sumbytes += numbytes; + } + +#ifdef DEBUG_TCP_DATA + for (::std::size_t i = 8; i < sumbytes; ++i) + { + printf(" %02X", buf[i]); + } + printf("\n"); + fflush(stdout); +#endif + + if (this->crc(buf, sumbytes - 2) != hostEndianWord(buf[sumbytes - 1], buf[sumbytes - 2])) + { + throw DeviceException("Checksum error."); + } + + switch (buf[3]) + { + case 0x41: + this->graspingState = static_cast< GraspingState >(buf[8]); + break; + case 0x43: + this->openingWidth = *reinterpret_cast< float* >(&buf[8]) / 1000.0f; + break; + case 0x44: + this->speed = *reinterpret_cast< float* >(&buf[8]) / 1000.0f; + break; + case 0x45: + this->force = *reinterpret_cast< float* >(&buf[8]); + break; + default: + break; + } + + return sumbytes; + } + + ::std::size_t + WeissWsg50::recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command) + { + assert(this->isConnected()); + assert(len > 9); + + ::std::size_t sumbytes; + + do + { + sumbytes = this->recv(buf); + } + while (command != buf[3]); + + return sumbytes; + } + + void + WeissWsg50::release() + { + assert(this->isConnected()); + // TODO + } + + void + WeissWsg50::send(uint8_t* buf, const ::std::size_t& len) + { + assert(this->isConnected()); + assert(len > 6); + + buf[0] = 0xAA; + buf[1] = 0xAA; + buf[2] = 0xAA; + + uint16_t length = len - this->HEADER_SIZE - 2; + + buf[4] = lowByteFromHostEndian(length); + buf[5] = highByteFromHostEndian(length); + + uint16_t checksum = this->crc(buf, len - 2); + + buf[len - 2] = lowByteFromHostEndian(checksum); + buf[len - 1] = highByteFromHostEndian(checksum); + + if (len != this->tcp.write(buf, len)) + { + throw DeviceException("Could not send complete data."); + } + +#ifdef DEBUG_TCP_DATA + printf("Debug: send buf:"); + for (::std::size_t i = 0; i < len; ++i) + { + printf(" %02X", buf[i]); + } + printf("\n"); + fflush(stdout); +#endif + } + + void + WeissWsg50::shut() + { + assert(this->isConnected()); + // TODO + } + + void + WeissWsg50::start() + { + assert(this->isConnected()); + + this->doGetAcceleration(); + this->doGetForceLimit(); + //TODO this->doGetSoftLimits(); + this->doGetSystemLimits(); + + this->doGetForce(true, true, this->period); + this->doGetGraspingState(true, true, this->period); + this->doGetOpeningWidth(true, true, this->period); + this->doGetSpeed(true, true, this->period); + this->doGetSystemState(true, true, this->period); + + this->doHomingMotion(); + this->doSetAcceleration(this->acceleration); + this->doSetForceLimit(this->forceLimit); + + this->setRunning(true); + } + + void + WeissWsg50::step() + { + assert(this->isConnected()); + assert(this->isRunning()); + + uint8_t buf[64]; + + // TODO: implement + } + + void + WeissWsg50::stop() + { + assert(this->isConnected()); + assert(this->isRunning()); + + this->doStop(); + + this->doGetForce(false, false); + this->doGetGraspingState(false, false); + this->doGetOpeningWidth(false, false); + this->doGetSpeed(false, false); + this->doGetSystemState(false, false); + + this->setRunning(false); + } + + WeissWsg50::Exception::Exception(const Error& error) : + DeviceException(""), + error(error) + { + } + + WeissWsg50::Exception::~Exception() throw() + { + } + + WeissWsg50::Exception::Error + WeissWsg50::Exception::getError() const + { + return this->error; + } + + const char* + WeissWsg50::Exception::what() const throw() + { + switch (this->error) + { + case ERROR_SUCCESS: + return "No error."; + break; + case ERROR_NOT_AVAILABLE: + return "Device, service or data is not available."; + break; + case ERROR_NO_SENSOR: + return "No sensor connected."; + break; + case ERROR_NOT_INITIALIZED: + return "The device is not initialized."; + break; + case ERROR_ALREADY_RUNNING: + return "Service is already running."; + break; + case ERROR_FEATURE_NOT_SUPPORTED: + return "The asked feature is not supported."; + break; + case ERROR_INCONSISTENT_DATA: + return "One or more dependent parameters mismatch."; + break; + case ERROR_TIMEOUT: + return "Timeout error."; + break; + case ERROR_READ_ERROR: + return "Error while reading from a device."; + break; + case ERROR_WRITE_ERROR: + return "Error while writing to a device."; + break; + case ERROR_INSUFFICIENT_RESOURCES: + return "No memory available."; + break; + case ERROR_CHECKSUM_ERROR: + return "Checksum error."; + break; + case ERROR_NO_PARAM_EXPECTED: + return "No parameters expected."; + break; + case ERROR_NOT_ENOUGH_PARAMS: + return "Not enough parameters."; + break; + case ERROR_CMD_UNKNOWN: + return "Unknown command."; + break; + case ERROR_CMD_FORMAT_ERROR: + return "Command format error."; + break; + case ERROR_ACCESS_DENIED: + return "Access denied."; + break; + case ERROR_ALREADY_OPEN: + return "The interface is already open."; + break; + case ERROR_CMD_FAILED: + return "Command failed."; + break; + case ERROR_CMD_ABORTED: + return "Command aborted."; + break; + case ERROR_INVALID_HANDLE: + return "invalid handle."; + break; + case ERROR_NOT_FOUND: + return "device not found."; + break; + case ERROR_NOT_OPEN: + return "device not open."; + break; + case ERROR_IO_ERROR: + return "I/O error."; + break; + case ERROR_INVALID_PARAMETER: + return "invalid parameter."; + break; + case ERROR_INDEX_OUT_OF_BOUNDS: + return "index out of bounds."; + break; + case ERROR_CMD_PENDING: + return "Command was received correctly, but the execution needs more time. If the command was completely processed, another status message is returned indicating the command's result."; + break; + case ERROR_OVERRUN: + return "Data overrun."; + break; + case ERROR_RANGE_ERROR: + return "Range error."; + break; + case ERROR_AXIS_BLOCKED: + return "Axis is blocked."; + break; + case ERROR_FILE_EXISTS: + return "File already exists."; + break; + default: + return "Unknown error."; + break; + } + } + } +} diff --git a/src/rl/hal/WeissWsg50.h b/src/rl/hal/WeissWsg50.h new file mode 100644 index 00000000..8fdaf92c --- /dev/null +++ b/src/rl/hal/WeissWsg50.h @@ -0,0 +1,341 @@ +// +// Copyright (c) 2013, Andre Gaschler, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_WEISSWSG50_H_ +#define _RL_HAL_WEISSWSG50_H_ + +#include + +#include "Device.h" +#include "DeviceException.h" +#include "Gripper.h" +#include "types.h" +#include "TcpSocket.h" + +namespace rl +{ + namespace hal + { + /** + * Weiss Robotics WSG 50 / Schunk WSG 50 + * + * See "WSG Series of Intelligent Servo-Electric Grippers: Command Set Reference Manual": + * + * + * Important: Before use, you usually need to set "Part Width Tolerance" + * and "Default Clamping Travel" to maximum in the web interface. + * Otherwise, the gripper will not grasp if object width is different + * from the given value. + */ + class WeissWsg50 : public Gripper + { + public: + class Exception : public DeviceException + { + public: + enum Error + { + ERROR_SUCCESS = 0, + ERROR_NOT_AVAILABLE, + ERROR_NO_SENSOR, + ERROR_NOT_INITIALIZED, + ERROR_ALREADY_RUNNING, + ERROR_FEATURE_NOT_SUPPORTED, + ERROR_INCONSISTENT_DATA, + ERROR_TIMEOUT, + ERROR_READ_ERROR, + ERROR_WRITE_ERROR, + ERROR_INSUFFICIENT_RESOURCES, + ERROR_CHECKSUM_ERROR, + ERROR_NO_PARAM_EXPECTED, + ERROR_NOT_ENOUGH_PARAMS, + ERROR_CMD_UNKNOWN, + ERROR_CMD_FORMAT_ERROR, + ERROR_ACCESS_DENIED, + ERROR_ALREADY_OPEN, + ERROR_CMD_FAILED, + ERROR_CMD_ABORTED, + ERROR_INVALID_HANDLE, + ERROR_NOT_FOUND, + ERROR_NOT_OPEN, + ERROR_IO_ERROR, + ERROR_INVALID_PARAMETER, + ERROR_INDEX_OUT_OF_BOUNDS, + ERROR_CMD_PENDING, + ERROR_OVERRUN, + ERROR_RANGE_ERROR, + ERROR_AXIS_BLOCKED, + ERROR_FILE_EXISTS + }; + + Exception(const Error& error); + + virtual ~Exception() throw(); + + Error getError() const; + + virtual const char* what() const throw(); + + protected: + + private: + Error error; + }; + + enum GraspingState + { + GRASPING_STATE_IDLE = 0, + GRASPING_STATE_GRASPING, + GRASPING_STATE_NO_PART_FOUND, + GRASPING_STATE_PART_LOST, + GRASPING_STATE_HOLDING, + GRASPING_STATE_RELEASING + }; + + enum SystemState + { + SYSTEM_STATE_SCRIPT_FAILURE, + SYSTEM_STATE_SCRIPT_RUNNING, + SYSTEM_STATE_CMD_FAILURE, + SYSTEM_STATE_FINGER_FAULT, + SYSTEM_STATE_CURR_FAULT, + SYSTEM_STATE_POWER_FAULT, + SYSTEM_STATE_TEMP_FAULT, + SYSTEM_STATE_TEMP_WARNING, + SYSTEM_STATE_FAST_STOP, + SYSTEM_STATE_OVERDRIVE_MODE, + SYSTEM_STATE_TARGET_POS_REACHED, + SYSTEM_STATE_AXIS_STOPPED, + SYSTEM_STATE_SOFT_LIMIT_PLUS, + SYSTEM_STATE_SOFT_LIMIT_MINUS, + SYSTEM_STATE_BLOCKED_PLUS, + SYSTEM_STATE_BLOCKED_MINUS, + SYSTEM_STATE_MOVING, + SYSTEM_STATE_REFERENCED + }; + + /** + * @param hostname tcp hostname + * @param port tcp port + * @param acceleration [0.1,..,5] [m/s^2] + * @param forceLimit [5,..,80] [N] + * @param period default automatic update period [ms] + */ + WeissWsg50( + const ::std::string& hostname = "192.168.1.20", + const unsigned short int& port = 1000, + const float& acceleration = 3.0f, + const float& forceLimit = 40.0f, + const unsigned int& period = 10 + ); + + virtual ~WeissWsg50(); + + void acknowledgeFaults(); + + void close(); + + void doAcknowledgeFaults(); + + void doFastStop(); + + void doGetAcceleration(); + + void doClearSoftLimits(); + + void doGetForce(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period = 0); + + void doGetForceLimit(); + + void doGetGraspingState(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period = 0); + + void doGetGraspingStatistics(const bool& doReset, int& numberGraspsTotal, int& numberGraspsNoPart, int& numberGraspsLostPart); + + void doGetOpeningWidth(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period = 0); + + void doGetSoftLimits(); + + void doGetSpeed(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period = 0); + + void doGetSystemInformation(bool& isWsg50, int& hardwareRevision, int& firmwareRevision, int& serialNumber); + + void doGetSystemLimits(); + + void doGetSystemState(const bool& doAutomaticUpdate, const bool& doUpdateOnChange, const unsigned int& period = 0); + + /** + * @return [@htmlonly °C @endhtmlonly] + */ + float doGetTemperature(); + + /** + * @param width [0,..,0.11] [m] + * @param speed [0,..,0.4] [m/s] + */ + void doGraspPart(const float& width, const float& speed); + + /** + * Perform necessary homing motion for calibration. + * This function call is blocking until the calibration is complete. + * + * @param direction 0 = default from system configuration, 1 = positive movement, 2 = negative movement + */ + void doHomingMotion(const unsigned int& direction = 0); + + void doOverdriveMode(const bool& doOverdriveMode); + + /** + * @param width [0,..,0.11] [m] + * @param speed [0,..,0.4] [m/s] + */ + void doPrePositionFingers(const float& width, const float& speed = 0.2f, const bool& doRelativeMovement = false, const bool& doStopOnBlock = false); + + /** + * @param width [0,..,0.11] [m] + * @param speed [0.005,..,0.4] [m/s] + */ + void doReleasePart(const float& width = 0.11f, const float& speed = 0.4f); + + /** + * @param acceleration [0.1,..,5] [m/s^2] + */ + void doSetAcceleration(const float& acceleration = 2.0f); + + /** + * @param force [5,..,80] [N] + */ + void doSetForceLimit(const float& force = 40.0f); + + /** + * @param limitMinus [m] + * @param limitPlus [m] + */ + void doSetSoftLimits(const float& limitMinus, const float& limitPlus); + + void doStop(); + + void doTareForceSensor(); + + /** + * @return [m/s^2] + */ + float getAcceleration() const; + + /** + * @return [N] + */ + float getForce() const; + + /** + * @return [N] + */ + float getForceLimit() const; + + GraspingState getGraspingState() const; + + /** + * @return [m] + */ + float getOpeningWidth() const; + + /** + * @return [m/s] + */ + float getSpeed() const; + + SystemState getSystemState() const; + + void halt(); + + void open(); + + void release(); + + void shut(); + + void start(); + + void step(); + + void stop(); + + protected: + + private: + uint16_t crc(const uint8_t* buf, const ::std::size_t& len) const; + + void doDisconnectAnnouncement(); + + ::std::size_t recv(uint8_t* buf); + + ::std::size_t recv(uint8_t* buf, const ::std::size_t& len, const uint8_t& command); + + void send(uint8_t* buf, const ::std::size_t& len); + + static const ::std::size_t HEADER_SIZE = 6; + + float acceleration; + + float accelerationMaximum; + + float accelerationMinimum; + + float force; + + float forceLimit; + + float forceMinimum; + + float forceNominal; + + float forceOverdrive; + + GraspingState graspingState; + + float limitMinus; + + float limitPlus; + + float openingWidth; + + unsigned int period; + + float speed; + + float speedMaximum; + + float speedMinimum; + + float stroke; + + SystemState systemState; + + TcpSocket tcp; + }; + } +} + +#endif // _RL_HAL_WEISSWSG50_H_ diff --git a/src/rl/hal/endian.cpp b/src/rl/hal/endian.cpp new file mode 100644 index 00000000..64281cbd --- /dev/null +++ b/src/rl/hal/endian.cpp @@ -0,0 +1,201 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "endian.h" + +#if (defined(HAVE_BIG_ENDIAN) && defined(HAVE_LITTLE_ENDIAN)) || (!defined(HAVE_BIG_ENDIAN) && !defined(HAVE_LITTLE_ENDIAN)) +#error define either HAVE_BIG_ENDIAN or HAVE_LITTLE_ENDIAN +#endif // (defined(HAVE_BIG_ENDIAN) && defined(HAVE_LITTLE_ENDIAN)) || (!defined(HAVE_BIG_ENDIAN) && !defined(HAVE_LITTLE_ENDIAN)) + +namespace rl +{ + namespace hal + { + uint32_t bigEndianDoubleWord(const uint16_t& highWord, const uint16_t& lowWord) + { +#ifdef HAVE_BIG_ENDIAN + return hostEndianDoubleWord(highWord, lowWord); +#elif defined(HAVE_LITTLE_ENDIAN) + return (lowWord << 16) | highWord; +#endif + } + + void bigEndianToHostEndian(uint16_t& word) + { +#ifdef HAVE_LITTLE_ENDIAN + swapByteOrder(word); +#endif // HAVE_LITTLE_ENDIAN + } + + void bigEndianToHostEndian(uint32_t& doubleWord) + { +#ifdef HAVE_LITTLE_ENDIAN + swapByteOrder(doubleWord); +#endif // HAVE_LITTLE_ENDIAN + } + + uint16_t bigEndianWord(const uint8_t& highByte, const uint8_t& lowByte) + { +#ifdef HAVE_BIG_ENDIAN + return hostEndianWord(highByte, lowByte); +#elif defined(HAVE_LITTLE_ENDIAN) + return (lowByte << 8) | highByte; +#endif + } + + uint8_t highByteFromBigEndian(const uint16_t& word) + { +#ifdef HAVE_BIG_ENDIAN + return highByteFromHostEndian(word); +#elif defined(HAVE_LITTLE_ENDIAN) + return lowByteFromHostEndian(word); +#endif + } + + uint8_t highByteFromLittleEndian(const uint16_t& word) + { +#ifdef HAVE_BIG_ENDIAN + return lowByteFromHostEndian(word); +#elif defined(HAVE_LITTLE_ENDIAN) + return highByteFromHostEndian(word); +#endif + } + + uint16_t highWordFromBigEndian(const uint32_t& doubleWord) + { +#ifdef HAVE_BIG_ENDIAN + return highWordFromHostEndian(doubleWord); +#elif defined(HAVE_LITTLE_ENDIAN) + return lowWordFromHostEndian(doubleWord); +#endif + } + + uint16_t highWordFromLittleEndian(const uint32_t& doubleWord) + { +#ifdef HAVE_BIG_ENDIAN + return lowWordFromHostEndian(doubleWord); +#elif defined(HAVE_LITTLE_ENDIAN) + return highWordFromHostEndian(doubleWord); +#endif + } + + void hostEndianToBigEndian(uint16_t& word) + { +#ifdef HAVE_LITTLE_ENDIAN + swapByteOrder(word); +#endif // HAVE_LITTLE_ENDIAN + } + + void hostEndianToBigEndian(uint32_t& doubleWord) + { +#ifdef HAVE_LITTLE_ENDIAN + swapByteOrder(doubleWord); +#endif // HAVE_LITTLE_ENDIAN + } + + void hostEndianToLittleEndian(uint16_t& word) + { +#ifdef HAVE_BIG_ENDIAN + swapByteOrder(word); +#endif // HAVE_BIG_ENDIAN + } + + void hostEndianToLittleEndian(uint32_t& doubleWord) + { +#ifdef HAVE_BIG_ENDIAN + swapByteOrder(doubleWord); +#endif // HAVE_BIG_ENDIAN + } + + uint32_t littleEndianDoubleWord(const uint16_t& highWord, const uint16_t& lowWord) + { +#ifdef HAVE_BIG_ENDIAN + return (lowWord << 16) | highWord; +#elif defined(HAVE_LITTLE_ENDIAN) + return hostEndianDoubleWord(highWord, lowWord); +#endif + } + + void littleEndianToHostEndian(uint16_t& word) + { +#ifdef HAVE_BIG_ENDIAN + swapByteOrder(word); +#endif // HAVE_BIG_ENDIAN + } + + void littleEndianToHostEndian(uint32_t& doubleWord) + { +#ifdef HAVE_BIG_ENDIAN + swapByteOrder(doubleWord); +#endif // HAVE_BIG_ENDIAN + } + + uint16_t littleEndianWord(const uint8_t& highByte, const uint8_t& lowByte) + { +#ifdef HAVE_BIG_ENDIAN + return (lowByte << 8) | highByte; +#elif defined(HAVE_LITTLE_ENDIAN) + return hostEndianWord(highByte, lowByte); +#endif + } + + uint8_t lowByteFromBigEndian(const uint16_t& word) + { +#ifdef HAVE_BIG_ENDIAN + return lowByteFromHostEndian(word); +#elif defined(HAVE_LITTLE_ENDIAN) + return highByteFromHostEndian(word); +#endif + } + + uint8_t lowByteFromLittleEndian(const uint16_t& word) + { +#ifdef HAVE_BIG_ENDIAN + return highByteFromHostEndian(word); +#elif defined(HAVE_LITTLE_ENDIAN) + return lowByteFromHostEndian(word); +#endif + } + + uint16_t lowWordFromBigEndian(const uint32_t& doubleWord) + { +#ifdef HAVE_BIG_ENDIAN + return lowWordFromHostEndian(doubleWord); +#elif defined(HAVE_LITTLE_ENDIAN) + return highWordFromHostEndian(doubleWord); +#endif + } + + uint16_t lowWordFromLittleEndian(const uint32_t& doubleWord) + { +#ifdef HAVE_BIG_ENDIAN + return highWordFromHostEndian(doubleWord); +#elif defined(HAVE_LITTLE_ENDIAN) + return lowWordFromHostEndian(doubleWord); +#endif + } + } +} diff --git a/src/rl/hal/endian.h b/src/rl/hal/endian.h new file mode 100644 index 00000000..f2b7bcb0 --- /dev/null +++ b/src/rl/hal/endian.h @@ -0,0 +1,118 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_ENDIAN_H_ +#define _RL_HAL_ENDIAN_H_ + +#include "types.h" + +namespace rl +{ + namespace hal + { + uint32_t bigEndianDoubleWord(const uint16_t& highWord, const uint16_t& lowWord); + + void bigEndianToHostEndian(uint16_t& word); + + void bigEndianToHostEndian(uint32_t& doubleWord); + + uint16_t bigEndianWord(const uint8_t& highByte, const uint8_t& lowByte); + + uint8_t highByteFromBigEndian(const uint16_t& word); + + inline uint8_t highByteFromHostEndian(const uint16_t& word) + { + return (word >> 8); + } + + uint8_t highByteFromLittleEndian(const uint16_t& word); + + uint16_t highWordFromBigEndian(const uint32_t& doubleWord); + + inline uint16_t highWordFromHostEndian(const uint32_t& doubleWord) + { + return (doubleWord >> 16); + } + + uint16_t highWordFromLittleEndian(const uint32_t& doubleWord); + + inline uint32_t hostEndianDoubleWord(const uint16_t& highWord, const uint16_t& lowWord) + { + return (highWord << 16) | lowWord; + } + + void hostEndianToBigEndian(uint16_t& word); + + void hostEndianToBigEndian(uint32_t& doubleWord); + + void hostEndianToLittleEndian(uint16_t& word); + + void hostEndianToLittleEndian(uint32_t& doubleWord); + + inline uint16_t hostEndianWord(const uint8_t& highByte, const uint8_t& lowByte) + { + return (highByte << 8) | lowByte; + } + + uint32_t littleEndianDoubleWord(const uint16_t& highWord, const uint16_t& lowWord); + + void littleEndianToHostEndian(uint16_t& word); + + void littleEndianToHostEndian(uint32_t& doubleWord); + + uint16_t littleEndianWord(const uint8_t& highByte, const uint8_t& lowByte); + + uint8_t lowByteFromBigEndian(const uint16_t& word); + + inline uint8_t lowByteFromHostEndian(const uint16_t& word) + { + return (word & 0xFF); + } + + uint8_t lowByteFromLittleEndian(const uint16_t& word); + + uint16_t lowWordFromBigEndian(const uint32_t& doubleWord); + + inline uint16_t lowWordFromHostEndian(const uint32_t& doubleWord) + { + return (doubleWord & 0xFFFF); + } + + uint16_t lowWordFromLittleEndian(const uint32_t& doubleWord); + + inline void swapByteOrder(uint16_t& word) + { + word = (word >> 8) | (word << 8); // TODO + } + + inline void swapByteOrder(uint32_t& doubleWord) + { + doubleWord = ((doubleWord & 0x000000FF) << 24) | ((doubleWord & 0x0000FF00) << 8) | ((doubleWord & 0x00FF0000) >> 8) | ((doubleWord & 0xFF000000) >> 24); // TODO + } + } +} + +#endif // _RL_HAL_ENDIAN_H_ diff --git a/src/rl/hal/types.h b/src/rl/hal/types.h new file mode 100644 index 00000000..0b2526c0 --- /dev/null +++ b/src/rl/hal/types.h @@ -0,0 +1,43 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_HAL_TYPES_H_ +#define _RL_HAL_TYPES_H_ + +#ifdef WIN32 +typedef signed __int8 int8_t; +typedef signed __int16 int16_t; +typedef signed __int32 int32_t; +typedef signed __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +#else // WIN32 +#include +#endif // WIN32 + +#endif // _RL_HAL_TYPES_H_ diff --git a/src/rl/kin/CMakeLists.txt b/src/rl/kin/CMakeLists.txt new file mode 100644 index 00000000..16a88e8b --- /dev/null +++ b/src/rl/kin/CMakeLists.txt @@ -0,0 +1,78 @@ +project(rlkin) + +find_package(Boost REQUIRED) + +set( + HDRS + Element.h + Exception.h + Frame.h + Joint.h + Kinematics.h + Link.h + Prismatic.h + Puma.h + Revolute.h + Rhino.h + Transform.h +) +set( + SRCS + Element.cpp + Exception.cpp + Frame.cpp + Joint.cpp + Kinematics.cpp + Link.cpp + Prismatic.cpp + Puma.cpp + Revolute.cpp + Rhino.cpp + Transform.cpp +) + +if(WIN32) + add_library( + rlkin + STATIC + ${HDRS} + ${SRCS} + ) +else(WIN32) + add_library( + rlkin + SHARED + ${HDRS} + ${SRCS} + ) +endif(WIN32) + +target_include_directories( + rlkin + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlkin + rlmath + rlxml +) + +set_target_properties( + rlkin + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/kin COMPONENT headers) + +install( + TARGETS rlkin + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/kin/Element.cpp b/src/rl/kin/Element.cpp new file mode 100644 index 00000000..59dc376c --- /dev/null +++ b/src/rl/kin/Element.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Element.h" + +namespace rl +{ + namespace kin + { + Element::Element() : + name() + { + } + + Element::~Element() + { + } + } +} diff --git a/src/rl/kin/Element.h b/src/rl/kin/Element.h new file mode 100644 index 00000000..b792e3e6 --- /dev/null +++ b/src/rl/kin/Element.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_ELEMENT_H_ +#define _RL_KIN_ELEMENT_H_ + +#include + +namespace rl +{ + namespace kin + { + class Element + { + public: + Element(); + + virtual ~Element(); + + ::std::string name; + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_ELEMENT_H_ diff --git a/src/rl/kin/Exception.cpp b/src/rl/kin/Exception.cpp new file mode 100644 index 00000000..b7e22db1 --- /dev/null +++ b/src/rl/kin/Exception.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Exception.h" + +namespace rl +{ + namespace kin + { + Exception::Exception(const ::std::string& what_arg) : + ::std::runtime_error(what_arg) + { + } + + Exception::~Exception() throw() + { + } + } +} diff --git a/src/rl/kin/Exception.h b/src/rl/kin/Exception.h new file mode 100644 index 00000000..9a98b697 --- /dev/null +++ b/src/rl/kin/Exception.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_EXCEPTION_H_ +#define _RL_KIN_EXCEPTION_H_ + +#include + +namespace rl +{ + namespace kin + { + class Exception : public ::std::runtime_error + { + public: + Exception(const ::std::string& what_arg); + + virtual ~Exception() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_EXCEPTION_H_ diff --git a/src/rl/kin/Frame.cpp b/src/rl/kin/Frame.cpp new file mode 100644 index 00000000..1f3c8492 --- /dev/null +++ b/src/rl/kin/Frame.cpp @@ -0,0 +1,43 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Frame.h" + +namespace rl +{ + namespace kin + { + Frame::Frame() : + Element(), + frame() + { + } + + Frame::~Frame() + { + } + } +} diff --git a/src/rl/kin/Frame.h b/src/rl/kin/Frame.h new file mode 100644 index 00000000..eb6a30f2 --- /dev/null +++ b/src/rl/kin/Frame.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_FRAME_H_ +#define _RL_KIN_FRAME_H_ + +#include + +#include "Element.h" + +namespace rl +{ + namespace kin + { + class Frame : public Element + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Frame(); + + virtual ~Frame(); + + ::rl::math::Transform frame; + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_FRAME_H_ diff --git a/src/rl/kin/Joint.cpp b/src/rl/kin/Joint.cpp new file mode 100644 index 00000000..fa0a098d --- /dev/null +++ b/src/rl/kin/Joint.cpp @@ -0,0 +1,65 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Joint.h" + +namespace rl +{ + namespace kin + { + Joint::Joint() : + Transform(), + a(0), + alpha(0), + d(0), + leaves(), + max(0), + min(0), + offset(0), + speed(0), + theta(0), + wraparound(false), + q() + { + } + + Joint::~Joint() + { + } + + ::rl::math::Real + Joint::getPosition() const + { + return this->q; + } + + void + Joint::setPosition(const ::rl::math::Real& q) + { + this->q = q; + } + } +} diff --git a/src/rl/kin/Joint.h b/src/rl/kin/Joint.h new file mode 100644 index 00000000..9ab65871 --- /dev/null +++ b/src/rl/kin/Joint.h @@ -0,0 +1,90 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_JOINT_H_ +#define _RL_KIN_JOINT_H_ + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include + +#include "Transform.h" + +namespace rl +{ + namespace kin + { + class Joint : public Transform + { + public: + Joint(); + + virtual ~Joint(); + + ::rl::math::Real getPosition() const; + + virtual ::rl::math::Unit getPositionUnit() const = 0; + + virtual ::rl::math::Unit getSpeedUnit() const = 0; + + virtual void jacobian(const ::rl::math::Transform& tcp, ::rl::math::MatrixBlock& j) = 0; + + virtual void setPosition(const ::rl::math::Real& q); + + ::rl::math::Real a; + + ::rl::math::Real alpha; + + ::rl::math::Real d; + + ::std::tr1::unordered_set< ::std::size_t > leaves; + + ::rl::math::Real max; + + ::rl::math::Real min; + + ::rl::math::Real offset; + + ::rl::math::Real speed; + + ::rl::math::Real theta; + + bool wraparound; + + protected: + ::rl::math::Real q; + + private: + + }; + } +} + +#endif // _RL_KIN_JOINT_H_ diff --git a/src/rl/kin/Kinematics.cpp b/src/rl/kin/Kinematics.cpp new file mode 100644 index 00000000..a60f1176 --- /dev/null +++ b/src/rl/kin/Kinematics.cpp @@ -0,0 +1,1031 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Element.h" +#include "Exception.h" +#include "Frame.h" +#include "Kinematics.h" +#include "Link.h" +#include "Joint.h" +#include "Prismatic.h" +#include "Puma.h" +#include "Revolute.h" +#include "Rhino.h" +#include "Transform.h" + +namespace rl +{ + namespace kin + { + Kinematics::Kinematics() : + elements(), + frames(), + leaves(), + links(), + jacobian(), + jacobianInverse(), + joints(), + manufacturer(), + name(), + root(), + tools(), + transforms(), + tree() + { + } + + Kinematics::~Kinematics() + { + } + + bool + Kinematics::areColliding(const ::std::size_t& i, const ::std::size_t& j) const + { + assert(i < this->links.size()); + assert(j < this->links.size()); + + if (this->links[i]->selfcollision.count(this->links[j]) > 0 || this->links[j]->selfcollision.count(this->links[i]) > 0) + { + return false; + } + else + { + return true; + } + } + + void + Kinematics::clip(::rl::math::Vector& q) const + { + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + if (this->joints[i]->wraparound) + { + ::rl::math::Real range = ::std::abs(this->joints[i]->max - this->joints[i]->min); + + while (q(i) > this->joints[i]->max) + { + q(i) -= range; + } + + while (q(i) < this->joints[i]->min) + { + q(i) += range; + } + } + else if (q(i) > this->joints[i]->max) + { + q(i) = this->joints[i]->max; + } + else if (q(i) < this->joints[i]->min) + { + q(i) = this->joints[i]->min; + } + } + } + + Kinematics* + Kinematics::clone() const + { + return new Kinematics(*this); + } + + Kinematics* + Kinematics::create(const ::std::string& filename) + { + Kinematics* kinematics = NULL; + + ::rl::xml::DomParser parser; + + ::rl::xml::Document doc = parser.readFile(filename, "", XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + doc.substitute(XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + ::rl::xml::Path path(doc); + + ::rl::xml::Object instance = path.eval("//kinematics|//puma|//rhino"); + + for (int i = 0; i < ::std::min(1, instance.getNodeNr()); ++i) + { + if ("puma" == instance.getNodeTab(i).getName()) + { + kinematics = new Puma(); + } + else if ("rhino" == instance.getNodeTab(i).getName()) + { + kinematics = new Rhino(); + } + else if ("kinematics" == instance.getNodeTab(i).getName()) + { + kinematics = new Kinematics(); + } + else + { + continue; + } + + // manufacturer + + kinematics->manufacturer = path.eval("string(manufacturer)", instance.getNodeTab(i)).getStringval(); + + // name + + kinematics->name = path.eval("string(name)", instance.getNodeTab(i)).getStringval(); + + // frames + + ::rl::xml::Object frames = path.eval("frame|link|world", instance.getNodeTab(i)); + + ::std::map< ::std::string, Vertex > id2vertex; + + for (int j = 0; j < frames.getNodeNr(); ++j) + { + Vertex v = ::boost::add_vertex(kinematics->tree); + + if ("frame" == frames.getNodeTab(j).getName()) + { + Frame* f = new Frame(); + + f->name = path.eval("string(@id)", frames.getNodeTab(j)).getStringval(); + + f->frame.setIdentity(); + + f->frame = ::rl::math::AngleAxis( + path.eval("number(rotation/z)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/y)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/x)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + f->frame.translation().x() = path.eval("number(translation/x)", frames.getNodeTab(j)).getFloatval(0); + f->frame.translation().y() = path.eval("number(translation/y)", frames.getNodeTab(j)).getFloatval(0); + f->frame.translation().z() = path.eval("number(translation/z)", frames.getNodeTab(j)).getFloatval(0); + + kinematics->tree[v].reset(f); + } + else if ("link" == frames.getNodeTab(j).getName()) + { + Link* l = new Link(); + + l->name = path.eval("string(@id)", frames.getNodeTab(j)).getStringval(); + + kinematics->tree[v].reset(l); + } + else if ("world" == frames.getNodeTab(j).getName()) + { + Frame* f = new Frame(); + + f->name = path.eval("string(@id)", frames.getNodeTab(j)).getStringval(); + + f->frame.setIdentity(); + + f->frame = ::rl::math::AngleAxis( + path.eval("number(rotation/z)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/y)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/x)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + f->frame.translation().x() = path.eval("number(translation/x)", frames.getNodeTab(j)).getFloatval(0); + f->frame.translation().y() = path.eval("number(translation/y)", frames.getNodeTab(j)).getFloatval(0); + f->frame.translation().z() = path.eval("number(translation/z)", frames.getNodeTab(j)).getFloatval(0); + + kinematics->root = v; + + kinematics->tree[v].reset(f); + } + + id2vertex[path.eval("string(@id)", frames.getNodeTab(j)).getStringval()] = v; + } + + for (int j = 0; j < frames.getNodeNr(); ++j) + { + if ("link" == frames.getNodeTab(j).getName()) + { + Vertex v1 = id2vertex[path.eval("string(@id)", frames.getNodeTab(j)).getStringval()]; + Link* l1 = dynamic_cast< Link* >(kinematics->tree[v1].get()); + + ::rl::xml::Object ignores = path.eval("ignore", frames.getNodeTab(j)); + + for (int k = 0; k < ignores.getNodeNr(); ++k) + { + if (ignores.getNodeTab(k).hasAttribute("idref")) + { + Vertex v2 = id2vertex[ignores.getNodeTab(k).getAttribute("idref").getValue()]; + Link* l2 = dynamic_cast< Link* >(kinematics->tree[v2].get()); + + l1->selfcollision.insert(l2); + l2->selfcollision.insert(l1); + } + else + { + l1->collision = false; + } + } + } + } + + // transforms + + ::rl::xml::Object transforms = path.eval("prismatic|revolute|transform", instance.getNodeTab(i)); + + for (int j = 0; j < transforms.getNodeNr(); ++j) + { + Vertex a = id2vertex[path.eval("string(frame/a/@idref)", transforms.getNodeTab(j)).getStringval()]; + Vertex b = id2vertex[path.eval("string(frame/b/@idref)", transforms.getNodeTab(j)).getStringval()]; + + Edge e = ::boost::add_edge(a, b, kinematics->tree).first; + + if ("prismatic" == transforms.getNodeTab(j).getName()) + { + Prismatic* p = new Prismatic(); + + p->name = path.eval("string(@id)", transforms.getNodeTab(j)).getStringval(); + + p->a = path.eval("number(dh/a)", transforms.getNodeTab(j)).getFloatval(0); + p->alpha = path.eval("number(dh/alpha)", transforms.getNodeTab(j)).getFloatval(0); + p->d = path.eval("number(dh/d)", transforms.getNodeTab(j)).getFloatval(0); + p->max = path.eval("number(max)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + p->min = path.eval("number(min)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + p->offset = path.eval("number(offset)", transforms.getNodeTab(j)).getFloatval(0); + p->speed = path.eval("number(speed)", transforms.getNodeTab(j)).getFloatval(0); + p->theta = path.eval("number(dh/theta)", transforms.getNodeTab(j)).getFloatval(0); + p->wraparound = path.eval("count(wraparound) > 0", transforms.getNodeTab(j)).getBoolval(); + + p->alpha *= ::rl::math::DEG2RAD; + p->theta *= ::rl::math::DEG2RAD; + + kinematics->tree[e].reset(p); + } + else if ("revolute" == transforms.getNodeTab(j).getName()) + { + Revolute* r = new Revolute(); + + r->name = path.eval("string(@id)", transforms.getNodeTab(j)).getStringval(); + + r->a = path.eval("number(dh/a)", transforms.getNodeTab(j)).getFloatval(0); + r->alpha = path.eval("number(dh/alpha)", transforms.getNodeTab(j)).getFloatval(0); + r->d = path.eval("number(dh/d)", transforms.getNodeTab(j)).getFloatval(0); + r->max = path.eval("number(max)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + r->min = path.eval("number(min)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + r->offset = path.eval("number(offset)", transforms.getNodeTab(j)).getFloatval(0); + r->speed = path.eval("number(speed)", transforms.getNodeTab(j)).getFloatval(0); + r->theta = path.eval("number(dh/theta)", transforms.getNodeTab(j)).getFloatval(0); + r->wraparound = path.eval("count(wraparound) > 0", transforms.getNodeTab(j)).getBoolval(); + + r->alpha *= ::rl::math::DEG2RAD; + r->max *= ::rl::math::DEG2RAD; + r->min *= ::rl::math::DEG2RAD; + r->offset *= ::rl::math::DEG2RAD; + r->speed *= ::rl::math::DEG2RAD; + r->theta *= ::rl::math::DEG2RAD; + + kinematics->tree[e].reset(r); + } + else if ("transform" == transforms.getNodeTab(j).getName()) + { + Transform* t = new Transform(); + + t->name = path.eval("string(@id)", transforms.getNodeTab(j)).getStringval(); + + t->transform.setIdentity(); + + t->transform = ::rl::math::AngleAxis( + path.eval("number(rotation/z)", transforms.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/y)", transforms.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/x)", transforms.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + t->transform.translation().x() = path.eval("number(translation/x)", transforms.getNodeTab(j)).getFloatval(0); + t->transform.translation().y() = path.eval("number(translation/y)", transforms.getNodeTab(j)).getFloatval(0); + t->transform.translation().z() = path.eval("number(translation/z)", transforms.getNodeTab(j)).getFloatval(0); + + kinematics->tree[e].reset(t); + } + } + } + + kinematics->update(); + + if (dynamic_cast< Puma* >(kinematics)) + { + if (kinematics->joints.size() != 6 || kinematics->links.size() != 7 || kinematics->transforms.size() != 8 || kinematics->frames.size() != 9) + { + delete kinematics; + kinematics = NULL; + } + } + else if (dynamic_cast< Rhino* >(kinematics)) + { + if (kinematics->joints.size() != 5 || kinematics->links.size() != 6 || kinematics->transforms.size() != 7 || kinematics->frames.size() != 8) + { + delete kinematics; + kinematics = NULL; + } + } + + return kinematics; + } + + ::rl::math::Real + Kinematics::distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + return this->inverseOfTransformedDistance(this->transformedDistance(q1, q2)); + } + + const ::rl::math::Transform& + Kinematics::forwardPosition(const ::std::size_t& i) const + { + return this->tree[this->leaves[i]]->frame; + } + + void + Kinematics::forwardForce(const ::rl::math::Vector& tau, ::rl::math::Vector& f) const + { + assert(tau.size() <= this->getDof()); + assert(f.size() <= this->getOperationalDof() * 6); + + f = this->jacobianInverse.transpose() * tau; + } + + void + Kinematics::forwardVelocity(const ::rl::math::Vector& qdot, ::rl::math::Vector& xdot) const + { + assert(qdot.size() <= this->getDof()); + assert(xdot.size() <= this->getOperationalDof() * 6); + + xdot = this->jacobian * qdot; + } + + ::std::size_t + Kinematics::getBodies() const + { + return this->links.size(); + } + + ::std::size_t + Kinematics::getDof() const + { + return this->joints.size(); + } + + const ::rl::math::Transform& + Kinematics::getFrame(const ::std::size_t& i) const + { + assert(i < this->links.size()); + + return this->links[i]->frame; + } + + const ::rl::math::Matrix& + Kinematics::getJacobian() const + { + return this->jacobian; + } + + const ::rl::math::Matrix& + Kinematics::getJacobianInverse() const + { + return this->jacobianInverse; + } + + Joint* + Kinematics::getJoint(const ::std::size_t& i) const + { + assert(i < this->joints.size()); + + return this->joints[i]; + } + + ::rl::math::Real + Kinematics::getManipulabilityMeasure() const + { + return ::std::sqrt((this->jacobian * this->jacobian.transpose()).determinant()); + } + + ::std::string + Kinematics::getManufacturer() const + { + return this->manufacturer; + } + + ::rl::math::Real + Kinematics::getMaximum(const ::std::size_t& i) const + { + assert(i < this->joints.size()); + + return this->joints[i]->max; + } + + void + Kinematics::getMaximum(::rl::math::Vector& max) const + { + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + max(i) = this->joints[i]->max; + } + } + + ::rl::math::Real + Kinematics::getMinimum(const ::std::size_t& i) const + { + assert(i < this->joints.size()); + + return this->joints[i]->min; + } + + void + Kinematics::getMinimum(::rl::math::Vector& min) const + { + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + min(i) = this->joints[i]->min; + } + } + + ::std::string + Kinematics::getName() const + { + return this->name; + } + + ::std::size_t + Kinematics::getOperationalDof() const + { + return this->leaves.size(); + } + + void + Kinematics::getPosition(::rl::math::Vector& q) const + { + assert(q.size() == this->getDof()); + + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + q(i) = this->joints[i]->getPosition(); + } + } + + void + Kinematics::getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + units(i) = this->joints[i]->getPositionUnit(); + } + } + + void + Kinematics::getSpeed(::rl::math::Vector& speed) const + { + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + speed(i) = this->joints[i]->speed; + } + } + + void + Kinematics::getSpeedUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + units(i) = this->joints[i]->getSpeedUnit(); + } + } + + void + Kinematics::interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const + { + assert(q1.size() == this->getDof()); + assert(q2.size() == this->getDof()); + assert(alpha >= 0.0f); + assert(alpha <= 1.0f); + assert(q.size() == this->getDof()); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + if (this->joints[i]->wraparound) + { + ::rl::math::Real diff = ::std::abs(q2(i) - q1(i)); + ::rl::math::Real range = ::std::abs(this->joints[i]->max - this->joints[i]->min); + + if (::std::abs(range - diff) < diff) + { + if (q1(i) > q2(i)) + { + q(i) = (1.0f - alpha) * q1(i) + alpha * (q2(i) + range); + } + else + { + q(i) = (1.0f - alpha) * (q1(i) + range) + alpha * q2(i); + } + + while (q(i) > this->joints[i]->max) + { + q(i) -= range; + } + + while (q(i) < this->joints[i]->min) + { + q(i) += range; + } + } + else + { + q(i) = (1.0f - alpha) * q1(i) + alpha * q2(i); + } + } + else + { + q(i) = (1.0f - alpha) * q1(i) + alpha * q2(i); + } + } + } + + void + Kinematics::inverseForce(const ::rl::math::Vector& f, ::rl::math::Vector& tau) const + { + assert(f.size() <= this->getOperationalDof() * 6); + assert(tau.size() <= this->getDof()); + + tau = this->jacobian.transpose() * f; + } + + ::rl::math::Real + Kinematics::inverseOfTransformedDistance(const ::rl::math::Real& d) const + { + return ::std::sqrt(d); + } + + bool + Kinematics::inversePosition(const ::rl::math::Transform& x, ::rl::math::Vector& q, const ::std::size_t& leaf, const ::rl::math::Real& delta, const ::rl::math::Real& epsilon, const ::std::size_t& iterations) + { + assert(q.size() == this->getDof()); + + this->getPosition(q); + ::rl::math::Vector dx(6 * this->getOperationalDof()); + dx.setZero(); + ::rl::math::Vector dq(this->getDof()); + + ::rl::math::Real norm = 1; + + for (::std::size_t i = 0; i < iterations && norm > epsilon; ++i) + { + this->updateFrames(); + + ::rl::math::VectorBlock dxi = dx.segment(6 * leaf, 6); + ::rl::math::transform::toDelta(this->forwardPosition(leaf), x, dxi); + + this->updateJacobian(); + this->updateJacobianInverse(); + this->inverseVelocity(dx, dq); + + norm = dq.norm(); + + if (norm > delta) + { + dq *= delta / norm; + norm = dq.norm(); + } + + q += dq; + + this->setPosition(q); + } + + if (norm > epsilon) + { + return false; + } + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + q(i) = ::std::fmod(q(i), 2.0f * static_cast< ::rl::math::Real >(M_PI)); + + if (q(i) < this->joints[i]->min) + { + q(i) += 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + else if (q(i) > this->joints[i]->max) + { + q(i) -= 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + } + + return true; + } + + void + Kinematics::inverseVelocity(const ::rl::math::Vector& xdot, ::rl::math::Vector& qdot) const + { + assert(xdot.size() <= this->getOperationalDof() * 6); + assert(qdot.size() <= this->getDof()); + + qdot = this->jacobianInverse * xdot; + } + + bool + Kinematics::isColliding(const ::std::size_t& i) const + { + assert(i < this->links.size()); + + return this->links[i]->collision; + } + + bool + Kinematics::isSingular() const + { +#if 0 + return !(this->getManipulabilityMeasure() > 0); +#else + ::Eigen::JacobiSVD< ::rl::math::Matrix > svd(this->jacobian); + return (::std::abs(svd.singularValues()(svd.singularValues().size() - 1)) > ::std::numeric_limits< ::rl::math::Real >::epsilon()) ? false : true; +#endif + } + + bool + Kinematics::isValid(const ::rl::math::Vector& q) const + { + assert(q.size() == this->getDof()); + + for (::std::ptrdiff_t i = 0; i < q.size(); ++i) + { + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + + return true; + } + + ::rl::math::Real + Kinematics::maxDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const + { + ::rl::math::Real d = 0; + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + ::rl::math::Real delta = ::std::max(::std::abs(q(i) - min(i)), ::std::abs(q(i) - max(i))); + + if (this->joints[i]->wraparound) + { + ::rl::math::Real range = ::std::abs(this->joints[i]->max - this->joints[i]->min); + d += this->transformedDistance(::std::max(delta, ::std::abs(range - delta))); + } + else + { + d += this->transformedDistance(delta); + } + } + + return d; + } + + ::rl::math::Real + Kinematics::minDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const + { + ::rl::math::Real d = 0; + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + d += this->transformedDistance(this->minDistanceToRectangle(q(i), min(i), max(i), i)); + } + + return d; + } + + ::rl::math::Real + Kinematics::minDistanceToRectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cuttingDimension) const + { + ::rl::math::Real d = 0; + + if (q < min || q > max) + { + ::rl::math::Real delta = ::std::min(::std::abs(q - min), ::std::abs(q - max)); + + if (this->joints[cuttingDimension]->wraparound) + { + ::rl::math::Real range = ::std::abs(this->joints[cuttingDimension]->max - this->joints[cuttingDimension]->min); + ::rl::math::Real size = ::std::abs(max - min); + d += ::std::min(delta, ::std::abs(range - size - delta)); + } + else + { + d += delta; + } + } + + return d; + } + + ::rl::math::Real + Kinematics::newDistance(const ::rl::math::Real& dist, const ::rl::math::Real& oldOff, const ::rl::math::Real& newOff, const int& cuttingDimension) const + { + return dist - this->transformedDistance(oldOff) + this->transformedDistance(newOff); + } + + void + Kinematics::setColliding(const ::std::size_t& i, const bool& doesCollide) + { + assert(i < this->getBodies()); + + this->links[i]->collision = doesCollide; + } + + void + Kinematics::setColliding(const ::std::size_t& i, const ::std::size_t& j, const bool& doCollide) + { + assert(i < this->getBodies()); + assert(j < this->getBodies()); + + if (doCollide) + { + this->links[i]->selfcollision.erase(this->links[j]); + this->links[j]->selfcollision.erase(this->links[i]); + } + else + { + this->links[i]->selfcollision.insert(this->links[j]); + this->links[j]->selfcollision.insert(this->links[i]); + } + } + + void + Kinematics::setPosition(const ::rl::math::Vector& q) + { + assert(q.size() == this->getDof()); + + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + this->joints[i]->setPosition(q(i)); + } + } + + void + Kinematics::step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const + { + assert(q1.size() == this->getDof()); + assert(qdot.size() == this->getDof()); + assert(q2.size() == this->getDof()); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + q2(i) = q1(i) + qdot(i); + } + + this->clip(q2); + } + + ::rl::math::Transform& + Kinematics::tool(const ::std::size_t& i) + { + assert(i < this->tools.size()); + + return this->tree[this->tools[i]]->transform; + } + + const ::rl::math::Transform& + Kinematics::tool(const ::std::size_t& i) const + { + assert(i < this->tools.size()); + + return this->tree[this->tools[i]]->transform; + } + + ::rl::math::Real + Kinematics::transformedDistance(const ::rl::math::Real& d) const + { + return ::std::pow(d, 2); + } + + ::rl::math::Real + Kinematics::transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + assert(q1.size() == this->getDof()); + assert(q2.size() == this->getDof()); + + ::rl::math::Real d = 0; + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + ::rl::math::Real delta = ::std::abs(q2(i) - q1(i)); + + if (this->joints[i]->wraparound) + { + ::rl::math::Real range = ::std::abs(this->joints[i]->max - this->joints[i]->min); + d += this->transformedDistance(::std::min(delta, ::std::abs(range - delta))); + } + else + { + d += this->transformedDistance(delta); + } + } + + return d; + } + + void + Kinematics::update() + { + this->elements.clear(); + this->joints.clear(); + this->leaves.clear(); + this->links.clear(); + this->tools.clear(); + this->transforms.clear(); + + this->update(this->root); + + for (::std::vector< Vertex >::iterator i = this->leaves.begin(); i != this->leaves.end(); ++i) + { + Vertex v = *i; + + while (v != this->root) + { + Edge e = *::boost::in_edges(v, this->tree).first; + Transform* transform = this->tree[e].get(); + + if (Joint* joint = dynamic_cast< Joint* >(transform)) + { + joint->leaves.insert(*i); + } + + v = ::boost::source(e, this->tree); + } + } + + this->jacobian.resize(this->leaves.size() * 6, this->joints.size()); + this->jacobianInverse.resize(this->joints.size(), this->leaves.size() * 6); + } + + void + Kinematics::update(Vertex& u) + { + Frame* frame = this->tree[u].get(); + this->elements.push_back(frame); + this->frames.push_back(frame); + + if (Link* link = dynamic_cast< Link* >(frame)) + { + this->links.push_back(link); + } + + if (::boost::out_degree(u, this->tree) > 0) + { + for (OutEdgeIteratorPair i = ::boost::out_edges(u, this->tree); i.first != i.second; ++i.first) + { + Edge e = *i.first; + Vertex v = ::boost::target(e, this->tree); + + Transform* transform = this->tree[e].get(); + this->elements.push_back(transform); + this->transforms.push_back(transform); + transform->in = this->tree[u].get(); + transform->out = this->tree[v].get(); + + if (Joint* joint = dynamic_cast< Joint* >(transform)) + { + joint->leaves.clear(); + this->joints.push_back(joint); + } + + this->update(v); + } + } + else + { + this->leaves.push_back(u); + + for (InEdgeIteratorPair i = ::boost::in_edges(u, this->tree); i.first != i.second; ++i.first) + { + this->tools.push_back(*i.first); + } + } + } + + void + Kinematics::updateFrames() + { + for (::std::vector< Transform* >::iterator i = this->transforms.begin(); i != this->transforms.end(); ++i) + { + (*i)->updateFrames(); + } + } + + void + Kinematics::updateJacobian() + { + this->jacobian.setZero(); + + for (::std::size_t i = 0; i < this->leaves.size(); ++i) + { + for (::std::size_t j = 0; j < this->joints.size(); ++j) + { + if (this->joints[j]->leaves.count(this->leaves[i]) > 0) + { + ::rl::math::MatrixBlock jacobian = this->jacobian.block(6 * i, j, 6, 1); // TODO + this->joints[j]->jacobian(this->tree[this->leaves[i]]->frame, jacobian); + } + } + } + } + + void + Kinematics::updateJacobianInverse(const ::rl::math::Real& lambda, const bool& doSvd) + { + if (doSvd) + { + this->jacobianInverse.setZero(); + + ::Eigen::JacobiSVD< ::rl::math::Matrix > svd(this->jacobian, ::Eigen::ComputeFullU | ::Eigen::ComputeFullV); + + ::rl::math::Real wMin = svd.singularValues().minCoeff(); + ::rl::math::Real lambdaSqr = wMin < 1.0e-9f ? (1 - ::std::pow((wMin / 1.0e-9f), 2)) * ::std::pow(lambda, 2) : 0; + + for (::std::ptrdiff_t i = 0; i < svd.nonzeroSingularValues(); ++i) + { + this->jacobianInverse.noalias() += ( + svd.singularValues()(i) / (::std::pow(svd.singularValues()(i), 2) + lambdaSqr) * + svd.matrixV().col(i) * svd.matrixU().col(i).transpose() + ); + } + } + else + { + this->jacobianInverse = this->jacobian.transpose() * ( + this->jacobian * this->jacobian.transpose() + ::std::pow(lambda, 2) * + ::rl::math::Matrix::Identity(this->getOperationalDof() * 6, this->getOperationalDof() * 6) + ).inverse(); + } + } + + ::rl::math::Transform& + Kinematics::world() + { + return this->tree[this->root]->frame; + } + + const ::rl::math::Transform& + Kinematics::world() const + { + return this->tree[this->root]->frame; + } + } +} diff --git a/src/rl/kin/Kinematics.h b/src/rl/kin/Kinematics.h new file mode 100644 index 00000000..75e2d58a --- /dev/null +++ b/src/rl/kin/Kinematics.h @@ -0,0 +1,388 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_KINEMATICS_H_ +#define _RL_KIN_KINEMATICS_H_ + +#include +#include +#include +#include +#include +#include +#include + +namespace rl +{ + namespace kin + { + class Element; + class Frame; + class Link; + class Joint; + class Transform; + + class Kinematics + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Kinematics(); + + virtual ~Kinematics(); + + /** + * See if specified bodies should be tested for collisions with each other. + */ + bool areColliding(const ::std::size_t& i, const ::std::size_t& j) const; + + /** + * Clip specified configuration to be within joint limits. + * + * @param q \f$ q \f$ + */ + virtual void clip(::rl::math::Vector& q) const; + + virtual Kinematics* clone() const; + + static Kinematics* create(const ::std::string& filename); + + /** + * Calculate distance measure between specified configuration. + * + * @param q1 \f$ q_{1} \f$ + * @param q2 \f$ q_{2} \f$ + */ + virtual ::rl::math::Real distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + /** + * Get forward position kinematics. + * + * @param i end effector + * + * \pre updateFrames() + */ + virtual const ::rl::math::Transform& forwardPosition(const ::std::size_t& i = 0) const; + + /** + * Calculate forward force kinematics. + * + * \f[ F = J^{-T} \tau \f] + * + * @param tau \f$ \tau \f$ + * @param f \f$ F \f$ + * + * \pre updateJacobian() + * \pre updateJacobianInverse() + */ + virtual void forwardForce(const ::rl::math::Vector& tau, ::rl::math::Vector& f) const; + + /** + * Calculate forward velocity kinematics. + * + * \f[ \dot{x} = J \dot{q} \f] + * + * @param qdot \f$ \dot{q} \f$ + * @param xdot \f$ \dot{x} \f$ + * + * \pre updateJacobian() + */ + virtual void forwardVelocity(const ::rl::math::Vector& qdot, ::rl::math::Vector& xdot) const; + + /** + * Get number of links. + */ + ::std::size_t getBodies() const; + + /** + * Get number of degrees of freedom (DOF). + */ + ::std::size_t getDof() const; + + /** + * Get link frame. + * + * \pre updateFrames() + */ + const ::rl::math::Transform& getFrame(const ::std::size_t& i) const; + + /** + * Get Jacobian. + * + * \pre updateJacobian() + */ + const ::rl::math::Matrix& getJacobian() const; + + /** + * Get Jacobian-Inverse. + * + * \pre updateJacobianInverse() + */ + const ::rl::math::Matrix& getJacobianInverse() const; + + Joint* getJoint(const ::std::size_t& i) const; + + /** + * Get manipulability measure. + * + * \pre updateJacobian() + */ + ::rl::math::Real getManipulabilityMeasure() const; + + ::std::string getManufacturer() const; + + ::rl::math::Real getMaximum(const ::std::size_t& i) const; + + void getMaximum(::rl::math::Vector& max) const; + + ::rl::math::Real getMinimum(const ::std::size_t& i) const; + + void getMinimum(::rl::math::Vector& min) const; + + ::std::string getName() const; + + /** + * Get number of end effectors. + */ + ::std::size_t getOperationalDof() const; + + /** + * Get current joint position. + * + * @param q \f$ q \f$ + */ + void getPosition(::rl::math::Vector& q) const; + + void getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + void getSpeed(::rl::math::Vector& speed) const; + + void getSpeedUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + virtual void interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const; + + /** + * Calculate inverse force kinematics. + * + * \f[ \tau = J^{T} F \f] + * + * @param f \f$ F \f$ + * @param tau \f$ \tau \f$ + * + * \pre updateJacobian() + */ + virtual void inverseForce(const ::rl::math::Vector& f, ::rl::math::Vector& tau) const; + + virtual ::rl::math::Real inverseOfTransformedDistance(const ::rl::math::Real& d) const; + + /** + * Calculate inverse position kinematics. + * + * \par Side Effects: + * setPosition()\n\n + * updateFrames()\n\n + * updateJacobian()\n\n + * updateJacobianInverse() + */ + virtual bool inversePosition( + const ::rl::math::Transform& x, + ::rl::math::Vector& q, + const ::std::size_t& leaf = 0, + const ::rl::math::Real& delta = ::std::numeric_limits< ::rl::math::Real >::infinity(), + const ::rl::math::Real& epsilon = 1.0e-3f, + const ::std::size_t& iterations = 1000 + ); + + /** + * Calculate inverse velocity kinematics. + * + * \f[ \dot{q} = J^{\dag} \dot{x} \f] + * + * @param xdot \f$ \dot{x} \f$ + * @param qdot \f$ \dot{q} \f$ + * + * \pre updateJacobianInverse() + */ + virtual void inverseVelocity(const ::rl::math::Vector& xdot, ::rl::math::Vector& qdot) const; + + /** + * See if specified body should be tested for collisions with the environment. + */ + bool isColliding(const ::std::size_t& i) const; + + /** + * Check if current configuration is singular. + */ + virtual bool isSingular() const; + + /** + * Check if specified configuration is within joint limits. + * + * @param q \f$ q \f$ + */ + virtual bool isValid(const ::rl::math::Vector& q) const; + + virtual ::rl::math::Real maxDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const; + + virtual ::rl::math::Real minDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const; + + virtual ::rl::math::Real minDistanceToRectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cuttingDimension) const; + + virtual ::rl::math::Real newDistance(const ::rl::math::Real& dist, const ::rl::math::Real& oldOff, const ::rl::math::Real& newOff, const int& cuttingDimension) const; + + /** + * Set if specified body should be tested for collisions with the environment. + */ + void setColliding(const ::std::size_t& i, const bool& doesCollide); + + /** + * Set if specified bodies should be tested for collisions with each other. + */ + void setColliding(const ::std::size_t& i, const ::std::size_t& j, const bool& doCollide); + + /** + * Update current joint position. + * + * @param q \f$ q \f$ + */ + void setPosition(const ::rl::math::Vector& q); + + virtual void step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const; + + ::rl::math::Transform& tool(const ::std::size_t& i = 0); + + const ::rl::math::Transform& tool(const ::std::size_t& i = 0) const; + + virtual ::rl::math::Real transformedDistance(const ::rl::math::Real& d) const; + + virtual ::rl::math::Real transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + /** + * Update frames. + * + * \f[ {_{0}^{n}T} = {_{0}^{1}T} {_{0}^{1}T} \ldots {_{n-1}^{n}T} \f] + * + * \pre setPosition() + */ + virtual void updateFrames(); + + /** + * Update Jacobian. + * + * \f[ {^{0}J} = \begin{pmatrix} {^{0}J_{1}} & {^{0}J_{2}} & \cdots & {^{0}J_{n}} \end{pmatrix} \f] + * + * \pre updateFrames() + */ + virtual void updateJacobian(); + + /** + * Update Jacobian-Inverse. + * + * Singular value decomposition: + * \f[ J^{\dag} = \sum_{i = 1}^{r} \frac{ \sigma_{i} }{ \sigma_{i}^{2} + \lambda^{2} } v_{i} u_{i}^{T} \f] + * + * Damped least squares: + * \f[ J^{\dag} = J^{T} \left( J J^{T} + \lambda^{2} I \right)^{-1} \f] + * + * @param lambda damping factor + * @param svd singular value decomposition + * + * \pre updateJacobian() + */ + virtual void updateJacobianInverse(const ::rl::math::Real& lambda = 0.0f, const bool& doSvd = true); + + ::rl::math::Transform& world(); + + const ::rl::math::Transform& world() const; + + protected: + typedef ::boost::adjacency_list< + ::boost::vecS, + ::boost::vecS, + ::boost::bidirectionalS, + ::boost::shared_ptr< Frame >, + ::boost::shared_ptr< Transform >, + ::boost::no_property, + ::boost::vecS + > Tree; + + typedef ::boost::graph_traits< Tree >::edge_descriptor Edge; + + typedef ::boost::graph_traits< Tree >::edge_iterator EdgeIterator; + + typedef ::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::in_edge_iterator InEdgeIterator; + + typedef ::std::pair< InEdgeIterator, InEdgeIterator > InEdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::out_edge_iterator OutEdgeIterator; + + typedef ::std::pair< OutEdgeIterator, OutEdgeIterator > OutEdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::vertex_descriptor Vertex; + + typedef ::boost::graph_traits< Tree >::vertex_iterator VertexIterator; + + typedef ::std::pair< VertexIterator, VertexIterator > VertexIteratorPair; + + void update(); + + void update(Vertex& u); + + ::std::vector< Element* > elements; + + ::std::vector< Frame* > frames; + + ::std::vector< Vertex > leaves; + + ::std::vector< Link* > links; + + ::rl::math::Matrix jacobian; + + ::rl::math::Matrix jacobianInverse; + + ::std::vector< Joint* > joints; + + ::std::string manufacturer; + + ::std::string name; + + Vertex root; + + ::std::vector< Edge > tools; + + ::std::vector< Transform* > transforms; + + Tree tree; + + private: + + }; + } +} + +#endif // _RL_KIN_KINEMATICS_H_ diff --git a/src/rl/kin/Link.cpp b/src/rl/kin/Link.cpp new file mode 100644 index 00000000..0fb4ce86 --- /dev/null +++ b/src/rl/kin/Link.cpp @@ -0,0 +1,47 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Link.h" + +namespace rl +{ + namespace kin + { + Link::Link() : + Frame(), + collision(true), + cog(), + inertia(), + mass(0), + selfcollision() + { + } + + Link::~Link() + { + } + } +} diff --git a/src/rl/kin/Link.h b/src/rl/kin/Link.h new file mode 100644 index 00000000..08a93004 --- /dev/null +++ b/src/rl/kin/Link.h @@ -0,0 +1,69 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_LINK_H_ +#define _RL_KIN_LINK_H_ + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include + +#include "Frame.h" + +namespace rl +{ + namespace kin + { + class Link : public Frame + { + public: + Link(); + + virtual ~Link(); + + bool collision; + + ::rl::math::Vector3 cog; + + ::rl::math::Matrix33 inertia; + + ::rl::math::Real mass; + + ::std::tr1::unordered_set< Link* > selfcollision; + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_LINK_H_ diff --git a/src/rl/kin/Prismatic.cpp b/src/rl/kin/Prismatic.cpp new file mode 100644 index 00000000..5e925953 --- /dev/null +++ b/src/rl/kin/Prismatic.cpp @@ -0,0 +1,80 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Link.h" +#include "Prismatic.h" + +namespace rl +{ + namespace kin + { + Prismatic::Prismatic() : + Joint() + { + } + + Prismatic::~Prismatic() + { + } + + ::rl::math::Unit + Prismatic::getPositionUnit() const + { + return ::rl::math::UNIT_METER; + } + + ::rl::math::Unit + Prismatic::getSpeedUnit() const + { + return ::rl::math::UNIT_METER_PER_SECOND; + } + + void + Prismatic::jacobian(const ::rl::math::Transform& tcp, ::rl::math::MatrixBlock& j) + { + j(0, 0) = this->in->frame(0, 2); + j(1, 0) = this->in->frame(1, 2); + j(2, 0) = this->in->frame(2, 2); + j(3, 0) = 0; + j(4, 0) = 0; + j(5, 0) = 0; + } + + void + Prismatic::setPosition(const ::rl::math::Real& q) + { + ::rl::math::transform::setDenavitHartenberg( + this->d + q + this->offset, + this->theta, + this->a, + this->alpha, + this->transform + ); + + Joint::setPosition(q); + } + } +} diff --git a/src/rl/kin/Prismatic.h b/src/rl/kin/Prismatic.h new file mode 100644 index 00000000..3c6047cf --- /dev/null +++ b/src/rl/kin/Prismatic.h @@ -0,0 +1,62 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_PRISMATIC_H_ +#define _RL_KIN_PRISMATIC_H_ + +#include "Joint.h" + +namespace rl +{ + namespace kin + { + class Prismatic : public Joint + { + public: + Prismatic(); + + virtual ~Prismatic(); + + ::rl::math::Unit getPositionUnit() const; + + ::rl::math::Unit getSpeedUnit() const; + + /** + * \f[ ^{0}J_{i}(q) = \begin{pmatrix}z_{i - 1}\\0\end{pmatrix} \f] + */ + void jacobian(const ::rl::math::Transform& tcp, ::rl::math::MatrixBlock& j); + + void setPosition(const ::rl::math::Real& q); + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_PRISMATIC_H_ diff --git a/src/rl/kin/Puma.cpp b/src/rl/kin/Puma.cpp new file mode 100644 index 00000000..7be1058e --- /dev/null +++ b/src/rl/kin/Puma.cpp @@ -0,0 +1,378 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "Frame.h" +#include "Joint.h" +#include "Puma.h" +#include "Transform.h" + +namespace rl +{ + namespace kin + { + Puma::Puma() : + Kinematics(), + arm(ARM_LEFT), + elbow(ELBOW_ABOVE), + wrist(WRIST_NONFLIP) + { + } + + Puma::~Puma() + { + } + + Kinematics* + Puma::clone() const + { + return new Puma(*this); + } + + Puma::Arm + Puma::getArm() const + { + return this->arm; + } + + Puma::Elbow + Puma::getElbow() const + { + return this->elbow; + } + + Puma::Wrist + Puma::getWrist() const + { + return this->wrist; + } + + bool + Puma::inversePosition(const ::rl::math::Transform& x, ::rl::math::Vector& q, const ::std::size_t& leaf, const ::rl::math::Real& delta, const ::rl::math::Real& epsilon, const ::std::size_t& iterations) + { + assert(q.size() == this->getDof()); + + int arm = this->arm; + int elbow = this->elbow; + int wrist = this->wrist; + + ::rl::math::Real mybigeps = 1e-3; + ::rl::math::Real myeps = 1e-9; + ::rl::math::Real mypi = static_cast< ::rl::math::Real >(M_PI); + + //TODO throw exception instead?? + assert(this->joints[3]->a == 0 + && this->joints[4]->a == 0 + && this->joints[5]->a == 0 + && this->joints[4]->d == 0); + assert(::std::abs(this->joints[0]->alpha - (-mypi/2)) < mybigeps + && ::std::abs(this->joints[1]->alpha ) < mybigeps + && ::std::abs(this->joints[2]->alpha - (-mypi/2)) < mybigeps + && ::std::abs(this->joints[3]->alpha - ( mypi/2)) < mybigeps + && ::std::abs(this->joints[4]->alpha - ( mypi/2)) < mybigeps + && ::std::abs(this->joints[5]->alpha ) < mybigeps); + + ::rl::math::Real a1 = this->joints[0]->a; + ::rl::math::Real a2 = this->joints[1]->a; + ::rl::math::Real a3 = this->joints[2]->a; + ::rl::math::Real d1 = this->joints[0]->d; + ::rl::math::Real d3 = this->joints[1]->d + this->joints[2]->d; // d2 and d3 are parallel, so we choose d3 := d2 + d3 and d2 := 0 + ::rl::math::Real d4 = this->joints[3]->d; + ::rl::math::Real d6 = this->joints[5]->d; + + ::rl::math::Real a3_2 = ::std::pow(a3, 2); + ::rl::math::Real d3_2 = ::std::pow(d3, 2); + ::rl::math::Real d4_2 = ::std::pow(d4, 2); + + ::rl::math::Transform hand = this->transforms[this->transforms.size() - 1]->transform.inverse(::Eigen::Isometry); // TODO + ::rl::math::Transform base = this->frames[1]->frame.inverse(::Eigen::Isometry); // TODO + + ::rl::math::Transform x_hand = x * hand; + ::rl::math::Transform x_base = base * x_hand; + + const ::rl::math::Transform::TranslationPart& p = x_base.translation(); + const ::rl::math::Transform::LinearPart& rotation = x_base.linear(); + + const ::rl::math::Transform::LinearPart::ConstColXpr& n = rotation.col(0); + const ::rl::math::Transform::LinearPart::ConstColXpr& s = rotation.col(1); + const ::rl::math::Transform::LinearPart::ConstColXpr& a = rotation.col(2); + + // wrist center location in 3D + ::rl::math::Vector3 p4 = p - d6 * a; + + ::rl::math::Real px0 = p4(0); + ::rl::math::Real py0 = p4(1); + ::rl::math::Real pz0 = p4(2); + + // Distance from arm to wrist in x_1 y_1 plane (see Siegert p79, p81) + if (::std::pow(px0, 2) + ::std::pow(py0, 2) - d3_2 < myeps) + { + // degenerate case: too close to itself + return false; + } + + ::rl::math::Real r = ::std::pow(::std::pow(px0, 2) + ::std::pow(py0, 2) - d3_2 , 0.5); + + // shoulder (see Siegert p82) + // FIXME: For a1 != 0, the configuration model deviates from the Puma 560 + // In this case, Siegert's formula may give a (correct) solution with wrong arm handedness + // For instance, for the Mitsubishi RV-6SL robot with a1=50mm, poses near + // the boundaries of one configuration will yield an inverse solution in the wrong + // configuration space. + // A fix would be to enumerate all (eight) solutions and pick the one thats best + ::rl::math::Real theta1 = this->atan2(-arm * r * py0 - d3 * px0, -arm * r * px0 + d3 * py0); + + ::rl::math::Real c1 = this->cos(theta1); + ::rl::math::Real s1 = this->sin(theta1); + + // note: wrist center projected on x_1 z_1 plane is [ c1*px0 + s1*py0; pz0 ] + + // wrist location in x_2 -y_2 + // note: all theta2 and theta3 calculations take place in this 2D plane + ::rl::math::Real adx = c1*px0 + s1*py0 - a1; + ::rl::math::Real ady = pz0 - d1; + + // distance of elbow to wrist + ::rl::math::Real c34 = ::std::pow(a3_2 + d4_2, 0.5); + + // angle from x_2 to wrist + ::rl::math::Real deltaWrist = -this->atan2(ady, adx); + + // distance from arm to wrist + ::rl::math::Real adlength = ::std::pow(::std::pow(adx, 2) + ::std::pow(ady, 2), 0.5); + + if (adlength < myeps) + { + // arm too close to itself + return false; + } + + // angle from x_2 to wrist + ::rl::math::Real cosalpha = (::std::pow(a2, 2) + ::std::pow(adlength, 2) - ::std::pow(c34, 2)) / (2 * a2 * adlength); + + if (1 - ::std::abs(cosalpha) < myeps) + { + // too close to working boundaries or out of working range + return false; + } + + // arm elbow configuration + ::rl::math::Real K = static_cast< ::rl::math::Real >(arm * elbow); + + // arm + ::rl::math::Real theta2 = K * ::std::acos(cosalpha) + deltaWrist; + + // angle from x_3 to wrist + ::rl::math::Real beta = this->atan2(d4, a3); + + // angle from elbow-arm to elbow-wrist + ::rl::math::Real costheta3plusbeta = (::std::pow(a2, 2) + ::std::pow(c34, 2) - ::std::pow(adlength, 2)) / (2 * a2 * c34); + + if (1 - ::std::abs(costheta3plusbeta) < myeps) + { + // too close to working boundaries or out of working range + return false; + } + + ::rl::math::Real theta3plusbeta = ::std::acos(costheta3plusbeta); + + // elbow + ::rl::math::Real theta3 = K * theta3plusbeta - beta - static_cast< ::rl::math::Real >(M_PI); + + ::rl::math::Real c23 = this->cos(theta2 + theta3 + static_cast< ::rl::math::Real >(M_PI)); + ::rl::math::Real s23 = this->sin(theta2 + theta3 + static_cast< ::rl::math::Real >(M_PI)); + + // forearm + + ::rl::math::Real theta4 = this->atan2( + wrist * ( + -s1 * a(0) + + c1 * a(1) + ), + wrist * ( + c1 * c23 * a(0) + + s1 * c23 * a(1) - + s23 * a(2) + ) + ); + + ::rl::math::Real c4 = this->cos(theta4); + ::rl::math::Real s4 = this->sin(theta4); + + // wrist + + ::rl::math::Real theta5 = this->atan2( + (c1 * c23 * c4 - s1 * s4) * a(0) + + (s1 * c23 * c4 + c1 * s4) * a(1) - + s23 * c4 * a(2), + c1 * s23 * a(0) + + s1 * s23 * a(1) + + c23 * a(2) + ) + static_cast< ::rl::math::Real >(M_PI); + + // flange + + ::rl::math::Real theta6 = this->atan2( + -(s4 * c1 * c23 + c4 * s1) * n(0) - + (s4 * s1 * c23 - c4 * c1) * n(1) + + s4 * s23 * n(2), + -(s4 * c1 * c23 + c4 * s1) * s(0) - + (s4 * s1 * c23 - c4 * c1) * s(1) + + s4 * s23 * s(2) + ); + + // apply thetas and offsets + q(0) = theta1 - this->joints[0]->theta - this->joints[0]->offset; + q(1) = theta2 - this->joints[1]->theta - this->joints[1]->offset; + q(2) = theta3 - this->joints[2]->theta - this->joints[2]->offset; + q(3) = theta4 - this->joints[3]->theta - this->joints[3]->offset; + q(4) = theta5 - this->joints[4]->theta - this->joints[4]->offset; + q(5) = theta6 - this->joints[5]->theta - this->joints[5]->offset; + + // fit into min max angles + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + q(i) = ::std::fmod(q(i), 2.0f * static_cast< ::rl::math::Real >(M_PI)); + + if (q(i) < this->joints[i]->min) + { + q(i) += 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + else if (q(i) > this->joints[i]->max) + { + q(i) -= 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + } + + return true; + } + + bool + Puma::isSingular() const + { + return (::std::abs(this->jacobian.determinant()) > 1.0e-9f) ? false : true ; + } + + void + Puma::parameters(const ::rl::math::Vector& q, Arm& arm, Elbow& elbow, Wrist& wrist) const + { + assert(q.size() == this->getDof()); + + ::rl::math::Vector myq(q); + + for (::std::size_t i = 0; i < 6; ++i) + { + myq(i) = q(i) + this->joints[i]->theta + this->joints[i]->offset; + myq(i) = ::std::fmod( + myq(i) + static_cast< ::rl::math::Real >(M_PI), + 2.0f * static_cast< ::rl::math::Real >(M_PI) + ) - static_cast< ::rl::math::Real >(M_PI); + } + + if (myq(4) < 0.0f) + { + wrist = WRIST_FLIP; + } + else + { + wrist = WRIST_NONFLIP; + } + + ::rl::math::Real c2 = this->cos(myq(1)); + ::rl::math::Real s2 = this->sin(myq(1)); + + ::rl::math::Real c3 = this->cos(myq(2)); + ::rl::math::Real s3 = this->sin(myq(2)); + + ::rl::math::Real a2 = this->joints[1]->a; + ::rl::math::Real a3 = this->joints[2]->a; + ::rl::math::Real d4 = this->joints[3]->d; + + // z_1 component of the derivative of wrist location wrt to theta2 + ::rl::math::Real tmp = d4 * c2 * s3 + d4 * s2 * c3 + a3 * s2 * s3 - a3 * c2 * c3 - a2 * c2; + + // y_2 component of wrist location + ::rl::math::Real tmp2 = a3 * s3 + d4 * c3; + + if (tmp < 0.0f) + { + arm = ARM_LEFT; + + if (tmp2 < 0.0f) + { + elbow = ELBOW_BELOW; + } + else + { + elbow = ELBOW_ABOVE; + } + } + else + { + arm = ARM_RIGHT; + + if (tmp2 < 0.0f) + { + elbow = ELBOW_ABOVE; + } + else + { + elbow = ELBOW_BELOW; + } + } + } + + void + Puma::setArm(const Arm& arm) + { + this->arm = arm; + } + + void + Puma::setElbow(const Elbow& elbow) + { + this->elbow = elbow; + } + + void + Puma::setWrist(const Wrist& wrist) + { + this->wrist = wrist; + } + } +} diff --git a/src/rl/kin/Puma.h b/src/rl/kin/Puma.h new file mode 100644 index 00000000..65f50e90 --- /dev/null +++ b/src/rl/kin/Puma.h @@ -0,0 +1,122 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_PUMA_H_ +#define _RL_KIN_PUMA_H_ + +#include "Kinematics.h" + +namespace rl +{ + namespace kin + { + /** + * TRR base and TRT wrist. + */ + class Puma : public Kinematics + { + public: + enum Arm + { + ARM_LEFT = -1, + ARM_RIGHT = 1 + }; + + enum Elbow + { + ELBOW_ABOVE = 1, + ELBOW_BELOW = -1 + }; + + enum Wrist + { + WRIST_FLIP = 1, + WRIST_NONFLIP = -1 + }; + + Puma(); + + virtual ~Puma(); + + virtual Kinematics* clone() const; + + Arm getArm() const; + + Elbow getElbow() const; + + Wrist getWrist() const; + + bool inversePosition( + const ::rl::math::Transform& x, + ::rl::math::Vector& q, + const ::std::size_t& leaf = 0, + const ::rl::math::Real& delta = ::std::numeric_limits< ::rl::math::Real >::infinity(), + const ::rl::math::Real& epsilon = 1.0e-3f, + const ::std::size_t& iterations = 1000 + ); + + bool isSingular() const; + + void parameters(const ::rl::math::Vector& q, Arm& arm, Elbow& elbow, Wrist& wrist) const; + + void setArm(const Arm& arm); + + void setElbow(const Elbow& elbow); + + void setWrist(const Wrist& wrist); + + protected: + + private: + template< typename T > T atan2(const T& y, const T& x) const + { + T a = ::std::atan2(y, x); + return (::std::abs(a) <= 1.0e-6f) ? 0.0f : a; + } + + template< typename T > T cos(const T& x) const + { + T c = ::std::cos(x); + return (::std::abs(c) <= 1.0e-6f) ? 0.0f : c; + } + + template< typename T > T sin(const T& x) const + { + T s = ::std::sin(x); + return (::std::abs(s) <= 1.0e-6f) ? 0.0f : s; + } + + Arm arm; + + Elbow elbow; + + Wrist wrist; + }; + } +} + +#endif // _RL_KIN_PUMA_H_ + diff --git a/src/rl/kin/Revolute.cpp b/src/rl/kin/Revolute.cpp new file mode 100644 index 00000000..4ec5b63a --- /dev/null +++ b/src/rl/kin/Revolute.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Link.h" +#include "Revolute.h" + +namespace rl +{ + namespace kin + { + Revolute::Revolute() : + Joint() + { + } + + Revolute::~Revolute() + { + } + + ::rl::math::Unit + Revolute::getPositionUnit() const + { + return ::rl::math::UNIT_RADIAN; + } + + ::rl::math::Unit + Revolute::getSpeedUnit() const + { + return ::rl::math::UNIT_RADIAN_PER_SECOND; + } + + void + Revolute::jacobian(const ::rl::math::Transform& tcp, ::rl::math::MatrixBlock& j) + { + ::rl::math::Vector3 p; + ::rl::math::Vector3 z; + ::rl::math::Vector3 zxp; + + z(0) = this->in->frame(0, 2); + z(1) = this->in->frame(1, 2); + z(2) = this->in->frame(2, 2); + p(0) = tcp(0, 3) - this->in->frame(0, 3); + p(1) = tcp(1, 3) - this->in->frame(1, 3); + p(2) = tcp(2, 3) - this->in->frame(2, 3); + zxp = z.cross(p); + j(0, 0) = zxp(0); + j(1, 0) = zxp(1); + j(2, 0) = zxp(2); + j(3, 0) = z(0); + j(4, 0) = z(1); + j(5, 0) = z(2); + } + + void + Revolute::setPosition(const ::rl::math::Real& q) + { + ::rl::math::transform::setDenavitHartenberg( + this->d, + this->theta + q + this->offset, + this->a, + this->alpha, + this->transform + ); + + Joint::setPosition(q); + } + } +} diff --git a/src/rl/kin/Revolute.h b/src/rl/kin/Revolute.h new file mode 100644 index 00000000..fb638ece --- /dev/null +++ b/src/rl/kin/Revolute.h @@ -0,0 +1,62 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_REVOLUTE_H_ +#define _RL_KIN_REVOLUTE_H_ + +#include "Joint.h" + +namespace rl +{ + namespace kin + { + class Revolute : public Joint + { + public: + Revolute(); + + virtual ~Revolute(); + + ::rl::math::Unit getPositionUnit() const; + + ::rl::math::Unit getSpeedUnit() const; + + /** + * \f[ {^{0}J_{i}(q)} = \begin{pmatrix}z_{i - 1} \times {^{i - 1}p_{n}}\\z_{i - 1}\end{pmatrix} \f] + */ + void jacobian(const ::rl::math::Transform& tcp, ::rl::math::MatrixBlock& j); + + void setPosition(const ::rl::math::Real& q); + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_REVOLUTE_H_ diff --git a/src/rl/kin/Rhino.cpp b/src/rl/kin/Rhino.cpp new file mode 100644 index 00000000..50e01d84 --- /dev/null +++ b/src/rl/kin/Rhino.cpp @@ -0,0 +1,266 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "Frame.h" +#include "Joint.h" +#include "Rhino.h" +#include "Transform.h" + +namespace rl +{ + namespace kin + { + Rhino::Rhino() : + Kinematics(), + arm(ARM_LEFT), + elbow(ELBOW_ABOVE) + { + } + + Rhino::~Rhino() + { + } + + Kinematics* + Rhino::clone() const + { + return new Rhino(*this); + } + + Rhino::Arm + Rhino::getArm() const + { + return this->arm; + } + + Rhino::Elbow + Rhino::getElbow() const + { + return this->elbow; + } + + bool + Rhino::inversePosition(const ::rl::math::Transform& x, ::rl::math::Vector& q, const ::std::size_t& leaf, const ::rl::math::Real& delta, const ::rl::math::Real& epsilon, const ::std::size_t& iterations) + { + assert(q.size() == this->getDof()); + + int arm = this->arm; + int elbow = this->elbow; + + ::rl::math::Real a1 = this->joints[0]->a; + ::rl::math::Real a2 = this->joints[1]->a; + ::rl::math::Real a3 = this->joints[2]->a; + ::rl::math::Real d1 = this->joints[0]->d; + ::rl::math::Real d5 = this->joints[4]->d; + + ::rl::math::Real a2_2 = ::std::pow(a2, 2); + ::rl::math::Real a3_2 = ::std::pow(a3, 2); + + ::rl::math::Transform hand = this->transforms[this->transforms.size() - 1]->transform.inverse(::Eigen::Isometry); // TODO + ::rl::math::Transform base = this->frames[1]->frame.inverse(::Eigen::Isometry); // TODO + + ::rl::math::Transform x_hand = x * hand; + ::rl::math::Transform x_base = base * x_hand; + + const ::rl::math::Transform::TranslationPart& p = x_base.translation(); + const ::rl::math::Transform::LinearPart& rotation = x_base.linear(); + + const ::rl::math::Transform::LinearPart::ConstColXpr& n = rotation.col(0); + const ::rl::math::Transform::LinearPart::ConstColXpr& s = rotation.col(1); + const ::rl::math::Transform::LinearPart::ConstColXpr& a = rotation.col(2); + + ::rl::math::Vector3 p4 = p - d5 * a; + + ::rl::math::Real px0 = p4(0); + ::rl::math::Real py0 = p4(1); + ::rl::math::Real pz0 = p4(2); + + // shoulder + ::rl::math::Real theta1 = this->atan2(-arm * py0, -arm * px0); + + ::rl::math::Real c1 = this->cos(theta1); + ::rl::math::Real s1 = this->sin(theta1); + + px0 -= a1 * c1; + py0 -= a1 * s1; + pz0 -= d1; + + ::rl::math::Real px0_2 = ::std::pow(px0, 2); + ::rl::math::Real py0_2 = ::std::pow(py0, 2); + ::rl::math::Real pz0_2 = ::std::pow(pz0, 2); + + ::rl::math::Real K = static_cast< ::rl::math::Real >(arm * elbow); + + ::rl::math::Real r_2 = px0_2 + py0_2; + ::rl::math::Real r = ::std::sqrt(r_2); + + ::rl::math::Real Q_2 = r_2 + pz0_2; + ::rl::math::Real Q = ::std::sqrt(Q_2); + + if (::std::abs(Q) <= ::std::numeric_limits< ::rl::math::Real >::epsilon()) + { + return false; + } + + ::rl::math::Real sinAlpha = -pz0 / Q; + ::rl::math::Real cosAlpha = -r * arm / Q; + + ::rl::math::Real cosBeta = (Q_2 + a2_2 - a3_2) / (2.0f * a2 * Q); + + if (::std::abs(cosBeta) > 1.0f) + { + return false; + } + + ::rl::math::Real sinBeta = ::std::sqrt(1.0f - ::std::pow(cosBeta, 2)); + + ::rl::math::Real s2 = sinAlpha * cosBeta + K * cosAlpha * sinBeta; + ::rl::math::Real c2 = cosAlpha * cosBeta - K * sinAlpha * sinBeta; + + // arm + ::rl::math::Real theta2 = this->atan2(s2, c2) + static_cast< ::rl::math::Real >(M_PI_2); + + ::rl::math::Real c3 = (a2_2 + a3_2 - Q_2) / (2 * a2 * a3); + ::rl::math::Real s3 = K * ::std::sqrt(1.0f - ::std::pow(c3, 2)); + + // elbow + ::rl::math::Real theta3 = this->atan2(s3, c3) + static_cast< ::rl::math::Real >(M_PI); + + ::rl::math::Real c23 = this->cos(theta2 + theta3); + ::rl::math::Real s23 = this->sin(theta2 + theta3); + + // wrist + ::rl::math::Real theta4 = this->atan2( + (c1 * c23) * a(0) + + (s1 * c23) * a(1) - + s23 * a(2), + c1 * s23 * a(0) + + s1 * s23 * a(1) + + c23 * a(2) + ); + + // flange + ::rl::math::Real theta5 = this->atan2( + -s1 * n(0) + + c1 * n(1), + -s1 * s(0) + + c1 * s(1) + ); + + q(0) = theta1; + q(1) = theta2; + q(2) = theta3; + q(3) = theta4; + q(4) = theta5; + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + q(i) = ::std::fmod(q(i), 2.0f * static_cast< ::rl::math::Real >(M_PI)); + + if (q(i) < this->joints[i]->min) + { + q(i) += 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + else if (q(i) > this->joints[i]->max) + { + q(i) -= 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < this->joints[i]->min || q(i) > this->joints[i]->max) + { + return false; + } + } + } + + return true; + } + + void + Rhino::parameters(const ::rl::math::Vector& q, Arm& arm, Elbow& elbow) const + { + assert(q.size() == this->getDof()); + + ::rl::math::Real c2 = this->cos(q(1)); + ::rl::math::Real s2 = this->sin(q(1)); + + ::rl::math::Real c3 = this->cos(q(2)); + ::rl::math::Real s3 = this->sin(q(2)); + + ::rl::math::Real a2 = this->joints[1]->a; + ::rl::math::Real a3 = this->joints[2]->a; + + ::rl::math::Real tmp = s2 * a3 * c3 + c2 * a3 * s3 + a2 * s2; + ::rl::math::Real tmp2 = a3 * s3; + + if (tmp < 0.0f) + { + arm = ARM_RIGHT; + + if (tmp2 < 0.0f) + { + elbow = ELBOW_ABOVE; + } + else + { + elbow = ELBOW_BELOW; + } + } + else + { + arm = ARM_LEFT; + + if (tmp2 < 0.0f) + { + elbow = ELBOW_BELOW; + } + else + { + elbow = ELBOW_ABOVE; + } + } + } + + void + Rhino::setArm(const Arm& arm) + { + this->arm = arm; + } + + void + Rhino::setElbow(const Elbow& elbow) + { + this->elbow = elbow; + } + } +} diff --git a/src/rl/kin/Rhino.h b/src/rl/kin/Rhino.h new file mode 100644 index 00000000..ddc5e902 --- /dev/null +++ b/src/rl/kin/Rhino.h @@ -0,0 +1,107 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_RHINO_H_ +#define _RL_KIN_RHINO_H_ + +#include "Kinematics.h" + +namespace rl +{ + namespace kin + { + /** + * TRR base and RT wrist. + */ + class Rhino : public Kinematics + { + public: + enum Arm + { + ARM_LEFT = -1, + ARM_RIGHT = 1 + }; + + enum Elbow + { + ELBOW_ABOVE = 1, + ELBOW_BELOW = -1 + }; + + Rhino(); + + virtual ~Rhino(); + + virtual Kinematics* clone() const; + + Arm getArm() const; + + Elbow getElbow() const; + + bool inversePosition( + const ::rl::math::Transform& x, + ::rl::math::Vector& q, + const ::std::size_t& leaf = 0, + const ::rl::math::Real& delta = ::std::numeric_limits< ::rl::math::Real >::infinity(), + const ::rl::math::Real& epsilon = 1.0e-3f, + const ::std::size_t& iterations = 1000 + ); + + void parameters(const ::rl::math::Vector& q, Arm& arm, Elbow& elbow) const; + + void setArm(const Arm& arm); + + void setElbow(const Elbow& elbow); + + protected: + + private: + template< typename T > T atan2(const T& y, const T& x) const + { + T a = ::std::atan2(y, x); + return (::std::abs(a) <= 1.0e-6f) ? 0.0f : a; + } + + template< typename T > T cos(const T& x) const + { + T c = ::std::cos(x); + return (::std::abs(c) <= 1.0e-6f) ? 0.0f : c; + } + + template< typename T > T sin(const T& x) const + { + T s = ::std::sin(x); + return (::std::abs(s) <= 1.0e-6f) ? 0.0f : s; + } + + Arm arm; + + Elbow elbow; + }; + } +} + +#endif // _RL_KIN_RHINO_H_ diff --git a/src/rl/kin/Transform.cpp b/src/rl/kin/Transform.cpp new file mode 100644 index 00000000..ce4c42a2 --- /dev/null +++ b/src/rl/kin/Transform.cpp @@ -0,0 +1,52 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Frame.h" +#include "Transform.h" + +namespace rl +{ + namespace kin + { + Transform::Transform() : + Element(), + in(NULL), + out(NULL), + transform() + { + } + + Transform::~Transform() + { + } + + void + Transform::updateFrames() + { + this->out->frame = this->in->frame * this->transform; + } + } +} diff --git a/src/rl/kin/Transform.h b/src/rl/kin/Transform.h new file mode 100644 index 00000000..d6b6a693 --- /dev/null +++ b/src/rl/kin/Transform.h @@ -0,0 +1,65 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_KIN_TRANSFORM_H_ +#define _RL_KIN_TRANSFORM_H_ + +#include + +#include "Element.h" + +namespace rl +{ + namespace kin + { + class Frame; + + class Transform : public Element + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Transform(); + + virtual ~Transform(); + + virtual void updateFrames(); + + Frame* in; + + Frame* out; + + ::rl::math::Transform transform; + + protected: + + private: + + }; + } +} + +#endif // _RL_KIN_TRANSFORM_H_ diff --git a/src/rl/math/ArticulatedBodyInertia.h b/src/rl/math/ArticulatedBodyInertia.h new file mode 100644 index 00000000..7958e1a4 --- /dev/null +++ b/src/rl/math/ArticulatedBodyInertia.h @@ -0,0 +1,200 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_ARTICULATEDBODYINERTIA_H_ +#define _RL_MATH_ARTICULATEDBODYINERTIA_H_ + +#include + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > class ForceVector; + template< typename Scalar > class MotionVector; + template< typename Scalar > class RigidBodyInertia; + + template< typename Scalar > + class ArticulatedBodyInertia + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef Scalar ScalarType; + + typedef ::Eigen::Matrix< Scalar, 6, 6 > MatrixType; + + typedef ::Eigen::Matrix< Scalar, 3, 3 > CenterOfGravityType; + + typedef const CenterOfGravityType ConstCenterOfGravityType; + + typedef ::Eigen::Matrix< Scalar, 3, 3 > InertiaType; + + typedef const InertiaType ConstInertiaType; + + typedef ::Eigen::Matrix< Scalar, 3, 3 > MassType; + + typedef const MassType ConstMassType; + + ArticulatedBodyInertia() + { + } + + template< typename OtherDerived > + ArticulatedBodyInertia(const ::Eigen::DenseBase< OtherDerived >& other) : + centerOfGravityData(other.template topRightCorner< 3, 3 >()), + inertiaData(other.template topLeftCorner< 3, 3 >()), + massData(other.template bottomRightCorner< 3, 3 >()) + { + } + + virtual ~ArticulatedBodyInertia() + { + } + + CenterOfGravityType& cog() + { + return centerOfGravityData; + } + + ConstCenterOfGravityType& cog() const + { + return centerOfGravityData; + } + + InertiaType& inertia() + { + return inertiaData; + } + + ConstInertiaType& inertia() const + { + return inertiaData; + } + + MassType& mass() + { + return massData; + } + + ConstMassType& mass() const + { + return massData; + } + + MatrixType matrix() const + { + MatrixType res; + res.template topLeftCorner< 3, 3 >() = inertia(); + res.template topRightCorner< 3, 3 >() = cog(); + res.template bottomLeftCorner< 3, 3 >() = cog().transpose(); + res.template bottomRightCorner< 3, 3 >() = mass(); + return res; + } + + template< typename OtherDerived > + ArticulatedBodyInertia& operator=(const ::Eigen::MatrixBase< OtherDerived >& other) + { + cog() = other.template topRightCorner< 3, 3 >(); + inertia() = other.template topLeftCorner< 3, 3 >(); + mass() = other.template bottomRightCorner< 3, 3 >(); + return *this; + } + + template< typename OtherScalar > + ArticulatedBodyInertia& operator=(const RigidBodyInertia< OtherScalar >& other); + + ArticulatedBodyInertia operator+(const ArticulatedBodyInertia& other) const + { + ArticulatedBodyInertia res; + res.cog() = cog() + other.cog(); + res.inertia() = inertia() + other.inertia(); + res.mass() = mass() + other.mass(); + return res; + } + + ArticulatedBodyInertia operator-(const ArticulatedBodyInertia& other) const + { + ArticulatedBodyInertia res; + res.cog() = cog() - other.cog(); + res.inertia() = inertia() - other.inertia(); + res.mass() = mass() - other.mass(); + return res; + } + + template< typename OtherScalar > + ArticulatedBodyInertia operator*(const OtherScalar& other) const + { + ArticulatedBodyInertia res; + res.cog() = cog() * other; + res.inertia() = inertia() * other; + res.mass() = mass() * other; + return res; + } + + template< typename OtherScalar > + ForceVector< Scalar > operator*(const MotionVector< OtherScalar >& other) const; + + template< typename OtherScalar > + ArticulatedBodyInertia operator/(const OtherScalar& other) const + { + ArticulatedBodyInertia res; + res.cog() = cog() / other; + res.inertia() = inertia() / other; + res.mass() = mass() / other; + return res; + } + + void setIdentity() + { + cog().setZero(); + inertia().setIdentity(); + mass().setIdentity(); + } + + void setZero() + { + cog().setZero(); + inertia().setZero(); + mass().setZero(); + } + + protected: + + private: + CenterOfGravityType centerOfGravityData; + + InertiaType inertiaData; + + MassType massData; + }; + } + } +} + +#endif // _RL_MATH_ARTICULATEDBODYINERTIA_H_ diff --git a/src/rl/math/ArticulatedBodyInertia.hxx b/src/rl/math/ArticulatedBodyInertia.hxx new file mode 100644 index 00000000..ba8c59cf --- /dev/null +++ b/src/rl/math/ArticulatedBodyInertia.hxx @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_ARTICULATEDBODYINERTIA_HXX_ +#define _RL_MATH_ARTICULATEDBODYINERTIA_HXX_ + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > + template< typename OtherScalar > + inline + ArticulatedBodyInertia< Scalar >& + ArticulatedBodyInertia< Scalar >::operator=(const RigidBodyInertia< OtherScalar >& other) + { + cog() = other.cog().cross33(); + inertia() = other.inertia(); + mass() = ::Eigen::Matrix< Scalar, 3, 3 >::Identity() * other.mass(); + return *this; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + ForceVector< Scalar > + ArticulatedBodyInertia< Scalar >::operator*(const MotionVector< OtherScalar >& other) const + { + ForceVector< Scalar > res; + res.moment() = inertia() * other.angular() + cog() * other.linear(); + res.force() = mass() * other.linear() + cog().transpose() * other.angular(); + return res; + } + } + } +} + +#endif // _RL_MATH_ARTICULATEDBODYINERTIA_HXX_ diff --git a/src/rl/math/CMakeLists.txt b/src/rl/math/CMakeLists.txt new file mode 100644 index 00000000..f6cf545f --- /dev/null +++ b/src/rl/math/CMakeLists.txt @@ -0,0 +1,62 @@ +project(rlmath) + +find_package(Eigen REQUIRED) + +set( + HDRS + ArticulatedBodyInertia.h + ArticulatedBodyInertia.hxx + Cubic.h + ForceVector.h + ForceVector.hxx + Kalman.h + Matrix.h + MatrixBaseAddons.h + MotionVector.h + MotionVector.hxx + Pid.h + PlueckerTransform.h + PlueckerTransform.hxx + Quaternion.h + QuaternionBaseAddons.h + Quintic.h + Real.h + RigidBodyInertia.h + RigidBodyInertia.hxx + Rotation.h + Spatial.h + Transform.h + TrapezoidalVelocity.h + Unit.h + Vector.h +) + +add_library( + rlmath + ${HDRS} + dummy.cpp +) + +target_include_directories( + rlmath + PUBLIC + ${EIGEN_INCLUDE_DIRS} +) + +set_target_properties( + rlmath + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/math COMPONENT headers) + +install( + TARGETS rlmath + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/math/Cubic.h b/src/rl/math/Cubic.h new file mode 100644 index 00000000..a6c5c1bd --- /dev/null +++ b/src/rl/math/Cubic.h @@ -0,0 +1,107 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_CUBIC_H_ +#define _RL_MATH_CUBIC_H_ + +#include +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + template< typename T > + class Cubic + { + public: + Cubic() : + te(::std::numeric_limits::max()), + x0(), + xe(), + v0(), + ve(), + c0(), + c1(), + c2(), + c3() + { + } + + virtual ~Cubic() + { + } + + T a(const Real& t) const + { + return 2 * c2 + 6 * c3 * t; + } + + void interpolate() + { + c0 = x0; + c1 = v0; + c2 = -(2 * te * v0 + 3 * x0 - 3 * xe + te * ve) / ::std::pow(te, 2); + c3 = (2 * x0 + te * v0 - 2 * xe + te * ve) / ::std::pow(te, 3); + } + + T v(const Real& t) const + { + return c1 + 2 * c2 * t + 3 * c3 * ::std::pow(t, 2); + } + + T x(const Real& t) const + { + return c0 + c1 * t + c2 * ::std::pow(t, 2) + c3 * ::std::pow(t, 3); + } + + Real te; + + T x0; + + T xe; + + T v0; + + T ve; + + protected: + + private: + T c0; + + T c1; + + T c2; + + T c3; + }; + } +} + +#endif // _RL_MATH_CUBIC_H_ diff --git a/src/rl/math/ForceVector.h b/src/rl/math/ForceVector.h new file mode 100644 index 00000000..07983e79 --- /dev/null +++ b/src/rl/math/ForceVector.h @@ -0,0 +1,161 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_FORCEVECTOR_H_ +#define _RL_MATH_FORCEVECTOR_H_ + +#include + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > class ArticulatedBodyInertia; + template< typename Scalar > class MotionVector; + + template< typename Scalar > + class ForceVector + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef Scalar ScalarType; + + typedef typename ::Eigen::Matrix< Scalar, 6, 1 > MatrixType; + + typedef const MatrixType ConstMatrixType; + + typedef ::Eigen::Block< MatrixType, 3, 1 > MomentType; + + typedef const ::Eigen::Block< ConstMatrixType, 3, 1 > ConstMomentType; + + typedef ::Eigen::Block< MatrixType, 3, 1 > ForceType; + + typedef const ::Eigen::Block< ConstMatrixType, 3, 1 > ConstForceType; + + ForceVector() + { + } + + template< typename OtherDerived > + ForceVector(const ::Eigen::MatrixBase< OtherDerived >& other) : + data(other) + { + } + + virtual ~ForceVector() + { + } + + template< typename OtherScalar > + Scalar dot(const MotionVector< OtherScalar >& other) const; + + ForceType force() + { + return data.template segment< 3 >(3); + } + + ConstForceType force() const + { + return data.template segment< 3 >(3); + } + + ConstMatrixType& matrix() const + { + return data; + } + + MomentType moment() + { + return data.template segment< 3 >(0); + } + + ConstMomentType moment() const + { + return data.template segment< 3 >(0); + } + + template< typename OtherDerived > + ForceVector& operator=(const ::Eigen::MatrixBase< OtherDerived >& other) + { + data = other; + return *this; + } + + ForceVector operator+(const ForceVector& other) const + { + ForceVector res; + res.moment() = moment() + other.moment(); + res.force() = force() + other.force(); + return res; + } + + ForceVector operator-(const ForceVector& other) const + { + ForceVector res; + res.moment() = moment() - other.moment(); + res.force() = force() - other.force(); + return res; + } + + template< typename OtherScalar > + ForceVector operator*(const OtherScalar& other) const + { + ForceVector res; + res.moment() = moment() * other; + res.force() = force() * other; + return res; + } + + template< typename OtherScalar > + ForceVector operator/(const OtherScalar& other) const + { + ForceVector res; + res.moment() = moment() / other; + res.force() = force() / other; + return res; + } + + ArticulatedBodyInertia< Scalar > operator*(const ForceVector& other) const; + + void setZero() + { + moment().setZero(); + force().setZero(); + } + + protected: + + private: + MatrixType data; + }; + } + } +} + +#endif // _RL_MATH_FORCEVECTOR_H_ diff --git a/src/rl/math/ForceVector.hxx b/src/rl/math/ForceVector.hxx new file mode 100644 index 00000000..e710520c --- /dev/null +++ b/src/rl/math/ForceVector.hxx @@ -0,0 +1,48 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_FORCEVECTOR_HXX_ +#define _RL_MATH_FORCEVECTOR_HXX_ + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > + template< typename OtherScalar > + inline + Scalar + ForceVector< Scalar >::dot(const MotionVector< OtherScalar >& other) const + { + return moment().dot(other.angular()) + force().dot(other.linear()); + } + } + } +} + +#endif // _RL_MATH_FORCEVECTOR_HXX_ diff --git a/src/rl/math/Kalman.h b/src/rl/math/Kalman.h new file mode 100644 index 00000000..8f895424 --- /dev/null +++ b/src/rl/math/Kalman.h @@ -0,0 +1,148 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_KALMAN_H_ +#define _RL_MATH_KALMAN_H_ + +#include + +#include "Matrix.h" +#include "Vector.h" + +namespace rl +{ + namespace math + { + class Kalman + { + public: + Kalman() + { + }; + + virtual ~Kalman() + { + }; + + /** + * \f[ K_{k} = P^{-}_{k} H^{T} \left( H P^{-}_{k} H^{T} + R \right)^{-1} \f] + * \f[ \hat{x}_{k} = \hat{x}^{-}_{k} + K_{k} \left( z_{k} - H \hat{x}^{-}_{k} \right) \f] + * \f[ P_{k} = \left( I - K_{k} H \right) P^{-}_{k} \f] + * + * @param xPrior \f$ \hat{x}^{-}_{k} \f$ + * @param pPrior \f$ P^{-}_{k} \f$ + * @param h \f$ H \f$ + * @param r \f$ R \f$ + * @param z \f$ z_{k} \f$ + * @param xPost \f$ \hat{x}_{k} \f$ + * @param pPost \f$ P_{k} \f$ + */ + template< typename Vector1, typename Matrix2, typename Matrix3, typename Matrix4, typename Vector5, typename Vector6, typename Matrix7 > + static void correct( + const Vector1& xPrior, + const Matrix2& pPrior, + const Matrix3& h, + const Matrix4& r, + const Vector5& z, + Vector6& xPost, + Matrix7& pPost + ) + { + // \f[ K_{k} = P^{-}_{k} H^{T} \left( H P^{-}_{k} H^{T} + R \right)^{-1} \f] + Matrix k = pPrior * h.transpose() * (h * pPrior * h.transpose() + r).inverse(); + // \f[ \hat{x}_{k} = \hat{x}^{-}_{k} + K_{k} \left( z_{k} - H \hat{x}^{-}_{k} \right) \f] + xPost = xPrior + k * (z - h * xPrior); + // P_{k} = \left( I - K_{k} H \right) P^{-}_{k} \f] + pPost = (Matrix::Identity(k.rows(), h.cols()) - k * h) * pPrior; + } + + /** + * \f[ \hat{x}^{-}_{k} = A \hat{x}_{k - 1} \f] + * \f[ P^{-}_{k} = A P_{k - 1} A^{T} + Q \f] + * + * @param xPost \f$ \hat{x}_{k - 1} \f$ + * @param pPost \f$ P_{k - 1} \f$ + * @param a \f$ A \f$ + * @param q \f$ Q \f$ + * @param xPrior \f$ \hat{x}^{-}_{k} \f$ + * @param pPrior \f$ P^{-}_{k} \f$ + */ + template< typename Vector1, typename Matrix2, typename Matrix3, typename Matrix4, typename Vector5, typename Matrix6 > + static void predict( + const Vector1& xPost, + const Matrix2& pPost, + const Matrix3& a, + const Matrix4& q, + Vector5& xPrior, + Matrix6& pPrior + ) + { + // \f[ \hat{x}^{-}_{k} = A \hat{x}_{k - 1} \f] + xPrior = a * xPost; + // \f[ P^{-}_{k} = A P_{k - 1} A^{T} + Q \f] + pPrior = a * pPost * a.transpose() + q; + } + + /** + * \f[ \hat{x}^{-}_{k} = A \hat{x}_{k - 1} + B u_{k - 1} \f] + * \f[ P^{-}_{k} = A P_{k - 1} A^{T} + Q \f] + * + * @param xPost \f$ \hat{x}_{k - 1} \f$ + * @param pPost \f$ P_{k - 1} \f$ + * @param a \f$ A \f$ + * @param b \f$ B \f$ + * @param u \f$ U \f$ + * @param q \f$ Q \f$ + * @param xPrior \f$ \hat{x}^{-}_{k} \f$ + * @param pPrior \f$ P^{-}_{k} \f$ + */ + template< typename Vector1, typename Matrix2, typename Matrix3, typename Matrix4, typename Vector5, typename Matrix6, typename Vector7, typename Matrix8 > + static void predict( + const Vector1& xPost, + const Matrix2& pPost, + const Matrix3& a, + const Matrix4& b, + const Vector5& u, + const Matrix6& q, + Vector7& xPrior, + Matrix8& pPrior + ) + { + // \f[ \hat{x}^{-}_{k} = A \hat{x}_{k - 1} + B u_{k - 1} \f] + xPrior = a * xPost + b * u; + // \f[ P^{-}_{k} = A P_{k - 1} A^{T} + Q \f] + pPrior = a * pPost * a.transpose() + q; + } + + protected: + + private: + + }; + } +} + +#endif // _RL_MATH_KALMAN_H_ diff --git a/src/rl/math/Matrix.h b/src/rl/math/Matrix.h new file mode 100644 index 00000000..359c60ca --- /dev/null +++ b/src/rl/math/Matrix.h @@ -0,0 +1,113 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_MATRIX_H_ +#define _RL_MATH_MATRIX_H_ + +#define EIGEN_MATRIXBASE_PLUGIN +#define EIGEN_QUATERNIONBASE_PLUGIN + +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + typedef ::Eigen::Matrix< Real, ::Eigen::Dynamic, ::Eigen::Dynamic > Matrix; + + typedef ::Eigen::Matrix< Real, 2, 2 > Matrix22; + + typedef ::Eigen::Matrix< Real, 3, 3 > Matrix33; + + typedef ::Eigen::Matrix< Real, 4, 4 > Matrix44; + + typedef ::Eigen::Matrix< Real, 6, 6 > Matrix66; + + typedef ::Eigen::Block< Matrix > MatrixBlock; + + typedef ::Eigen::Block< Matrix22 > Matrix22Block; + + typedef ::Eigen::Block< Matrix33 > Matrix33Block; + + typedef ::Eigen::Block< Matrix44 > Matrix44Block; + + typedef ::Eigen::Block< Matrix66 > Matrix66Block; + + typedef Matrix::ColXpr MatrixColumn; + + typedef Matrix22::ColXpr Matrix22Column; + + typedef Matrix33::ColXpr Matrix33Column; + + typedef Matrix44::ColXpr Matrix44Column; + + typedef Matrix66::ColXpr Matrix66Column; + + typedef Matrix::RowXpr MatrixRow; + + typedef Matrix22::RowXpr Matrix22Row; + + typedef Matrix33::RowXpr Matrix33Row; + + typedef Matrix44::RowXpr Matrix44Row; + + typedef Matrix66::RowXpr Matrix66Row; + + typedef const ::Eigen::Block< const Matrix > ConstMatrixBlock; + + typedef const ::Eigen::Block< const Matrix22 > ConstMatrix22Block; + + typedef const ::Eigen::Block< const Matrix33 > ConstMatrix33Block; + + typedef const ::Eigen::Block< const Matrix44 > ConstMatrix44Block; + + typedef const ::Eigen::Block< const Matrix66 > ConstMatrix66Block; + + typedef Matrix::ConstColXpr ConstMatrixColumn; + + typedef Matrix22::ConstColXpr ConstMatrix22Column; + + typedef Matrix33::ConstColXpr ConstMatrix33Column; + + typedef Matrix44::ConstColXpr ConstMatrix44Column; + + typedef Matrix66::ConstColXpr ConstMatrix66Column; + + typedef Matrix::ConstRowXpr ConstMatrixRow; + + typedef Matrix22::ConstRowXpr ConstMatrix22Row; + + typedef Matrix33::ConstRowXpr ConstMatrix33Row; + + typedef Matrix44::ConstRowXpr ConstMatrix44Row; + + typedef Matrix66::ConstRowXpr ConstMatrix66Row; + } +} + +#endif // _RL_MATH_MATRIX_H_ diff --git a/src/rl/math/MatrixBaseAddons.h b/src/rl/math/MatrixBaseAddons.h new file mode 100644 index 00000000..16bd40e2 --- /dev/null +++ b/src/rl/math/MatrixBaseAddons.h @@ -0,0 +1,89 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_MATRIXBASEADDONS_H_ +#define _RL_MATH_MATRIXBASEADDONS_H_ + +Matrix< Scalar, 3, 1 > +cross3() const +{ + EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived, 3, 3) + Matrix< Scalar, 3, 1 > res; + res.x() = (derived()(2, 1) - derived()(1, 2)) / Scalar(2); + res.y() = (derived()(0, 2) - derived()(2, 0)) / Scalar(2); + res.z() = (derived()(1, 0) - derived()(0, 1)) / Scalar(2); + return res; +} + +Matrix< Scalar, 3, 3 > +cross33() const +{ + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 3) + Matrix< Scalar, 3, 3 > res; + res(0, 0) = 0; + res(0, 1) = -derived().z(); + res(0, 2) = derived().y(); + res(1, 0) = derived().z(); + res(1, 1) = 0; + res(1, 2) = -derived().x(); + res(2, 0) = -derived().y(); + res(2, 1) = derived().x(); + res(2, 2) = 0; + return res; +} + +Matrix< Scalar, 6, 1 > +voigt6() const +{ + EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(Derived, 3, 3) + Matrix< Scalar, 6, 1 > res; + res(0) = derived()(0, 0); + res(1) = derived()(1, 1); + res(2) = derived()(2, 2); + res(3) = (derived()(1, 2) + derived()(2, 1)) / Scalar(2); + res(4) = (derived()(0, 2) + derived()(2, 0)) / Scalar(2); + res(5) = (derived()(0, 1) + derived()(1, 0)) / Scalar(2); + return res; +} + +Matrix< Scalar, 3, 3 > +voigt33() const +{ + EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Derived, 6) + Matrix< Scalar, 3, 3 > res; + res(0, 0) = derived()(0); + res(0, 1) = derived()(5); + res(0, 2) = derived()(4); + res(1, 0) = derived()(5); + res(1, 1) = derived()(1); + res(1, 2) = derived()(3); + res(2, 0) = derived()(4); + res(2, 1) = derived()(3); + res(2, 2) = derived()(2); + return res; +} + +#endif // _RL_MATH_MATRIXBASEADDONS_H_ diff --git a/src/rl/math/MotionVector.h b/src/rl/math/MotionVector.h new file mode 100644 index 00000000..99200ecb --- /dev/null +++ b/src/rl/math/MotionVector.h @@ -0,0 +1,169 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_MOTIONVECTOR_H_ +#define _RL_MATH_MOTIONVECTOR_H_ + +#include + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > class ForceVector; + + template< typename Scalar > + class MotionVector + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef Scalar ScalarType; + + typedef typename ::Eigen::Matrix< Scalar, 6, 1 > MatrixType; + + typedef const MatrixType ConstMatrixType; + + typedef ::Eigen::Block< MatrixType, 3, 1 > AngularType; + + typedef const ::Eigen::Block< ConstMatrixType, 3, 1 > ConstAngularType; + + typedef ::Eigen::Block< MatrixType, 3, 1 > LinearType; + + typedef const ::Eigen::Block< ConstMatrixType, 3, 1 > ConstLinearType; + + MotionVector() + { + } + + template< typename OtherDerived > + MotionVector(const ::Eigen::MatrixBase< OtherDerived >& other) : + data(other) + { + } + + virtual ~MotionVector() + { + } + + AngularType angular() + { + return data.template segment< 3 >(0); + } + + ConstAngularType angular() const + { + return data.template segment< 3 >(0); + } + + template< typename OtherScalar > + ForceVector< OtherScalar > cross(const ForceVector< OtherScalar >& other) const; + + MotionVector cross(const MotionVector& other) const + { + MotionVector res; + res.angular() = angular().cross(other.angular()); + res.linear() = angular().cross(other.linear()) + linear().cross(other.angular()); + return res; + } + + template< typename OtherScalar > + Scalar dot(const ForceVector< OtherScalar >& other) const; + + LinearType linear() + { + return data.template segment< 3 >(3); + } + + ConstLinearType linear() const + { + return data.template segment< 3 >(3); + } + + ConstMatrixType& matrix() const + { + return data; + } + + template< typename OtherDerived > + MotionVector& operator=(const ::Eigen::MatrixBase< OtherDerived >& other) + { + data = other; + return *this; + } + + MotionVector operator+(const MotionVector& other) const + { + MotionVector res; + res.angular() = angular() + other.angular(); + res.linear() = linear() + other.linear(); + return res; + } + + MotionVector operator-(const MotionVector& other) const + { + MotionVector res; + res.angular() = angular() - other.angular(); + res.linear() = linear() - other.linear(); + return res; + } + + template< typename OtherScalar > + MotionVector operator*(const OtherScalar& other) const + { + MotionVector res; + res.angular() = angular() * other; + res.linear() = linear() * other; + return res; + } + + template< typename OtherScalar > + MotionVector operator/(const OtherScalar& other) const + { + MotionVector res; + res.angular() = angular() / other; + res.linear() = linear() / other; + return res; + } + + void setZero() + { + angular().setZero(); + linear().setZero(); + } + + protected: + + private: + MatrixType data; + }; + } + } +} + +#endif // _RL_MATH_MOTIONVECTOR_H_ diff --git a/src/rl/math/MotionVector.hxx b/src/rl/math/MotionVector.hxx new file mode 100644 index 00000000..d5a20e1e --- /dev/null +++ b/src/rl/math/MotionVector.hxx @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_MOTIONVECTOR_HXX_ +#define _RL_MATH_MOTIONVECTOR_HXX_ + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > + template< typename OtherScalar > + inline + ForceVector< OtherScalar > + MotionVector< Scalar >::cross(const ForceVector< OtherScalar >& other) const + { + ForceVector< OtherScalar > res; + res.moment() = angular().cross(other.moment()) + linear().cross(other.force()); + res.force() = angular().cross(other.force()); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + Scalar + MotionVector< Scalar >::dot(const ForceVector< OtherScalar >& other) const + { + return angular().dot(other.moment()) + linear().dot(other.force()); + } + } + } +} + +#endif // _RL_MATH_MOTIONVECTOR_HXX_ diff --git a/src/rl/math/Pid.h b/src/rl/math/Pid.h new file mode 100644 index 00000000..47337565 --- /dev/null +++ b/src/rl/math/Pid.h @@ -0,0 +1,103 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_PID_H_ +#define _RL_MATH_PID_H_ + +#include "Real.h" + +namespace rl +{ + namespace math + { + /** + * Proportional-Integral-Derivative controller. + */ + template< typename T > + class Pid + { + public: + Pid() : + e(0), + kd(0), + ki(0), + kp(0), + i(0) + { + + } + + virtual ~Pid() + { + + } + + /** + * \f[ K_p e(t) + K_i \int_{0}^{t} e(\tau) \, d\tau + K_d \frac{de}{dt} \f] + * + * @param dt \f$ dt \f$ + */ + T operator()(const T& x, const Real& dt) + { + T e = this->x - x; + T p = this->kp * e; + this->i += this->ki * e * dt; + T d = this->kd * (e - this->e) / dt; + this->e = e; + return x + p + this->i + d; + } + + void reset() + { + this->e = 0; + this->i = 0; + } + + /** Derivative gain \f$ K_d \f$. */ + T kd; + + /** Integral gain \f$ K_i \f$. */ + T ki; + + /** Proportional gain \f$ K_p \f$. */ + T kp; + + /** Setpoint. */ + T x; + + protected: + + private: + /** Previous error. */ + T e; + + /** Integral output \f$ K_i \int_{0}^{t} e(\tau) \, d\tau \f$. */ + T i; + }; + } +} + +#endif // _RL_MATH_PID_H_ diff --git a/src/rl/math/PlueckerTransform.h b/src/rl/math/PlueckerTransform.h new file mode 100644 index 00000000..04797d25 --- /dev/null +++ b/src/rl/math/PlueckerTransform.h @@ -0,0 +1,199 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_PLUECKERTRANSFORM_H_ +#define _RL_MATH_PLUECKERTRANSFORM_H_ + +#include +#include + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > class ArticulatedBodyInertia; + template< typename Scalar > class ForceVector; + template< typename Scalar > class MotionVector; + template< typename Scalar > class RigidBodyInertia; + + template< typename Scalar > + class PlueckerTransform + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef Scalar ScalarType; + + typedef ::Eigen::Matrix< Scalar, 6, 6 > MatrixType; + + typedef ::Eigen::Matrix< Scalar, 3, 3 > RotationType; + + typedef const RotationType ConstRotationType; + + typedef ::Eigen::Transform< Scalar, 3, ::Eigen::Affine > TransformType; + + typedef ::Eigen::Matrix< Scalar, 3, 1 > TranslationType; + + typedef const TranslationType ConstTranslationType; + + PlueckerTransform() + { + } + + virtual ~PlueckerTransform() + { + } + + PlueckerTransform inverse() const + { + PlueckerTransform res; + res.rotation() = rotation().transpose(); + res.translation() = -rotation() * translation(); + return res; + } + + MatrixType inverseForce() const + { + MatrixType res; + res.template topLeftCorner< 3, 3 >() = rotation().transpose(); + res.template topRightCorner< 3, 3 >() = translation().cross33() * rotation().transpose(); + res.template bottomLeftCorner< 3, 3 >().setZero(); + res.template bottomRightCorner< 3, 3 >() = rotation().transpose(); + return res; + } + + MatrixType inverseMotion() const + { + MatrixType res; + res.template topLeftCorner< 3, 3 >() = rotation().transpose(); + res.template topRightCorner< 3, 3 >().setZero(); + res.template bottomLeftCorner< 3, 3 >() = translation().cross33() * rotation().transpose(); + res.template bottomRightCorner< 3, 3 >() = rotation().transpose(); + return res; + } + + MatrixType matrixForce() const + { + MatrixType res; + res.template topLeftCorner< 3, 3 >() = rotation(); + res.template topRightCorner< 3, 3 >() = -rotation() * translation().cross33(); + res.template bottomLeftCorner< 3, 3 >().setZero(); + res.template bottomRightCorner< 3, 3 >() = rotation(); + return res; + } + + MatrixType matrixMotion() const + { + MatrixType res; + res.template topLeftCorner< 3, 3 >() = rotation(); + res.template topRightCorner< 3, 3 >().setZero(); + res.template bottomLeftCorner< 3, 3 >() = -rotation() * translation().cross33(); + res.template bottomRightCorner< 3, 3 >() = rotation(); + return res; + } + + template< typename OtherScalar > + ForceVector< OtherScalar > operator*(const ForceVector< OtherScalar >& other) const; + + template< typename OtherScalar > + MotionVector< OtherScalar > operator*(const MotionVector< OtherScalar >& other) const; + + PlueckerTransform operator*(const PlueckerTransform& other) const + { + PlueckerTransform res; + res.rotation() = rotation() * other.rotation(); + res.translation() = other.translation() + other.rotation().transpose() * translation(); + return res; + } + + template< typename OtherScalar > + RigidBodyInertia< OtherScalar > operator*(const RigidBodyInertia< OtherScalar >& other) const; + + template< typename OtherScalar > + ArticulatedBodyInertia< OtherScalar > operator*(const ArticulatedBodyInertia< OtherScalar >& other) const; + + template< typename OtherScalar > + ForceVector< OtherScalar > operator/(const ForceVector< OtherScalar >& other) const; + + template< typename OtherScalar > + MotionVector< OtherScalar > operator/(const MotionVector< OtherScalar >& other) const; + + template< typename OtherScalar > + RigidBodyInertia< OtherScalar > operator/(const RigidBodyInertia< OtherScalar >& other) const; + + template< typename OtherScalar > + ArticulatedBodyInertia< OtherScalar > operator/(const ArticulatedBodyInertia< OtherScalar >& other) const; + + RotationType& rotation() + { + return rotationData; + } + + ConstRotationType& rotation() const + { + return rotationData; + } + + void setIdentity() + { + rotation().setIdentity(); + translation().setZero(); + } + + TransformType transform() const + { + TransformType res; + res.linear() = rotation(); + res.translation() = -rotation() * translation(); +//res.linear() = rotation().transpose(); +//res.translation() = translation(); + return res; + } + + TranslationType& translation() + { + return translationData; + } + + ConstTranslationType& translation() const + { + return translationData; + } + + protected: + + private: + RotationType rotationData; + + TranslationType translationData; + }; + } + } +} + +#endif // _RL_MATH_PLUECKERTRANSFORM_H_ diff --git a/src/rl/math/PlueckerTransform.hxx b/src/rl/math/PlueckerTransform.hxx new file mode 100644 index 00000000..1983c6c6 --- /dev/null +++ b/src/rl/math/PlueckerTransform.hxx @@ -0,0 +1,141 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_PLUECKERTRANSFORM_HXX_ +#define _RL_MATH_PLUECKERTRANSFORM_HXX_ + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > + template< typename OtherScalar > + inline + ForceVector< OtherScalar > + PlueckerTransform< Scalar >::operator*(const ForceVector< OtherScalar >& other) const + { + ForceVector< OtherScalar > res; + res.force() = rotation() * other.force(); + res.moment() = rotation() * (other.moment() - translation().cross(other.force())); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + MotionVector< OtherScalar > + PlueckerTransform< Scalar >::operator*(const MotionVector< OtherScalar >& other) const + { + MotionVector< OtherScalar > res; + res.linear() = rotation() * (other.linear() - translation().cross(other.angular())); + res.angular() = rotation() * other.angular(); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + RigidBodyInertia< OtherScalar > + PlueckerTransform< Scalar >::operator*(const RigidBodyInertia< OtherScalar >& other) const + { + RigidBodyInertia< OtherScalar > res; + res.cog() = rotation() * (other.cog() - other.mass() * translation()); + res.inertia() = rotation() * (other.inertia() + translation().cross(other.cog()).cross33() + (other.cog() - other.mass() * translation()).cross(translation()).cross33()) * rotation().transpose(); + res.mass() = other.mass(); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + ArticulatedBodyInertia< OtherScalar > + PlueckerTransform< Scalar >::operator*(const ArticulatedBodyInertia< OtherScalar >& other) const + { + ArticulatedBodyInertia< OtherScalar > res; + res.cog() = rotation() * (other.cog() - translation().cross33() * other.mass()) * rotation().transpose(); + res.inertia() = rotation() * (other.inertia() - translation().cross33() * other.cog().transpose() + (other.cog() - translation().cross33() * other.mass()) * translation().cross33()) * rotation().transpose(); + res.mass() = rotation() * other.mass() * rotation().transpose(); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + ForceVector< OtherScalar > + PlueckerTransform< Scalar >::operator/(const ForceVector< OtherScalar >& other) const + { + ForceVector< OtherScalar > res; + res.force() = rotation().transpose() * other.force(); + res.moment() = rotation().transpose() * other.moment() + translation().cross(rotation().transpose() * other.force()); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + MotionVector< OtherScalar > + PlueckerTransform< Scalar >::operator/(const MotionVector< OtherScalar >& other) const + { + MotionVector< OtherScalar > res; + res.linear() = rotation().transpose() * other.linear() + translation().cross(rotation().transpose() * other.angular()); + res.angular() = rotation().transpose() * other.angular(); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + RigidBodyInertia< OtherScalar > + PlueckerTransform< Scalar >::operator/(const RigidBodyInertia< OtherScalar >& other) const + { + RigidBodyInertia< OtherScalar > res; + res.cog() = rotation().transpose() * other.cog() + other.mass() * translation(); + res.inertia() = rotation().transpose() * other.inertia() * rotation() - translation().cross(rotation().transpose() * other.cog()).cross33() - (rotation().transpose() * other.cog() + other.mass() * translation()).cross(translation()).cross33(); + res.mass() = other.mass(); + return res; + } + + template< typename Scalar > + template< typename OtherScalar > + inline + ArticulatedBodyInertia< OtherScalar > + PlueckerTransform< Scalar >::operator/(const ArticulatedBodyInertia< OtherScalar >& other) const + { + ArticulatedBodyInertia< OtherScalar > res; + typename ArticulatedBodyInertia< OtherScalar >::CenterOfGravityType cog = rotation().transpose() * other.cog() * rotation(); + typename ArticulatedBodyInertia< OtherScalar >::MassType mass = rotation().transpose() * other.mass() * rotation(); + res.cog() = cog + translation().cross33() * mass; + res.inertia() = rotation().transpose() * other.inertia() * rotation() + translation().cross33() * cog.transpose() - (cog + translation().cross33() * mass) * translation().cross33(); + res.mass() = mass; + return res; + } + } + } +} + +#endif // _RL_MATH_PLUECKERTRANSFORM_HXX_ diff --git a/src/rl/math/Quaternion.h b/src/rl/math/Quaternion.h new file mode 100644 index 00000000..430cc56a --- /dev/null +++ b/src/rl/math/Quaternion.h @@ -0,0 +1,45 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_QUATERNION_H_ +#define _RL_MATH_QUATERNION_H_ + +#define EIGEN_MATRIXBASE_PLUGIN +#define EIGEN_QUATERNIONBASE_PLUGIN + +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + typedef ::Eigen::Quaternion< Real > Quaternion; + } +} + +#endif // _RL_MATH_QUATERNION_H_ diff --git a/src/rl/math/QuaternionBaseAddons.h b/src/rl/math/QuaternionBaseAddons.h new file mode 100644 index 00000000..4f277272 --- /dev/null +++ b/src/rl/math/QuaternionBaseAddons.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_QUATERNIONBASEADDONS_H_ +#define _RL_MATH_QUATERNIONBASEADDONS_H_ + +void +fromUniform(const Scalar& rand0, const Scalar& rand1, const Scalar& rand2) +{ + eigen_assert(rand0 >= Scalar(0)); + eigen_assert(rand0 <= Scalar(1)); + eigen_assert(rand1 >= Scalar(0)); + eigen_assert(rand1 <= Scalar(1)); + eigen_assert(rand2 >= Scalar(0)); + eigen_assert(rand2 <= Scalar(1)); + + Scalar sigma1 = ::std::sqrt(Scalar(1) - rand0); + Scalar sigma2 = ::std::sqrt(rand0); + Scalar theta1 = Scalar(2) * static_cast< Scalar >(M_PI) * rand1; + Scalar theta2 = Scalar(2) * static_cast< Scalar >(M_PI) * rand2; + + this->w() = ::std::cos(theta2) * sigma2; + this->x() = ::std::sin(theta1) * sigma1; + this->y() = ::std::cos(theta1) * sigma1; + this->z() = ::std::sin(theta2) * sigma2; +} + +#endif // _RL_MATH_QUATERNIONBASEADDONS_H_ diff --git a/src/rl/math/Quintic.h b/src/rl/math/Quintic.h new file mode 100644 index 00000000..3639dcf2 --- /dev/null +++ b/src/rl/math/Quintic.h @@ -0,0 +1,126 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_QUINTIC_H_ +#define _RL_MATH_QUINTIC_H_ + +#include +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + template< typename T > + class Quintic + { + public: + Quintic() : + a0(), + ae(), + te(::std::numeric_limits::max()), + x0(), + xe(), + v0(), + ve(), + c0(), + c1(), + c2(), + c3(), + c4(), + c5() + { + } + + virtual ~Quintic() + { + } + + T a(const Real& t) const + { + return 2 * c2 + 6 * c3 * t + 12 * c4 * ::std::pow(t, 2) + 20 * c5 * ::std::pow(t, 3); + } + + void interpolate() + { + c0 = x0; + c1 = v0; + c2 = a0 / 2; + c3 = -(3 * ::std::pow(te, 2) * a0 + 12 * te * v0 - ::std::pow(te, 2) * ae + 20 * x0 + 8 * te * ve - 20 * xe) / (2 * ::std::pow(te, 3)); + c4 = (16 * te * v0 - 2 * ::std::pow(te, 2) * ae + 30 * x0 + 14 * te * ve - 30 * xe + 3 * ::std::pow(te, 2) * a0) / (2 * ::std::pow(te, 4)); + c5 = -(12 * x0 + 6 * te * v0 + 6 * te * ve - 12 * xe + ::std::pow(te, 2) * a0 - ::std::pow(te, 2) * ae) / (2 * ::std::pow(te, 5)); + } + + T j(const Real& t) const + { + return 6 * c3 + 24 * c4 * t + 60 * c5 * ::std::pow(t, 2); + } + + T v(const Real& t) const + { + return c1 + 2 * c2 * t + 3 * c3 * ::std::pow(t, 2) + 4 * c4 * ::std::pow(t, 3) + 5 * c5 * ::std::pow(t, 4); + } + + T x(const Real& t) const + { + return c0 + c1 * t + c2 * ::std::pow(t, 2) + c3 * ::std::pow(t, 3) + c4 * ::std::pow(t, 4) + c5 * ::std::pow(t, 5); + } + + T a0; + + T ae; + + Real te; + + T x0; + + T xe; + + T v0; + + T ve; + + protected: + + private: + T c0; + + T c1; + + T c2; + + T c3; + + T c4; + + T c5; + }; + } +} + +#endif // _RL_MATH_QUINTIC_H_ diff --git a/src/rl/math/Real.h b/src/rl/math/Real.h new file mode 100644 index 00000000..2d919414 --- /dev/null +++ b/src/rl/math/Real.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_REAL_H_ +#define _RL_MATH_REAL_H_ + +namespace rl +{ + namespace math + { + typedef double Real; + + template< typename T > + inline T sign(const T& a) + { + if (a > 0) + { + return 1; + } + else if (a < 0) + { + return -1; + } + else + { + return 0; + } + } + } +} + +#endif // _RL_MATH_REAL_H_ diff --git a/src/rl/math/RigidBodyInertia.h b/src/rl/math/RigidBodyInertia.h new file mode 100644 index 00000000..36eeca05 --- /dev/null +++ b/src/rl/math/RigidBodyInertia.h @@ -0,0 +1,197 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_RIGIDBODYINERTIA_H_ +#define _RL_MATH_RIGIDBODYINERTIA_H_ + +#include + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > class ForceVector; + + template< typename Scalar > class MotionVector; + + template< typename Scalar > + class RigidBodyInertia + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef Scalar ScalarType; + + typedef ::Eigen::Matrix< Scalar, 6, 6 > MatrixType; + + typedef ::Eigen::Matrix< Scalar, 3, 1 > CenterOfGravityType; + + typedef const CenterOfGravityType ConstCenterOfGravityType; + + typedef ::Eigen::Matrix< Scalar, 3, 3 > InertiaType; + + typedef const InertiaType ConstInertiaType; + + typedef Scalar MassType; + + typedef const MassType ConstMassType; + + RigidBodyInertia() + { + } + + template< typename OtherDerived > + RigidBodyInertia(const ::Eigen::DenseBase< OtherDerived >& other) : + centerOfGravityData(other.template topRightCorner< 3, 3 >().cross3()), + inertiaData(other.template topLeftCorner< 3, 3 >()), + massData(other.template bottomRightCorner< 3, 3 >().diagonal().mean()) + { + } + + virtual ~RigidBodyInertia() + { + } + + CenterOfGravityType& cog() + { + return centerOfGravityData; + } + + ConstCenterOfGravityType& cog() const + { + return centerOfGravityData; + } + + InertiaType& inertia() + { + return inertiaData; + } + + ConstInertiaType& inertia() const + { + return inertiaData; + } + + MassType& mass() + { + return massData; + } + + ConstMassType& mass() const + { + return massData; + } + + MatrixType matrix() const + { + MatrixType res; + res.template topLeftCorner< 3, 3 >() = inertia(); + res.template topRightCorner< 3, 3 >() = cog().cross33(); + res.template bottomLeftCorner< 3, 3 >() = -cog().cross33(); + res.template bottomRightCorner< 3, 3 >() = ::Eigen::Matrix< Scalar, 3, 3 >::Identity() * mass(); + return res; + } + + template< typename OtherDerived > + RigidBodyInertia& operator=(const ::Eigen::MatrixBase< OtherDerived >& other) + { + cog() = other.template topRightCorner< 3, 3 >().cross3(); + inertia() = other.template topLeftCorner< 3, 3 >(); + mass() = other.template bottomRightCorner< 3, 3 >().diagonal().mean(); + return *this; + } + + RigidBodyInertia operator+(const RigidBodyInertia& other) const + { + RigidBodyInertia res; + res.cog() = cog() + other.cog(); + res.inertia() = inertia() + other.inertia(); + res.mass() = mass() + other.mass(); + return res; + } + + RigidBodyInertia operator-(const RigidBodyInertia& other) const + { + RigidBodyInertia res; + res.cog() = cog() - other.cog(); + res.inertia() = inertia() - other.inertia(); + res.mass() = mass() - other.mass(); + return res; + } + + template< typename OtherScalar > + RigidBodyInertia operator*(const OtherScalar& other) const + { + RigidBodyInertia res; + res.cog() = cog() * other; + res.inertia() = inertia() * other; + res.mass() = mass() * other; + return res; + } + + template< typename OtherScalar > + ForceVector< Scalar > operator*(const MotionVector< OtherScalar >& other) const; + + template< typename OtherScalar > + RigidBodyInertia operator/(const OtherScalar& other) const + { + RigidBodyInertia res; + res.cog() = cog() / other; + res.inertia() = inertia() / other; + res.mass() = mass() / other; + return res; + } + + void setIdentity() + { + cog().setZero(); + inertia().setIdentity(); + mass() = 1; + } + + void setZero() + { + cog().setZero(); + inertia().setZero(); + mass() = 0; + } + + protected: + + private: + CenterOfGravityType centerOfGravityData; + + InertiaType inertiaData; + + MassType massData; + }; + } + } +} + +#endif // _RL_MATH_RIGIDBODYINERTIA_H_ diff --git a/src/rl/math/RigidBodyInertia.hxx b/src/rl/math/RigidBodyInertia.hxx new file mode 100644 index 00000000..6a95ad98 --- /dev/null +++ b/src/rl/math/RigidBodyInertia.hxx @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_RIGIDBODYINERTIA_HXX_ +#define _RL_MATH_RIGIDBODYINERTIA_HXX_ + +namespace rl +{ + namespace math + { + namespace spatial + { + template< typename Scalar > + template< typename OtherScalar > + inline + ForceVector< Scalar > + RigidBodyInertia< Scalar >::operator*(const MotionVector< OtherScalar >& other) const + { + ForceVector< Scalar > res; + res.moment() = inertia() * other.angular() + cog().cross(other.linear()); + res.force() = mass() * other.linear() - cog().cross(other.angular()); + return res; + } + } + } +} + +#endif // _RL_MATH_RIGIDBODYINERTIA_HXX_ diff --git a/src/rl/math/Rotation.h b/src/rl/math/Rotation.h new file mode 100644 index 00000000..1f1ead89 --- /dev/null +++ b/src/rl/math/Rotation.h @@ -0,0 +1,54 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_ROTATION_H_ +#define _RL_MATH_ROTATION_H_ + +#include "Matrix.h" + +namespace rl +{ + namespace math + { + typedef Matrix33 Rotation; + + typedef Matrix33Block RotationBlock; + + typedef Matrix33Column RotationColumn; + + typedef Matrix33Row RotationRow; + + typedef ConstMatrix33Block ConstRotationBlock; + + typedef ConstMatrix33Column ConstRotationColumn; + + typedef ConstMatrix33Row ConstRotationRow; + + typedef ::Eigen::AngleAxis< Real > AngleAxis; + } +} + +#endif // _RL_MATH_ROTATION_H_ diff --git a/src/rl/math/Spatial.h b/src/rl/math/Spatial.h new file mode 100644 index 00000000..ed7001ec --- /dev/null +++ b/src/rl/math/Spatial.h @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_SPATIAL_H_ +#define _RL_MATH_SPATIAL_H_ + +#define EIGEN_MATRIXBASE_PLUGIN +#define EIGEN_QUATERNIONBASE_PLUGIN + +#include "Real.h" + +#include "ArticulatedBodyInertia.h" +#include "ForceVector.h" +#include "MotionVector.h" +#include "PlueckerTransform.h" +#include "RigidBodyInertia.h" + +#include "ArticulatedBodyInertia.hxx" +#include "ForceVector.hxx" +#include "MotionVector.hxx" +#include "PlueckerTransform.hxx" +#include "RigidBodyInertia.hxx" + +namespace rl +{ + namespace math + { + typedef spatial::ArticulatedBodyInertia< Real > ArticulatedBodyInertia; + + typedef spatial::ForceVector< Real > ForceVector; + + typedef spatial::MotionVector< Real > MotionVector; + + typedef spatial::PlueckerTransform< Real > PlueckerTransform; + + typedef spatial::RigidBodyInertia< Real > RigidBodyInertia; + } +} + +#endif // _RL_MATH_SPATIAL_H_ diff --git a/src/rl/math/Transform.h b/src/rl/math/Transform.h new file mode 100644 index 00000000..c51ceddb --- /dev/null +++ b/src/rl/math/Transform.h @@ -0,0 +1,252 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_TRANSFORM_H_ +#define _RL_MATH_TRANSFORM_H_ + +#define EIGEN_MATRIXBASE_PLUGIN +#define EIGEN_QUATERNIONBASE_PLUGIN + +#include + +#include "Matrix.h" +#include "Quaternion.h" + +namespace rl +{ + namespace math + { + typedef ::Eigen::Transform< Real, 3, ::Eigen::Affine > Transform; + + typedef ::Eigen::Translation< Real, 3 > Translation; + + namespace transform + { + template< typename Matrix1, typename Matrix2, typename Real > + inline + Real + distance(const Matrix1& t1, const Matrix2& t2, const Real& weight = 1.0) + { + Quaternion q1(t1.rotation()); + Quaternion q2(t2.rotation()); + + return ::std::sqrt( + ::std::pow(t2(0, 3) - t1(0, 3), 2) + + ::std::pow(t2(1, 3) - t1(1, 3), 2) + + ::std::pow(t2(2, 3) - t1(2, 3), 2) + + weight * ::std::pow(q1.angularDistance(q2), 2) + ); + } + + template< typename Matrix1, typename Real, typename Matrix2 > + inline + void + fromDelta(const Matrix1& t1, const Real& x, const Real& y, const Real& z, const Real& a, const Real& b, const Real& c, Matrix2& t2) + { +// assert(t1.rows() > 3); +// assert(t1.cols() > 3); +// assert(t2.rows() > 3); +// assert(t2.cols() > 3); + + t2(0, 0) = t1(0, 0) - c * t1(1, 0) + b * t1(2, 0); + t2(0, 1) = t1(0, 1) - c * t1(1, 1) + b * t1(2, 1); + t2(0, 2) = t1(0, 2) - c * t1(1, 2) + b * t1(2, 2); + t2(0, 3) = t1(0, 3) + x; + t2(1, 0) = t1(1, 0) + c * t1(0, 0) - a * t1(2, 0); + t2(1, 1) = t1(1, 1) + c * t1(0, 1) - a * t1(2, 1); + t2(1, 2) = t1(1, 2) + c * t1(0, 2) - a * t1(2, 2); + t2(1, 3) = t1(1, 3) + y; + t2(2, 0) = t1(2, 0) - b * t1(0, 0) + a * t1(1, 0); + t2(2, 1) = t1(2, 1) - b * t1(0, 1) + a * t1(1, 1); + t2(2, 2) = t1(2, 2) - b * t1(0, 2) + a * t1(1, 2); + t2(2, 3) = t1(2, 3) + z; + t2(3, 0) = 0.0f; + t2(3, 1) = 0.0f; + t2(3, 2) = 0.0f; + t2(3, 3) = 1.0f; + } + + template< typename Matrix1, typename Vector, typename Matrix2 > + inline + void + fromDelta(const Matrix1& t1, const Vector& xyzabc, Matrix2& t2) + { +// assert(xyzabc.size() > 5); + + fromDelta(t1, xyzabc(0), xyzabc(1), xyzabc(2), xyzabc(3), xyzabc(4), xyzabc(5), t2); + } + + template< typename Matrix, typename Real > + inline + void + getDelta(const Matrix& t, Real& x, Real& y, Real& z, Real& a, Real& b, Real& c) + { +// assert(t.rows() > 3); +// assert(t.cols() > 3); + + x = t(0, 3); + y = t(1, 3); + z = t(2, 3); + a = (t(2, 1) - t(1, 2)) / 2.0f; + b = (t(0, 2) - t(2, 0)) / 2.0f; + c = (t(1, 0) - t(0, 1)) / 2.0f; + } + + template< typename Matrix, typename Vector > + inline + void + getDelta(const Matrix& t, Vector& xyzabc) + { +// assert(xyzabc.size() > 5); + + getDelta(t, xyzabc(0), xyzabc(1), xyzabc(2), xyzabc(3), xyzabc(4), xyzabc(5)); + } + + template< typename Matrix, typename Real > + inline + void + getDenavitHartenberg(const Matrix& t, Real& d, Real& theta, Real& a, Real& alpha) + { +// assert(t.rows() > 3); +// assert(t.cols() > 3); + + assert(::std::abs(t(2, 0)) <= ::std::numeric_limits::epsilon()); + + d = t(2, 3); + + theta = ::std::atan2(t(1, 0), t(0, 0)); + + if (::std::abs(t(0, 0)) <= ::std::numeric_limits::epsilon()) + { + a = t(1, 3) / t(1, 0); + } + else + { + a = t(0, 3) / t(0, 0); + } + + alpha = ::std::atan2(t(2, 1), t(2, 2)); + } + + template< typename Real, typename Matrix > + inline + void + setDelta(const Real& x, const Real& y, const Real& z, const Real& a, const Real& b, const Real& c, Matrix& t) + { +// assert(t.rows() > 3); +// assert(t.cols() > 3); + + t(0, 0) = 0; + t(0, 1) = -c; + t(0, 2) = b; + t(0, 3) = x; + t(1, 0) = c; + t(1, 1) = 0; + t(1, 2) = -a; + t(1, 3) = y; + t(2, 0) = -b; + t(2, 1) = a; + t(2, 2) = 0; + t(2, 3) = z; + t(3, 0) = 0; + t(3, 1) = 0; + t(3, 2) = 0; + t(3, 3) = 1; + } + + template< typename Vector, typename Matrix > + inline + void + setDelta(const Vector& xyzabc, Matrix& t) + { +// assert(xyzabc.size() > 5); + + setDelta(xyzabc(0), xyzabc(1), xyzabc(2), xyzabc(3), xyzabc(4), xyzabc(5), t); + } + + template< typename Real, typename Matrix > + inline + void + setDenavitHartenberg(const Real& d, const Real& theta, const Real& a, const Real& alpha, Matrix& t) + { +// assert(t.rows() > 3); +// assert(t.cols() > 3); + + Real cosAlpha = ::std::cos(alpha); + Real cosTheta = ::std::cos(theta); + Real sinAlpha = ::std::sin(alpha); + Real sinTheta = ::std::sin(theta); + + t(0, 0) = cosTheta; + t(1, 0) = sinTheta; + t(2, 0) = 0.0f; + t(3, 0) = 0.0f; + t(0, 1) = -cosAlpha * sinTheta; + t(1, 1) = cosAlpha * cosTheta; + t(2, 1) = sinAlpha; + t(3, 1) = 0.0f; + t(0, 2) = sinAlpha * sinTheta; + t(1, 2) = -sinAlpha * cosTheta; + t(2, 2) = cosAlpha; + t(3, 2) = 0.0f; + t(0, 3) = a * cosTheta; + t(1, 3) = a * sinTheta; + t(2, 3) = d; + t(3, 3) = 1.0f; + } + + template< typename Matrix1, typename Matrix2, typename Real > + inline + void + toDelta(const Matrix1& t1, const Matrix2& t2, Real& x, Real& y, Real& z, Real& a, Real& b, Real& c) + { +// assert(t1.rows() > 3); +// assert(t1.cols() > 3); +// assert(t2.rows() > 3); +// assert(t2.cols() > 3); + + x = t2(0, 3) - t1(0, 3); + y = t2(1, 3) - t1(1, 3); + z = t2(2, 3) - t1(2, 3); + a = (t1(1, 0) * t2(2, 0) - t1(2, 0) * t2(1, 0) + t1(1, 1) * t2(2, 1) - t1(2, 1) * t2(1, 1) + t1(1, 2) * t2(2, 2) - t1(2, 2) * t2(1, 2)) / 2.0f; + b = (t1(2, 0) * t2(0, 0) - t1(0, 0) * t2(2, 0) + t1(2, 1) * t2(0, 1) - t1(0, 1) * t2(2, 1) + t1(2, 2) * t2(0, 2) - t1(0, 2) * t2(2, 2)) / 2.0f; + c = (t1(0, 0) * t2(1, 0) - t1(1, 0) * t2(0, 0) + t1(0, 1) * t2(1, 1) - t1(1, 1) * t2(0, 1) + t1(0, 2) * t2(1, 2) - t1(1, 2) * t2(0, 2)) / 2.0f; + } + + template< typename Matrix1, typename Matrix2, typename Vector > + inline + void + toDelta(const Matrix1& t1, const Matrix2& t2, Vector& xyzabc) + { +// assert(xyzabc.size() > 5); + + toDelta(t1, t2, xyzabc(0), xyzabc(1), xyzabc(2), xyzabc(3), xyzabc(4), xyzabc(5)); + } + } + } +} + +#endif // _RL_MATH_TRANSFORM_H_ diff --git a/src/rl/math/TrapezoidalVelocity.h b/src/rl/math/TrapezoidalVelocity.h new file mode 100644 index 00000000..992dd2b4 --- /dev/null +++ b/src/rl/math/TrapezoidalVelocity.h @@ -0,0 +1,773 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_TRAPEZOIDALVELOCITY_H_ +#define _RL_MATH_TRAPEZOIDALVELOCITY_H_ + +#include +#include +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + template< typename T > + class TrapezoidalVelocity + { + public: + TrapezoidalVelocity() : + am(0), + dm(0), + x0(0), + xe(0), + v0(0), + ve(0), + vm(0), + ah(0), + dh(0), + ta(::std::numeric_limits::max()), + tc(::std::numeric_limits::max()), + td(::std::numeric_limits::max()) + { + } + + virtual ~TrapezoidalVelocity() + { + } + + T a(const Real& t) const + { + if (t < ta) + { + return ah; + } + else if (t < ta + tc) + { + return 0; + } + else if (t < ta + tc + td) + { + return -dh; + } + else + { + return 0; + } + } + + void interpolate() + { + T x = xe - x0; + + T ta1 = ( vm - v0) / am; + T ta2 = ( vm - v0) / am; + T ta3 = (-vm - v0) / am; + T ta4 = (-vm - v0) / am; + T ta5 = ( vm - v0) / -am; + T ta6 = ( vm - v0) / -am; + T ta7 = (-vm - v0) / -am; + T ta8 = (-vm - v0) / -am; + + T tc1 = ( dm * v0 * v0 - dm * vm * vm - am * vm * vm + am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + T tc2 = ( dm * v0 * v0 - dm * vm * vm + am * vm * vm - am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + T tc3 = -( dm * v0 * v0 - dm * vm * vm - am * vm * vm + am * ve * ve + 2 * x * am * dm) / vm / dm / am / 2; + T tc4 = -( dm * v0 * v0 - dm * vm * vm + am * vm * vm - am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + T tc5 = (-dm * v0 * v0 + dm * vm * vm - am * vm * vm + am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + T tc6 = (-dm * v0 * v0 + dm * vm * vm + am * vm * vm - am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + T tc7 = -(-dm * v0 * v0 + dm * vm * vm - am * vm * vm + am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + T tc8 = -(-dm * v0 * v0 + dm * vm * vm + am * vm * vm - am * ve * ve + 2 * x * am * dm) / vm / am / dm / 2; + + T td1 = (ve - vm) / -dm; + T td2 = (ve - vm) / dm; + T td3 = (ve + vm) / -dm; + T td4 = (ve + vm) / dm; + T td5 = (ve - vm) / -dm; + T td6 = (ve - vm) / dm; + T td7 = (ve + vm) / -dm; + T td8 = (ve + vm) / dm; + + T t1 = ta1 + tc1 + td1; + T t2 = ta2 + tc2 + td2; + T t3 = ta3 + tc3 + td3; + T t4 = ta4 + tc4 + td4; + T t5 = ta5 + tc5 + td5; + T t6 = ta6 + tc6 + td6; + T t7 = ta7 + tc7 + td7; + T t8 = ta8 + tc8 + td8; + + T t = ::std::numeric_limits::max(); + + T vh = vm; + + // am, vm, -dm + if (ta1 >= 0 && tc1 >= 0 && td1 >= 0 && ::std::abs(t1) < ::std::abs(t)) + { + t = t1; + ta = ta1; + tc = tc1; + td = td1; + ah = am; + vh = vm; + dh = dm; + } + // am, vm, dm + if (ta2 >= 0 && tc2 >= 0 && td2 >= 0 && ::std::abs(t2) < ::std::abs(t)) + { + t = t2; + ta = ta2; + tc = tc2; + td = td2; + ah = am; + vh = vm; + dh = -dm; + } + // am, -vm, -dm + if (ta3 >= 0 && tc3 >= 0 && td3 >= 0 && ::std::abs(t3) < ::std::abs(t)) + { + t = t3; + ta = ta3; + tc = tc3; + td = td3; + ah = am; + vh = -vm; + dh = dm; + } + // am, -vm, dm + if (ta4 >= 0 && tc4 >= 0 && td4 >= 0 && ::std::abs(t4) < ::std::abs(t)) + { + t = t4; + ta = ta4; + tc = tc4; + td = td4; + ah = am; + vh = -vm; + dh = -dm; + } + // -am, vm, -dm + if (ta5 >= 0 && tc5 >= 0 && td5 >= 0 && ::std::abs(t5) < ::std::abs(t)) + { + t = t5; + ta = ta5; + tc = tc5; + td = td5; + ah = -am; + vh = vm; + dh = dm; + } + // -am, vm, dm + if (ta6 >= 0 && tc6 >= 0 && td6 >= 0 && ::std::abs(t6) < ::std::abs(t)) + { + t = t6; + ta = ta6; + tc = tc6; + td = td6; + ah = -am; + vh = vm; + dh = -dm; + } + // -am, -vm, -dm + if (ta7 >= 0 && tc7 >= 0 && td7 >= 0 && ::std::abs(t7) < ::std::abs(t)) + { + t = t7; + ta = ta7; + tc = tc7; + td = td7; + ah = -am; + vh = -vm; + dh = dm; + } + // -am, -vm, dm + if (ta8 >= 0 && tc8 >= 0 && td8 >= 0 && ::std::abs(t8) < ::std::abs(t)) + { + t = t8; + ta = ta8; + tc = tc8; + td = td8; + ah = -am; + vh = -vm; + dh = -dm; + } + + T v1 = 1 / ( dm + am) * ::std::sqrt( ( dm + am) * ( dm * v0 * v0 + am * ve * ve + 2 * x * am * dm)); + T v2 = 1 / (-dm + am) * ::std::sqrt(-(-dm + am) * ( dm * v0 * v0 - am * ve * ve + 2 * x * am * dm)); + T v3 = 1 / ( dm + am) * ::std::sqrt( ( dm + am) * ( dm * v0 * v0 + am * ve * ve + 2 * x * am * dm)); + T v4 = 1 / (-dm + am) * ::std::sqrt(-(-dm + am) * ( dm * v0 * v0 - am * ve * ve + 2 * x * am * dm)); + T v5 = 1 / (-dm + am) * ::std::sqrt( (-dm + am) * (-dm * v0 * v0 + am * ve * ve + 2 * x * am * dm)); + T v6 = 1 / ( dm + am) * ::std::sqrt(-( dm + am) * (-dm * v0 * v0 - am * ve * ve + 2 * x * am * dm)); + T v7 = 1 / (-dm + am) * ::std::sqrt( (-dm + am) * (-dm * v0 * v0 + am * ve * ve + 2 * x * am * dm)); + T v8 = 1 / ( dm + am) * ::std::sqrt(-( dm + am) * (-dm * v0 * v0 - am * ve * ve + 2 * x * am * dm)); + + T ta1a = ( v1 - v0) / am; + T ta1b = (-v1 - v0) / am; + T ta2a = ( v2 - v0) / am; + T ta2b = (-v2 - v0) / am; + T ta3a = (-v3 - v0) / am; + T ta3b = ( v3 - v0) / am; + T ta4a = (-v4 - v0) / am; + T ta4b = ( v4 - v0) / am; + T ta5a = ( v5 - v0) / -am; + T ta5b = (-v5 - v0) / -am; + T ta6a = ( v6 - v0) / -am; + T ta6b = (-v6 - v0) / -am; + T ta7a = (-v7 - v0) / -am; + T ta7b = ( v7 - v0) / -am; + T ta8a = (-v8 - v0) / -am; + T ta8b = ( v8 - v0) / -am; + + T td1a = (ve - v1) / -dm; + T td1b = (ve + v1) / -dm; + T td2a = (ve - v2) / dm; + T td2b = (ve + v2) / dm; + T td3a = (ve + v3) / -dm; + T td3b = (ve - v3) / -dm; + T td4a = (ve + v4) / dm; + T td4b = (ve - v4) / dm; + T td5a = (ve - v5) / -dm; + T td5b = (ve + v5) / -dm; + T td6a = (ve - v6) / dm; + T td6b = (ve + v6) / dm; + T td7a = (ve + v7) / -dm; + T td7b = (ve - v7) / -dm; + T td8a = (ve + v8) / dm; + T td8b = (ve - v8) / dm; + + T t1a = ta1a + td1a; + T t1b = ta1b + td1b; + T t2a = ta2a + td2a; + T t2b = ta2b + td2b; + T t3a = ta3a + td3a; + T t3b = ta3b + td3b; + T t4a = ta4a + td4a; + T t4b = ta4b + td4b; + T t5a = ta5a + td5a; + T t5b = ta5b + td5b; + T t6a = ta6a + td6a; + T t6b = ta6b + td6b; + T t7a = ta7a + td7a; + T t7b = ta7b + td7b; + T t8a = ta8a + td8a; + T t8b = ta8b + td8b; + + // am, vm, -dm + if (ta1a >= 0 && td1a >= 0 && ::std::abs(t1a) < ::std::abs(t) && ::std::abs(v1) < ::std::abs(vh)) + { + t = t1a; + ta = ta1a; + tc = 0; + td = td1a; + ah = am; + vh = v1; + dh = dm; + } + if (ta1b >= 0 && td1b >= 0 && ::std::abs(t1b) < ::std::abs(t) && ::std::abs(v1) < ::std::abs(vh)) + { + t = t1b; + ta = ta1b; + tc = 0; + td = td1b; + ah = am; + vh = -v1; + dh = dm; + } + // am, vm, dm + if (ta2a >= 0 && td2a >= 0 && ::std::abs(t2a) < ::std::abs(t) && ::std::abs(v2) < ::std::abs(vh)) + { + t = t2a; + ta = ta2a; + tc = 0; + td = td2a; + ah = am; + vh = v2; + dh = -dm; + } + if (ta2b >= 0 && td2 >= 0 && ::std::abs(t2b) < ::std::abs(t) && ::std::abs(v2) < ::std::abs(vh)) + { + t = t2b; + ta = ta2b; + tc = 0; + td = td2b; + ah = am; + vh = -v2; + dh = -dm; + } + // am, -vm, -dm + if (ta3a >= 0 && td3a >= 0 && ::std::abs(t3a) < ::std::abs(t) && ::std::abs(v3) < ::std::abs(vh)) + { + t = t3a; + ta = ta3a; + tc = 0; + td = td3a; + ah = am; + vh = -v3; + dh = dm; + } + if (ta3b >= 0 && td3b >= 0 && ::std::abs(t3b) < ::std::abs(t) && ::std::abs(v3) < ::std::abs(vh)) + { + t = t3b; + ta = ta3b; + tc = 0; + td = td3b; + ah = am; + vh = v3; + dh = dm; + } + // am, -vm, dm + if (ta4a >= 0 && td4a >= 0 && ::std::abs(t4a) < ::std::abs(t) && ::std::abs(v4) < ::std::abs(vh)) + { + t = t4a; + ta = ta4a; + tc = 0; + td = td4a; + ah = am; + vh = -v4; + dh = -dm; + } + if (ta4b >= 0 && td4b >= 0 && ::std::abs(t4b) < ::std::abs(t) && ::std::abs(v4) < ::std::abs(vh)) + { + t = t4b; + ta = ta4b; + tc = 0; + td = td4b; + ah = am; + vh = v4; + dh = -dm; + } + // -am, vm, -dm + if (ta5a >= 0 && td5a >= 0 && ::std::abs(t5a) < ::std::abs(t) && ::std::abs(v5) < ::std::abs(vh)) + { + t = t5a; + ta = ta5a; + tc = 0; + td = td5a; + ah = -am; + vh = v5; + dh = dm; + } + if (ta5b >= 0 && td5b >= 0 && ::std::abs(t5b) < ::std::abs(t) && ::std::abs(v5) < ::std::abs(vh)) + { + t = t5b; + ta = ta5b; + tc = 0; + td = td5b; + ah = -am; + vh = -v5; + dh = dm; + } + // -am, vm, dm + if (ta6a >= 0 && td6a >= 0 && ::std::abs(t6a) < ::std::abs(t) && ::std::abs(v6) < ::std::abs(vh)) + { + t = t6a; + ta = ta6a; + tc = 0; + td = td6a; + ah = -am; + vh = v6; + dh = -dm; + } + if (ta6b >= 0 && td6b >= 0 && ::std::abs(t6b) < ::std::abs(t) && ::std::abs(v6) < ::std::abs(vh)) + { + t = t6b; + ta = ta6b; + tc = 0; + td = td6b; + ah = -am; + vh = -v6; + dh = -dm; + } + // -am, -vm, -dm + if (ta7a >= 0 && td7a >= 0 && ::std::abs(t7a) < ::std::abs(t) && ::std::abs(v7) < ::std::abs(vh)) + { + t = t7a; + ta = ta7a; + tc = 0; + td = td7a; + ah = -am; + vh = -v7; + dh = dm; + } + if (ta7b >= 0 && td7b >= 0 && ::std::abs(t7b) < ::std::abs(t) && ::std::abs(v7) < ::std::abs(vh)) + { + t = t7b; + ta = ta7b; + tc = 0; + td = td7b; + ah = -am; + vh = v7; + dh = dm; + } + // -am, -vm, dm + if (ta8a >= 0 && td8a >= 0 && ::std::abs(t8a) < ::std::abs(t) && ::std::abs(v8) < ::std::abs(vh)) + { + t = t8a; + ta = ta8a; + tc = 0; + td = td8a; + ah = -am; + vh = -v8; + dh = -dm; + } + if (ta8b >= 0 && td8b >= 0 && ::std::abs(t8b) < ::std::abs(t) && ::std::abs(v8) < ::std::abs(vh)) + { + t = t8b; + ta = ta8b; + tc = 0; + td = td8b; + ah = -am; + vh = v8; + dh = -dm; + } + } + + void interpolate(const Real& t) + { + T x = xe - x0; + + T v1a = (dm * v0 + am * ve + t * am * dm + ::std::sqrt( 2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - dm * am * ve * ve - 2 * x * am * dm * dm - am * dm * v0 * v0 - 2 * x * am * am * dm)) / ( dm + am); + T v1b = (dm * v0 + am * ve + t * am * dm - ::std::sqrt( 2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - dm * am * ve * ve - 2 * x * am * dm * dm - am * dm * v0 * v0 - 2 * x * am * am * dm)) / ( dm + am); + T v2a; + T v2b; + T v3a = -(dm * v0 + am * ve + t * am * dm - ::std::sqrt( 2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - am * dm * v0 * v0 - 2 * x * am * am * dm - dm * am * ve * ve - 2 * x * am * dm * dm)) / ( am + dm); + T v3b = -(dm * v0 + am * ve + t * am * dm + ::std::sqrt( 2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - am * dm * v0 * v0 - 2 * x * am * am * dm - dm * am * ve * ve - 2 * x * am * dm * dm)) / ( am + dm); + T v4a; + T v4b; + T v5a; + T v5b; + T v6a = (dm * v0 + am * ve - t * am * dm + ::std::sqrt( 2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - dm * am * ve * ve + 2 * x * am * dm * dm - am * dm * v0 * v0 + 2 * x * am * am * dm)) / ( dm + am); + T v6b = (dm * v0 + am * ve - t * am * dm - ::std::sqrt( 2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - dm * am * ve * ve + 2 * x * am * dm * dm - am * dm * v0 * v0 + 2 * x * am * am * dm)) / ( dm + am); + T v7a; + T v7b; + T v8a = -(dm * v0 + am * ve - t * am * dm - ::std::sqrt( 2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - am * dm * v0 * v0 + 2 * x * am * am * dm - dm * am * ve * ve + 2 * x * am * dm * dm)) / ( am + dm); + T v8b = -(dm * v0 + am * ve - t * am * dm + ::std::sqrt( 2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm - am * dm * v0 * v0 + 2 * x * am * am * dm - dm * am * ve * ve + 2 * x * am * dm * dm)) / ( am + dm); + + if (::std::abs(am - dm) <= ::std::numeric_limits::epsilon()) + { + v2a = ( v0 * v0 - ve * ve + 2 * x * am) / ( t * am + v0 - ve) / 2; + v2b = ( v0 * v0 - ve * ve + 2 * x * am) / ( t * am + v0 - ve) / 2; + v4a = -( v0 * v0 - ve * ve + 2 * x * am) / ( t * am + v0 - ve) / 2; + v4b = -( v0 * v0 - ve * ve + 2 * x * am) / ( t * am + v0 - ve) / 2; + v5a = -(-v0 * v0 + ve * ve + 2 * x * am) / (-t * am + v0 - ve) / 2; + v5b = -(-v0 * v0 + ve * ve + 2 * x * am) / (-t * am + v0 - ve) / 2; + v7a = (-v0 * v0 + ve * ve + 2 * x * am) / (-t * am + v0 - ve) / 2; + v7b = (-v0 * v0 + ve * ve + 2 * x * am) / (-t * am + v0 - ve) / 2; + } + else + { + v2a = -(dm * v0 - am * ve + t * am * dm - ::std::sqrt(-2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + dm * am * ve * ve - 2 * x * am * dm * dm + am * dm * v0 * v0 + 2 * x * am * am * dm)) / (-dm + am); + v2b = -(dm * v0 - am * ve + t * am * dm + ::std::sqrt(-2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + dm * am * ve * ve - 2 * x * am * dm * dm + am * dm * v0 * v0 + 2 * x * am * am * dm)) / (-dm + am); + v4a = (dm * v0 - am * ve + t * am * dm + ::std::sqrt(-2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + am * dm * v0 * v0 + 2 * x * am * am * dm + dm * am * ve * ve - 2 * x * am * dm * dm)) / ( am - dm); + v4b = (dm * v0 - am * ve + t * am * dm - ::std::sqrt(-2 * dm * v0 * am * ve + 2 * dm * dm * v0 * t * am - 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + am * dm * v0 * v0 + 2 * x * am * am * dm + dm * am * ve * ve - 2 * x * am * dm * dm)) / ( am - dm); + v5a = -(dm * v0 - am * ve - t * am * dm - ::std::sqrt(-2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + dm * am * ve * ve + 2 * x * am * dm * dm + am * dm * v0 * v0 - 2 * x * am * am * dm)) / (-dm + am); + v5b = -(dm * v0 - am * ve - t * am * dm + ::std::sqrt(-2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + dm * am * ve * ve + 2 * x * am * dm * dm + am * dm * v0 * v0 - 2 * x * am * am * dm)) / (-dm + am); + v7a = (dm * v0 - am * ve - t * am * dm + ::std::sqrt(-2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + am * dm * v0 * v0 - 2 * x * am * am * dm + dm * am * ve * ve + 2 * x * am * dm * dm)) / ( am - dm); + v7b = (dm * v0 - am * ve - t * am * dm - ::std::sqrt(-2 * dm * v0 * am * ve - 2 * dm * dm * v0 * t * am + 2 * am * am * ve * t * dm + t * t * am * am * dm * dm + am * dm * v0 * v0 - 2 * x * am * am * dm + dm * am * ve * ve + 2 * x * am * dm * dm)) / ( am - dm); + } + + T ta1a = ( v1a - v0) / am; + T ta1b = ( v1b - v0) / am; + T ta2a = ( v2a - v0) / am; + T ta2b = ( v2b - v0) / am; + T ta3a = (-v3a - v0) / am; + T ta3b = (-v3b - v0) / am; + T ta4a = (-v4a - v0) / am; + T ta4b = (-v4b - v0) / am; + T ta5a = ( v5a - v0) / -am; + T ta5b = ( v5b - v0) / -am; + T ta6a = ( v6a - v0) / -am; + T ta6b = ( v6b - v0) / -am; + T ta7a = (-v7a - v0) / -am; + T ta7b = (-v7b - v0) / -am; + T ta8a = (-v8a - v0) / -am; + T ta8b = (-v8b - v0) / -am; + + T td1a = (ve - v1a) / -dm; + T td1b = (ve - v1b) / -dm; + T td2a = (ve - v2a) / dm; + T td2b = (ve - v2b) / dm; + T td3a = (ve + v3a) / -dm; + T td3b = (ve + v3b) / -dm; + T td4a = (ve + v4a) / dm; + T td4b = (ve + v4b) / dm; + T td5a = (ve - v5a) / -dm; + T td5b = (ve - v5b) / -dm; + T td6a = (ve - v6a) / dm; + T td6b = (ve - v6b) / dm; + T td7a = (ve + v7a) / -dm; + T td7b = (ve + v7b) / -dm; + T td8a = (ve + v8a) / dm; + T td8b = (ve + v8b) / dm; + + T tc1a = t - ta1a - td1a; + T tc1b = t - ta1b - td1b; + T tc2a = t - ta2a - td2a; + T tc2b = t - ta2b - td2b; + T tc3a = t - ta3a - td3a; + T tc3b = t - ta3b - td3b; + T tc4a = t - ta4a - td4a; + T tc4b = t - ta4b - td4b; + T tc5a = t - ta5a - td5a; + T tc5b = t - ta5b - td5b; + T tc6a = t - ta6a - td6a; + T tc6b = t - ta6b - td6b; + T tc7a = t - ta7a - td7a; + T tc7b = t - ta7b - td7b; + T tc8a = t - ta8a - td8a; + T tc8b = t - ta8b - td8b; + + T vh = vm; + + // am, vm, -dm + if (ta1a >= 0 && tc1a >= 0 && td1a >= 0 && ::std::abs(v1a) < ::std::abs(vh)) + { + ta = ta1a; + tc = tc1a; + td = td1a; + ah = am; + vh = v1a; + dh = dm; + } + if (ta1b >= 0 && tc1b >= 0 && td1b >= 0 && ::std::abs(v1b) < ::std::abs(vh)) + { + ta = ta1b; + tc = tc1b; + td = td1b; + ah = am; + vh = v1b; + dh = dm; + } + // am, vm, dm + if (ta2a >= 0 && tc2a >= 0 && td2a >= 0 && ::std::abs(v2a) < ::std::abs(vh)) + { + ta = ta2a; + tc = tc2a; + td = td2a; + ah = am; + vh = v2a; + dh = -dm; + } + if (ta2b >= 0 && tc2b >= 0 && td2b >= 0 && ::std::abs(v2b) < ::std::abs(vh)) + { + ta = ta2b; + tc = tc2b; + td = td2b; + ah = am; + vh = v2b; + dh = -dm; + } + // am, -vm, -dm + if (ta3a >= 0 && tc3a >= 0 && td3a >= 0 && ::std::abs(v3a) < ::std::abs(vh)) + { + ta = ta3a; + tc = tc3a; + td = td3a; + ah = am; + vh = -v3a; + dh = dm; + } + if (ta3b >= 0 && tc3b >= 0 && td3b >= 0 && ::std::abs(v3b) < ::std::abs(vh)) + { + ta = ta3b; + tc = tc3b; + td = td3b; + ah = am; + vh = -v3b; + dh = dm; + } + // am, -vm, dm + if (ta4a >= 0 && tc4a >= 0 && td4a >= 0 && ::std::abs(v4a) < ::std::abs(vh)) + { + ta = ta4a; + tc = tc4a; + td = td4a; + ah = am; + vh = -v4a; + dh = -dm; + } + if (ta4b >= 0 && tc4b >= 0 && td4b >= 0 && ::std::abs(v4b) < ::std::abs(vh)) + { + ta = ta4b; + tc = tc4b; + td = td4b; + ah = am; + vh = -v4b; + dh = -dm; + } + // -am, vm, -dm + if (ta5a >= 0 && tc5a >= 0 && td5a >= 0 && ::std::abs(v5a) < ::std::abs(vh)) + { + ta = ta5a; + tc = tc5a; + td = td5a; + ah = -am; + vh = v5a; + dh = dm; + } + if (ta5b >= 0 && tc5b >= 0 && td5b >= 0 && ::std::abs(v5b) < ::std::abs(vh)) + { + ta = ta5b; + tc = tc5b; + td = td5b; + ah = -am; + vh = v5b; + dh = dm; + } + // -am, vm, dm + if (ta6a >= 0 && tc6a >= 0 && td6a >= 0 && ::std::abs(v6a) < ::std::abs(vh)) + { + ta = ta6a; + tc = tc6a; + td = td6a; + ah = -am; + vh = v6a; + dh = -dm; + } + if (ta6b >= 0 && tc6b >= 0 && td6b >= 0 && ::std::abs(v6b) < ::std::abs(vh)) + { + ta = ta6b; + tc = tc6b; + td = td6b; + ah = -am; + vh = v6b; + dh = -dm; + } + // -am, -vm, -dm + if (ta7a >= 0 && tc7a >= 0 && td7a >= 0 && ::std::abs(v7a) < ::std::abs(vh)) + { + ta = ta7a; + tc = tc7a; + td = td7a; + ah = -am; + vh = -v7a; + dh = dm; + } + if (ta7b >= 0 && tc7b >= 0 && td7b >= 0 && ::std::abs(v7b) < ::std::abs(vh)) + { + ta = ta7b; + tc = tc7b; + td = td7b; + ah = -am; + vh = -v7b; + dh = dm; + } + // -am, -vm, dm + if (ta8a >= 0 && tc8a >= 0 && td8a >= 0 && ::std::abs(v8a) < ::std::abs(vh)) + { + ta = ta8a; + tc = tc8a; + td = td8a; + ah = -am; + vh = -v8a; + dh = -dm; + } + if (ta8b >= 0 && tc8b >= 0 && td8b >= 0 && ::std::abs(v8b) < ::std::abs(vh)) + { + ta = ta8b; + tc = tc8b; + td = td8b; + ah = -am; + vh = -v8b; + dh = -dm; + } + } + + T t() const + { + return ta + tc + td; + } + + T v(const Real& t) const + { + if (t < ta) + { + return v0 + ah * t; + } + else if (t < ta + tc) + { + return v0 + ah * ta; + } + else if (t < ta + tc + td) + { + return v0 + ah * ta - dh * t + dh * (ta + tc); + } + else + { + return ve; + } + } + + T x(const Real& t) const + { + if (t < ta) + { + return x0 + v0 * t + 0.5 * ah * ::std::pow(t, 2); + } + else if (t < ta + tc) + { + return x0 + v0 * t - 0.5 * ah * ::std::pow(ta, 2) + ah * ta * t; + } + else if (t < ta + tc + td) + { + return x0 + v0 * t - 0.5 * ah * ::std::pow(ta, 2) + ah * ta * t - 0.5 * dh * ::std::pow(ta + tc, 2) - 0.5 * dh * ::std::pow(t, 2) + dh * (ta + tc) * t; + } + else + { + return xe + ve * (t - ta - tc - td); + } + } + + T am; + + T dm; + + T x0; + + T xe; + + T v0; + + T ve; + + T vm; + + protected: + + private: + T ah; + + T dh; + + Real ta; + + Real tc; + + Real td; + }; + } +} + +#endif // _RL_MATH_TRAPEZOIDALVELOCITY_H_ diff --git a/src/rl/math/Unit.h b/src/rl/math/Unit.h new file mode 100644 index 00000000..d04bd651 --- /dev/null +++ b/src/rl/math/Unit.h @@ -0,0 +1,244 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_UNIT_H_ +#define _RL_MATH_UNIT_H_ + +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + /** + *

SI base units

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
NameSymbolMeasure
metermlength
kilogramkgmass
secondstime
ampereAelectric current
kelvinKthermodynamic temperature
molemolquantity of matter (mass/mass)
candelacdluminous intensity
+ * + *

SI derived units

+ * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
NameSymbolQuantityExpression in terms of SI base units
radianradAngle
hertzHzfrequencys-1
newtonNForce, Weightm · kg · s-2
voltVElectrical potential difference, Electromotive forcem2 · kg · s-3 · A-1
degree Celsius@htmlonly °C @endhtmlonlyThermodynamic temperatureTºC = TK - 273.16
meter per secondm · s-1speed, velocitym · s-1
meter per second squaredm · s-2accelerationm · s-2
radian per secondrad · s-1angular velocitys-1
newton secondN · smomentum, impulsekg · m · s-1
newton meter secondN · m · sangular momentumkg · m2 · s-1
newton meterN · mTorque, moment of forcekg · m2 · s-2
+ */ + enum Unit + { + UNIT_NONE, + UNIT_METER, + UNIT_KILOGRAM, + UNIT_SECOND, + UNIT_AMPERE, + UNIT_KELVIN, + UNIT_MOLE, + UNIT_CANDELA, + UNIT_RADIAN, + UNIT_HERTZ, + UNIT_NEWTON, + UNIT_VOLT, + UNIT_CELSIUS, + UNIT_METER_PER_SECOND, + UNIT_METER_PER_SECOND_SQUARED, + UNIT_RADIAN_PER_SECOND, + UNIT_RADIAN_PER_SECOND_SQUARED, + UNIT_NEWTON_SECOND, + UNIT_NEWTON_METER_SECOND, + UNIT_NEWTON_METER + }; + + static const Real DEG2RAD = static_cast< Real >(M_PI) / 180.0f; + + static const Real GIGA2UNIT = 1.0e+9f; + + /** [m · s-2] */ + static const Real GRAVITY = 9.80665f; + + static const Real KILO2UNIT = 1.0e+3f; + + static const Real MEGA2UNIT = 1.0e+6f; + + static const Real MICRO2UNIT = 1.0e-6f; + + static const Real MILLI2UNIT = 1.0e-3f; + + static const Real NANO2UNIT = 1.0e-9f; + + static const Real RAD2DEG = 180.0f / static_cast< Real >(M_PI); + + static const Real UNIT2GIGA = 1.0e-9f; + + static const Real UNIT2KILO = 1.0e-3f; + + static const Real UNIT2MEGA = 1.0e-6f; + + static const Real UNIT2MICRO = 1.0e+6f; + + static const Real UNIT2MILLI = 1.0e+3f; + + static const Real UNIT2NANO = 1.0e+9f; + + inline void cartesianToPolar(const Real& x, const Real& y, Real& r, Real& theta) + { + r = ::std::sqrt(::std::pow(x, 2) + ::std::pow(y, 2)); + theta = ::std::atan2(y, x); + } + + inline void cartesianToSpherical(const Real& x, const Real& y, const Real& z, Real& rho, Real& psi, Real& theta) + { + rho = ::std::sqrt(::std::pow(x, 2) + ::std::pow(y, 2) + ::std::pow(z, 2)); + psi = ::std::atan2(::std::sqrt(::std::pow(x, 2) + ::std::pow(y, 2)), z); + theta = ::std::atan2(y, x); + } + + inline void polarToCartesian(const Real& r, const Real& theta, Real& x, Real& y) + { + x = r * ::std::cos(theta); + y = r * ::std::sin(theta); + } + + inline void sphericalToCartesian(const Real& rho, const Real& psi, const Real& theta, Real& x, Real& y, Real& z) + { + x = rho * ::std::sin(psi) * ::std::cos(theta); + y = rho * ::std::sin(psi) * ::std::sin(theta); + z = rho * ::std::cos(psi); + } + } +} + +#endif // _RL_MATH_UNIT_H_ diff --git a/src/rl/math/Vector.h b/src/rl/math/Vector.h new file mode 100644 index 00000000..044a030e --- /dev/null +++ b/src/rl/math/Vector.h @@ -0,0 +1,73 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MATH_VECTOR_H_ +#define _RL_MATH_VECTOR_H_ + +#define EIGEN_MATRIXBASE_PLUGIN +#define EIGEN_QUATERNIONBASE_PLUGIN + +#include + +#include "Real.h" + +namespace rl +{ + namespace math + { + typedef ::Eigen::Matrix< Real, ::Eigen::Dynamic, 1 > Vector; + + typedef ::Eigen::Matrix< Real, 2, 1 > Vector2; + + typedef ::Eigen::Matrix< Real, 3, 1 > Vector3; + + typedef ::Eigen::Matrix< Real, 4, 1 > Vector4; + + typedef ::Eigen::Matrix< Real, 6, 1 > Vector6; + + typedef ::Eigen::VectorBlock< Vector, ::Eigen::Dynamic > VectorBlock; + + typedef ::Eigen::VectorBlock< Vector2, ::Eigen::Dynamic > Vector2Block; + + typedef ::Eigen::VectorBlock< Vector3, ::Eigen::Dynamic > Vector3Block; + + typedef ::Eigen::VectorBlock< Vector4, ::Eigen::Dynamic > Vector4Block; + + typedef ::Eigen::VectorBlock< Vector6, ::Eigen::Dynamic > Vector6Block; + + typedef ::Eigen::VectorBlock< const Vector, ::Eigen::Dynamic > ConstVectorBlock; + + typedef ::Eigen::VectorBlock< const Vector2, ::Eigen::Dynamic > ConstVector2Block; + + typedef ::Eigen::VectorBlock< const Vector3, ::Eigen::Dynamic > ConstVector3Block; + + typedef ::Eigen::VectorBlock< const Vector4, ::Eigen::Dynamic > ConstVector4Block; + + typedef ::Eigen::VectorBlock< const Vector6, ::Eigen::Dynamic > ConstVector6Block; + } +} + +#endif // _RL_MATH_VECTOR_H_ diff --git a/src/rl/math/dummy.cpp b/src/rl/math/dummy.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/rl/mdl/Body.cpp b/src/rl/mdl/Body.cpp new file mode 100644 index 00000000..9d323805 --- /dev/null +++ b/src/rl/mdl/Body.cpp @@ -0,0 +1,138 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Body.h" + +namespace rl +{ + namespace mdl + { + Body::Body() : + Frame(), + c(), + collision(true), + fX(), + ic(), + m(1), + selfcollision() + { + this->c.setZero(); // TODO + this->fX.setZero(); // TODO + this->ic.setIdentity(); // TODO + } + + Body::~Body() + { + } + + void + Body::forwardAcceleration() + { + } + + void + Body::forwardDynamics1() + { + this->iA = this->i; + + // v x I * v - X_0 * f^x + this->pA = this->v.cross(this->i * this->v) - this->x * this->fX; + } + + void + Body::forwardDynamics2() + { + } + + void + Body::forwardDynamics3() + { + } + + void + Body::forwardPosition() + { + } + + void + Body::forwardVelocity() + { + } + + void + Body::inverseDynamics1() + { + // I * a + v x I * v - X_0 * f^x + this->f = this->i * this->a + this->v.cross(this->i * this->v) - this->x * this->fX; + } + + void + Body::inverseDynamics2() + { + } + + void + Body::setCenterOfMass(const ::rl::math::Real& x, const ::rl::math::Real& y, const ::rl::math::Real& z) + { + this->c.x() = x; + this->c.y() = y; + this->c.z() = z; + + // m * c + this->i.cog() = this->m * this->c; + + // Ic - m * cx * cx + this->i.inertia() = this->ic - this->m * this->c.cross33() * this->c.cross33(); + } + + void + Body::setMass(const ::rl::math::Real& m) + { + this->m = m; + + this->i.mass() = m; + + // m * c + this->i.cog() = this->m * this->c; + + // Ic - m * cx * cx + this->i.inertia() = this->ic - this->m * this->c.cross33() * this->c.cross33(); // TODO + } + + void + Body::setInertia(const ::rl::math::Real& xx, const ::rl::math::Real& yy, const ::rl::math::Real& zz, const ::rl::math::Real& yz, const ::rl::math::Real& xz, const ::rl::math::Real& xy) + { + ::rl::math::Vector6 ic; + ic << xx, yy, zz, yz, xz, xy; + this->ic = ic.voigt33(); + + // Ic - m * cx * cx + this->i.inertia() = this->ic - this->m * this->c.cross33() * this->c.cross33(); + } + } +} diff --git a/src/rl/mdl/Body.h b/src/rl/mdl/Body.h new file mode 100644 index 00000000..988174fe --- /dev/null +++ b/src/rl/mdl/Body.h @@ -0,0 +1,91 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_BODY_H_ +#define _RL_MDL_BODY_H_ + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include "Frame.h" + +namespace rl +{ + namespace mdl + { + class Body : public Frame + { + public: + Body(); + + virtual ~Body(); + + void forwardAcceleration(); + + void forwardDynamics1(); + + void forwardDynamics2(); + + void forwardDynamics3(); + + void forwardPosition(); + + void forwardVelocity(); + + void inverseDynamics1(); + + void inverseDynamics2(); + + void setCenterOfMass(const ::rl::math::Real& x, const ::rl::math::Real& y, const ::rl::math::Real& z); + + void setMass(const ::rl::math::Real& m); + + void setInertia(const ::rl::math::Real& xx, const ::rl::math::Real& yy, const ::rl::math::Real& zz, const ::rl::math::Real& yz, const ::rl::math::Real& xz, const ::rl::math::Real& xy); + + ::rl::math::Vector3 c; + + bool collision; + + ::rl::math::ForceVector fX; + + ::rl::math::Matrix33 ic; + + ::rl::math::Real m; + + ::std::tr1::unordered_set< Body* > selfcollision; + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_BODY_H_ diff --git a/src/rl/mdl/CMakeLists.txt b/src/rl/mdl/CMakeLists.txt new file mode 100644 index 00000000..c79aed26 --- /dev/null +++ b/src/rl/mdl/CMakeLists.txt @@ -0,0 +1,96 @@ +project(rlmdl) + +find_package(Boost REQUIRED) + +set( + HDRS + Body.h + Compound.h + Cylindrical.h + Dynamic.h + Element.h + Exception.h + Factory.h + Fixed.h + Frame.h + Helical.h + Joint.h + Kinematic.h + Metric.h + Model.h + Prismatic.h + Revolute.h + Spherical.h + Transform.h + World.h + XmlFactory.h +) +set( + SRCS + Body.cpp + Compound.cpp + Cylindrical.cpp + Dynamic.cpp + Element.cpp + Exception.cpp + Fixed.cpp + Factory.cpp + Frame.cpp + Helical.cpp + Joint.cpp + Kinematic.cpp + Metric.cpp + Model.cpp + Prismatic.cpp + Revolute.cpp + Spherical.cpp + Transform.cpp + World.cpp + XmlFactory.cpp +) + +if(WIN32) + add_library( + rlmdl + STATIC + ${HDRS} + ${SRCS} + ) +else(WIN32) + add_library( + rlmdl + SHARED + ${HDRS} + ${SRCS} + ) +endif(WIN32) + +target_include_directories( + rlmdl + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlmdl + rlmath + rlxml +) + +set_target_properties( + rlmdl + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/mdl COMPONENT headers) + +install( + TARGETS rlmdl + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/mdl/Compound.cpp b/src/rl/mdl/Compound.cpp new file mode 100644 index 00000000..fb708b7a --- /dev/null +++ b/src/rl/mdl/Compound.cpp @@ -0,0 +1,77 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Compound.h" +#include "Frame.h" +#include "Transform.h" + +namespace rl +{ + namespace mdl + { + Compound::Compound(Model* model) : + inFrame(NULL), + inTransform(NULL), + outFrame(NULL), + outTransform(NULL), + model(model), + tree( + model->tree, + ::boost::get(::boost::edge_weight, model->tree), + ::boost::get(::boost::vertex_color, model->tree) + ) + { + } + + Compound::~Compound() + { + } + + void + Compound::add(Frame* frame) + { + frame->compound = this; + } + + void + Compound::add(Transform* transform, const Frame* a, const Frame* b) + { + transform->compound = this; + } + + void + Compound::remove(Frame* frame) + { + frame->compound = NULL; + } + + void + Compound::remove(Transform* transform) + { + transform->compound = NULL; + } + } +} diff --git a/src/rl/mdl/Compound.h b/src/rl/mdl/Compound.h new file mode 100644 index 00000000..d567fb77 --- /dev/null +++ b/src/rl/mdl/Compound.h @@ -0,0 +1,122 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_COMPOUND_H_ +#define _RL_MDL_COMPOUND_H_ + +#include + +#include "Model.h" + +namespace rl +{ + namespace mdl + { + class Frame; + class Transform; + + class Compound + { + public: + Compound(Model* model); + + virtual ~Compound(); + + void add(Frame* frame); + + void add(Transform* transform, const Frame* a, const Frame* b); + + void remove(Frame* frame); + + void remove(Transform* transform); + + Frame* inFrame; + + Transform* inTransform; + + Frame* outFrame; + + Transform* outTransform; + + protected: + + private: + typedef ::boost::property_map< Model::Tree, ::boost::edge_weight_t>::type EdgeWeightMapType; + + typedef ::boost::property_map< Model::Tree, ::boost::vertex_color_t>::type VertexColorMapType; + + template< typename EdgeWeightMap > + struct EdgePredicate + { + EdgePredicate() + { + } + + EdgePredicate(const EdgeWeightMap& weight) : + weight(weight) + { + } + + template< typename Edge > + bool operator()(const Edge& e) const + { + return this == get(weight, e); + } + + EdgeWeightMap weight; + }; + + template< typename VertexColorMap > + struct VertexPredicate + { + VertexPredicate() + { + } + + VertexPredicate(const VertexColorMap& color) : + color(color) + { + } + + template< typename Vertex > + bool operator()(const Vertex& v) const + { + return this == get(color, v); + } + + VertexColorMap color; + }; + + typedef ::boost::filtered_graph< Model::Tree, EdgePredicate< EdgeWeightMapType >, VertexPredicate< VertexColorMapType > > Tree; + + Model* model; + + Tree tree; + }; + } +} + +#endif // _RL_MDL_COMPOUND_H_ diff --git a/src/rl/mdl/Cylindrical.cpp b/src/rl/mdl/Cylindrical.cpp new file mode 100644 index 00000000..5603701f --- /dev/null +++ b/src/rl/mdl/Cylindrical.cpp @@ -0,0 +1,66 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Cylindrical.h" + +namespace rl +{ + namespace mdl + { + Cylindrical::Cylindrical() : + Joint(2, 2) + { + this->qUnits(0) = ::rl::math::UNIT_RADIAN; + this->qUnits(1) = ::rl::math::UNIT_METER; + this->qdUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->qdUnits(1) = ::rl::math::UNIT_METER_PER_SECOND; + this->qddUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND_SQUARED; + this->qddUnits(1) = ::rl::math::UNIT_METER_PER_SECOND_SQUARED; + this->S(2, 0) = 1; + this->S(5, 1) = 1; + this->speedUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->speedUnits(1) = ::rl::math::UNIT_METER_PER_SECOND; + this->tauUnits(0) = ::rl::math::UNIT_NEWTON_METER; + this->tauUnits(1) = ::rl::math::UNIT_NEWTON; + } + + Cylindrical::~Cylindrical() + { + } + + void + Cylindrical::setPosition(const ::rl::math::Vector& q) + { + this->q = q; + this->t = ::rl::math::AngleAxis(this->q(0) + this->offset(0), this->S.block< 3, 1 >(0, 0)); + this->x.rotation() = this->t.linear().transpose(); + this->t.translation() = this->S.block< 3, 1 >(3, 1) * (this->q(1) + this->offset(1)); + this->x.translation() = this->t.translation(); + } + } +} diff --git a/src/rl/mdl/Cylindrical.h b/src/rl/mdl/Cylindrical.h new file mode 100644 index 00000000..593393c1 --- /dev/null +++ b/src/rl/mdl/Cylindrical.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_CYLINDRICAL_H_ +#define _RL_MDL_CYLINDRICAL_H_ + +#include "Joint.h" + +namespace rl +{ + namespace mdl + { + class Cylindrical : public Joint + { + public: + Cylindrical(); + + virtual ~Cylindrical(); + + void setPosition(const ::rl::math::Vector& q); + + protected: + + private: + ::rl::math::Real h; + }; + } +} + +#endif // _RL_MDL_CYLINDRICALL_H_ diff --git a/src/rl/mdl/Dynamic.cpp b/src/rl/mdl/Dynamic.cpp new file mode 100644 index 00000000..a6451309 --- /dev/null +++ b/src/rl/mdl/Dynamic.cpp @@ -0,0 +1,390 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +#include "Exception.h" +#include "Dynamic.h" +#include "Prismatic.h" +#include "Revolute.h" +#include "World.h" + +namespace rl +{ + namespace mdl + { + Dynamic::Dynamic() : + Kinematic(), + G(), + invM(), + invMx(), + M(), + V() + { + } + + Dynamic::~Dynamic() + { + } + + void + Dynamic::calculateCentrifugalCoriolis() + { + this->calculateCentrifugalCoriolis(this->V); + } + + void + Dynamic::calculateCentrifugalCoriolis(::rl::math::Vector& V) + { + ::rl::math::Vector g(3); + this->getWorldGravity(g); + + ::rl::math::Vector tmp(this->getDof()); + tmp.setZero(); //TODO + + this->setAcceleration(tmp); + this->setWorldGravity(0, 0, 0); + + this->inverseDynamics(); + this->getTorque(V); + + this->setWorldGravity(g); + } + + void + Dynamic::calculateGravity() + { + this->calculateGravity(this->G); + } + + void + Dynamic::calculateGravity(::rl::math::Vector& G) + { + ::rl::math::Vector tmp(this->getDof()); + tmp.setZero(); //TODO + + this->setVelocity(tmp); + this->setAcceleration(tmp); + + this->inverseDynamics(); + this->getTorque(G); + } + + void + Dynamic::calculateMassMatrix() + { + this->calculateMassMatrix(this->M); + } + + void + Dynamic::calculateMassMatrix(::rl::math::Matrix& M) + { + ::rl::math::Vector g(3); + this->getWorldGravity(g); + + ::rl::math::Vector tmp(this->getDof()); + tmp.setZero(); //TODO + + this->setVelocity(tmp); + this->setWorldGravity(0, 0, 0); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + for (::std::size_t j = 0; j < this->getDof(); ++j) + { + tmp(j) = i == j ? 1 : 0; + } + + this->setAcceleration(tmp); + this->inverseDynamics(); + this->getTorque(tmp); + + M.col(i) = tmp; + } + + this->setWorldGravity(g); + } + + void + Dynamic::calculateMassMatrixInverse() + { + this->calculateMassMatrixInverse(this->invM); + } + + void + Dynamic::calculateMassMatrixInverse(::rl::math::Matrix& invM) + { + ::rl::math::Vector g(3); + this->getWorldGravity(g); + + ::rl::math::Vector tmp(this->getDof()); + tmp.setZero(); //TODO + + this->setVelocity(tmp); + this->setWorldGravity(0, 0, 0); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + for (::std::size_t j = 0; j < this->getDof(); ++j) + { + tmp(j) = i == j ? 1 : 0; + } + + this->setTorque(tmp); + this->forwardDynamics(); + this->getAcceleration(tmp); + + invM.col(i) = tmp; + } + + this->setWorldGravity(g); + } + + void + Dynamic::calculateOperationalMassMatrixInverse() + { + this->calculateOperationalMassMatrixInverse(this->J, this->invM, this->invMx); + } + + void + Dynamic::calculateOperationalMassMatrixInverse(const ::rl::math::Matrix& J, const ::rl::math::Matrix& invM, ::rl::math::Matrix& invMx) const + { + invMx = J * invM * J.transpose(); // TODO + } + + Model* + Dynamic::clone() const + { + return new Dynamic(*this); + } + + void + Dynamic::eulerCauchy(const ::rl::math::Real& dt) + { + ::rl::math::Vector y(this->getDofPosition()); + this->getPosition(y); + ::rl::math::Vector dy(this->getDof()); + this->getVelocity(dy); + + this->forwardDynamics(); + + // f + ::rl::math::Vector f(this->getDof()); + this->getAcceleration(f); + + // y_0 + dy_0 * dt + y += dt * dy; // TODO + // dy_0 + f * dt + dy += dt * f; // TODO + + this->setPosition(y); + this->setVelocity(dy); + this->setAcceleration(f); + } + + void + Dynamic::forwardDynamics() + { + for (::std::vector< Element* >::iterator i = this->elements.begin(); i != this->elements.end(); ++i) + { + (*i)->forwardDynamics1(); + } + + for (::std::vector< Element* >::reverse_iterator i = this->elements.rbegin(); i != this->elements.rend(); ++i) + { + (*i)->forwardDynamics2(); + } + + for (::std::vector< Element* >::iterator i = this->elements.begin(); i != this->elements.end(); ++i) + { + (*i)->forwardDynamics3(); + } + } + + const ::rl::math::Vector& + Dynamic::getCentrifugalCoriolis() const + { + return this->V; + } + + const ::rl::math::Vector& + Dynamic::getGravity() const + { + return this->G; + } + + const ::rl::math::Matrix& + Dynamic::getMassMatrixInverse() const + { + return this->invM; + } + + const ::rl::math::Matrix& + Dynamic::getMassMatrix() const + { + return this->M; + } + + const ::rl::math::Matrix& + Dynamic::getOperationalMassMatrixInverse() const + { + return this->invMx; + } + + void + Dynamic::getWorldGravity(::rl::math::Real& x, ::rl::math::Real& y, ::rl::math::Real& z) const + { + dynamic_cast< World* >(this->tree[this->root].get())->getGravity(x, y, z); + } + + void + Dynamic::getWorldGravity(::rl::math::Vector& xyz) const + { + this->getWorldGravity(xyz(0), xyz(1), xyz(2)); + } + + void + Dynamic::inverseDynamics() + { + for (::std::vector< Element* >::iterator i = this->elements.begin(); i != this->elements.end(); ++i) + { + (*i)->inverseDynamics1(); + } + + for (::std::vector< Element* >::reverse_iterator i = this->elements.rbegin(); i != this->elements.rend(); ++i) + { + (*i)->inverseDynamics2(); + } + } + + void + Dynamic::inverseForce() + { + for (::std::vector< Element* >::reverse_iterator i = this->elements.rbegin(); i != this->elements.rend(); ++i) + { + (*i)->inverseForce(); + } + } + + void + Dynamic::rungeKuttaNystrom(const ::rl::math::Real& dt) + { + ::rl::math::Vector y0(this->getDofPosition()); + this->getPosition(y0); + ::rl::math::Vector dy0(this->getDof()); + this->getVelocity(dy0); + + ::rl::math::Vector y(this->getDofPosition()); + ::rl::math::Vector dy(this->getDof()); + ::rl::math::Vector f(this->getDof()); + + this->forwardDynamics(); + + // dt / 2 * f + ::rl::math::Vector k1(this->getDof()); + this->getAcceleration(f); + k1 = dt / 2 * f; + + // y_0 + dt / 2 * dy_0 + dt / 4 * k_1 + y = y0 + dt / 2 * dy0 + dt / 4 * k1; // TODO + // dy_0 + k1 + dy = dy0 + k1; + + this->setPosition(y); + this->setVelocity(dy); + this->forwardDynamics(); + + // dt / 2 * f + ::rl::math::Vector k2(this->getDof()); + this->getAcceleration(k2); + k2 *= dt / 2; + + // dy_0 + k_2 + dy = dy0 + k2; + + this->setVelocity(dy); + this->forwardDynamics(); + + // dt / 2 * f + ::rl::math::Vector k3(this->getDof()); + this->getAcceleration(k3); + k3 *= dt / 2; + + // y_0 + dt * dy_0 + dt * k_3 + y = y0 + dt * dy0 + dt * k3; // TODO + // dy_0 + 2 * k_3 + dy = dy0 + 2 * k3; + + this->setPosition(y); + this->setVelocity(dy); + this->forwardDynamics(); + + // dt / 2 * f + ::rl::math::Vector k4(this->getDof()); + this->getAcceleration(k4); + k4 *= dt / 2; + + // y_0 + dy_0 * dt + dt / 3 * (k_1 + k_2 + k_3) + y = y0 + dy0 * dt + dt / 3 * (k1 + k2 + k3); // TODO + // dy_0 + 1 / 3 * (k_1 + 2 * k_2 + 2 * k_3 + k_4) + dy = dy0 + 1.0f / 3.0f * (k1 + 2 * k2 + 2 * k3 + k4); // TODO + + this->setPosition(y); + this->setVelocity(dy); + this->setAcceleration(f); + } + + void + Dynamic::setWorldGravity(const ::rl::math::Real& x, const ::rl::math::Real& y, const ::rl::math::Real& z) + { + dynamic_cast< World* >(this->tree[this->root].get())->setGravity(x, y, z); + } + + void + Dynamic::setWorldGravity(const ::rl::math::Vector& xyz) + { + this->setWorldGravity(xyz(0), xyz(1), xyz(2)); + } + + void + Dynamic::update() + { + Kinematic::update(); + + this->M.resize(this->getDof(), this->getDof()); + this->V.resize(this->getDof()); + this->G.resize(this->getDof()); + this->invM.resize(this->getDof(), this->getDof()); + this->invMx.resize(6 * this->getOperationalDof(), 6 * this->getOperationalDof()); + } + } +} diff --git a/src/rl/mdl/Dynamic.h b/src/rl/mdl/Dynamic.h new file mode 100644 index 00000000..30a138ab --- /dev/null +++ b/src/rl/mdl/Dynamic.h @@ -0,0 +1,189 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_DYNAMIC_H_ +#define _RL_MDL_DYNAMIC_H_ + +#include "Kinematic.h" + +namespace rl +{ + namespace mdl + { + class Dynamic : public Kinematic + { + public: + Dynamic(); + + virtual ~Dynamic(); + + void calculateCentrifugalCoriolis(); + + /** + * Calculate centrifugal and Coriolis vector. + * + * \pre setPosition() + * \pre setVelocity() + * + * \par Side Effects: + * inverseDynamics()\n\n + * setAcceleration()\n\n + * setGravity() + */ + void calculateCentrifugalCoriolis(::rl::math::Vector& V); + + void calculateGravity(); + + /** + * Calculate gravity vector. + * + * \pre setPosition() + * \pre setWorldGravity() + * + * \par Side Effects: + * inverseDynamics()\n\n + * setVelocity()\n\n + * setAcceleration() + */ + void calculateGravity(::rl::math::Vector& G); + + void calculateMassMatrix(); + + /** + * Calculate mass matrix. + * + * \pre setPosition() + * + * \par Side Effects: + * inverseDynamics()\n\n + * setAcceleration()\n\n + * setVelocity()\n\n + * setWorldGravity() + */ + void calculateMassMatrix(::rl::math::Matrix& M); + + void calculateMassMatrixInverse(); + + /** + * Calculate mass matrix inverse. + * + * \pre setPosition() + * + * \par Side Effects: + * forwardDynamics()\n\n + * setTorque()\n\n + * setVelocity()\n\n + * setWorldGravity() + */ + void calculateMassMatrixInverse(::rl::math::Matrix& invM); + + void calculateOperationalMassMatrixInverse(); + + /** + * Calculate operational space mass matrix inverse. + */ + void calculateOperationalMassMatrixInverse(const ::rl::math::Matrix& J, const ::rl::math::Matrix& invM, ::rl::math::Matrix& invMx) const; + + Model* clone() const; + + /** + * Integrate with Euler-Cauchy. + * + * \pre setPosition() + * \pre setVelocity() + * \post getAcceleration() + * \post getPosition() + * \post getVelocity() + */ + void eulerCauchy(const ::rl::math::Real& dt); + + /** + * \pre setPosition() + * \pre setTorque() + * \pre setVelocity() + * \post getAcceleration() + */ + void forwardDynamics(); + + const ::rl::math::Vector& getCentrifugalCoriolis() const; + + const ::rl::math::Vector& getGravity() const; + + const ::rl::math::Matrix& getMassMatrixInverse() const; + + const ::rl::math::Matrix& getMassMatrix() const; + + const ::rl::math::Matrix& getOperationalMassMatrixInverse() const; + + void getWorldGravity(::rl::math::Real& x, ::rl::math::Real& y, ::rl::math::Real& z) const; + + void getWorldGravity(::rl::math::Vector& xyz) const; + + /** + * \pre setAcceleration() + * \pre setPosition() + * \pre setVelocity() + * \post getTorque() + */ + void inverseDynamics(); + + void inverseForce(); + + /** + * Integrate with Runge-Kutta-Nystrom. + * + * \pre setPosition() + * \pre setVelocity() + * \post getAcceleration() + * \post getPosition() + * \post getVelocity() + */ + void rungeKuttaNystrom(const ::rl::math::Real& dt); + + void setWorldGravity(const ::rl::math::Real& x, const ::rl::math::Real& y, const ::rl::math::Real& z); + + void setWorldGravity(const ::rl::math::Vector& xyz); + + virtual void update(); + + protected: + ::rl::math::Vector G; + + ::rl::math::Matrix invM; + + ::rl::math::Matrix invMx; + + ::rl::math::Matrix M; + + ::rl::math::Vector V; + + private: + + }; + } +} + +#endif // _RL_MDL_DYNAMIC_H_ diff --git a/src/rl/mdl/Element.cpp b/src/rl/mdl/Element.cpp new file mode 100644 index 00000000..0853d5d7 --- /dev/null +++ b/src/rl/mdl/Element.cpp @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Element.h" + +namespace rl +{ + namespace mdl + { + Element::Element() : + compound(NULL), + name() + { + } + + Element::~Element() + { + } + + const ::std::string& + Element::getName() const + { + return this->name; + } + + void + Element::setName(const ::std::string& name) + { + this->name = name; + } + } +} diff --git a/src/rl/mdl/Element.h b/src/rl/mdl/Element.h new file mode 100644 index 00000000..74c9f74f --- /dev/null +++ b/src/rl/mdl/Element.h @@ -0,0 +1,78 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_ELEMENT_H_ +#define _RL_MDL_ELEMENT_H_ + +#include +#include + +namespace rl +{ + namespace mdl + { + class Compound; + + class Element + { + public: + Element(); + + virtual ~Element(); + + virtual void forwardAcceleration() = 0; + + virtual void forwardDynamics1() = 0; + + virtual void forwardDynamics2() = 0; + + virtual void forwardDynamics3() = 0; + + virtual void forwardPosition() = 0; + + virtual void forwardVelocity() = 0; + + const ::std::string& getName() const; + + virtual void inverseDynamics1() = 0; + + virtual void inverseDynamics2() = 0; + + virtual void inverseForce() = 0; + + void setName(const ::std::string& name); + + Compound* compound; + + protected: + + private: + ::std::string name; + }; + } +} + +#endif // _RL_MDL_ELEMENT_H_ diff --git a/src/rl/mdl/Exception.cpp b/src/rl/mdl/Exception.cpp new file mode 100644 index 00000000..e857ffc7 --- /dev/null +++ b/src/rl/mdl/Exception.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Exception.h" + +namespace rl +{ + namespace mdl + { + Exception::Exception(const ::std::string& what_arg) : + ::std::runtime_error(what_arg) + { + } + + Exception::~Exception() throw() + { + } + } +} diff --git a/src/rl/mdl/Exception.h b/src/rl/mdl/Exception.h new file mode 100644 index 00000000..68fc608f --- /dev/null +++ b/src/rl/mdl/Exception.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_EXCEPTION_H_ +#define _RL_MDL_EXCEPTION_H_ + +#include + +namespace rl +{ + namespace mdl + { + class Exception : public ::std::runtime_error + { + public: + Exception(const ::std::string& what_arg); + + virtual ~Exception() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_EXCEPTION_H_ diff --git a/src/rl/mdl/Factory.cpp b/src/rl/mdl/Factory.cpp new file mode 100644 index 00000000..52f7e457 --- /dev/null +++ b/src/rl/mdl/Factory.cpp @@ -0,0 +1,50 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Dynamic.h" +#include "Factory.h" + +namespace rl +{ + namespace mdl + { + Factory::Factory() + { + } + + Factory::~Factory() + { + } + + Model* + Factory::create(const ::std::string& filename) + { + Model* model = new Dynamic(); + this->load(filename, model); + return model; + } + } +} diff --git a/src/rl/mdl/Factory.h b/src/rl/mdl/Factory.h new file mode 100644 index 00000000..66796132 --- /dev/null +++ b/src/rl/mdl/Factory.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_FACTORY_H_ +#define _RL_MDL_FACTORY_H_ + +#include + +namespace rl +{ + namespace mdl + { + class Model; + + class Factory + { + public: + Factory(); + + virtual ~Factory(); + + virtual Model* create(const ::std::string& filename); + + virtual void load(const ::std::string& filename, Model* model) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_FACTORY_H_ diff --git a/src/rl/mdl/Fixed.cpp b/src/rl/mdl/Fixed.cpp new file mode 100644 index 00000000..c1176813 --- /dev/null +++ b/src/rl/mdl/Fixed.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Fixed.h" + +namespace rl +{ + namespace mdl + { + Fixed::Fixed() : + Transform() + { + } + + Fixed::~Fixed() + { + } + } +} diff --git a/src/rl/mdl/Fixed.h b/src/rl/mdl/Fixed.h new file mode 100644 index 00000000..c3559adb --- /dev/null +++ b/src/rl/mdl/Fixed.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_FIXED_H_ +#define _RL_MDL_FIXED_H_ + +#include "Transform.h" + +namespace rl +{ + namespace mdl + { + class Fixed : public Transform + { + public: + Fixed(); + + virtual ~Fixed(); + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_FIXED_H_ diff --git a/src/rl/mdl/Frame.cpp b/src/rl/mdl/Frame.cpp new file mode 100644 index 00000000..6dcd3547 --- /dev/null +++ b/src/rl/mdl/Frame.cpp @@ -0,0 +1,121 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Frame.h" + +namespace rl +{ + namespace mdl + { + Frame::Frame() : + Element(), + a(), + c(), + f(), + i(), + iA(), + pA(), + t(), + v(), + x(), + descriptor() + { + this->a.setZero(); // TODO + this->c.setZero(); // TODO + this->f.setZero(); // TODO + this->i.setIdentity(); // TODO + this->iA.setIdentity(); // TODO + this->pA.setZero(); // TODO + this->t.setIdentity(); // TODO + this->v.setZero(); // TODO + this->x.setIdentity(); // TODO + } + + Frame::~Frame() + { + } + + void + Frame::forwardAcceleration() + { + } + + void + Frame::forwardDynamics1() + { + this->iA.setZero(); // TODO + this->pA.setZero(); // TODO + } + + void + Frame::forwardDynamics2() + { + } + + void + Frame::forwardDynamics3() + { + } + + void + Frame::forwardPosition() + { + } + + void + Frame::forwardVelocity() + { + } + + const Frame::Vertex& + Frame::getVertexDescriptor() const + { + return this->descriptor; + } + + void + Frame::inverseDynamics1() + { + this->f.setZero(); // TODO + } + + void + Frame::inverseDynamics2() + { + } + + void + Frame::inverseForce() + { + } + + void + Frame::setVertexDescriptor(const Vertex& descriptor) + { + this->descriptor = descriptor; + } + } +} diff --git a/src/rl/mdl/Frame.h b/src/rl/mdl/Frame.h new file mode 100644 index 00000000..f765fcd2 --- /dev/null +++ b/src/rl/mdl/Frame.h @@ -0,0 +1,107 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_FRAME_H_ +#define _RL_MDL_FRAME_H_ + +#include +#include +#include +#include + +#include "Element.h" + +namespace rl +{ + namespace mdl + { + class Frame : public Element + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef ::boost::adjacency_list< + ::boost::listS, + ::boost::listS, + ::boost::bidirectionalS, + ::boost::listS + > Tree; + + typedef Tree::vertex_descriptor Vertex; + + Frame(); + + virtual ~Frame(); + + virtual void forwardAcceleration(); + + virtual void forwardDynamics1(); + + virtual void forwardDynamics2(); + + virtual void forwardDynamics3(); + + virtual void forwardPosition(); + + virtual void forwardVelocity(); + + const Vertex& getVertexDescriptor() const; + + virtual void inverseDynamics1(); + + virtual void inverseDynamics2(); + + virtual void inverseForce(); + + void setVertexDescriptor(const Vertex& descriptor); + + ::rl::math::MotionVector a; + + ::rl::math::MotionVector c; + + ::rl::math::ForceVector f; + + ::rl::math::RigidBodyInertia i; + + ::rl::math::ArticulatedBodyInertia iA; + + ::rl::math::ForceVector pA; + + ::rl::math::Transform t; + + ::rl::math::MotionVector v; + + ::rl::math::PlueckerTransform x; + + protected: + + private: + Vertex descriptor; + }; + } +} + +#endif // _RL_MDL_FRAME_H_ diff --git a/src/rl/mdl/Helical.cpp b/src/rl/mdl/Helical.cpp new file mode 100644 index 00000000..adc43eea --- /dev/null +++ b/src/rl/mdl/Helical.cpp @@ -0,0 +1,76 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Helical.h" + +namespace rl +{ + namespace mdl + { + Helical::Helical() : + Joint(1, 1), + h(1) + { + this->qUnits(0) = ::rl::math::UNIT_NONE; // TODO + this->qdUnits(0) = ::rl::math::UNIT_NONE; // TODO + this->qddUnits(0) = ::rl::math::UNIT_NONE; // TODO + this->S(2, 0) = 1; + this->S(5, 0) = this->h; + this->speedUnits(0) = ::rl::math::UNIT_NONE; // TODO + this->tauUnits(0) = ::rl::math::UNIT_NONE; // TODO + } + + Helical::~Helical() + { + } + + ::rl::math::Real + Helical::getPitch() const + { + return this->h; + } + + void + Helical::setPitch(const ::rl::math::Real& h) + { + this->h = h; + this->t.translation() = this->S.block< 3, 1 >(3, 0) * this->h * (this->q(0) + this->offset(0)); + this->x.translation() = this->t.translation(); + } + + void + Helical::setPosition(const ::rl::math::Vector& q) + { + this->q = q; + this->t = ::rl::math::AngleAxis(this->q(0), this->S.block< 3, 1 >(0, 0)); + this->x.rotation() = this->t.linear().transpose(); + this->t.translation() = this->S.block< 3, 1 >(3, 0) * this->h * (this->q(0) + this->offset(0)); + this->x.translation() = this->t.translation(); + } + } +} diff --git a/src/rl/mdl/Helical.h b/src/rl/mdl/Helical.h new file mode 100644 index 00000000..7d568d7c --- /dev/null +++ b/src/rl/mdl/Helical.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_HELICAL_H_ +#define _RL_MDL_HELICAL_H_ + +#include "Joint.h" + +namespace rl +{ + namespace mdl + { + class Helical : public Joint + { + public: + Helical(); + + virtual ~Helical(); + + ::rl::math::Real getPitch() const; + + void setPitch(const ::rl::math::Real& h); + + void setPosition(const ::rl::math::Vector& q); + + protected: + + private: + ::rl::math::Real h; + }; + } +} + +#endif // _RL_MDL_HELICAL_H_ diff --git a/src/rl/mdl/Joint.cpp b/src/rl/mdl/Joint.cpp new file mode 100644 index 00000000..aebd65b1 --- /dev/null +++ b/src/rl/mdl/Joint.cpp @@ -0,0 +1,323 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Frame.h" +#include "Joint.h" + +namespace rl +{ + namespace mdl + { + Joint::Joint(const ::std::size_t& dofPosition, const ::std::size_t& dofVelocity) : + a(), + c(), + D(dofVelocity, dofVelocity), + max(dofPosition), + min(dofPosition), + offset(dofPosition), + q(dofPosition), + qUnits(dofPosition), + qd(dofVelocity), + qdUnits(dofVelocity), + qdd(dofVelocity), + qddUnits(dofVelocity), + S(6, dofVelocity), + speed(dofVelocity), + speedUnits(dofVelocity), + tau(dofVelocity), + tauUnits(dofVelocity), + u(dofVelocity), + U(6, dofVelocity), + v(), + wraparound(dofPosition) + { + this->a.setZero(); // TODO + this->c.setZero(); // TODO + this->D.setZero(); // TODO + this->max.setConstant(::std::numeric_limits< ::rl::math::Real >::max()); // TODO + this->min.setConstant(-::std::numeric_limits< ::rl::math::Real >::max()); // TODO + this->offset.setZero(); // TODO + this->q.setZero(); // TODO + this->qd.setZero(); // TODO + this->qdd.setZero(); // TODO + this->S.setZero(); // TODO + this->speed.setConstant(::std::numeric_limits< ::rl::math::Real >::max()); // TODO + this->tau.setZero(); // TODO + this->u.setZero(); // TODO + this->U.setZero(); // TODO + this->v.setZero(); // TODO + this->wraparound.setConstant(false); // TODO + } + + Joint::~Joint() + { + } + + void + Joint::clip(::rl::math::Vector& q) const + { + for (::std::size_t i = 0; i < this->getDofPosition(); ++i) + { + if (this->wraparound(i)) + { + ::rl::math::Real range = ::std::abs(this->max(i) - this->min(i)); + + while (q(i) > this->max(i)) + { + q(i) -= range; + } + + while (q(i) < this->min(i)) + { + q(i) += range; + } + } + else if (q(i) > this->max(i)) + { + q(i) = this->max(i); + } + else if (q(i) < this->min(i)) + { + q(i) = this->min(i); + } + } + } + + ::rl::math::Real + Joint::distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + return (q2 - q1).norm(); + } + + void + Joint::forwardAcceleration() + { + // X * a + aj + cj + v x vj + this->out->a = this->x * this->in->a + this->a + this->c + this->out->v.cross(this->v); + } + + void + Joint::forwardDynamics1() + { + this->forwardVelocity(); + // cj + v x vj + this->out->c = this->c + this->out->v.cross(this->v); + } + + void + Joint::forwardDynamics2() + { + // I^A * S + this->U = this->out->iA.matrix() * this->S; + // S^T * U + this->D = this->S.transpose() * this->U; + // tau - S^T * p^A + this->u = this->tau - this->S.transpose() * this->out->pA.matrix(); + // I^A - U * D^-1 * U^T + ::rl::math::ArticulatedBodyInertia ia; + ia = this->out->iA.matrix() - this->U * this->D.inverse() * this->U.transpose(); + // p^A + I^a * c + U * D^-1 * u + ::rl::math::ForceVector pa; + pa = this->out->pA + ia * this->out->c + this->U.matrix() * this->D.inverse() * this->u; + // I^A + X^* * I^a * X + this->in->iA = this->in->iA + this->x / ia; + // p^A + X^* * p^a + this->in->pA = this->in->pA + this->x / pa; + } + + void + Joint::forwardDynamics3() + { + // X * a + c + ::rl::math::MotionVector a; + a = this->x * this->in->a + this->out->c; + // D^-1 * (u - U^T * a') + this->qdd = this->D.inverse() * (this->u - this->U.transpose() * a.matrix()); + // S * qdd + this->a = this->S * this->qdd; + // a' + S * qdd + this->out->a = a + this->a; + } + + void + Joint::forwardVelocity() + { + // X * v + vj + this->out->v = this->x * this->in->v + this->v; + } + + const ::rl::math::Vector& + Joint::getAcceleration() const + { + return this->qdd; + } + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& + Joint::getAccelerationUnits() const + { + return this->qddUnits; + } + + ::std::size_t + Joint::getDof() const + { + return this->qd.size(); + } + + ::std::size_t + Joint::getDofPosition() const + { + return this->q.size(); + } + + const ::rl::math::Vector& + Joint::getMaximum() const + { + return this->max; + } + + const ::rl::math::Vector& + Joint::getMinimum() const + { + return this->min; + } + + const ::rl::math::Vector& + Joint::getPosition() const + { + return this->q; + } + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& + Joint::getPositionUnits() const + { + return this->qUnits; + } + + const ::rl::math::Vector& + Joint::getTorque() const + { + return this->tau; + } + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& + Joint::getTorqueUnits() const + { + return this->tauUnits; + } + + const ::rl::math::Vector& + Joint::getSpeed() const + { + return this->speed; + } + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& + Joint::getSpeedUnits() const + { + return this->speedUnits; + } + + const ::rl::math::Vector& + Joint::getVelocity() const + { + return this->qd; + } + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& + Joint::getVelocityUnits() const + { + return this->qdUnits; + } + + void + Joint::interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const + { + q = (1.0f - alpha) * q1 + alpha * q2; + } + + void + Joint::inverseForce() + { + // S^T * f + this->tau = this->S.transpose() * this->out->f.matrix(); + + // f + X * f + this->in->f = this->in->f + this->x / this->out->f; + } + + bool + Joint::isValid(const ::rl::math::Vector& q) const + { + for (::std::size_t i = 0; i < this->getDofPosition(); ++i) + { + if (q(i) < this->min(i) || q(i) > this->max(i)) + { + return false; + } + } + + return true; + } + + void + Joint::setAcceleration(const ::rl::math::Vector& qdd) + { + this->qdd = qdd; + + // S * qdd + this->a = this->S * this->qdd; + } + + void + Joint::setTorque(const ::rl::math::Vector& tau) + { + this->tau = tau; + } + + void + Joint::setVelocity(const ::rl::math::Vector& qd) + { + this->qd = qd; + + // S * qd + this->v = this->S * this->qd; + } + + void + Joint::step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const + { + q2 = q1 + qdot; + this->clip(q2); + } + + ::rl::math::Real + Joint::transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + return (q2 - q1).squaredNorm(); + } + } +} diff --git a/src/rl/mdl/Joint.h b/src/rl/mdl/Joint.h new file mode 100644 index 00000000..1547a3ce --- /dev/null +++ b/src/rl/mdl/Joint.h @@ -0,0 +1,156 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_JOINT_H_ +#define _RL_MDL_JOINT_H_ + +#include +#include + +#include "Transform.h" + +namespace rl +{ + namespace mdl + { + class Joint : public Transform + { + public: + Joint(const ::std::size_t& dofPosition, const ::std::size_t& dofVelocity); + + virtual ~Joint(); + + virtual void clip(::rl::math::Vector& q) const; + + virtual ::rl::math::Real distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + void forwardAcceleration(); + + void forwardDynamics1(); + + void forwardDynamics2(); + + void forwardDynamics3(); + + void forwardVelocity(); + + const ::rl::math::Vector& getAcceleration() const; + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& getAccelerationUnits() const; + + ::std::size_t getDof() const; + + ::std::size_t getDofPosition() const; + + const ::rl::math::Vector& getMaximum() const; + + const ::rl::math::Vector& getMinimum() const; + + const ::rl::math::Vector& getPosition() const; + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& getPositionUnits() const; + + const ::rl::math::Vector& getTorque() const; + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& getTorqueUnits() const; + + const ::rl::math::Vector& getSpeed() const; + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& getSpeedUnits() const; + + const ::rl::math::Vector& getVelocity() const; + + const ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& getVelocityUnits() const; + + virtual void interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const; + + void inverseForce(); + + virtual bool isValid(const ::rl::math::Vector& q) const; + + void setAcceleration(const ::rl::math::Vector& qdd); + + virtual void setPosition(const ::rl::math::Vector& q) = 0; + + void setTorque(const ::rl::math::Vector& tau); + + void setVelocity(const ::rl::math::Vector& qd); + + virtual void step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const; + + virtual ::rl::math::Real transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + ::rl::math::MotionVector a; + + ::rl::math::MotionVector c; + + ::rl::math::Matrix D; + + ::rl::math::Vector max; + + ::rl::math::Vector min; + + ::rl::math::Vector offset; + + ::rl::math::Vector q; + + ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > qUnits; + + ::rl::math::Vector qd; + + ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > qdUnits; + + ::rl::math::Vector qdd; + + ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > qddUnits; + + ::rl::math::Matrix S; + + ::rl::math::Vector speed; + + ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > speedUnits; + + ::rl::math::Vector tau; + + ::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > tauUnits; + + ::rl::math::Vector u; + + ::rl::math::Matrix U; + + ::rl::math::MotionVector v; + + ::Eigen::Matrix< bool, ::Eigen::Dynamic, 1 > wraparound; + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_JOINT_H_ diff --git a/src/rl/mdl/Kinematic.cpp b/src/rl/mdl/Kinematic.cpp new file mode 100644 index 00000000..3c5e8242 --- /dev/null +++ b/src/rl/mdl/Kinematic.cpp @@ -0,0 +1,310 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +#include "Exception.h" +#include "Kinematic.h" +#include "Prismatic.h" +#include "Revolute.h" + +namespace rl +{ + namespace mdl + { + Kinematic::Kinematic() : + Metric(), + invJ(), + J(), + Jdqd() + { + } + + Kinematic::~Kinematic() + { + } + + bool + Kinematic::calculateInversePosition(const ::rl::math::Transform& x, const ::std::size_t& leaf, const ::rl::math::Real& delta, const ::rl::math::Real& epsilon, const ::std::size_t& iterations) + { + ::rl::math::Vector q(this->getDofPosition()); + this->getPosition(q); + ::rl::math::Vector dq(this->getDofPosition()); + ::rl::math::Vector dx(6 * this->getOperationalDof()); + dx.setZero(); + + ::rl::math::Real norm = 1; + + for (::std::size_t i = 0; i < iterations && norm > epsilon; ++i) + { + this->forwardPosition(); + + ::rl::math::VectorBlock dxi = dx.segment(6 * leaf, 6); + ::rl::math::transform::toDelta(this->getOperationalPosition(leaf), x, dxi); + + this->calculateJacobian(); + this->calculateJacobianInverse(); + dq = this->invJ * dx; + + norm = dq.norm(); + + if (norm > delta) + { + dq *= delta / norm; + norm = dq.norm(); + } + + q += dq; + + this->setPosition(q); + } + + if (norm > epsilon) + { + return false; + } + + ::rl::math::Vector max(this->getDofPosition()); + this->getMaximum(max); + ::rl::math::Vector min(this->getDofPosition()); + this->getMinimum(min); + + for (::std::size_t i = 0; i < this->getDofPosition(); ++i) + { + q(i) = ::std::fmod(q(i), 2.0f * static_cast< ::rl::math::Real >(M_PI)); + + if (q(i) < min(i)) + { + q(i) += 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < min(i) || q(i) > max(i)) + { + return false; + } + } + else if (q(i) > max(i)) + { + q(i) -= 2.0f * static_cast< ::rl::math::Real >(M_PI); + + if (q(i) < min(i) || q(i) > max(i)) + { + return false; + } + } + } + + this->setPosition(q); + + return true; + } + + void + Kinematic::calculateJacobian() + { + this->calculateJacobian(this->J); + } + + void + Kinematic::calculateJacobian(::rl::math::Matrix& J) + { + assert(J.rows() == this->getOperationalDof() * 6); + assert(J.cols() == this->getDof()); + + ::rl::math::Vector tmp(this->getDof()); + + for (::std::size_t i = 0; i < this->getDof(); ++i) + { + for (::std::size_t j = 0; j < this->getDof(); ++j) + { + tmp(j) = i == j ? 1 : 0; + } + + this->setVelocity(tmp); + this->forwardVelocity(); + + for (::std::size_t j = 0; j < this->getOperationalDof(); ++j) + { + J.block(j * 6, i, 3, 1) = this->getOperationalVelocity(j).linear(); + J.block(j * 6 + 3, i, 3, 1) = this->getOperationalVelocity(j).angular(); +J.block(j * 6, i, 3, 1) = this->getOperationalPosition(j).linear() * this->getOperationalVelocity(j).linear(); // TODO +J.block(j * 6 + 3, i, 3, 1) = this->getOperationalPosition(j).linear() * this->getOperationalVelocity(j).angular(); // TODO + } + } + } + + void + Kinematic::calculateJacobianDerivative() + { + this->calculateJacobianDerivative(this->Jdqd); + } + + void + Kinematic::calculateJacobianDerivative(::rl::math::Vector& Jdqd) + { + ::rl::math::Vector tmp(this->getDof()); + tmp.setZero(); // TODO + + this->setAcceleration(tmp); + this->forwardVelocity(); + this->forwardAcceleration(); + + for (::std::size_t j = 0; j < this->getOperationalDof(); ++j) + { + Jdqd.segment(j * 6, 3) = this->getOperationalAcceleration(j).linear(); + Jdqd.segment(j * 6 + 3, 3) = this->getOperationalAcceleration(j).angular(); +Jdqd.segment(j * 6, 3) = this->getOperationalPosition(j).linear() * this->getOperationalAcceleration(j).linear(); // TODO +Jdqd.segment(j * 6 + 3, 3) = this->getOperationalPosition(j).linear() * this->getOperationalAcceleration(j).angular(); // TODO + } + } + + void + Kinematic::calculateJacobianInverse(const ::rl::math::Real& lambda, const bool& doSvd) + { + this->calculateJacobianInverse(this->J, this->invJ, lambda, doSvd); + } + + void + Kinematic::calculateJacobianInverse(const ::rl::math::Matrix& J, ::rl::math::Matrix& invJ, const ::rl::math::Real& lambda, const bool& doSvd) const + { + if (doSvd) + { + invJ.setZero(); + + ::Eigen::JacobiSVD< ::rl::math::Matrix > svd(J, ::Eigen::ComputeFullU | ::Eigen::ComputeFullV); + + ::rl::math::Real wMin = svd.singularValues().minCoeff(); + ::rl::math::Real lambdaSqr = wMin < 1.0e-9f ? (1 - ::std::pow((wMin / 1.0e-9f), 2)) * ::std::pow(lambda, 2) : 0; + + for (::std::ptrdiff_t i = 0; i < svd.nonzeroSingularValues(); ++i) + { + invJ.noalias() += ( + svd.singularValues()(i) / (::std::pow(svd.singularValues()(i), 2) + lambdaSqr) * + svd.matrixV().col(i) * svd.matrixU().col(i).transpose() + ); + } + } + else + { + invJ = J.transpose() * ( + J * J.transpose() + ::std::pow(lambda, 2) * + ::rl::math::Matrix::Identity(this->getOperationalDof() * 6, this->getOperationalDof() * 6) + ).inverse(); + } + } + + ::rl::math::Real + Kinematic::calculateManipulabilityMeasure() const + { + return calculateManipulabilityMeasure(this->J); + } + + ::rl::math::Real + Kinematic::calculateManipulabilityMeasure(const ::rl::math::Matrix& J) const + { + return ::std::sqrt((J * J.transpose()).determinant()); + } + + Model* + Kinematic::clone() const + { + return new Kinematic(*this); + } + + void + Kinematic::forwardAcceleration() + { + for (::std::vector< Element* >::iterator i = this->elements.begin(); i != this->elements.end(); ++i) + { + (*i)->forwardAcceleration(); + } + } + + void + Kinematic::forwardPosition() + { + for (::std::vector< Element* >::iterator i = this->elements.begin(); i != this->elements.end(); ++i) + { + (*i)->forwardPosition(); + } + } + + void + Kinematic::forwardVelocity() + { + for (::std::vector< Element* >::iterator i = this->elements.begin(); i != this->elements.end(); ++i) + { + (*i)->forwardVelocity(); + } + } + + const ::rl::math::Matrix& + Kinematic::getJacobian() const + { + return this->J; + } + + const ::rl::math::Vector& + Kinematic::getJacobianDerivative() const + { + return this->Jdqd; + } + + const ::rl::math::Matrix& + Kinematic::getJacobianInverse() const + { + return this->invJ; + } + + bool + Kinematic::isSingular() const + { + return this->isSingular(this->J); + } + + bool + Kinematic::isSingular(const ::rl::math::Matrix& J) const + { + ::Eigen::JacobiSVD< ::rl::math::Matrix > svd(J); + return (::std::abs(svd.singularValues()(svd.singularValues().size() - 1)) > ::std::numeric_limits< ::rl::math::Real >::epsilon()) ? false : true; + } + + void + Kinematic::update() + { + Model::update(); + + this->invJ.resize(this->getDof(), 6 * this->getOperationalDof()); + this->J.resize(6 * this->getOperationalDof(), this->getDof()); + this->Jdqd.resize(6 * this->getOperationalDof()); + } + } +} diff --git a/src/rl/mdl/Kinematic.h b/src/rl/mdl/Kinematic.h new file mode 100644 index 00000000..2c00114d --- /dev/null +++ b/src/rl/mdl/Kinematic.h @@ -0,0 +1,165 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_KINEMATIC_H_ +#define _RL_MDL_KINEMATIC_H_ + +#include + +#include "Metric.h" + +namespace rl +{ + namespace mdl + { + class Kinematic : public Metric + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Kinematic(); + + virtual ~Kinematic(); + + Model* clone() const; + + /** + * Resolved motion rate control. + * + * \pre setPosition() + * \post getPosition() + * + * \par Side Effects: + * calculateJacobian()\n\n + * calculateJacobianInverse()\n\n + * forwardPosition() + */ + bool calculateInversePosition( + const ::rl::math::Transform& x, + const ::std::size_t& leaf = 0, + const ::rl::math::Real& delta = ::std::numeric_limits< ::rl::math::Real >::infinity(), + const ::rl::math::Real& epsilon = 1.0e-3f, + const ::std::size_t& iterations = 1000 + ); + + void calculateJacobian(); + + /** + * Calculate Jacobian matrix. + * + * \pre setPosition() + * + * \par Side Effects: + * forwardVelocity()\n\n + * setVelocity() + */ + void calculateJacobian(::rl::math::Matrix& J); + + void calculateJacobianDerivative(); + + /** + * Calculate Jacobian derivative matrix. + * + * \pre setPosition() + * \pre setVelocity() + * + * \par Side Effects: + * forwardAcceleration()\n\n + * forwardVelocity()\n\n + * setAcceleration() + */ + void calculateJacobianDerivative(::rl::math::Vector& Jdqd); + + void calculateJacobianInverse(const ::rl::math::Real& lambda = 0.0f, const bool& doSvd = true); + + /** + * Calculate Jacobian matrix inverse. + * + * \pre calculateJacobian() + */ + void calculateJacobianInverse(const ::rl::math::Matrix& J, ::rl::math::Matrix& invJ, const ::rl::math::Real& lambda = 0.0f, const bool& doSvd = true) const; + + /** + * Calculate manipulability measure. + * + * \pre calculateJacobian() + */ + ::rl::math::Real calculateManipulabilityMeasure() const; + + ::rl::math::Real calculateManipulabilityMeasure(const ::rl::math::Matrix& J) const; + + /** + * \pre setAcceleration() + * \pre setPosition() + * \pre setVelocity() + * \post getOperationalAcceleration() + */ + void forwardAcceleration(); + + /** + * \pre setPosition() + * \post getOperationalPosition() + */ + void forwardPosition(); + + /** + * \pre setPosition() + * \pre setVelocity() + * \post getOperationalVelocity() + */ + void forwardVelocity(); + + const ::rl::math::Matrix& getJacobian() const; + + const ::rl::math::Vector& getJacobianDerivative() const; + + const ::rl::math::Matrix& getJacobianInverse() const; + + /** + * Check if current configuration is singular. + * + * \pre calculateJacobian() + */ + bool isSingular() const; + + bool isSingular(const ::rl::math::Matrix& J) const; + + virtual void update(); + + protected: + ::rl::math::Matrix invJ; + + ::rl::math::Matrix J; + + ::rl::math::Vector Jdqd; + + private: + + }; + } +} + +#endif // _RL_MDL_KINEMATIC_H_ diff --git a/src/rl/mdl/Metric.cpp b/src/rl/mdl/Metric.cpp new file mode 100644 index 00000000..cb83d779 --- /dev/null +++ b/src/rl/mdl/Metric.cpp @@ -0,0 +1,248 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Joint.h" +#include "Metric.h" + +namespace rl +{ + namespace mdl + { + Metric::Metric() : + Model() + { + } + + Metric::~Metric() + { + } + + void + Metric::clip(::rl::math::Vector& q) const + { + assert(q.size() == this->getDofPosition()); + + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + ::rl::math::Vector qi = q.segment(j, this->joints[i]->getDofPosition()); // TODO + this->joints[i]->clip(qi); + q.segment(j, this->joints[i]->getDofPosition()) = qi; // TODO + } + } + + Model* + Metric::clone() const + { + return new Metric(*this); + } + + ::rl::math::Real + Metric::distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + assert(q1.size() == this->getDofPosition()); + assert(q2.size() == this->getDofPosition()); + + ::rl::math::Real d = 0; + + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + d += this->joints[i]->distance( + q1.segment(j, this->joints[i]->getDofPosition()), + q2.segment(j, this->joints[i]->getDofPosition()) + ); + } + + return d; + } + + void + Metric::interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const + { + assert(q1.size() == this->getDofPosition()); + assert(q2.size() == this->getDofPosition()); + assert(alpha >= 0.0f); + assert(alpha <= 1.0f); + assert(q.size() == this->getDofPosition()); + + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + ::rl::math::Vector qi = q.segment(j, this->joints[i]->getDofPosition()); // TODO + + this->joints[i]->interpolate( + q1.segment(j, this->joints[i]->getDofPosition()), + q2.segment(j, this->joints[i]->getDofPosition()), + alpha, + qi + ); + + q.segment(j, this->joints[i]->getDofPosition()) = qi; // TODO + } + } + + ::rl::math::Real + Metric::inverseOfTransformedDistance(const ::rl::math::Real& d) const + { + return ::std::sqrt(d); + } + + bool + Metric::isValid(const ::rl::math::Vector& q) const + { + assert(q.size() == this->getDofPosition()); + + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + if (!this->joints[i]->isValid(q.segment(j, this->joints[i]->getDofPosition()))) + { + return false; + } + } + + return true; + } + + ::rl::math::Real + Metric::maxDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const + { + ::rl::math::Real d = 0; + + ::std::size_t k = 0; + + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + for (::std::size_t j = 0; j < this->joints[i]->getDofPosition(); ++j) + { + ::rl::math::Real delta = ::std::max(::std::abs(q(k) - min(k)), ::std::abs(q(k) - max(k))); + + if (this->joints[i]->wraparound(j)) + { + ::rl::math::Real range = ::std::abs(this->joints[i]->max(j) - this->joints[i]->min(j)); + d += this->transformedDistance(::std::max(delta, ::std::abs(range - delta))); + } + else + { + d += this->transformedDistance(delta); + } + + ++k; + } + } + + return d; + } + + ::rl::math::Real + Metric::minDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const + { + ::rl::math::Real d = 0; + + for (::std::size_t i = 0; i < this->getDofPosition(); ++i) + { + d += this->transformedDistance(this->minDistanceToRectangle(q(i), min(i), max(i), i)); + } + + return d; + } + + ::rl::math::Real + Metric::minDistanceToRectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cuttingDimension) const + { + ::rl::math::Real d = 0; +#if 0 // TODO + + if (q < min || q > max) + { + ::rl::math::Real delta = ::std::min(::std::abs(q - min), ::std::abs(q - max)); + + if (this->joints[cuttingDimension]->wraparound) + { + ::rl::math::Real range = ::std::abs(this->joints[cuttingDimension]->max - this->joints[cuttingDimension]->min); + ::rl::math::Real size = ::std::abs(max - min); + d += ::std::min(delta, ::std::abs(range - size - delta)); + } + else + { + d += delta; + } + } + +#endif + return d; + } + + ::rl::math::Real + Metric::newDistance(const ::rl::math::Real& dist, const ::rl::math::Real& oldOff, const ::rl::math::Real& newOff, const int& cuttingDimension) const + { + return dist - this->transformedDistance(oldOff) + this->transformedDistance(newOff); + } + + void + Metric::step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const + { + assert(q1.size() == this->getDofPosition()); + assert(qdot.size() == this->getDof()); + assert(q2.size() == this->getDofPosition()); + + for (::std::size_t i = 0, j = 0, k = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), k += this->joints[i]->getDof(), ++i) + { + ::rl::math::Vector q2i = q2.segment(j, this->joints[i]->getDofPosition()); // TODO + + this->joints[i]->step( + q1.segment(j, this->joints[i]->getDofPosition()), + qdot.segment(k, this->joints[i]->getDof()), + q2i + ); + + q2.segment(j, this->joints[i]->getDofPosition()) = q2i; // TODO + } + } + + ::rl::math::Real + Metric::transformedDistance(const ::rl::math::Real& d) const + { + return ::std::pow(d, 2); + } + + ::rl::math::Real + Metric::transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + assert(q1.size() == this->getDofPosition()); + assert(q2.size() == this->getDofPosition()); + + ::rl::math::Real d = 0; + + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + d += this->joints[i]->transformedDistance( + q1.segment(j, this->joints[i]->getDofPosition()), + q2.segment(j, this->joints[i]->getDofPosition()) + ); + } + + return d; + } + } +} diff --git a/src/rl/mdl/Metric.h b/src/rl/mdl/Metric.h new file mode 100644 index 00000000..cfea2e0e --- /dev/null +++ b/src/rl/mdl/Metric.h @@ -0,0 +1,77 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_METRIC_H_ +#define _RL_MDL_METRIC_H_ + +#include "Model.h" + +namespace rl +{ + namespace mdl + { + class Metric : public Model + { + public: + Metric(); + + virtual ~Metric(); + + void clip(::rl::math::Vector& q) const; + + Model* clone() const; + + ::rl::math::Real distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + void interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const; + + ::rl::math::Real inverseOfTransformedDistance(const ::rl::math::Real& d) const; + + bool isValid(const ::rl::math::Vector& q) const; + + ::rl::math::Real maxDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const; + + ::rl::math::Real minDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const; + + ::rl::math::Real minDistanceToRectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cuttingDimension) const; + + ::rl::math::Real newDistance(const ::rl::math::Real& dist, const ::rl::math::Real& oldOff, const ::rl::math::Real& newOff, const int& cuttingDimension) const; + + void step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const; + + ::rl::math::Real transformedDistance(const ::rl::math::Real& d) const; + + ::rl::math::Real transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_METRIC_H_ diff --git a/src/rl/mdl/Model.cpp b/src/rl/mdl/Model.cpp new file mode 100644 index 00000000..fd303e33 --- /dev/null +++ b/src/rl/mdl/Model.cpp @@ -0,0 +1,517 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Compound.h" +#include "Exception.h" +#include "Joint.h" +#include "Model.h" +#include "World.h" + +namespace rl +{ + namespace mdl + { + Model::Model() : + bodies(), + elements(), + frames(), + joints(), + leaves(), + manufacturer(), + name(), + root(0), + tools(), + transforms(), + tree() + { + } + + Model::~Model() + { + } + + void + Model::add(Compound* compound, const Frame* a, const Frame* b) + { + compound->inTransform = new Transform(); + this->add(compound->inTransform, a, compound->inFrame); + + compound->outTransform = new Transform(); + this->add(compound->outTransform, compound->outFrame, b); + } + + void + Model::add(Frame* frame) + { + Vertex vertex = ::boost::add_vertex(this->tree); + frame->setVertexDescriptor(vertex); + this->tree[vertex].reset(frame); + + if (dynamic_cast< World* >(frame)) + { + this->root = vertex; + } + } + + void + Model::add(Transform* transform, const Frame* a, const Frame* b) + { + Edge edge = ::boost::add_edge(a->getVertexDescriptor(), b->getVertexDescriptor(), this->tree).first; + transform->setEdgeDescriptor(edge); + this->tree[edge].reset(transform); + } + + bool + Model::areColliding(const ::std::size_t& i, const ::std::size_t& j) const + { + assert(i < this->bodies.size()); + assert(j < this->bodies.size()); + + if (this->bodies[i]->selfcollision.count(this->bodies[j]) > 0 || this->bodies[j]->selfcollision.count(this->bodies[i]) > 0) + { + return false; + } + else + { + return true; + } + } + + Model* + Model::clone() const + { + return new Model(*this); + } + + void + Model::getAcceleration(::rl::math::Vector& qdd) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + qdd.segment(j, this->joints[i]->getDof()) = this->joints[i]->getAcceleration(); + } + } + + void + Model::getAccelerationUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + units.segment(j, this->joints[i]->getDof()) = this->joints[i]->getAccelerationUnits(); + } + } + + ::std::size_t + Model::getBodies() const + { + return this->bodies.size(); + } + + Body* + Model::getBody(const ::std::size_t& i) const + { + assert(i < this->bodies.size()); + + return this->bodies[i]; + } + + ::std::size_t + Model::getDof() const + { + ::std::size_t dof = 0; + + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + dof += this->joints[i]->getDof(); + } + + return dof; + } + + ::std::size_t + Model::getDofPosition() const + { + ::std::size_t dof = 0; + + for (::std::size_t i = 0; i < this->joints.size(); ++i) + { + dof += this->joints[i]->getDofPosition(); + } + + return dof; + } + + const ::rl::math::Transform& + Model::getFrame(const ::std::size_t& i) const + { + assert(i < this->getBodies()); + + return this->bodies[i]->t; + } + + Joint* + Model::getJoint(const ::std::size_t& i) const + { + assert(i < this->joints.size()); + + return this->joints[i]; + } + + ::std::size_t + Model::getJoints() const + { + return this->joints.size(); + } + + const ::rl::math::MotionVector& + Model::getOperationalAcceleration(const ::std::size_t& i) const + { + assert(i < this->getOperationalDof()); + + return this->tree[this->leaves[i]]->a; + } + + ::std::size_t + Model::getOperationalDof() const + { + return this->leaves.size(); + } + + const ::rl::math::ForceVector& + Model::getOperationalForce(const ::std::size_t& i) const + { + assert(i < this->getOperationalDof()); + + return this->tree[this->leaves[i]]->f; + } + + const ::rl::math::Transform& + Model::getOperationalPosition(const ::std::size_t& i) const + { + assert(i < this->getOperationalDof()); + + return this->tree[this->leaves[i]]->t; + } + + const ::rl::math::MotionVector& + Model::getOperationalVelocity(const ::std::size_t& i) const + { + assert(i < this->getOperationalDof()); + + return this->tree[this->leaves[i]]->v; + } + + const ::std::string& + Model::getManufacturer() const + { + return this->manufacturer; + } + + void + Model::getMaximum(::rl::math::Vector& max) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + max.segment(j, this->joints[i]->getDofPosition()) = this->joints[i]->getMaximum(); + } + } + + void + Model::getMinimum(::rl::math::Vector& min) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + min.segment(j, this->joints[i]->getDofPosition()) = this->joints[i]->getMinimum(); + } + } + + const ::std::string& + Model::getName() const + { + return this->name; + } + + void + Model::getPosition(::rl::math::Vector& q) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + q.segment(j, this->joints[i]->getDofPosition()) = this->joints[i]->getPosition(); + } + } + + void + Model::getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + units.segment(j, this->joints[i]->getDofPosition()) = this->joints[i]->getPositionUnits(); + } + } + + void + Model::getTorque(::rl::math::Vector& tau) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + tau.segment(j, this->joints[i]->getDof()) = this->joints[i]->getTorque(); + } + } + + void + Model::getTorqueUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + units.segment(j, this->joints[i]->getDof()) = this->joints[i]->getTorqueUnits(); + } + } + + void + Model::getSpeed(::rl::math::Vector& speed) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + speed.segment(j, this->joints[i]->getDof()) = this->joints[i]->getSpeed(); + } + } + + void + Model::getSpeedUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + units.segment(j, this->joints[i]->getDof()) = this->joints[i]->getSpeedUnits(); + } + } + + void + Model::getVelocity(::rl::math::Vector& qd) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + qd.segment(j, this->joints[i]->getDof()) = this->joints[i]->getVelocity(); + } + } + + void + Model::getVelocityUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + units.segment(j, this->joints[i]->getDof()) = this->joints[i]->getVelocityUnits(); + } + } + + bool + Model::isColliding(const ::std::size_t& i) const + { + assert(i < this->bodies.size()); + + return this->bodies[i]->collision; + } + + void + Model::replace(Compound* compound, Transform* transform) + { + this->add(transform, compound->inFrame, compound->outFrame); + this->remove(compound); + } + + void + Model::replace(Transform* transform, Compound* compound) + { + this->add(compound, transform->in, transform->out); + this->remove(transform); + } + + void + Model::remove(Compound* compound) + { + this->remove(compound->inTransform); + this->remove(compound->outTransform); + } + + void + Model::remove(Frame* frame) + { + ::boost::clear_vertex(frame->getVertexDescriptor(), this->tree); + + if (dynamic_cast< World* >(frame)) + { + this->root = 0; + } + + ::boost::remove_vertex(frame->getVertexDescriptor(), this->tree); + } + + void + Model::remove(Transform* transform) + { + ::boost::remove_edge(transform->getEdgeDescriptor(), this->tree); + } + + void + Model::setAcceleration(const ::rl::math::Vector& qdd) + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + this->joints[i]->setAcceleration(qdd.segment(j, this->joints[i]->getDof())); + } + } + + void + Model::setManufacturer(const ::std::string& manufacturer) + { + this->manufacturer = manufacturer; + } + + void + Model::setName(const ::std::string& name) + { + this->name = name; + } + + void + Model::setOperationalVelocity(const ::std::size_t& i, const ::rl::math::MotionVector& v) const + { + this->tree[this->leaves[i]]->v = v; + } + + void + Model::setPosition(const ::rl::math::Vector& q) + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDofPosition(), ++i) + { + this->joints[i]->setPosition(q.segment(j, this->joints[i]->getDofPosition())); + } + } + + void + Model::setTorque(const ::rl::math::Vector& tau) + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + this->joints[i]->setTorque(tau.segment(j, this->joints[i]->getDof())); + } + } + + void + Model::setVelocity(const ::rl::math::Vector& qd) + { + for (::std::size_t i = 0, j = 0; i < this->joints.size(); j += this->joints[i]->getDof(), ++i) + { + this->joints[i]->setVelocity(qd.segment(j, this->joints[i]->getDof())); + } + } + + ::rl::math::Transform& + Model::tool(const ::std::size_t& i) + { + assert(i < this->tools.size()); + + return this->tree[this->tools[i]]->t; + } + + const ::rl::math::Transform& + Model::tool(const ::std::size_t& i) const + { + assert(i < this->tools.size()); + + return this->tree[this->tools[i]]->t; + } + + void + Model::update() + { + this->bodies.clear(); + this->elements.clear(); + this->joints.clear(); + this->leaves.clear(); + this->tools.clear(); + this->transforms.clear(); + + this->update(this->root); + } + + void + Model::update(const Vertex& u) + { + Frame* frame = this->tree[u].get(); + this->elements.push_back(frame); + this->frames.push_back(frame); + + if (Body* body = dynamic_cast< Body* >(frame)) + { + this->bodies.push_back(body); + } + + if (::boost::out_degree(u, this->tree) > 0) + { + for (OutEdgeIteratorPair i = ::boost::out_edges(u, this->tree); i.first != i.second; ++i.first) + { + Edge e = *i.first; + Vertex v = ::boost::target(e, this->tree); + + Transform* transform = this->tree[e].get(); + this->elements.push_back(transform); + this->transforms.push_back(transform); + transform->in = this->tree[u].get(); + transform->out = this->tree[v].get(); + + if (Joint* joint = dynamic_cast< Joint* >(transform)) + { + this->joints.push_back(joint); + } + + this->update(v); + } + } + else + { + this->leaves.push_back(u); + + for (InEdgeIteratorPair i = ::boost::in_edges(u, this->tree); i.first != i.second; ++i.first) + { + this->tools.push_back(*i.first); + } + } + } + + ::rl::math::Transform& + Model::world() + { + return this->tree[this->root]->t; + } + + const ::rl::math::Transform& + Model::world() const + { + return this->tree[this->root]->t; + } + } +} diff --git a/src/rl/mdl/Model.h b/src/rl/mdl/Model.h new file mode 100644 index 00000000..9c8be41c --- /dev/null +++ b/src/rl/mdl/Model.h @@ -0,0 +1,223 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_MODEL_H_ +#define _RL_MDL_MODEL_H_ + +#include +#include +#include +#include +#include +#include +#include + +#include "Frame.h" +#include "Transform.h" + +namespace rl +{ + namespace mdl + { + class Body; + class Compound; + class Joint; + + class Model + { + public: + Model(); + + virtual ~Model(); + + void add(Compound* compound, const Frame* a, const Frame* b); + + void add(Frame* frame); + + void add(Transform* transform, const Frame* a, const Frame* b); + + bool areColliding(const ::std::size_t& i, const ::std::size_t& j) const; + + Model* clone() const; + + void getAcceleration(::rl::math::Vector& qdd) const; + + void getAccelerationUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + ::std::size_t getBodies() const; + + Body* getBody(const ::std::size_t& i) const; + + ::std::size_t getDof() const; + + ::std::size_t getDofPosition() const; + + const ::rl::math::Transform& getFrame(const ::std::size_t& i) const; + + Joint* getJoint(const ::std::size_t& i) const; + + ::std::size_t getJoints() const; + + const ::rl::math::MotionVector& getOperationalAcceleration(const ::std::size_t& i) const; + + ::std::size_t getOperationalDof() const; + + const ::rl::math::ForceVector& getOperationalForce(const ::std::size_t& i) const; + + const ::rl::math::Transform& getOperationalPosition(const ::std::size_t& i) const; + + const ::rl::math::MotionVector& getOperationalVelocity(const ::std::size_t& i) const; + + const ::std::string& getManufacturer() const; + + void getMaximum(::rl::math::Vector& max) const; + + void getMinimum(::rl::math::Vector& min) const; + + const ::std::string& getName() const; + + void getPosition(::rl::math::Vector& q) const; + + void getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + void getTorque(::rl::math::Vector& tau) const; + + void getTorqueUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + void getSpeed(::rl::math::Vector& speed) const; + + void getSpeedUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + void getVelocity(::rl::math::Vector& qd) const; + + void getVelocityUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + bool isColliding(const ::std::size_t& i) const; + + void replace(Compound* compound, Transform* transform); + + void replace(Transform* transform, Compound* compound); + + void remove(Compound* compound); + + void remove(Frame* frame); + + void remove(Transform* transform); + + void setAcceleration(const ::rl::math::Vector& qdd); + + void setManufacturer(const ::std::string& manufacturer); + + void setName(const ::std::string& name); + + void setOperationalVelocity(const ::std::size_t& i, const ::rl::math::MotionVector& v) const; + + void setPosition(const ::rl::math::Vector& q); + + void setTorque(const ::rl::math::Vector& tau); + + void setVelocity(const ::rl::math::Vector& qd); + + ::rl::math::Transform& tool(const ::std::size_t& i = 0); + + const ::rl::math::Transform& tool(const ::std::size_t& i = 0) const; + + virtual void update(); + + ::rl::math::Transform& world(); + + const ::rl::math::Transform& world() const; + + protected: + friend class Compound; + + typedef ::boost::adjacency_list< + ::boost::listS, + ::boost::listS, + ::boost::bidirectionalS, + ::boost::property< + ::boost::vertex_color_t, Compound*, + ::boost::shared_ptr< Frame > + >, + ::boost::property< + ::boost::edge_weight_t, Compound*, + ::boost::shared_ptr< Transform > + >, + ::boost::no_property, + ::boost::listS + > Tree; + + typedef ::boost::graph_traits< Tree >::edge_descriptor Edge; + + typedef ::boost::graph_traits< Tree >::edge_iterator EdgeIterator; + + typedef ::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::in_edge_iterator InEdgeIterator; + + typedef ::std::pair< InEdgeIterator, InEdgeIterator > InEdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::out_edge_iterator OutEdgeIterator; + + typedef ::std::pair< OutEdgeIterator, OutEdgeIterator > OutEdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::vertex_descriptor Vertex; + + typedef ::boost::graph_traits< Tree >::vertex_iterator VertexIterator; + + typedef ::std::pair< VertexIterator, VertexIterator > VertexIteratorPair; + + void update(const Vertex& u); + + ::std::vector< Body* > bodies; + + ::std::vector< Element* > elements; + + ::std::vector< Frame* > frames; + + ::std::vector< Joint* > joints; + + ::std::vector< Vertex > leaves; + + ::std::string manufacturer; + + ::std::string name; + + Vertex root; + + ::std::vector< Edge > tools; + + ::std::vector< Transform* > transforms; + + Tree tree; + + private: + + }; + } +} + +#endif // _RL_MDL_MODEL_H_ diff --git a/src/rl/mdl/Prismatic.cpp b/src/rl/mdl/Prismatic.cpp new file mode 100644 index 00000000..0d300481 --- /dev/null +++ b/src/rl/mdl/Prismatic.cpp @@ -0,0 +1,56 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Prismatic.h" + +namespace rl +{ + namespace mdl + { + Prismatic::Prismatic() : + Joint(1, 1) + { + this->qUnits(0) = ::rl::math::UNIT_METER; + this->qdUnits(0) = ::rl::math::UNIT_METER_PER_SECOND; + this->qddUnits(0) = ::rl::math::UNIT_METER_PER_SECOND_SQUARED; + this->S(5, 0) = 1; + this->speedUnits(0) = ::rl::math::UNIT_METER_PER_SECOND; + this->tauUnits(0) = ::rl::math::UNIT_NEWTON; + } + + Prismatic::~Prismatic() + { + } + + void + Prismatic::setPosition(const ::rl::math::Vector& q) + { + this->q = q; + this->t.translation() = this->S.block< 3, 1 >(3, 0) * (this->q(0) + this->offset(0)); + this->x.translation() = this->t.translation(); + } + } +} diff --git a/src/rl/mdl/Prismatic.h b/src/rl/mdl/Prismatic.h new file mode 100644 index 00000000..63c8464c --- /dev/null +++ b/src/rl/mdl/Prismatic.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_PRISMATIC_H_ +#define _RL_MDL_PRISMATIC_H_ + +#include "Joint.h" + +namespace rl +{ + namespace mdl + { + class Prismatic : public Joint + { + public: + Prismatic(); + + virtual ~Prismatic(); + + void setPosition(const ::rl::math::Vector& q); + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_PRISMATIC_H_ diff --git a/src/rl/mdl/Revolute.cpp b/src/rl/mdl/Revolute.cpp new file mode 100644 index 00000000..e06b8b50 --- /dev/null +++ b/src/rl/mdl/Revolute.cpp @@ -0,0 +1,130 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Revolute.h" + +namespace rl +{ + namespace mdl + { + Revolute::Revolute() : + Joint(1, 1) + { + this->qUnits(0) = ::rl::math::UNIT_RADIAN; + this->qdUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->qddUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND_SQUARED; + this->S(2, 0) = 1; + this->speedUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->tauUnits(0) = ::rl::math::UNIT_NEWTON_METER; + } + + Revolute::~Revolute() + { + } + + ::rl::math::Real + Revolute::distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + ::rl::math::Real delta = ::std::abs(q2(0) - q1(0)); + + if (this->wraparound(0)) + { + ::rl::math::Real range = ::std::abs(this->max(0) - this->min(0)); + return ::std::min(delta, ::std::abs(range - delta)); + } + else + { + return delta; + } + } + + void + Revolute::interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const + { + if (this->wraparound(0)) + { + ::rl::math::Real diff = ::std::abs(q2(0) - q1(0)); + ::rl::math::Real range = ::std::abs(this->max(0) - this->min(0)); + + if (::std::abs(range - diff) < diff) + { + if (q1(0) > q2(0)) + { + q(0) = (1.0f - alpha) * q1(0) + alpha * (q2(0) + range); + } + else + { + q(0) = (1.0f - alpha) * (q1(0) + range) + alpha * q2(0); + } + + while (q(0) > this->max(0)) + { + q(0) -= range; + } + + while (q(0) < this->min(0)) + { + q(0) += range; + } + } + else + { + q(0) = (1.0f - alpha) * q1(0) + alpha * q2(0); + } + } + else + { + q(0) = (1.0f - alpha) * q1(0) + alpha * q2(0); + } + } + + void + Revolute::setPosition(const ::rl::math::Vector& q) + { + this->q = q; + this->t = ::rl::math::AngleAxis(this->q(0) + this->offset(0), this->S.block< 3, 1 >(0, 0)); + this->x.rotation() = this->t.linear().transpose(); + } + + ::rl::math::Real + Revolute::transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + ::rl::math::Real delta = ::std::abs(q2(0) - q1(0)); + + if (this->wraparound(0)) + { + ::rl::math::Real range = ::std::abs(this->max(0) - this->min(0)); + return ::std::pow(::std::min(delta, ::std::abs(range - delta)), 2); + } + else + { + return ::std::pow(delta, 2); + } + } + } +} diff --git a/src/rl/mdl/Revolute.h b/src/rl/mdl/Revolute.h new file mode 100644 index 00000000..82024e16 --- /dev/null +++ b/src/rl/mdl/Revolute.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_REVOLUTE_H_ +#define _RL_MDL_REVOLUTE_H_ + +#include "Joint.h" + +namespace rl +{ + namespace mdl + { + class Revolute : public Joint + { + public: + Revolute(); + + virtual ~Revolute(); + + ::rl::math::Real distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + void interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const; + + void setPosition(const ::rl::math::Vector& q); + + ::rl::math::Real transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_REVOLUTE_H_ diff --git a/src/rl/mdl/Spherical.cpp b/src/rl/mdl/Spherical.cpp new file mode 100644 index 00000000..daf9ede2 --- /dev/null +++ b/src/rl/mdl/Spherical.cpp @@ -0,0 +1,85 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Spherical.h" + +namespace rl +{ + namespace mdl + { + Spherical::Spherical() : + Joint(4, 3) + { + this->qUnits(0) = ::rl::math::UNIT_NONE; // TODO + this->qUnits(1) = ::rl::math::UNIT_NONE; // TODO + this->qUnits(2) = ::rl::math::UNIT_NONE; // TODO + this->qUnits(3) = ::rl::math::UNIT_NONE; // TODO + this->qdUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->qdUnits(1) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->qdUnits(2) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->qddUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND_SQUARED; + this->qddUnits(1) = ::rl::math::UNIT_RADIAN_PER_SECOND_SQUARED; + this->qddUnits(2) = ::rl::math::UNIT_RADIAN_PER_SECOND_SQUARED; + this->S(0, 0) = 1; + this->S(1, 1) = 1; + this->S(2, 2) = 1; + this->speedUnits(0) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->speedUnits(1) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->speedUnits(2) = ::rl::math::UNIT_RADIAN_PER_SECOND; + this->tauUnits(0) = ::rl::math::UNIT_NEWTON_METER; + this->tauUnits(1) = ::rl::math::UNIT_NEWTON_METER; + this->tauUnits(2) = ::rl::math::UNIT_NEWTON_METER; + } + + Spherical::~Spherical() + { + } + + ::rl::math::Real + Spherical::distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + ::rl::math::Quaternion quaternion1(q1(0), q1(1), q1(2), q1(3)); + ::rl::math::Quaternion quaternion2(q2(0), q2(1), q2(2), q2(3)); + return quaternion1.angularDistance(quaternion2); + } + + void + Spherical::setPosition(const ::rl::math::Vector& q) + { + this->q = q; + this->t = ::rl::math::Quaternion(this->q(0), this->q(1), this->q(2), this->q(3)); + this->x.rotation() = this->t.linear().transpose(); + } + + ::rl::math::Real + Spherical::transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + return ::std::pow(this->distance(q1, q2), 2); + } + } +} diff --git a/src/rl/mdl/Spherical.h b/src/rl/mdl/Spherical.h new file mode 100644 index 00000000..4052b579 --- /dev/null +++ b/src/rl/mdl/Spherical.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_SPHERICAL_H_ +#define _RL_MDL_SPHERICAL_H_ + +#include "Joint.h" + +namespace rl +{ + namespace mdl + { + class Spherical : public Joint + { + public: + Spherical(); + + virtual ~Spherical(); + + ::rl::math::Real distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + void setPosition(const ::rl::math::Vector& q); + + ::rl::math::Real transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_SPHERICAL_H_ diff --git a/src/rl/mdl/Transform.cpp b/src/rl/mdl/Transform.cpp new file mode 100644 index 00000000..e16decbb --- /dev/null +++ b/src/rl/mdl/Transform.cpp @@ -0,0 +1,129 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Frame.h" +#include "Transform.h" + +namespace rl +{ + namespace mdl + { + Transform::Transform() : + Element(), + in(NULL), + out(NULL), + t(), + x(), + descriptor() + { + this->t.setIdentity(); // TODO + this->x.setIdentity(); // TODO + } + + Transform::~Transform() + { + } + + void + Transform::forwardAcceleration() + { + this->out->a = this->x * this->in->a; + } + + void + Transform::forwardDynamics1() + { + this->forwardVelocity(); + this->out->c.setZero(); // TODO + } + + void + Transform::forwardDynamics2() + { + // I^A + X^* * I^a * X + this->in->iA = this->in->iA + this->x / this->out->iA; + + // p^A + I^a * c + ::rl::math::ForceVector pa; + pa = this->out->pA + this->out->iA * this->out->c; // TODO + + // p^A + X^* * p^a + this->in->pA = this->in->pA + this->x / pa; + } + + void + Transform::forwardDynamics3() + { + // X * a + c + this->out->a = this->x * this->in->a + this->out->c; + } + + void + Transform::forwardPosition() + { + this->out->t = this->in->t * this->t; + this->out->x = this->x * this->in->x; + } + + void + Transform::forwardVelocity() + { + this->out->v = this->x * this->in->v; + } + + const Transform::Edge& + Transform::getEdgeDescriptor() const + { + return this->descriptor; + } + + void + Transform::inverseDynamics1() + { + this->forwardVelocity(); + this->forwardAcceleration(); + } + + void + Transform::inverseDynamics2() + { + this->inverseForce(); + } + + void + Transform::inverseForce() + { + // f + X * f + this->in->f = this->in->f + this->x / this->out->f; + } + + void + Transform::setEdgeDescriptor(const Edge& descriptor) + { + this->descriptor = descriptor; + } + } +} diff --git a/src/rl/mdl/Transform.h b/src/rl/mdl/Transform.h new file mode 100644 index 00000000..db312b33 --- /dev/null +++ b/src/rl/mdl/Transform.h @@ -0,0 +1,98 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_TRANSFORM_H_ +#define _RL_MDL_TRANSFORM_H_ + +#include +#include +#include + +#include "Element.h" + +namespace rl +{ + namespace mdl + { + class Frame; + + class Transform : public Element + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + typedef ::boost::adjacency_list< + ::boost::listS, + ::boost::listS, + ::boost::bidirectionalS, + ::boost::listS + > Tree; + + typedef Tree::edge_descriptor Edge; + + Transform(); + + virtual ~Transform(); + + virtual void forwardAcceleration(); + + virtual void forwardDynamics1(); + + virtual void forwardDynamics2(); + + virtual void forwardDynamics3(); + + void forwardPosition(); + + virtual void forwardVelocity(); + + const Edge& getEdgeDescriptor() const; + + virtual void inverseDynamics1(); + + virtual void inverseDynamics2(); + + virtual void inverseForce(); + + void setEdgeDescriptor(const Edge& descriptor); + + Frame* in; + + Frame* out; + + ::rl::math::Transform t; + + ::rl::math::PlueckerTransform x; + + protected: + + private: + Edge descriptor; + }; + } +} + +#endif // _RL_MDL_TRANSFORM_H_ diff --git a/src/rl/mdl/World.cpp b/src/rl/mdl/World.cpp new file mode 100644 index 00000000..8793d8d6 --- /dev/null +++ b/src/rl/mdl/World.cpp @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "World.h" + +namespace rl +{ + namespace mdl + { + World::World() : + Frame() + { + } + + World::~World() + { + } + + void + World::getGravity(::rl::math::Real& x, ::rl::math::Real& y, ::rl::math::Real& z) const + { + x = this->a.linear().x(); + y = this->a.linear().y(); + z = this->a.linear().z(); + } + + void + World::setGravity(const ::rl::math::Real& x, const ::rl::math::Real& y, const ::rl::math::Real& z) + { + this->a.linear().x() = x; + this->a.linear().y() = y; + this->a.linear().z() = z; + } + } +} diff --git a/src/rl/mdl/World.h b/src/rl/mdl/World.h new file mode 100644 index 00000000..1d46f098 --- /dev/null +++ b/src/rl/mdl/World.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_WORLD_H_ +#define _RL_MDL_WORLD_H_ + +#include "Frame.h" + +namespace rl +{ + namespace mdl + { + class World : public Frame + { + public: + World(); + + virtual ~World(); + + void getGravity(::rl::math::Real& x, ::rl::math::Real& y, ::rl::math::Real& z) const; + + void setGravity(const ::rl::math::Real& x, const ::rl::math::Real& y, const ::rl::math::Real& z); + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_WORLD_H_ diff --git a/src/rl/mdl/XmlFactory.cpp b/src/rl/mdl/XmlFactory.cpp new file mode 100644 index 00000000..268d6098 --- /dev/null +++ b/src/rl/mdl/XmlFactory.cpp @@ -0,0 +1,337 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Body.h" +#include "Cylindrical.h" +#include "Dynamic.h" +#include "Exception.h" +#include "Fixed.h" +#include "Helical.h" +#include "Joint.h" +#include "Kinematic.h" +#include "Model.h" +#include "Prismatic.h" +#include "Revolute.h" +#include "Spherical.h" +#include "World.h" +#include "XmlFactory.h" + +namespace rl +{ + namespace mdl + { + XmlFactory::XmlFactory() + { + } + + XmlFactory::~XmlFactory() + { + } + + void + XmlFactory::load(const ::std::string& filename, Model* model) + { + ::rl::xml::DomParser parser; + + ::rl::xml::Document doc = parser.readFile(filename, "", XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + doc.substitute(XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + ::rl::xml::Path path(doc); + + ::rl::xml::Object instance = path.eval("//model"); + + for (int i = 0; i < ::std::min(1, instance.getNodeNr()); ++i) + { + // manufacturer + + model->setManufacturer(path.eval("string(manufacturer)", instance.getNodeTab(i)).getStringval()); + + // name + + model->setName(path.eval("string(name)", instance.getNodeTab(i)).getStringval()); + + // frame + + ::rl::xml::Object frames = path.eval("body|frame|world", instance.getNodeTab(i)); + + ::std::map< ::std::string, Frame* > id2frame; + + for (int j = 0; j < frames.getNodeNr(); ++j) + { + if ("body" == frames.getNodeTab(j).getName()) + { + Body* b = new Body(); + + model->add(b); + + b->setCenterOfMass( + path.eval("number(cm/x)", frames.getNodeTab(j)).getFloatval(0), + path.eval("number(cm/y)", frames.getNodeTab(j)).getFloatval(0), + path.eval("number(cm/z)", frames.getNodeTab(j)).getFloatval(0) + ); + + b->setInertia( + path.eval("number(i/xx)", frames.getNodeTab(j)).getFloatval(1), + path.eval("number(i/yy)", frames.getNodeTab(j)).getFloatval(1), + path.eval("number(i/zz)", frames.getNodeTab(j)).getFloatval(1), + path.eval("number(i/yz)", frames.getNodeTab(j)).getFloatval(0), + path.eval("number(i/xz)", frames.getNodeTab(j)).getFloatval(0), + path.eval("number(i/xy)", frames.getNodeTab(j)).getFloatval(0) + ); + + b->setMass( + path.eval("number(m)", frames.getNodeTab(j)).getFloatval(1) + ); + + b->setName(path.eval("string(@id)", frames.getNodeTab(j)).getStringval()); + + id2frame[path.eval("string(@id)", frames.getNodeTab(j)).getStringval()] = b; + } + else if ("frame" == frames.getNodeTab(j).getName()) + { + Frame* f = new Frame(); + + model->add(f); + + f->setName(path.eval("string(@id)", frames.getNodeTab(j)).getStringval()); + + id2frame[path.eval("string(@id)", frames.getNodeTab(j)).getStringval()] = f; + } + else if ("world" == frames.getNodeTab(j).getName()) + { + World* w = new World(); + + model->add(w); + + w->t = ::rl::math::AngleAxis( + path.eval("number(rotation/z)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/y)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/x)", frames.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + w->t.translation().x() = path.eval("number(translation/x)", frames.getNodeTab(j)).getFloatval(0); + w->t.translation().y() = path.eval("number(translation/y)", frames.getNodeTab(j)).getFloatval(0); + w->t.translation().z() = path.eval("number(translation/z)", frames.getNodeTab(j)).getFloatval(0); + + w->setGravity( + path.eval("number(g/x)", frames.getNodeTab(j)).getFloatval(0), + path.eval("number(g/y)", frames.getNodeTab(j)).getFloatval(0), + path.eval("number(g/z)", frames.getNodeTab(j)).getFloatval(0) + ); + + w->setName(path.eval("string(@id)", frames.getNodeTab(j)).getStringval()); + + id2frame[path.eval("string(@id)", frames.getNodeTab(j)).getStringval()] = w; + } + } + + // selfcollision + + for (int j = 0; j < frames.getNodeNr(); ++j) + { + if ("body" == frames.getNodeTab(j).getName()) + { + Body* b1 = dynamic_cast< Body* >(id2frame[path.eval("string(@id)", frames.getNodeTab(j)).getStringval()]); + + ::rl::xml::Object ignores = path.eval("ignore", frames.getNodeTab(j)); + + for (int k = 0; k < ignores.getNodeNr(); ++k) + { + if (ignores.getNodeTab(k).hasAttribute("idref")) + { + Body* b2 = dynamic_cast< Body* >(id2frame[ignores.getNodeTab(k).getAttribute("idref").getValue()]); + + b1->selfcollision.insert(b2); + b2->selfcollision.insert(b1); + } + else + { + b1->collision = false; + } + } + } + } + + // transforms + + ::rl::xml::Object transforms = path.eval("cylindrical|fixed|helical|prismatic|revolute|spherical", instance.getNodeTab(i)); + + for (int j = 0; j < transforms.getNodeNr(); ++j) + { + Frame* a = id2frame[path.eval("string(frame/a/@idref)", transforms.getNodeTab(j)).getStringval()]; + Frame* b = id2frame[path.eval("string(frame/b/@idref)", transforms.getNodeTab(j)).getStringval()]; + + if ("cylindrical" == transforms.getNodeTab(j).getName()) + { + Cylindrical* c = new Cylindrical(); + + model->add(c, a, b); + + c->max(0) = path.eval("number(max1)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + c->min(0) = path.eval("number(min1)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + c->offset(0) = path.eval("number(offset1)", transforms.getNodeTab(j)).getFloatval(0); + c->speed(0) = path.eval("number(speed1)", transforms.getNodeTab(j)).getFloatval(0); + c->wraparound(0) = path.eval("count(wraparound1) > 0", transforms.getNodeTab(j)).getBoolval(); + + c->max(1) = path.eval("number(max2)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + c->min(1) = path.eval("number(min2)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + c->offset(1) = path.eval("number(offset2)", transforms.getNodeTab(j)).getFloatval(0); + c->speed(1) = path.eval("number(speed2)", transforms.getNodeTab(j)).getFloatval(0); + c->wraparound(1) = path.eval("count(wraparound2) > 0", transforms.getNodeTab(j)).getBoolval(); + + c->S(0, 0) = path.eval("number(axis1/x)", transforms.getNodeTab(j)).getFloatval(0); + c->S(1, 0) = path.eval("number(axis1/y)", transforms.getNodeTab(j)).getFloatval(0); + c->S(2, 0) = path.eval("number(axis1/z)", transforms.getNodeTab(j)).getFloatval(1); + + c->S(3, 1) = path.eval("number(axis2/x)", transforms.getNodeTab(j)).getFloatval(0); + c->S(4, 1) = path.eval("number(axis2/y)", transforms.getNodeTab(j)).getFloatval(0); + c->S(5, 1) = path.eval("number(axis2/z)", transforms.getNodeTab(j)).getFloatval(1); + + c->setName(path.eval("string(@id)", transforms.getNodeTab(j)).getStringval()); + } + else if ("fixed" == transforms.getNodeTab(j).getName()) + { + Fixed* f = new Fixed(); + + model->add(f, a, b); + + f->t = ::rl::math::AngleAxis( + path.eval("number(rotation/z)", transforms.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitZ() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/y)", transforms.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitY() + ) * ::rl::math::AngleAxis( + path.eval("number(rotation/x)", transforms.getNodeTab(j)).getFloatval(0) * ::rl::math::DEG2RAD, + ::rl::math::Vector3::UnitX() + ); + + f->t.translation().x() = path.eval("number(translation/x)", transforms.getNodeTab(j)).getFloatval(0); + f->t.translation().y() = path.eval("number(translation/y)", transforms.getNodeTab(j)).getFloatval(0); + f->t.translation().z() = path.eval("number(translation/z)", transforms.getNodeTab(j)).getFloatval(0); + + f->x.rotation() = f->t.linear().transpose(); + f->x.translation() = f->t.translation(); + + f->setName(path.eval("string(@id)", transforms.getNodeTab(j)).getStringval()); + } + else if ("helical" == transforms.getNodeTab(j).getName()) + { + Helical* h = new Helical(); + + model->add(h, a, b); + + h->max(0) = path.eval("number(max)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + h->min(0) = path.eval("number(min)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + h->offset(0) = path.eval("number(offset)", transforms.getNodeTab(j)).getFloatval(0); + h->speed(0) = path.eval("number(speed)", transforms.getNodeTab(j)).getFloatval(0); + h->wraparound(0) = path.eval("count(wraparound) > 0", transforms.getNodeTab(j)).getBoolval(); + + h->S(0, 0) = path.eval("number(axis1/x)", transforms.getNodeTab(j)).getFloatval(0); + h->S(1, 0) = path.eval("number(axis1/y)", transforms.getNodeTab(j)).getFloatval(0); + h->S(2, 0) = path.eval("number(axis1/z)", transforms.getNodeTab(j)).getFloatval(1); + + h->S(3, 0) = path.eval("number(axis2/x)", transforms.getNodeTab(j)).getFloatval(0); + h->S(4, 0) = path.eval("number(axis2/y)", transforms.getNodeTab(j)).getFloatval(0); + h->S(5, 0) = path.eval("number(axis2/z)", transforms.getNodeTab(j)).getFloatval(1); + + h->setPitch(path.eval("number(pitch)", transforms.getNodeTab(j)).getFloatval(1)); + + h->setName(path.eval("string(@id)", transforms.getNodeTab(j)).getStringval()); + } + else if ("prismatic" == transforms.getNodeTab(j).getName()) + { + Prismatic* p = new Prismatic(); + + model->add(p, a, b); + + p->max(0) = path.eval("number(max)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + p->min(0) = path.eval("number(min)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + p->offset(0) = path.eval("number(offset)", transforms.getNodeTab(j)).getFloatval(0); + p->speed(0) = path.eval("number(speed)", transforms.getNodeTab(j)).getFloatval(0); + p->wraparound(0) = path.eval("count(wraparound) > 0", transforms.getNodeTab(j)).getBoolval(); + + p->S(3, 0) = path.eval("number(axis/x)", transforms.getNodeTab(j)).getFloatval(0); + p->S(4, 0) = path.eval("number(axis/y)", transforms.getNodeTab(j)).getFloatval(0); + p->S(5, 0) = path.eval("number(axis/z)", transforms.getNodeTab(j)).getFloatval(1); + + p->setName(path.eval("string(@id)", transforms.getNodeTab(j)).getStringval()); + } + else if ("revolute" == transforms.getNodeTab(j).getName()) + { + Revolute* r = new Revolute(); + + model->add(r, a, b); + + r->max(0) = path.eval("number(max)", transforms.getNodeTab(j)).getFloatval(::std::numeric_limits< ::rl::math::Real >::max()); + r->min(0) = path.eval("number(min)", transforms.getNodeTab(j)).getFloatval(-::std::numeric_limits< ::rl::math::Real >::max()); + r->offset(0) = path.eval("number(offset)", transforms.getNodeTab(j)).getFloatval(0); + r->speed(0) = path.eval("number(speed)", transforms.getNodeTab(j)).getFloatval(0); + r->wraparound(0) = path.eval("count(wraparound) > 0", transforms.getNodeTab(j)).getBoolval(); + + r->S(0, 0) = path.eval("number(axis/x)", transforms.getNodeTab(j)).getFloatval(0); + r->S(1, 0) = path.eval("number(axis/y)", transforms.getNodeTab(j)).getFloatval(0); + r->S(2, 0) = path.eval("number(axis/z)", transforms.getNodeTab(j)).getFloatval(1); + + r->max *= ::rl::math::DEG2RAD; + r->min *= ::rl::math::DEG2RAD; + r->offset *= ::rl::math::DEG2RAD; + r->speed *= ::rl::math::DEG2RAD; + + r->setName(path.eval("string(@id)", transforms.getNodeTab(j)).getStringval()); + } + else if ("spherical" == transforms.getNodeTab(j).getName()) + { + Spherical* s = new Spherical(); + + model->add(s, a, b); + + s->setName(path.eval("string(@id)", transforms.getNodeTab(j)).getStringval()); + } + } + } + + model->update(); + } + } +} diff --git a/src/rl/mdl/XmlFactory.h b/src/rl/mdl/XmlFactory.h new file mode 100644 index 00000000..cc56810d --- /dev/null +++ b/src/rl/mdl/XmlFactory.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_MDL_XMLFACTORY_H_ +#define _RL_MDL_XMLFACTORY_H_ + +#include "Factory.h" + +namespace rl +{ + namespace mdl + { + class XmlFactory : public Factory + { + public: + XmlFactory(); + + virtual ~XmlFactory(); + + void load(const ::std::string& filename, Model* model); + + protected: + + private: + + }; + } +} + +#endif // _RL_MDL_XMLFACTORY_H_ diff --git a/src/rl/plan/AddRrtConCon.cpp b/src/rl/plan/AddRrtConCon.cpp new file mode 100644 index 00000000..e4410ebd --- /dev/null +++ b/src/rl/plan/AddRrtConCon.cpp @@ -0,0 +1,127 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "AddRrtConCon.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + AddRrtConCon::AddRrtConCon() : + RrtConCon(), + alpha(0.05f), + lower(2.0f), + radius(20.0f) + { + } + + AddRrtConCon::~AddRrtConCon() + { + } + + ::std::string + AddRrtConCon::getName() const + { + return "Adaptive Dynamic Domain RRT Connect Connect"; + } + + bool + AddRrtConCon::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->begin[1] = this->addVertex(this->tree[1], ::boost::make_shared< ::rl::math::Vector >(*this->goal)); + + Tree* a = &this->tree[0]; + Tree* b = &this->tree[1]; + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + for (::std::size_t j = 0; j < 2; ++j) + { + Neighbor aNearest; + + do + { + this->choose(chosen); + + aNearest = this->nearest(*a, chosen); + } + while (aNearest.second > (*a)[aNearest.first].radius); + + Vertex aConnected = this->connect(*a, aNearest, chosen); + + if (NULL != aConnected) + { + if ((*a)[aNearest.first].radius < ::std::numeric_limits< ::rl::math::Real >::max()) + { + (*a)[aNearest.first].radius *= (1.0f + this->alpha); + } + + Neighbor bNearest = this->nearest(*b, chosen); + + Vertex bConnected = this->connect(*b, bNearest, *(*a)[aConnected].q); + + if (NULL != bConnected) + { + if (this->areEqual(*(*a)[aConnected].q, *(*b)[bConnected].q)) + { + this->end[0] = &this->tree[0] == a ? aConnected : bConnected; + this->end[1] = &this->tree[1] == b ? bConnected : aConnected; + return true; + } + } + } + else + { + if ((*a)[aNearest.first].radius < ::std::numeric_limits< ::rl::math::Real >::max()) + { + (*a)[aNearest.first].radius *= (1.0f - this->alpha); + (*a)[aNearest.first].radius = ::std::max(this->lower, (*a)[aNearest.first].radius); + } + else + { + (*a)[aNearest.first].radius = this->radius; + } + } + + ::std::swap(a, b); + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/AddRrtConCon.h b/src/rl/plan/AddRrtConCon.h new file mode 100644 index 00000000..3e6f6390 --- /dev/null +++ b/src/rl/plan/AddRrtConCon.h @@ -0,0 +1,64 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_ADDRRTCONCON_H_ +#define _RL_PLAN_ADDRRTCONCON_H_ + +#include "RrtConCon.h" + +namespace rl +{ + namespace plan + { + class AddRrtConCon : public RrtConCon + { + public: + AddRrtConCon(); + + virtual ~AddRrtConCon(); + + virtual ::std::string getName() const; + + bool solve(); + + /** Radius expansion factor. */ + ::rl::math::Real alpha; + + /** Lower bound for radius. */ + ::rl::math::Real lower; + + /** Initial vertex radius. */ + ::rl::math::Real radius; + + protected: + + private: + + }; + } +} + +#endif //_RL_PLAN_ADDRRTCONCON_H_ diff --git a/src/rl/plan/AdvancedOptimizer.cpp b/src/rl/plan/AdvancedOptimizer.cpp new file mode 100644 index 00000000..f2f96683 --- /dev/null +++ b/src/rl/plan/AdvancedOptimizer.cpp @@ -0,0 +1,140 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "AdvancedOptimizer.h" +#include "SimpleModel.h" +#include "Verifier.h" +#include "Viewer.h" + +namespace rl +{ + namespace plan + { + AdvancedOptimizer::AdvancedOptimizer() : + SimpleOptimizer(), + length(1.0f), + ratio(0.1f) + { + } + + AdvancedOptimizer::~AdvancedOptimizer() + { + } + + void + AdvancedOptimizer::process(VectorList& path) + { + bool changed = true; + + VectorList::iterator i; + VectorList::iterator j; + VectorList::iterator k; + + ::rl::math::Vector inter(this->model->getDof()); + + while (changed && path.size() > 2) + { + while (changed && path.size() > 2) + { + changed = false; + + i = path.begin(); + j = ++path.begin(); + k = ++++path.begin(); + + while (i != path.end() && j != path.end() && k != path.end()) + { + ::rl::math::Real ik = this->model->distance(*i, *k); + + if (!this->verifier->isColliding(*i, *k, ik)) + { + ::rl::math::Real ij = this->model->distance(*i, *j); + ::rl::math::Real jk = this->model->distance(*j, *k); + + ::rl::math::Real alpha = ij / (ij + jk); + + this->model->interpolate(*i, *k, alpha, inter); + + ::rl::math::Real ratio = this->model->distance(*j, inter) / ik; + + if (ratio > this->ratio) + { + VectorList::iterator l = j; + ++j; + ++k; + path.erase(l); + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationPath(path); + } + + changed = true; + } + else + { + ++i; + ++j; + ++k; + } + } + else + { + ++i; + ++j; + ++k; + } + } + } + + i = path.begin(); + j = ++path.begin(); + + while (i != path.end() && j != path.end()) + { + if (this->model->distance(*i, *j) > this->length) + { + this->model->interpolate(*i, *j, 0.5f, inter); + + j = path.insert(j, inter); + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationPath(path); + } + + changed = true; + } + else + { + ++i; + ++j; + } + } + } + } + } +} diff --git a/src/rl/plan/AdvancedOptimizer.h b/src/rl/plan/AdvancedOptimizer.h new file mode 100644 index 00000000..0f0cd837 --- /dev/null +++ b/src/rl/plan/AdvancedOptimizer.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_ADVANCEDOPTIMIZER_H_ +#define _RL_PLAN_ADVANCEDOPTIMIZER_H_ + +#include "SimpleOptimizer.h" + +namespace rl +{ + namespace plan + { + class AdvancedOptimizer : public SimpleOptimizer + { + public: + AdvancedOptimizer(); + + virtual ~AdvancedOptimizer(); + + void process(VectorList& path); + + ::rl::math::Real length; + + ::rl::math::Real ratio; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_ADVANCEDOPTIMIZER_H_ diff --git a/src/rl/plan/BridgeSampler.cpp b/src/rl/plan/BridgeSampler.cpp new file mode 100644 index 00000000..3443468c --- /dev/null +++ b/src/rl/plan/BridgeSampler.cpp @@ -0,0 +1,93 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "BridgeSampler.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + BridgeSampler::BridgeSampler() : + GaussianSampler(), + ratio(5.0f / 6.0f) + { + } + + BridgeSampler::~BridgeSampler() + { + } + + void + BridgeSampler::generateCollisionFree(::rl::math::Vector& q) + { + assert(q.size() == this->model->getDof()); + + if (this->rand() > this->ratio) + { + this->generate(q); + } + else + { + ::rl::math::Vector q2(this->model->getDof()); + ::rl::math::Vector q3(this->model->getDof()); + + while (true) + { + this->generate(q2); + + this->model->setPosition(q2); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + for (::std::size_t i = 0; i < this->model->getDof(); ++i) + { + q3(i) = this->gauss() * (*this->sigma)(i) + q2(i); + } + + this->model->clip(q3); + + if (this->model->isColliding()) + { + this->model->interpolate(q2, q3, 0.5f, q); + + this->model->setPosition(q); + this->model->updateFrames(); + + if (!this->model->isColliding()) + { + return; + } + } + } + } + } + } + } +} diff --git a/src/rl/plan/BridgeSampler.h b/src/rl/plan/BridgeSampler.h new file mode 100644 index 00000000..71e507e6 --- /dev/null +++ b/src/rl/plan/BridgeSampler.h @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_BRIDGESAMPLER_H_ +#define _RL_PLAN_BRIDGESAMPLER_H_ + +#include + +#include "GaussianSampler.h" + +namespace rl +{ + namespace plan + { + class BridgeSampler : public GaussianSampler + { + public: + BridgeSampler(); + + virtual ~BridgeSampler(); + + void generateCollisionFree(::rl::math::Vector& q); + + /** Probability of choosing bridge sample. */ + ::rl::math::Real ratio; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_BRIDGESAMPLER_H_ diff --git a/src/rl/plan/CMakeLists.txt b/src/rl/plan/CMakeLists.txt new file mode 100644 index 00000000..3a62575b --- /dev/null +++ b/src/rl/plan/CMakeLists.txt @@ -0,0 +1,140 @@ +project(rlplan) + +find_package(Boost COMPONENTS thread system REQUIRED) + +find_package(Cgal REQUIRED) + +set( + HDRS + AddRrtConCon.h + AdvancedOptimizer.h + BridgeSampler.h + DistanceModel.h + Eet.h + Exception.h + GaussianSampler.h + MatrixPtr.h + Model.h + Optimizer.h + Orthogonal_k_neighbor_search.h + Planner.h + Prm.h + PrmUtilityGuided.h + RealList.h + RecursiveVerifier.h + Rrt.h + RrtCon.h + RrtConCon.h + RrtDual.h + RrtExtCon.h + RrtExtExt.h + RrtGoalBias.h + Sampler.h + SequentialVerifier.h + SimpleModel.h + SimpleOptimizer.h + TransformPtr.h + UniformSampler.h + Vector3List.h + Vector3Ptr.h + VectorList.h + VectorPtr.h + Verifier.h + Viewer.h + WorkspaceSphere.h + WorkspaceSphereExplorer.h + WorkspaceSphereList.h +) + +set( + SRCS + AddRrtConCon.cpp + AdvancedOptimizer.cpp + BridgeSampler.cpp + DistanceModel.cpp + Eet.cpp + Exception.cpp + GaussianSampler.cpp + Model.cpp + Optimizer.cpp + Planner.cpp + Prm.cpp + PrmUtilityGuided.cpp + RecursiveVerifier.cpp + Rrt.cpp + RrtCon.cpp + RrtConCon.cpp + RrtDual.cpp + RrtExtCon.cpp + RrtExtExt.cpp + RrtGoalBias.cpp + Sampler.cpp + SequentialVerifier.cpp + SimpleModel.cpp + SimpleOptimizer.cpp + UniformSampler.cpp + Verifier.cpp + Viewer.cpp + WorkspaceSphere.cpp + WorkspaceSphereExplorer.cpp +) + +if(WIN32) + add_library( + rlplan + STATIC + ${HDRS} + ${SRCS} + ) +else(WIN32) + add_library( + rlplan + SHARED + ${HDRS} + ${SRCS} + ) +endif(WIN32) + +target_compile_definitions( + rlplan + PUBLIC + -DBOOST_ALL_NO_LIB + -DCGAL_DISABLE_ROUNDING_MATH_CHECK +) + +target_include_directories( + rlplan + PUBLIC + ${Boost_INCLUDE_DIR} + ${CGAL_INCLUDE_DIRS} +) + +target_link_libraries( + rlplan + rlkin + rlmath + rlmdl + rlsg + rlutil + rlxml + ${Boost_LIBRARIES} + ${CGAL_LIBRARIES} +) + +set_target_properties( + rlplan + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/plan COMPONENT headers) + +install( + TARGETS rlplan + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/plan/DistanceModel.cpp b/src/rl/plan/DistanceModel.cpp new file mode 100644 index 00000000..42e0732a --- /dev/null +++ b/src/rl/plan/DistanceModel.cpp @@ -0,0 +1,189 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "DistanceModel.h" + +namespace rl +{ + namespace plan + { + DistanceModel::DistanceModel() : + SimpleModel() + { + } + + DistanceModel::~DistanceModel() + { + } + + ::rl::math::Real + DistanceModel::distance(const ::rl::math::Vector3& point) + { + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + ::rl::math::Vector3 point1; + ::rl::math::Vector3 point2; + + for (::rl::sg::Scene::Iterator i = this->scene->begin(); i != this->scene->end(); ++i) + { + if (*i != this->model) + { + distance = ::std::min(distance, dynamic_cast< ::rl::sg::DistanceScene* >(this->scene)->distance(*i, point, point1, point2)); + } + } + + return distance; + } + + ::rl::math::Real + DistanceModel::distance(const ::std::size_t& body, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + assert(body < this->model->getNumBodies()); + + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + if (this->isColliding(body)) + { + for (::rl::sg::Scene::Iterator i = this->scene->begin(); i != this->scene->end(); ++i) + { + if (this->model != *i) + { + for (::rl::sg::Model::Iterator j = (*i)->begin(); j != (*i)->end(); ++j) + { + ::rl::math::Real tmpDistance = dynamic_cast< ::rl::sg::DistanceScene* >(this->scene)->distance(this->model->getBody(body), *j, tmpPoint1, tmpPoint2); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + } + } + + for (::std::size_t i = 0; i < this->model->getNumBodies(); ++i) + { + if (body != i) + { + if (this->areColliding(body, i)) + { + ::rl::math::Real tmpDistance = dynamic_cast< ::rl::sg::DistanceScene* >(this->scene)->distance(this->model->getBody(body), this->model->getBody(i), tmpPoint1, tmpPoint2); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + } + } + } + + return distance; + } + + void + DistanceModel::distance(const ::std::size_t& body, RealList& distances, Vector3List& points1, Vector3List& points2) + { + assert(body < this->model->getNumBodies()); + + distances.clear(); + points1.clear(); + points2.clear(); + + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + if (this->isColliding(body)) + { + for (::rl::sg::Scene::Iterator i = this->scene->begin(); i != this->scene->end(); ++i) + { + if (this->model != *i) + { + for (::rl::sg::Model::Iterator j = (*i)->begin(); j != (*i)->end(); ++j) + { + for (::rl::sg::Body::Iterator k = this->model->getBody(body)->begin(); k != this->model->getBody(body)->end(); ++k) + { + for (::rl::sg::Body::Iterator l = (*j)->begin(); l != (*j)->end(); ++l) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = dynamic_cast< ::rl::sg::DistanceScene* >(this->scene)->distance( + *k, + *l, + tmpPoint1, + tmpPoint2 + ); + + distances.push_back(tmpDistance); + points1.push_back(tmpPoint1); + points2.push_back(tmpPoint2); + } + } + } + } + } + + for (::std::size_t i = 0; i < this->model->getNumBodies(); ++i) + { + if (body != i) + { + if (this->areColliding(body, i)) + { + for (::rl::sg::Body::Iterator k = this->model->getBody(body)->begin(); k != this->model->getBody(body)->end(); ++k) + { + for (::rl::sg::Body::Iterator l = this->model->getBody(i)->begin(); l != this->model->getBody(i)->end(); ++l) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = dynamic_cast< ::rl::sg::DistanceScene* >(this->scene)->distance( + *k, + *l, + tmpPoint1, + tmpPoint2 + ); + + distances.push_back(tmpDistance); + points1.push_back(tmpPoint1); + points2.push_back(tmpPoint2); + } + } + } + } + } + } + } + } +} diff --git a/src/rl/plan/DistanceModel.h b/src/rl/plan/DistanceModel.h new file mode 100644 index 00000000..5e7b8f11 --- /dev/null +++ b/src/rl/plan/DistanceModel.h @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_DISTANCEMODEL_H_ +#define _RL_PLAN_DISTANCEMODEL_H_ + +#include + +#include "RealList.h" +#include "SimpleModel.h" +#include "Vector3List.h" + +namespace rl +{ + namespace plan + { + class DistanceModel : public SimpleModel + { + public: + DistanceModel(); + + virtual ~DistanceModel(); + + using SimpleModel::distance; + + virtual ::rl::math::Real distance(const ::rl::math::Vector3& point); + + virtual ::rl::math::Real distance(const ::std::size_t& body, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + virtual void distance(const ::std::size_t& body, RealList& distances, Vector3List& points1, Vector3List& points2); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_DISTANCEMODEL_H_ diff --git a/src/rl/plan/Eet.cpp b/src/rl/plan/Eet.cpp new file mode 100644 index 00000000..520ab5b8 --- /dev/null +++ b/src/rl/plan/Eet.cpp @@ -0,0 +1,480 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// + +//#define CSPACE + +#include +#include +#include +#include +#include + +#include "DistanceModel.h" +#include "Eet.h" +#include "Exception.h" +#include "Sampler.h" +#include "SimpleModel.h" +#include "Viewer.h" +#include "WorkspaceSphereExplorer.h" +#include "WorkspaceSphereVector.h" + +#if _MSC_VER < 1600 +#define nullptr NULL // TODO +#endif + +struct Compare +{ + bool operator()(const ::std::pair< void*, ::std::size_t >& lhs, const ::std::pair< void*, ::std::size_t >& rhs) const + { + return lhs.second < rhs.second; + } +}; + +namespace rl +{ + namespace plan + { + Eet::Eet() : + RrtCon(), + alpha(0.01f), + alternativeDistanceComputation(false), + distanceWeight(0.1f), + explorers(), + explorersSetup(), + gamma(1.0f / 3.0f), + goalEpsilon(0.1f), + goalEpsilonUseOrientation(false), + max(::rl::math::Vector3::Zero()), + min(::rl::math::Vector3::Zero()), + gauss( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::normal_distribution< ::rl::math::Real >(0.0f, 1.0f) + ), + rand( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::uniform_real< ::rl::math::Real >(0.0f, 1.0f) + ), + exploration(), + timer() + { + this->kd = false; + } + + Eet::~Eet() + { + } + + Rrt::Edge + Eet::addEdge(const Vertex& u, const Vertex& v, Tree& tree) + { + Edge e = ::boost::add_edge(u, v, tree).first; + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationEdge(*tree[u].q, *tree[v].q); + } + + return e; + } + + Rrt::Vertex + Eet::connect(Tree& tree, const Neighbor& nearest, const ::rl::math::Transform& chosen) + { + ::rl::math::Real distance = this->distance(*tree[nearest.first].t, chosen); + + Vertex connected = NULL; + Vertex n = nearest.first; + int state = 1; + + do + { + VertexBundle best; + best.q = ::boost::make_shared< ::rl::math::Vector >(this->model->getDof()); + best.t = ::boost::make_shared< ::rl::math::Transform >(); + + state = this->expand(tree[n], *tree[nearest.first].t, chosen, distance, best); // TODO + + if (state >= 0) + { + connected = this->addVertex(tree, best.q); + tree[connected].t = best.t; + this->addEdge(n, connected, tree); + n = connected; + + ::rl::math::Real distance2 = this->distance(*tree[n].t, chosen); + + if (distance2 > distance) + { + break; + } + else if (::std::abs(distance - distance2) < 1e-6) + { + break; + } + + distance = distance2; + } + } + while (state > 0); + + if (NULL != connected) + { + this->selected.push_back(connected); + } + + return connected; + } + + ::rl::math::Real + Eet::distance(const ::rl::math::Transform& t1, const ::rl::math::Transform& t2) const + { + if (this->alternativeDistanceComputation) + { + ::rl::math::Vector6 delta; + ::rl::math::transform::toDelta(t1, t2, delta); + return delta.norm(); + } + else + { + return ::rl::math::transform::distance(t1, t2, this->distanceWeight); + } + } + + int + Eet::expand(const VertexBundle& nearest, const ::rl::math::Transform& nearest2, const ::rl::math::Transform& chosen, const ::rl::math::Real& distance, VertexBundle& expanded) + { + int state = 1; + + ::rl::math::Vector6 tdot; + ::rl::math::transform::toDelta(nearest2, chosen, tdot); + + this->model->setPosition(*nearest.q); + this->model->updateFrames(); + this->model->updateJacobian(); + this->model->updateJacobianInverse(); + + ::rl::math::Vector qdot(this->model->getDof()); + qdot.setZero(); + + ::rl::math::Vector qdot2(this->model->getDof()); + this->model->inverseVelocity(tdot, qdot2); + qdot += qdot2; + + ::rl::math::Vector3 d; + ::rl::math::Vector3 omega; + RealList distances; + Vector3List points1; + Vector3List points2; + ::rl::math::Vector3 v; + + if (qdot.norm() <= this->delta) + { + state = 0; + } + else + { + qdot.normalize(); + qdot *= this->delta; + } + + this->model->step(*nearest.q, qdot, *expanded.q); + + if (this->model->getManipulabilityMeasure() < 1.0e-3f) // within singularity + { + this->sampler->generate(*expanded.q); // uniform sampling for singularities + ::rl::math::Real tmp = this->model->distance(*nearest.q, *expanded.q); + this->model->interpolate(*nearest.q, *expanded.q, this->delta / tmp, *expanded.q); + } + + if (!this->model->isValid(*expanded.q)) + { + return -1; + } + + if (NULL != this->viewer) + { + this->viewer->drawConfiguration(*expanded.q); + } + + this->model->setPosition(*expanded.q); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return -1; + } + + *expanded.t = this->model->forwardPosition(); + + return state; + } + + Rrt::Vertex + Eet::extend(Tree& tree, const Neighbor& nearest, const ::rl::math::Transform& chosen) + { + ::rl::math::Real distance = this->distance(*tree[nearest.first].t, chosen); + + Vertex extended = NULL; + + VertexBundle best; + best.q = ::boost::make_shared< ::rl::math::Vector >(this->model->getDof()); + best.t = ::boost::make_shared< ::rl::math::Transform >(); + + if (this->expand(tree[nearest.first], *tree[nearest.first].t, chosen, distance, best) >= 0) + { + extended = this->addVertex(tree, best.q); + tree[extended].t = best.t; + this->addEdge(nearest.first, extended, tree); + } + + return extended; + } + + ::rl::math::Real + Eet::getExplorationTime() const + { + return this->exploration.elapsed(); + } + + ::std::string + Eet::getName() const + { + return "EET"; + } + + ::std::size_t + Eet::getNumEdges() const + { + return this->selected.size() - 1; + } + + ::std::size_t + Eet::getNumVertices() const + { + return this->selected.size(); + } + + void + Eet::getPath(VectorList& path) + { + Rrt::getPath(path); + } + + Rrt::Neighbor + Eet::nearest(const Tree& tree, const ::rl::math::Transform& chosen) + { + Neighbor p(nullptr, ::std::numeric_limits< ::rl::math::Real >::max()); + + for (std::vector< Vertex >::iterator i = this->selected.begin(); i != this->selected.end(); ++i) + { + ::rl::math::Real d = this->distance(chosen, *tree[*i].t); + + if (d < p.second) + { + p.first = *i; + p.second = d; + } + } + + return p; + } + + void + Eet::reset() + { + RrtCon::reset(); + + for (::std::vector::iterator i = this->explorers.begin(); i != this->explorers.end(); ++i) + { + (*i)->reset(); + } + + this->selected.clear(); + } + + void + Eet::seed(const ::boost::mt19937::result_type& value) + { + this->gauss.engine().seed(value); + this->rand.engine().seed(value); + } + + bool + Eet::solve() + { + if (this->model->getOperationalDof() > 1) + { + throw("::rl::plan::Eet::solve() - branched kinematics not supported"); + } + + this->timer.start(); + this->exploration.start(); + + // initialize workspace explorers + + for (::std::size_t i = 0; i < this->explorersSetup.size(); ++i) + { + if (NULL != this->explorersSetup[i].startConfiguration) + { + this->model->setPosition(*this->explorersSetup[i].startConfiguration); + this->model->updateFrames(false); + + if (-1 == this->explorersSetup[i].startFrame) + { + *this->explorers[i]->start = this->model->forwardPosition().translation(); + } + else + { + *this->explorers[i]->start = this->model->getFrame(this->explorersSetup[i].startFrame).translation(); + } + } + + if (NULL != this->explorersSetup[i].goalConfiguration) + { + this->model->setPosition(*this->explorersSetup[i].goalConfiguration); + this->model->updateFrames(false); + + if (-1 == this->explorersSetup[i].goalFrame) + { + *this->explorers[i]->goal = this->model->forwardPosition().translation(); + } + else + { + *this->explorers[i]->goal = this->model->getFrame(this->explorersSetup[i].goalFrame).translation(); + } + } + } + + // compute sphere tree + + WorkspaceSphereVector path; + + for (::std::vector< WorkspaceSphereExplorer* >::iterator j = this->explorers.begin(); j != this->explorers.end(); ++j) + { + if (!(*j)->explore()) + { + return false; + } + + WorkspaceSphereList path2; + (*j)->getPath(path2); + path.insert(path.end(), path2.begin(), path2.end()); + } + + this->exploration.stop(); + + // tree initialization with start configuration + + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->selected.push_back(this->begin[0]); + this->model->setPosition(*this->start); + this->model->updateFrames(); + this->tree[0][this->begin[0]].t = ::boost::make_shared< ::rl::math::Transform >(this->model->forwardPosition()); + + ::rl::math::Transform chosen; + chosen.setIdentity(); + + ::rl::math::Quaternion quaternion; + + this->model->setPosition(*this->goal); + this->model->updateFrames(); + ::rl::math::Transform goal = this->model->forwardPosition(); + + WorkspaceSphereVector::iterator i = ++path.begin(); + ::rl::math::Real sigma = gamma; // initialize exploration/exploitation balance + + while (timer.elapsed() < this->duration) // search until goal reached + { + if (sigma < 1.0f) // sample is within current sphere + { + Neighbor nearest; + + if (path.end() == i + 1 && this->rand() < 0.5f) // within last sphere + { + chosen = goal; // select goal position and orientation + nearest = this->nearest(this->tree[0], chosen); // nearest vertex in tree + } + else + { + // sample within sphere + + chosen.translation().x() = this->gauss() * sigma * i->radius + (*i->center).x(); + chosen.translation().y() = this->gauss() * sigma * i->radius + (*i->center).y(); + chosen.translation().z() = this->gauss() * sigma * i->radius + (*i->center).z(); + + for (::std::size_t k = 0; k < 3; ++k) + { + if (chosen(k, 3) < this->min(k)) chosen(k, 3) = this->min(k); + if (chosen(k, 3) > this->max(k)) chosen(k, 3) = this->max(k); + } + + // uniform sampling for orientation + + quaternion.fromUniform(this->rand(), this->rand(), this->rand()); + chosen.linear() = quaternion.toRotationMatrix(); + + nearest = this->nearest(this->tree[0], chosen); // nearest vertex in tree + } + + if (NULL != this->viewer) + { + this->viewer->drawWork(chosen); + } + + Vertex connected = this->connect(this->tree[0], nearest, chosen); + + if (NULL != connected) + { + if (this->goalEpsilonUseOrientation) + { + if (this->distance(*this->tree[0][connected].t, goal) < this->goalEpsilon) + { + this->end[0] = connected; + return true; + } + } + else + { + if ((this->tree[0][connected].t->translation() - goal.translation()).norm() < this->goalEpsilon) + { + this->end[0] = connected; + return true; + } + } + + sigma *= 1.0f - this->alpha; // increase exploitation + sigma = ::std::max(static_cast< ::rl::math::Real >(0.1f), sigma); + + for (WorkspaceSphereVector::reverse_iterator k = ++path.rbegin(); k.base() != i; ++k) // search spheres backwards + { + if (((*this->tree[0][connected].t).translation() - *k->center).norm() < k->radius) // position is within sphere + { + i = k.base(); // advance to matching sphere + sigma = gamma; // reset exploration/exploitation balance + break; + } + } + } + else // expansion unsuccessful + { + sigma *= 1.0f + this->alpha; // decrease exploitation + } + } + else // perform backtracking to previous sphere + { + if (i != path.begin()) + { + --i; // select previous sphere + sigma = gamma; // reset exploration/exploitation balance + } + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/Eet.h b/src/rl/plan/Eet.h new file mode 100644 index 00000000..b6e17e54 --- /dev/null +++ b/src/rl/plan/Eet.h @@ -0,0 +1,131 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// + +#ifndef _RL_PLAN_EET_H_ +#define _RL_PLAN_EET_H_ + +#include +#include +#include +#include +#include + +#include "RrtCon.h" + +namespace rl +{ + namespace plan + { + class WorkspaceSphereExplorer; + + /** + * Exploring/Exploiting Trees + * + * Markus Rickert, Oliver Brock, and Alois Knoll. Balancing exploration + * and exploitation in motion planning. In Proceedings of the IEEE + * International Conference on Robotics and Automation, pages 2812-2817, + * Pasadena, CA, USA, May 2008. + */ + class Eet : public RrtCon + { + public: + struct ExplorerSetup + { + /** Goal configuration reference for workspace explorer setup. */ + ::rl::math::Vector* goalConfiguration; + + /** Goal frame for workspace explorer in goal configuration reference. */ + int goalFrame; + + /** Start configuration reference for workspace explorer setup. */ + ::rl::math::Vector* startConfiguration; + + /** Start frame for workspace explorer in start configuration reference. */ + int startFrame; + }; + + Eet(); + + virtual ~Eet(); + + ::rl::math::Real getExplorationTime() const; + + virtual ::std::string getName() const; + + virtual ::std::size_t getNumEdges() const; + + virtual ::std::size_t getNumVertices() const; + + void getPath(VectorList& path); + + void seed(const ::boost::mt19937::result_type& value); + + void reset(); + + bool solve(); + + /** Control increase/decrease of exploitation. */ + ::rl::math::Real alpha; + + /** Better performance in certain scenarios. */ + bool alternativeDistanceComputation; + + /** Weight factor translation vs. orientation. */ + ::rl::math::Real distanceWeight; + + ::std::vector< WorkspaceSphereExplorer* > explorers; + + ::std::vector< ExplorerSetup > explorersSetup; + + /** Initialization value for exploration/exploitation balance. */ + ::rl::math::Real gamma; + + /** Epsilon for goal state. */ + ::rl::math::Real goalEpsilon; + + /** Include frame orientation in goal epsilon calculation. */ + bool goalEpsilonUseOrientation; + + /** Upper workspace limit for workspace frame sampling. */ + ::rl::math::Vector3 max; + + /** Lower workspace limit for workspace frame sampling. */ + ::rl::math::Vector3 min; + + protected: + using RrtCon::connect; + + using RrtCon::extend; + + using RrtCon::nearest; + + Edge addEdge(const Vertex& u, const Vertex& v, Tree& tree); + + Vertex connect(Tree& tree, const Neighbor& nearest, const ::rl::math::Transform& chosen); + + ::rl::math::Real distance(const ::rl::math::Transform& t1, const ::rl::math::Transform& t2) const; + + int expand(const VertexBundle& nearest, const ::rl::math::Transform& nearest2, const ::rl::math::Transform& chosen, const ::rl::math::Real& distance, VertexBundle& expanded); + + Vertex extend(Tree& tree, const Neighbor& nearest, const ::rl::math::Transform& chosen); + + Neighbor nearest(const Tree& tree, const ::rl::math::Transform& chosen); + + ::boost::variate_generator< ::boost::mt19937, ::boost::normal_distribution< ::rl::math::Real > > gauss; + + ::boost::variate_generator< ::boost::mt19937, ::boost::uniform_real< ::rl::math::Real > > rand; + + private: + ::rl::util::Timer exploration; + + /** Vertices for nearest neighbor search. */ + ::std::vector< Vertex > selected; + + ::rl::util::Timer timer; + }; + } +} + +#endif // _RL_PLAN_EET_H_ diff --git a/src/rl/plan/Exception.cpp b/src/rl/plan/Exception.cpp new file mode 100644 index 00000000..175f9a05 --- /dev/null +++ b/src/rl/plan/Exception.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Exception.h" + +namespace rl +{ + namespace plan + { + Exception::Exception(const ::std::string& what_arg) : + ::std::runtime_error(what_arg) + { + } + + Exception::~Exception() throw() + { + } + } +} diff --git a/src/rl/plan/Exception.h b/src/rl/plan/Exception.h new file mode 100644 index 00000000..8d3f836d --- /dev/null +++ b/src/rl/plan/Exception.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_EXCEPTION_H_ +#define _RL_PLAN_EXCEPTION_H_ + +#include + +namespace rl +{ + namespace plan + { + class Exception : public ::std::runtime_error + { + public: + Exception(const ::std::string& what_arg); + + virtual ~Exception() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_EXCEPTION_H_ diff --git a/src/rl/plan/GaussianSampler.cpp b/src/rl/plan/GaussianSampler.cpp new file mode 100644 index 00000000..2f1a853c --- /dev/null +++ b/src/rl/plan/GaussianSampler.cpp @@ -0,0 +1,102 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "GaussianSampler.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + GaussianSampler::GaussianSampler() : + UniformSampler(), + sigma(NULL), + gauss( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::normal_distribution< ::rl::math::Real >(0.0f, 1.0f) + ) + { + } + + GaussianSampler::~GaussianSampler() + { + } + + void + GaussianSampler::generateCollisionFree(::rl::math::Vector& q) + { + assert(q.size() == this->model->getDof()); + + ::rl::math::Vector q2(this->model->getDof()); + + while (true) + { + this->generate(q); + + for (::std::size_t i = 0; i < this->model->getDof(); ++i) + { + q2(i) = this->gauss() * (*this->sigma)(i) + q(i); + } + + this->model->clip(q2); + + this->model->setPosition(q); + this->model->updateFrames(); + + if (!this->model->isColliding()) + { + this->model->setPosition(q2); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return; + } + } + else + { + this->model->setPosition(q2); + this->model->updateFrames(); + + if (!this->model->isColliding()) + { + q = q2; + return; + } + } + } + } + + void + GaussianSampler::seed(const ::boost::mt19937::result_type& value) + { + this->gauss.engine().seed(value); + this->rand.engine().seed(value); + } + } +} diff --git a/src/rl/plan/GaussianSampler.h b/src/rl/plan/GaussianSampler.h new file mode 100644 index 00000000..9cb17640 --- /dev/null +++ b/src/rl/plan/GaussianSampler.h @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_GAUSSIANSAMPLER_H_ +#define _RL_PLAN_GAUSSIANSAMPLER_H_ + +#include + +#include "UniformSampler.h" + +namespace rl +{ + namespace plan + { + class GaussianSampler : public UniformSampler + { + public: + GaussianSampler(); + + virtual ~GaussianSampler(); + + void generateCollisionFree(::rl::math::Vector& q); + + virtual void seed(const ::boost::mt19937::result_type& value); + + ::rl::math::Vector* sigma; + + protected: + ::boost::variate_generator< ::boost::mt19937, ::boost::normal_distribution< ::rl::math::Real > > gauss; + + private: + + }; + } +} + +#endif // _RL_PLAN_GAUSSIANSAMPLER_H_ diff --git a/src/rl/plan/MatrixPtr.h b/src/rl/plan/MatrixPtr.h new file mode 100644 index 00000000..dabefeba --- /dev/null +++ b/src/rl/plan/MatrixPtr.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_MATRIXPTR_H_ +#define _RL_PLAN_MATRIXPTR_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::boost::shared_ptr< ::rl::math::Matrix > MatrixPtr; + } +} + +#endif // _RL_PLAN_MATRIXPTR_H_ diff --git a/src/rl/plan/Model.cpp b/src/rl/plan/Model.cpp new file mode 100644 index 00000000..7e64a548 --- /dev/null +++ b/src/rl/plan/Model.cpp @@ -0,0 +1,541 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Model.h" + +namespace rl +{ + namespace plan + { + Model::Model() : + kin(NULL), + mdl(NULL), + model(NULL), + scene(NULL) + { + } + + Model::~Model() + { + } + + bool + Model::areColliding(const ::std::size_t& i, const ::std::size_t& j) const + { + if (NULL != this->kin) + { + return this->kin->areColliding(i, j); + } + else + { + return this->mdl->areColliding(i, j); + } + } + + void + Model::clip(::rl::math::Vector& q) const + { + if (NULL != this->kin) + { + this->kin->clip(q); + } + else + { + this->mdl->clip(q); + } + } + + ::rl::math::Real + Model::distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + if (NULL != this->kin) + { + return this->kin->distance(q1, q2); + } + else + { + return this->mdl->distance(q1, q2); + } + } + + void + Model::forwardForce(const ::rl::math::Vector& tau, ::rl::math::Vector& f) const + { + if (NULL != this->kin) + { + this->kin->forwardForce(tau, f); + } + else + { + f = this->mdl->getJacobianInverse().transpose() * tau; // TODO + } + } + + const ::rl::math::Transform& + Model::forwardPosition(const ::std::size_t& i) const + { + if (NULL != this->kin) + { + return this->kin->forwardPosition(i); + } + else + { + return this->mdl->getOperationalPosition(i); + } + } + + void + Model::forwardVelocity(const ::rl::math::Vector& qdot, ::rl::math::Vector& xdot) const + { + if (NULL != this->kin) + { + this->kin->forwardVelocity(qdot, xdot); + } + else + { + xdot = this->mdl->getJacobian() * qdot; // TODO + } + } + + ::std::size_t + Model::getBodies() const + { + if (NULL != this->kin) + { + return this->kin->getBodies(); + } + else + { + return this->mdl->getBodies(); + } + } + + ::rl::sg::Body* + Model::getBody(const ::std::size_t& i) const + { + return this->model->getBody(i); + } + + ::rl::math::Vector3& + Model::getCenter(const ::std::size_t& i) const + { + return this->model->getBody(i)->center; + } + + ::std::size_t + Model::getDof() const + { + if (NULL != this->kin) + { + return this->kin->getDof(); + } + else + { + return this->mdl->getDof(); + } + } + + const ::rl::math::Transform& + Model::getFrame(const ::std::size_t& i) const + { + if (NULL != this->kin) + { + return this->kin->getFrame(i); + } + else + { + return this->mdl->getFrame(i); + } + } + + const ::rl::math::Matrix& + Model::getJacobian() const + { + if (NULL != this->kin) + { + return this->kin->getJacobian(); + } + else + { + return this->mdl->getJacobian(); + } + } + + ::rl::math::Real + Model::getManipulabilityMeasure() const + { + if (NULL != this->kin) + { + return this->kin->getManipulabilityMeasure(); + } + else + { + return this->mdl->calculateManipulabilityMeasure(); + } + } + + ::std::string + Model::getManufacturer() const + { + if (NULL != this->kin) + { + return this->kin->getManufacturer(); + } + else + { + return this->mdl->getManufacturer(); + } + } + + void + Model::getMaximum(::rl::math::Vector& maximum) const + { + if (NULL != this->kin) + { + this->kin->getMaximum(maximum); + } + else + { + this->mdl->getMaximum(maximum); + } + } + + void + Model::getMinimum(::rl::math::Vector& minimum) const + { + if (NULL != this->kin) + { + this->kin->getMinimum(minimum); + } + else + { + this->mdl->getMinimum(minimum); + } + } + + ::std::string + Model::getName() const + { + if (NULL != this->kin) + { + return this->kin->getName(); + } + else + { + return this->mdl->getName(); + } + } + + ::std::size_t + Model::getOperationalDof() const + { + if (NULL != this->kin) + { + return this->kin->getOperationalDof(); + } + else + { + return this->mdl->getOperationalDof(); + } + } + + void + Model::getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const + { + if (NULL != this->kin) + { + this->kin->getPositionUnits(units); + } + else + { + this->mdl->getPositionUnits(units); + } + } + + void + Model::inverseForce(const ::rl::math::Vector& f, ::rl::math::Vector& tau) const + { + if (NULL != this->kin) + { + this->kin->inverseForce(f, tau); + } + else + { + tau = this->mdl->getJacobian().transpose() * f; // TODO + } + } + + ::rl::math::Real + Model::inverseOfTransformedDistance(const ::rl::math::Real& d) const + { + if (NULL != this->kin) + { + return this->kin->inverseOfTransformedDistance(d); + } + else + { + return this->mdl->inverseOfTransformedDistance(d); + } + } + + void + Model::inverseVelocity(const ::rl::math::Vector& xdot, ::rl::math::Vector& qdot) const + { + if (NULL != this->kin) + { + this->kin->inverseVelocity(xdot, qdot); + } + else + { + qdot = this->mdl->getJacobianInverse() * xdot; // TODO + } + } + + void + Model::interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const + { + if (NULL != this->kin) + { + this->kin->interpolate(q1, q2, alpha, q); + } + else + { + this->mdl->interpolate(q1, q2, alpha, q); + } + } + + bool + Model::isColliding(const ::std::size_t& i) const + { + if (NULL != this->kin) + { + return this->kin->isColliding(i); + } + else + { + return this->mdl->isColliding(i); + } + } + + bool + Model::isSingular() const + { + if (NULL != this->kin) + { + return this->kin->isSingular(); + } + else + { + return this->mdl->isSingular(); + } + } + + bool + Model::isValid(const ::rl::math::Vector& q) const + { + if (NULL != this->kin) + { + return this->kin->isValid(q); + } + else + { + return this->mdl->isValid(q); + } + } + + ::rl::math::Real + Model::maxDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const + { + if (NULL != this->kin) + { + return this->kin->maxDistanceToRectangle(q, min, max); + } + else + { + return this->mdl->maxDistanceToRectangle(q, min, max); + } + } + + ::rl::math::Real + Model::minDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const + { + if (NULL != this->kin) + { + return this->kin->minDistanceToRectangle(q, min, max); + } + else + { + return this->mdl->minDistanceToRectangle(q, min, max); + } + } + + ::rl::math::Real + Model::minDistanceToRectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cuttingDimension) const + { + if (NULL != this->kin) + { + return this->kin->minDistanceToRectangle(q, min, max, cuttingDimension); + } + else + { + return this->mdl->minDistanceToRectangle(q, min, max, cuttingDimension); + } + } + + ::rl::math::Real + Model::newDistance(const ::rl::math::Real& dist, const ::rl::math::Real& oldOff, const ::rl::math::Real& newOff, const int& cuttingDimension) const + { + if (NULL != this->kin) + { + return this->kin->newDistance(dist, oldOff, newOff, cuttingDimension); + } + else + { + return this->mdl->newDistance(dist, oldOff, newOff, cuttingDimension); + } + } + + void + Model::reset() + { + } + + void + Model::setPosition(const ::rl::math::Vector& q) + { + if (NULL != this->kin) + { + assert(q.size() == this->kin->getDof()); + this->kin->setPosition(q); + } + else + { + assert(q.size() == this->mdl->getDof()); + this->mdl->setPosition(q); + } + } + + void + Model::step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const + { + if (NULL != this->kin) + { + this->kin->step(q1, qdot, q2); + } + else + { + this->mdl->step(q1, qdot, q2); + } + } + + ::rl::math::Real + Model::transformedDistance(const ::rl::math::Real& d) const + { + if (NULL != this->kin) + { + return this->kin->transformedDistance(d); + } + else + { + return this->mdl->transformedDistance(d); + } + } + + ::rl::math::Real + Model::transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const + { + if (NULL != this->kin) + { + return this->kin->transformedDistance(q1, q2); + } + else + { + return this->mdl->transformedDistance(q1, q2); + } + } + + void + Model::updateFrames(const bool& doUpdateModel) + { + if (NULL != this->kin) + { + assert(this->model->getNumBodies() == this->kin->getBodies()); + + this->kin->updateFrames(); + + if (doUpdateModel) + { + for (::std::size_t i = 0; i < this->model->getNumBodies(); ++i) + { + this->model->getBody(i)->setFrame(this->kin->getFrame(i)); + } + } + } + else + { + assert(this->model->getNumBodies() == this->mdl->getBodies()); + + this->mdl->forwardPosition(); + + if (doUpdateModel) + { + for (::std::size_t i = 0; i < this->model->getNumBodies(); ++i) + { + this->model->getBody(i)->setFrame(this->mdl->getFrame(i)); + } + } + } + } + + void + Model::updateJacobian() + { + if (NULL != this->kin) + { + this->kin->updateJacobian(); + } + else + { + this->mdl->calculateJacobian(); + } + } + + void + Model::updateJacobianInverse(const ::rl::math::Real& lambda, const bool& doSvd) + { + if (NULL != this->kin) + { + this->kin->updateJacobianInverse(lambda, doSvd); + } + else + { + this->mdl->calculateJacobianInverse(lambda, doSvd); + } + } + } +} diff --git a/src/rl/plan/Model.h b/src/rl/plan/Model.h new file mode 100644 index 00000000..0df4acec --- /dev/null +++ b/src/rl/plan/Model.h @@ -0,0 +1,140 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_MODEL_H_ +#define _RL_PLAN_MODEL_H_ + +#include +#include +#include +#include +#include +#include + +namespace rl +{ + namespace plan + { + class Model + { + public: + Model(); + + virtual ~Model(); + + virtual bool areColliding(const ::std::size_t& i, const ::std::size_t& j) const; + + virtual void clip(::rl::math::Vector& q) const; + + virtual ::rl::math::Real distance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + virtual void forwardForce(const ::rl::math::Vector& tau, ::rl::math::Vector& f) const; + + virtual const ::rl::math::Transform& forwardPosition(const ::std::size_t& i = 0) const; + + virtual void forwardVelocity(const ::rl::math::Vector& qdot, ::rl::math::Vector& xdot) const; + + virtual ::rl::sg::Body* getBody(const ::std::size_t& i) const; + + virtual ::std::size_t getBodies() const; + + virtual ::rl::math::Vector3& getCenter(const ::std::size_t& i) const; + + virtual ::std::size_t getDof() const; + + virtual const ::rl::math::Transform& getFrame(const ::std::size_t& i) const; + + virtual const ::rl::math::Matrix& getJacobian() const; + + virtual ::rl::math::Real getManipulabilityMeasure() const; + + virtual ::std::string getManufacturer() const; + + virtual void getMaximum(::rl::math::Vector& maximum) const; + + virtual void getMinimum(::rl::math::Vector& minimum) const; + + virtual ::std::string getName() const; + + virtual ::std::size_t getOperationalDof() const; + + virtual void getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const; + + virtual void inverseForce(const ::rl::math::Vector& f, ::rl::math::Vector& tau) const; + + virtual ::rl::math::Real inverseOfTransformedDistance(const ::rl::math::Real& d) const; + + virtual void inverseVelocity(const ::rl::math::Vector& tdot, ::rl::math::Vector& qdot) const; + + virtual void interpolate(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2, const ::rl::math::Real& alpha, ::rl::math::Vector& q) const; + + virtual bool isColliding(const ::std::size_t& i) const; + + virtual bool isSingular() const; + + virtual bool isValid(const ::rl::math::Vector& q) const; + + virtual ::rl::math::Real maxDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const; + + virtual ::rl::math::Real minDistanceToRectangle(const ::rl::math::Vector& q, const ::rl::math::Vector& min, const ::rl::math::Vector& max) const; + + virtual ::rl::math::Real minDistanceToRectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cuttingDimension) const; + + virtual ::rl::math::Real newDistance(const ::rl::math::Real& dist, const ::rl::math::Real& oldOff, const ::rl::math::Real& newOff, const int& cuttingDimension) const; + + virtual void reset(); + + virtual void setPosition(const ::rl::math::Vector& q); + + virtual void step(const ::rl::math::Vector& q1, const ::rl::math::Vector& qdot, ::rl::math::Vector& q2) const; + + virtual ::rl::math::Real transformedDistance(const ::rl::math::Real& d) const; + + virtual ::rl::math::Real transformedDistance(const ::rl::math::Vector& q1, const ::rl::math::Vector& q2) const; + + virtual void updateFrames(const bool& doUpdateModel = true); + + virtual void updateJacobian(); + + virtual void updateJacobianInverse(const ::rl::math::Real& lambda = 0.0f, const bool& doSvd = true); + + ::rl::kin::Kinematics* kin; + + ::rl::mdl::Dynamic* mdl; + + ::rl::sg::Model* model; + + ::rl::sg::Scene* scene; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_MODEL_H_ diff --git a/src/rl/plan/Optimizer.cpp b/src/rl/plan/Optimizer.cpp new file mode 100644 index 00000000..0c11f0af --- /dev/null +++ b/src/rl/plan/Optimizer.cpp @@ -0,0 +1,44 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Optimizer.h" + +namespace rl +{ + namespace plan + { + Optimizer::Optimizer() : + model(NULL), + verifier(NULL), + viewer(NULL) + { + } + + Optimizer::~Optimizer() + { + } + } +} diff --git a/src/rl/plan/Optimizer.h b/src/rl/plan/Optimizer.h new file mode 100644 index 00000000..fcf0f26c --- /dev/null +++ b/src/rl/plan/Optimizer.h @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_OPTIMIZER_H_ +#define _RL_PLAN_OPTIMIZER_H_ + +#include "VectorList.h" + +namespace rl +{ + namespace plan + { + class SimpleModel; + class Verifier; + class Viewer; + + class Optimizer + { + public: + Optimizer(); + + virtual ~Optimizer(); + + virtual void process(VectorList& path) = 0; + + SimpleModel* model; + + Verifier* verifier; + + Viewer* viewer; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_OPTIMIZER_H_ diff --git a/src/rl/plan/Orthogonal_k_neighbor_search.h b/src/rl/plan/Orthogonal_k_neighbor_search.h new file mode 100644 index 00000000..e3dc3ab4 --- /dev/null +++ b/src/rl/plan/Orthogonal_k_neighbor_search.h @@ -0,0 +1,145 @@ +// Copyright (c) 2002,2011 Utrecht University (The Netherlands). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// You can redistribute it and/or modify it under the terms of the GNU +// General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// Licensees holding a valid commercial license may use this file in +// accordance with the commercial license agreement provided with the software. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +// +// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/next/Spatial_searching/include/CGAL/Orthogonal_k_neighbor_search.h $ +// $Id: Orthogonal_k_neighbor_search.h 67117 2012-01-13 18:14:48Z lrineau $ +// +// +// Author(s) : Gael Guennebaud (gael.guennebaud@inria.fr), Hans Tangelder () +// Markus Rickert + +#ifndef _RL_PLAN_ORTHOGONAL_K_NEIGHBOR_SEARCH_H_ +#define _RL_PLAN_ORTHOGONAL_K_NEIGHBOR_SEARCH_H_ + +#include + +namespace rl { namespace plan { + +template 1030801000) + class Distance= typename ::CGAL::internal::Spatial_searching_default_distance::type, +#else + class Distance= ::CGAL::Euclidean_distance, +#endif + class Splitter= ::CGAL::Sliding_midpoint , + class Tree= ::CGAL::Kd_tree > +class Orthogonal_k_neighbor_search: public ::CGAL::internal::K_neighbor_search { + typedef ::CGAL::internal::K_neighbor_search Base; + + typename SearchTraits::Cartesian_const_iterator_d query_object_it; + +public: + typedef typename Base::FT FT; + +#if (CGAL_VERSION_NR > 1030901000) + Orthogonal_k_neighbor_search(const Tree& tree, const typename Base::Query_item& q, +#else + Orthogonal_k_neighbor_search(Tree& tree, const typename Base::Query_item& q, +#endif + unsigned int k=1, FT Eps=FT(0.0), bool Search_nearest=true, const Distance& d=Distance(),bool sorted=true) + : Base(q,k,Eps,Search_nearest,d) + { + if (tree.empty()) return; + + FT distance_to_root; + if (this->search_nearest) + distance_to_root = this->distance_instance.min_distance_to_rectangle(q, tree.bounding_box()); + else + distance_to_root = this->distance_instance.max_distance_to_rectangle(q, tree.bounding_box()); + + +#if (CGAL_VERSION_NR > 1030801000) + typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=tree.traits().construct_cartesian_const_iterator_d_object(); +#else + typename SearchTraits::Construct_cartesian_const_iterator_d construct_it; +#endif + query_object_it = construct_it(this->query_object); + + compute_neighbors_orthogonally(tree.root(), distance_to_root); + + if (sorted) this->queue.sort(); + } +private: + +#if (CGAL_VERSION_NR > 1030901000) + void compute_neighbors_orthogonally(typename Base::Node_const_handle N, FT rd) +#else + void compute_neighbors_orthogonally(typename Base::Node_handle N, FT rd) +#endif + { + if (!(N->is_leaf())) + { + this->number_of_internal_nodes_visited++; + int new_cut_dim=N->cutting_dimension(); + FT new_rd; + FT low_off = this->distance_instance.min_distance_to_rectangle( + *(query_object_it + new_cut_dim), + N->low_value(), + N->cutting_value(), + new_cut_dim + ); + FT high_off = this->distance_instance.min_distance_to_rectangle( + *(query_object_it + new_cut_dim), + N->cutting_value(), + N->high_value(), + new_cut_dim + ); + if ( ((low_off < high_off) && (this->search_nearest)) || + ((low_off >= high_off) && (!this->search_nearest)) ) + { + compute_neighbors_orthogonally(N->lower(),rd); + if (this->search_nearest) { + new_rd = this->distance_instance.new_distance(rd,low_off,high_off,new_cut_dim); + } + else { + new_rd = this->distance_instance.new_distance(rd,high_off,low_off,new_cut_dim); + } + if (this->branch(new_rd)) + compute_neighbors_orthogonally(N->upper(), new_rd); + } + else // compute new distance + { + compute_neighbors_orthogonally(N->upper(),rd); + if (this->search_nearest) { + new_rd = this->distance_instance. new_distance(rd,high_off,low_off,new_cut_dim); + } + else { + new_rd = this->distance_instance. new_distance(rd,low_off,high_off,new_cut_dim); + } + if (this->branch(new_rd)) + compute_neighbors_orthogonally(N->lower(), new_rd); + } + } + else + { + // n is a leaf + this->number_of_leaf_nodes_visited++; + if (N->size() > 0) + { + for (typename Base::Point_d_iterator it=N->begin(); it != N->end(); it++) + { + this->number_of_items_visited++; + FT distance_to_query_object= + this->distance_instance.transformed_distance(this->query_object,**it); + this->queue.insert(::std::make_pair(*it,distance_to_query_object)); + } + } + } + } + +}; // class + +} } // namespace + +#endif // _RL_PLAN_ORTHOGONAL_K_NEIGHBOR_SEARCH_H_ diff --git a/src/rl/plan/Planner.cpp b/src/rl/plan/Planner.cpp new file mode 100644 index 00000000..89151729 --- /dev/null +++ b/src/rl/plan/Planner.cpp @@ -0,0 +1,81 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Planner.h" +#include "SimpleModel.h" +#include "Viewer.h" + +namespace rl +{ + namespace plan + { + Planner::Planner() : + duration(::std::numeric_limits< ::rl::math::Real >::max()), + goal(NULL), + model(NULL), + start(NULL), + viewer(NULL), + timer() + { + } + + Planner::~Planner() + { + } + + bool + Planner::verify() + { + if (!this->model->isValid(*this->start)) + { + return false; + } + + if (!this->model->isValid(*this->goal)) + { + return false; + } + + this->model->setPosition(*this->start); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return false; + } + + this->model->setPosition(*this->goal); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return false; + } + + return true; + } + } +} diff --git a/src/rl/plan/Planner.h b/src/rl/plan/Planner.h new file mode 100644 index 00000000..2de3ccae --- /dev/null +++ b/src/rl/plan/Planner.h @@ -0,0 +1,96 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_PLANNER_H_ +#define _RL_PLAN_PLANNER_H_ + +#include +#include +#include + +#include "VectorList.h" + +namespace rl +{ + namespace plan + { + class SimpleModel; + class Viewer; + + class Planner + { + public: + Planner(); + + virtual ~Planner(); + + virtual ::std::string getName() const = 0; + + /** + * Get solution path. + * + * \pre solve() + */ + virtual void getPath(VectorList& path) = 0; + + /** + * Reset planner. + */ + virtual void reset() = 0; + + /** + * Find collision free path. + */ + virtual bool solve() = 0; + + /** + * Vertify that start and goal configuration are within joint limits and collision free. + */ + bool verify(); + + /** Upper bound for search [s]. */ + ::rl::math::Real duration; + + /** Goal configuration. */ + ::rl::math::Vector* goal; + + SimpleModel* model; + + /** Start configuration. */ + ::rl::math::Vector* start; + + Viewer* viewer; + + protected: + ::rl::util::Timer timer; + + private: + + }; + } +} + +#endif // _RL_PLAN_PLANNER_H_ diff --git a/src/rl/plan/Prm.cpp b/src/rl/plan/Prm.cpp new file mode 100644 index 00000000..bf100b5d --- /dev/null +++ b/src/rl/plan/Prm.cpp @@ -0,0 +1,423 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "BridgeSampler.h" +#include "GaussianSampler.h" +#include "Prm.h" +#include "Sampler.h" +#include "SimpleModel.h" +#include "UniformSampler.h" +#include "Verifier.h" +#include "Viewer.h" + +namespace rl +{ + namespace plan + { + Prm::Prm() : + Planner(), + degree(::std::numeric_limits< ::std::size_t >::max()), + k(30), + kd(true), + radius(::std::numeric_limits< ::rl::math::Real >::max()), + sampler(NULL), + verifier(NULL), + begin(NULL), + ds( + ::boost::get(&VertexBundle::rank, graph), + ::boost::get(&VertexBundle::parent, graph) + ), + end(NULL), + graph() + { + } + + Prm::~Prm() + { + } + + Prm::Edge + Prm::addEdge(const Vertex& u, const Vertex& v, const ::rl::math::Real& weight) + { + Edge e = ::boost::add_edge(u, v, this->graph).first; + this->graph[e].weight = weight; + + this->ds.union_set(u, v); + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationEdge(*this->graph[u].q, *this->graph[v].q); + } + + return e; + } + + void + Prm::addPoint(NearestNeighbors& nn, const QueryItem& p) + { + NearestNeighbors::iterator i; + + for (i = nn.begin(); i != nn.end(); ++i) + { + if (NULL == *i) + { + break; + } + } + + NeighborSearchTreePtr tree(new NeighborSearchTree()); + + if (nn.end() == i) + { + i = nn.insert(i, tree); + } + else + { + *i = tree; + } + + for (NearestNeighbors::iterator j = nn.begin(); j != i; ++j) + { + if (NULL != *j) + { + (*i)->insert((*j)->begin(), (*j)->end()); + j->reset(); + } + } + + tree->insert(p); + } + + Prm::Vertex + Prm::addVertex(const VectorPtr& q) + { + Vertex v = ::boost::add_vertex(this->graph); + this->graph[v].index = ::boost::num_vertices(this->graph) - 1; + this->graph[v].q = q; + this->ds.make_set(v); + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationVertex(*this->graph[v].q); + } + + return v; + } + + void + Prm::construct(const ::std::size_t& steps) + { + for (::std::size_t i = 0; i < steps; ++i) + { + VectorPtr q = ::boost::make_shared< ::rl::math::Vector >(this->model->getDof()); + this->sampler->generateCollisionFree(*q); + Vertex v = this->addVertex(q); + this->insert(v); + } + } + + ::std::string + Prm::getName() const + { + if (NULL != this->sampler) + { + if (typeid(*this->sampler) == typeid(BridgeSampler)) + { + return "Bridge PRM"; + } + else if (typeid(*this->sampler) == typeid(GaussianSampler)) + { + return "Gaussian PRM"; + } + } + + return "PRM"; + } + + ::std::size_t + Prm::getNumEdges() const + { + return ::boost::num_edges(this->graph); + } + + ::std::size_t + Prm::getNumVertices() const + { + return ::boost::num_vertices(this->graph); + } + + void + Prm::getPath(VectorList& path) + { + Vertex i = this->end; + + while (i != this->begin) + { + path.push_front(*this->graph[i].q); + i = this->graph[i].predecessor; + } + + path.push_front(*this->graph[i].q); + } + + void + Prm::insert(const Vertex& v) + { + if (this->kd) + { + QueryItem query(this->graph[v].q.get(), v); + + NeighborQueue queue; + + for (NearestNeighbors::const_iterator i = this->graph[::boost::graph_bundle].nn.begin(); i != this->graph[::boost::graph_bundle].nn.end(); ++i) + { + if (NULL != *i) + { + NeighborSearch search( + *i->get(), + query, + static_cast< unsigned int >(this->k), + 0, + true, + Distance(this->model) + ); + + for (NeighborSearch::iterator j = search.begin(); j != search.end(); ++j) + { + queue.push(Neighbor(j->first.second, j->second)); + } + } + } + + for (::std::size_t i = 0; i < this->k && ::boost::degree(v, this->graph) < this->degree && !queue.empty(); ++i) + { + Vertex u = queue.top().first; + + if (::boost::degree(u, this->graph) < this->degree) + { + ::rl::math::Real d = this->model->inverseOfTransformedDistance(queue.top().second); + + if (d < this->radius) + { + if (this->ds.find_set(u) != this->ds.find_set(v)) + { + if (!this->verifier->isColliding(*this->graph[u].q, *this->graph[v].q, d)) + { + this->addEdge(u, v, d); + } + } + } + } + + queue.pop(); + } + + this->addPoint(this->graph[::boost::graph_bundle].nn, QueryItem(this->graph[v].q.get(), v)); + } + else + { + NeighborQueue queue; + + for (VertexIteratorPair i = ::boost::vertices(this->graph); i.first != i.second; ++i.first) + { + if (*i.first != v) + { + if (::boost::degree(*i.first, this->graph) < this->degree) + { + ::rl::math::Real d = this->model->transformedDistance(*this->graph[v].q, *this->graph[*i.first].q); + queue.push(Neighbor(*i.first, d)); + } + } + } + + for (::std::size_t i = 0; i < this->k && ::boost::degree(v, this->graph) < this->degree && !queue.empty(); ++i) + { + Vertex u = queue.top().first; + + ::rl::math::Real d = this->model->inverseOfTransformedDistance(queue.top().second); + + if (d < this->radius) + { + if (this->ds.find_set(u) != this->ds.find_set(v)) + { + if (!this->verifier->isColliding(*this->graph[u].q, *this->graph[v].q, d)) + { + this->addEdge(u, v, d); + } + } + } + + queue.pop(); + } + } + } + + void + Prm::reset() + { + this->graph.clear(); + this->graph[::boost::graph_bundle].nn.clear(); + this->begin = NULL; + this->end = NULL; + } + + bool + Prm::solve() + { + this->begin = this->addVertex(::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->insert(this->begin); + + this->end = this->addVertex(::boost::make_shared< ::rl::math::Vector >(*this->goal)); + this->insert(this->end); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration && this->ds.find_set(this->begin) != this->ds.find_set(this->end)) + { + this->construct(1); + + timer.stop(); + } + + if (this->ds.find_set(this->begin) != this->ds.find_set(this->end)) + { + return false; + } + + ::boost::dijkstra_shortest_paths( + this->graph, + this->begin, + ::boost::get(&VertexBundle::predecessor, this->graph), + ::boost::get(&VertexBundle::distance, this->graph), + ::boost::get(&EdgeBundle::weight, this->graph), + ::boost::get(&VertexBundle::index, this->graph), + ::std::less< ::rl::math::Real >(), + ::boost::closed_plus< ::rl::math::Real >(), + ::std::numeric_limits< ::rl::math::Real >::max(), + 0, + ::boost::default_dijkstra_visitor() + ); + + return true; + } + + const ::rl::math::Real* + Prm::CartesianIterator::operator()(const QueryItem& p) const + { + return p.first->data(); + } + + const ::rl::math::Real* + Prm::CartesianIterator::operator()(const QueryItem& p, const int&) const + { + return p.first->data() + p.first->size(); + } + + bool + Prm::Compare::operator()(const Neighbor& x, const Neighbor& y) const + { + return x.second > y.second; + } + + Prm::Distance::Distance() : + model(NULL) + { + } + + Prm::Distance::Distance(Model* model) : + model(model) + { + } + + template<> + ::rl::math::Real +#if (CGAL_VERSION_NR > 1030801000) + Prm::Distance::max_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Prm::SearchTraits::FT >& r) const +#else + Prm::Distance::max_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Prm::SearchTraits >& r) const +#endif + { + ::rl::math::Vector min(r.dimension()); + ::rl::math::Vector max(r.dimension()); + + for (int i = 0; i < r.dimension(); ++i) + { + min(i) = r.min_coord(i); + max(i) = r.max_coord(i); + } + + return this->model->maxDistanceToRectangle(*q.first, min, max); + } + + template<> + ::rl::math::Real +#if (CGAL_VERSION_NR > 1030801000) + Prm::Distance::min_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Prm::SearchTraits::FT >& r) const +#else + Prm::Distance::min_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Prm::SearchTraits >& r) const +#endif + { + ::rl::math::Vector min(r.dimension()); + ::rl::math::Vector max(r.dimension()); + + for (int i = 0; i < r.dimension(); ++i) + { + min(i) = r.min_coord(i); + max(i) = r.max_coord(i); + } + + return this->model->minDistanceToRectangle(*q.first, min, max); + } + + ::rl::math::Real + Prm::Distance::min_distance_to_rectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cutting_dimension) const + { + return this->model->minDistanceToRectangle(q, min, max, cutting_dimension); + } + + ::rl::math::Real + Prm::Distance::new_distance(const ::rl::math::Real& dist, const ::rl::math::Real& old_off, const ::rl::math::Real& new_off, const int& cutting_dimension) const + { + return this->model->newDistance(dist, old_off, new_off, cutting_dimension); + } + + ::rl::math::Real + Prm::Distance::transformed_distance(const ::rl::math::Real& d) const + { + return this->model->transformedDistance(d); + } + + ::rl::math::Real + Prm::Distance::transformed_distance(const Query_item& q1, const Query_item& q2) const + { + return this->model->transformedDistance(*q1.first, *q2.first); + } + } +} diff --git a/src/rl/plan/Prm.h b/src/rl/plan/Prm.h new file mode 100644 index 00000000..32793ec8 --- /dev/null +++ b/src/rl/plan/Prm.h @@ -0,0 +1,220 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_PRM_H_ +#define _RL_PLAN_PRM_H_ + +#include +#include +#include +#include + +#include "Orthogonal_k_neighbor_search.h" +#include "Planner.h" +#include "VectorPtr.h" + +namespace rl +{ + namespace plan + { + class Model; + class Sampler; + class Verifier; + + /** + * Probabilistic Roadmap. + */ + class Prm : public Planner + { + public: + Prm(); + + virtual ~Prm(); + + virtual void construct(const ::std::size_t& steps); + + virtual ::std::string getName() const; + + ::std::size_t getNumEdges() const; + + ::std::size_t getNumVertices() const; + + void getPath(VectorList& path); + + void reset(); + + bool solve(); + + /** Maximum degree per vertex. */ + ::std::size_t degree; + + /** Maximum number of tested neighbors. */ + ::std::size_t k; + + /** Use kd-tree for nearest neighbor search instead of brute-force. */ + bool kd; + + /** Maximum radius for connecting neighbors. */ + ::rl::math::Real radius; + + Sampler* sampler; + + Verifier* verifier; + + protected: + struct EdgeBundle + { + ::rl::math::Real weight; + }; + + struct GraphBundle; + + typedef ::boost::adjacency_list_traits< + ::boost::listS, + ::boost::listS, + ::boost::undirectedS, + ::boost::listS + >::vertex_descriptor Vertex; + + struct VertexBundle + { + ::rl::math::Real distance; + + ::std::size_t index; + + Vertex parent; + + Vertex predecessor; + + VectorPtr q; + + ::std::size_t rank; + }; + + typedef ::boost::adjacency_list< + ::boost::listS, + ::boost::listS, + ::boost::undirectedS, + VertexBundle, + EdgeBundle, + GraphBundle + > Graph; + + typedef ::std::pair< const ::rl::math::Vector*, Vertex > QueryItem; + + struct CartesianIterator + { + typedef const ::rl::math::Real* result_type; + + const ::rl::math::Real* operator()(const QueryItem& p) const; + + const ::rl::math::Real* operator()(const QueryItem& p, const int&) const; + }; + + struct Distance + { + typedef QueryItem Query_item; + + Distance(); + + Distance(Model* model); + + template< typename SearchTraits > ::rl::math::Real max_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< SearchTraits >& r) const; + + template< typename SearchTraits > ::rl::math::Real min_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< SearchTraits >& r) const; + + ::rl::math::Real min_distance_to_rectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cutting_dimension) const; + + ::rl::math::Real new_distance(const ::rl::math::Real& dist, const ::rl::math::Real& old_off, const ::rl::math::Real& new_off, const int& cutting_dimension) const; + + ::rl::math::Real transformed_distance(const ::rl::math::Real& d) const; + + ::rl::math::Real transformed_distance(const Query_item& q1, const Query_item& q2) const; + + Model* model; + }; + + typedef ::CGAL::Search_traits< ::rl::math::Real, QueryItem, const ::rl::math::Real*, CartesianIterator > SearchTraits; + + typedef Orthogonal_k_neighbor_search< SearchTraits, Distance > NeighborSearch; + + typedef NeighborSearch::Tree NeighborSearchTree; + + typedef ::boost::shared_ptr< NeighborSearchTree > NeighborSearchTreePtr; + + typedef ::std::vector< NeighborSearchTreePtr > NearestNeighbors; + + struct GraphBundle + { + NearestNeighbors nn; + }; + + typedef ::boost::graph_traits< Graph >::edge_descriptor Edge; + + typedef ::boost::graph_traits< Graph >::edge_iterator EdgeIterator; + + typedef ::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair; + + typedef ::boost::graph_traits< Graph >::vertex_iterator VertexIterator; + + typedef ::std::pair< VertexIterator, VertexIterator > VertexIteratorPair; + + typedef ::boost::property_map< Graph, void* VertexBundle::* >::type VertexParentMap; + + typedef ::boost::property_map< Graph, ::std::size_t VertexBundle::* >::type VertexRankMap; + + typedef ::std::pair< Vertex, ::rl::math::Real > Neighbor; + + struct Compare + { + bool operator()(const Neighbor& x, const Neighbor& y) const; + }; + + typedef ::std::priority_queue< Neighbor, ::std::vector< Neighbor >, Compare > NeighborQueue; + + Edge addEdge(const Vertex& u, const Vertex& v, const ::rl::math::Real& weight); + + void addPoint(NearestNeighbors& nn, const QueryItem& p); + + Vertex addVertex(const VectorPtr& q); + + void insert(const Vertex& vertex); + + Vertex begin; + + ::boost::disjoint_sets< VertexRankMap, VertexParentMap > ds; + + Vertex end; + + Graph graph; + + private: + + }; + } +} + +#endif // _RL_PLAN_PRM_H_ diff --git a/src/rl/plan/PrmUtilityGuided.cpp b/src/rl/plan/PrmUtilityGuided.cpp new file mode 100644 index 00000000..1fd7ee46 --- /dev/null +++ b/src/rl/plan/PrmUtilityGuided.cpp @@ -0,0 +1,231 @@ +// +// Copyright (c) 2011, Arne Sieverling +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "PrmUtilityGuided.h" +#include "Sampler.h" +#include "SimpleModel.h" + +// If this flag is set to true, the implementation is equal to the Brendan Burns version. +//#define ORIGINAL_VERSION + +namespace rl +{ + namespace plan + { + PrmUtilityGuided::PrmUtilityGuided() : + Prm(), + numNeighbors(5), //TODO check for optimal value + numSamples(3), //TODO check for optimal value + rand( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::uniform_real< ::rl::math::Real >(0.0f, 1.0f) + ), + variance(1) //TODO change this value dynamically or use xml-input + { + } + + PrmUtilityGuided::~PrmUtilityGuided() + { + } + + void + PrmUtilityGuided::construct(const ::std::size_t& steps) + { + for (::std::size_t i = 0; i < steps; ++i) + { + Sample sample(this->model->getDof()); + Sample bestSample(this->model->getDof()); + ::rl::math::Real pBest = -1.0f; + + // From numSamples samples, get the one with the best probability for being free. + for (::std::size_t j = 0; j < this->numSamples; ++j) + { + sample.isColliding = true; + + this->generateEntropyGuidedSample(sample.q); + + ::rl::math::Real pFree = this->getFreeProbability(sample); + +#ifdef ORIGINAL_VERSION + // Used in the paper: take the samples with the least collision probability + if (pFree > pBest) + { + pBest = pFree; + bestSample = sample; + } +#else + // This works better in our examples. Here we define entropy by using samples where we are unsure, if they are colliding. + if (::std::fabs(pFree - 0.5f) < ::std::fabs(pBest - 0.5f)) + { + pBest = pFree; + bestSample = sample; + } +#endif + } + + // now do collision check + this->model->setPosition(bestSample.q); + this->model->updateFrames(); + + if (!this->model->isColliding()) + { + // store the sample in the graph + bestSample.isColliding = false; + Vertex v = this->addVertex(::boost::make_shared< ::rl::math::Vector >(bestSample.q)); + this->insert(v); + } + + // Store all previously drawn samples in a vector. + this->samples.push_back(bestSample); + } + } + + void + PrmUtilityGuided::generateEntropyGuidedSample(::rl::math::Vector& q) + { + // indices for two random vertices + // the first sample uses the start ot the end component +#ifdef ORIGINAL_VERSION + ::std::size_t randIndex1 = static_cast< ::std::size_t >(::std::floor(this->rand() * this->getNumVertices())); +#else + // here we always pick a component containing the beginning or end vertex + // this prevents roadmap building in remote areas. + ::std::size_t randIndex1 = static_cast< ::std::size_t >(::std::floor(this->rand() * 2.0f)); +#endif + ::std::size_t randIndex2 = static_cast< ::std::size_t >(::std::floor(this->rand() * this->getNumVertices())); + + // two random vertices + Vertex sample1 = ::boost::vertex(randIndex1, this->graph); + Vertex sample2; + + do + { + // Just take the next vertex to ensure that the same sample is not checked twice. + ++randIndex2; + + if (randIndex2 == this->getNumVertices()) + { + randIndex2 = 0; + } + + sample2 = ::boost::vertex(randIndex2, this->graph); + // The two vertices have to be from two unconnected components. + } + while (this->ds.find_set(sample1) == this->ds.find_set(sample2)); + + // The point in the middle of the two samples. + ::rl::math::Vector midPoint = 0.5f * (*this->graph[sample1].q + *this->graph[sample2].q); + + // add variance drawn randomly from [-variance, variance] to the point + for (::std::ptrdiff_t i = 0; i < midPoint.size(); ++i) + { + q[i] = midPoint[i] + (2.0f * this->rand() - 1.0f) * this->variance; + } + + } + + ::rl::math::Real + PrmUtilityGuided::getFreeProbability(const Sample& sample) + { + ::std::size_t collisionCount = 0; + + // Sorted queue for finding the nearest neighbours + ::std::priority_queue< Sample*, ::std::vector< Sample* >, CompareSample > queue; + + ::std::vector< Sample* >::iterator it; + // iterate over vector + // TODO use kd tree!!! + for (::std::size_t i = 0; i < this->samples.size(); ++i) + { + this->samples[i].d = this->model->transformedDistance(sample.q, this->samples[i].q); + queue.push(&this->samples[i]); + } + + ::std::size_t count; + + for (count = 0; count < this->numNeighbors && !queue.empty(); ++count) + { + if (queue.top()->isColliding) + { + ++collisionCount; + } + + queue.pop(); + } + + return 1.0f - static_cast< ::rl::math::Real >(collisionCount) / static_cast< ::rl::math::Real >(count); + } + + ::std::string + PrmUtilityGuided::getName() const + { + return "PRM Utility Guided"; + } + + void + PrmUtilityGuided::seed(const ::boost::mt19937::result_type& value) + { + this->rand.engine().seed(value); + } + + bool + PrmUtilityGuided::solve() + { + // Add the start and end configurations as samples + Sample first(this->model->getDof()); + first.isColliding = false; + first.q = *this->start; + this->samples.push_back(first); + + Sample last(this->model->getDof()); + last.isColliding = false; + last.q = *this->goal; + this->samples.push_back(last); + + return Prm::solve(); + } + + PrmUtilityGuided::Sample::Sample(const ::std::size_t& d) : + d(0), + isColliding(true), + q(d) + { + } + + PrmUtilityGuided::Sample::~Sample() + { + } + + bool + PrmUtilityGuided::CompareSample::operator()(const Sample* x, const Sample* y) const + { + return x->d > y->d; + } + } +} diff --git a/src/rl/plan/PrmUtilityGuided.h b/src/rl/plan/PrmUtilityGuided.h new file mode 100644 index 00000000..2b162c17 --- /dev/null +++ b/src/rl/plan/PrmUtilityGuided.h @@ -0,0 +1,105 @@ +// +// Copyright (c) 2011, Arne Sieverling +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Technische Universitaet Muenchen nor the names of +// its contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_PRMUTILITYGUIDED_H_ +#define _RL_PLAN_PRMUTILITYGUIDED_H_ + +#include +#include +#include + +#include "Prm.h" + +namespace rl +{ + namespace plan + { + /** + * Probabilistic Roadmap using Utility-Guided Sampling. + */ + class PrmUtilityGuided : public Prm + { + public: + PrmUtilityGuided(); + + virtual ~PrmUtilityGuided(); + + void construct(const ::std::size_t& steps); + + ::std::string getName() const; + + void seed(const ::boost::mt19937::result_type& value); + + bool solve(); + + private: + class Sample + { + public: + Sample(const ::std::size_t& d); + + virtual ~Sample(); + + ::rl::math::Real d; + + bool isColliding; + + ::rl::math::Vector q; + }; + + /** A compare structure for nearest neighbor sorting. */ + struct CompareSample + { + bool operator()(const Sample* x, const Sample* y) const; + }; + + /** Samples a point near the middle (+/- variance) of two random nodes from unconnected components of the graph. */ + void generateEntropyGuidedSample(::rl::math::Vector& q); + + /** + * Get an estimated probability that a sample is not colliding with the scene. + * Here we look how many of the numNeigbors nearest neighbors of the sample + * are colliding and return "#ofFreeNeighbors"/"#Neighbors". + */ + ::rl::math::Real getFreeProbability(const Sample& sample); + + ::std::size_t numNeighbors; + + ::std::size_t numSamples; + + ::boost::variate_generator< ::boost::mt19937, ::boost::uniform_real< ::rl::math::Real > > rand; + + ::std::vector< Sample > samples; + + ::rl::math::Real variance; + }; + } +} + +#endif // _RL_PLAN_PRMUTILITYGUIDED_H_ diff --git a/src/rl/plan/RealList.h b/src/rl/plan/RealList.h new file mode 100644 index 00000000..f139ddde --- /dev/null +++ b/src/rl/plan/RealList.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_REALLIST_H_ +#define _RL_PLAN_REALLIST_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::std::list< ::rl::math::Real > RealList; + } +} + +#endif // _RL_PLAN_REALLIST_H_ diff --git a/src/rl/plan/RecursiveVerifier.cpp b/src/rl/plan/RecursiveVerifier.cpp new file mode 100644 index 00000000..80c8c02a --- /dev/null +++ b/src/rl/plan/RecursiveVerifier.cpp @@ -0,0 +1,91 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "RecursiveVerifier.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + RecursiveVerifier::RecursiveVerifier() : + Verifier() + { + } + + RecursiveVerifier::~RecursiveVerifier() + { + } + + bool + RecursiveVerifier::isColliding(const ::rl::math::Vector& u, const ::rl::math::Vector& v, const ::rl::math::Real& d) + { + assert(u.size() == this->model->getDof()); + assert(v.size() == this->model->getDof()); + + ::rl::math::Real exponent = ::std::ceil( + ::std::log(d / this->delta) / + ::std::log(static_cast< ::rl::math::Real >(2)) + ); + + ::rl::math::Real steps = ::std::pow(2, exponent); + + ::rl::math::Vector inter(u.size()); + + for (int i = 0; i < steps - 1; ++i) + { + // reverse bits + + ::std::size_t tmp = i + 1; + ::std::size_t tmp2 = tmp & 1; + + for (int j = 0; j < exponent - 1; ++j) + { + tmp >>= 1; + tmp2 <<= 1; + tmp2 |= tmp & 1; + } + + this->model->interpolate(u, v, tmp2 / steps, inter); + + if (!this->model->isValid(inter)) + { + return true; + } + + this->model->setPosition(inter); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return true; + } + } + + return false; + } + } +} diff --git a/src/rl/plan/RecursiveVerifier.h b/src/rl/plan/RecursiveVerifier.h new file mode 100644 index 00000000..767c2906 --- /dev/null +++ b/src/rl/plan/RecursiveVerifier.h @@ -0,0 +1,56 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RECURSIVEVERIFIER_H_ +#define _RL_PLAN_RECURSIVEVERIFIER_H_ + +#include "Verifier.h" + +namespace rl +{ + namespace plan + { + /** + * Recursive binary strategy using the van der Corput sequence (\f$ \frac{1}{2}, \frac{1}{4}, \frac{3}{4}, \frac{1}{8}, \frac{5}{8}, \frac{3}{8}, \frac{7}{8}, \ldots \f$). + */ + class RecursiveVerifier : public Verifier + { + public: + RecursiveVerifier(); + + virtual ~RecursiveVerifier(); + + bool isColliding(const ::rl::math::Vector& u, const ::rl::math::Vector& v, const ::rl::math::Real& d); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_RECURSIVEVERIFIER_H_ diff --git a/src/rl/plan/Rrt.cpp b/src/rl/plan/Rrt.cpp new file mode 100644 index 00000000..7765a843 --- /dev/null +++ b/src/rl/plan/Rrt.cpp @@ -0,0 +1,470 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "Rrt.h" +#include "Sampler.h" +#include "SimpleModel.h" +#include "Verifier.h" +#include "Viewer.h" + +#if _MSC_VER < 1600 +#define nullptr NULL // TODO +#endif + +namespace rl +{ + namespace plan + { + Rrt::Rrt(const ::std::size_t& trees) : + Planner(), + delta(1.0f), + epsilon(1.0e-3f), + kd(true), + sampler(NULL), + begin(trees, NULL), + end(trees, NULL), + tree(trees) + { + } + + Rrt::~Rrt() + { + } + + Rrt::Edge + Rrt::addEdge(const Vertex& u, const Vertex& v, Tree& tree) + { + Edge e = ::boost::add_edge(u, v, tree).first; + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationEdge(*tree[u].q, *tree[v].q); + } + + return e; + } + + void + Rrt::addPoint(NearestNeighbors& nn, const QueryItem& p) + { + NearestNeighbors::iterator i; + + for (i = nn.begin(); i != nn.end(); ++i) + { + if (NULL == *i) + { + break; + } + } + + NeighborSearchTreePtr tree(new NeighborSearchTree()); + + if (nn.end() == i) + { + i = nn.insert(i, tree); + } + else + { + *i = tree; + } + + for (NearestNeighbors::iterator j = nn.begin(); j != i; ++j) + { + if (NULL != *j) + { + (*i)->insert((*j)->begin(), (*j)->end()); + j->reset(); + } + } + + tree->insert(p); + } + + Rrt::Vertex + Rrt::addVertex(Tree& tree, const VectorPtr& q) + { + Vertex v = ::boost::add_vertex(tree); + tree[v].index = ::boost::num_vertices(tree) - 1; + tree[v].q = q; + tree[v].radius = ::std::numeric_limits< ::rl::math::Real >::max(); + + if (this->kd) + { + this->addPoint(tree[::boost::graph_bundle].nn, QueryItem(q.get(), v)); + } + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationVertex(*tree[v].q); + } + + return v; + } + + bool + Rrt::areEqual(const ::rl::math::Vector& lhs, const ::rl::math::Vector& rhs) const + { + if (this->model->distance(lhs, rhs) > this->epsilon) + { + return false; + } + else + { + return true; + } + } + + void + Rrt::choose(::rl::math::Vector& chosen) + { + this->sampler->generate(chosen); + } + + Rrt::Vertex + Rrt::connect(Tree& tree, const Neighbor& nearest, const ::rl::math::Vector& chosen) + { + ::rl::math::Real distance = nearest.second; + ::rl::math::Real step = distance; + + bool reached = false; + + if (step <= this->delta) + { + reached = true; + } + else + { + step = this->delta; + } + + VectorPtr last = ::boost::make_shared< ::rl::math::Vector >(this->model->getDof()); + + this->model->interpolate(*tree[nearest.first].q, chosen, step / distance, *last); + + if (NULL != this->viewer) + { +// this->viewer->drawConfiguration(*last); + } + + this->model->setPosition(*last); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return NULL; + } + + ::rl::math::Vector next(this->model->getDof()); + + while (!reached) + { + distance = this->model->distance(*last, chosen); + step = distance; + + if (step <= this->delta) + { + reached = true; + } + else + { + step = this->delta; + } + + this->model->interpolate(*last, chosen, step / distance, next); + + if (NULL != this->viewer) + { +// this->viewer->drawConfiguration(next); + } + + this->model->setPosition(next); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + break; + } + + *last = next; + } + + Vertex connected = this->addVertex(tree, last); + this->addEdge(nearest.first, connected, tree); + return connected; + } + + Rrt::Vertex + Rrt::extend(Tree& tree, const Neighbor& nearest, const ::rl::math::Vector& chosen) + { + ::rl::math::Real distance = nearest.second; + ::rl::math::Real step = ::std::min(distance, this->delta); + + VectorPtr next = ::boost::make_shared< ::rl::math::Vector >(this->model->getDof()); + + this->model->interpolate(*tree[nearest.first].q, chosen, step / distance, *next); + + this->model->setPosition(*next); + this->model->updateFrames(); + + if (!this->model->isColliding()) + { + Vertex extended = this->addVertex(tree, next); + this->addEdge(nearest.first, extended, tree); + return extended; + } + + return NULL; + } + + ::std::string + Rrt::getName() const + { + return "RRT"; + } + + ::std::size_t + Rrt::getNumEdges() const + { + ::std::size_t edges = 0; + + for (::std::size_t i = 0; i < this->tree.size(); ++i) + { + edges += ::boost::num_edges(this->tree[i]); + } + + return edges; + } + + ::std::size_t + Rrt::getNumVertices() const + { + ::std::size_t vertices = 0; + + for (::std::size_t i = 0; i < this->tree.size(); ++i) + { + vertices += ::boost::num_vertices(this->tree[i]); + } + + return vertices; + } + + void + Rrt::getPath(VectorList& path) + { + Vertex i = this->end[0]; + + while (i != this->begin[0]) + { + path.push_front(*this->tree[0][i].q); + i = ::boost::source(*::boost::in_edges(i, this->tree[0]).first, this->tree[0]); + } + + path.push_front(*this->tree[0][i].q); + } + + Rrt::Neighbor + Rrt::nearest(const Tree& tree, const ::rl::math::Vector& chosen) + { + Neighbor p(nullptr, ::std::numeric_limits< ::rl::math::Real >::max()); + + if (this->kd) + { + QueryItem query(&chosen, nullptr); + + for (NearestNeighbors::const_iterator i = tree[::boost::graph_bundle].nn.begin(); i != tree[::boost::graph_bundle].nn.end(); ++i) + { + if (NULL != *i) + { + NeighborSearch search( + *i->get(), + query, + 1, + 0, + true, + Distance(this->model) + ); + + if (search.begin()->second < p.second) + { + p.first = search.begin()->first.second; + p.second = search.begin()->second; + } + } + } + } + else + { + for (VertexIteratorPair i = ::boost::vertices(tree); i.first != i.second; ++i.first) + { + ::rl::math::Real d = this->model->transformedDistance(chosen, *tree[*i.first].q); + + if (d < p.second) + { + p.first = *i.first; + p.second = d; + } + } + } + + p.second = this->model->inverseOfTransformedDistance(p.second); + + return p; + } + + void + Rrt::reset() + { + for (::std::size_t i = 0; i < this->tree.size(); ++i) + { + this->tree[i].clear(); + this->tree[i][::boost::graph_bundle].nn.clear(); + this->begin[i] = NULL; + this->end[i] = NULL; + } + } + + bool + Rrt::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + this->choose(chosen); + + Neighbor nearest = this->nearest(this->tree[0], chosen); + + Vertex extended = this->extend(this->tree[0], nearest, chosen); + + if (NULL != extended) + { + if (this->areEqual(*this->tree[0][extended].q, *this->goal)) + { + this->end[0] = extended; + return true; + } + } + + timer.stop(); + } + + return false; + } + + const ::rl::math::Real* + Rrt::CartesianIterator::operator()(const QueryItem& p) const + { + return p.first->data(); // TODO + } + + const ::rl::math::Real* + Rrt::CartesianIterator::operator()(const QueryItem& p, const int&) const + { + return p.first->data() + p.first->size(); // TODO + } + + Rrt::Distance::Distance() : + model(NULL) + { + } + + Rrt::Distance::Distance(Model* model) : + model(model) + { + } + + template<> + ::rl::math::Real +#if (CGAL_VERSION_NR > 1030801000) + Rrt::Distance::max_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Rrt::SearchTraits::FT >& r) const +#else + Rrt::Distance::max_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Rrt::SearchTraits >& r) const +#endif + { + ::rl::math::Vector min(r.dimension()); + ::rl::math::Vector max(r.dimension()); + + for (int i = 0; i < r.dimension(); ++i) + { + min(i) = r.min_coord(i); + max(i) = r.max_coord(i); + } + + return this->model->maxDistanceToRectangle(*q.first, min, max); + } + + template<> + ::rl::math::Real +#if (CGAL_VERSION_NR > 1030801000) + Rrt::Distance::min_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Rrt::SearchTraits::FT >& r) const +#else + Rrt::Distance::min_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< Rrt::SearchTraits >& r) const +#endif + { + ::rl::math::Vector min(r.dimension()); + ::rl::math::Vector max(r.dimension()); + + for (int i = 0; i < r.dimension(); ++i) + { + min(i) = r.min_coord(i); + max(i) = r.max_coord(i); + } + + return this->model->minDistanceToRectangle(*q.first, min, max); + } + + ::rl::math::Real + Rrt::Distance::min_distance_to_rectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cutting_dimension) const + { + return this->model->minDistanceToRectangle(q, min, max, cutting_dimension); + } + + ::rl::math::Real + Rrt::Distance::new_distance(const ::rl::math::Real& dist, const ::rl::math::Real& old_off, const ::rl::math::Real& new_off, const int& cutting_dimension) const + { + return this->model->newDistance(dist, old_off, new_off, cutting_dimension); + } + + ::rl::math::Real + Rrt::Distance::transformed_distance(const ::rl::math::Real& d) const + { + return this->model->transformedDistance(d); + } + + ::rl::math::Real + Rrt::Distance::transformed_distance(const Query_item& q1, const Query_item& q2) const + { + return this->model->transformedDistance(*q1.first, *q2.first); + } + } +} diff --git a/src/rl/plan/Rrt.h b/src/rl/plan/Rrt.h new file mode 100644 index 00000000..b6a4bf55 --- /dev/null +++ b/src/rl/plan/Rrt.h @@ -0,0 +1,199 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRT_H_ +#define _RL_PLAN_RRT_H_ + +#include +#include + +#include "MatrixPtr.h" +#include "Orthogonal_k_neighbor_search.h" +#include "Planner.h" +#include "TransformPtr.h" +#include "VectorPtr.h" + +namespace rl +{ + namespace plan + { + class Model; + class Sampler; + class Verifier; + + /** + * Rapidly-Exploring Random Trees. + */ + class Rrt : public Planner + { + public: + Rrt(const ::std::size_t& trees = 1); + + virtual ~Rrt(); + + virtual ::std::string getName() const; + + virtual ::std::size_t getNumEdges() const; + + virtual ::std::size_t getNumVertices() const; + + virtual void getPath(VectorList& path); + + virtual void reset(); + + virtual bool solve(); + + /** Configuration step size. */ + ::rl::math::Real delta; + + /** Epsilon for configuration comparison. */ + ::rl::math::Real epsilon; + + /** Use kd-tree for nearest neighbor search instead of brute-force. */ + bool kd; + + Sampler* sampler; + + protected: + struct VertexBundle + { + ::std::size_t index; + + VectorPtr q; + + ::rl::math::Real radius; + + TransformPtr t; + }; + + struct TreeBundle; + + typedef ::boost::adjacency_list< + ::boost::listS, + ::boost::listS, + ::boost::bidirectionalS, + VertexBundle, + ::boost::no_property, + TreeBundle + > Tree; + + typedef ::boost::adjacency_list_traits< + ::boost::listS, + ::boost::listS, + ::boost::bidirectionalS, + ::boost::listS + >::vertex_descriptor Vertex; + + typedef ::std::pair< const ::rl::math::Vector*, Vertex > QueryItem; + + struct CartesianIterator + { + typedef const ::rl::math::Real* result_type; + + const ::rl::math::Real* operator()(const QueryItem& p) const; + + const ::rl::math::Real* operator()(const QueryItem& p, const int&) const; + }; + + struct Distance + { + typedef QueryItem Query_item; + + Distance(); + + Distance(Model* model); + + template< typename SearchTraits > ::rl::math::Real max_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< SearchTraits >& r) const; + + template< typename SearchTraits > ::rl::math::Real min_distance_to_rectangle(const Query_item& q, const ::CGAL::Kd_tree_rectangle< SearchTraits >& r) const; + + ::rl::math::Real min_distance_to_rectangle(const ::rl::math::Real& q, const ::rl::math::Real& min, const ::rl::math::Real& max, const ::std::size_t& cutting_dimension) const; + + ::rl::math::Real new_distance(const ::rl::math::Real& dist, const ::rl::math::Real& old_off, const ::rl::math::Real& new_off, const int& cutting_dimension) const; + + ::rl::math::Real transformed_distance(const ::rl::math::Real& d) const; + + ::rl::math::Real transformed_distance(const Query_item& q1, const Query_item& q2) const; + + Model* model; + }; + + typedef ::CGAL::Search_traits< ::rl::math::Real, QueryItem, const ::rl::math::Real*, CartesianIterator > SearchTraits; + + typedef Orthogonal_k_neighbor_search< SearchTraits, Distance > NeighborSearch; + + typedef NeighborSearch::Tree NeighborSearchTree; + + typedef ::boost::shared_ptr< NeighborSearchTree > NeighborSearchTreePtr; + + typedef ::std::vector< NeighborSearchTreePtr > NearestNeighbors; + + struct TreeBundle + { + NearestNeighbors nn; + }; + + typedef ::boost::graph_traits< Tree >::edge_descriptor Edge; + + typedef ::boost::graph_traits< Tree >::edge_iterator EdgeIterator; + + typedef ::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair; + + typedef ::boost::graph_traits< Tree >::vertex_iterator VertexIterator; + + typedef ::std::pair< VertexIterator, VertexIterator > VertexIteratorPair; + + typedef ::std::pair< Vertex, ::rl::math::Real > Neighbor; + + virtual Edge addEdge(const Vertex& u, const Vertex& v, Tree& tree); + + void addPoint(NearestNeighbors& nn, const QueryItem& p); + + Vertex addVertex(Tree& tree, const VectorPtr& q); + + bool areEqual(const ::rl::math::Vector& lhs, const ::rl::math::Vector& rhs) const; + + virtual void choose(::rl::math::Vector& chosen); + + virtual Vertex connect(Tree& tree, const Neighbor& nearest, const ::rl::math::Vector& chosen); + + virtual Vertex extend(Tree& tree, const Neighbor& nearest, const ::rl::math::Vector& chosen); + + virtual Neighbor nearest(const Tree& tree, const ::rl::math::Vector& chosen); + + ::std::vector< Vertex > begin; + + ::std::vector< Vertex > end; + + ::std::vector< Tree > tree; + + private: + + }; + } +} + +#endif // _RL_PLAN_RRT_H_ diff --git a/src/rl/plan/RrtCon.cpp b/src/rl/plan/RrtCon.cpp new file mode 100644 index 00000000..f28ffa40 --- /dev/null +++ b/src/rl/plan/RrtCon.cpp @@ -0,0 +1,84 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "RrtCon.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + RrtCon::RrtCon() : + RrtGoalBias() + { + } + + RrtCon::~RrtCon() + { + } + + ::std::string + RrtCon::getName() const + { + return "RRT Connect"; + } + + bool + RrtCon::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + this->choose(chosen); + + Neighbor nearest = this->nearest(this->tree[0], chosen); + + Vertex connected = this->connect(this->tree[0], nearest, chosen); + + if (NULL != connected) + { + if (this->areEqual(*this->tree[0][connected].q, *this->goal)) + { + this->end[0] = connected; + return true; + } + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/RrtCon.h b/src/rl/plan/RrtCon.h new file mode 100644 index 00000000..13910a3f --- /dev/null +++ b/src/rl/plan/RrtCon.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRTCON_H_ +#define _RL_PLAN_RRTCON_H_ + +#include "RrtGoalBias.h" + +namespace rl +{ + namespace plan + { + class RrtCon : public RrtGoalBias + { + public: + RrtCon(); + + virtual ~RrtCon(); + + virtual ::std::string getName() const; + + bool solve(); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_RRTCON_H_ diff --git a/src/rl/plan/RrtConCon.cpp b/src/rl/plan/RrtConCon.cpp new file mode 100644 index 00000000..61612733 --- /dev/null +++ b/src/rl/plan/RrtConCon.cpp @@ -0,0 +1,101 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "RrtConCon.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + RrtConCon::RrtConCon() : + RrtDual() + { + } + + RrtConCon::~RrtConCon() + { + } + + ::std::string + RrtConCon::getName() const + { + return "RRT Connect Connect"; + } + + bool + RrtConCon::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->begin[1] = this->addVertex(this->tree[1], ::boost::make_shared< ::rl::math::Vector >(*this->goal)); + + Tree* a = &this->tree[0]; + Tree* b = &this->tree[1]; + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + for (::std::size_t j = 0; j < 2; ++j) + { + this->choose(chosen); + + Neighbor aNearest = this->nearest(*a, chosen); + + Vertex aConnected = this->connect(*a, aNearest, chosen); + + if (NULL != aConnected) + { + Neighbor bNearest = this->nearest(*b, *(*a)[aConnected].q); + + Vertex bConnected = this->connect(*b, bNearest, *(*a)[aConnected].q); + + if (NULL != bConnected) + { + if (this->areEqual(*(*a)[aConnected].q, *(*b)[bConnected].q)) + { + this->end[0] = &this->tree[0] == a ? aConnected : bConnected; + this->end[1] = &this->tree[1] == b ? bConnected : aConnected; + return true; + } + } + } + + ::std::swap(a, b); + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/RrtConCon.h b/src/rl/plan/RrtConCon.h new file mode 100644 index 00000000..d6a9b590 --- /dev/null +++ b/src/rl/plan/RrtConCon.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRTCONCON_H_ +#define _RL_PLAN_RRTCONCON_H_ + +#include "RrtDual.h" + +namespace rl +{ + namespace plan + { + class RrtConCon : public RrtDual + { + public: + RrtConCon(); + + virtual ~RrtConCon(); + + virtual ::std::string getName() const; + + bool solve(); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_RRTCONCON_H_ diff --git a/src/rl/plan/RrtDual.cpp b/src/rl/plan/RrtDual.cpp new file mode 100644 index 00000000..3c3e6e25 --- /dev/null +++ b/src/rl/plan/RrtDual.cpp @@ -0,0 +1,117 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "RrtDual.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + RrtDual::RrtDual() : + Rrt(2) + { + } + + RrtDual::~RrtDual() + { + } + + ::std::string + RrtDual::getName() const + { + return "RRT Dual"; + } + + void + RrtDual::getPath(VectorList& path) + { + Vertex i = this->end[0]; + + while (i != this->begin[0]) + { + path.push_front(*this->tree[0][i].q); + i = ::boost::source(*::boost::in_edges(i, this->tree[0]).first, this->tree[0]); + } + + path.push_front(*this->tree[0][i].q); + + i = ::boost::source(*::boost::in_edges(this->end[1], this->tree[1]).first, this->tree[1]); + + while (i != this->begin[1]) + { + path.push_back(*this->tree[1][i].q); + i = ::boost::source(*::boost::in_edges(i, this->tree[1]).first, this->tree[1]); + } + + path.push_back(*this->tree[1][i].q); + } + + bool + RrtDual::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->begin[1] = this->addVertex(this->tree[1], ::boost::make_shared< ::rl::math::Vector >(*this->goal)); + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + this->choose(chosen); + + Neighbor nearest = this->nearest(this->tree[0], chosen); + + Vertex extended = this->extend(this->tree[0], nearest, chosen); + + if (NULL != extended) + { + Neighbor nearest2 = this->nearest(this->tree[1], chosen); + + Vertex extended2 = this->extend(this->tree[1], nearest2, chosen); + + if (NULL != extended2) + { + if (this->areEqual(*this->tree[0][extended].q, *this->tree[1][extended2].q)) + { + this->end[0] = extended; + this->end[1] = extended2; + return true; + } + } + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/RrtDual.h b/src/rl/plan/RrtDual.h new file mode 100644 index 00000000..7e4aae39 --- /dev/null +++ b/src/rl/plan/RrtDual.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRTDUAL_H_ +#define _RL_PLAN_RRTDUAL_H_ + +#include "Rrt.h" + +namespace rl +{ + namespace plan + { + class RrtDual : public Rrt + { + public: + RrtDual(); + + virtual ~RrtDual(); + + virtual ::std::string getName() const; + + virtual void getPath(VectorList& path); + + virtual bool solve(); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_RRTDUAL_H_ diff --git a/src/rl/plan/RrtExtCon.cpp b/src/rl/plan/RrtExtCon.cpp new file mode 100644 index 00000000..2185ae5a --- /dev/null +++ b/src/rl/plan/RrtExtCon.cpp @@ -0,0 +1,101 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "RrtExtCon.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + RrtExtCon::RrtExtCon() : + RrtDual() + { + } + + RrtExtCon::~RrtExtCon() + { + } + + ::std::string + RrtExtCon::getName() const + { + return "RRT Extend Connect"; + } + + bool + RrtExtCon::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->begin[1] = this->addVertex(this->tree[1], ::boost::make_shared< ::rl::math::Vector >(*this->goal)); + + Tree* a = &this->tree[0]; + Tree* b = &this->tree[1]; + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + for (::std::size_t j = 0; j < 2; ++j) + { + this->choose(chosen); + + Neighbor aNearest = this->nearest(*a, chosen); + + Vertex aExtended = this->extend(*a, aNearest, chosen); + + if (NULL != aExtended) + { + Neighbor bNearest = this->nearest(*b, *(*a)[aExtended].q); + + Vertex bConnected = this->connect(*b, bNearest, *(*a)[aExtended].q); + + if (NULL != bConnected) + { + if (this->areEqual(*(*a)[aExtended].q, *(*b)[bConnected].q)) + { + this->end[0] = &this->tree[0] == a ? aExtended : bConnected; + this->end[1] = &this->tree[1] == b ? bConnected : aExtended; + return true; + } + } + } + + ::std::swap(a, b); + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/RrtExtCon.h b/src/rl/plan/RrtExtCon.h new file mode 100644 index 00000000..0460345f --- /dev/null +++ b/src/rl/plan/RrtExtCon.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRTEXTCON_H_ +#define _RL_PLAN_RRTEXTCON_H_ + +#include "RrtDual.h" + +namespace rl +{ + namespace plan + { + class RrtExtCon : public RrtDual + { + public: + RrtExtCon(); + + virtual ~RrtExtCon(); + + virtual ::std::string getName() const; + + bool solve(); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_RRTEXTCON_H_ diff --git a/src/rl/plan/RrtExtExt.cpp b/src/rl/plan/RrtExtExt.cpp new file mode 100644 index 00000000..91ee95fc --- /dev/null +++ b/src/rl/plan/RrtExtExt.cpp @@ -0,0 +1,101 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "RrtExtExt.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + RrtExtExt::RrtExtExt() : + RrtDual() + { + } + + RrtExtExt::~RrtExtExt() + { + } + + ::std::string + RrtExtExt::getName() const + { + return "RRT Extend Extend"; + } + + bool + RrtExtExt::solve() + { + this->begin[0] = this->addVertex(this->tree[0], ::boost::make_shared< ::rl::math::Vector >(*this->start)); + this->begin[1] = this->addVertex(this->tree[1], ::boost::make_shared< ::rl::math::Vector >(*this->goal)); + + Tree* a = &this->tree[0]; + Tree* b = &this->tree[1]; + + ::rl::math::Vector chosen(this->model->getDof()); + + timer.start(); + timer.stop(); + + while (timer.elapsed() < this->duration) + { + for (::std::size_t j = 0; j < 2; ++j) + { + this->choose(chosen); + + Neighbor aNearest = this->nearest(*a, chosen); + + Vertex aExtended = this->extend(*a, aNearest, chosen); + + if (NULL != aExtended) + { + Neighbor bNearest = this->nearest(*b, *(*a)[aExtended].q); + + Vertex bExtended = this->extend(*b, bNearest, *(*a)[aExtended].q); + + if (NULL != bExtended) + { + if (this->areEqual(*(*a)[aExtended].q, *(*b)[bExtended].q)) + { + this->end[0] = &this->tree[0] == a ? aExtended : bExtended; + this->end[1] = &this->tree[1] == b ? bExtended : aExtended; + return true; + } + } + } + + ::std::swap(a, b); + } + + timer.stop(); + } + + return false; + } + } +} diff --git a/src/rl/plan/RrtExtExt.h b/src/rl/plan/RrtExtExt.h new file mode 100644 index 00000000..b3407fd0 --- /dev/null +++ b/src/rl/plan/RrtExtExt.h @@ -0,0 +1,55 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRTEXTEXT_H_ +#define _RL_PLAN_RRTEXTEXT_H_ + +#include "RrtDual.h" + +namespace rl +{ + namespace plan + { + class RrtExtExt : public RrtDual + { + public: + RrtExtExt(); + + virtual ~RrtExtExt(); + + virtual ::std::string getName() const; + + bool solve(); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_RRTEXTEXT_H_ diff --git a/src/rl/plan/RrtGoalBias.cpp b/src/rl/plan/RrtGoalBias.cpp new file mode 100644 index 00000000..7385c6f1 --- /dev/null +++ b/src/rl/plan/RrtGoalBias.cpp @@ -0,0 +1,75 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "RrtGoalBias.h" +#include "Sampler.h" + +namespace rl +{ + namespace plan + { + RrtGoalBias::RrtGoalBias() : + Rrt(), + probability(0.05f), + rand( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::uniform_real< ::rl::math::Real >(0.0f, 1.0f) + ) + { + } + + RrtGoalBias::~RrtGoalBias() + { + } + + void + RrtGoalBias::choose(::rl::math::Vector& chosen) + { + if (this->rand() > this->probability) + { + Rrt::choose(chosen); + } + else + { + chosen = *this->goal; + } + } + + ::std::string + RrtGoalBias::getName() const + { + return "RRT Goal Bias"; + } + + void + RrtGoalBias::seed(const ::boost::mt19937::result_type& value) + { + this->rand.engine().seed(value); + } + } +} diff --git a/src/rl/plan/RrtGoalBias.h b/src/rl/plan/RrtGoalBias.h new file mode 100644 index 00000000..16dd1fee --- /dev/null +++ b/src/rl/plan/RrtGoalBias.h @@ -0,0 +1,65 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_RRTGOALBIAS_H_ +#define _RL_PLAN_RRTGOALBIAS_H_ + +#include +#include +#include + +#include "Rrt.h" + +namespace rl +{ + namespace plan + { + class RrtGoalBias : public Rrt + { + public: + RrtGoalBias(); + + virtual ~RrtGoalBias(); + + virtual ::std::string getName() const; + + virtual void seed(const ::boost::mt19937::result_type& value); + + /** Probability of choosing goal configuration. */ + ::rl::math::Real probability; + + protected: + virtual void choose(::rl::math::Vector& chosen); + + ::boost::variate_generator< ::boost::mt19937, ::boost::uniform_real< ::rl::math::Real > > rand; + + private: + + }; + } +} + +#endif // _RL_PLAN_RRTGOALBIAS_H_ diff --git a/src/rl/plan/Sampler.cpp b/src/rl/plan/Sampler.cpp new file mode 100644 index 00000000..ffce5ff1 --- /dev/null +++ b/src/rl/plan/Sampler.cpp @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Sampler.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + Sampler::Sampler() : + model(NULL) + { + } + + Sampler::~Sampler() + { + } + + void + Sampler::generateCollisionFree(::rl::math::Vector& q) + { + assert(q.size() == this->model->getDof()); + + do + { + this->generate(q); + this->model->setPosition(q); + this->model->updateFrames(); + } + while (this->model->isColliding()); + } + } +} diff --git a/src/rl/plan/Sampler.h b/src/rl/plan/Sampler.h new file mode 100644 index 00000000..4fe090dd --- /dev/null +++ b/src/rl/plan/Sampler.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_SAMPLER_H_ +#define _RL_PLAN_SAMPLER_H_ + +#include + +namespace rl +{ + namespace plan + { + class SimpleModel; + + class Sampler + { + public: + Sampler(); + + virtual ~Sampler(); + + virtual void generate(::rl::math::Vector& q) = 0; + + virtual void generateCollisionFree(::rl::math::Vector& q); + + SimpleModel* model; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_SAMPLER_H_ diff --git a/src/rl/plan/SequentialVerifier.cpp b/src/rl/plan/SequentialVerifier.cpp new file mode 100644 index 00000000..df99cff0 --- /dev/null +++ b/src/rl/plan/SequentialVerifier.cpp @@ -0,0 +1,74 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "SequentialVerifier.h" +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + SequentialVerifier::SequentialVerifier() : + Verifier() + { + } + + SequentialVerifier::~SequentialVerifier() + { + } + + bool + SequentialVerifier::isColliding(const ::rl::math::Vector& u, const ::rl::math::Vector& v, const ::rl::math::Real& d) + { + assert(u.size() == this->model->getDof()); + assert(v.size() == this->model->getDof()); + + ::std::size_t steps = static_cast< ::std::size_t >(::std::ceil(d / this->delta)) - 1; + + ::rl::math::Vector inter(u.size()); + + for (::std::size_t i = 0; i < steps; ++i) + { + this->model->interpolate(u, v, (i + 1.0f) / (steps + 1.0f), inter); + + if (!this->model->isValid(inter)) + { + return true; + } + + this->model->setPosition(inter); + this->model->updateFrames(); + + if (this->model->isColliding()) + { + return true; + } + } + + return false; + } + } +} diff --git a/src/rl/plan/SequentialVerifier.h b/src/rl/plan/SequentialVerifier.h new file mode 100644 index 00000000..41c1f39f --- /dev/null +++ b/src/rl/plan/SequentialVerifier.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_SEQUENTIALVERIFIER_H_ +#define _RL_PLAN_SEQUENTIALVERIFIER_H_ + +#include "Verifier.h" + +namespace rl +{ + namespace plan + { + class SequentialVerifier : public Verifier + { + public: + SequentialVerifier(); + + virtual ~SequentialVerifier(); + + bool isColliding(const ::rl::math::Vector& u, const ::rl::math::Vector& v, const ::rl::math::Real& d); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_SEQUENTIALVERIFIER_H_ diff --git a/src/rl/plan/SimpleModel.cpp b/src/rl/plan/SimpleModel.cpp new file mode 100644 index 00000000..80f39e8e --- /dev/null +++ b/src/rl/plan/SimpleModel.cpp @@ -0,0 +1,117 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "SimpleModel.h" + +namespace rl +{ + namespace plan + { + SimpleModel::SimpleModel() : + Model(), + body(0), + freeQueries(0), + totalQueries(0) + { + } + + SimpleModel::~SimpleModel() + { + } + + ::std::size_t + SimpleModel::getCollidingBody() const + { + return this->body; + } + + ::std::size_t + SimpleModel::getFreeQueries() const + { + return this->freeQueries; + } + + ::std::size_t + SimpleModel::getTotalQueries() const + { + return this->totalQueries; + } + + bool + SimpleModel::isColliding() + { + ++this->totalQueries; + + for (::std::size_t i = 0; i < this->model->getNumBodies(); ++i) + { + if (this->isColliding(i)) + { + for (::rl::sg::Scene::Iterator j = this->scene->begin(); j != this->scene->end(); ++j) + { + if (this->model != *j) + { + for (::rl::sg::Model::Iterator k = (*j)->begin(); k != (*j)->end(); ++k) + { + if (dynamic_cast< ::rl::sg::SimpleScene* >(this->scene)->areColliding(this->model->getBody(i), *k)) + { + this->body = i; + return true; + } + } + } + } + } + + for (::std::size_t j = 0; j < i; ++j) + { + if (this->areColliding(i, j)) + { + if (dynamic_cast< ::rl::sg::SimpleScene* >(this->scene)->areColliding(this->model->getBody(i), this->model->getBody(j))) + { + this->body = i; + return true; + } + } + } + } + + this->body = this->getBodies(); + ++this->freeQueries; + return false; + } + + void + SimpleModel::reset() + { + this->body = 0; + this->freeQueries = 0; + this->totalQueries = 0; + } + } +} diff --git a/src/rl/plan/SimpleModel.h b/src/rl/plan/SimpleModel.h new file mode 100644 index 00000000..57a217f7 --- /dev/null +++ b/src/rl/plan/SimpleModel.h @@ -0,0 +1,68 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_SIMPLEMODEL_H_ +#define _RL_PLAN_SIMPLEMODEL_H_ + +#include "Model.h" + +namespace rl +{ + namespace plan + { + class SimpleModel : public Model + { + public: + SimpleModel(); + + virtual ~SimpleModel(); + + ::std::size_t getCollidingBody() const; + + ::std::size_t getFreeQueries() const; + + ::std::size_t getTotalQueries() const; + + using Model::isColliding; + + virtual bool isColliding(); + + virtual void reset(); + + protected: + ::std::size_t body; + + ::std::size_t freeQueries; + + ::std::size_t totalQueries; + + private: + + }; + } +} + +#endif // _RL_PLAN_SIMPLEMODEL_H_ diff --git a/src/rl/plan/SimpleOptimizer.cpp b/src/rl/plan/SimpleOptimizer.cpp new file mode 100644 index 00000000..62cd429c --- /dev/null +++ b/src/rl/plan/SimpleOptimizer.cpp @@ -0,0 +1,86 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "SimpleModel.h" +#include "SimpleOptimizer.h" +#include "Verifier.h" +#include "Viewer.h" + +namespace rl +{ + namespace plan + { + SimpleOptimizer::SimpleOptimizer() : + Optimizer() + { + } + + SimpleOptimizer::~SimpleOptimizer() + { + } + + void + SimpleOptimizer::process(VectorList& path) + { + bool changed = true; + + while (changed && path.size() > 2) + { + changed = false; + + VectorList::iterator i = path.begin(); + VectorList::iterator j = ++path.begin(); + VectorList::iterator k = ++++path.begin(); + + while (i != path.end() && j != path.end() && k != path.end()) + { + ::rl::math::Real ik = this->model->distance(*i, *k); + + if (!this->verifier->isColliding(*i, *k, ik)) + { + VectorList::iterator l = j; + ++j; + ++k; + path.erase(l); + + if (NULL != this->viewer) + { + this->viewer->drawConfigurationPath(path); + } + + changed = true; + } + else + { + ++i; + ++j; + ++k; + } + } + } + } + } +} diff --git a/src/rl/plan/SimpleOptimizer.h b/src/rl/plan/SimpleOptimizer.h new file mode 100644 index 00000000..fbf0fcd3 --- /dev/null +++ b/src/rl/plan/SimpleOptimizer.h @@ -0,0 +1,53 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_SIMPLEOPTIMIZER_H_ +#define _RL_PLAN_SIMPLEOPTIMIZER_H_ + +#include "Optimizer.h" + +namespace rl +{ + namespace plan + { + class SimpleOptimizer : public Optimizer + { + public: + SimpleOptimizer(); + + virtual ~SimpleOptimizer(); + + void process(VectorList& path); + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_SIMPLEOPTIMIZER_H_ diff --git a/src/rl/plan/TransformPtr.h b/src/rl/plan/TransformPtr.h new file mode 100644 index 00000000..96e00112 --- /dev/null +++ b/src/rl/plan/TransformPtr.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_TRANSFORMPTR_H_ +#define _RL_PLAN_TRANSFORMPTR_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::boost::shared_ptr< ::rl::math::Transform > TransformPtr; + } +} + +#endif // _RL_PLAN_TRANSFORMPTR_H_ diff --git a/src/rl/plan/UniformSampler.cpp b/src/rl/plan/UniformSampler.cpp new file mode 100644 index 00000000..d1289c63 --- /dev/null +++ b/src/rl/plan/UniformSampler.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include + +#include "SimpleModel.h" +#include "UniformSampler.h" + +namespace rl +{ + namespace plan + { + UniformSampler::UniformSampler() : + Sampler(), + rand( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::uniform_real< ::rl::math::Real >(0.0f, 1.0f) + ) + { + } + + UniformSampler::~UniformSampler() + { + } + + void + UniformSampler::generate(::rl::math::Vector& q) + { + assert(q.size() == this->model->getDof()); + + ::rl::math::Vector maximum(this->model->getDof()); + this->model->getMaximum(maximum); + ::rl::math::Vector minimum(this->model->getDof()); + this->model->getMinimum(minimum); + + for (::std::size_t i = 0; i < this->model->getDof(); ++i) + { + q(i) = minimum(i) + this->rand() * (maximum(i) - minimum(i)); + } + + this->model->clip(q); + } + + void + UniformSampler::seed(const ::boost::mt19937::result_type& value) + { + this->rand.engine().seed(value); + } + } +} diff --git a/src/rl/plan/UniformSampler.h b/src/rl/plan/UniformSampler.h new file mode 100644 index 00000000..7b223559 --- /dev/null +++ b/src/rl/plan/UniformSampler.h @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_UNIFORMSAMPLER_H_ +#define _RL_PLAN_UNIFORMSAMPLER_H_ + +#include +#include +#include + +#include "Sampler.h" + +namespace rl +{ + namespace plan + { + class UniformSampler : public Sampler + { + public: + UniformSampler(); + + virtual ~UniformSampler(); + + void generate(::rl::math::Vector& q); + + virtual void seed(const ::boost::mt19937::result_type& value); + + protected: + ::boost::variate_generator< ::boost::mt19937, ::boost::uniform_real< ::rl::math::Real > > rand; + + private: + + }; + } +} + +#endif // _RL_PLAN_UNIFORMSAMPLER_H_ diff --git a/src/rl/plan/Vector3List.h b/src/rl/plan/Vector3List.h new file mode 100644 index 00000000..ab0d5c66 --- /dev/null +++ b/src/rl/plan/Vector3List.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_VECTOR3LIST_H_ +#define _RL_PLAN_VECTOR3LIST_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::std::list< ::rl::math::Vector3 > Vector3List; + } +} + +#endif // _RL_PLAN_VECTOR3LIST_H_ diff --git a/src/rl/plan/Vector3Ptr.h b/src/rl/plan/Vector3Ptr.h new file mode 100644 index 00000000..12450548 --- /dev/null +++ b/src/rl/plan/Vector3Ptr.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_VECTOR3PTR_H_ +#define _RL_PLAN_VECTOR3PTR_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::boost::shared_ptr< ::rl::math::Vector3 > Vector3Ptr; + } +} + +#endif // _RL_PLAN_VECTOR3PTR_H_ diff --git a/src/rl/plan/VectorList.h b/src/rl/plan/VectorList.h new file mode 100644 index 00000000..f3de5433 --- /dev/null +++ b/src/rl/plan/VectorList.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_VECTORLIST_H_ +#define _RL_PLAN_VECTORLIST_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::std::list< ::rl::math::Vector > VectorList; + } +} + +#endif // _RL_PLAN_VECTORLIST_H_ diff --git a/src/rl/plan/VectorPtr.h b/src/rl/plan/VectorPtr.h new file mode 100644 index 00000000..518a7f34 --- /dev/null +++ b/src/rl/plan/VectorPtr.h @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_VECTORPTR_H_ +#define _RL_PLAN_VECTORPTR_H_ + +#include +#include + +namespace rl +{ + namespace plan + { + typedef ::boost::shared_ptr< ::rl::math::Vector > VectorPtr; + } +} + +#endif // _RL_PLAN_VECTORPTR_H_ diff --git a/src/rl/plan/Verifier.cpp b/src/rl/plan/Verifier.cpp new file mode 100644 index 00000000..56d90d51 --- /dev/null +++ b/src/rl/plan/Verifier.cpp @@ -0,0 +1,43 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Verifier.h" + +namespace rl +{ + namespace plan + { + Verifier::Verifier() : + delta(1.0f), + model(NULL) + { + } + + Verifier::~Verifier() + { + } + } +} diff --git a/src/rl/plan/Verifier.h b/src/rl/plan/Verifier.h new file mode 100644 index 00000000..f0e1aa1b --- /dev/null +++ b/src/rl/plan/Verifier.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_VERIFIER_H_ +#define _RL_PLAN_VERIFIER_H_ + +#include + +namespace rl +{ + namespace plan + { + class SimpleModel; + + class Verifier + { + public: + Verifier(); + + virtual ~Verifier(); + + virtual bool isColliding(const ::rl::math::Vector& u, const ::rl::math::Vector& v, const ::rl::math::Real& d) = 0; + + ::rl::math::Real delta; + + SimpleModel* model; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_VERIFIER_H_ diff --git a/src/rl/plan/Viewer.cpp b/src/rl/plan/Viewer.cpp new file mode 100644 index 00000000..42a23909 --- /dev/null +++ b/src/rl/plan/Viewer.cpp @@ -0,0 +1,41 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Viewer.h" + +namespace rl +{ + namespace plan + { + Viewer::Viewer() + { + } + + Viewer::~Viewer() + { + } + } +} diff --git a/src/rl/plan/Viewer.h b/src/rl/plan/Viewer.h new file mode 100644 index 00000000..b5b3d05c --- /dev/null +++ b/src/rl/plan/Viewer.h @@ -0,0 +1,88 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_VIEWER_H_ +#define _RL_PLAN_VIEWER_H_ + +#include +#include + +#include "VectorList.h" + +namespace rl +{ + namespace plan + { + class Viewer + { + public: + Viewer(); + + virtual ~Viewer(); + + virtual void drawConfiguration(const ::rl::math::Vector& q) = 0; + + virtual void drawConfigurationEdge(const ::rl::math::Vector& q0, const ::rl::math::Vector& q1, const bool& free = true) = 0; + + virtual void drawConfigurationPath(const VectorList& path) = 0; + + virtual void drawConfigurationVertex(const ::rl::math::Vector& q, const bool& free = true) = 0; + + virtual void drawLine(const ::rl::math::Vector& xyz0, const ::rl::math::Vector& xyz1) = 0; + + virtual void drawPoint(const ::rl::math::Vector& xyz) = 0; + + virtual void drawSphere(const ::rl::math::Vector& center, const ::rl::math::Real& radius) = 0; + + virtual void drawWork(const ::rl::math::Transform& t) = 0; + + virtual void drawWorkEdge(const ::rl::math::Vector& q0, const ::rl::math::Vector& q1) = 0; + + virtual void drawWorkPath(const VectorList& path) = 0; + + virtual void drawWorkVertex(const ::rl::math::Vector& q) = 0; + + virtual void reset() = 0; + + virtual void resetEdges() = 0; + + virtual void resetLines() = 0; + + virtual void resetPoints() = 0; + + virtual void resetSpheres() = 0; + + virtual void resetVertices() = 0; + + protected: + + private: + + }; + } +} + +#endif // VIEWER_H_ diff --git a/src/rl/plan/WorkspaceSphere.cpp b/src/rl/plan/WorkspaceSphere.cpp new file mode 100644 index 00000000..c961303e --- /dev/null +++ b/src/rl/plan/WorkspaceSphere.cpp @@ -0,0 +1,47 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "WorkspaceSphere.h" + +namespace rl +{ + namespace plan + { + WorkspaceSphere::WorkspaceSphere() + { + } + + WorkspaceSphere::~WorkspaceSphere() + { + } + + bool + WorkspaceSphere::operator<(const WorkspaceSphere& rhs) const + { + return this->priority < rhs.priority; + } + } +} diff --git a/src/rl/plan/WorkspaceSphere.h b/src/rl/plan/WorkspaceSphere.h new file mode 100644 index 00000000..3183011c --- /dev/null +++ b/src/rl/plan/WorkspaceSphere.h @@ -0,0 +1,67 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_WORKSPACESPHERE_H_ +#define _RL_PLAN_WORKSPACESPHERE_H_ + +#include + +#include "Vector3Ptr.h" + +namespace rl +{ + namespace plan + { + class WorkspaceSphere + { + public: + WorkspaceSphere(); + + virtual ~WorkspaceSphere(); + + bool operator<(const WorkspaceSphere& rhs) const; + + Vector3Ptr center; + + void* parent; + + ::rl::math::Real priority; + + ::rl::math::Real radius; + + ::rl::math::Real radiusSum; + + ::std::vector v; + + protected: + + private: + + }; + } +} + +#endif // _RL_PLAN_WORKSPACESPHERE_H_ diff --git a/src/rl/plan/WorkspaceSphereExplorer.cpp b/src/rl/plan/WorkspaceSphereExplorer.cpp new file mode 100644 index 00000000..68aa5bc1 --- /dev/null +++ b/src/rl/plan/WorkspaceSphereExplorer.cpp @@ -0,0 +1,292 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "DistanceModel.h" +#include "Viewer.h" +#include "WorkspaceSphereExplorer.h" + +//#define PRINT_WORKSPACE_PATH + +namespace rl +{ + namespace plan + { + WorkspaceSphereExplorer::WorkspaceSphereExplorer() : + goal(), + greedy(GREEDY_SPACE), + model(NULL), + radius(0.0f), + range(::std::numeric_limits< ::rl::math::Real >::max()), + samples(10), + start(), + viewer(NULL), + begin(NULL), + end(NULL), + graph(), + queue(), + rand( + ::boost::mt19937(static_cast< ::boost::mt19937::result_type >(::rl::util::Timer::now() * 1000000.0f)), + ::boost::uniform_on_sphere< ::rl::math::Real >(3) + ) + { + } + + WorkspaceSphereExplorer::~WorkspaceSphereExplorer() + { + } + + WorkspaceSphereExplorer::Edge + WorkspaceSphereExplorer::addEdge(const Vertex& u, const Vertex& v) + { + Edge edge = ::boost::add_edge(u, v, this->graph).first; + + if (NULL != this->viewer) + { + this->viewer->drawWorkEdge(*this->graph[u].sphere.center, *this->graph[v].sphere.center); + } + + return edge; + } + + WorkspaceSphereExplorer::Vertex + WorkspaceSphereExplorer::addVertex(const WorkspaceSphere& sphere) + { + Vertex vertex = ::boost::add_vertex(this->graph); + this->graph[vertex].sphere = sphere; + +#ifndef PRINT_WORKSPACE_PATH + if (NULL != this->viewer) + { + this->viewer->drawSphere(*this->graph[vertex].sphere.center, this->graph[vertex].sphere.radius); + this->viewer->drawWorkVertex(*this->graph[vertex].sphere.center); + } +#endif + + return vertex; + } + + bool + WorkspaceSphereExplorer::explore() + { + WorkspaceSphere start; + start.center = ::boost::make_shared< ::rl::math::Vector3 >(*this->start); + start.radius = this->model->distance(*start.center); + start.radiusSum = start.radius; + start.parent = NULL; + + start.priority = (*this->goal - *start.center).norm() - start.radius; + + this->queue.insert(start); + + ::std::vector< ::rl::math::Real > sample(3); + + while (!this->queue.empty()) + { + WorkspaceSphere top = *this->queue.begin(); + + this->queue.erase(this->queue.begin()); + + if (top.radius >= this->radius) + { + Vertex vertex = this->addVertex(top); + + if (NULL != top.parent) + { + this->addEdge(top.parent, vertex); + } + else + { + this->begin = vertex; + } + + if ((*this->goal - *top.center).norm() < top.radius) + { + WorkspaceSphere goal; + goal.center = ::boost::make_shared< ::rl::math::Vector3 >(*this->goal); + goal.radius = this->model->distance(*goal.center); + goal.parent = vertex; + goal.priority = (*this->goal - *goal.center).norm() - goal.radius; + + this->end = this->addVertex(goal); + + if (NULL != top.parent) + { + this->addEdge(top.parent, this->end); + } + else + { + this->addEdge(this->begin, this->end); + } + + return true; + } + + ::std::multiset< WorkspaceSphere >::iterator i = this->queue.begin(); + ::std::multiset< WorkspaceSphere >::iterator j; + + while (i != this->queue.end()) + { + if ((*i->center - *top.center).norm() < top.radius) + { + j = i; + ++i; + this->queue.erase(j); + } + else + { + ++i; + } + } + + for (::std::size_t i = 0; i < ::std::ceil(this->samples * top.radius); ++i) +//for (::std::size_t i = 0; i < this->samples; ++i) // TODO + { + WorkspaceSphere sphere; + + sphere.parent = vertex; + + sample = this->rand(); + + sphere.center = ::boost::make_shared< ::rl::math::Vector3 >( + top.radius * ::rl::math::Vector3(sample[0], sample[1], sample[2]) + *top.center // TODO + ); + + if ((*this->start - *sphere.center).norm() <= this->range) + { + if (!this->isCovered(top.parent, *sphere.center)) + { + sphere.radius = this->model->distance(*sphere.center); + sphere.radiusSum = sphere.radius + top.radiusSum; + + if (sphere.radius >= this->radius) + { + switch (this->greedy) + { + case GREEDY_DISTANCE: + sphere.priority = (*this->goal - *sphere.center).norm() - sphere.radius; + break; + case GREEDY_SOURCE_DISTANCE: + sphere.priority = (*this->goal - *sphere.center).norm() - sphere.radius + top.radiusSum; + break; + case GREEDY_SPACE: + sphere.priority = 1.0f / sphere.radius; + break; + default: + break; + } + + this->queue.insert(sphere); + } + } + } + } + } + } + + return false; + } + + void + WorkspaceSphereExplorer::getPath(WorkspaceSphereList& path) const + { + Vertex i = this->end; + + while (i != this->begin) + { + path.push_front(this->graph[i].sphere); + +#ifdef PRINT_WORKSPACE_PATH + if (NULL != this->viewer) + { + this->viewer->drawSphere(*this->graph[i].sphere.center, this->graph[i].sphere.radius); + this->viewer->drawWorkVertex(*this->graph[i].sphere.center); + } +#endif + + i = ::boost::source(*::boost::in_edges(i, this->graph).first, this->graph); + } + + path.push_front(this->graph[i].sphere); + +#ifdef PRINT_WORKSPACE_PATH + if (NULL != this->viewer) + { + this->viewer->drawSphere(*this->graph[i].sphere.center, this->graph[i].sphere.radius); + this->viewer->drawWorkVertex(*this->graph[i].sphere.center); + } +#endif + } + + bool + WorkspaceSphereExplorer::isCovered(const ::rl::math::Vector3& point) const + { + for (VertexIteratorPair i = ::boost::vertices(this->graph); i.first != i.second; ++i.first) + { + if ((point - *this->graph[*i.first].sphere.center).norm() < this->graph[*i.first].sphere.radius) + { + return true; + } + } + + return false; + } + + bool + WorkspaceSphereExplorer::isCovered(const Vertex& parent, const ::rl::math::Vector3& point) const + { + for (VertexIteratorPair i = ::boost::vertices(this->graph); i.first != i.second; ++i.first) + { + if (parent != this->graph[*i.first].sphere.parent) + { + if ((point - *this->graph[*i.first].sphere.center).norm() < this->graph[*i.first].sphere.radius) + { + return true; + } + } + } + + return false; + } + + void + WorkspaceSphereExplorer::reset() + { + this->graph.clear(); + this->queue.clear(); + this->begin = NULL; + this->end = NULL; + } + + void + WorkspaceSphereExplorer::seed(const ::boost::mt19937::result_type& value) + { + this->rand.engine().seed(value); + } + } +} diff --git a/src/rl/plan/WorkspaceSphereExplorer.h b/src/rl/plan/WorkspaceSphereExplorer.h new file mode 100644 index 00000000..108fac86 --- /dev/null +++ b/src/rl/plan/WorkspaceSphereExplorer.h @@ -0,0 +1,135 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_WORKSPACESPHEREEXPLORER_H_ +#define _RL_PLAN_WORKSPACESPHEREEXPLORER_H_ + +#include +#include +#include +#include +#include +#include +#include + +#include "WorkspaceSphere.h" +#include "WorkspaceSphereList.h" + +namespace rl +{ + namespace plan + { + class DistanceModel; + class Viewer; + + class WorkspaceSphereExplorer + { + public: + enum Greedy + { + GREEDY_DISTANCE, + GREEDY_SOURCE_DISTANCE, + GREEDY_SPACE + }; + + WorkspaceSphereExplorer(); + + virtual ~WorkspaceSphereExplorer(); + + bool explore(); + + void getPath(WorkspaceSphereList& path) const; + + bool isCovered(const ::rl::math::Vector3& point) const; + + void reset(); + + void seed(const ::boost::mt19937::result_type& value); + + ::rl::math::Vector3* goal; + + Greedy greedy; + + DistanceModel* model; + + ::rl::math::Real radius; + + ::rl::math::Real range; + + ::std::size_t samples; + + ::rl::math::Vector3* start; + + Viewer* viewer; + + protected: + struct VertexBundle + { + WorkspaceSphere sphere; + }; + + typedef ::boost::adjacency_list< + ::boost::listS, + ::boost::listS, + ::boost::bidirectionalS, + VertexBundle + > Graph; + + typedef ::boost::graph_traits< Graph >::edge_descriptor Edge; + + typedef ::boost::graph_traits< Graph >::edge_iterator EdgeIterator; + + typedef ::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair; + + typedef ::boost::graph_traits< Graph >::vertex_descriptor Vertex; + + typedef ::boost::graph_traits< Graph >::vertex_iterator VertexIterator; + + typedef ::std::pair< VertexIterator, VertexIterator > VertexIteratorPair; + + Edge addEdge(const Vertex& u, const Vertex& v); + + Vertex addVertex(const WorkspaceSphere& sphere); + + bool isCovered(const Vertex& parent, const ::rl::math::Vector3& point) const; + + Vertex begin; + + Vertex end; + + Graph graph; + + ::std::multiset< WorkspaceSphere > queue; + + ::boost::variate_generator< ::boost::mt19937, ::boost::uniform_on_sphere< ::rl::math::Real > > rand; + + private: + + }; + } +} + +#endif // _RL_PLAN_WORKSPACESPHEREEXPLORER_H_ diff --git a/src/rl/plan/WorkspaceSphereList.h b/src/rl/plan/WorkspaceSphereList.h new file mode 100644 index 00000000..2316b8a3 --- /dev/null +++ b/src/rl/plan/WorkspaceSphereList.h @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_WORKSPACESPHERELIST_H_ +#define _RL_PLAN_WORKSPACESPHERELIST_H_ + +#include + +#include "WorkspaceSphere.h" + +namespace rl +{ + namespace plan + { + typedef ::std::list< WorkspaceSphere > WorkspaceSphereList; + } +} + +#endif // _RL_PLAN_WORKSPACESPHERELIST_H_ diff --git a/src/rl/plan/WorkspaceSphereVector.h b/src/rl/plan/WorkspaceSphereVector.h new file mode 100644 index 00000000..61cc3a85 --- /dev/null +++ b/src/rl/plan/WorkspaceSphereVector.h @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_PLAN_WORKSPACESPHEREVECTOR_H_ +#define _RL_PLAN_WORKSPACESPHEREVECTOR_H_ + +#include + +#include "WorkspaceSphere.h" + +namespace rl +{ + namespace plan + { + typedef ::std::vector WorkspaceSphereVector; + } +} + +#endif // _RL_PLAN_WORKSPACESPHEREVECTOR_H_ diff --git a/src/rl/sg/Body.cpp b/src/rl/sg/Body.cpp new file mode 100644 index 00000000..e718fb75 --- /dev/null +++ b/src/rl/sg/Body.cpp @@ -0,0 +1,145 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include + +#include "Body.h" +#include "Model.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + Body::Body(Model* model) : + center(::rl::math::Vector3::Zero()), + max(::rl::math::Vector3::Zero()), + min(::rl::math::Vector3::Zero()), + points(), + model(model), + shapes(), + name() + { + } + + Body::~Body() + { + } + + void + Body::add(Shape* shape) + { + this->shapes.push_back(shape); + } + + Body::Iterator + Body::begin() + { + return this->shapes.begin(); + } + + Body::Iterator + Body::end() + { + return this->shapes.end(); + } + + void + Body::getBoundingBoxPoints(const ::rl::math::Transform& frame, ::std::vector< ::rl::math::Vector3 >& p) const + { + p.resize(8); + + for (::std::size_t i = 0; i < 8; ++i) + { + for (::std::size_t j = 0, k = 1; j < 3; ++j, k *= 2) + { + p[i](j) = i & k ? this->max(j) : this->min(j); + } + } + + for (::std::size_t i = 0; i < p.size(); ++i) + { + p[i] = frame.linear() * p[i] + frame.translation(); + } + } + + Model* + Body::getModel() const + { + return this->model; + } + ::std::string + Body::getName() const + { + return this->name; + } + + ::std::size_t + Body::getNumShapes() const + { + return this->shapes.size(); + } + + void + Body::getPoints(const ::rl::math::Transform& frame, ::std::vector< ::rl::math::Vector3 >& p) const + { + p.resize(this->points.size()); + + for (::std::size_t i = 0; i < p.size(); ++i) + { + p[i] = frame.linear() * this->points[i] + frame.translation(); + } + } + + Shape* + Body::getShape(const ::std::size_t& i) const + { + return this->shapes[i]; + } + + void + Body::remove(Shape* shape) + { + Iterator found = ::std::find(this->shapes.begin(), this->shapes.end(), shape); + + if (found != this->shapes.end()) + { + this->shapes.erase(found); + } + } + + void + Body::setName(const ::std::string& name) + { + this->name = name; + } + } +} diff --git a/src/rl/sg/Body.h b/src/rl/sg/Body.h new file mode 100644 index 00000000..2e152688 --- /dev/null +++ b/src/rl/sg/Body.h @@ -0,0 +1,100 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_BODY_H_ +#define _RL_SG_BODY_H_ + +#include +#include +#include +#include +#include +#include + +namespace rl +{ + namespace sg + { + class Model; + class Shape; + + class Body + { + public: + typedef ::std::vector< Shape* >::iterator Iterator; + + Body(Model* model); + + virtual ~Body(); + + virtual void add(Shape* shape); + + Iterator begin(); + + virtual Shape* create(SoVRMLShape* shape) = 0; + + Iterator end(); + + void getBoundingBoxPoints(const ::rl::math::Transform& frame, ::std::vector< ::rl::math::Vector3 >& p) const; + + Model* getModel() const; + + virtual ::std::string getName() const; + + ::std::size_t getNumShapes() const; + + void getPoints(const ::rl::math::Transform& frame, ::std::vector< ::rl::math::Vector3 >& p) const; + + Shape* getShape(const ::std::size_t& i) const; + + virtual void getFrame(::rl::math::Transform& frame) = 0; + + virtual void remove(Shape* shape); + + virtual void setFrame(const ::rl::math::Transform& frame) = 0; + + virtual void setName(const ::std::string& name); + + ::rl::math::Vector3 center; + + ::rl::math::Vector3 max; + + ::rl::math::Vector3 min; + + ::std::vector< ::rl::math::Vector3 > points; + + protected: + Model* model; + + ::std::vector< Shape* > shapes; + + private: + ::std::string name; + }; + } +} + +#endif // _RL_SG_BODY_H_ diff --git a/src/rl/sg/CMakeLists.txt b/src/rl/sg/CMakeLists.txt new file mode 100644 index 00000000..a49b0710 --- /dev/null +++ b/src/rl/sg/CMakeLists.txt @@ -0,0 +1,215 @@ +project(rlsg) + +find_package(Boost REQUIRED) + +find_package(Bullet) +find_package(Coin REQUIRED) +find_package(Ode) +find_package(Pqp) +find_package(Solid) + +set( + BASE_HDRS + Body.h + DepthScene.h + DistanceScene.h + Exception.h + Model.h + RaycastScene.h + Scene.h + Shape.h + SimpleScene.h +) +set(HDRS ${BASE_HDRS}) + +set( + BASE_SRCS + Body.cpp + DepthScene.cpp + DistanceScene.cpp + Exception.cpp + Model.cpp + RaycastScene.cpp + Scene.cpp + Shape.cpp + SimpleScene.cpp +) +set(SRCS ${BASE_SRCS}) + +if(BULLET_FOUND) + set( + BULLET_HDRS + bullet/Body.h + bullet/Model.h + bullet/Scene.h + bullet/Shape.h + ) + set(HDRS ${HDRS} ${BULLET_HDRS}) + set( + BULLET_SRCS + bullet/Body.cpp + bullet/Model.cpp + bullet/Scene.cpp + bullet/Shape.cpp + ) + set(SRCS ${SRCS} ${BULLET_SRCS}) +endif(BULLET_FOUND) + +if(COIN_FOUND) + set( + COIN_HDRS + so/Body.h + so/Model.h + so/Scene.h + so/Shape.h + ) + set(HDRS ${HDRS} ${COIN_HDRS}) + set( + COIN_SRCS + so/Body.cpp + so/Model.cpp + so/Scene.cpp + so/Shape.cpp + ) + set(SRCS ${SRCS} ${COIN_SRCS}) +endif(COIN_FOUND) + +if(ODE_FOUND) + set( + ODE_HDRS + ode/Body.h + ode/Model.h + ode/Scene.h + ode/Shape.h + ) + set(HDRS ${HDRS} ${ODE_HDRS}) + set( + ODE_SRCS + ode/Body.cpp + ode/Model.cpp + ode/Scene.cpp + ode/Shape.cpp + ) + set(SRCS ${SRCS} ${ODE_SRCS}) +endif(ODE_FOUND) + +if(PQP_FOUND) + set( + PQP_HDRS + pqp/Body.h + pqp/Model.h + pqp/Scene.h + pqp/Shape.h + ) + set(HDRS ${HDRS} ${PQP_HDRS}) + set( + PQP_SRCS + pqp/Body.cpp + pqp/Model.cpp + pqp/Scene.cpp + pqp/Shape.cpp + ) + set(SRCS ${SRCS} ${PQP_SRCS}) +endif(PQP_FOUND) + +if(SOLID_FOUND) + set( + SOLID_HDRS + solid/Body.h + solid/Model.h + solid/Scene.h + solid/Shape.h + ) + set(HDRS ${HDRS} ${SOLID_HDRS}) + set( + SOLID_SRCS + solid/Body.cpp + solid/Model.cpp + solid/Scene.cpp + solid/Shape.cpp + ) + set(SRCS ${SRCS} ${SOLID_SRCS}) +endif(SOLID_FOUND) + +if(WIN32) + add_library( + rlsg + STATIC + ${HDRS} + ${SRCS} + ) +else(WIN32) + add_library( + rlsg + SHARED + ${HDRS} + ${SRCS} + ) +endif(WIN32) + +target_include_directories( + rlsg + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlsg + rlmath + rlutil + rlxml +) + +install(FILES ${BASE_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/sg COMPONENT headers) + +if(BULLET_FOUND) + target_compile_definitions(rlsg PUBLIC -DRL_SG_HAVE_BULLET) + target_include_directories(rlsg PUBLIC ${BULLET_INCLUDE_DIRS}) + target_link_libraries(rlsg ${BULLET_LIBRARIES}) + install(FILES ${BULLET_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/sg/bullet COMPONENT headers) +endif(BULLET_FOUND) + +if(COIN_FOUND) + target_compile_definitions(rlsg PUBLIC ${COIN_DEFINITIONS}) + target_include_directories(rlsg PUBLIC ${COIN_INCLUDE_DIRS}) + target_link_libraries(rlsg ${COIN_LIBRARIES}) + install(FILES ${COIN_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/sg/so COMPONENT headers) +endif(COIN_FOUND) + +if(ODE_FOUND) + target_compile_definitions(rlsg PUBLIC -DRL_SG_HAVE_ODE) + target_compile_definitions(rlsg PUBLIC ${ODE_DEFINITIONS}) + target_include_directories(rlsg PUBLIC ${ODE_INCLUDE_DIRS}) + target_link_libraries(rlsg ${ODE_LIBRARIES}) + install(FILES ${ODE_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/sg/ode COMPONENT headers) +endif(ODE_FOUND) + +if(PQP_FOUND) + target_compile_definitions(rlsg PUBLIC -DRL_SG_HAVE_PQP) + target_include_directories(rlsg PUBLIC ${PQP_INCLUDE_DIRS}) + target_link_libraries(rlsg ${PQP_LIBRARIES}) + install(FILES ${PQP_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/sg/pqp COMPONENT headers) +endif(PQP_FOUND) + +if(SOLID_FOUND) + target_compile_definitions(rlsg PUBLIC -DRL_SG_HAVE_SOLID) + target_include_directories(rlsg PUBLIC ${SOLID_INCLUDE_DIRS}) + target_link_libraries(rlsg ${SOLID_LIBRARIES}) + install(FILES ${SOLID_HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/sg/solid COMPONENT headers) +endif(SOLID_FOUND) + +set_target_properties( + rlsg + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install( + TARGETS rlsg + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/sg/DepthScene.cpp b/src/rl/sg/DepthScene.cpp new file mode 100644 index 00000000..72e629ef --- /dev/null +++ b/src/rl/sg/DepthScene.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "DepthScene.h" + +namespace rl +{ + namespace sg + { + DepthScene::DepthScene() : + Scene() + { + } + + DepthScene::~DepthScene() + { + } + } +} diff --git a/src/rl/sg/DepthScene.h b/src/rl/sg/DepthScene.h new file mode 100644 index 00000000..2f234cfa --- /dev/null +++ b/src/rl/sg/DepthScene.h @@ -0,0 +1,57 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_DEPTHSCENE_H_ +#define _RL_SG_DEPTHSCENE_H_ + +#include + +#include "Scene.h" + +namespace rl +{ + namespace sg + { + class Shape; + + class DepthScene : public virtual Scene + { + public: + DepthScene(); + + virtual ~DepthScene(); + + virtual bool depth(Shape* first, Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_SG_DEPTHSCENE_H_ diff --git a/src/rl/sg/DistanceScene.cpp b/src/rl/sg/DistanceScene.cpp new file mode 100644 index 00000000..8505f31b --- /dev/null +++ b/src/rl/sg/DistanceScene.cpp @@ -0,0 +1,190 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "DistanceScene.h" +#include "Model.h" + +namespace rl +{ + namespace sg + { + DistanceScene::DistanceScene() : + Scene() + { + } + + DistanceScene::~DistanceScene() + { + } + + ::rl::math::Real + DistanceScene::distance(const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + + for (Scene::Iterator i = this->begin(); i != this->end(); ++i) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = this->distance( + *i, + point, + tmpPoint1, + tmpPoint2 + ); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + + return distance; + } + + ::rl::math::Real + DistanceScene::distance(Body* first, Body* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + + for (Body::Iterator i = first->begin(); i != first->end(); ++i) + { + for (Body::Iterator j = second->begin(); j != second->end(); ++j) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = this->distance( + *i, + *j, + tmpPoint1, + tmpPoint2 + ); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + } + + return distance; + } + + ::rl::math::Real + DistanceScene::distance(Body* body, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + + for (Body::Iterator i = body->begin(); i != body->end(); ++i) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = this->distance( + *i, + point, + tmpPoint1, + tmpPoint2 + ); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + + return distance; + } + + ::rl::math::Real + DistanceScene::distance(Model* first, Model* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + + for (Model::Iterator i = first->begin(); i != first->end(); ++i) + { + for (Model::Iterator j = second->begin(); j != second->end(); ++j) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = this->distance( + *i, + *j, + tmpPoint1, + tmpPoint2 + ); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + } + + return distance; + } + + ::rl::math::Real + DistanceScene::distance(Model* model, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + ::rl::math::Real distance = ::std::numeric_limits< ::rl::math::Real >::max(); + + for (Model::Iterator i = model->begin(); i != model->end(); ++i) + { + ::rl::math::Vector3 tmpPoint1; + ::rl::math::Vector3 tmpPoint2; + + ::rl::math::Real tmpDistance = this->distance( + *i, + point, + tmpPoint1, + tmpPoint2 + ); + + if (tmpDistance < distance) + { + distance = tmpDistance; + point1 = tmpPoint1; + point2 = tmpPoint2; + } + } + + return distance; + } + } +} diff --git a/src/rl/sg/DistanceScene.h b/src/rl/sg/DistanceScene.h new file mode 100644 index 00000000..e8f65205 --- /dev/null +++ b/src/rl/sg/DistanceScene.h @@ -0,0 +1,72 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_DISTANCESCENE_H_ +#define _RL_SG_DISTANCESCENE_H_ + +#include + +#include "Scene.h" + +namespace rl +{ + namespace sg + { + class Body; + class Model; + class Scene; + class Shape; + + class DistanceScene : public virtual Scene + { + public: + DistanceScene(); + + virtual ~DistanceScene(); + + virtual ::rl::math::Real distance(const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + virtual ::rl::math::Real distance(Body* first, Body* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + virtual ::rl::math::Real distance(Body* body, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + virtual ::rl::math::Real distance(Model* first, Model* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + virtual ::rl::math::Real distance(Model* model, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + virtual ::rl::math::Real distance(Shape* first, Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) = 0; + + virtual ::rl::math::Real distance(Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_SG_DISTANCESCENE_H_ diff --git a/src/rl/sg/Exception.cpp b/src/rl/sg/Exception.cpp new file mode 100644 index 00000000..4c6d5a9e --- /dev/null +++ b/src/rl/sg/Exception.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Exception.h" + +namespace rl +{ + namespace sg + { + Exception::Exception(const ::std::string& what_arg) : + ::std::runtime_error(what_arg) + { + } + + Exception::~Exception() throw() + { + } + } +} diff --git a/src/rl/sg/Exception.h b/src/rl/sg/Exception.h new file mode 100644 index 00000000..7ab0c4c5 --- /dev/null +++ b/src/rl/sg/Exception.h @@ -0,0 +1,51 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_EXCEPTION_H_ +#define _RL_SG_EXCEPTION_H_ + +#include + +namespace rl +{ + namespace sg + { + class Exception : public ::std::runtime_error + { + public: + Exception(const ::std::string& what_arg); + + virtual ~Exception() throw(); + + protected: + + private: + + }; + } +} + +#endif // _RL_SG_EXCEPTION_H_ diff --git a/src/rl/sg/Model.cpp b/src/rl/sg/Model.cpp new file mode 100644 index 00000000..2cdeadd5 --- /dev/null +++ b/src/rl/sg/Model.cpp @@ -0,0 +1,110 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include + +#include "Body.h" +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + Model::Model(Scene* scene) : + bodies(), + scene(scene), + name() + { + } + + Model::~Model() + { + } + + void + Model::add(Body* body) + { + this->bodies.push_back(body); + } + + Model::Iterator + Model::begin() + { + return this->bodies.begin(); + } + + Model::Iterator + Model::end() + { + return this->bodies.end(); + } + + Body* + Model::getBody(const ::std::size_t& i) const + { + return this->bodies[i]; + } + + ::std::string + Model::getName() const + { + return this->name; + } + + ::std::size_t + Model::getNumBodies() const + { + return this->bodies.size(); + } + + Scene* + Model::getScene() const + { + return this->scene; + } + + void + Model::remove(Body* body) + { + Iterator found = ::std::find(this->bodies.begin(), this->bodies.end(), body); + + if (found != this->bodies.end()) + { + this->bodies.erase(found); + } + } + + void + Model::setName(const ::std::string& name) + { + this->name = name; + } + } +} diff --git a/src/rl/sg/Model.h b/src/rl/sg/Model.h new file mode 100644 index 00000000..e4babe9c --- /dev/null +++ b/src/rl/sg/Model.h @@ -0,0 +1,82 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_MODEL_H_ +#define _RL_SG_MODEL_H_ + +#include +#include +#include +#include + +namespace rl +{ + namespace sg + { + class Body; + class Scene; + + class Model + { + public: + typedef ::std::vector< Body* >::iterator Iterator; + + Model(Scene* scene); + + virtual ~Model(); + + virtual void add(Body* body); + + Iterator begin(); + + virtual Body* create() = 0; + + Iterator end(); + + Body* getBody(const ::std::size_t& i) const; + + virtual ::std::string getName() const; + + ::std::size_t getNumBodies() const; + + Scene* getScene() const; + + virtual void remove(Body* body); + + virtual void setName(const ::std::string& name); + + protected: + ::std::vector< Body* > bodies; + + Scene* scene; + + private: + ::std::string name; + }; + } +} + +#endif // _RL_SG_MODEL_H_ diff --git a/src/rl/sg/RaycastScene.cpp b/src/rl/sg/RaycastScene.cpp new file mode 100644 index 00000000..3719bf37 --- /dev/null +++ b/src/rl/sg/RaycastScene.cpp @@ -0,0 +1,42 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "RaycastScene.h" + +namespace rl +{ + namespace sg + { + RaycastScene::RaycastScene() : + Scene() + { + } + + RaycastScene::~RaycastScene() + { + } + } +} diff --git a/src/rl/sg/RaycastScene.h b/src/rl/sg/RaycastScene.h new file mode 100644 index 00000000..2f863315 --- /dev/null +++ b/src/rl/sg/RaycastScene.h @@ -0,0 +1,59 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_RAYCASTSCENE_H_ +#define _RL_SG_RAYCASTSCENE_H_ + +#include + +#include "Scene.h" + +namespace rl +{ + namespace sg + { + class Shape; + + class RaycastScene : public virtual Scene + { + public: + RaycastScene(); + + virtual ~RaycastScene(); + + virtual Shape* raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) = 0; + + virtual bool raycast(Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) = 0; + + protected: + + private: + + }; + } +} + +#endif // _RL_SG_RAYCASTSCENE_H_ diff --git a/src/rl/sg/Scene.cpp b/src/rl/sg/Scene.cpp new file mode 100644 index 00000000..41241a0a --- /dev/null +++ b/src/rl/sg/Scene.cpp @@ -0,0 +1,357 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Body.h" +#include "Exception.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + Scene::Scene() : + isScalingSupported(true), + models(), + name() + { + } + + Scene::~Scene() + { + } + + void + Scene::add(Model* model) + { + this->models.push_back(model); + } + + Scene::Iterator + Scene::begin() + { + return this->models.begin(); + } + + Scene::Iterator + Scene::end() + { + return this->models.end(); + } + + Model* + Scene::getModel(const ::std::size_t& i) const + { + return this->models[i]; + } + + ::std::string + Scene::getName() const + { + return this->name; + } + + ::std::size_t + Scene::getNumModels() const + { + return this->models.size(); + } + + void + Scene::load(const ::std::string& filename, const bool& doBoundingBoxPoints, const bool& doPoints) + { + ::rl::xml::DomParser parser; + + ::rl::xml::Document doc = parser.readFile(filename, "", XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + doc.substitute(XML_PARSE_NOENT | XML_PARSE_XINCLUDE); + + ::rl::xml::Path path(doc); + + ::rl::xml::Object scenes = path.eval("//scene"); + + for (int i = 0; i < ::std::min(1, scenes.getNodeNr()); ++i) + { + SoInput input; + + if (!input.openFile(scenes.getNodeTab(i).getLocalPath(scenes.getNodeTab(i).getAttribute("href").getValue()).c_str() ,true)) + { + throw Exception("::rl::sg::Scene::load() - failed to open file"); + } + + SoVRMLGroup* root = SoDB::readAllVRML(&input); + + if (NULL == root) + { + throw Exception("::rl::sg::Scene::load() - failed to read file"); + } + + SbViewportRegion viewportRegion; + + root->ref(); + + // model + + ::rl::xml::Object models = path.eval("model", scenes.getNodeTab(i)); + + for (int j = 0; j < models.getNodeNr(); ++j) + { + SoSearchAction modelSearchAction; + modelSearchAction.setName(models.getNodeTab(j).getAttribute("name").getValue().c_str()); + modelSearchAction.apply(root); + + if (NULL == modelSearchAction.getPath()) + { + continue; + } + + Model* model = this->create(); + + model->setName(models.getNodeTab(j).getAttribute("name").getValue()); + + // body + + ::rl::xml::Object bodies = path.eval("body", models.getNodeTab(j)); + + for (int k = 0; k < bodies.getNodeNr(); ++k) + { + SoSearchAction bodySearchAction; + bodySearchAction.setName(bodies.getNodeTab(k).getAttribute("name").getValue().c_str()); + bodySearchAction.apply(static_cast< SoFullPath* >(modelSearchAction.getPath())->getTail()); + + if (NULL == bodySearchAction.getPath()) + { + continue; + } + + Body* body = model->create(); + + body->setName(bodies.getNodeTab(k).getAttribute("name").getValue()); + + SoSearchAction pathSearchAction; + pathSearchAction.setNode(static_cast< SoFullPath* >(bodySearchAction.getPath())->getTail()); + pathSearchAction.apply(root); + + SoGetMatrixAction bodyGetMatrixAction(viewportRegion); + bodyGetMatrixAction.apply(static_cast< SoFullPath* >(pathSearchAction.getPath())); + SbMatrix bodyMatrix = bodyGetMatrixAction.getMatrix(); + + if (!this->isScalingSupported) + { + SbVec3f bodyTranslation; + SbRotation bodyRotation; + SbVec3f bodyScaleFactor; + SbRotation bodyScaleOrientation; + SbVec3f bodyCenter; + bodyMatrix.getTransform(bodyTranslation, bodyRotation, bodyScaleFactor, bodyScaleOrientation, bodyCenter); + + for (int l = 0; l < 3; ++l) + { + if (::std::abs(bodyScaleFactor[l] - 1.0f) > 1.0e-6f) + { + throw Exception("::rl::sg::Scene::load() - bodyScaleFactor not supported"); + } + } + } + + ::rl::math::Transform frame; + + for (int m = 0; m < 4; ++m) + { + for (int n = 0; n < 4; ++n) + { + frame(m, n) = bodyMatrix[n][m]; + } + } + + body->setFrame(frame); + + if (static_cast< SoFullPath* >(bodySearchAction.getPath())->getTail()->isOfType(SoVRMLTransform::getClassTypeId())) + { + SoVRMLTransform* bodyVrmlTransform = static_cast< SoVRMLTransform* >(static_cast< SoFullPath* >(bodySearchAction.getPath())->getTail()); + + for (int l = 0; l < 3; ++l) + { + body->center(l) = bodyVrmlTransform->center.getValue()[l]; + } + } + + SoPathList pathList; + + // shape + + SoSearchAction shapeSearchAction; + shapeSearchAction.setInterest(SoSearchAction::ALL); + shapeSearchAction.setType(SoVRMLShape::getClassTypeId()); + shapeSearchAction.apply(static_cast< SoFullPath* >(bodySearchAction.getPath())->getTail()); + + for (int l = 0; l < shapeSearchAction.getPaths().getLength(); ++l) + { + SoFullPath* path = static_cast< SoFullPath* >(shapeSearchAction.getPaths()[l]); + + if (path->getLength() > 1) + { + path = static_cast< SoFullPath* >(shapeSearchAction.getPaths()[l]->copy(1, static_cast< SoFullPath* >(shapeSearchAction.getPaths()[l])->getLength() - 1)); + } + + pathList.append(path); + + SoGetMatrixAction shapeGetMatrixAction(viewportRegion); + shapeGetMatrixAction.apply(path); + SbMatrix shapeMatrix = shapeGetMatrixAction.getMatrix(); + + if (!this->isScalingSupported) + { + SbVec3f shapeTranslation; + SbRotation shapeRotation; + SbVec3f shapeScaleFactor; + SbRotation shapeScaleOrientation; + SbVec3f shapeCenter; + shapeMatrix.getTransform(shapeTranslation, shapeRotation, shapeScaleFactor, shapeScaleOrientation, shapeCenter); + + for (int m = 0; m < 3; ++m) + { + if (::std::abs(shapeScaleFactor[m] - 1.0f) > 1.0e-6f) + { + throw Exception("::rl::sg::Scene::load() - shapeScaleFactor not supported"); + } + } + } + + SoVRMLShape* shapeVrmlShape = static_cast< SoVRMLShape* >(static_cast< SoFullPath* >(shapeSearchAction.getPaths()[l])->getTail()); + + Shape* shape = body->create(shapeVrmlShape); + + shape->setName(shapeVrmlShape->getName().getString()); + + ::rl::math::Transform transform; + + for (int m = 0; m < 4; ++m) + { + for (int n = 0; n < 4; ++n) + { + transform(m, n) = shapeMatrix[n][m]; + } + } + + shape->setTransform(transform); + } + + // bounding box + + if (doBoundingBoxPoints) + { + SoGetBoundingBoxAction getBoundingBoxAction(viewportRegion); + getBoundingBoxAction.apply(pathList); + SbBox3f boundingBox = getBoundingBoxAction.getBoundingBox(); + + for (int l = 0; l < 3; ++l) + { + body->max(l) = boundingBox.getMax()[l]; + body->min(l) = boundingBox.getMin()[l]; + } + } + + // convex hull + + if (doPoints) + { + SoCallbackAction callbackAction; + callbackAction.addTriangleCallback(SoVRMLGeometry::getClassTypeId(), Scene::triangleCallback, &body->points); + callbackAction.apply(pathList); + } + } + } + + root->unref(); + } + } + + void + Scene::remove(Model* model) + { + Iterator found = ::std::find(this->models.begin(), this->models.end(), model); + + if (found != this->models.end()) + { + this->models.erase(found); + } + } + + void + Scene::setName(const ::std::string& name) + { + this->name = name; + } + + void + Scene::triangleCallback(void* userData, SoCallbackAction* action, const SoPrimitiveVertex* v1, const SoPrimitiveVertex* v2, const SoPrimitiveVertex* v3) + { + ::std::vector< ::rl::math::Vector3 >* points = static_cast< ::std::vector< ::rl::math::Vector3 >* >(userData); + + ::rl::math::Vector3 p1; + p1(0) = v1->getPoint()[0]; + p1(1) = v1->getPoint()[1]; + p1(2) = v1->getPoint()[2]; + + points->push_back(p1); + + ::rl::math::Vector3 p2; + p2(0) = v2->getPoint()[0]; + p2(1) = v2->getPoint()[1]; + p2(2) = v2->getPoint()[2]; + + points->push_back(p2); + + ::rl::math::Vector3 p3; + p3(0) = v3->getPoint()[0]; + p3(1) = v3->getPoint()[1]; + p3(2) = v3->getPoint()[2]; + + points->push_back(p3); + } + } +} diff --git a/src/rl/sg/Scene.h b/src/rl/sg/Scene.h new file mode 100644 index 00000000..3099f0ef --- /dev/null +++ b/src/rl/sg/Scene.h @@ -0,0 +1,83 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SCENE_H_ +#define _RL_SG_SCENE_H_ + +#include +#include +#include +#include + +namespace rl +{ + namespace sg + { + class Model; + + class Scene + { + public: + typedef ::std::vector< Model* >::iterator Iterator; + + Scene(); + + virtual ~Scene(); + + virtual void add(Model* model); + + Iterator begin(); + + virtual Model* create() = 0; + + Iterator end(); + + Model* getModel(const ::std::size_t& i) const; + + virtual ::std::string getName() const; + + ::std::size_t getNumModels() const; + + void load(const ::std::string& filename, const bool& doBoundingBoxPoints = false, const bool& doPoints = false); + + virtual void remove(Model* model); + + virtual void setName(const ::std::string& name); + + protected: + bool isScalingSupported; + + ::std::vector< Model* > models; + + private: + static void triangleCallback(void* userData, SoCallbackAction* action, const SoPrimitiveVertex* v1, const SoPrimitiveVertex* v2, const SoPrimitiveVertex* v3); + + ::std::string name; + }; + } +} + +#endif // _RL_SG_SCENE_H_ diff --git a/src/rl/sg/Shape.cpp b/src/rl/sg/Shape.cpp new file mode 100644 index 00000000..edac5e52 --- /dev/null +++ b/src/rl/sg/Shape.cpp @@ -0,0 +1,62 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + Shape::Shape(SoVRMLShape* shape, Body* body) : + body(body), + name() + { + } + + Shape::~Shape() + { + } + + Body* + Shape::getBody() const + { + return this->body; + } + + ::std::string + Shape::getName() const + { + return this->name; + } + + void + Shape::setName(const ::std::string& name) + { + this->name = name; + } + } +} diff --git a/src/rl/sg/Shape.h b/src/rl/sg/Shape.h new file mode 100644 index 00000000..0ac2ad02 --- /dev/null +++ b/src/rl/sg/Shape.h @@ -0,0 +1,66 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SHAPE_H_ +#define _RL_SG_SHAPE_H_ + +#include +#include +#include + +namespace rl +{ + namespace sg + { + class Body; + + class Shape + { + public: + Shape(SoVRMLShape* shape, Body* body); + + virtual ~Shape(); + + Body* getBody() const; + + virtual ::std::string getName() const; + + virtual void getTransform(::rl::math::Transform& transform) = 0; + + virtual void setName(const ::std::string& name); + + virtual void setTransform(const ::rl::math::Transform& transform) = 0; + + protected: + Body* body; + + private: + ::std::string name; + }; + } +} + +#endif // _RL_SG_SHAPE_H_ diff --git a/src/rl/sg/SimpleScene.cpp b/src/rl/sg/SimpleScene.cpp new file mode 100644 index 00000000..d8bd3ffb --- /dev/null +++ b/src/rl/sg/SimpleScene.cpp @@ -0,0 +1,95 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "SimpleScene.h" + +namespace rl +{ + namespace sg + { + SimpleScene::SimpleScene() : + Scene() + { + } + + SimpleScene::~SimpleScene() + { + } + + bool + SimpleScene::areColliding(Body* first, Body* second) + { + for (Body::Iterator i = first->begin(); i != first->end(); ++i) + { + for (Body::Iterator j = second->begin(); j != second->end(); ++j) + { + if (this->areColliding(*i, *j)) + { + return true; + } + } + } + + return false; + } + + bool + SimpleScene::areColliding(Model* first, Model* second) + { + for (Model::Iterator i = first->begin(); i != first->end(); ++i) + { + for (Model::Iterator j = second->begin(); j != second->end(); ++j) + { + if (this->areColliding(*i, *j)) + { + return true; + } + } + } + + return false; + } + + bool + SimpleScene::isColliding() + { + for (Scene::Iterator i = this->begin(); i != this->end() - 1; ++i) + { + for (Scene::Iterator j = i + 1; j != this->end(); ++j) + { + if (this->areColliding(*i, *j)) + { + return true; + } + } + } + + return false; + } + } +} diff --git a/src/rl/sg/SimpleScene.h b/src/rl/sg/SimpleScene.h new file mode 100644 index 00000000..dbce2497 --- /dev/null +++ b/src/rl/sg/SimpleScene.h @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SIMPLESCENE_H_ +#define _RL_SG_SIMPLESCENE_H_ + +#include "Scene.h" + +namespace rl +{ + namespace sg + { + class Body; + class Model; + class Shape; + + class SimpleScene : public virtual Scene + { + public: + SimpleScene(); + + virtual ~SimpleScene(); + + virtual bool areColliding(Body* first, Body* second); + + virtual bool areColliding(Model* first, Model* second); + + virtual bool areColliding(Shape* first, Shape* second) = 0; + + virtual bool isColliding(); + + protected: + + private: + + }; + } +} + +#endif // _RL_SG_SIMPLESCENE_H_ diff --git a/src/rl/sg/bullet/Body.cpp b/src/rl/sg/bullet/Body.cpp new file mode 100644 index 00000000..9b46ef10 --- /dev/null +++ b/src/rl/sg/bullet/Body.cpp @@ -0,0 +1,106 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + Body::Body(Model* model) : + ::rl::sg::Body(model), + object(), + shape() + { + this->getModel()->add(this); + + this->object.setCollisionShape(&this->shape); + this->object.setUserPointer(this); + + dynamic_cast< Scene*> (this->getModel()->getScene())->world.addCollisionObject(&this->object); + } + + Body::~Body() + { + dynamic_cast< Scene*> (this->getModel()->getScene())->world.removeCollisionObject(&this->object); + + while (this->shapes.size() > 0) + { + delete this->shapes[0]; + } + + this->getModel()->remove(this); + } + + ::rl::sg::Shape* + Body::create(SoVRMLShape* shape) + { + return new Shape(shape, this); + } + + void + Body::getFrame(::rl::math::Transform& frame) + { + for (int i = 0; i < 3; ++i) + { + frame(0, i) = this->object.getWorldTransform().getBasis().getRow(i).getX(); + frame(1, i) = this->object.getWorldTransform().getBasis().getRow(i).getY(); + frame(2, i) = this->object.getWorldTransform().getBasis().getRow(i).getZ(); + } + + frame(0, 3) = this->object.getWorldTransform().getOrigin().getX(); + frame(1, 3) = this->object.getWorldTransform().getOrigin().getY(); + frame(2, 3) = this->object.getWorldTransform().getOrigin().getZ(); + + frame(3, 0) = 0; + frame(3, 1) = 0; + frame(3, 2) = 0; + frame(3, 3) = 1; + } + + void + Body::setFrame(const ::rl::math::Transform& frame) + { + this->object.getWorldTransform().getOrigin().setValue( + static_cast< btScalar >(frame(0, 3)), + static_cast< btScalar >(frame(1, 3)), + static_cast< btScalar >(frame(2, 3)) + ); + + this->object.getWorldTransform().getBasis().setValue( + static_cast< btScalar >(frame(0, 0)), static_cast< btScalar >(frame(0, 1)), static_cast< btScalar >(frame(0, 2)), + static_cast< btScalar >(frame(1, 0)), static_cast< btScalar >(frame(1, 1)), static_cast< btScalar >(frame(1, 2)), + static_cast< btScalar >(frame(2, 0)), static_cast< btScalar >(frame(2, 1)), static_cast< btScalar >(frame(2, 2)) + ); + } + } + } +} diff --git a/src/rl/sg/bullet/Body.h b/src/rl/sg/bullet/Body.h new file mode 100644 index 00000000..d1c610ce --- /dev/null +++ b/src/rl/sg/bullet/Body.h @@ -0,0 +1,68 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_BULLET_BODY_H_ +#define _RL_SG_BULLET_BODY_H_ + +#include + +#include "../Body.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + class Model; + + class Body : public ::rl::sg::Body + { + public: + Body(Model* model); + + virtual ~Body(); + + ::rl::sg::Shape* create(SoVRMLShape* shape); + + void getFrame(::rl::math::Transform& frame); + + void setFrame(const ::rl::math::Transform& frame); + + btCollisionObject object; + + btCompoundShape shape; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_BULLET_BODY_H_ diff --git a/src/rl/sg/bullet/Model.cpp b/src/rl/sg/bullet/Model.cpp new file mode 100644 index 00000000..76938701 --- /dev/null +++ b/src/rl/sg/bullet/Model.cpp @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + Model::Model(Scene* scene) : + ::rl::sg::Model(scene) + { + this->getScene()->add(this); + } + + Model::~Model() + { + while (this->bodies.size() > 0) + { + delete this->bodies[0]; + } + + this->getScene()->remove(this); + } + + ::rl::sg::Body* + Model::create() + { + return new Body(this); + } + } + } +} diff --git a/src/rl/sg/bullet/Model.h b/src/rl/sg/bullet/Model.h new file mode 100644 index 00000000..66b5ddbe --- /dev/null +++ b/src/rl/sg/bullet/Model.h @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_BULLET_MODEL_H_ +#define _RL_SG_BULLET_MODEL_H_ + +#include + +#include "../Model.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + class Scene; + + class Model : public ::rl::sg::Model + { + public: + Model(Scene* scene); + + virtual ~Model(); + + ::rl::sg::Body* create(); + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_BULLET_MODEL_H_ diff --git a/src/rl/sg/bullet/Scene.cpp b/src/rl/sg/bullet/Scene.cpp new file mode 100644 index 00000000..5cdc2e31 --- /dev/null +++ b/src/rl/sg/bullet/Scene.cpp @@ -0,0 +1,332 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include + +#include "../Exception.h" +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + Scene::Scene() : + ::rl::sg::Scene(), + ::rl::sg::DistanceScene(), + ::rl::sg::RaycastScene(), + ::rl::sg::SimpleScene(), + broadphase(), + configuration(), + dispatcher(&configuration), + world(&dispatcher, &broadphase, &configuration) + { + this->isScalingSupported = false; + } + + Scene::~Scene() + { + while (this->models.size() > 0) + { + delete this->models[0]; + } + } + + bool + Scene::areColliding(::rl::sg::Body* first, ::rl::sg::Body* second) + { + Body* body1 = static_cast< Body* >(first); + Body* body2 = static_cast< Body* >(second); + + ContactResultCallback resultCallback; + this->world.contactPairTest(&body1->object, &body2->object, resultCallback); + + return resultCallback.collision; + } + + bool + Scene::areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second) + { + throw Exception("::rl::sg::bullet::Scene::areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second) - not supported"); + } + + ::rl::sg::Model* + Scene::create() + { + return new Model(this); + } + +#if 0 + ::rl::math::Real + Scene::distance(::rl::sg::Body* first, ::rl::sg::Body* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + Body* body1 = static_cast< Body* >(first); + Body* body2 = static_cast< Body* >(second); + +// this->world.getDispatchInfo().m_convexMaxDistanceUseCPT = true; + + ContactResultCallback resultCallback; + this->world.contactPairTest(&body1->object, &body2->object, resultCallback); + +// this->world.getDispatchInfo().m_convexMaxDistanceUseCPT = false; + + point1.x() = resultCallback.positionWorldOnA.getX(); + point1.y() = resultCallback.positionWorldOnA.getY(); + point1.z() = resultCallback.positionWorldOnA.getZ(); + + point2.x() = resultCallback.positionWorldOnB.getX(); + point2.y() = resultCallback.positionWorldOnB.getY(); + point2.z() = resultCallback.positionWorldOnB.getZ(); + + return resultCallback.distance; + } + + ::rl::math::Real + Scene::distance(::rl::sg::Body* body, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + return 0; + } +#endif + + ::rl::math::Real + Scene::distance(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + Shape* shape1 = static_cast< Shape* >(first); + Shape* shape2 = static_cast< Shape* >(second); + + btVoronoiSimplexSolver sGjkSimplexSolver; + + btGjkEpaPenetrationDepthSolver epa; + btGjkPairDetector convexConvex(dynamic_cast< btConvexShape* >(shape1->shape), dynamic_cast< btConvexShape* >(shape2->shape), &sGjkSimplexSolver, &epa); + + Body* body1 = static_cast< Body* >(shape1->getBody()); + Body* body2 = static_cast< Body* >(shape2->getBody()); + + btPointCollector gjkOutput; + btGjkPairDetector::ClosestPointInput input; + input.m_transformA = body1->object.getWorldTransform() * shape1->transform; + input.m_transformB = body2->object.getWorldTransform() * shape2->transform; + + convexConvex.getClosestPoints(input, gjkOutput, 0); + + point1.x() = gjkOutput.m_pointInWorld.x(); + point1.y() = gjkOutput.m_pointInWorld.y(); + point1.z() = gjkOutput.m_pointInWorld.z(); + + btVector3 endPt = gjkOutput.m_pointInWorld + gjkOutput.m_normalOnBInWorld * gjkOutput.m_distance; + + point2.x() = endPt.x(); + point2.y() = endPt.y(); + point2.z() = endPt.z(); + + return gjkOutput.m_distance; + } + + ::rl::math::Real + Scene::distance(::rl::sg::Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + btSphereShape sphere(0); + + btVoronoiSimplexSolver sGjkSimplexSolver; + + btGjkEpaPenetrationDepthSolver epa; + btGjkPairDetector convexConvex( + dynamic_cast< btConvexShape* >(static_cast< Shape* >(shape)->shape), + dynamic_cast< btConvexShape* >(&sphere), + &sGjkSimplexSolver, + &epa + ); + + Body* body = static_cast< Body* >(shape->getBody()); + + btPointCollector gjkOutput; + btGjkPairDetector::ClosestPointInput input; + input.m_transformA = body->object.getWorldTransform() * static_cast< Shape* >(shape)->transform; + input.m_transformB.setIdentity(); + input.m_transformB.getOrigin().setValue( + static_cast< btScalar >(point.x()), + static_cast< btScalar >(point.y()), + static_cast< btScalar >(point.z()) + ); + + convexConvex.getClosestPoints(input, gjkOutput, 0); + + point1.x() = gjkOutput.m_pointInWorld.x(); + point1.y() = gjkOutput.m_pointInWorld.y(); + point1.z() = gjkOutput.m_pointInWorld.z(); + + btVector3 endPt = gjkOutput.m_pointInWorld + gjkOutput.m_normalOnBInWorld * gjkOutput.m_distance; + + point2.x() = endPt.x(); + point2.y() = endPt.y(); + point2.z() = endPt.z(); + + return gjkOutput.m_distance; + } + + bool + Scene::isColliding() + { + this->world.performDiscreteCollisionDetection(); + + for (int i = 0; i < this->world.getDispatcher()->getNumManifolds(); ++i) + { + if (this->world.getDispatcher()->getManifoldByIndexInternal(i)->getNumContacts() > 0) + { + return true; + } + } + + return false; + } + + ::rl::sg::Shape* + Scene::raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) + { + btVector3 rayFromWorld( + static_cast< btScalar >(source.x()), + static_cast< btScalar >(source.y()), + static_cast< btScalar >(source.z()) + ); + + btVector3 rayToWorld( + static_cast< btScalar >(target.x()), + static_cast< btScalar >(target.y()), + static_cast< btScalar >(target.z()) + ); + + RayResultCallback resultCallback; + + this->world.rayTest(rayFromWorld, rayToWorld, resultCallback); + + if (NULL != resultCallback.collisionShape) + { + btVector3 hitPointWorld; + hitPointWorld.setInterpolate3(rayFromWorld, rayToWorld, resultCallback.m_closestHitFraction); + distance = rayFromWorld.distance(hitPointWorld); + return static_cast< Shape* >(resultCallback.collisionShape->getUserPointer()); + } + else + { + distance = std::numeric_limits< btScalar >::quiet_NaN(); + return NULL; + } + } + + bool + Scene::raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) + { + Body* body = static_cast< Body* >(shape->getBody()); + + btVector3 rayFromWorld( + static_cast< btScalar >(source.x()), + static_cast< btScalar >(source.y()), + static_cast< btScalar >(source.z()) + ); + + btTransform rayFromTrans; + rayFromTrans.setIdentity(); + rayFromTrans.setOrigin(rayFromWorld); + + btVector3 rayToWorld( + static_cast< btScalar >(target.x()), + static_cast< btScalar >(target.y()), + static_cast< btScalar >(target.z()) + ); + + btTransform rayToTrans; + rayToTrans.setIdentity(); + rayToTrans.setOrigin(rayToWorld); + + RayResultCallback resultCallback; + + this->world.rayTestSingle( + rayFromTrans, + rayToTrans, + &body->object, + static_cast< Shape* >(shape)->shape, + body->object.getWorldTransform() * static_cast< Shape* >(shape)->transform, // TODO + resultCallback + ); + + if (NULL != resultCallback.collisionShape) + { + btVector3 hitPointWorld; + hitPointWorld.setInterpolate3(rayFromWorld, rayToWorld, resultCallback.m_closestHitFraction); + distance = rayFromWorld.distance(hitPointWorld); + return true; + } + else + { + distance = std::numeric_limits< btScalar >::quiet_NaN(); + return false; + } + } + + Scene::ContactResultCallback::ContactResultCallback() : + collision(false) + { + } + + btScalar +#if (BT_BULLET_VERSION < 281) + Scene::ContactResultCallback::addSingleResult(btManifoldPoint& cp, const btCollisionObject* colObj0, int partId0, int index0, const btCollisionObject* colObj1, int partId1, int index1) +#else + Scene::ContactResultCallback::addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0, int partId0, int index0, const btCollisionObjectWrapper* colObj1, int partId1, int index1) +#endif + { + this->collision = true; +#if 0 + distance = cp.getDistance(); + positionWorldOnA = cp.getPositionWorldOnA(); + positionWorldOnB = cp.getPositionWorldOnB(); +#endif + return 0; + } + + Scene::RayResultCallback::RayResultCallback() : + collisionShape(NULL) + { + } + + btScalar + Scene::RayResultCallback::addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) + { + this->collisionShape = rayResult.m_collisionObject->getCollisionShape(); + this->m_closestHitFraction = rayResult.m_hitFraction; + return 0; + } + } + } +} diff --git a/src/rl/sg/bullet/Scene.h b/src/rl/sg/bullet/Scene.h new file mode 100644 index 00000000..c5ef3a2d --- /dev/null +++ b/src/rl/sg/bullet/Scene.h @@ -0,0 +1,120 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_BULLET_SCENE_H_ +#define _RL_SG_BULLET_SCENE_H_ + +#include + +#include "../DistanceScene.h" +#include "../RaycastScene.h" +#include "../SimpleScene.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + class Scene : public ::rl::sg::DistanceScene, public ::rl::sg::RaycastScene, public ::rl::sg::SimpleScene + { + public: + Scene(); + + virtual ~Scene(); + + bool areColliding(::rl::sg::Body* first, ::rl::sg::Body* second); + + bool areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second); + + ::rl::sg::Model* create(); + + using ::rl::sg::DistanceScene::distance; + +#if 0 + ::rl::math::Real distance(::rl::sg::Body* first, ::rl::sg::Body* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + ::rl::math::Real distance(::rl::sg::Body* body, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); +#endif + + ::rl::math::Real distance(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + ::rl::math::Real distance(::rl::sg::Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + bool isColliding(); + + ::rl::sg::Shape* raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance); + + bool raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance); + + void setMargin(const ::rl::math::Real& margin); + + btDbvtBroadphase broadphase; + + btDefaultCollisionConfiguration configuration; + + btCollisionDispatcher dispatcher; + + btCollisionWorld world; + + protected: + + private: + struct ContactResultCallback : public btCollisionWorld::ContactResultCallback + { + ContactResultCallback(); + +#if (BT_BULLET_VERSION < 281) + btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObject* colObj0, int partId0, int index0, const btCollisionObject* colObj1, int partId1, int index1); +#else + btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0, int partId0, int index0, const btCollisionObjectWrapper* colObj1, int partId1, int index1); +#endif + + bool collision; + + btScalar distance; + + btVector3 positionWorldOnA; + + btVector3 positionWorldOnB; + }; + + struct RayResultCallback : public btCollisionWorld::RayResultCallback + { + RayResultCallback(); + + btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace); + + const btCollisionShape* collisionShape; + + btVector3 hitPointWorld; + }; + }; + } + } +} + +#endif // _RL_SG_BULLET_SCENE_H_ diff --git a/src/rl/sg/bullet/Shape.cpp b/src/rl/sg/bullet/Shape.cpp new file mode 100644 index 00000000..b103ff32 --- /dev/null +++ b/src/rl/sg/bullet/Shape.cpp @@ -0,0 +1,216 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + Shape::Shape(SoVRMLShape* shape, Body* body) : + ::rl::sg::Shape(shape, body), + shape(NULL), + transform(), + indices(), + triangleIndexVertexArray(NULL), + vertices() + { + SoVRMLGeometry* geometry = static_cast< SoVRMLGeometry* >(shape->geometry.getValue()); + + if (geometry->isOfType(SoVRMLBox::getClassTypeId())) + { + SoVRMLBox* box = static_cast< SoVRMLBox* >(geometry); + btVector3 boxHalfExtents(box->size.getValue()[0] / 2, box->size.getValue()[1] / 2, box->size.getValue()[2] / 2); + this->shape = new btBoxShape(boxHalfExtents); + } + else if (geometry->isOfType(SoVRMLCone::getClassTypeId())) + { + SoVRMLCone* cone = static_cast< SoVRMLCone* >(geometry); + this->shape = new btConeShape(cone->bottomRadius.getValue(), cone->height.getValue()); + } + else if (geometry->isOfType(SoVRMLCylinder::getClassTypeId())) + { + SoVRMLCylinder* cylinder = static_cast< SoVRMLCylinder* >(geometry); + this->shape = new btCylinderShape(btVector3(cylinder->radius.getValue(), cylinder->height.getValue() / 2, cylinder->radius.getValue())); + } + else if (geometry->isOfType(SoVRMLIndexedFaceSet::getClassTypeId())) + { + SoVRMLIndexedFaceSet* indexedFaceSet = static_cast< SoVRMLIndexedFaceSet* >(geometry); + + SoCallbackAction callbackAction; + callbackAction.addTriangleCallback(geometry->getTypeId(), Shape::triangleCallback, this); + callbackAction.apply(geometry); + + if (indexedFaceSet->convex.getValue()) + { + this->shape = new btConvexHullShape( + &this->vertices[0], + this->vertices.size() / 3, + 3 * sizeof(btScalar) + ); + } + else + { + this->triangleIndexVertexArray = new btTriangleIndexVertexArray( + this->indices.size() / 3, + &this->indices[0], + 3 * sizeof(int), + this->vertices.size() / 3, + &this->vertices[0], + 3 * sizeof(btScalar) + ); + + this->shape = new btBvhTriangleMeshShape(this->triangleIndexVertexArray, true); + } + } + else if (geometry->isOfType(SoVRMLSphere::getClassTypeId())) + { + SoVRMLSphere* sphere = static_cast< SoVRMLSphere* >(geometry); + this->shape = new btSphereShape(sphere->radius.getValue()); + } + + this->getBody()->add(this); + + if (NULL != this->shape) + { + this->transform.setIdentity(); + dynamic_cast< Body* >(this->getBody())->shape.addChildShape(this->transform, this->shape); + this->shape->setMargin(0); + this->shape->setUserPointer(this); + } + } + + Shape::~Shape() + { + if (NULL != this->shape) + { + dynamic_cast< Body* >(this->getBody())->shape.removeChildShape(this->shape); + } + + this->getBody()->remove(this); + + delete this->triangleIndexVertexArray; + delete this->shape; + } + + void + Shape::getTransform(::rl::math::Transform& transform) + { + Body* body = static_cast< Body* >(this->getBody()); + + for (int i = 0; i < body->shape.getNumChildShapes(); ++i) + { + if (this->shape == body->shape.getChildList()[i].m_childShape) + { + for (int j = 0; j < 3; ++j) + { + transform(0, j) = body->shape.getChildTransform(i).getBasis().getRow(j).getX(); + transform(1, j) = body->shape.getChildTransform(i).getBasis().getRow(j).getY(); + transform(2, j) = body->shape.getChildTransform(i).getBasis().getRow(j).getZ(); + } + + transform(0, 3) = body->shape.getChildTransform(i).getOrigin().getX(); + transform(1, 3) = body->shape.getChildTransform(i).getOrigin().getY(); + transform(2, 3) = body->shape.getChildTransform(i).getOrigin().getZ(); + + transform(3, 0) = 0; + transform(3, 1) = 0; + transform(3, 2) = 0; + transform(3, 3) = 1; + + break; + } + } + } + + void + Shape::setTransform(const ::rl::math::Transform& transform) + { + Body* body = static_cast< Body* >(this->getBody()); + + for (int i = 0; i < body->shape.getNumChildShapes(); ++i) + { + if (this->shape == body->shape.getChildList()[i].m_childShape) + { + this->transform.getOrigin().setValue( + static_cast< btScalar >(transform(0, 3)), + static_cast< btScalar >(transform(1, 3)), + static_cast< btScalar >(transform(2, 3)) + ); + + this->transform.getBasis().setValue( + static_cast< btScalar >(transform(0, 0)), static_cast< btScalar >(transform(0, 1)), static_cast< btScalar >(transform(0, 2)), + static_cast< btScalar >(transform(1, 0)), static_cast< btScalar >(transform(1, 1)), static_cast< btScalar >(transform(1, 2)), + static_cast< btScalar >(transform(2, 0)), static_cast< btScalar >(transform(2, 1)), static_cast< btScalar >(transform(2, 2)) + ); + + body->shape.updateChildTransform(i, this->transform); + + break; + } + } + } + + void + Shape::triangleCallback(void* userData, SoCallbackAction* action, const SoPrimitiveVertex* v1, const SoPrimitiveVertex* v2, const SoPrimitiveVertex* v3) + { + Shape* shape = static_cast< Shape* >(userData); + + shape->indices.push_back(shape->vertices.size()); + + shape->vertices.push_back(v1->getPoint()[0]); + shape->vertices.push_back(v1->getPoint()[1]); + shape->vertices.push_back(v1->getPoint()[2]); + + shape->indices.push_back(shape->vertices.size()); + + shape->vertices.push_back(v2->getPoint()[0]); + shape->vertices.push_back(v2->getPoint()[1]); + shape->vertices.push_back(v2->getPoint()[2]); + + shape->indices.push_back(shape->vertices.size()); + + shape->vertices.push_back(v3->getPoint()[0]); + shape->vertices.push_back(v3->getPoint()[1]); + shape->vertices.push_back(v3->getPoint()[2]); + } + } + } +} diff --git a/src/rl/sg/bullet/Shape.h b/src/rl/sg/bullet/Shape.h new file mode 100644 index 00000000..c8ed5f32 --- /dev/null +++ b/src/rl/sg/bullet/Shape.h @@ -0,0 +1,71 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_BULLET_SHAPE_H_ +#define _RL_SG_BULLET_SHAPE_H_ + +#include +#include + +#include "../Shape.h" + +namespace rl +{ + namespace sg + { + namespace bullet + { + class Shape : public ::rl::sg::Shape + { + public: + Shape(SoVRMLShape* shape, Body* body); + + virtual ~Shape(); + + void getTransform(::rl::math::Transform& transform); + + void setTransform(const ::rl::math::Transform& transform); + + btCollisionShape* shape; + + btTransform transform; + + protected: + + private: + static void triangleCallback(void* userData, SoCallbackAction* action, const SoPrimitiveVertex* v1, const SoPrimitiveVertex* v2, const SoPrimitiveVertex* v3); + + ::std::vector< int > indices; + + btTriangleIndexVertexArray* triangleIndexVertexArray; + + ::std::vector< btScalar > vertices; + }; + } + } +} + +#endif // _RL_SG_BULLET_SHAPE_H_ diff --git a/src/rl/sg/ode/Body.cpp b/src/rl/sg/ode/Body.cpp new file mode 100644 index 00000000..e221fac6 --- /dev/null +++ b/src/rl/sg/ode/Body.cpp @@ -0,0 +1,113 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + Body::Body(Model* model) : + ::rl::sg::Body(model), + body(dBodyCreate(dynamic_cast< Scene* >(getModel()->getScene())->world)), + space(dSimpleSpaceCreate(static_cast< Model* >(getModel())->space)) + { + this->getModel()->add(this); + } + + Body::~Body() + { + while (this->shapes.size() > 0) + { + delete this->shapes[0]; + } + + this->getModel()->remove(this); + + dBodyDestroy(this->body); + dSpaceDestroy(this->space); + } + + ::rl::sg::Shape* + Body::create(SoVRMLShape* shape) + { + return new Shape(shape, this); + } + + void + Body::getFrame(::rl::math::Transform& frame) + { + const dReal* position = dBodyGetPosition(this->body); + + frame(0, 3) = position[0]; + frame(1, 3) = position[1]; + frame(2, 3) = position[2]; + + const dReal* rotation = dBodyGetRotation(this->body); + + for (::std::size_t i = 0; i < 3; ++i) + { + for (::std::size_t j = 0; j < 3; ++j) + { + frame(i, j) = rotation[i * 4 + j]; + } + } + } + + void + Body::setFrame(const ::rl::math::Transform& frame) + { + dBodySetPosition( + this->body, + static_cast< dReal >(frame(0, 3)), + static_cast< dReal >(frame(1, 3)), + static_cast< dReal >(frame(2, 3)) + ); + + dMatrix3 rotation; + + for (::std::size_t i = 0; i < 3; ++i) + { + for (::std::size_t j = 0; j < 3; ++j) + { + rotation[i * 4 + j] = static_cast< dReal >(frame(i, j)); + } + } + + rotation[3] = 0.0f; + rotation[7] = 0.0f; + rotation[11] = 0.0f; + + dBodySetRotation(this->body, rotation); + } + } + } +} diff --git a/src/rl/sg/ode/Body.h b/src/rl/sg/ode/Body.h new file mode 100644 index 00000000..2a5e19ae --- /dev/null +++ b/src/rl/sg/ode/Body.h @@ -0,0 +1,68 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_ODE_BODY_H_ +#define _RL_SG_ODE_BODY_H_ + +#include + +#include "../Body.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + class Model; + + class Body : public ::rl::sg::Body + { + public: + Body(Model* model); + + virtual ~Body(); + + ::rl::sg::Shape* create(SoVRMLShape* shape); + + void getFrame(::rl::math::Transform& frame); + + void setFrame(const ::rl::math::Transform& frame); + + dBodyID body; + + dSpaceID space; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_ODE_BODY_H_ diff --git a/src/rl/sg/ode/Model.cpp b/src/rl/sg/ode/Model.cpp new file mode 100644 index 00000000..b6d29bc0 --- /dev/null +++ b/src/rl/sg/ode/Model.cpp @@ -0,0 +1,63 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + Model::Model(Scene* scene) : + ::rl::sg::Model(scene), + space(dHashSpaceCreate(dynamic_cast< Scene* >(getScene())->space)) + { + this->getScene()->add(this); + } + + Model::~Model() + { + while (this->bodies.size() > 0) + { + delete this->bodies[0]; + } + + this->getScene()->remove(this); + + dSpaceDestroy(this->space); + } + + ::rl::sg::Body* + Model::create() + { + return new Body(this); + } + } + } +} diff --git a/src/rl/sg/ode/Model.h b/src/rl/sg/ode/Model.h new file mode 100644 index 00000000..ee91a61c --- /dev/null +++ b/src/rl/sg/ode/Model.h @@ -0,0 +1,62 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_ODE_MODEL_H_ +#define _RL_SG_ODE_MODEL_H_ + +#include + +#include "../Model.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + class Scene; + + class Model : public ::rl::sg::Model + { + public: + Model(Scene* scene); + + virtual ~Model(); + + ::rl::sg::Body* create(); + + dSpaceID space; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_ODE_MODEL_H_ diff --git a/src/rl/sg/ode/Scene.cpp b/src/rl/sg/ode/Scene.cpp new file mode 100644 index 00000000..141ccd35 --- /dev/null +++ b/src/rl/sg/ode/Scene.cpp @@ -0,0 +1,276 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + Scene::Scene() : + ::rl::sg::Scene(), + ::rl::sg::RaycastScene(), + ::rl::sg::SimpleScene(), + space(dHashSpaceCreate(NULL)), + world(dWorldCreate()) + { + dInitODE(); + } + + Scene::~Scene() + { + while (this->models.size() > 0) + { + delete this->models[0]; + } + + dSpaceDestroy(this->space); + dWorldDestroy(this->world); + dCloseODE(); + } + + bool + Scene::areColliding(::rl::sg::Body* first, ::rl::sg::Body* second) + { + bool data = false; + + dSpaceCollide2( + reinterpret_cast< dGeomID >(static_cast< Body* >(first)->space), + reinterpret_cast< dGeomID >(static_cast< Body* >(second)->space), + &data, + &Scene::shapeNearCallback + ); + + return data; + } + + bool + Scene::areColliding(::rl::sg::Model* first, ::rl::sg::Model* second) + { + bool data = false; + + dSpaceCollide2( + reinterpret_cast< dGeomID >(static_cast< Model* >(first)->space), + reinterpret_cast< dGeomID >(static_cast< Model* >(second)->space), + &data, + &Scene::bodyNearCallback + ); + + return data; + } + + bool + Scene::areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second) + { + bool data = false; + + this->bodyNearCallback( + &data, + static_cast< Shape* >(first)->geom, + static_cast< Shape* >(second)->geom + ); + + return data; + } + + void + Scene::bodyNearCallback(void* data, dGeomID o1, dGeomID o2) + { + dSpaceCollide2( + o1, + o2, + data, + &Scene::shapeNearCallback + ); + } + + bool + Scene::isColliding() + { + bool data = false; + + dSpaceCollide(this->space, &data, &Scene::modelNearCallback); + + return data; + } + + ::rl::sg::Model* + Scene::create() + { + return new Model(this); + } + + void + Scene::modelNearCallback(void* data, dGeomID o1, dGeomID o2) + { + dSpaceCollide2( + o1, + o2, + data, + &Scene::bodyNearCallback + ); + + if (*static_cast< bool* >(data)) + { + return; + } + + dSpaceCollide( + reinterpret_cast< dSpaceID >(o1), + data, + &Scene::bodyNearCallback + ); + + if (*static_cast< bool* >(data)) + { + return; + } + + dSpaceCollide( + reinterpret_cast< dSpaceID >(o2), + data, + &Scene::bodyNearCallback + ); + } + + ::rl::sg::Shape* + Scene::raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) + { + dGeomID ray = dCreateRay(NULL, std::numeric_limits< dReal >::max()); + + dGeomRaySet( + ray, + static_cast< dReal >(source.x()), + static_cast< dReal >(source.y()), + static_cast< dReal >(source.z()), + static_cast< dReal >(target.x() - source.x()), + static_cast< dReal >(target.y() - source.y()), + static_cast< dReal >(target.z() - source.z()) + ); + + dContactGeom contact; + contact.depth = std::numeric_limits< dReal >::max(); + contact.g1 = NULL; + contact.g2 = NULL; + + dSpaceCollide2(ray, reinterpret_cast< dGeomID >(this->space), &contact, &Scene::rayNearCallback); + + distance = contact.depth; + + if (NULL != contact.g1 && ray != contact.g1) + { + return static_cast< ::rl::sg::Shape* >(dGeomGetData(contact.g1)); + } + else if (NULL != contact.g2 && ray != contact.g2) + { + return static_cast< ::rl::sg::Shape* >(dGeomGetData(contact.g2)); + } + else + { + return NULL; + } + } + + bool + Scene::raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) + { + dGeomID ray = dCreateRay(NULL, std::numeric_limits< dReal >::max()); + + dGeomRaySet( + ray, + static_cast< dReal >(source.x()), + static_cast< dReal >(source.y()), + static_cast< dReal >(source.z()), + static_cast< dReal >(target.x() - source.x()), + static_cast< dReal >(target.y() - source.y()), + static_cast< dReal >(target.z() - source.z()) + ); + + dContactGeom contacts[1]; + + if (dCollide(ray, static_cast< Shape* >(shape)->geom, 1, contacts, sizeof(dContactGeom)) > 0) + { + distance = contacts[0].depth; + return true; + } + else + { + distance = std::numeric_limits< dReal >::quiet_NaN(); + return false; + } + } + + void + Scene::rayNearCallback(void* data, dGeomID o1, dGeomID o2) + { + if (dGeomIsSpace(o1) || dGeomIsSpace(o2)) + { + dSpaceCollide2(o1, o2, data, &Scene::rayNearCallback); + + if (dGeomIsSpace(o1)) + { + dSpaceCollide(reinterpret_cast< dSpaceID >(o1), data, &Scene::rayNearCallback); + } + + if (dGeomIsSpace(o2)) + { + dSpaceCollide(reinterpret_cast< dSpaceID >(o2), data, &Scene::rayNearCallback); + } + } + else + { + dContactGeom contacts[1]; + + if (dCollide(o1, o2, 1, contacts, sizeof(dContactGeom)) > 0) + { + if (contacts[0].depth < static_cast< dContactGeom* >(data)->depth) + { + static_cast< dContactGeom* >(data)->depth = contacts[0].depth; + static_cast< dContactGeom* >(data)->g1 = o1; + static_cast< dContactGeom* >(data)->g2 = o2; + } + } + } + } + + void + Scene::shapeNearCallback(void* data, dGeomID o1, dGeomID o2) + { + dContactGeom contacts[1]; + + if (dCollide(o1, o2, 1, contacts, sizeof(dContactGeom)) > 0) + { + *static_cast< bool* >(data) = true; + } + } + } + } +} diff --git a/src/rl/sg/ode/Scene.h b/src/rl/sg/ode/Scene.h new file mode 100644 index 00000000..8a767988 --- /dev/null +++ b/src/rl/sg/ode/Scene.h @@ -0,0 +1,81 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_ODE_SCENE_H_ +#define _RL_SG_ODE_SCENE_H_ + +#include + +#include "../RaycastScene.h" +#include "../SimpleScene.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + class Scene : public ::rl::sg::RaycastScene, public ::rl::sg::SimpleScene + { + public: + Scene(); + + virtual ~Scene(); + + bool areColliding(::rl::sg::Body* first, ::rl::sg::Body* second); + + bool areColliding(::rl::sg::Model* first, ::rl::sg::Model* second); + + bool areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second); + + ::rl::sg::Model* create(); + + bool isColliding(); + + ::rl::sg::Shape* raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance); + + bool raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance); + + dSpaceID space; + + dWorldID world; + + protected: + + private: + static void bodyNearCallback(void* data, dGeomID o1, dGeomID o2); + + static void modelNearCallback(void* data, dGeomID o1, dGeomID o2); + + static void rayNearCallback(void* data, dGeomID o1, dGeomID o2); + + static void shapeNearCallback(void* data, dGeomID o1, dGeomID o2); + }; + } + } +} + +#endif // _RL_SG_ODE_SCENE_H_ diff --git a/src/rl/sg/ode/Shape.cpp b/src/rl/sg/ode/Shape.cpp new file mode 100644 index 00000000..b6491690 --- /dev/null +++ b/src/rl/sg/ode/Shape.cpp @@ -0,0 +1,186 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../Exception.h" +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + Shape::Shape(SoVRMLShape* shape, Body* body) : + ::rl::sg::Shape(shape, body), + geom(NULL), + indices(NULL), + vertices(NULL) + { + SoVRMLGeometry* geometry = static_cast< SoVRMLGeometry* >(shape->geometry.getValue()); + + SoGetPrimitiveCountAction* primitiveCountAction = new SoGetPrimitiveCountAction(); + primitiveCountAction->apply(geometry); + + if (geometry->isOfType(SoVRMLBox::getClassTypeId())) + { + SoVRMLBox* box = static_cast< SoVRMLBox* >(geometry); + this->geom = dCreateBox(static_cast< Body* >(this->getBody())->space, box->size.getValue()[0], box->size.getValue()[1], box->size.getValue()[2]); + } + else if (geometry->isOfType(SoVRMLCone::getClassTypeId())) + { + throw Exception("::rl::sg::ode::Shape - SoVRMLCone not supported"); + } + else if (geometry->isOfType(SoVRMLCylinder::getClassTypeId())) + { + SoVRMLCylinder* cylinder = static_cast< SoVRMLCylinder* >(geometry); + this->geom = dCreateCylinder(static_cast< Body* >(this->getBody())->space, cylinder->radius.getValue(), cylinder->height.getValue()); + } + else if (geometry->isOfType(SoVRMLIndexedFaceSet::getClassTypeId())) + { + SoVRMLIndexedFaceSet* indexedFaceSet = static_cast< SoVRMLIndexedFaceSet* >(geometry); + + SoVRMLCoordinate* coord = static_cast< SoVRMLCoordinate* >(indexedFaceSet->coord.getValue()); + + int vertexCount = coord->point.getNum(); + this->vertices = new dReal[vertexCount * 4]; + + int indexCount = primitiveCountAction->getTriangleCount() * 3; + this->indices = new dTriIndex[indexCount]; + + this->create(coord->point, indexedFaceSet->coordIndex, this->vertices, this->indices); + + dTriMeshDataID data = dGeomTriMeshDataCreate(); + dGeomTriMeshDataBuildSimple(data, this->vertices, vertexCount, this->indices, indexCount); + this->geom = dCreateTriMesh(static_cast< Body* >(this->getBody())->space, data, NULL, NULL, NULL); + } + else if (geometry->isOfType(SoVRMLSphere::getClassTypeId())) + { + SoVRMLSphere* sphere = static_cast< SoVRMLSphere* >(geometry); + this->geom = dCreateSphere(static_cast< Body* >(this->getBody())->space, sphere->radius.getValue()); + } + + if (NULL != this->geom) + { + dGeomSetBody(this->geom, static_cast< Body* >(this->getBody())->body); + dGeomSetData(this->geom, this); + } + + this->getBody()->add(this); + } + + Shape::~Shape() + { + this->getBody()->remove(this); + + dGeomDestroy(this->geom); + + delete[] this->indices; + delete[] this->vertices; + } + + void + Shape::create(const SoMFVec3f& point, const SoMFInt32& coordIndex, dReal* vertices, dTriIndex* indices) const + { + ::std::size_t index = 0; + + for (int i = 0; i < coordIndex.getNum(); ++i) + { + if (SO_END_FACE_INDEX != coordIndex[i]) + { + indices[index] = coordIndex[i]; + ++index; + } + } + + for (int i = 0; i < point.getNum(); ++i) + { + vertices[i * 4] = point[i][0]; + vertices[i * 4 + 1] = point[i][1]; + vertices[i * 4 + 2] = point[i][2]; + } + } + + void + Shape::getTransform(::rl::math::Transform& transform) + { + const dReal* position = dGeomGetOffsetPosition(this->geom); + + transform(0, 3) = position[0]; + transform(1, 3) = position[1]; + transform(2, 3) = position[2]; + + const dReal* rotation = dGeomGetOffsetRotation(this->geom); + + for (::std::size_t i = 0; i < 3; ++i) + { + for (::std::size_t j = 0; j < 3; ++j) + { + transform(i, j) = rotation[i * 4 + j]; + } + } + } + + void + Shape::setTransform(const ::rl::math::Transform& transform) + { + dGeomSetOffsetPosition( + this->geom, + static_cast< dReal >(transform(0, 3)), + static_cast< dReal >(transform(1, 3)), + static_cast< dReal >(transform(2, 3)) + ); + + dMatrix3 rotation; + + for (::std::size_t i = 0; i < 3; ++i) + { + for (::std::size_t j = 0; j < 3; ++j) + { + rotation[i * 4 + j] = static_cast< dReal >(transform(i, j)); + } + } + + rotation[3] = 0.0f; + rotation[7] = 0.0f; + rotation[11] = 0.0f; + + dGeomSetOffsetRotation(this->geom, rotation); + } + } + } +} diff --git a/src/rl/sg/ode/Shape.h b/src/rl/sg/ode/Shape.h new file mode 100644 index 00000000..07e42ae1 --- /dev/null +++ b/src/rl/sg/ode/Shape.h @@ -0,0 +1,68 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_ODE_SHAPE_H_ +#define _RL_SG_ODE_SHAPE_H_ + +#include +#include +#include + +#include "../Shape.h" + +namespace rl +{ + namespace sg + { + namespace ode + { + class Shape : public ::rl::sg::Shape + { + public: + Shape(SoVRMLShape* shape, Body* body); + + virtual ~Shape(); + + void getTransform(::rl::math::Transform& transform); + + void setTransform(const ::rl::math::Transform& transform); + + dGeomID geom; + + protected: + + private: + void create(const SoMFVec3f& point, const SoMFInt32& coordIndex, dReal* vertices, dTriIndex* indices) const; + + dTriIndex* indices; + + dReal* vertices; + }; + } + } +} + +#endif // _RL_SG_ODE_SHAPE_H_ diff --git a/src/rl/sg/pqp/Body.cpp b/src/rl/sg/pqp/Body.cpp new file mode 100644 index 00000000..6e5b302e --- /dev/null +++ b/src/rl/sg/pqp/Body.cpp @@ -0,0 +1,78 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + Body::Body(Model* model) : + ::rl::sg::Body(model), + frame(::rl::math::Transform::Identity()) + { + this->getModel()->add(this); + } + + Body::~Body() + { + while (this->shapes.size() > 0) + { + delete this->shapes[0]; + } + + this->getModel()->remove(this); + } + + ::rl::sg::Shape* + Body::create(SoVRMLShape* shape) + { + return new Shape(shape, this); + } + + void + Body::getFrame(::rl::math::Transform& frame) + { + frame = this->frame; + } + + void + Body::setFrame(const ::rl::math::Transform& frame) + { + this->frame = frame; + + for (Iterator i = this->begin(); i != this->end(); ++i) + { + static_cast< Shape* >(*i)->update(); + } + } + } + } +} diff --git a/src/rl/sg/pqp/Body.h b/src/rl/sg/pqp/Body.h new file mode 100644 index 00000000..2ede360e --- /dev/null +++ b/src/rl/sg/pqp/Body.h @@ -0,0 +1,66 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_PQP_BODY_H_ +#define _RL_SG_PQP_BODY_H_ + +#include "../Body.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + class Model; + + class Body : public ::rl::sg::Body + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Body(Model* model); + + virtual ~Body(); + + ::rl::sg::Shape* create(SoVRMLShape* shape); + + void getFrame(::rl::math::Transform& frame); + + void setFrame(const ::rl::math::Transform& frame); + + ::rl::math::Transform frame; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_PQP_BODY_H_ diff --git a/src/rl/sg/pqp/Model.cpp b/src/rl/sg/pqp/Model.cpp new file mode 100644 index 00000000..f4c8dc01 --- /dev/null +++ b/src/rl/sg/pqp/Model.cpp @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + Model::Model(Scene* scene) : + ::rl::sg::Model(scene) + { + this->getScene()->add(this); + } + + Model::~Model() + { + while (this->bodies.size() > 0) + { + delete this->bodies[0]; + } + + this->getScene()->remove(this); + } + + ::rl::sg::Body* + Model::create() + { + return new Body(this); + } + } + } +} diff --git a/src/rl/sg/pqp/Model.h b/src/rl/sg/pqp/Model.h new file mode 100644 index 00000000..e56c28ec --- /dev/null +++ b/src/rl/sg/pqp/Model.h @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_PQP_MODEL_H_ +#define _RL_SG_PQP_MODEL_H_ + +#include "../Model.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + class Scene; + + class Model : public ::rl::sg::Model + { + public: + Model(Scene* scene); + + virtual ~Model(); + + ::rl::sg::Body* create(); + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_PQP_MODEL_H_ diff --git a/src/rl/sg/pqp/Scene.cpp b/src/rl/sg/pqp/Scene.cpp new file mode 100644 index 00000000..2daaab29 --- /dev/null +++ b/src/rl/sg/pqp/Scene.cpp @@ -0,0 +1,164 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + Scene::Scene() : + ::rl::sg::Scene(), + ::rl::sg::DistanceScene(), + ::rl::sg::SimpleScene() + { + this->isScalingSupported = false; + } + + Scene::~Scene() + { + while (this->models.size() > 0) + { + delete this->models[0]; + } + } + + bool + Scene::areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second) + { + Shape* shape1 = static_cast< Shape* >(first); + Shape* shape2 = static_cast< Shape* >(second); + + PQP_CollideResult result; + + PQP_Collide( + &result, + shape1->rotation, + shape1->translation, + &shape1->model, + shape2->rotation, + shape2->translation, + &shape2->model, + PQP_FIRST_CONTACT + ); + + return (result.Colliding() == 1 ? true : false); + } + + ::rl::sg::Model* + Scene::create() + { + return new Model(this); + } + + ::rl::math::Real + Scene::distance(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + Shape* shape1 = static_cast< Shape* >(first); + Shape* shape2 = static_cast< Shape* >(second); + + PQP_DistanceResult result; + + PQP_Distance( + &result, + shape1->rotation, + shape1->translation, + &shape1->model, + shape2->rotation, + shape2->translation, + &shape2->model, + ::std::numeric_limits< ::rl::math::Real >::epsilon(), + ::std::numeric_limits< ::rl::math::Real >::epsilon() + ); + + point1(0) = result.P1()[0]; + point1(1) = result.P1()[1]; + point1(2) = result.P1()[2]; + + shape1->transformToWorld(point1, point1); + + point2(0) = result.P2()[0]; + point2(1) = result.P2()[1]; + point2(2) = result.P2()[2]; + + shape2->transformToWorld(point2, point2); + + return result.Distance(); + } + + ::rl::math::Real + Scene::distance(::rl::sg::Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + Shape* shape1 = static_cast< Shape* >(shape); + + ::rl::math::Real p[3] = {0.0f, 0.0f, 0.0f}; + + PQP_Model model; + model.BeginModel(1); + model.AddTri(&p[0], &p[0], &p[0], 0); + model.EndModel(); + + PQP_REAL rotation[3][3] = { + {1.0f, 0.0f, 0.0f}, + {0.0f, 1.0f, 0.0f}, + {0.0f, 0.0f, 1.0f} + }; + + PQP_REAL translation[3] = {point(0), point(1), point(2)}; + + PQP_DistanceResult result; + + PQP_Distance( + &result, + shape1->rotation, + shape1->translation, + &shape1->model, + rotation, + translation, + &model, + ::std::numeric_limits< ::rl::math::Real >::epsilon(), + ::std::numeric_limits< ::rl::math::Real >::epsilon() + ); + + point1(0) = result.P1()[0]; + point1(1) = result.P1()[1]; + point1(2) = result.P1()[2]; + + shape1->transformToWorld(point1, point1); + + point2(0) = result.P2()[0] + translation[0]; + point2(1) = result.P2()[1] + translation[1]; + point2(2) = result.P2()[2] + translation[2]; + + return result.Distance(); + } + } + } +} diff --git a/src/rl/sg/pqp/Scene.h b/src/rl/sg/pqp/Scene.h new file mode 100644 index 00000000..630c6ee8 --- /dev/null +++ b/src/rl/sg/pqp/Scene.h @@ -0,0 +1,68 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_PQP_SCENE_H_ +#define _RL_SG_PQP_SCENE_H_ + +#include +#include + +#include "../DistanceScene.h" +#include "../SimpleScene.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + class Scene : public ::rl::sg::DistanceScene, public ::rl::sg::SimpleScene + { + public: + Scene(); + + virtual ~Scene(); + + bool areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second); + + ::rl::sg::Model* create(); + + using ::rl::sg::DistanceScene::distance; + + ::rl::math::Real distance(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + ::rl::math::Real distance(::rl::sg::Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_PQP_SCENE_H_ diff --git a/src/rl/sg/pqp/Shape.cpp b/src/rl/sg/pqp/Shape.cpp new file mode 100644 index 00000000..026d63da --- /dev/null +++ b/src/rl/sg/pqp/Shape.cpp @@ -0,0 +1,144 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Body.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + Shape::Shape(SoVRMLShape* shape, Body* body) : + ::rl::sg::Shape(shape, body), + model(), + frame(::rl::math::Transform::Identity()), + transform(::rl::math::Transform::Identity()) + { + for (::std::size_t i = 0; i < 3; ++i) + { + for (::std::size_t j = 0; j < 3; ++j) + { + this->rotation[i][j] = static_cast< PQP_REAL >(this->frame(i, j)); + } + } + + for (::std::size_t i = 0; i < 3; ++i) + { + this->translation[i] = static_cast< PQP_REAL >(this->frame(i, 3)); + } + + SoVRMLGeometry* geometry = static_cast< SoVRMLGeometry* >(shape->geometry.getValue()); + + SoGetPrimitiveCountAction* primitiveCountAction = new SoGetPrimitiveCountAction(); + primitiveCountAction->apply(geometry); + + this->model.BeginModel(primitiveCountAction->getTriangleCount()); + + Model model(&this->model, 0); + + SoCallbackAction callbackAction; + callbackAction.addTriangleCallback(geometry->getTypeId(), Shape::triangleCallback, &model); + callbackAction.apply(geometry); + + this->model.EndModel(); + + this->getBody()->add(this); + } + + Shape::~Shape() + { + this->getBody()->remove(this); + } + + void + Shape::getTransform(::rl::math::Transform& transform) + { + transform = this->transform; + } + + void + Shape::setTransform(const ::rl::math::Transform& transform) + { + this->transform = transform; + + this->update(); + } + + void + Shape::transformToWorld(const ::rl::math::Vector3& local, ::rl::math::Vector3& world) const + { + world = this->frame * local; + } + + void + Shape::triangleCallback(void* userData, SoCallbackAction* action, const SoPrimitiveVertex* v1, const SoPrimitiveVertex* v2, const SoPrimitiveVertex* v3) + { + PQP_REAL p[3][3] = { + {v1->getPoint()[0], v1->getPoint()[1], v1->getPoint()[2]}, + {v2->getPoint()[0], v2->getPoint()[1], v2->getPoint()[2]}, + {v3->getPoint()[0], v3->getPoint()[1], v3->getPoint()[2]} + }; + + Model* model = static_cast< Model* >(userData); + + model->first->AddTri(p[0], p[1], p[2], model->second); + + ++model->second; + } + + void + Shape::update() + { + this->frame = static_cast< Body* >(this->getBody())->frame * this->transform; + + for (::std::size_t i = 0; i < 3; ++i) + { + for (::std::size_t j = 0; j < 3; ++j) + { + this->rotation[i][j] = static_cast< PQP_REAL >(this->frame(i, j)); + } + } + + for (::std::size_t i = 0; i < 3; ++i) + { + this->translation[i] = static_cast< PQP_REAL >(this->frame(i, 3)); + } + } + } + } +} diff --git a/src/rl/sg/pqp/Shape.h b/src/rl/sg/pqp/Shape.h new file mode 100644 index 00000000..f9d4a4d8 --- /dev/null +++ b/src/rl/sg/pqp/Shape.h @@ -0,0 +1,82 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_PQP_SHAPE_H_ +#define _RL_SG_PQP_SHAPE_H_ + +#include +#include +#include +#include +#include + +#include "../Shape.h" + +namespace rl +{ + namespace sg + { + namespace pqp + { + class Shape : public ::rl::sg::Shape + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Shape(SoVRMLShape* shape, Body* body); + + virtual ~Shape(); + + void getTransform(::rl::math::Transform& transform); + + void setTransform(const ::rl::math::Transform& transform); + + void transformToWorld(const ::rl::math::Vector3& local, ::rl::math::Vector3& world) const; + + void update(); + + PQP_Model model; + + PQP_REAL rotation[3][3]; + + PQP_REAL translation[3]; + + protected: + + private: + typedef ::std::pair< PQP_Model*, ::std::size_t > Model; + + static void triangleCallback(void* userData, SoCallbackAction* action, const SoPrimitiveVertex* v1, const SoPrimitiveVertex* v2, const SoPrimitiveVertex* v3); + + ::rl::math::Transform frame; + + ::rl::math::Transform transform; + }; + } + } +} + +#endif // _RL_SG_PQP_SHAPE_H_ diff --git a/src/rl/sg/so/Body.cpp b/src/rl/sg/so/Body.cpp new file mode 100644 index 00000000..4ca2e5ea --- /dev/null +++ b/src/rl/sg/so/Body.cpp @@ -0,0 +1,136 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace so + { + Body::Body(Model* model) : + ::rl::sg::Body(model), + root(new SoVRMLTransform()) + { + this->root->ref(); + this->root->setUserData(this); + + this->getModel()->add(this); + } + + Body::~Body() + { + while (this->shapes.size() > 0) + { + delete this->shapes[0]; + } + + this->getModel()->remove(this); + + this->root->unref(); + } + + void + Body::add(::rl::sg::Shape* shape) + { + ::rl::sg::Body::add(shape); + + this->root->addChild(static_cast< Shape* >(shape)->root); + } + + ::rl::sg::Shape* + Body::create(SoVRMLShape* shape) + { + return new Shape(shape, this); + } + + void + Body::getFrame(::rl::math::Transform& frame) + { + SoSearchAction searchAction; + searchAction.setNode(this->root); + searchAction.apply(static_cast< Scene* >(this->getModel()->getScene())->root); + + SbViewportRegion viewportRegion; + SoGetMatrixAction getMatrixAction(viewportRegion); + getMatrixAction.apply(searchAction.getPath()); + SbMatrix matrix = getMatrixAction.getMatrix(); + + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 4; ++j) + { + frame(i, j) = matrix[j][i]; + } + } + } + + ::std::string + Body::getName() const + { + return this->root->getName().getString(); + } + + void + Body::remove(::rl::sg::Shape* shape) + { + this->root->removeChild(static_cast< Shape* >(shape)->root); + + ::rl::sg::Body::remove(shape); + } + + void + Body::setFrame(const ::rl::math::Transform& frame) + { + SbMatrix matrix; + + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 4; ++j) + { + matrix[i][j] = static_cast< float >(frame(j, i)); + } + } + + this->root->setMatrix(matrix); + } + + void + Body::setName(const ::std::string& name) + { + this->root->setName(name.c_str()); + } + } + } +} diff --git a/src/rl/sg/so/Body.h b/src/rl/sg/so/Body.h new file mode 100644 index 00000000..9f55af94 --- /dev/null +++ b/src/rl/sg/so/Body.h @@ -0,0 +1,74 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SO_BODY_H_ +#define _RL_SG_SO_BODY_H_ + +#include + +#include "../Body.h" + +namespace rl +{ + namespace sg + { + namespace so + { + class Model; + + class Body : public ::rl::sg::Body + { + public: + Body(Model* model); + + virtual ~Body(); + + void add(::rl::sg::Shape* shape); + + ::rl::sg::Shape* create(SoVRMLShape* shape); + + void getFrame(::rl::math::Transform& frame); + + ::std::string getName() const; + + void remove(::rl::sg::Shape* shape); + + void setFrame(const ::rl::math::Transform& frame); + + void setName(const ::std::string& name); + + SoVRMLTransform* root; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_SO_BODY_H_ diff --git a/src/rl/sg/so/Model.cpp b/src/rl/sg/so/Model.cpp new file mode 100644 index 00000000..17728f11 --- /dev/null +++ b/src/rl/sg/so/Model.cpp @@ -0,0 +1,94 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + namespace so + { + Model::Model(Scene* scene) : + ::rl::sg::Model(scene), + root(new SoVRMLGroup()) + { + this->root->ref(); + this->root->setUserData(this); + + this->getScene()->add(this); + } + + Model::~Model() + { + while (this->bodies.size() > 0) + { + delete this->bodies[0]; + } + + this->getScene()->remove(this); + + this->root->unref(); + } + + void + Model::add(::rl::sg::Body* body) + { + ::rl::sg::Model::add(body); + + this->root->addChild(static_cast< Body* >(body)->root); + } + + ::rl::sg::Body* + Model::create() + { + return new Body(this); + } + + ::std::string + Model::getName() const + { + return this->root->getName().getString(); + } + + void + Model::remove(::rl::sg::Body* body) + { + this->root->removeChild(static_cast< Body* >(body)->root); + + ::rl::sg::Model::remove(body); + } + + void + Model::setName(const ::std::string& name) + { + this->root->setName(name.c_str()); + } + } + } +} diff --git a/src/rl/sg/so/Model.h b/src/rl/sg/so/Model.h new file mode 100644 index 00000000..ed95b9c8 --- /dev/null +++ b/src/rl/sg/so/Model.h @@ -0,0 +1,68 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SO_MODEL_H_ +#define _RL_SG_SO_MODEL_H_ + +#include "../Model.h" + +namespace rl +{ + namespace sg + { + namespace so + { + class Scene; + + class Model : public ::rl::sg::Model + { + public: + Model(Scene* scene); + + virtual ~Model(); + + void add(::rl::sg::Body* body); + + ::rl::sg::Body* create(); + + ::std::string getName() const; + + void remove(::rl::sg::Body* body); + + void setName(const ::std::string& name); + + SoVRMLGroup* root; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_SO_MODEL_H_ diff --git a/src/rl/sg/so/Scene.cpp b/src/rl/sg/so/Scene.cpp new file mode 100644 index 00000000..e70f82e3 --- /dev/null +++ b/src/rl/sg/so/Scene.cpp @@ -0,0 +1,77 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + namespace so + { + Scene::Scene() : + ::rl::sg::Scene(), + root(new SoVRMLGroup()) + { + this->root->ref(); + this->root->setUserData(this); + } + + Scene::~Scene() + { + while (this->models.size() > 0) + { + delete this->models[0]; + } + + this->root->unref(); + } + + void + Scene::add(::rl::sg::Model* model) + { + ::rl::sg::Scene::add(model); + + this->root->addChild(static_cast< Model* >(model)->root); + } + + ::rl::sg::Model* + Scene::create() + { + return new Model(this); + } + + void + Scene::remove(::rl::sg::Model* model) + { + this->root->removeChild(static_cast< Model* >(model)->root); + + ::rl::sg::Scene::remove(model); + } + } + } +} diff --git a/src/rl/sg/so/Scene.h b/src/rl/sg/so/Scene.h new file mode 100644 index 00000000..4c5805f8 --- /dev/null +++ b/src/rl/sg/so/Scene.h @@ -0,0 +1,62 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SO_SCENE_H_ +#define _RL_SG_SO_SCENE_H_ + +#include "../Scene.h" + +namespace rl +{ + namespace sg + { + namespace so + { + class Scene : public ::rl::sg::Scene + { + public: + Scene(); + + virtual ~Scene(); + + void add(::rl::sg::Model* model); + + ::rl::sg::Model* create(); + + void remove(::rl::sg::Model* model); + + SoVRMLGroup* root; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_SO_SCENE_H_ diff --git a/src/rl/sg/so/Shape.cpp b/src/rl/sg/so/Shape.cpp new file mode 100644 index 00000000..76ca31a0 --- /dev/null +++ b/src/rl/sg/so/Shape.cpp @@ -0,0 +1,112 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include + +#include "Body.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace so + { + Shape::Shape(SoVRMLShape* shape, Body* body) : + ::rl::sg::Shape(shape, body), + root(new SoVRMLTransform()), + shape(shape) + { + this->root->ref(); + this->root->setUserData(this); + this->shape->setUserData(this); + this->root->addChild(this->shape); + + this->getBody()->add(this); + } + + Shape::~Shape() + { + this->getBody()->remove(this); + + this->root->removeChild(this->shape); + this->root->unref(); + } + + ::std::string + Shape::getName() const + { + return this->root->getName().getString(); + } + + void + Shape::getTransform(::rl::math::Transform& transform) + { + SoSearchAction searchAction; + searchAction.setNode(this->shape); + searchAction.apply(this->root); + + SbViewportRegion viewportRegion; + SoGetMatrixAction getMatrixAction(viewportRegion); + getMatrixAction.apply(searchAction.getPath()); + SbMatrix matrix = getMatrixAction.getMatrix(); + + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 4; ++j) + { + transform(i, j) = matrix[j][i]; + } + } + } + + void + Shape::setName(const ::std::string& name) + { + this->root->setName(name.c_str()); + } + + void + Shape::setTransform(const ::rl::math::Transform& transform) + { + SbMatrix matrix; + + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 4; ++j) + { + matrix[i][j] = static_cast< float >(transform(j, i)); + } + } + + this->root->setMatrix(matrix); + } + } + } +} diff --git a/src/rl/sg/so/Shape.h b/src/rl/sg/so/Shape.h new file mode 100644 index 00000000..64de0f94 --- /dev/null +++ b/src/rl/sg/so/Shape.h @@ -0,0 +1,69 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SO_SHAPE_H_ +#define _RL_SG_SO_SHAPE_H_ + +#include + +#include "../Shape.h" + +namespace rl +{ + namespace sg + { + namespace so + { + class Body; + + class Shape : public ::rl::sg::Shape + { + public: + Shape(SoVRMLShape* shape, Body* body); + + virtual ~Shape(); + + ::std::string getName() const; + + void getTransform(::rl::math::Transform& transform); + + void setName(const ::std::string& name); + + void setTransform(const ::rl::math::Transform& transform); + + SoVRMLTransform* root; + + SoVRMLShape* shape; + + protected: + + private: + }; + } + } +} + +#endif // _RL_SG_SO_SHAPE_H_ diff --git a/src/rl/sg/solid/Body.cpp b/src/rl/sg/solid/Body.cpp new file mode 100644 index 00000000..0b1efa0d --- /dev/null +++ b/src/rl/sg/solid/Body.cpp @@ -0,0 +1,87 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + Body::Body(Model* model) : + ::rl::sg::Body(model), + frame(::rl::math::Transform::Identity()) + { + this->getModel()->add(this); + } + + Body::~Body() + { + while (this->shapes.size() > 0) + { + delete this->shapes[0]; + } + + this->getModel()->remove(this); + } + + ::rl::sg::Shape* + Body::create(SoVRMLShape* shape) + { + return new Shape(shape, this); + } + + void + Body::getFrame(::rl::math::Transform& frame) + { + frame = this->frame; + } + + void + Body::setFrame(const ::rl::math::Transform& frame) + { + this->frame = frame; + + for (Iterator i = this->begin(); i != this->end(); ++i) + { + static_cast< Shape* >(*i)->update(); + } + } + + void + Body::setMargin(const ::rl::math::Real& margin) + { + for (Iterator i = this->begin(); i != this->end(); ++i) + { + static_cast< Shape* >(*i)->setMargin(margin); + } + } + } + } +} diff --git a/src/rl/sg/solid/Body.h b/src/rl/sg/solid/Body.h new file mode 100644 index 00000000..1298728e --- /dev/null +++ b/src/rl/sg/solid/Body.h @@ -0,0 +1,42 @@ +#ifndef _RL_SG_SOLID_BODY_H_ +#define _RL_SG_SOLID_BODY_H_ + +#include "../Body.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + class Model; + + class Body : public ::rl::sg::Body + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Body(Model* model); + + virtual ~Body(); + + ::rl::sg::Shape* create(SoVRMLShape* shape); + + void getFrame(::rl::math::Transform& frame); + + void setFrame(const ::rl::math::Transform& frame); + + void setMargin(const ::rl::math::Real& margin); + + ::rl::math::Transform frame; + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_SOLID_BODY_H_ diff --git a/src/rl/sg/solid/Model.cpp b/src/rl/sg/solid/Model.cpp new file mode 100644 index 00000000..c2cda2ac --- /dev/null +++ b/src/rl/sg/solid/Model.cpp @@ -0,0 +1,69 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include "Body.h" +#include "Model.h" +#include "Scene.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + Model::Model(Scene* scene) : + ::rl::sg::Model(scene) + { + this->getScene()->add(this); + } + + Model::~Model() + { + while (this->bodies.size() > 0) + { + delete this->bodies[0]; + } + + this->getScene()->remove(this); + } + + ::rl::sg::Body* + Model::create() + { + return new Body(this); + } + + void + Model::setMargin(const ::rl::math::Real& margin) + { + for (Iterator i = this->begin(); i != this->end(); ++i) + { + static_cast< Body* >(*i)->setMargin(margin); + } + } + } + } +} diff --git a/src/rl/sg/solid/Model.h b/src/rl/sg/solid/Model.h new file mode 100644 index 00000000..cdbd4531 --- /dev/null +++ b/src/rl/sg/solid/Model.h @@ -0,0 +1,60 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SOLID_MODEL_H_ +#define _RL_SG_SOLID_MODEL_H_ + +#include "../Model.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + class Scene; + + class Model : public ::rl::sg::Model + { + public: + Model(Scene* scene); + + virtual ~Model(); + + ::rl::sg::Body* create(); + + void setMargin(const ::rl::math::Real& margin); + + protected: + + private: + + }; + } + } +} + +#endif // _RL_SG_SOLID_MODEL_H_ diff --git a/src/rl/sg/solid/Scene.cpp b/src/rl/sg/solid/Scene.cpp new file mode 100644 index 00000000..9ae595c8 --- /dev/null +++ b/src/rl/sg/solid/Scene.cpp @@ -0,0 +1,288 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + Scene::Scene() : + ::rl::sg::Scene(), + ::rl::sg::DepthScene(), + ::rl::sg::DistanceScene(), + ::rl::sg::RaycastScene(), + ::rl::sg::SimpleScene(), + scene(DT_CreateScene()) + { + this->broad = BP_CreateScene(this, Scene::beginOverlap, Scene::endOverlap); + } + + Scene::~Scene() + { + while (this->models.size() > 0) + { + delete this->models[0]; + } + + if (NULL != this->scene) + { + BP_DestroyScene(this->broad); + } + + if (NULL != this->scene) + { + DT_DestroyScene(this->scene); + } + } + + bool + Scene::areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second) + { + Shape* shape1 = static_cast< Shape* >(first); + Shape* shape2 = static_cast< Shape* >(second); + + if (shape1->encounters.count(shape2) > 0 || shape2->encounters.count(shape1) > 0) + { + DT_Vector3 point; + + return (DT_TRUE == DT_GetCommonPoint( + shape1->complex ? shape1->object : shape2->object, + shape1->complex ? shape2->object : shape1->object, + point + )) ? true : false; + } + else + { + return false; + } + } + + void + Scene::beginOverlap(void* clientData, void* object1, void* object2) + { + Shape* shape1 = static_cast< Shape* >(object1); + Shape* shape2 = static_cast< Shape* >(object2); + + shape1->encounters.insert(shape2); + shape2->encounters.insert(shape1); + } + + ::rl::sg::Model* + Scene::create() + { + return new Model(this); + } + + bool + Scene::depth(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + Shape* shape1 = static_cast< Shape* >(first); + Shape* shape2 = static_cast< Shape* >(second); + + DT_Vector3 vector1; + DT_Vector3 vector2; + + DT_Bool intersect = DT_GetPenDepth( + shape1->complex ? shape1->object : shape2->object, + shape1->complex ? shape2->object : shape1->object, + shape1->complex ? vector1 : vector2, + shape1->complex ? vector2 : vector1 + ); + + point1(0) = vector1[0]; + point1(1) = vector1[1]; + point1(2) = vector1[2]; + + point2(0) = vector2[0]; + point2(1) = vector2[1]; + point2(2) = vector2[2]; + + return (DT_TRUE == intersect) ? true : false; + } + + ::rl::math::Real + Scene::distance(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + Shape* shape1 = static_cast< Shape* >(first); + Shape* shape2 = static_cast< Shape* >(second); + + DT_Vector3 vector1; + DT_Vector3 vector2; + + DT_Scalar distance = DT_GetClosestPair( + shape1->complex ? shape1->object : shape2->object, + shape1->complex ? shape2->object : shape1->object, + shape1->complex ? vector1 : vector2, + shape1->complex ? vector2 : vector1 + ); + + point1(0) = vector1[0]; + point1(1) = vector1[1]; + point1(2) = vector1[2]; + + point2(0) = vector2[0]; + point2(1) = vector2[1]; + point2(2) = vector2[2]; + + return distance; + } + + ::rl::math::Real + Scene::distance(::rl::sg::Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2) + { + DT_Vector3 position = { + static_cast< DT_Scalar >(point(0)), + static_cast< DT_Scalar >(point(1)), + static_cast< DT_Scalar >(point(2)) + }; + + DT_ShapeHandle shapeHandle = DT_NewPoint(position); + DT_ObjectHandle objectHandle = DT_CreateObject(NULL, shapeHandle); + + DT_Vector3 vector1; + DT_Vector3 vector2; + + DT_Scalar distance = DT_GetClosestPair( + static_cast< Shape* >(shape)->object, + objectHandle, + vector1, + vector2 + ); + + point1(0) = vector1[0]; + point1(1) = vector1[1]; + point1(2) = vector1[2]; + + point2(0) = vector2[0]; + point2(1) = vector2[1]; + point2(2) = vector2[2]; + + DT_DestroyObject(objectHandle); + DT_DeleteShape(shapeHandle); + + return distance; + } + + void + Scene::endOverlap(void* clientData, void* object1, void* object2) + { + Shape* shape1 = static_cast< Shape* >(object1); + Shape* shape2 = static_cast< Shape* >(object2); + + shape1->encounters.erase(shape2); + shape2->encounters.erase(shape1); + } + + ::rl::sg::Shape* + Scene::raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) + { + DT_Vector3 vector1; + vector1[0] = static_cast< DT_Scalar >(source(0)); + vector1[1] = static_cast< DT_Scalar >(source(1)); + vector1[2] = static_cast< DT_Scalar >(source(2)); + + DT_Vector3 vector2; + vector2[0] = static_cast< DT_Scalar >(target(0)); + vector2[1] = static_cast< DT_Scalar >(target(1)); + vector2[2] = static_cast< DT_Scalar >(target(2)); + + DT_Scalar param; + DT_Vector3 normal; + + void* object = DT_RayCast( + this->scene, + NULL, + vector1, + vector2, + std::numeric_limits< DT_Scalar >::max(), + ¶m, + normal + ); + + DT_Vector3 hit; + hit[0] = vector1[0] + (vector2[0] - vector1[0]) * param; + hit[1] = vector1[1] + (vector2[1] - vector1[1]) * param; + hit[2] = vector1[2] + (vector2[2] - vector1[2]) * param; + + distance = std::sqrt(std::pow(hit[0] - source[0], 2) + std::pow(hit[1] - source[1], 2) + std::pow(hit[2] - source[2], 2));; + + return static_cast< ::rl::sg::Shape* >(object); + } + + bool + Scene::raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance) + { + DT_Vector3 vector1; + vector1[0] = static_cast< DT_Scalar >(source(0)); + vector1[1] = static_cast< DT_Scalar >(source(1)); + vector1[2] = static_cast< DT_Scalar >(source(2)); + + DT_Vector3 vector2; + vector2[0] = static_cast< DT_Scalar >(target(0)); + vector2[1] = static_cast< DT_Scalar >(target(1)); + vector2[2] = static_cast< DT_Scalar >(target(2)); + + DT_Scalar param; + DT_Vector3 normal; + + DT_Bool object = DT_ObjectRayCast( + static_cast< Shape* >(shape)->object, + vector1, + vector2, + std::numeric_limits< DT_Scalar >::max(), + ¶m, + normal + ); + + DT_Vector3 hit; + hit[0] = vector1[0] + (vector2[0] - vector1[0]) * param; + hit[1] = vector1[1] + (vector2[1] - vector1[1]) * param; + hit[2] = vector1[2] + (vector2[2] - vector1[2]) * param; + + distance = std::sqrt(std::pow(hit[0] - source[0], 2) + std::pow(hit[1] - source[1], 2) + std::pow(hit[2] - source[2], 2));; + + return (DT_TRUE == object) ? true : false; + } + + void + Scene::setMargin(const ::rl::math::Real& margin) + { + for (Iterator i = this->begin(); i != this->end(); ++i) + { + static_cast< Model* >(*i)->setMargin(margin); + } + } + } + } +} diff --git a/src/rl/sg/solid/Scene.h b/src/rl/sg/solid/Scene.h new file mode 100644 index 00000000..f188ab83 --- /dev/null +++ b/src/rl/sg/solid/Scene.h @@ -0,0 +1,86 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SOLID_SCENE_H_ +#define _RL_SG_SOLID_SCENE_H_ + +#include +#include + +#include "../DepthScene.h" +#include "../DistanceScene.h" +#include "../RaycastScene.h" +#include "../SimpleScene.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + class Shape; + + class Scene : public ::rl::sg::DepthScene, public ::rl::sg::DistanceScene, public ::rl::sg::RaycastScene, public ::rl::sg::SimpleScene + { + public: + Scene(); + + virtual ~Scene(); + + bool areColliding(::rl::sg::Shape* first, ::rl::sg::Shape* second); + + ::rl::sg::Model* create(); + + bool depth(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + using ::rl::sg::DistanceScene::distance; + + ::rl::math::Real distance(::rl::sg::Shape* first, ::rl::sg::Shape* second, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + ::rl::math::Real distance(::rl::sg::Shape* shape, const ::rl::math::Vector3& point, ::rl::math::Vector3& point1, ::rl::math::Vector3& point2); + + ::rl::sg::Shape* raycast(const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance); + + bool raycast(::rl::sg::Shape* shape, const ::rl::math::Vector3& source, const ::rl::math::Vector3& target, ::rl::math::Real& distance); + + void setMargin(const ::rl::math::Real& margin); + + BP_SceneHandle broad; + + DT_SceneHandle scene; + + protected: + + private: + static void beginOverlap(void* clientData, void* object1, void* object2); + + static void endOverlap(void* clientData, void* object1, void* object2); + }; + } + } +} + +#endif // _RL_SG_SOLID_SCENE_H_ diff --git a/src/rl/sg/solid/Shape.cpp b/src/rl/sg/solid/Shape.cpp new file mode 100644 index 00000000..5947080e --- /dev/null +++ b/src/rl/sg/solid/Shape.cpp @@ -0,0 +1,253 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +#include "Body.h" +#include "Model.h" +#include "Scene.h" +#include "Shape.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + Shape::Shape(SoVRMLShape* shape, Body* body) : + ::rl::sg::Shape(shape, body), + complex(false), + encounters(), + object(), + proxy(), + frame(::rl::math::Transform::Identity()), + max(), + min(), + shape(Shape::create(shape)), + transform(::rl::math::Transform::Identity()) + { + this->object = DT_CreateObject(this, this->shape); + DT_AddObject(dynamic_cast< Scene* >(this->getBody()->getModel()->getScene())->scene, this->object); + + DT_GetBBox(this->object, this->min, this->max); + this->proxy = BP_CreateProxy(dynamic_cast< Scene* >(this->getBody()->getModel()->getScene())->broad, this, this->min, this->max); + + this->getBody()->add(this); + } + + Shape::~Shape() + { + this->getBody()->remove(this); + + for (::std::tr1::unordered_set< Shape* >::iterator i = this->encounters.begin(); i != this->encounters.end(); ++i) + { + (*i)->encounters.erase(this); + } + + if (NULL != this->proxy) + { + BP_DestroyProxy(dynamic_cast< Scene* >(this->getBody()->getModel()->getScene())->broad, this->proxy); + } + + if (NULL != this->object) + { + DT_RemoveObject(dynamic_cast< Scene* >(this->getBody()->getModel()->getScene())->scene, this->object); + DT_DestroyObject(this->object); + } + + if (NULL != this->shape) + { + DT_DeleteShape(this->shape); + } + } + + DT_ShapeHandle + Shape::create(SoVRMLShape* shape) + { + SoVRMLGeometry* geometry = static_cast< SoVRMLGeometry* >(shape->geometry.getValue()); + + if (geometry->isOfType(SoVRMLBox::getClassTypeId())) + { + SoVRMLBox* box = static_cast< SoVRMLBox* >(geometry); + return DT_NewBox(box->size.getValue()[0], box->size.getValue()[1], box->size.getValue()[2]); + } + else if (geometry->isOfType(SoVRMLCone::getClassTypeId())) + { + SoVRMLCone* cone = static_cast< SoVRMLCone* >(geometry); + return DT_NewCone(cone->bottomRadius.getValue(), cone->height.getValue()); + } + else if (geometry->isOfType(SoVRMLCylinder::getClassTypeId())) + { + SoVRMLCylinder* cylinder = static_cast< SoVRMLCylinder* >(geometry); + return DT_NewCylinder(cylinder->radius.getValue(), cylinder->height.getValue()); + } + else if (geometry->isOfType(SoVRMLIndexedFaceSet::getClassTypeId())) + { + SoVRMLIndexedFaceSet* indexedFaceSet = static_cast< SoVRMLIndexedFaceSet* >(geometry); + + if (indexedFaceSet->convex.getValue()) + { + return Shape::create(static_cast< SoVRMLCoordinate* >(indexedFaceSet->coord.getValue())->point); + } + else + { + this->complex = true; + + return Shape::create(static_cast< SoVRMLCoordinate* >(indexedFaceSet->coord.getValue())->point, indexedFaceSet->coordIndex); + } + } + else if (geometry->isOfType(SoVRMLSphere::getClassTypeId())) + { + SoVRMLSphere* sphere = static_cast< SoVRMLSphere* >(geometry); + return DT_NewSphere(sphere->radius.getValue()); + } + + return NULL; + } + + DT_ShapeHandle + Shape::create(const SoMFVec3f& point) + { + DT_ShapeHandle shape = DT_NewPolytope(NULL); + + DT_Vector3 vertex; + + for (int i = 0; i < point.getNum(); ++i) + { + vertex[0] = point[i][0]; + vertex[1] = point[i][1]; + vertex[2] = point[i][2]; + + DT_Vertex(vertex); + } + + DT_EndPolytope(); + + return shape; + } + + DT_ShapeHandle + Shape::create(const SoMFVec3f& point, const SoMFInt32& coordIndex) + { + DT_ShapeHandle shape = DT_NewComplexShape(NULL); + + DT_Vector3 vertex; + + if (coordIndex.getNum() > 0) + { + DT_Begin(); + } + + for (int i = 0; i < coordIndex.getNum(); ++i) + { + if (SO_END_FACE_INDEX == coordIndex[i]) + { + DT_End(); + + if (i < coordIndex.getNum() - 1) + { + DT_Begin(); + } + } + else + { + vertex[0] = point[coordIndex[i]][0]; + vertex[1] = point[coordIndex[i]][1]; + vertex[2] = point[coordIndex[i]][2]; + + DT_Vertex(vertex); + } + } + + DT_EndComplexShape(); + + return shape; + } + + void + Shape::getTransform(::rl::math::Transform& transform) + { + double m[16]; + + DT_GetMatrixd(this->object, m); + + for (::std::size_t i = 0; i < 4; ++i) + { + for (::std::size_t j = 0; j < 4; ++j) + { + this->frame(i, j) = static_cast< ::rl::math::Real >(m[i + j * 4]); + } + } + + this->transform = this->frame * static_cast< Body* >(this->getBody())->frame.inverse(); + + transform = this->transform; + } + + void + Shape::setMargin(const ::rl::math::Real& margin) + { + DT_SetMargin(this->object, static_cast< DT_Scalar >(margin)); + } + + void + Shape::setTransform(const ::rl::math::Transform& transform) + { + this->transform = transform; + + this->update(); + } + + void + Shape::update() + { + this->frame = static_cast< Body* >(this->getBody())->frame * this->transform; + + double m[16]; + + for (::std::size_t i = 0; i < 4; ++i) + { + for (::std::size_t j = 0; j < 4; ++j) + { + m[i + j * 4] = static_cast< double >(this->frame(i, j)); + } + } + + DT_SetMatrixd(this->object, m); + + DT_GetBBox(this->object, this->min, this->max); + + BP_SetBBox(this->proxy, this->min, this->max); + } + } + } +} diff --git a/src/rl/sg/solid/Shape.h b/src/rl/sg/solid/Shape.h new file mode 100644 index 00000000..f5af2a59 --- /dev/null +++ b/src/rl/sg/solid/Shape.h @@ -0,0 +1,99 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_SG_SOLID_SHAPE_H_ +#define _RL_SG_SOLID_SHAPE_H_ + +#include +#include +#include +#include + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +#include "../Shape.h" + +namespace rl +{ + namespace sg + { + namespace solid + { + class Body; + + class Shape : public ::rl::sg::Shape + { + public: + EIGEN_MAKE_ALIGNED_OPERATOR_NEW + + Shape(SoVRMLShape* shape, Body* body); + + virtual ~Shape(); + + void getTransform(::rl::math::Transform& transform); + + void setMargin(const ::rl::math::Real& margin); + + void setTransform(const ::rl::math::Transform& transform); + + void update(); + + bool complex; + + ::std::tr1::unordered_set< Shape* > encounters; + + DT_ObjectHandle object; + + BP_ProxyHandle proxy; + + protected: + + private: + DT_ShapeHandle create(SoVRMLShape* shape); + + DT_ShapeHandle create(const SoMFVec3f& point); + + DT_ShapeHandle create(const SoMFVec3f& point, const SoMFInt32& coordIndex); + + ::rl::math::Transform frame; + + DT_Vector3 max; + + DT_Vector3 min; + + DT_ShapeHandle shape; + + ::rl::math::Transform transform; + }; + } + } +} + +#endif // _RL_SG_SOLID_SHAPE_H_ diff --git a/src/rl/util/CMakeLists.txt b/src/rl/util/CMakeLists.txt new file mode 100644 index 00000000..ac8a8a9d --- /dev/null +++ b/src/rl/util/CMakeLists.txt @@ -0,0 +1,43 @@ +project(rlutil) + +find_package(Threads REQUIRED) + +set( + HDRS + Mutex.h + MutexLocker.h + MutexTryLocker.h + Semaphore.h + Thread.h + Timer.h +) + +add_library( + rlutil + ${HDRS} + dummy.cpp +) + +target_link_libraries( + rlutil + rlmath + ${CMAKE_THREAD_LIBS_INIT} +) + +set_target_properties( + rlutil + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/util COMPONENT headers) + +install( + TARGETS rlutil + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/util/Mutex.h b/src/rl/util/Mutex.h new file mode 100644 index 00000000..77e24683 --- /dev/null +++ b/src/rl/util/Mutex.h @@ -0,0 +1,114 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_UTIL_MUTEX_H_ +#define _RL_UTIL_MUTEX_H_ + +#ifdef WIN32 +#include +#else // WIN32 +#include +#include +#endif // WIN32 + +namespace rl +{ + namespace util + { + class Mutex + { + public: + explicit Mutex() : + mutex() + { +#ifdef WIN32 + InitializeCriticalSection(&(*this).mutex); +#else // WIN32 + pthread_mutex_init(&(*this).mutex, NULL); +#endif // WIN32 + } + + virtual ~Mutex() + { +#ifdef WIN32 + DeleteCriticalSection(&(*this).mutex); +#else // WIN32 + pthread_mutex_destroy(&(*this).mutex); +#endif // WIN32 + } + + Mutex& operator++() + { + (*this).unlock(); + return (*this); + } + + Mutex& operator--() + { + (*this).lock(); + return (*this); + } + + void lock() + { +#ifdef WIN32 + EnterCriticalSection(&(*this).mutex); +#else // WIN32 + pthread_mutex_lock(&(*this).mutex); +#endif // WIN32 + } + + bool tryLock() + { +#ifdef WIN32 + return TryEnterCriticalSection(&(*this).mutex) ? true : false; +#else // WIN32 + return pthread_mutex_trylock(&(*this).mutex) == EBUSY ? false : true; +#endif // WIN32 + } + + void unlock() + { +#ifdef WIN32 + LeaveCriticalSection(&(*this).mutex); +#else // WIN32 + pthread_mutex_unlock(&(*this).mutex); +#endif // WIN32 + } + + protected: + + private: +#ifdef WIN32 + CRITICAL_SECTION mutex; +#else // WIN32 + pthread_mutex_t mutex; +#endif // WIN32 + }; + } +} + +#endif // _RL_UTIL_MUTEX_H_ diff --git a/src/rl/util/MutexLocker.h b/src/rl/util/MutexLocker.h new file mode 100644 index 00000000..5897e64f --- /dev/null +++ b/src/rl/util/MutexLocker.h @@ -0,0 +1,58 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_UTIL_MUTEXLOCKER_H_ +#define _RL_UTIL_MUTEXLOCKER_H_ + +#include "Mutex.h" + +namespace rl +{ + namespace util + { + class MutexLocker + { + public: + explicit MutexLocker(Mutex* mutex) : + mutex(mutex) + { + (*this).mutex->lock(); + } + + virtual ~MutexLocker() + { + (*this).mutex->unlock(); + } + + protected: + + private: + Mutex* mutex; + }; + } +} + +#endif // _RL_UTIL_MUTEXLOCKER_H_ diff --git a/src/rl/util/MutexTryLocker.h b/src/rl/util/MutexTryLocker.h new file mode 100644 index 00000000..f353b128 --- /dev/null +++ b/src/rl/util/MutexTryLocker.h @@ -0,0 +1,69 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_UTIL_MUTEXTRYLOCKER_H_ +#define _RL_UTIL_MUTEXTRYLOCKER_H_ + +#include "Mutex.h" + +namespace rl +{ + namespace util + { + class MutexTryLocker + { + public: + explicit MutexTryLocker(Mutex* mutex) : + locked(false), + mutex(mutex) + { + (*this).locked = (*this).mutex->tryLock(); + } + + virtual ~MutexTryLocker() + { + if ((*this).locked) + { + (*this).mutex->unlock(); + } + } + + bool isLocked() const + { + return (*this).locked; + } + + protected: + + private: + bool locked; + + Mutex* mutex; + }; + } +} + +#endif // _RL_UTIL_MUTEXTRYLOCKER_H_ diff --git a/src/rl/util/Semaphore.h b/src/rl/util/Semaphore.h new file mode 100644 index 00000000..161e10bd --- /dev/null +++ b/src/rl/util/Semaphore.h @@ -0,0 +1,117 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_UTIL_SEMAPHORE_H_ +#define _RL_UTIL_SEMAPHORE_H_ + +#include + +#ifdef WIN32 +#include +#else // WIN32 +#include +#endif // WIN32 + +namespace rl +{ + namespace util + { + class Semaphore + { + public: + explicit Semaphore(const ::std::size_t& n) : +#ifdef WIN32 + semaphore(CreateSemaphore(NULL, n, n, NULL)) +#else // WIN32 + semaphore() +#endif // WIN32 + { +#ifndef WIN32 + sem_init(&(*this).semaphore, 0, n); +#endif // WIN32 + } + + virtual ~Semaphore() + { +#ifdef WIN32 + CloseHandle((*this).semaphore); +#else // WIN32 + sem_destroy(&(*this).semaphore); +#endif // WIN32 + } + + Semaphore& operator++() + { + (*this).release(); + return (*this); + } + + Semaphore& operator--() + { + (*this).acquire(); + return (*this); + } + + void acquire() + { +#ifdef WIN32 + WaitForSingleObject((*this).semaphore, INFINITE); +#else // WIN32 + sem_wait(&(*this).semaphore); +#endif // WIN32 + } + + void release() + { +#ifdef WIN32 + ReleaseSemaphore((*this).semaphore, 1, NULL); +#else // WIN32 + sem_post(&(*this).semaphore); +#endif // WIN32 + } + + bool tryAcquire() + { +#ifdef WIN32 + return WaitForSingleObject((*this).semaphore, 0) == WAIT_OBJECT_0 ? false : true; +#else // WIN32 + return sem_trywait(&(*this).semaphore) == 0 ? true : false; +#endif // WIN32 + } + + protected: + + private: +#ifdef WIN32 + HANDLE semaphore; +#else // WIN32 + sem_t semaphore; +#endif // WIN32 + }; + } +} + +#endif // _RL_UTIL_SEMAPHORE_H_ diff --git a/src/rl/util/Thread.h b/src/rl/util/Thread.h new file mode 100644 index 00000000..7135e2a3 --- /dev/null +++ b/src/rl/util/Thread.h @@ -0,0 +1,142 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_UTIL_THREAD_H_ +#define _RL_UTIL_THREAD_H_ + +#ifdef WIN32 +#include +#include +#else // WIN32 +#include +#include +#endif // WIN32 + +#include + +namespace rl +{ + namespace util + { + class Thread + { + public: + explicit Thread() : +#ifdef WIN32 + id(0), + thread(NULL) +#else // WIN32 + thread() +#endif // WIN32 + { + } + + virtual ~Thread() + { +#ifdef WIN32 + CloseHandle((*this).thread); +#endif // WIN32 + } + + bool operator==(const Thread& rhs) const + { +#ifdef WIN32 + return (*this).id == rhs.id; +#else // WIN32 + return pthread_equal((*this).thread, rhs.thread); +#endif // WIN32 + } + + bool operator!=(const Thread& rhs) const + { + return !operator==(rhs); + } + + void join() + { +#ifdef WIN32 + WaitForSingleObject((*this).thread, INFINITE); +#else // WIN32 + pthread_join((*this).thread, NULL); +#endif // WIN32 + } + + virtual void run() = 0; + + static void sleep(const double& seconds) + { +#ifdef WIN32 + Sleep(static_cast< unsigned int >(seconds * 1000.0f)); +#else // WIN32 + usleep(static_cast< ::std::size_t >(seconds * 1000.0f * 1000.0f)); +#endif // WIN32 + } + + void start() + { +#ifdef WIN32 + (*this).thread = reinterpret_cast< void* >(_beginthreadex(NULL, 0, Thread::start, this, 0, &(*this).id)); +#else // WIN32 + pthread_create(&(*this).thread, NULL, Thread::start, this); +#endif // WIN32 + } + + static void yield() + { +#ifdef WIN32 + Sleep(0); +#else // WIN32 + sched_yield(); +#endif // WIN32 + } + + protected: + + private: +#ifdef WIN32 + static unsigned int __stdcall start(void* arg) + { + static_cast< Thread* >(arg)->run(); + return 0; + } + + unsigned int id; + + void* thread; +#else // WIN32 + static void* start(void* arg) + { + static_cast< Thread* >(arg)->run(); + return NULL; + } + + pthread_t thread; +#endif // WIN32 + }; + } +} + +#endif // _RL_UTIL_THREAD_H_ diff --git a/src/rl/util/Timer.h b/src/rl/util/Timer.h new file mode 100644 index 00000000..f83d5b6a --- /dev/null +++ b/src/rl/util/Timer.h @@ -0,0 +1,139 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_UTIL_TIMER_H_ +#define _RL_UTIL_TIMER_H_ + +#include + +#ifdef WIN32 +#include +#else // WIN32 +#include +#include +#endif // WIN32 + +#include + +namespace rl +{ + namespace util + { + class Timer + { + public: + explicit Timer() : + begin(), + end() + { +#ifdef WIN32 + QueryPerformanceFrequency(&(*this).frequency); +#endif // WIN32 + } + + virtual ~Timer() + { + } + + /** + * @return elapsed time [s] + */ + double elapsed() const + { +#ifdef WIN32 + return static_cast< double >((*this).end.QuadPart - (*this).begin.QuadPart) / static_cast< double >((*this).frequency.QuadPart); +#else // WIN32 + return static_cast< double >((*this).end.tv_sec - (*this).begin.tv_sec) + static_cast< double >((*this).end.tv_usec - (*this).begin.tv_usec) / 1000000.0; +#endif // WIN32 + } + + /** + * @return current time [s] + */ + static double now() + { +#ifdef WIN32 + LARGE_INTEGER now; + QueryPerformanceCounter(&now); + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + return static_cast< double >(now.QuadPart) / static_cast< double >(frequency.QuadPart); +#else // WIN32 + timeval now; + gettimeofday(&now, NULL); + return static_cast< double >(now.tv_sec) + static_cast< double >(now.tv_usec) / 1000000.0; +#endif // WIN32 + } + + /** + * @param seconds sleep time [s] + */ + static void sleep(const double& seconds) + { +#ifdef WIN32 + Sleep(static_cast< unsigned int >(seconds * ::rl::math::UNIT2MILLI)); +#else // WIN32 + usleep(static_cast< ::std::size_t >(seconds * ::rl::math::UNIT2MICRO)); +#endif // WIN32 + } + + void start() + { +#ifdef WIN32 + QueryPerformanceCounter(&(*this).begin); +#else // WIN32 + gettimeofday(&(*this).begin, NULL); +#endif // WIN32 + } + + void stop() + { +#ifdef WIN32 + QueryPerformanceCounter(&(*this).end); +#else // WIN32 + gettimeofday(&(*this).end, NULL); +#endif // WIN32 + } + + protected: + + private: +#ifdef WIN32 + LARGE_INTEGER begin; + + LARGE_INTEGER end; + + LARGE_INTEGER frequency; +#else // WIN32 + timeval begin; + + timeval end; +#endif // WIN32 + }; + } +} + +#endif // _RL_UTIL_TIMER_H_ diff --git a/src/rl/util/dummy.cpp b/src/rl/util/dummy.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/rl/xml/Attribute.h b/src/rl/xml/Attribute.h new file mode 100644 index 00000000..9339ba98 --- /dev/null +++ b/src/rl/xml/Attribute.h @@ -0,0 +1,105 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_ATTRIBUTE_H_ +#define _RL_XML_ATTRIBUTE_H_ + +#include +#include +#include + +namespace rl +{ + namespace xml + { + class Attribute + { + public: + Attribute(xmlAttrPtr attr) : + attr(attr) + { + } + + Attribute(xmlNodePtr node, const ::std::string& name, const ::std::string& value) : + attr( + xmlNewProp( + node, + reinterpret_cast< const xmlChar* >(name.c_str()), + reinterpret_cast< const xmlChar* >(value.c_str()) + ) + ) + { + } + + virtual ~Attribute() + { + if (NULL == this->attr->doc) + { + xmlFreeProp(this->attr); + } + } + + ::std::string getValue() const + { + ::boost::shared_array< xmlChar > value( + xmlGetProp( + this->attr->parent, + this->attr->name + ), + xmlFree + ); + + return reinterpret_cast< char* >(value.get()); + } + + xmlAttrPtr operator()() const + { + return this->attr; + } + + void remove() + { + xmlRemoveProp(this->attr); + } + + void setValue(const ::std::string& value) + { + xmlSetProp( + this->attr->parent, + this->attr->name, + reinterpret_cast< const xmlChar* >(value.c_str()) + ); + } + + protected: + + private: + xmlAttrPtr attr; + }; + } +} + +#endif // _RL_XML_ATTRIBUTE_H_ diff --git a/src/rl/xml/CMakeLists.txt b/src/rl/xml/CMakeLists.txt new file mode 100644 index 00000000..9ac9afbf --- /dev/null +++ b/src/rl/xml/CMakeLists.txt @@ -0,0 +1,66 @@ +project(rlxml) + +find_package(Boost REQUIRED) + +find_package(Iconv) +find_package(LibXml2 REQUIRED) +find_package(ZLIB) + +set( + HDRS + Attribute.h + Document.h + DomParser.h + Exception.h + Node.h + Namespace.h + Object.h + Path.h + Schema.h +) + +add_library( + rlxml + ${HDRS} + dummy.cpp +) + +target_include_directories( + rlxml + PUBLIC + ${Boost_INCLUDE_DIR} + ${LIBXML2_INCLUDE_DIRS} +) + +target_link_libraries( + rlxml + ${LIBXML2_LIBRARIES} +) + +if(ICONV_FOUND) + target_include_directories(rlxml PUBLIC ${ICONV_INCLUDE_DIRS}) + target_link_libraries(rlxml ${ICONV_LIBRARIES}) +endif(ICONV_FOUND) + +if(ZLIB_FOUND) + target_include_directories(rlxml PUBLIC ${ZLIB_INCLUDE_DIRS}) + target_link_libraries(rlxml ${ZLIB_LIBRARIES}) +endif(ZLIB_FOUND) + +set_target_properties( + rlxml + PROPERTIES + VERSION ${VERSION} + DEBUG_POSTFIX d +) + +install(FILES ${HDRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rl/xml COMPONENT headers) + +install( + TARGETS rlxml + EXPORT rl + COMPONENT libraries + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/src/rl/xml/Document.h b/src/rl/xml/Document.h new file mode 100644 index 00000000..c449ebda --- /dev/null +++ b/src/rl/xml/Document.h @@ -0,0 +1,132 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_DOCUMENT_H_ +#define _RL_XML_DOCUMENT_H_ + +#include +#include +#include +#include +#include + +#include "Exception.h" +#include "Node.h" + +namespace rl +{ + namespace xml + { + class Document + { + public: + Document(xmlDocPtr doc) : + doc(doc, xmlFreeDoc) + { + } + + virtual ~Document() + { + } + + ::std::string dumpFormatMemory(const bool& format) const + { + xmlChar* mem; + int size; + + xmlDocDumpFormatMemory(this->doc.get(), &mem, &size, format ? 1 : 0); + ::boost::shared_array< xmlChar > memory(mem, xmlFree); + + return reinterpret_cast< const char* >(memory.get()); + } + + ::std::string dumpMemory() const + { + xmlChar* mem; + int size; + + xmlDocDumpMemory(this->doc.get(), &mem, &size); + ::boost::shared_array< xmlChar > memory(mem, xmlFree); + + return reinterpret_cast< const char* >(memory.get()); + } + + ::std::string getEncoding() const + { + return reinterpret_cast< const char* >(this->doc->encoding); + } + + Node getRootElement() const + { + return xmlDocGetRootElement(this->doc.get()); + } + + ::std::string getVersion() const + { + return reinterpret_cast< const char* >(this->doc->version); + } + + xmlDocPtr operator()() const + { + return this->doc.get(); + } + + void save(const ::std::string& filename, const bool& format = true) const + { + xmlSaveFormatFile(filename.c_str(), this->doc.get(), format ? 1 : 0); + } + + void save(const ::std::string& filename, const ::std::string& encoding, const bool& format = true) const + { + xmlSaveFormatFileEnc(filename.c_str(), this->doc.get(), encoding.c_str(), format ? 1 : 0); + } + + void setRootElement(const Node& node) + { + xmlDocSetRootElement(this->doc.get(), node()); + } + + int substitute(const int& flags = 0) + { + int substitutions = xmlXIncludeProcessFlags(this->doc.get(), flags); + + if (-1 == substitutions) + { + throw Exception(xmlGetLastError()->message); + } + + return substitutions; + } + + protected: + + private: + ::boost::shared_ptr< xmlDoc > doc; + }; + } +} + +#endif // _RL_XML_DOCUMENT_H_ diff --git a/src/rl/xml/DomParser.h b/src/rl/xml/DomParser.h new file mode 100644 index 00000000..25095930 --- /dev/null +++ b/src/rl/xml/DomParser.h @@ -0,0 +1,86 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_DOMPARSER_H_ +#define _RL_XML_DOMPARSER_H_ + +#include +#include +#include +#include + +#include "Document.h" +#include "Exception.h" + +namespace rl +{ + namespace xml + { + class DomParser + { + public: + DomParser() : + parser(xmlNewParserCtxt(), xmlFreeParserCtxt) + { + } + + virtual ~DomParser() + { + } + + Document readFile(const ::std::string& filename, const ::std::string& encoding = "", const int& options = 0) const + { + xmlDocPtr doc = xmlCtxtReadFile(this->parser.get(), filename.c_str(), encoding.c_str(), options); + + if (NULL == doc) + { + throw Exception(xmlCtxtGetLastError(this->parser.get())->message); + } + + return Document(doc); + } + + Document readMemory(const ::std::string& buffer, const ::std::string& url = "", const ::std::string& encoding = "", const int& options = 0) const + { + xmlDocPtr doc = xmlCtxtReadMemory(this->parser.get(), buffer.c_str(), static_cast< int >(buffer.size()), url.c_str(), encoding.c_str(), options); + + if (NULL == doc) + { + throw Exception(xmlCtxtGetLastError(this->parser.get())->message); + } + + return Document(doc); + } + + protected: + + private: + ::boost::shared_ptr< xmlParserCtxt > parser; + }; + } +} + +#endif // _RL_XML_DOMPARSER_H_ diff --git a/src/rl/xml/Exception.h b/src/rl/xml/Exception.h new file mode 100644 index 00000000..df02b723 --- /dev/null +++ b/src/rl/xml/Exception.h @@ -0,0 +1,56 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_EXCEPTION_H_ +#define _RL_XML_EXCEPTION_H_ + +#include + +namespace rl +{ + namespace xml + { + class Exception : public ::std::runtime_error + { + public: + Exception(const ::std::string& what_arg) : + ::std::runtime_error(what_arg) + { + } + + virtual ~Exception() throw() + { + } + + protected: + + private: + + }; + } +} + +#endif // _RL_XML_EXCEPTION_H_ diff --git a/src/rl/xml/Namespace.h b/src/rl/xml/Namespace.h new file mode 100644 index 00000000..7b3bb95a --- /dev/null +++ b/src/rl/xml/Namespace.h @@ -0,0 +1,89 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_NAMESPACE_H_ +#define _RL_XML_NAMESPACE_H_ + +#include +#include +#include + +namespace rl +{ + namespace xml + { + class Namespace + { + public: + Namespace(xmlNsPtr ns) : + ns(ns) + { + } + + Namespace(xmlNodePtr node, const ::std::string& href, const ::std::string& prefix) : + ns( + xmlNewNs( + node, + reinterpret_cast< const xmlChar* >(href.c_str()), + reinterpret_cast< const xmlChar* >(prefix.c_str()) + ) + ) + { + this->ns->_private = node; + } + + virtual ~Namespace() + { + if (NULL == this->ns->_private) + { + xmlFreeNs(this->ns); + } + } + + ::std::string getHref() const + { + return reinterpret_cast< const char* >(this->ns->href); + } + + ::std::string getPrefix() const + { + return reinterpret_cast< const char* >(this->ns->prefix); + } + + xmlNsPtr operator()() const + { + return this->ns; + } + + protected: + + private: + xmlNsPtr ns; + }; + } +} + +#endif // _RL_XML_NAMESPACE_H_ diff --git a/src/rl/xml/Node.h b/src/rl/xml/Node.h new file mode 100644 index 00000000..e40ce1e2 --- /dev/null +++ b/src/rl/xml/Node.h @@ -0,0 +1,259 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_NODE_H_ +#define _RL_XML_NODE_H_ + +#include +#include +#include +#include +#include +#include + +#include "Attribute.h" +#include "Exception.h" + +namespace rl +{ + namespace xml + { + class Node + { + public: + Node(xmlNodePtr node) : + node(node) + { + } + + Node(const ::std::string& name) : + node( + xmlNewNode( + NULL, + reinterpret_cast< const xmlChar* >(name.c_str()) + ) + ) + { + } + + virtual ~Node() + { + if (NULL == this->node->doc) + { + xmlFree(this->node); + } + } + + static Node Text(const ::std::string& content) + { + return xmlNewText( + reinterpret_cast< const xmlChar* >(content.c_str()) + ); + } + + Node addChild(const Node& node) + { + return xmlAddChild(this->node, node()); + } + + Node addNextSibling(const Node& node) + { + return xmlAddNextSibling(this->node, node()); + } + + Node addPrevSibling(const Node& node) + { + return xmlAddPrevSibling(this->node, node()); + } + + Node addSibling(const Node& node) + { + return xmlAddSibling(this->node, node()); + } + + Attribute getAttribute(const ::std::string& name) const + { + return Attribute( + xmlHasProp( + this->node, + reinterpret_cast< const xmlChar* >(name.c_str()) + ) + ); + } + + unsigned long getChildElementCount() const + { + return xmlChildElementCount(this->node); + } + + ::std::string getContent() const + { + ::boost::shared_array< xmlChar > content( + xmlNodeGetContent(this->node), + xmlFree + ); + + return reinterpret_cast< char* >(content.get()); + } + + ::std::string getLocalPath(const ::std::string& uri) const + { + ::boost::shared_array< xmlChar > absolute( + xmlBuildURI( + reinterpret_cast< const xmlChar* >(uri.c_str()), + xmlNodeGetBase(this->node->doc, this->node) + ), + xmlFree + ); + + ::boost::shared_array< char > unescaped( + xmlURIUnescapeString( + reinterpret_cast< char* >(absolute.get()), + 0, + NULL + ), + xmlFree + ); + + char* path; + + if (0 == strncmp(unescaped.get(), "file://localhost/", 17)) + { +#ifdef WIN32 + path = &unescaped.get()[17]; +#else // WIN32 + path = &unescaped.get()[16]; +#endif // WIN32 + } + else if (0 == strncmp(unescaped.get(), "file:///", 8)) + { +#ifdef WIN32 + path = &unescaped.get()[8]; +#else // WIN32 + path = &unescaped.get()[7]; +#endif // WIN32 + } + else + { + path = unescaped.get(); + } + + return path; + } + + ::std::string getName() const + { + return reinterpret_cast< const char* >(this->node->name); + } + + ::std::string getRelativeUri(const ::std::string& uri) const + { + ::boost::shared_array relative( + xmlBuildRelativeURI( + reinterpret_cast< const xmlChar* >(uri.c_str()), + xmlNodeGetBase(this->node->doc, this->node) + ), + xmlFree + ); + + return reinterpret_cast< char* >(relative.get()); + } + + ::std::string getUri(const ::std::string& uri) const + { + ::boost::shared_array< xmlChar > absolute( + xmlBuildURI( + reinterpret_cast< const xmlChar* >(uri.c_str()), + xmlNodeGetBase(this->node->doc, this->node) + ), + xmlFree + ); + + return reinterpret_cast< char* >(absolute.get()); + } + + bool hasAttribute(const ::std::string& name) const + { + return NULL != xmlHasProp( + this->node, + reinterpret_cast< const xmlChar* >(name.c_str()) + ) ? true : false; + } + + bool isText() const + { + return 1 == xmlNodeIsText(this->node) ? true : false; + } + + xmlNodePtr operator()() const + { + return this->node; + } + + Node replace(const Node& node) + { + return xmlReplaceNode(this->node, node()); + } + + void setContent(const ::std::string& content) + { + xmlNodeSetContent( + this->node, + reinterpret_cast< const xmlChar* >(content.c_str()) + ); + } + + void setName(const ::std::string& name) + { + xmlNodeSetName(this->node, reinterpret_cast< const xmlChar* >(name.c_str())); + } + + int substitute(const int& flags = 0) + { + int substitutions = xmlXIncludeProcessTreeFlags(this->node, flags); + + if (-1 == substitutions) + { + throw Exception(xmlGetLastError()->message); + } + + return substitutions; + } + + void unlink() + { + xmlUnlinkNode(this->node); + } + + protected: + + private: + xmlNodePtr node; + }; + } +} + +#endif // _RL_XML_NODE_H_ diff --git a/src/rl/xml/Object.h b/src/rl/xml/Object.h new file mode 100644 index 00000000..ec6a34d9 --- /dev/null +++ b/src/rl/xml/Object.h @@ -0,0 +1,105 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_OBJECT_H_ +#define _RL_XML_OBJECT_H_ + +#include +#include +#include + +#include "Node.h" + +namespace rl +{ + namespace xml + { + class Object + { + public: + Object() : + object() + { + } + + Object(xmlXPathObjectPtr object) : + object(object, xmlXPathFreeObject) + { + } + + virtual ~Object() + { + } + + bool getBoolval() const + { + return (1 == this->object->boolval) ? true : false; + } + + double getFloatval() const + { + return this->object->floatval; + } + + double getFloatval(const double& val) const + { + return 0 == xmlXPathIsNaN(this->object->floatval) ? this->object->floatval : val; + } + + int getNodeNr() const + { + return this->object->nodesetval->nodeNr; + } + + Node getNodeTab(const int& i) const + { + return Node(this->object->nodesetval->nodeTab[i]); + } + + ::std::string getStringval() const + { + return reinterpret_cast< char* >(this->object->stringval); + } + + xmlXPathObjectType getType() const + { + return this->object->type; + } + + xmlXPathObjectPtr operator()() const + { + return this->object.get(); + } + + protected: + + private: + ::boost::shared_ptr< xmlXPathObject > object; + }; + } +} + +#endif // _RL_XML_PATH_H_ diff --git a/src/rl/xml/Path.h b/src/rl/xml/Path.h new file mode 100644 index 00000000..bbf230ca --- /dev/null +++ b/src/rl/xml/Path.h @@ -0,0 +1,95 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_PATH_H_ +#define _RL_XML_PATH_H_ + +#include +#include +#include +#include + +#include "Document.h" +#include "Node.h" +#include "Object.h" + +namespace rl +{ + namespace xml + { + class Path + { + public: + Path(const Document& doc) : + context(xmlXPathNewContext(doc()), xmlXPathFreeContext), + doc(doc()) + { + } + + virtual ~Path() + { + } + + Object eval(const ::std::string& expression) + { + this->context->node = NULL; + + return Object( + xmlXPathEvalExpression( + reinterpret_cast< const xmlChar* >(expression.c_str()), + this->context.get() + ) + ); + } + + Object eval(const ::std::string& expression, const Node& node) + { + this->context->node = node(); + + return Object( + xmlXPathEvalExpression( + reinterpret_cast< const xmlChar* >(expression.c_str()), + this->context.get() + ) + ); + } + + xmlXPathContextPtr operator()() const + { + return this->context.get(); + } + + protected: + + private: + ::boost::shared_ptr< xmlXPathContext > context; + + xmlDocPtr doc; + }; + } +} + +#endif // _RL_XML_PATH_H_ diff --git a/src/rl/xml/Schema.h b/src/rl/xml/Schema.h new file mode 100644 index 00000000..c09b4fca --- /dev/null +++ b/src/rl/xml/Schema.h @@ -0,0 +1,72 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef _RL_XML_SCHEMA_H_ +#define _RL_XML_SCHEMA_H_ + +#include +#include +#include +#include + +#include "Document.h" + +namespace rl +{ + namespace xml + { + class Schema + { + public: + Schema(const ::std::string& url) : + parser(xmlSchemaNewParserCtxt(url.c_str()), xmlSchemaFreeParserCtxt), + schema(xmlSchemaParse(parser.get()), xmlSchemaFree), + valid(xmlSchemaNewValidCtxt(schema.get()), xmlSchemaFreeValidCtxt) + { + } + + virtual ~Schema() + { + } + + bool validate(const Document& doc) + { + return 0 == xmlSchemaValidateDoc(this->valid.get(), doc()) ? true : false; + } + + protected: + + private: + ::boost::shared_ptr< xmlSchemaParserCtxt > parser; + + ::boost::shared_ptr< xmlSchema > schema; + + ::boost::shared_ptr< xmlSchemaValidCtxt > valid; + }; + } +} + +#endif // _RL_XML_SCHEMA_H_ diff --git a/src/rl/xml/dummy.cpp b/src/rl/xml/dummy.cpp new file mode 100644 index 00000000..e69de29b diff --git a/tests/rlDynamicsTest/CMakeLists.txt b/tests/rlDynamicsTest/CMakeLists.txt new file mode 100644 index 00000000..5a788b95 --- /dev/null +++ b/tests/rlDynamicsTest/CMakeLists.txt @@ -0,0 +1,34 @@ +project(rlDynamicsTest) + +find_package(Boost REQUIRED) + +add_executable( + rlDynamicsTest + rlDynamicsTest.cpp +) + +target_include_directories( + rlDynamicsTest + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlDynamicsTest + rlmdl + rlutil +) + +add_test( + rlDynamicsTestMitsubishiRv6sl + ${CMAKE_CURRENT_BINARY_DIR}/rlDynamicsTest + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlmdl/mitsubishi-rv6sl.xml + 100 +) + +add_test( + rlDynamicsTestPlanar2 + ${CMAKE_CURRENT_BINARY_DIR}/rlDynamicsTest + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlmdl/planar2.xml + 100 +) diff --git a/tests/rlDynamicsTest/rlDynamicsTest.cpp b/tests/rlDynamicsTest/rlDynamicsTest.cpp new file mode 100644 index 00000000..8a987971 --- /dev/null +++ b/tests/rlDynamicsTest/rlDynamicsTest.cpp @@ -0,0 +1,221 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 3) + { + std::cout << "Usage: rlDynamicsTest MODELFILE LOOP" << std::endl; + return 1; + } + + try + { + srand(static_cast< unsigned int >(rl::util::Timer::now() * 1000000.0f)); + + rl::mdl::XmlFactory factory; + boost::shared_ptr< rl::mdl::Model > model(factory.create(argv[1])); + + rl::mdl::Dynamic* dynamic = dynamic_cast< rl::mdl::Dynamic* >(model.get()); + + rl::math::Vector q0(model->getDofPosition()); + rl::math::Vector qd0(model->getDof()); + rl::math::Vector qdd0(model->getDof()); + + rl::math::Vector xdRecursive(6 * dynamic->getOperationalDof()); + rl::math::Vector xdMatrices(6 * dynamic->getOperationalDof()); + rl::math::Vector xddRecursive(6 * dynamic->getOperationalDof()); + rl::math::Vector xddMatrices(6 * dynamic->getOperationalDof()); + + rl::math::Vector tauRecursive(model->getDof()); + rl::math::Vector tauMatrices(model->getDof()); + rl::math::Vector qdd1Recursive(model->getDof()); + rl::math::Vector qdd1Matrices(model->getDof()); + + for (::std::size_t i = 0; i < atoi(argv[2]); ++i) + { + if (0 == i) + { + q0.setZero(); + qd0.setZero(); + qdd0.setOnes(); + } + else + { + q0.setRandom(); + qd0.setRandom(); + qdd0.setRandom(); + } + + // forward velocity (recursive) + + dynamic->setPosition(q0); + dynamic->setVelocity(qd0); + dynamic->forwardVelocity(); + + for (::std::size_t j = 0; j < dynamic->getOperationalDof(); ++j) + { + xdRecursive.segment(6 * j, 3) = dynamic->getOperationalVelocity(j).linear(); + xdRecursive.segment(6 * j + 3, 3) = dynamic->getOperationalVelocity(j).angular(); + } + + // forward velocity (matrices) + + dynamic->setPosition(q0); + dynamic->calculateJacobian(); + + xdMatrices = dynamic->getJacobian() * qd0; + + if (!xdMatrices.isApprox(xdRecursive)) + { + std::cerr << "q0 = " << q0.transpose() << std::endl; + std::cerr << "qd0 = " << qd0.transpose() << std::endl; + std::cerr << "xd (recursive) = " << xdRecursive.transpose() << std::endl; + std::cerr << "xd (matrices) = " << xdMatrices.transpose() << std::endl; + return 1; + } + + // forward acceleration (recursive) + + dynamic->setPosition(q0); + dynamic->setVelocity(qd0); + dynamic->setAcceleration(qdd0); + dynamic->forwardVelocity(); + dynamic->forwardAcceleration(); + + for (::std::size_t j = 0; j < dynamic->getOperationalDof(); ++j) + { + xddRecursive.segment(6 * j, 3) = dynamic->getOperationalAcceleration(j).linear(); + xddRecursive.segment(6 * j + 3, 3) = dynamic->getOperationalAcceleration(j).angular(); + } + + // forward acceleration (matrices) + + dynamic->setPosition(q0); + dynamic->calculateJacobian(); + dynamic->setVelocity(qd0); + dynamic->calculateJacobianDerivative(); + + xddMatrices = dynamic->getJacobian() * qdd0 + dynamic->getJacobianDerivative(); + + if (!xddMatrices.isApprox(xddRecursive)) + { + std::cerr << "q0 = " << q0.transpose() << std::endl; + std::cerr << "qd0 = " << qd0.transpose() << std::endl; + std::cerr << "qdd0 = " << qdd0.transpose() << std::endl; + std::cerr << "xdd (recursive) = " << xddRecursive.transpose() << std::endl; + std::cerr << "xdd (matrices) = " << xddMatrices.transpose() << std::endl; + return 1; + } + + // inverse dynamics (recursive) + + dynamic->setPosition(q0); + dynamic->setVelocity(qd0); + dynamic->setAcceleration(qdd0); + dynamic->inverseDynamics(); + dynamic->getTorque(tauRecursive); + + // inverse dynamics (matrices) + + dynamic->setPosition(q0); + dynamic->calculateMassMatrix(); + + dynamic->setPosition(q0); + dynamic->setVelocity(qd0); + dynamic->calculateCentrifugalCoriolis(); + + dynamic->setPosition(q0); + dynamic->calculateGravity(); + + tauMatrices = dynamic->getMassMatrix() * qdd0 + dynamic->getCentrifugalCoriolis() + dynamic->getGravity(); + + if (!tauMatrices.isApprox(tauRecursive)) + { + std::cerr << "q0 = " << q0.transpose() << std::endl; + std::cerr << "qd0 = " << qd0.transpose() << std::endl; + std::cerr << "qdd0 = " << qdd0.transpose() << std::endl; + std::cerr << "tau (recursive) = " << tauRecursive.transpose() << std::endl; + std::cerr << "tau (matrices) = " << tauMatrices.transpose() << std::endl; + return 1; + } + + // forward dynamics (recursive) + + dynamic->setPosition(q0); + dynamic->setVelocity(qd0); + dynamic->setTorque(tauRecursive); + dynamic->forwardDynamics(); + dynamic->getAcceleration(qdd1Recursive); + + if (!qdd1Recursive.isApprox(qdd0)) + { + std::cerr << "q0 = " << q0.transpose() << std::endl; + std::cerr << "qd0 = " << qd0.transpose() << std::endl; + std::cerr << "qdd0 = " << qdd0.transpose() << std::endl; + std::cerr << "tau (recursive) = " << tauRecursive.transpose() << std::endl; + std::cerr << "tau (matrices) = " << tauMatrices.transpose() << std::endl; + std::cerr << "qdd1 (recursive) = " << qdd1Recursive.transpose() << std::endl; + return 1; + } + + // forward dynamics (matrices) + + dynamic->setPosition(q0); + dynamic->calculateMassMatrixInverse(); + + qdd1Matrices = dynamic->getMassMatrixInverse() * (tauMatrices - dynamic->getCentrifugalCoriolis() - dynamic->getGravity()); + + if (!qdd1Matrices.isApprox(qdd1Recursive)) + { + std::cerr << "q0 = " << q0.transpose() << std::endl; + std::cerr << "qd0 = " << qd0.transpose() << std::endl; + std::cerr << "qdd0 = " << qdd0.transpose() << std::endl; + std::cerr << "tau (recursive) = " << tauRecursive.transpose() << std::endl; + std::cerr << "tau (matrices) = " << tauMatrices.transpose() << std::endl; + std::cerr << "qdd1 (recursive) = " << qdd1Recursive.transpose() << std::endl; + std::cerr << "qdd1 (matrices) = " << qdd1Matrices.transpose() << std::endl; + return 1; + } + } + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/rlHalEndianTest/CMakeLists.txt b/tests/rlHalEndianTest/CMakeLists.txt new file mode 100644 index 00000000..b6fefe5d --- /dev/null +++ b/tests/rlHalEndianTest/CMakeLists.txt @@ -0,0 +1,16 @@ +project(rlHalEndianTest) + +add_executable( + rlHalEndianTest + rlHalEndianTest.cpp +) + +target_link_libraries( + rlHalEndianTest + rlhal +) + +add_test( + rlHalEndianTest + ${CMAKE_CURRENT_BINARY_DIR}/rlHalEndianTest +) diff --git a/tests/rlHalEndianTest/rlHalEndianTest.cpp b/tests/rlHalEndianTest/rlHalEndianTest.cpp new file mode 100644 index 00000000..9f24995b --- /dev/null +++ b/tests/rlHalEndianTest/rlHalEndianTest.cpp @@ -0,0 +1,53 @@ +// +// Copyright (c) 2013, Andre Gaschler +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include + +int +main(int argc, char** argv) +{ + { + uint16_t word = 0x42EC; + assert(rl::hal::hostEndianWord(rl::hal::highByteFromHostEndian(word), rl::hal::lowByteFromHostEndian(word)) == word); + assert(rl::hal::littleEndianWord(rl::hal::highByteFromLittleEndian(word), rl::hal::lowByteFromLittleEndian(word)) == word); + assert(rl::hal::bigEndianWord(rl::hal::highByteFromBigEndian(word), rl::hal::lowByteFromBigEndian(word)) == word); + } + { + uint16_t wordBefore = 0x42EC; + uint16_t word = wordBefore; + rl::hal::swapByteOrder(word); + rl::hal::swapByteOrder(word); + assert(word == wordBefore); + } + { + uint32_t doubleWord = 0x42EC7654; + assert(rl::hal::hostEndianDoubleWord(rl::hal::highWordFromHostEndian(doubleWord), rl::hal::lowWordFromHostEndian(doubleWord)) == doubleWord); + assert(rl::hal::littleEndianDoubleWord(rl::hal::highWordFromLittleEndian(doubleWord), rl::hal::lowWordFromLittleEndian(doubleWord)) == doubleWord); + assert(rl::hal::bigEndianDoubleWord(rl::hal::highWordFromBigEndian(doubleWord), rl::hal::lowWordFromBigEndian(doubleWord)) == doubleWord); + } + return 0; +} diff --git a/tests/rlInverseKinematicsTest/CMakeLists.txt b/tests/rlInverseKinematicsTest/CMakeLists.txt new file mode 100644 index 00000000..1311be96 --- /dev/null +++ b/tests/rlInverseKinematicsTest/CMakeLists.txt @@ -0,0 +1,37 @@ +project(rlInverseKinematicsTest) + +find_package(Boost REQUIRED) + +add_executable( + rlInverseKinematicsTest + rlInverseKinematicsTest.cpp +) + +target_compile_definitions( + rlInverseKinematicsTest + PRIVATE + -DCMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}" +) + +target_include_directories( + rlInverseKinematicsTest + PUBLIC + ${Boost_INCLUDE_DIR} +) + +target_link_libraries( + rlInverseKinematicsTest + rlkin +) + +add_test( + rlInverseKinematicsTestMitsubishiRv6sl + ${CMAKE_CURRENT_BINARY_DIR}/rlInverseKinematicsTest + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/mitsubishi-rv6sl.xml +) + +add_test( + rlInverseKinematicsTestStaeubliTx60l + ${CMAKE_CURRENT_BINARY_DIR}/rlInverseKinematicsTest + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/staeubli-tx60l.xml +) diff --git a/tests/rlInverseKinematicsTest/rlInverseKinematicsTest.cpp b/tests/rlInverseKinematicsTest/rlInverseKinematicsTest.cpp new file mode 100644 index 00000000..eec94e8d --- /dev/null +++ b/tests/rlInverseKinematicsTest/rlInverseKinematicsTest.cpp @@ -0,0 +1,164 @@ +// +// Copyright (c) 2012, Andre Gaschler +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc < 2) + { + std::cout << "Usage: rlInverseKinematicsTest KINEMATICSFILE" << std::endl; + return 1; + } + + try + { + std::srand(0); // get reproducible results + + rl::kin::Kinematics* kinematics = static_cast< ::rl::kin::Kinematics* >(rl::kin::Kinematics::create(argv[1])); + + std::size_t nTests; + + rl::math::Vector q(6); + rl::math::Vector qinv(6); + rl::math::Vector qzero(6); + std::size_t n; + std::size_t wrongs; + std::size_t wrongT; + std::size_t ngotinverse; + + for (std::size_t ispuma = 0; ispuma < 2; ++ispuma) + { + nTests = 0 == ispuma ? 1000 : 100; + + for (n = 0, wrongs = 0, wrongT = 0, ngotinverse = 0; n < nTests && wrongT < 100 && wrongs < 100; ++n) + { + for (std::size_t i = 0; i < 6; ++i) + { + rl::math::Real r = static_cast< rl::math::Real >(std::rand()) / static_cast< rl::math::Real >(RAND_MAX); + q(i) = (r - 0.5) * 360 * rl::math::DEG2RAD; + qzero(i) = 0; + } + + kinematics->setPosition(q); + kinematics->updateFrames(); + + rl::math::Transform t = kinematics->forwardPosition(); + + // For iterative inverse, set starting point far away + kinematics->setPosition(qzero); + kinematics->updateFrames(); + + if (0 == ispuma) + { + rl::kin::Puma::Arm arm; + rl::kin::Puma::Elbow elbow; + rl::kin::Puma::Wrist wrist; + dynamic_cast< rl::kin::Puma* >(kinematics)->parameters(q, arm, elbow, wrist); + dynamic_cast< rl::kin::Puma* >(kinematics)->setArm(arm); + dynamic_cast< rl::kin::Puma* >(kinematics)->setElbow(elbow); + dynamic_cast< rl::kin::Puma* >(kinematics)->setWrist(wrist); + } + + if ( + 0 == ispuma + ? dynamic_cast< ::rl::kin::Puma* >(kinematics)->inversePosition(t, qinv) + : dynamic_cast< ::rl::kin::Kinematics* >(kinematics)->inversePosition(t, qinv, 0, 100) + ) + { + kinematics->setPosition(qinv); + kinematics->updateFrames(); + rl::math::Transform tinv = kinematics->forwardPosition(); + + if ((t.matrix() - tinv.matrix()).norm() > 1e-6) + { + ++wrongT; + } + + if ((q - qinv).norm() > 1e-4) + { + ++wrongs; + } + + if (wrongT < 3 && (t.matrix() - tinv.matrix()).norm() > 1e-6) + { + std::cout << " q = " << q.transpose() << std::endl; + std::cout << " T = " << t.matrix() << std::endl; + std::cout << " qinv = " << qinv.transpose() << std::endl; + std::cout << "Wrong Tinv = " << tinv.matrix() << std::endl; + std::cout << std::endl; + } + + ++ngotinverse; + } + } + + std::cout << "Notice: " + << (0 == ispuma ? "Puma direct " : "Iterative ") << "inverse kinematics " + << "on file " << argv[1] << " " + << "tested with " << n << " cases, " + << ngotinverse << " returned a solution, " + << "thereof " << wrongs << " in wrong configuration, and " + << wrongT << " with completely wrong pose." + << std::endl; + + if (wrongT > 0) + { + std::cerr << "Error: " + << (0 == ispuma ? "Puma direct " : "Iterative ") + << "inverse kinematics " << "on file " << argv[1] + << " gave incorrect poses." << std::endl; + return 1; + } + + if (0 == ngotinverse) + { + std::cerr << "Error: " + << (0 == ispuma ? "Puma direct " : "Iterative ") + << "inverse kinematics "<< "on file " << argv[1] + << " gave no solutions." + << std::endl; + return 1; + } + } + } + catch (const std::exception& e) + { + std::cerr << e.what() << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/rlPrmTest/CMakeLists.txt b/tests/rlPrmTest/CMakeLists.txt new file mode 100644 index 00000000..82bc4eb0 --- /dev/null +++ b/tests/rlPrmTest/CMakeLists.txt @@ -0,0 +1,124 @@ +project(rlPrmTest) + +find_package(Boost REQUIRED) + +find_package(Bullet) +find_package(Ode) +find_package(Pqp) +find_package(Solid) + +if(BULLET_FOUND OR ODE_FOUND OR PQP_FOUND OR SOLID_FOUND) + add_executable( + rlPrmTest + rlPrmTest.cpp + ) + + target_include_directories( + rlPrmTest + PUBLIC + ${Boost_INCLUDE_DIR} + ) + + target_link_libraries( + rlPrmTest + rlplan + rlkin + rlsg + ) + + if(BULLET_FOUND) + add_test( + rlPrmTestBulletUnimationPuma560Boxes1 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + bullet + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 110 -200 60 0 0 0 + -20 0 90 -40 0 0 + ) + + add_test( + rlPrmTestBulletUnimationPuma560Boxes2 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + bullet + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 90 -180 90 0 0 0 + -80 -140 180 30 0 0 + ) + endif(BULLET_FOUND) + + if(ODE_FOUND) + add_test( + rlPrmTestOdeUnimationPuma560Boxes1 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + ode + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 110 -200 60 0 0 0 + -20 0 90 -40 0 0 + ) + + add_test( + rlPrmTestOdeUnimationPuma560Boxes2 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + ode + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 90 -180 90 0 0 0 + -80 -140 180 30 0 0 + ) + endif(ODE_FOUND) + + if(PQP_FOUND) + add_test( + rlPrmTestPqpUnimationPuma560Boxes1 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + pqp + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 110 -200 60 0 0 0 + -20 0 90 -40 0 0 + ) + + add_test( + rlPrmTestPqpUnimationPuma560Boxes2 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + pqp + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 90 -180 90 0 0 0 + -80 -140 180 30 0 0 + ) + endif(PQP_FOUND) + + if(SOLID_FOUND) + add_test( + rlPrmTestSolidUnimationPuma560Boxes1 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + solid + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 110 -200 60 0 0 0 + -20 0 90 -40 0 0 + ) + + add_test( + rlPrmTestSolidUnimationPuma560Boxes2 + ${CMAKE_CURRENT_BINARY_DIR}/rlPrmTest + solid + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlsg/unimation-puma560_boxes.convex.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../../examples/rlkin/unimation-puma560.xml + 17 16 + 90 -180 90 0 0 0 + -80 -140 180 30 0 0 + ) + endif(SOLID_FOUND) +endif(BULLET_FOUND OR ODE_FOUND OR PQP_FOUND OR SOLID_FOUND) diff --git a/tests/rlPrmTest/rlPrmTest.cpp b/tests/rlPrmTest/rlPrmTest.cpp new file mode 100644 index 00000000..60277455 --- /dev/null +++ b/tests/rlPrmTest/rlPrmTest.cpp @@ -0,0 +1,172 @@ +// +// Copyright (c) 2009, Markus Rickert +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef RL_SG_HAVE_BULLET +#include +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_ODE +#include +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP +#include +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_SOLID +#include +#endif // RL_SG_HAVE_SOLID + +int +main(int argc, char** argv) +{ + if (argc < 6) + { + std::cout << "Usage: rlPrmTest ENGINE SCENEFILE KINEMATICSFILE EXPECTED_NUM_VERTICES EXPECTED_NUM_EDGES START1 ... STARTn GOAL1 ... GOALn" << std::endl; + return 1; + } + + try + { + boost::shared_ptr< rl::sg::Scene > scene; + +#ifdef RL_SG_HAVE_BULLET + if ("bullet" == std::string(argv[1])) + { + scene = boost::make_shared< rl::sg::bullet::Scene >(); + } +#endif // RL_SG_HAVE_BULLET +#ifdef RL_SG_HAVE_ODE + if ("ode" == std::string(argv[1])) + { + scene = boost::make_shared< rl::sg::ode::Scene >(); + } +#endif // RL_SG_HAVE_ODE +#ifdef RL_SG_HAVE_PQP + if ("pqp" == std::string(argv[1])) + { + scene = boost::make_shared< rl::sg::pqp::Scene >(); + } +#endif // RL_SG_HAVE_PQP +#ifdef RL_SG_HAVE_SOLID + if ("solid" == std::string(argv[1])) + { + scene = boost::make_shared< rl::sg::solid::Scene >(); + } +#endif // RL_SG_HAVE_SOLID + + scene->load(argv[2]); + + boost::shared_ptr< rl::kin::Kinematics > kinematics(rl::kin::Kinematics::create(argv[3])); + + rl::plan::SimpleModel model; + model.kin = kinematics.get(); + model.model = scene->getModel(0); + model.scene = scene.get(); + + rl::plan::Prm planner; + rl::plan::UniformSampler sampler; + rl::plan::RecursiveVerifier verifier; + + sampler.seed(0); + + planner.model = &model; + planner.sampler = &sampler; + planner.verifier = &verifier; + + sampler.model = &model; + + verifier.delta = 1.0f * rl::math::DEG2RAD; + verifier.model = &model; + + rl::math::Vector start(kinematics->getDof()); + + for (std::size_t i = 0; i < kinematics->getDof(); ++i) + { + start(i) = boost::lexical_cast< rl::math::Real >(argv[i + 6]) * rl::math::DEG2RAD; + } + + planner.start = &start; + + rl::math::Vector goal(kinematics->getDof()); + + for (std::size_t i = 0; i < kinematics->getDof(); ++i) + { + goal(i) = boost::lexical_cast< rl::math::Real >(argv[kinematics->getDof() + i + 6]) * rl::math::DEG2RAD; + } + + planner.goal = &goal; + + rl::util::Timer timer; + + std::cout << "construct() ... " << std::endl;; + timer.start(); + planner.construct(15); + timer.stop(); + std::cout << "construct() " << timer.elapsed() * 1000.0f << " ms" << std::endl; + + std::cout << "solve() ... " << std::endl;; + timer.start(); + bool solved = planner.solve(); + timer.stop(); + std::cout << "solve() " << (solved ? "true" : "false") << " " << timer.elapsed() * 1000.0f << " ms" << std::endl; + + std::cout << "NumVertices: " << planner.getNumVertices() << " NumEdges: " << planner.getNumEdges() << std::endl; + + if (solved) + { + if (boost::lexical_cast< rl::math::Real >(argv[4]) == planner.getNumVertices() && + boost::lexical_cast< rl::math::Real >(argv[5]) == planner.getNumEdges()) + { + return 0; + } + else + { + std::cerr << "NumVertices and NumEdges are not as expected for this test case."; + return 1; + } + } + + return 1; + } + catch (const std::exception& e) + { + std::cout << e.what() << std::endl; + return 1; + } +}